docs: def fitNullTraitByTrait(self, verbose=False, cache=False, out_dir='./cache', fname=None, rewrite=False):
          """
          Fit null model trait by trait
          """
          read_from_file = False
          if cache:
              assert fname is not None, 'MultiTraitSetTest:: specify fname'
              if not os.path.exists(out_dir): os.makedirs(out_dir)
              out_file = os.path.join(out_dir,fname)
              read_from_file = os.path.exists(out_file) and not rewrite
  
          RV = {}
          if read_from_file:
              f = h5py.File(out_file,'r')
              for p in range(self.P):
                  trait_id = self.traitID[p]
                  g = f[trait_id]
                  RV[trait_id] = {}
                  for key in list(g.keys()):
                      RV[trait_id][key] = g[key][:]
              f.close()
              self.nullST=RV
          else:
              """ create stSet and fit null column by column returns all info """
              if self.stSet is None:
                  y = sp.zeros((self.N,1))
                  self.stSet = MTSet(Y=y, S_R=self.S_R, U_R=self.U_R, F=self.F)
              RV = {}
              for p in range(self.P):
                  trait_id = self.traitID[p]
                  self.stSet.Y = self.Y[:,p:p+1]
                  RV[trait_id] = self.stSet.fitNull()
              self.nullST = RV
              if cache:
                  f = h5py.File(out_file,'w')
                  smartDumpDictHdf5(RV,f)
                  f.close()
          return RV