double IMM::scoreSingleBase(const Sequence &seq,const BOOM::String &str, int index,Symbol s,char c) { const char *p=str.c_str(); switch(getStrand()) { case PLUS_STRAND: { int maxOrder=(index>N ? N : index); for(int order=maxOrder ; order>=0 ; --order) { BOOM::StringMap<double> &model=*(*models)[order]; if(model.isDefined(p,index-order,order+1)) return model.lookup(p,index-order,order+1); } throw BOOM::String("IMM::scoreSingleBase('+',")+ index+",strlen="+strlen(p)+",str="+ str.substring(index,maxOrder)+")"; } case MINUS_STRAND: { /* On the minus strand we have to take our contexts from the right (but only because we trained the model that way) */ int seqLen=str.length(); int maxOrder=seqLen-index-1; if(maxOrder>N) maxOrder=N; for(int order=maxOrder ; order>=0 ; --order) { BOOM::StringMap<double> &model=*(*models)[order]; if(model.isDefined(p,index,order+1)) return model.lookup(p,index,order+1); } throw BOOM::Stacktrace( BOOM::String("IMM::scoreSingleBase('-',")+ index+",strlen="+strlen(p)+",str="+ str.substring(index,maxOrder)+")"); } default: throw BOOM::String(__FILE__)+__LINE__; } }
BOOM::String SignalPeptide::getSequence() { BOOM::String sequence; int n=exons.size(); for(int i=0 ; i<n ; ++i) sequence+=exons[i].getSequence(); if(sequence[0]=='M') sequence=sequence.substring(1,sequence.length()-1); return sequence; }
void PeptideExon::loadSequence(const BOOM::String &substrate) { sequence=substrate.substring(begin,end-begin); }