DPRunImpl * new_DPRunImpl_from_argv(int * argc,char ** argv) { DPRunImpl * out; char * temp; out = DPRunImpl_alloc(); if( (temp = strip_out_assigned_argument(argc,argv,"dymem")) != NULL ) { if( strcmp(temp,"explicit") == 0) { out->memory = DPIM_Explicit; } else if( strcmp(temp,"linear") == 0 ) { out->memory = DPIM_Linear; } else if( strcmp(temp,"default") == 0 ) { out->memory = DPIM_Default; } else { warn("String [%s] for dynamic memory layout is not recognised",temp); free_DPRunImpl(out); return NULL; } } if( (temp = strip_out_assigned_argument(argc,argv,"kbyte")) != NULL ) { if( is_integer_string(temp,&out->kbyte_size) == FALSE ) { warn("String [%s] for dynamic memory size is not recognised",temp); free_DPRunImpl(out); return NULL; } } if(strip_out_boolean_argument(argc,argv,"dydebug") == TRUE ) { out->debug = 1; out->memory = DPIM_Explicit; } return out; }
/* Function: free_DnaProfileEnginePara(obj) * * Descrip: Free Function: removes the memory held by obj * Will chain up to owned members and clear all lists * * * Arg: obj [UNKN ] Object that is free'd [DnaProfileEnginePara *] * * Return [UNKN ] Undocumented return value [DnaProfileEnginePara *] * */ DnaProfileEnginePara * free_DnaProfileEnginePara(DnaProfileEnginePara * obj) { int return_early = 0; if( obj == NULL) { warn("Attempting to free a NULL pointer to a DnaProfileEnginePara obj. Should be trappable"); return NULL; } #ifdef PTHREAD assert(pthread_mutex_lock(&(obj->dynamite_mutex)) == 0); #endif if( obj->dynamite_hard_link > 1) { return_early = 1; obj->dynamite_hard_link--; } #ifdef PTHREAD assert(pthread_mutex_unlock(&(obj->dynamite_mutex)) == 0); #endif if( return_early == 1) return NULL; if( obj->dpri != NULL) free_DPRunImpl(obj->dpri); if( obj->rm != NULL) free_RandomModelDNA(obj->rm); if( obj->setpara != NULL) free_LocalCisHitSetPara(obj->setpara); if( obj->lchs != NULL) free_LocalCisHitScore(obj->lchs); ckfree(obj); return NULL; }
int main(int argc,char ** argv) { DPRunImpl * dpri = NULL; ScanWiseHSPImpl * scani = NULL; HSP2HitListImpl * hsp2hiti = NULL; HitListOutputImpl * hloi = NULL; ProteinIndexConstructor * pic = NULL; HSPScanInterface * hsi; HSPScanInterfacePara * para; SearchStatInterface * ssi; SearchStatInterface * ssl; SeqLookupLoadPara * slp; HSPset2HitPairPara * hsp2hit; CompMat * mat; SequenceDB * db; Sequence * seq; int ret; int i; int effective_db_size = 300000; int kk; int count = 0; LinearHSPmanager * lm; HitList * hl; boolean use_mott = 1; boolean trunc_best_hsp = 0; boolean verbose = 0; static struct rusage use; struct timeval t0, t1; gettimeofday(&t0, NULL); dpri = new_DPRunImpl_from_argv(&argc,argv); dpri->memory = DPIM_Explicit; scani = new_ScanWiseHSPImpl_from_argv(&argc,argv); hsp2hiti = new_HSP2HitListImpl_from_argv(&argc,argv); hloi = new_HitListOutputImpl_from_argv(&argc,argv); slp = new_SeqLookupLoadPara_from_argv(&argc,argv); pic = new_ProteinIndexConstructor_from_argv(&argc,argv); hsp2hit = new_HSPset2HitPairPara_from_argv(&argc,argv); para = new_HSPScanInterfacePara_from_argv(&argc,argv); verbose = strip_out_boolean_argument(&argc,argv,"verbose") ; strip_out_boolean_def_argument(&argc,argv,"mott",&use_mott); strip_out_boolean_def_argument(&argc,argv,"besthsp",&trunc_best_hsp); strip_out_integer_argument(&argc,argv,"dbsize",&effective_db_size); #ifdef SCAN_CORBA sorb = get_Wise2Corba_Singleton(&argc,argv,"orbit-local-orb"); #endif if( dpri == NULL ) { fatal("Unable to build DPRun implementation. Bad arguments"); } strip_out_standard_options(&argc,argv,show_help,show_version); if( argc != 2 ) { show_help(stdout); exit(12); } /* ugly, but we don't want to bounce matrices around the network... */ mat = read_Blast_file_CompMat("BLOSUM62.bla"); erroroff(REPORT); hsi = new_HSPScanInterface_from_ScanWiseHSPImpl(scani,pic,slp); ssi = new_Mott_SearchStatInterface(); ssl = new_lookup_SearchStatInterface(40,2.3); if( verbose ) { info("contacted database"); } db = single_fasta_SequenceDB(argv[1]); if( db == NULL ) { fatal("Could not open sequence db...\n"); } for(seq = init_SequenceDB(db,&ret); seq != NULL;seq = get_next_SequenceDB(db) ) { count++; for(i=0;i<seq->len;i++) { if( !isalpha(seq->seq[i]) ) { fatal("Sequence position %d [%c] is not valid",i,seq->seq[i]); } seq->seq[i] = toupper(seq->seq[i]); } info("Processing %s",seq->name); getrusage(RUSAGE_SELF,&use); /* info("Before query %s %.3fu %.3fs\n", seq->name, use.ru_utime.tv_sec + use.ru_utime.tv_usec*MICROSECOND, use.ru_stime.tv_sec + use.ru_stime.tv_usec*MICROSECOND ); */ lm = (*hsi->scan_query)(hsi->data,seq,para); fprintf(stderr,"Got linear manager is %d entries\n",lm->len); if( lm->mat == NULL ) { lm->mat = hard_link_CompMat(mat); } getrusage(RUSAGE_SELF,&use); /* info("After query %s %.3fu %.3fs\n", seq->name, use.ru_utime.tv_sec + use.ru_utime.tv_usec*MICROSECOND, use.ru_stime.tv_sec + use.ru_stime.tv_usec*MICROSECOND ); */ sort_LinearHSPmanager(lm,compare_HSPset_score); if( trunc_best_hsp == 1 ) { for(kk=1;kk<lm->len;kk++) { free_HSPset(lm->set[kk]); lm->set[kk] = NULL; } lm->len = 1; } getrusage(RUSAGE_SELF,&use); /* info("After sort %s %.3fu %.3fs\n", seq->name, use.ru_utime.tv_sec + use.ru_utime.tv_usec*MICROSECOND, use.ru_stime.tv_sec + use.ru_stime.tv_usec*MICROSECOND ); */ hl = HitList_from_HSP_HSP2HitListImpl(hsp2hiti,lm,dpri,hsp2hit); getrusage(RUSAGE_SELF,&use); /* info("After conversion %s %.3fu %.3fs\n", seq->name, use.ru_utime.tv_sec + use.ru_utime.tv_usec*MICROSECOND, use.ru_stime.tv_sec + use.ru_stime.tv_usec*MICROSECOND ); */ free_LinearHSPmanager(lm); if( use_mott == 1 ) { apply_SearchStat_to_HitList(hl,ssi,effective_db_size); } else { for(kk=0;kk<hl->len;kk++) { hl->pair[kk]->bit_score = hl->pair[kk]->raw_score / 2.0; } } sort_HitList_by_score(hl); show_HitList_HitListOutputImpl(hloi,hl,stdout); getrusage(RUSAGE_SELF,&use); /* info("After output %s %.3fu %.3fs\n", seq->name, use.ru_utime.tv_sec + use.ru_utime.tv_usec*MICROSECOND, use.ru_stime.tv_sec + use.ru_stime.tv_usec*MICROSECOND ); */ free_HitList(hl); free_Sequence(seq); } free_DPRunImpl(dpri); free_HSPScanInterface(hsi); gettimeofday(&t1, NULL); fprintf(stderr, "[client stats] queries, time (s): %d %f\n", count, (t1.tv_sec - t0.tv_sec) + (t1.tv_usec - t0.tv_usec) * 1e-6); return 0; }