/* Function: free_ThreeStateDB(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 [ThreeStateDB *] * * Return [UNKN ] Undocumented return value [ThreeStateDB *] * */ ThreeStateDB * free_ThreeStateDB(ThreeStateDB * obj) { int return_early = 0; if( obj == NULL) { warn("Attempting to free a NULL pointer to a ThreeStateDB 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->filename != NULL) ckfree(obj->filename); /* obj->current_file is linked in */ if( obj->rm != NULL) free_RandomModel(obj->rm); if( obj->single != NULL) free_ThreeStateModel(obj->single); if( obj->phdb != NULL) free_PfamHmmer1DB(obj->phdb); if( obj->sdb != NULL) free_SequenceDB(obj->sdb); if( obj->comp != NULL) free_CompMat(obj->comp); if( obj->seq_cache != NULL) free_Sequence(obj->seq_cache); /* obj->reload_generic is a function pointer */ /* obj->open_generic is a function pointer */ /* obj->close_generic is a function pointer */ /* obj->dataentry_add is a function pointer */ /* obj->open_index_generic is a function pointer */ /* obj->index_generic is a function pointer */ /* obj->close_index_generic is a function pointer */ /* obj->data is linked in */ ckfree(obj); return NULL; }
int main(int argc,char ** argv) { Sequence * query; Sequence * target; CompMat * comp; char * comp_file; int gap = (12); int ext = (2); int a = 120; int b = 10; int c = 3; ComplexSequence * query_cs; ComplexSequence * target_cs; ComplexSequenceEvalSet * evalfunc; boolean show_label_output = FALSE; boolean show_fancy_output = FALSE; boolean use_abc = FALSE; PackAln * pal; AlnBlock * alb; DPRunImpl * dpri = NULL; /* * Process command line options * -h or -help gives us help * -g for gap value (an int) - rely on commandline error processing * -e for ext value (an int) - rely on commandline error processing * -m for matrix (a char) * -l - label output * -f - fancy output * * * Use calls to commandline.h functions * */ if( strip_out_boolean_argument(&argc,argv,"h") == TRUE || strip_out_boolean_argument(&argc,argv,"-help") == TRUE) { show_help(stdout); exit(1); } dpri = new_DPRunImpl_from_argv(&argc,argv); if( dpri == NULL ) { fatal("Unable to build DPRun implementation. Bad arguments"); } show_label_output = strip_out_boolean_argument(&argc,argv,"l"); show_fancy_output = strip_out_boolean_argument(&argc,argv,"f"); /** if all FALSE, set fancy to TRUE **/ if( show_label_output == FALSE ) show_fancy_output = TRUE; (void) strip_out_integer_argument(&argc,argv,"g",&gap); (void) strip_out_integer_argument(&argc,argv,"e",&ext); (void) strip_out_integer_argument(&argc,argv,"a",&a); (void) strip_out_integer_argument(&argc,argv,"b",&b); (void) strip_out_integer_argument(&argc,argv,"c",&c); use_abc = strip_out_boolean_argument(&argc,argv,"abc"); comp_file = strip_out_assigned_argument(&argc,argv,"m"); if( comp_file == NULL) comp_file = "blosum62.bla"; if( argc != 3 ) { warn("Must have two arguments for sequence 1 and sequence 2 %d",argc); show_help(stdout); exit(1); } /* * Read in two sequences */ if( (query=read_fasta_file_Sequence(argv[1])) == NULL ) { fatal("Unable to read the sequence in file %s",argv[1]); } if( (target=read_fasta_file_Sequence(argv[2])) == NULL ) { fatal("Unable to read the sequence in file %s",argv[2]); } /* * Open a blosum matrix. This will be opened from WISECONFIGDIR * or WISEPERSONALDIR if it is not present in the current directory. */ comp = read_Blast_file_CompMat(comp_file); if( comp == NULL ) { fatal("unable to read file %s",comp_file); } /* if abc - factor up matrix! */ if( use_abc == TRUE ) { factor_CompMat(comp,10); } /* * Make an alignment. I don't care about the implementation: * hand it over to sw_wrap function to do it * */ if( use_abc ) { evalfunc = default_aminoacid_ComplexSequenceEvalSet(); query_cs = new_ComplexSequence(query,evalfunc); if( query_cs == NULL ) fatal("Cannot build cs objects!"); target_cs = new_ComplexSequence(target,evalfunc); if( target_cs == NULL ) fatal("Cannot build cs objects!"); pal = PackAln_bestmemory_abc(query_cs,target_cs,comp,-a,-b,-c,NULL,dpri); alb = convert_PackAln_to_AlnBlock_abc(pal); free_ComplexSequence(query_cs); free_ComplexSequence(target_cs); } else { alb = Align_Sequences_ProteinSmithWaterman(query,target,comp,-gap,-ext,dpri); } /* * show output. If multiple outputs, divide using // */ if( show_label_output == TRUE ) { show_flat_AlnBlock(alb,stdout); puts("//\n"); } if( show_fancy_output == TRUE ) { write_pretty_seq_align(alb,query,target,15,50,stdout); puts("//\n"); } /* * Destroy the memory. */ free_Sequence(query); free_Sequence(target); free_CompMat(comp); free_AlnBlock(alb); return 0; }
HSPScanInterface * new_HSPScanInterface_from_ScanWiseHSPImpl(ScanWiseHSPImpl * i,ProteinIndexConstructor * pic,SeqLookupLoadPara * slp) { HSPScanInterface * out; SeqLookupInterface * sli; SequenceDB * db; Sequence * seq; CompMat * mat; int ret; int c; mat = read_Blast_file_CompMat(i->matrix_file); if( i->use_corba == FALSE && i->use_mysql == FALSE && i->use_wiseserver == FALSE && i->use_compress == FALSE && i->use_multiscan == FALSE) { if( i->direct_sequence == NULL ) { fatal("If no server based sequence, must have direct sequence"); } else { db = single_fasta_SequenceDB(i->direct_sequence); sli = new_SeqLookupInterface_from_ProteinIndexConstructor(pic); load_SequenceDB_SeqLookupLoadPara(slp,db,sli); free_SequenceDB(db); out = new_one_off_HSPScanInterface(sli,mat,15,40); } } else if( i->use_corba == TRUE ) { #ifdef SCAN_CORBA if( i->ior_file == NULL ) { fatal("Corba specified, but no ior file given"); } out = new_corba_HSPScan(sorb,i->ior_file,mat); #else fatal("Asking for CORBA, but scanwisep was not compiled with SCAN_CORBA defined."); #endif } else if ( i->use_mysql == TRUE ) { #ifdef SCAN_MYSQL out = new_HSPScanInterface_MysqlProteinIndex(i->host,i->dbname,i->username,i->password,mat,i->step); #else fatal("Asking for mysql, but scanwisep was not compiled with SCAN_MYSQL defined"); #endif } else if ( i->use_wiseserver == TRUE ) { #ifdef SCAN_WISESERVER out = new_wise_transfer_HSPScanInterface(i->host,i->port); #else fatal("Asking for wiseserver, but scanwisep was not compiled with SCAN_WISESERVER defined"); #endif } else if ( i->use_compress == TRUE ) { #ifdef SCAN_COMPRESS sli = new_direct_CompressedProteinLookup(); db = single_fasta_SequenceDB(i->direct_sequence); load_SequenceDB_SeqLookupLoadPara(slp,db,sli); free_SequenceDB(db); out = new_one_off_HSPScanInterface(sli,mat,15,40); #else fatal("Asking for compressed, but scanwisep was not compiled with SCAN_COMPRESS defined"); #endif } else if( i->use_multiscan == TRUE ) { if( i->multiscan_file == NULL ) { fatal("Must provide a file for a multiple server scan"); } out = new_multiclient_HSPScanInterface(i->multiscan_file); } assert(out != NULL); free_CompMat(mat); /* hard linked internally */ return out; }
int main(int argc,char ** argv) { Sequence * query; Sequence * target; ComplexSequence * query_cs; ComplexSequence * target_cs; ComplexSequenceEvalSet * evalfunc; CompMat * comp; char * comp_file; int gap = (12); int ext = (2); boolean show_raw_output = FALSE; boolean show_label_output = FALSE; boolean show_fancy_output = FALSE; boolean has_outputted = FALSE; PackAln * pal; AlnBlock * alb; /* * Process command line options * -h or -help gives us help * -g for gap value (an int) - rely on commandline error processing * -e for ext value (an int) - rely on commandline error processing * -m for matrix (a char) * -r - raw matrix output * -l - label output * -f - fancy output * * * Use calls to commandline.h functions * */ if( strip_out_boolean_argument(&argc,argv,"h") == TRUE || strip_out_boolean_argument(&argc,argv,"-help") == TRUE) { show_help(stdout); exit(1); } show_raw_output = strip_out_boolean_argument(&argc,argv,"r"); show_label_output = strip_out_boolean_argument(&argc,argv,"l"); show_fancy_output = strip_out_boolean_argument(&argc,argv,"f"); /** if all FALSE, set fancy to TRUE **/ if( show_raw_output == FALSE && show_label_output == FALSE ) show_fancy_output = TRUE; (void) strip_out_integer_argument(&argc,argv,"g",&gap); (void) strip_out_integer_argument(&argc,argv,"e",&ext); comp_file = strip_out_assigned_argument(&argc,argv,"m"); if( comp_file == NULL) comp_file = "blosum62.bla"; if( argc != 3 ) { warn("Must have two arguments for sequence 1 and sequence 2 %d",argc); show_help(stdout); exit(1); } /* * Read in two sequences */ if( (query=read_fasta_file_Sequence(argv[1])) == NULL ) { fatal("Unable to read the sequence in file %s",argv[1]); } if( (target=read_fasta_file_Sequence(argv[2])) == NULL ) { fatal("Unable to read the sequence in file %s",argv[2]); } /* * Open a blosum matrix. This will be opened from WISECONFIGDIR * or WISEPERSONALDIR if it is not present in the current directory. */ comp = read_Blast_file_CompMat(comp_file); if( comp == NULL ) { fatal("unable to read file %s",comp_file); } /* * Convert sequences to ComplexSequences: * To do this we need an protein ComplexSequenceEvalSet * */ evalfunc = default_aminoacid_ComplexSequenceEvalSet(); query_cs = new_ComplexSequence(query,evalfunc); if( query_cs == NULL ) { fatal("Unable to make a protein complex sequence from %s",query->name); } target_cs = new_ComplexSequence(target,evalfunc); if( target_cs == NULL ) { fatal("Unable to make a protein complex sequence from %s",target->name); } /* * Make an alignment. I don't care about the implementation: * If the sequences are small enough then it should use explicit memory. * Long sequences should use divide and conquor methods. * * Calling PackAln_bestmemory_ProteinSW is the answer * This function decides on the best method considering the * memory and changes accordingly. It frees the matrix memory * at the end as well. * */ pal = PackAln_bestmemory_ProteinSW(query_cs,target_cs,comp,-gap,-ext,NULL); if( pal == NULL ) { fatal("Unable to make an alignment from %s and %s",query->name,target->name); } /* * ok, make other alignment forms, and be ready to show */ alb = convert_PackAln_to_AlnBlock_ProteinSW(pal); /* * show output. If multiple outputs, divide using // */ if( show_raw_output == TRUE ) { show_simple_PackAln(pal,stdout); puts("//\n"); } if( show_label_output == TRUE ) { show_flat_AlnBlock(alb,stdout); } if( show_fancy_output == TRUE ) { write_pretty_seq_align(alb,query,target,15,50,stdout); puts("//\n"); } /* * Destroy the memory. */ free_Sequence(query); free_Sequence(target); free_CompMat(comp); free_ComplexSequence(query_cs); free_ComplexSequence(target_cs); free_PackAln(pal); free_AlnBlock(alb); return 0; }