entrez_db.cpp
来自「ncbi源码」· C++ 代码 · 共 384 行
CPP
384 行
/* * =========================================================================== * PRODUCTION $Log: entrez_db.cpp,v $ * PRODUCTION Revision 1000.0 2004/06/01 21:26:30 gouriano * PRODUCTION PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.1 * PRODUCTION * =========================================================================== *//* $Id: entrez_db.cpp,v 1000.0 2004/06/01 21:26:30 gouriano Exp $ * =========================================================================== * * PUBLIC DOMAIN NOTICE * National Center for Biotechnology Information * * This software/database is a "United States Government Work" under the * terms of the United States Copyright Act. It was written as part of * the author's official duties as a United States Government employee and * thus cannot be copyrighted. This software/database is freely available * to the public for use. The National Library of Medicine and the U.S. * Government have not placed any restriction on its use or reproduction. * * Although all reasonable efforts have been taken to ensure the accuracy * and reliability of the software and data, the NLM and the U.S. * Government do not and cannot warrant the performance or results that * may be obtained by using this software or data. The NLM and the U.S. * Government disclaim all warranties, express or implied, including * warranties of performance, merchantability or fitness for any particular * purpose. * * Please cite the author in any work or product based on this material. * * =========================================================================== * * Authors: Mike DiCuccio * * File Description: * CDataPlugin_EntrezSearch - load sequence information form Genbank. */#include <ncbi_pch.hpp>#include "entrez_db.hpp"#include <objects/entrez2/Entrez2_id_list.hpp>#include <objects/entrez2/Entrez2_info.hpp>#include <objects/entrez2/Entrez2_eval_boolean.hpp>#include <objects/entrez2/Entrez2_boolean_reply.hpp>#include <objects/entrez2/Entrez2_boolean_exp.hpp>#include <objects/entrez2/Entrez2_boolean_element.hpp>#include <objects/entrez2/Entrez2_docsum.hpp>#include <objects/entrez2/Entrez2_docsum_list.hpp>#include <objects/entrez2/Entrez2_docsum_data.hpp>#include <objects/entrez2/Entrez2_db_id.hpp>#include <objects/entrez2/Entrez2_limits.hpp>#include <gui/core/version.hpp>BEGIN_NCBI_SCOPEUSING_SCOPE(objects);//// db=nucleotide or db=protein//class CEntrezDB_NucProt : public CEntrezDBHandler{public: CEntrezDB_NucProt(const string& db, const string& visible_db) : m_DB(db), m_VisibleDB(visible_db) {} string GetDbName() const { return m_DB; } string GetVisibleDbName() const { return m_VisibleDB; } void GetHeaders(vector<SHeaderInfo>& headers) const { headers.push_back(SHeaderInfo("ID", 1.0)); headers.push_back(SHeaderInfo("Description", 4.0)); } void Format(const CEntrez2_docsum& ds, vector<string>& cols) const { cols.push_back(ds.GetValue("Caption")); cols.push_back(ds.GetValue("Title")); } // retrieve seq-ids for a given set of docsums TIds GetSeqIds(const CEntrez2_docsum_list& ds_list, TSeqIdFlags flags = fDefaults) { TIds ids; ITERATE (CEntrez2_docsum_list::TList, iter, ds_list.GetList()) { const CEntrez2_docsum& ds = **iter; CRef<CSeq_id> id(new CSeq_id()); id->SetGi(ds.GetUid()); ids.push_back(id); } return ids; } TIds GetSeqIds(const CEntrez2_docsum& ds, TSeqIdFlags flags = fDefaults) { TIds ids; CRef<CSeq_id> id(new CSeq_id()); id->SetGi(ds.GetUid()); ids.push_back(id); return ids; }private: string m_DB; string m_VisibleDB;};class CEntrezDB_Genome : public CEntrezDBHandler{public: string GetDbName() const { return "genome"; } string GetVisibleDbName() const { return "Genome"; } void GetHeaders(vector<SHeaderInfo>& headers) const { headers.push_back(SHeaderInfo("ID", 1.0)); headers.push_back(SHeaderInfo("Description", 4.0)); } void Format(const CEntrez2_docsum& ds, vector<string>& cols) const { cols.push_back(ds.GetValue("Caption")); cols.push_back(ds.GetValue("Title")); } // retrieve seq-ids for a given set of docsums TIds GetSeqIds(const CEntrez2_docsum_list& ds_list, TSeqIdFlags flags = fDefaults) { TIds ids; ITERATE (CEntrez2_docsum_list::TList, iter, ds_list.GetList()) { string str = (*iter)->GetValue("Extra"); CRef<CSeq_id> id(new CSeq_id(str)); if (id->Which() != CSeq_id::e_not_set) { ids.push_back(id); } } return ids; } TIds GetSeqIds(const CEntrez2_docsum& ds, TSeqIdFlags flags = fDefaults) { TIds ids; string str = ds.GetValue("Extra"); CRef<CSeq_id> id(new CSeq_id(str)); if (id->Which() != CSeq_id::e_not_set) { ids.push_back(id); } return ids; }};class CEntrezDB_Gene : public CEntrezDBHandler{public: string GetDbName() const { return "gene"; } string GetVisibleDbName() const { return "Entrez Gene"; } void GetHeaders(vector<SHeaderInfo>& headers) const { headers.push_back(SHeaderInfo("Symbol", 1.0)); headers.push_back(SHeaderInfo("Description", 3.0)); headers.push_back(SHeaderInfo("Organism", 3.0)); } void Format(const CEntrez2_docsum& ds, vector<string>& cols) const { cols.push_back(ds.GetValue("Name")); cols.push_back(ds.GetValue("Description")); cols.push_back(ds.GetValue("Orgname")); } // retrieve seq-ids for a given set of docsums TIds GetSeqIds(const CEntrez2_docsum_list& ds_list, TSeqIdFlags flags = fDefaults) { TIds ids; return ids; } TIds GetSeqIds(const CEntrez2_docsum& ds, TSeqIdFlags flags = fDefaults) { TIds ids; return ids; }};class CEntrezDB_HomoloGene : public CEntrezDBHandler{public: string GetDbName() const { return "homologene"; } string GetVisibleDbName() const { return "HomoloGene"; } void GetHeaders(vector<SHeaderInfo>& headers) const { headers.push_back(SHeaderInfo("ID", 1.0)); headers.push_back(SHeaderInfo("Symbol", 3.0)); headers.push_back(SHeaderInfo("Name", 3.0)); headers.push_back(SHeaderInfo("Organism", 3.0)); } void Format(const CEntrez2_docsum& ds, vector<string>& cols) const { cols.push_back(ds.GetValue("GeneID")); cols.push_back(ds.GetValue("Symbol")); cols.push_back(ds.GetValue("Name")); cols.push_back(ds.GetValue("OrgName")); } // retrieve seq-ids for a given set of docsums TIds GetSeqIds(const CEntrez2_docsum_list& ds_list, TSeqIdFlags flags = fDefaults) { TIds ids; return ids; } TIds GetSeqIds(const CEntrez2_docsum& ds, TSeqIdFlags flags = fDefaults) { TIds ids; return ids; }};CRef<CEntrez2_docsum_list>CEntrezDBHandler::Query(const string& terms, size_t& total_uids, size_t start, size_t count){ try { CEntrez2Client& client = x_GetClient(); CEntrez2_eval_boolean req; CEntrez2_boolean_exp& exp = req.SetQuery(); // set the database we're querying exp.SetDb().Set(GetDbName()); // set the query CRef<CEntrez2_boolean_element> elem(new CEntrez2_boolean_element()); elem->SetStr(terms); exp.SetExp().push_back(elem); // get UIDs first, then get the docsums // set some limits - if num > 0, we assume it's correct if (start > 0) { exp.SetLimits().SetOffset_UIDs(start); } if (count > 0) { exp.SetLimits().SetMax_UIDs(count); } req.SetReturn_UIDs(true); CRef<CEntrez2_boolean_reply> query_res = x_GetClient().AskEval_boolean(req); if (query_res) { total_uids = query_res->GetCount(); return client.AskGet_docsum(query_res->GetUids()); } } catch (...) { } return CRef<CEntrez2_docsum_list>();}CEntrez2Client& CEntrezDBHandler::x_GetClient(){ if ( !m_Client ) { m_Client.Reset(new CEntrez2Client()); string tool = "Genome Workbench v."; tool += NStr::IntToString(CPluginVersion::eMajor); tool += "."; tool += NStr::IntToString(CPluginVersion::eMinor); m_Client->SetDefaultRequest().SetTool(tool); } return *m_Client;}CEntrezDBManager::CEntrezDBManager(){ RegisterHandler(*new CEntrezDB_NucProt("nucleotide", "Nucleotide")); RegisterHandler(*new CEntrezDB_NucProt("protein", "Protein")); RegisterHandler(*new CEntrezDB_Gene()); RegisterHandler(*new CEntrezDB_Genome()); /*RegisterHandler(*new CEntrezDB_HomoloGene());*/}void CEntrezDBManager::RegisterHandler(CEntrezDBHandler& handler){ m_Handlers[handler.GetVisibleDbName()] = CRef<CEntrezDBHandler>(&handler);}IEntrezDBHandler& CEntrezDBManager::GetHandler(const string& db) const{ THandlers::const_iterator iter = m_Handlers.find(db); if (iter != m_Handlers.end()) { CRef<CEntrezDBHandler> ref = iter->second; return *ref; } throw runtime_error(string("database not found: ") + db);}void CEntrezDBManager::GetDatabases(list<SDbEntry>& entries){ ITERATE (THandlers, iter, m_Handlers) { SDbEntry entry; entry.db_name = iter->second->GetDbName(); entry.visible_db_name = iter->second->GetVisibleDbName(); entries.push_back(entry); }}END_NCBI_SCOPE/* * =========================================================================== * $Log: entrez_db.cpp,v $ * Revision 1000.0 2004/06/01 21:26:30 gouriano * PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.1 * * Revision 1.1 2004/05/25 17:15:38 dicuccio * Initial revision - moved over from old GenBank search * * =========================================================================== */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?