blast::SDataLoaderConfig InitializeQueryDataLoaderConfiguration(bool query_is_protein, CRef<blast::CLocalDbAdapter> db_adapter) { SDataLoaderConfig retval(query_is_protein); retval.OptimizeForWholeLargeSequenceRetrieval(); /* Load the BLAST database into the data loader configuration for the query * so that if the query sequence(s) are specified as seq-ids, these can be * fetched from the BLAST database being searched */ if (db_adapter->IsBlastDb() && /* this is a BLAST database search */ retval.m_UseBlastDbs && /* the BLAST database data loader is requested */ (query_is_protein == db_adapter->IsProtein())) { /* the same database type is used for both queries and subjects */ // Make sure we don't add the same database more than once vector<string> default_dbs; NStr::Tokenize(retval.m_BlastDbName, " ", default_dbs); if (default_dbs.size() && (find(default_dbs.begin(), default_dbs.end(), db_adapter->GetDatabaseName()) == default_dbs.end())) { CNcbiOstrstream oss; oss << db_adapter->GetDatabaseName() << " " << retval.m_BlastDbName; retval.m_BlastDbName = CNcbiOstrstreamToString(oss); } } if (retval.m_UseBlastDbs) { _TRACE("Initializing query data loader to '" << retval.m_BlastDbName << "' (" << (query_is_protein ? "protein" : "nucleotide") << " BLAST database)"); } if (retval.m_UseGenbank) { _TRACE("Initializing query data loader to use GenBank data loader"); } return retval; }
void CExportStrategy::x_Process_SearchDb(CRef<CSearchDatabase> & db) { if (db.Empty()) { NCBI_THROW(CBlastException, eInvalidArgument, "Empty reference for CSearchDatabase."); } if (db->GetDatabaseName().empty()) { NCBI_THROW(CBlastException, eInvalidArgument, "Error: No database specified"); } // Set database Name CRef<CBlast4_subject> subject_p(new CBlast4_subject); subject_p->SetDatabase(db->GetDatabaseName()); m_QueueSearchRequest->SetSubject(*subject_p); // Set Entrez Query Limitation string entrez_query_limit = db->GetEntrezQueryLimitation(); if(!entrez_query_limit.empty()) { CRef<CBlast4_parameter> p(new CBlast4_parameter); p->SetName(CBlast4Field::GetName(eBlastOpt_EntrezQuery)); CRef<CBlast4_value> v(new CBlast4_value); v->SetString().assign(entrez_query_limit); p->SetValue(*v); _ASSERT(CBlast4Field::Get(eBlastOpt_EntrezQuery).Match(*p)); m_QueueSearchRequest->SetProgram_options().Set().push_back(p); } // Set the GI List Limitation const CSearchDatabase::TGiList& gi_list_limit = db->GetGiListLimitation(); if (!gi_list_limit.empty()) { x_AddParameterToProgramOptions(CBlast4Field::Get(eBlastOpt_GiList), gi_list_limit); } // Set the negative GI list const CSearchDatabase::TGiList& neg_gi_list = db->GetNegativeGiListLimitation(); if (!neg_gi_list.empty()) { x_AddParameterToProgramOptions(CBlast4Field::Get(eBlastOpt_NegativeGiList), neg_gi_list); } // Set the filtering algorithms int algo_id = db->GetFilteringAlgorithm(); if (algo_id != -1) { x_AddParameterToProgramOptions(CBlast4Field::Get(eBlastOpt_DbFilteringAlgorithmId), algo_id); } }
void CExportStrategy::x_Process_SearchDb(CRef<CSearchDatabase> & db) { if (db.Empty()) { NCBI_THROW(CBlastException, eInvalidArgument, "Empty reference for CSearchDatabase."); } if (db->GetDatabaseName().empty()) { NCBI_THROW(CBlastException, eInvalidArgument, "Error: No database specified"); } // Set database Name CRef<CBlast4_subject> subject_p(new CBlast4_subject); subject_p->SetDatabase(db->GetDatabaseName()); m_QueueSearchRequest->SetSubject(*subject_p); // Set Entrez Query Limitation string entrez_query_limit = db->GetEntrezQueryLimitation(); if(!entrez_query_limit.empty()) { CRef<CBlast4_parameter> p(new CBlast4_parameter); p->SetName(CBlast4Field::GetName(eBlastOpt_EntrezQuery)); CRef<CBlast4_value> v(new CBlast4_value); v->SetString().assign(entrez_query_limit); p->SetValue(*v); _ASSERT(CBlast4Field::Get(eBlastOpt_EntrezQuery).Match(*p)); m_QueueSearchRequest->SetProgram_options().Set().push_back(p); } // Set the GI List Limitation const CSearchDatabase::TGiList& gi_list_limit = db->GetGiListLimitation(); if (!gi_list_limit.empty()) { #ifdef NCBI_STRICT_GI vector<int> int_gi_list; ITERATE ( vector<TGi>, it, gi_list_limit ) { int_gi_list.push_back(GI_TO( int, *it)); }