sample a particular set of individuals (Irow) or phenotypes (Icol_pheno) or genotypes (Icol_geno)
        
        Args:
            Irow:           indices for a set of individuals
            Icol_pheno:     indices for a set of phenotypes
            Icol_geno:      indices for a set of SNPs
        
        Returns:
            QTLdata opject holding the specified subset of the data

def subSample(self,Irow=None,Icol_geno=None,Icol_pheno=None):
        """sample a particular set of individuals (Irow) or phenotypes (Icol_pheno) or genotypes (Icol_geno)
        
        Args:
            Irow:           indices for a set of individuals
            Icol_pheno:     indices for a set of phenotypes
            Icol_geno:      indices for a set of SNPs
        
        Returns:
            QTLdata opject holding the specified subset of the data
        """
        C = copy.copy(self)
        if Irow is not None:
            C.genoM = C.genoM[Irow]
            C.phenoM = C.phenoM[Irow]
            C.sample_ID = C.sample_ID[Irow]
        if Icol_geno is not None:
            C.genoM = C.genoM[:,Icol_geno]
            C.genoPos = C.genoPos[Icol_geno]
            C.genoChrom = C.genoChrom[Icol_geno]
            C.genoPos_cum = C.genoPos_cum[Icol_geno]
        if Icol_pheno is not None:
            C.phenoM = C.phenoM[:,Icol_pheno]
            C.phenotype_ID = C.phenotype_ID[Icol_pheno]
            if C.eqtl:
                C.geneID   = C.geneID[Icol_pheno]
                C.gene_pos = C.gene_pos[Icol_pheno,:]
                C.geneIDs  = list(set(C.geneID))
            if C.E != None:
                C.E  = C.E[Icol_pheno]
                C.Es = list(set(C.E))

        C.N = C.genoM.shape[0]
        C.S = C.genoM.shape[1]
        C.P = C.phenoM.shape[1]
        return C