#include #include #include #include #include #include #include "org.h" #include "amino_acids.h" #include "util.h" using namespace std; struct avg { double avg; int index; }; struct Mproteome { vector proteins; //vector bit_scores; double bit_scores[20]; vector files; int ordinal; string org_name; double total; }; struct Fproteome { vector files; int ordinal; string org_name; double total; }; struct v { int id1; int id2; vector counts; string most_unlikely; int uscore; }; void do_counts(Mproteome p1, Mproteome p2, int tag_length, vector& array, int& max, int& min,string& most_unlikely, int& uscore,int SOS_CUTOFF); avg calc_running_avgs(int array[], int max, int min); bool check_composition(string s,int tag_length,amino_acids& aas,int SOSCUTOFF); int get_num_bins(string path,string bfn); int calc_sos_cutoff(string path,string bfn); int main(int argc, char* argv[]) { if(argc<2) { cout<<"Wrong use of function. ./dbc "<>num_orgs_ref>>num_orgs>>tag_length; num_orgs+=num_orgs_ref; //a. hold them all in memory //read in info file. if(FM=="M") { vector proteomes; string eater,org_name,faa_path; int ordinal; instream>>ordinal>>org_name>>faa_path; while(!instream.eof()) { bool already_there=false; for(int i=0; i>ordinal>>org_name>>faa_path; } cout<<"Size of proteomes (M) = "<>eater; while(!instream.eof()) { if(eater[0]=='>') { char buffer[2000]; instream.getline(buffer,2000); string info_line = eater+buffer; string protein; instream>>eater; while(eater[0]!='>' && !instream.eof()) { protein+=eater; instream>>eater; } proteomes.at(i).proteins.push_back(protein); //cout<<"info_line = "< stored_counts; #pragma omp parallel for for(int i=0; i array; for(int f=0; f proteomes; } else { cout<<"Invalid option for File/Memory (FM)."<& array,int& max, int& min,string& most_unlikely,int& uscore,int SOS_CUTOFF) { int sum=0; for(int i=0; i0) { second_do=true; } amino_acids aas; for(int i=0; i=0 && index<20) { score+=p1.bit_scores[index]+p2.bit_scores[index]; array[(int)(score+.5)]+=1; if( (score+.5) rolling_avg; //go forwards double denom=0; double sum=0; double cur_avg=0; for(int i=min; i0) { sum+=array[i]; denom+=1; cur_avg=sum/denom; avg atemp; atemp.avg=log(cur_avg); atemp.index=i; rolling_avg.push_back(atemp); } } for(int i=rolling_avg.size()-1; i>=0; i--) { double diff=log(array[rolling_avg.at(i).index])-rolling_avg.at(i).avg; //double diff=log(counts.at(rolling_avg.at(i).index))-rolling_avg.at(i).avg; //cout<>result; return result; } int calc_sos_cutoff(string path,string bfn) { int result=0; ifstream instream; string infile = path+"/"+bfn+"/"+bfn+"_info.txt"; instream.open(infile.c_str()); if(instream.fail()) { cout<<"Failed to open path to "<>result>>result>>result; result=result*6.5; instream.close(); return result; }