Int2 SBlastOptionsSetWindowSize(SBlastOptions* options, Int4 window_size) { if (!options || !options->score_options || !options->word_options) return -1; if (window_size < 0) return -2; if (Blast_QueryIsNucleotide(options->program) == TRUE && Blast_QueryIsTranslated(options->program) == FALSE) return 0; if (window_size == 0) { Int2 status=0; if ((status=BLAST_GetSuggestedWindowSize(options->program, options->score_options->matrix, &window_size)) != 0) return status; } options->word_options->window_size = window_size; return 0; }
Int2 SBlastOptionsSetThreshold(SBlastOptions* options, double threshold) { if (!options || !options->lookup_options || !options->score_options) return -1; if (threshold < 0) return -2; if (Blast_QueryIsNucleotide(options->program) == TRUE && Blast_QueryIsTranslated(options->program) == FALSE) return 0; if (threshold == 0) { Int2 status=0; if ((status=BLAST_GetSuggestedThreshold(options->program, options->score_options->matrix, &threshold)) != 0) return status; } options->lookup_options->threshold = threshold; return 0; }
void CQuerySplitter::x_ComputeQueryContextsForChunks() { const EBlastProgramType kProgram = m_Options->GetProgramType(); const unsigned int kNumContexts = GetNumberOfContexts(kProgram); const ENa_strand kStrandOption = m_Options->GetStrandOption(); auto_ptr<CQueryDataPerChunk> qdpc; if (Blast_QueryIsTranslated(kProgram)) { qdpc.reset(new CQueryDataPerChunk(*m_SplitBlk, kProgram, m_LocalQueryData)); } for (size_t chunk_num = 0; chunk_num < m_NumChunks; chunk_num++) { vector<size_t> queries = m_SplitBlk->GetQueryIndices(chunk_num); for (size_t i = 0; i < queries.size(); i++) { CConstRef<CSeq_loc> sl = m_LocalQueryData->GetSeq_loc(queries[i]); const ENa_strand kStrand = BlastSetup_GetStrand(*sl, kProgram, kStrandOption); if (Blast_QueryIsTranslated(kProgram)) { size_t qlength = qdpc->GetQueryLength(queries[i]); int last_query_chunk = qdpc->GetLastChunk(queries[i]); _ASSERT(last_query_chunk != -1); int shift = s_GetShiftForTranslatedNegStrand(qlength); for (unsigned int ctx = 0; ctx < kNumContexts; ctx++) { // handle the plus strand... if (ctx % NUM_FRAMES < CODON_LENGTH) { if (kStrand == eNa_strand_minus) { m_SplitBlk->AddContextToChunk(chunk_num, kInvalidContext); } else { m_SplitBlk->AddContextToChunk(chunk_num, kNumContexts*queries[i]+ctx); } } else { // handle the negative strand if (kStrand == eNa_strand_plus) { m_SplitBlk->AddContextToChunk(chunk_num, kInvalidContext); } else { if (chunk_num == (size_t)last_query_chunk) { // last chunk doesn't have shift m_SplitBlk->AddContextToChunk(chunk_num, kNumContexts*queries[i]+ctx); } else { m_SplitBlk->AddContextToChunk(chunk_num, kNumContexts*queries[i]+ s_AddShift(ctx, shift)); } } } } } else if (Blast_QueryIsNucleotide(kProgram)) { for (unsigned int ctx = 0; ctx < kNumContexts; ctx++) { // handle the plus strand... if (ctx % NUM_STRANDS == 0) { if (kStrand == eNa_strand_minus) { m_SplitBlk->AddContextToChunk(chunk_num, kInvalidContext); } else { m_SplitBlk->AddContextToChunk(chunk_num, kNumContexts*queries[i]+ctx); } } else { // handle the negative strand if (kStrand == eNa_strand_plus) { m_SplitBlk->AddContextToChunk(chunk_num, kInvalidContext); } else { m_SplitBlk->AddContextToChunk(chunk_num, kNumContexts*queries[i]+ctx); } } } } else if (Blast_QueryIsProtein(kProgram)) { m_SplitBlk->AddContextToChunk(chunk_num, kNumContexts*queries[i]); } else { abort(); } } } }