code: def model_mag(self, pardict, use_cache=True):
          
          if pardict == self._cache_key and use_cache:
              #print('{}: using cached'.format(self))
              return self._cache_val
  
          #print('{}: calculating'.format(self))
          self._cache_key = pardict
  
  
          # Generate appropriate parameter vector from dictionary
          p = []
          for l in self.leaf_labels:
              p.extend(pardict[l])
  
          assert len(p) == self.n_params
  
          tot = np.inf
          #print('Building {} mag for {}:'.format(self.band, self))
          for i,m in enumerate(self.leaves):
              mag = m.evaluate(p[i*5:(i+1)*5], self.band)
              # logging.debug('{}: mag={}'.format(self,mag))
              #print('{}: {}({}) = {}'.format(m,self.band,p[i*5:(i+1)*5],mag))
              tot = addmags(tot, mag)
  
          self._cache_val = tot
          return tot
docs: pardict is a dictionary of parameters for all leaves
          gets converted back to traditional parameter vector