PageRenderTime 30ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/FISH/src/grids.h

http://ngopt.googlecode.com/
C Header | 304 lines | 193 code | 86 blank | 25 comment | 31 complexity | afd17cab6b9d839ac63d0f1066898334 MD5 | raw file
Possible License(s): GPL-3.0
  1. /*CONVERSION FROM FEATURES TO GRIDS AND TOP HITS ARE TAKEN CARE OF IN THIS FILE*/
  2. void grids(void)
  3. {
  4. FEAT temp1;
  5. CHROMO temp2;
  6. POINTS1 temp;
  7. int temp_var;
  8. int temp_score;
  9. vector<FEAT> CL(Total_Features);
  10. vector<int>::iterator pos;
  11. int i,j,k=0,cumulative=0,ind=0;
  12. if(CG.size()==0)
  13. {
  14. cerr<<"\nfish:error No Data for comparison";
  15. cerr<<"\nThere are no matches to be compared please check your data or refer to the\n";
  16. cerr<<"manual for information on the type of data which can be processed\n";
  17. exit(1);
  18. }
  19. for(i=0;i<CG.size();i++)
  20. {
  21. if(table[CG[i].y-1].feature_id==table[CG[i].x-1].feature_id)
  22. {
  23. if(CG[i].mark==1)
  24. {
  25. MATCHES[MATCHES.size()-1].flag=-101;
  26. while(sub_grid[ind].ext!=true)
  27. ind++;
  28. if(sub_grid[ind].ext==true)
  29. {
  30. sub_grid[ind].points=k-cumulative;
  31. cumulative=k;
  32. }
  33. ind++;
  34. }
  35. continue;
  36. }
  37. if(CL[(table[(CG[i].y)-1].feature_id)].FAMILY.size()==0)
  38. {
  39. temp.contig1=table[CG[i].y-1].contig;
  40. temp.contig2=table[CG[i].x-1].contig;
  41. temp.feat.y=table[CG[i].y-1].feature_id;
  42. temp.feat.x=table[CG[i].x-1].feature_id;
  43. temp.feat.match_score=CG[i].match_score;
  44. temp.feat.check=false;
  45. temp.feat.direction=(table[CG[i].x-1].direction)*(table[CG[i].y-1].direction);
  46. temp.index=k;
  47. temp.flag=0;
  48. temp.DP=0;
  49. temp.in=0;
  50. temp.in_grids=true;
  51. temp.avg_count=1;
  52. CL[table[CG[i].y-1].feature_id].gene1=k;
  53. CL[table[CG[i].y-1].feature_id].FAMILY.push_back(table[CG[i].x-1].feature_id);
  54. MATCHES.push_back(temp);
  55. k++;
  56. }
  57. else
  58. {
  59. pos=find(CL[table[CG[i].y-1].feature_id].FAMILY.begin(),CL[table[CG[i].y-1].feature_id].FAMILY.end(),table[CG[i].x-1].feature_id);
  60. if(pos==CL[table[CG[i].y-1].feature_id].FAMILY.end())
  61. {
  62. temp.contig1=table[CG[i].y-1].contig;
  63. temp.contig2=table[CG[i].x-1].contig;
  64. temp.feat.y=table[CG[i].y-1].feature_id;
  65. temp.feat.x=table[CG[i].x-1].feature_id;
  66. temp.feat.match_score=CG[i].match_score;
  67. temp.feat.check=false;
  68. temp.feat.direction=(table[CG[i].x-1].direction)*(table[CG[i].y-1].direction);
  69. temp.index=k;
  70. temp.flag=0;
  71. temp.DP=0;
  72. temp.in=0;
  73. temp.in_grids=true;
  74. temp.avg_count=1;
  75. CL[table[CG[i].y-1].feature_id].gene1=k;
  76. CL[table[CG[i].y-1].feature_id].FAMILY.push_back(table[CG[i].x-1].feature_id);
  77. MATCHES.push_back(temp);
  78. k++;
  79. }
  80. else
  81. {
  82. if(MAX_SCORE)
  83. {
  84. temp_score=MATCHES[CL[table[CG[i].y-1].feature_id].gene1].feat.match_score;
  85. MATCHES[CL[table[CG[i].y-1].feature_id].gene1].feat.match_score=(MAX(CG[i].match_score,temp_score));
  86. }
  87. else
  88. {
  89. temp_var=MATCHES[CL[table[CG[i].y-1].feature_id].gene1].avg_count;
  90. temp_score=MATCHES[CL[table[CG[i].y-1].feature_id].gene1].feat.match_score;
  91. MATCHES[CL[table[CG[i].y-1].feature_id].gene1].feat.match_score=((temp_var*temp_score)+CG[i].match_score)/(temp_var+1);
  92. (MATCHES[CL[table[CG[i].y-1].feature_id].gene1].avg_count)++;
  93. }
  94. }
  95. }
  96. if(CG[i].mark==1)
  97. {
  98. if(!MATCHES.empty())
  99. MATCHES[MATCHES.size()-1].flag=-101;
  100. while(sub_grid[ind].ext!=true)
  101. ind++;
  102. if(sub_grid[ind].ext==true)
  103. {
  104. sub_grid[ind].points=k-cumulative;
  105. cumulative=k;
  106. }
  107. ind++;
  108. }
  109. }
  110. /*
  111. #############################################
  112. # #
  113. # TOP_HITS without losing Symmetry #
  114. # #
  115. #############################################
  116. */
  117. /* all those feature pairs are removed which are not amongst the top hits
  118. of a given feature */
  119. EX=MATCHES;
  120. sort(EX.begin(),EX.end(),criterion1);
  121. CL.clear();
  122. CL.resize(Total_Features);
  123. vector<FEAT> IC(Total_Features);
  124. //vector<CHROMO>::iterator pos1;
  125. for(i=0;i<EX.size();i++)
  126. {
  127. temp2.index=EX[i].index;
  128. temp2.feature=EX[i].feat.x;
  129. CL[EX[i].feat.y].point_id.push_back(temp2);
  130. }
  131. sort(EX.begin(),EX.end(),criterion2);
  132. for(i=0;i<EX.size();i++)
  133. {
  134. temp2.index=EX[i].index;
  135. temp2.feature=EX[i].feat.y;
  136. IC[EX[i].feat.x].point_id.push_back(temp2);
  137. }
  138. for(i=0;i<CL.size();i++)
  139. if(!CL[i].point_id.empty())
  140. if(CL[i].point_id.size()>TOP_HITS)
  141. for(j=TOP_HITS;j<CL[i].point_id.size();j++)
  142. if(IC[CL[i].point_id[j].feature].point_id.size()>TOP_HITS)
  143. for(k=TOP_HITS;k<IC[CL[i].point_id[j].feature].point_id.size();k++)
  144. if(i==IC[CL[i].point_id[j].feature].point_id[k].feature)
  145. {
  146. TRASH.push_back(CL[i].point_id[j].index);
  147. MATCHES[CL[i].point_id[j].index].in_grids=false;
  148. }
  149. EX.clear();
  150. k=0;
  151. ind=0;
  152. for(grid_iter=MATCHES.begin();grid_iter!=MATCHES.end();++grid_iter)
  153. {
  154. if(grid_iter->in_grids==true)
  155. {
  156. EX.push_back(*grid_iter);
  157. k++;
  158. }
  159. if(grid_iter->in_grids==false&&grid_iter->flag==-101&&!EX.empty())
  160. EX[EX.size()-1].flag=-101;
  161. if(!EX.empty()&&EX[EX.size()-1].flag==-101)
  162. {
  163. while(sub_grid[ind].ext!=true)
  164. ind++;
  165. sub_grid[ind].points=k;
  166. k=0;
  167. ind++;
  168. }
  169. }
  170. MATCHES.clear();
  171. MATCHES=EX;
  172. EX.clear();
  173. /* Reassigning index numbers to points after removing those points from the grid*/
  174. for(i=0;i<MATCHES.size();i++)
  175. MATCHES[i].index=i;
  176. Total_Points=MATCHES.size();
  177. /*
  178. #############################################
  179. # #
  180. #Counting of cells for each pair of contig #
  181. #############################################
  182. */
  183. for(i=0;i<sub_grid.size();i++)
  184. {
  185. if(sub_grid[i].contig1== sub_grid[i].contig2)
  186. sub_grid[i].cells=((nMAX[sub_grid[i].contig1-1].feature)*(nMAX[sub_grid[i].contig1-1].feature-1))/2;
  187. if(sub_grid[i].contig1!=sub_grid[i].contig2)
  188. sub_grid[i].cells=(nMAX[sub_grid[i].contig1-1].feature)*(nMAX[sub_grid[i].contig2-1].feature);
  189. }
  190. /*
  191. ######################################
  192. # #
  193. # Printing the grids file #
  194. # #
  195. ######################################
  196. */ FILE *print_grid;
  197. if(Print_Grid)
  198. {
  199. print_grid=fopen(Grid_File.c_str(),"w");
  200. fprintf(print_grid, "%s",get_time_stamp());
  201. fprintf(print_grid, "FISH v1.0\n");
  202. fprintf(print_grid, "FISH is copyright (c)2003, University of North Carolina at Chapel Hill \n");
  203. fprintf(print_grid, "Authors: Sugata Chakravarty and Todd J. Vision\n\n");
  204. fprintf(print_grid,"Control File = %s\n\n",Control_File.c_str());
  205. fprintf(print_grid,"-parameters\n");
  206. fprintf(print_grid,"\tMIN_SCORE = %d\n",Min_Score);
  207. fprintf(print_grid,"\tTOP_HITS = %d\n\n",TOP_HITS);
  208. fprintf(print_grid,"-subgrids\n");
  209. fprintf(print_grid,"\tcontig1\tcontig2\t points\tcells\n");
  210. for(i=0;i<sub_grid.size();i++)
  211. fprintf(print_grid,"%10d %10d %10d %11.0f\n",sub_grid[i].contig1,sub_grid[i].contig2,sub_grid[i].points, sub_grid[i].cells);
  212. fprintf(print_grid,"\n\n-points\n\n");
  213. fprintf(print_grid,"\tpoint\tcontig1\t contig2\tfeat1\t feat2\t score\n");
  214. for(i=0;i<MATCHES.size();i++)
  215. fprintf(print_grid,"%10d %10d %10d %10d %10d %10d\n",MATCHES[i].index,MATCHES[i].contig1,MATCHES[i].contig2,MATCHES[i].feat.y,MATCHES[i].feat.x, MATCHES[i].feat.match_score);
  216. }
  217. }