Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int main(int argc, char *argv[])
- {
- int posi;
- int przelacznik=0;
- /** mozna zrobic jakas wartosc ktorej jak nie przekroczy "whole" to wtedy nie zapisuje/nie wrzuca do matrycy
- trzeb zrobic unikalna wartosc ktorej nigdy nie osiaga matryca, i jesli jest rozna (np 8) to nie zapisuje jej**/
- for (int i=0; i<argc; i++ )
- {
- string s(argv[i]);
- posi = s.find("-finput");
- if (posi >=0)
- {
- s.erase(0,7);
- inputfname.assign(s);
- }
- }
- indata = readfile(inputfname);
- string przetwarzane = *indata;
- set<int> s( czy_rowne.begin(), czy_rowne.end() ); /** usuwnie duplikatow z wektora**/
- if(s.size()>1)
- {
- cout<<"Blad! Sekwencje nie sa rowne!!"<<endl;
- return 0;
- }
- string teraz;
- int tyle=0;
- int liczba_s = dlugosci.size(); /// liczba sekwencji, wiele forow od tego dziala wiec dla uscislenia size() zrobilem zmienna :)
- for(int x=0;x<liczba_s;x++)
- {
- teraz=przetwarzane.substr(dlugosci[x],czy_rowne[0]);
- sekwencja A;
- A.idseq=naglowki[x];
- A.seq=teraz;
- cout<<A.idseq<<endl;
- cout<<A.seq<<endl;
- int tyleA=0;
- int tyleC=0;
- int tyleG=0;
- int tyleT=0;
- for(int y=0;y<teraz.size();y++)
- {
- if(teraz[y]=='A')
- {
- tyleA++;
- }
- else if(teraz[y]=='C')
- {
- tyleC++;
- }
- else if(teraz[y]=='T')
- {
- tyleT++;
- }
- else if(teraz[y]=='G')
- {
- tyleG++;
- }
- }
- A.ileA=tyleA;
- A.ileC=tyleC;
- A.ileG=tyleG;
- A.ileT=tyleT;
- seqstack.push_back(A);
- cout<<A.ileC<<endl;
- cout<<A.ileT<<endl;
- cout<<A.ileG<<endl;
- cout<<A.ileA<<endl;
- }
- int rozmiar = przetwarzane.size()/liczba_s;
- matryca = new char *[2];
- for (int i=0; i<liczba_s; i++)
- {
- matryca[i]= new char [rozmiar];
- }
- for(int i=0; i<liczba_s; i++)
- {
- for (int j=0; j<rozmiar; j++)
- {
- matryca[i][j]=' ';
- }
- }
- wynikowa = new float *[rozmiar];
- for(int i=0; i<rozmiar; i++)
- {
- wynikowa[i]= new float [rozmiar];
- }
- for(int i=0; i<rozmiar; i++)
- {
- for (int j=0; j<rozmiar; j++)
- {
- wynikowa[i][j]=8.0;/** wstepnie jest 2, potem sie wymysli wartosc unikalna zeby sie git czytalo czy cos**/
- }
- }
- for(int o=0;o<liczba_s;o++)
- {
- for (int g=0; g<rozmiar; g++)
- {
- matryca[o][g]=seqstack[o].seq.at(g);
- }
- }
- /**liczenie mutuala dla poszczegolnych kolumn**/
- /* for(int i=0; i<pairs.size(); i++)
- {
- it = two.find(string(pairs[i]) );
- if ( it != two.end() )
- {
- it->second = it->second + 1.0;
- //dwojki[string(pary[i])]=2.0;
- }
- else
- {
- two[string(pairs[i])]=1.0;
- }
- }
- for (it = two.begin(); it != two.end(); ++it)
- {
- cout << it->first << setw(5) << it->second << endl;
- }
- // return 0;
- */
- /** pary.erase( unique( pary.begin(), pary.end() ), pary.end() ); **/
- /// to jest mozliwie potrzebne :P
- string first;
- string second;
- vector <string> pairs; /** wstepnie wymyslilem wektor **/
- map<string, float> two;
- map<string, float> ein;
- map<string, float> zwei;
- map<string, float>::iterator it;
- map<string, float>::iterator iti;
- map<string, float>::iterator itj;
- float part = 0.0;
- float whole = 0.0;
- /// nowa taktyka vektory przechowujace wystapienia itych jotych i dwojek bo nie mozna rownolegle puscic 3 forow
- /// od roznych iteratorow zeby zliczyc w 1 forze wzor dla aktualnej pary
- vector <float> ite;
- vector <float> jte;
- vector <float> oba;
- float fo_log = 0.0;
- cout<<endl<<endl;
- for (int i=0; i<rozmiar; i++)
- {
- /// mapa 1 kolumny
- for(int x=0;x<liczba_s;x++)
- {
- first.push_back(matryca[x][i]);
- it = ein.find(first);
- if ( it != ein.end() )
- {
- it->second = it->second + 1.0;
- }
- else
- {
- ein[first]=1.0;
- }
- first.clear();
- }
- for (it = ein.begin(); it != ein.end(); ++it)
- {
- it->second = it->second/liczba_s;
- }
- /* cout<<"pjersza"<<endl;
- for (it = ein.begin(); it != ein.end(); ++it)
- {
- cout << it->first << setw(5) << it->second << endl;
- }*/
- /// koniec mapy 1 kolumny
- for (int j=i+1; j<rozmiar; j++)
- {
- /// mapa liczenia innej kolumny
- for(int x=0;x<liczba_s;x++)
- {
- first.push_back(matryca[x][j]);
- it = zwei.find(first);
- if ( it != zwei.end() )
- {
- it->second = it->second + 1.0;
- }
- else
- {
- zwei[first]=1.0;
- }
- first.clear();
- }
- for (it = zwei.begin(); it != zwei.end(); ++it)
- {
- it->second = it->second/liczba_s;
- }
- /* cout<<"drooga"<<endl;
- for (it = zwei.begin(); it != zwei.end(); ++it)
- {
- cout << it->first << setw(5) << it->second << endl;
- }*/
- /// DWOJKI
- for(int x=0;x<liczba_s;x++)
- {
- first.push_back(matryca[x][i]); /** tutaj robi sie slownik ala pythonowy ktory zbiera pary z danej iteracji: i , j=i+1**/
- first.push_back(matryca[x][j]);
- it = two.find(first);
- if ( it != two.end() )
- {
- it->second = it->second + 1.0;
- }
- else
- {
- two[first]=1.0;
- }
- first.clear();
- }
- for (it = two.begin(); it != two.end(); ++it) /** wyznaczanie wspolczynnikow czestosci (np. para AC byla 0.2)**/
- {
- it->second = it->second/liczba_s;
- }
- /* for (it = two.begin(); it != two.end(); ++it)
- {
- cout << it->first << setw(5) << it->second << endl;
- }*/
- ///liczenie!!!
- part = 0.0;
- whole = 0.0;
- string przechowuje;
- string jeden; /// przechowywanie literek z dwojki
- string drugi;
- float yeden, droogi = 0.0; /// przechowuja wartosci wystapien pojedynczych nukelotydow
- for (it = two.begin(); it != two.end(); ++it)
- {
- przechowuje = it->first;
- //cout<<przechowuje<<" ";
- jeden = przechowuje.at(0);
- drugi = przechowuje.at(1);
- iti = ein.find(jeden);
- /* if ( iti == ein.end() )
- {
- yeden = iti->second;
- }*/
- itj = zwei.find(drugi);
- /* if ( itj == zwei.end() )
- {
- droogi = itj->second;
- } */
- //cout<<it->second<<" "<<iti->second<<" "<<itj->second<<" ";
- fo_log = it->second/(iti->second*itj->second);
- fo_log = log2(fo_log);
- //cout<<fo_log<<" ";
- //cout<<it->second<<" "<<iti->second<<" "<<itj->second<<endl;
- part = it->second * fo_log;
- whole = whole + part;
- //cout<<part<<endl;
- }
- //cout<<whole<<endl; /**tylko zapis do matrycy i wszystko!!!! :) **/
- wynikowa[i][j]=whole;
- whole = 0.0;
- two.clear();
- zwei.clear();
- }
- ein.clear();
- }
- ofstream zapis;
- string filename;
- cout<<"Wprowadz nazwe pliku do ktorego ma byc zapisany wynik programu z roszszerzeniem (np .txt)"<<endl;
- cin>>filename;
- cout<<endl<<endl;
- zapis.open(filename.c_str(), ios::out|ios::trunc); //trunc - wyczyszczenie piku textowego
- zapis.close();
- zapis.open(filename.c_str(), ios::out|ios::app);
- cout<<"Saving..."<<endl;
- for(int a=0;a<rozmiar;a++)
- {
- for(int b=a+1;b<rozmiar;b++)
- {
- zapis << "M" << "(" << a << "," << b << ") = " << wynikowa[a][b] << "\n" ;
- }
- }
- zapis.close();
- /*for(int i=0; i<rozmiar; i++)
- {
- cout<<i<<" ";
- for (int j=0; j<rozmiar; j++)
- {
- cout<<wynikowa[i][j]<<" ";
- }
- cout<<endl;
- }*/
- cout<<"Saving done"<<endl;
- delete wynikowa;
- delete matryca;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement