#include "family.h" Family::Family(vector & fam_member, int fam_id) :fam_member(fam_member), fam_id(fam_id){ this->N=fam_member.size(); this->Affected=0; this->UnAffected=0; this->Unknown=0; for(int i=0;inmark = nmark; gcode = new int*[N]; for(int i=0;i & geno_list){ N_typed=0; memset(typed,0,N*sizeof(int)); for(int i=0;iinfo==1){ flag = 1; N_typed++; } typed[i] = flag; } } void Family::print(){ cout << "Family " << fam_id << " has " << N << " members.\n"; cout << " " << Affected << " affected individuals;\n"; cout << " " << UnAffected << " unaffected individuals;\n"; cout << " " << Unknown << " of unknown phenotype.\n\n"; } void Family::compute_weight(){ // compute complete-data weight memset(weight,0,N*sizeof(double)); if(N_typed>0){ double **cholent = new double*[N_typed]; for(int i=0;i, double>::iterator iter; for(int i=0;i(ind_1,ind_2)); if(iter == kinship_coeff.end()){ printf("No IBD coefficient for individual %d from family %d. Please check...\n\n", ind_1,fam_id); exit(1); } kincoefMatrix[nb1][nb1] = 1; for(int j=i+1;j(ind_1,ind_2)); if(iter == kinship_coeff.end()){ printf("No IBD coefficient between individual %d and individual %d from family %d. Please check...\n\n", ind_1,ind_2,fam_id); exit(1); } value = iter->second; if(value>1e-8) { kincoefMatrix[nb1][nb2] = 2*value; kincoefMatrix[nb2][nb1] = 2*value; } } } } } for(int i=0;i, double>::iterator iter; for(int i=0;i(ind_1,ind_2)); if(iter != kinship_coeff.end()){ if(fam_member[i][4]==1) test_weight[i]+=mean; else if(fam_member[i][4]==2) test_weight[i]+=1; } } for(int j=i+1;j(ind_1,ind_2)); if(iter != kinship_coeff.end()){ value = iter->second; if(value>1e-8){ if(fam_member[j][4]==1) test_weight[i]+=2*value*mean; else if(fam_member[j][4]==2) test_weight[i]+=2*value; if(fam_member[i][4]==1) test_weight[j]+=2*value*mean; else if(fam_member[i][4]==2) test_weight[j]+=2*value; } } } } // complete j } // complete i } void Family::compute_test_trio_weight(double mean){ memset(test_trio_weight1,0,N*sizeof(double)); memset(test_trio_weight2,0,N*sizeof(double)); memset(test_trio_weight3,0,N*sizeof(double)); int ind_1, ind_1f, ind_1m; int ind_2; double value_o, value_f, value_m; map, double>::iterator iter; for(int i=0;i(ind_1,ind_2)); if(iter != kinship_coeff.end()){ if(fam_member[j][4]==1) test_trio_weight1[i]+=mean; else if(fam_member[j][4]==2) test_trio_weight1[i]+=1; } } else if(ind_2==ind_1f){ // j is if iter = kinship_coeff.find(pair(ind_1f,ind_2)); if(iter != kinship_coeff.end()){ if(fam_member[j][4]==1) test_trio_weight2[i]+=mean; else if(fam_member[j][4]==2) test_trio_weight2[i]+=1; } } else if(ind_2==ind_1m){ // j is im iter = kinship_coeff.find(pair(ind_1m,ind_2)); if(iter != kinship_coeff.end()){ if(fam_member[j][4]==1) test_trio_weight3[i]+=mean; else if(fam_member[j][4]==2) test_trio_weight3[i]+=1; } } else{ iter = kinship_coeff.find(pair(ind_1,ind_2)); if(iter != kinship_coeff.end()){ value_o = iter->second; if(value_o>1e-8){ if(fam_member[j][4]==1){ iter = kinship_coeff.find(pair(ind_1f,ind_2)); if(iter != kinship_coeff.end()){ value_f = iter->second; iter = kinship_coeff.find(pair(ind_1m,ind_2)); if(iter != kinship_coeff.end()){ value_m = iter->second; if(value_o>value_f && value_o>value_m) // group 1 test_trio_weight1[i]+=2*value_o*mean; else if(value_f>value_o && value_m<1e-8) // group 2 test_trio_weight2[i]+=2*value_f*mean; else if(value_m>value_o && value_f<1e-8) // group 3 test_trio_weight3[i]+=2*value_m*mean; else{ // group 4 test_trio_weight2[i]+=2*value_f*mean; test_trio_weight3[i]+=2*value_m*mean; } } } } else if(fam_member[j][4]==2){ iter = kinship_coeff.find(pair(ind_1f,ind_2)); if(iter != kinship_coeff.end()){ value_f = iter->second; iter = kinship_coeff.find(pair(ind_1m,ind_2)); if(iter != kinship_coeff.end()){ value_m = iter->second; if(value_o>value_f && value_o>value_m) // group 1 test_trio_weight1[i]+=2*value_o; else if(value_f>value_o && value_m<1e-8) // group 2 test_trio_weight2[i]+=2*value_f; else if(value_m>value_o && value_f<1e-8) // group 3 test_trio_weight3[i]+=2*value_m; else{ // group 4 test_trio_weight2[i]+=2*value_f; test_trio_weight3[i]+=2*value_m; } } } } } // i and j related } } } // j's phenotype is 1 or 2 } // complete j } // i is not a founder } // complete i } Family::~Family(){ for(int i=0;i