ThreeStateScore * reload_ThreeStateDB(ThreeStateScore * prev,ThreeStateDB * mdb,int * return_status) { ThreeStateModel * tsm; ThreeStateScore * tss; free_ThreeStateScore(prev); if( mdb->dbtype == TSMDB_SINGLE ) { *return_status = DB_RETURN_END; return NULL; } tsm = read_TSM_ThreeStateDB(mdb,return_status); if( *return_status != DB_RETURN_OK) return NULL; set_startend_policy_ThreeStateModel(tsm,mdb->type,30,0.2); fold_RandomModel_into_ThreeStateModel(tsm,mdb->rm); tss = ThreeStateScore_from_ThreeStateModel(tsm); free_ThreeStateModel(tsm); *return_status = DB_RETURN_OK; return tss; }
void free_objects(void) { if( gwdb != NULL ) gwdb = free_GeneWiseDB(gwdb); if( cdb != NULL ) cdb = free_cDNADB(cdb); if( sdb != NULL ) sdb = free_SequenceDB(sdb); if( cdna != NULL ) cdna = free_cDNA(cdna); if( pro != NULL ) pro = free_Protein(pro); if( tsm != NULL ) tsm = free_ThreeStateModel(tsm); if( tsmdb != NULL ) tsmdb = free_ThreeStateDB(tsmdb); if( gws != NULL ) gws = free_GeneWiseScore(gws); if( hs != NULL ) hs = free_Hscore(hs); if( cm != NULL ) cm = free_CodonMapper(cm); if( cps != NULL ) cps = free_cDNAParser(cps); }
ThreeStateScore * init_ThreeStateDB(ThreeStateDB * mdb,int * return_status) { ThreeStateModel * tsm; ThreeStateScore * tss; if( open_ThreeStateDB(mdb) == FALSE) { warn("Could not open ThreeStateDB, hence could not init it!"); *return_status = DB_RETURN_ERROR; return NULL; } tsm = read_TSM_ThreeStateDB(mdb,return_status); if( *return_status == DB_RETURN_ERROR) return NULL; set_startend_policy_ThreeStateModel(tsm,mdb->type,30,0.2); fold_RandomModel_into_ThreeStateModel(tsm,mdb->rm); tss = ThreeStateScore_from_ThreeStateModel(tsm); free_ThreeStateModel(tsm); *return_status = DB_RETURN_OK; return tss; }
/* Function: free_PhasedHMM(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 [PhasedHMM *] * * Return [UNKN ] Undocumented return value [PhasedHMM *] * */ PhasedHMM * free_PhasedHMM(PhasedHMM * obj) { int return_early = 0; if( obj == NULL) { warn("Attempting to free a NULL pointer to a PhasedHMM 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->tsm != NULL) free_ThreeStateModel(obj->tsm); if( obj->list != NULL) free_ProteinIntronList(obj->list); ckfree(obj); return NULL; }
/* 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; }
boolean open_ThreeStateDB(ThreeStateDB * mdb) { int ret; int return_status; ThreeStateModel * temp; int count; mdb->current_no = 0; switch( mdb->dbtype ) { case TSMDB_SINGLE : return TRUE; /* should be fine! */ case TSMDB_HMMER1PFAM : if( mdb->phdb == NULL ) { warn("No hmmer1 db to open for threestatedb!"); return FALSE; } mdb->phdb->cur = 0; break; case TSMDB_PROTEIN : if( mdb->sdb == NULL ) { warn("Attempting to open a protein tsm with no sequence db!"); return FALSE; } mdb->seq_cache = init_SequenceDB(mdb->sdb,&ret); if( ret == DB_RETURN_ERROR ) { return FALSE; } if( ret == DB_RETURN_END ) { warn("Due to some bad coding, can't cope with single protein databases in tsmdbs. oooops!"); } break; case TSMDB_GENERIC : ((*mdb->open_generic)(mdb)); break; default : warn("Got an unrecognisable tsm db type in opening tsm %d",mdb->dbtype); return FALSE; } if( mdb->hmm_model_start != -1 && mdb->hmm_model_end != -1 ) { for(count=0;count<mdb->hmm_model_start;count++) { temp = read_TSM_ThreeStateDB(mdb,&return_status); free_ThreeStateModel(temp); } } return TRUE; }
boolean free_io_objects(void) { if( use_tsm == TRUE) { free_ThreeStateModel(tsm); } else { free_Protein(pro); } free_CodonTable(ct); if( gf != NULL ) { free_GeneFrequency21(gf); } free_RandomModelDNA(rmd); if( is_embl ) { free_GenomicRegion(embl); } free_Genomic(gen); return TRUE; }
boolean show_output(void) { int i,k; ThreeStateModel * temptsm; AlnBlock * alb; PackAln * pal; MatchSummarySet * mss; Protein * ps; cDNA * cdna; double bits; boolean fitted_res = FALSE; AlnBlockList * alist; AlnBlock * anchored; SequenceSet * set; AlnColumn * alt; Protein * trans; /* sort by bit score first */ sort_Hscore_by_score(hs); if( search_mode == PC_SEARCH_S2DB ) { if( hs->his == NULL || hs->his->total < 1000 ) { info("Cannot fit histogram to a db smaller than 1,000"); fprintf(ofp,"[Warning: Can't fit histogram to a db smaller than 1,000]\n\n"); show_histogram = FALSE; } else { fitted_res = TRUE; fit_Hscore_to_EVD(hs,20); } } /* deal with initialising anchored alignment. * Could be done for either single HMMs or single proteins, * but we will only do it for HMMs at the moment */ if( make_anchored_aln == TRUE ) { if( tsm == NULL ) { warn("Attempting to make an achored alignment without a HMM. impossible!"); make_anchored_aln = FALSE; } else { anchored = single_unit_AlnBlock(tsm->len,"MATCH_STATE"); set = SequenceSet_alloc_std(); } } /* dofus catcher */ if( aln_alg != alg ) { fprintf(ofp,"\n#\n#WARNING!\n#\n# Your alignment algorithm is different from your search algorithm.\n# This is probably quite sensible but will lead to differing scores.\n# Use the search score as an indicator of the significance of the match\n# Read the docs for more information\n#\n"); } fprintf(ofp,"\n\n#High Score list\n"); fprintf(ofp,"#Protein ID DNA Str ID Bits Evalue\n"); fprintf(ofp,"--------------------------------------------------------------------------\n"); for(i=0;i<hs->len;i++) { bits = Score2Bits(hs->ds[i]->score); if( bits < search_cutoff ) { break; } if( fitted_res == TRUE && evalue_search_str != NULL ) { if( hs->ds[i]->evalue > evalue_search_cutoff ) break; } if( fitted_res == TRUE) fprintf(ofp,"Protein %-20sDNA [%c] %-24s %.2f %.2g\n",hs->ds[i]->query->name,hs->ds[i]->target->is_reversed == TRUE ? '-' : '+',hs->ds[i]->target->name,bits,hs->ds[i]->evalue); else fprintf(ofp,"Protein %-20sDNA [%c] %-24s %.2f\n",hs->ds[i]->query->name,hs->ds[i]->target->is_reversed == TRUE ? '-' : '+',hs->ds[i]->target->name,bits); } if( search_mode == PC_SEARCH_S2DB && show_histogram == TRUE ) { fprintf(ofp,"\n\n#Histogram\n"); fprintf(ofp,"-----------------------------------------------------------------------\n"); PrintASCIIHistogram(hs->his,ofp); } fprintf(ofp,"\n\n#Alignments\n"); fprintf(ofp,"-----------------------------------------------------------------------\n"); for(i=0;i<hs->len;i++) { bits = Score2Bits(hs->ds[i]->score); if( bits < search_cutoff ) { break; } if( i >= aln_number ) { break; } if( fitted_res == TRUE && evalue_search_str != NULL ) { if( hs->ds[i]->evalue > evalue_search_cutoff ) break; } fprintf(ofp,"\n\n>Results for %s vs %s (%s) [%d]\n",hs->ds[i]->query->name,hs->ds[i]->target->name,hs->ds[i]->target->is_reversed == TRUE ? "reverse" : "forward",i+1 ); cdna = get_cDNA_from_cDNADB(cdb,hs->ds[i]->target); temptsm = indexed_ThreeStateModel_ThreeStateDB(tsmdb,hs->ds[i]->query); alb = AlnBlock_from_TSM_estwise_wrap(temptsm,cdna,cps,cm,ct,rmd,aln_alg,use_syn,allN,flat_insert,dpri,&pal); if( alb == NULL ) { warn("Got a NULL alignment. Exiting now due to presumed problems"); fprintf(ofp,"\n\n*Got a NULL alignment. Exiting now due to presumed problems*\n\n"); return FALSE; } if( use_single_pro == FALSE) mss = MatchSummarySet_from_AlnBlock_genewise(alb,temptsm->name,1,cdna->baseseq); else mss = MatchSummarySet_from_AlnBlock_genewise(alb,pro->baseseq->name,pro->baseseq->offset,cdna->baseseq); if( show_pretty == TRUE ) { fprintf(ofp,"\n%s output\nScore %4.2f bits over entire alignment.\nThis will be different from per-alignment scores. See manual for details\nFor computer parsable output, try %s -help or read the manual\n",program_name,Score2Bits(pal->score),program_name); if( use_syn == FALSE ) { fprintf(ofp,"Scores as bits over a flat simple random model\n\n"); } else { fprintf(ofp,"Scores as bits over a synchronous coding model\n\n"); } ps = pseudo_Protein_from_ThreeStateModel(temptsm); protcdna_ascii_display(alb,ps->baseseq->seq,ps->baseseq->name,ps->baseseq->offset,cdna,ct,15,main_block,TRUE,ofp); free_Protein(ps); fprintf(ofp,"%s\n",divide_str); } if( show_match_sum == TRUE ) { show_MatchSummary_genewise_header(ofp); show_MatchSummarySet_genewise(mss,ofp); fprintf(ofp,"%s\n",divide_str); } if( show_pep == TRUE ) { alt = alb->start; for(;alt != NULL;) { trans = Protein_from_GeneWise_AlnColumn(cdna->baseseq,alt,1,&alt,ct,is_random_AlnColumn_genewise); if ( trans == NULL ) break; write_fasta_Sequence(trans->baseseq,ofp); free_Protein(trans); } fprintf(ofp,"%s\n",divide_str); } if( show_AlnBlock == TRUE ) { mapped_ascii_AlnBlock(alb,Score2Bits,0,ofp); fprintf(ofp,"%s\n",divide_str); } if( show_PackAln == TRUE ) { show_simple_PackAln(pal,ofp); fprintf(ofp,"%s\n",divide_str); } /* * This goes at the end because it destroys the alb structure */ if( make_anchored_aln == TRUE ) { /* attach sequence to als in alb, so we have it for later use */ alb->seq[1]->data = (void *) cdna->baseseq; /* add to SequenceSet so we can destroy the memory */ add_SequenceSet(set,hard_link_Sequence(cdna->baseseq)); alist = split_AlnBlock(alb,is_random_AlnColumn_genewise); for(k=0;k<alist->len;k++) { /* actually produce the anchored alignment */ /*mapped_ascii_AlnBlock(alist->alb[k],Score2Bits,stderr);*/ add_to_anchored_AlnBlock(anchored,alist->alb[k]); /* dump_ascii_AlnBlock(anchored,stderr);*/ } } alb = free_AlnBlock(alb); pal = free_PackAln(pal); mss = free_MatchSummarySet(mss); cdna = free_cDNA(cdna); temptsm = free_ThreeStateModel(temptsm); } if( do_complete_analysis == TRUE ) { fprintf(ofp,"\n\n#Complete Analysis\n"); fprintf(ofp,"-------------------------------------------------------------\n\n"); /* ok - end of loop over relevant hits. If we have an * anchored alignment, print it out! */ if( make_anchored_aln == TRUE ) { /*dump_ascii_AlnBlock(anchored,stderr);*/ write_mul_estwise_AlnBlock(anchored,ct,ofp); fprintf(ofp,"%s\n",divide_str); } } return TRUE; }