Пример #1
0
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;
}
Пример #2
0
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);

}
Пример #3
0
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;
}
Пример #4
0
/* 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; 
}    
Пример #5
0
/* 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; 
}    
Пример #6
0
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;
}
Пример #7
0
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;
}
Пример #8
0
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;
}