Advertisement
Guest User

Untitled

a guest
May 29th, 2015
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.11 KB | None | 0 0
  1. int main(int argc, char *argv[])
  2. {
  3. int posi;
  4. int przelacznik=0;
  5. /** mozna zrobic jakas wartosc ktorej jak nie przekroczy "whole" to wtedy nie zapisuje/nie wrzuca do matrycy
  6. trzeb zrobic unikalna wartosc ktorej nigdy nie osiaga matryca, i jesli jest rozna (np 8) to nie zapisuje jej**/
  7.  
  8. for (int i=0; i<argc; i++ )
  9. {
  10. string s(argv[i]);
  11. posi = s.find("-finput");
  12. if (posi >=0)
  13. {
  14. s.erase(0,7);
  15. inputfname.assign(s);
  16. }
  17. }
  18. indata = readfile(inputfname);
  19. string przetwarzane = *indata;
  20. set<int> s( czy_rowne.begin(), czy_rowne.end() ); /** usuwnie duplikatow z wektora**/
  21. if(s.size()>1)
  22. {
  23. cout<<"Blad! Sekwencje nie sa rowne!!"<<endl;
  24. return 0;
  25. }
  26. string teraz;
  27. int tyle=0;
  28. int liczba_s = dlugosci.size(); /// liczba sekwencji, wiele forow od tego dziala wiec dla uscislenia size() zrobilem zmienna :)
  29. for(int x=0;x<liczba_s;x++)
  30. {
  31. teraz=przetwarzane.substr(dlugosci[x],czy_rowne[0]);
  32. sekwencja A;
  33. A.idseq=naglowki[x];
  34. A.seq=teraz;
  35. cout<<A.idseq<<endl;
  36. cout<<A.seq<<endl;
  37. int tyleA=0;
  38. int tyleC=0;
  39. int tyleG=0;
  40. int tyleT=0;
  41. for(int y=0;y<teraz.size();y++)
  42. {
  43. if(teraz[y]=='A')
  44. {
  45. tyleA++;
  46. }
  47. else if(teraz[y]=='C')
  48. {
  49. tyleC++;
  50. }
  51. else if(teraz[y]=='T')
  52. {
  53. tyleT++;
  54. }
  55. else if(teraz[y]=='G')
  56. {
  57. tyleG++;
  58. }
  59. }
  60. A.ileA=tyleA;
  61. A.ileC=tyleC;
  62. A.ileG=tyleG;
  63. A.ileT=tyleT;
  64. seqstack.push_back(A);
  65. cout<<A.ileC<<endl;
  66. cout<<A.ileT<<endl;
  67. cout<<A.ileG<<endl;
  68. cout<<A.ileA<<endl;
  69. }
  70. int rozmiar = przetwarzane.size()/liczba_s;
  71. matryca = new char *[2];
  72. for (int i=0; i<liczba_s; i++)
  73. {
  74. matryca[i]= new char [rozmiar];
  75. }
  76. for(int i=0; i<liczba_s; i++)
  77. {
  78. for (int j=0; j<rozmiar; j++)
  79. {
  80. matryca[i][j]=' ';
  81. }
  82. }
  83. wynikowa = new float *[rozmiar];
  84. for(int i=0; i<rozmiar; i++)
  85. {
  86. wynikowa[i]= new float [rozmiar];
  87. }
  88. for(int i=0; i<rozmiar; i++)
  89. {
  90. for (int j=0; j<rozmiar; j++)
  91. {
  92. wynikowa[i][j]=8.0;/** wstepnie jest 2, potem sie wymysli wartosc unikalna zeby sie git czytalo czy cos**/
  93. }
  94. }
  95. for(int o=0;o<liczba_s;o++)
  96. {
  97. for (int g=0; g<rozmiar; g++)
  98. {
  99. matryca[o][g]=seqstack[o].seq.at(g);
  100. }
  101. }
  102.  
  103. /**liczenie mutuala dla poszczegolnych kolumn**/
  104.  
  105. /* for(int i=0; i<pairs.size(); i++)
  106. {
  107. it = two.find(string(pairs[i]) );
  108. if ( it != two.end() )
  109. {
  110. it->second = it->second + 1.0;
  111. //dwojki[string(pary[i])]=2.0;
  112. }
  113. else
  114. {
  115. two[string(pairs[i])]=1.0;
  116. }
  117. }
  118.  
  119. for (it = two.begin(); it != two.end(); ++it)
  120. {
  121. cout << it->first << setw(5) << it->second << endl;
  122. }
  123. // return 0;
  124.  
  125.  
  126. */
  127.  
  128.  
  129. /** pary.erase( unique( pary.begin(), pary.end() ), pary.end() ); **/
  130. /// to jest mozliwie potrzebne :P
  131.  
  132. string first;
  133. string second;
  134. vector <string> pairs; /** wstepnie wymyslilem wektor **/
  135. map<string, float> two;
  136. map<string, float> ein;
  137. map<string, float> zwei;
  138. map<string, float>::iterator it;
  139. map<string, float>::iterator iti;
  140. map<string, float>::iterator itj;
  141. float part = 0.0;
  142. float whole = 0.0;
  143. /// nowa taktyka vektory przechowujace wystapienia itych jotych i dwojek bo nie mozna rownolegle puscic 3 forow
  144. /// od roznych iteratorow zeby zliczyc w 1 forze wzor dla aktualnej pary
  145. vector <float> ite;
  146. vector <float> jte;
  147. vector <float> oba;
  148. float fo_log = 0.0;
  149. cout<<endl<<endl;
  150. for (int i=0; i<rozmiar; i++)
  151. {
  152. /// mapa 1 kolumny
  153. for(int x=0;x<liczba_s;x++)
  154. {
  155.  
  156. first.push_back(matryca[x][i]);
  157. it = ein.find(first);
  158. if ( it != ein.end() )
  159. {
  160. it->second = it->second + 1.0;
  161. }
  162. else
  163. {
  164. ein[first]=1.0;
  165. }
  166. first.clear();
  167. }
  168. for (it = ein.begin(); it != ein.end(); ++it)
  169. {
  170. it->second = it->second/liczba_s;
  171. }
  172. /* cout<<"pjersza"<<endl;
  173. for (it = ein.begin(); it != ein.end(); ++it)
  174. {
  175. cout << it->first << setw(5) << it->second << endl;
  176. }*/
  177. /// koniec mapy 1 kolumny
  178.  
  179. for (int j=i+1; j<rozmiar; j++)
  180. {
  181. /// mapa liczenia innej kolumny
  182. for(int x=0;x<liczba_s;x++)
  183. {
  184. first.push_back(matryca[x][j]);
  185. it = zwei.find(first);
  186. if ( it != zwei.end() )
  187. {
  188. it->second = it->second + 1.0;
  189. }
  190. else
  191. {
  192. zwei[first]=1.0;
  193. }
  194. first.clear();
  195. }
  196. for (it = zwei.begin(); it != zwei.end(); ++it)
  197. {
  198. it->second = it->second/liczba_s;
  199. }
  200. /* cout<<"drooga"<<endl;
  201. for (it = zwei.begin(); it != zwei.end(); ++it)
  202. {
  203. cout << it->first << setw(5) << it->second << endl;
  204. }*/
  205.  
  206. /// DWOJKI
  207. for(int x=0;x<liczba_s;x++)
  208. {
  209. first.push_back(matryca[x][i]); /** tutaj robi sie slownik ala pythonowy ktory zbiera pary z danej iteracji: i , j=i+1**/
  210. first.push_back(matryca[x][j]);
  211. it = two.find(first);
  212. if ( it != two.end() )
  213. {
  214. it->second = it->second + 1.0;
  215. }
  216. else
  217. {
  218. two[first]=1.0;
  219. }
  220. first.clear();
  221. }
  222. for (it = two.begin(); it != two.end(); ++it) /** wyznaczanie wspolczynnikow czestosci (np. para AC byla 0.2)**/
  223. {
  224. it->second = it->second/liczba_s;
  225. }
  226. /* for (it = two.begin(); it != two.end(); ++it)
  227. {
  228. cout << it->first << setw(5) << it->second << endl;
  229. }*/
  230. ///liczenie!!!
  231. part = 0.0;
  232. whole = 0.0;
  233. string przechowuje;
  234. string jeden; /// przechowywanie literek z dwojki
  235. string drugi;
  236. float yeden, droogi = 0.0; /// przechowuja wartosci wystapien pojedynczych nukelotydow
  237. for (it = two.begin(); it != two.end(); ++it)
  238. {
  239. przechowuje = it->first;
  240. //cout<<przechowuje<<" ";
  241. jeden = przechowuje.at(0);
  242. drugi = przechowuje.at(1);
  243. iti = ein.find(jeden);
  244. /* if ( iti == ein.end() )
  245. {
  246. yeden = iti->second;
  247. }*/
  248. itj = zwei.find(drugi);
  249. /* if ( itj == zwei.end() )
  250. {
  251. droogi = itj->second;
  252. } */
  253. //cout<<it->second<<" "<<iti->second<<" "<<itj->second<<" ";
  254. fo_log = it->second/(iti->second*itj->second);
  255. fo_log = log2(fo_log);
  256. //cout<<fo_log<<" ";
  257.  
  258. //cout<<it->second<<" "<<iti->second<<" "<<itj->second<<endl;
  259. part = it->second * fo_log;
  260. whole = whole + part;
  261. //cout<<part<<endl;
  262. }
  263. //cout<<whole<<endl; /**tylko zapis do matrycy i wszystko!!!! :) **/
  264. wynikowa[i][j]=whole;
  265. whole = 0.0;
  266. two.clear();
  267. zwei.clear();
  268. }
  269. ein.clear();
  270. }
  271. ofstream zapis;
  272. string filename;
  273. cout<<"Wprowadz nazwe pliku do ktorego ma byc zapisany wynik programu z roszszerzeniem (np .txt)"<<endl;
  274. cin>>filename;
  275. cout<<endl<<endl;
  276. zapis.open(filename.c_str(), ios::out|ios::trunc); //trunc - wyczyszczenie piku textowego
  277. zapis.close();
  278. zapis.open(filename.c_str(), ios::out|ios::app);
  279. cout<<"Saving..."<<endl;
  280. for(int a=0;a<rozmiar;a++)
  281. {
  282. for(int b=a+1;b<rozmiar;b++)
  283. {
  284. zapis << "M" << "(" << a << "," << b << ") = " << wynikowa[a][b] << "\n" ;
  285. }
  286. }
  287. zapis.close();
  288. /*for(int i=0; i<rozmiar; i++)
  289. {
  290. cout<<i<<" ";
  291. for (int j=0; j<rozmiar; j++)
  292. {
  293. cout<<wynikowa[i][j]<<" ";
  294. }
  295. cout<<endl;
  296. }*/
  297. cout<<"Saving done"<<endl;
  298. delete wynikowa;
  299. delete matryca;
  300. return 0;
  301. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement