void *t_PairAlign(void *) { PairAlign a; int n1, n2; bit32_t cur_at; a.ImportFileFormat(read_a._file_format, read_b._file_format); while(1) { pthread_mutex_lock(&mutex_fin); n1=read_a.LoadBatchReads(fin_a); n2=read_b.LoadBatchReads(fin_b); cur_at=read_a._index; a.ImportBatchReads(n1, read_a.mreads, read_b.mreads); pthread_mutex_unlock(&mutex_fin); if(!n1||(n1!=n2)) break; a.Do_Batch(ref); pthread_mutex_lock(&mutex_fout); fout<<a._str_align; fout_unpair<<a._str_align_unpair; cout<<cur_at<<" reads finished. "<<Cal_AllTime()<<" secs passed"<<endl; pthread_mutex_unlock(&mutex_fout); } pthread_mutex_lock(&mutex_fout); n_aligned_pairs+=a.n_aligned_pairs; n_aligned_a+=a.n_aligned_a; n_aligned_b+=a.n_aligned_b; pthread_mutex_unlock(&mutex_fout); };
void Do_SingleAlign() { read_a.CheckFile(fin_a); SingleAlign a; a.ImportFileFormat(read_a._file_format); a.SetFlag('a'); while(read_a.LoadBatchReads(fin_a)) { a.ImportBatchReads(read_a.num, read_a.mreads); a.Do_Batch(ref); fout<<a._str_align; cout<<read_a._index<<" reads finished. "<<Cal_AllTime()<<" secs passed"<<endl; } n_aligned=a.n_aligned; };
void *t_SingleAlign(void *) { SingleAlign a; int n; bit32_t cur_at; a.ImportFileFormat(read_a._file_format); a.SetFlag('a'); while(1) { pthread_mutex_lock(&mutex_fin); n=read_a.LoadBatchReads(fin_a); cur_at=read_a._index; a.ImportBatchReads(read_a.num, read_a.mreads); pthread_mutex_unlock(&mutex_fin); if(!n) break; a.Do_Batch(ref); pthread_mutex_lock(&mutex_fout); fout<<a._str_align; cout<<cur_at<<" reads finished. "<<Cal_AllTime()<<" secs passed"<<endl; pthread_mutex_unlock(&mutex_fout); } pthread_mutex_lock(&mutex_fout); n_aligned+=a.n_aligned; pthread_mutex_unlock(&mutex_fout); };
void Do_PairAlign() { if(param.max_snp_num>0) param.max_snp_num=2; read_a.CheckFile(fin_a); read_b.CheckFile(fin_b); vector<pthread_t> pthread_ids(param.num_procs); //create for(int i=0; i<param.num_procs; i++) pthread_create(&pthread_ids[i], NULL, t_PairAlign, NULL); //join for (int i=0; i<param.num_procs; i++) pthread_join(pthread_ids[i], NULL); // };
void Do_SingleAlign() { read_a.CheckFile(fin_a); vector<pthread_t> pthread_ids(param.num_procs); //create for(int i=0; i<param.num_procs; i++) pthread_create(&pthread_ids[i], NULL, t_SingleAlign, NULL); //join for (int i=0; i<param.num_procs; i++) pthread_join(pthread_ids[i], NULL); };
void Do_PairAlign() { if(param.max_snp_num>0) param.max_snp_num=2; read_a.CheckFile(fin_a); read_b.CheckFile(fin_b); PairAlign a; int n1, n2; while(1) { n1=read_a.LoadBatchReads(fin_a); n2=read_b.LoadBatchReads(fin_b); if(!n1||(n1!=n2)) break; a.ImportBatchReads(n1, read_a.mreads, read_b.mreads); a.Do_Batch(ref); fout<<a._str_align; fout_unpair<<a._str_align_unpair; cout<<read_a._index<<" reads finished. "<<Cal_AllTime()<<" secs passed"<<endl; } n_aligned_pairs=a.n_aligned_pairs; n_aligned_a=a.n_aligned_a; n_aligned_b=a.n_aligned_b; };
void RunProcess(void) { if (!query_a_file.empty()) { fin_a.open(query_a_file.c_str()); if (!fin_a) { cerr << "failed to open file: "<< query_a_file << endl; exit(1); } }else if (!query_q_file.empty()){ fin_a.open(query_q_file.c_str()); param.fin_q = true; if (!fin_a) { cerr << "failed to open file: "<< query_q_file << endl; exit(1); } } else { cerr <<"missing query file(s)\n"; exit(1); } cerr << "Read recruitment:\n"; cerr << "Query: " << query_a_file << " Reference: " << ref_file << endl; fout.open(out_align_file.c_str()); if (!fout) { cerr << "failed to open file: " << out_align_file << endl; exit(1); } unsigned int n_aligned(0); // Number of reads recruited read_a.InitialIndex(); n_aligned=Do_ReadAlign(); fin_a.close(); fout.close(); cerr << "Total number of reads recruited: " << n_aligned << " (" << setprecision(2) << 100.0*n_aligned/read_a._index << "%)\n"; cerr << "Done.\n"; cerr << "Finished at " << Curr_Time(); cerr << "Total time consumed: " << Cal_AllTime() << " secs\n"; }
void RunProcess(void) { //pair-end alignment if((!query_a_file.empty()) && (!query_b_file.empty())) { cout<<"Pair-end alignment:\n"; cout<<"Query: "<<query_a_file<<" "<<query_b_file<<" Reference: "<<ref_file<<" Output: "<<out_align_file<<" "<<out_align_file_unpair<<endl; fin_a.open(query_a_file.c_str()); if(!fin_a) { cerr<<"failed to open file: "<<query_a_file<<endl; exit(1); } fin_b.open(query_b_file.c_str()); if(!fin_b) { cerr<<"failed to open file: "<<query_b_file<<endl; exit(1); } fout.open(out_align_file.c_str()); if(!fout) { cerr<<"failed to open file: "<<out_align_file<<endl; exit(1); } fout_unpair.open(out_align_file_unpair.c_str()); if(!fout_unpair) { cerr<<"failed to open file: "<<out_align_file_unpair<<endl; exit(1); } n_aligned_pairs=n_aligned_a=n_aligned_b=0; read_a.InitialIndex(); read_b.InitialIndex(); Do_PairAlign(); fin_a.close(); fin_b.close(); fout.close(); fout_unpair.close(); cout<<"Total number of aligned reads: \n" <<"pairs: "<<n_aligned_pairs<<" ("<<setprecision(2)<<100.0*n_aligned_pairs/read_a._index<<"%)\n" <<"single a: "<<n_aligned_a<<" ("<<setprecision(2)<<100.0*n_aligned_a/read_a._index<<"%)\n" <<"single b: "<<n_aligned_b<<" ("<<setprecision(2)<<100.0*n_aligned_b/read_b._index<<"%)\n"; } //single-read alignment else { if(!query_a_file.empty()) { fin_a.open(query_a_file.c_str()); if(!fin_a) { cerr<<"b failed to open file: "<<query_a_file<<endl; exit(1); } } else { cerr<<"missing query file(s)\n"; exit(1); } cout<<"Single read alignment:\n"; cout<<"Query: "<<query_a_file<<" Reference: "<<ref_file<<" Output: "<<out_align_file<<endl; fout.open(out_align_file.c_str()); if(!fout) { cerr<<"failed to open file: "<<out_align_file<<endl; exit(1); } n_aligned=0; read_a.InitialIndex(); Do_SingleAlign(); fin_a.close(); fout.close(); cout<<"Total number of aligned reads: "<<n_aligned<<" ("<<setprecision(2) <<100.0*n_aligned/read_a._index<<"%)\n"; } cout<<"Done.\n"; cout<<"Finished at "<<Curr_Time(); cout<<"Total time consumed: "<<Cal_AllTime()<<" secs\n"; };