code: def _genBgTerm_fromXX(self,vTot,vCommon,XX,a=None,c=None):
          
          vSpecific = vTot-vCommon
  
          SP.random.seed(0)
          if c==None: c = SP.randn(self.P)
          XX += 1e-3 * SP.eye(XX.shape[0])
          L = LA.cholesky(XX,lower=True)
  
          # common effect
          R = self.genWeights(self.N,self.P)
          A = self.genTraitEffect()
          if a is not None: A[0,:] = a
          Yc = SP.dot(L,SP.dot(R,A))
          Yc*= SP.sqrt(vCommon)/SP.sqrt(Yc.var(0).mean())
  
          # specific effect
          R = SP.randn(self.N,self.P)
          Yi = SP.dot(L,SP.dot(R,SP.diag(c)))
          Yi*= SP.sqrt(vSpecific)/SP.sqrt(Yi.var(0).mean())
  
          return Yc, Yi
docs: generate background term from SNPs
  
          Args:
              vTot: variance of Yc+Yi
              vCommon: variance of Yc
              XX: kinship matrix
              a: common scales, it can be set for debugging purposes
              c: indipendent scales, it can be set for debugging purposes