cdd_search.cpp

来自「ncbi源码」· C++ 代码 · 共 337 行

CPP
337
字号
/* * =========================================================================== * PRODUCTION $Log: cdd_search.cpp,v $ * PRODUCTION Revision 1000.6  2004/06/01 20:54:50  gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.13 * PRODUCTION * =========================================================================== *//*  $Id: cdd_search.cpp,v 1000.6 2004/06/01 20:54:50 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: *    CAlgoPlugin_CDDSearch - load sequence information from a file. */#include <ncbi_pch.hpp>#include "cdd_search.hpp"#include <connect/ncbi_conn_stream.hpp>#include <gui/core/doc_manager.hpp>#include <gui/core/idocument.hpp>#include <gui/core/version.hpp>#include <gui/plugin/PluginCommandSet.hpp>#include <gui/plugin/PluginInfo.hpp>#include <gui/plugin/PluginRequest.hpp>#include <gui/plugin/PluginValueConstraint.hpp>#include <gui/utils/message_box.hpp>#include <objects/seqalign/Dense_seg.hpp>#include <objects/seqalign/Std_seg.hpp>#include <objects/seqalign/Seq_align.hpp>#include <objmgr/bioseq_handle.hpp>#include <objmgr/object_manager.hpp>#include <objmgr/seq_vector.hpp>#include <objmgr/util/sequence.hpp>#include <objtools/data_loaders/cdd/cdd.hpp>BEGIN_NCBI_SCOPEUSING_SCOPE(objects);CCddDataLoader* CAlgoPlugin_CDDSearch::sm_Loader = NULL;CAlgoPlugin_CDDSearch::~CAlgoPlugin_CDDSearch(){}void CAlgoPlugin_CDDSearch::GetInfo(CPluginInfo& info){    info.Reset();    // version info macro    info.SetInfo(CPluginVersion::eMajor, CPluginVersion::eMinor, 0,                 string(__DATE__) + " " + string(__TIME__),                 "CAlgoPlugin_CDDSearch",                 "Search/Conserved Domains",                 "Search for conserved domains in this protein",                 "");    // command info    CPluginCommandSet& cmds     = info.SetCommands();    CPluginCommand& args   = cmds.AddAlgoCommand(eAlgoCommand_run);    args.AddArgument("id", "Sequence to search",                     CSeq_id::GetTypeInfo());    args.SetConstraint("id",                       (*CPluginValueConstraint::CreateSeqMol(),                        CSeq_inst::eMol_aa));    args.AddDefaultArgument("expect", "Expect value",                            CPluginArg::eDouble, "0.01");    args.AddArgument("filter", "Filter results",                     CPluginArg::eBoolean);    args.AddDefaultArgument("type", "Type to retrieve",                            CPluginArg::eString,                            "Alignment");    args.SetConstraint("type",                       (*CPluginValueConstraint::CreateSet(),                        "Alignment", "Feature table"));}//// Save()// Save the information in a given document into a file//void CAlgoPlugin_CDDSearch::RunCommand(CPluginMessage& msg){    const CPluginCommand& args = msg.GetRequest().GetCommand();    CPluginReply& reply = msg.SetReply();    reply.SetStatus(eMessageStatus_failed);    const CSeq_id&   id  = dynamic_cast<const CSeq_id&>(args["id"].AsObject());    const IDocument* doc = args["id"].GetDocument();    if ( !doc ) {        NcbiMessageBox("No valid sequence found.");        return;    }    bool   filter = args["filter"].AsBoolean();    string type   = args["type"  ].AsString();    double expect = args["expect"].AsDouble();    string filter_str("T");    if ( !filter ) {        filter_str = "F";    }    if (type == "Alignment") {        type = "LONLY";    } else if (type == "Feature table") {        type = "AONLY";    }    CScope& scope = doc->GetScope();    //    // retrieve our protein sequence    // we must pass the sequence in IUPACaa format    //    CBioseq_Handle handle = scope.GetBioseqHandle(id);    CSeqVector vec        = handle.GetSeqVector();    vec.SetCoding(CSeq_data::e_Iupacaa);    string data;    vec.GetSeqData(0, vec.size(), data);    //    // compose our parameters    //    string params("SEQUENCE=");    params += data + "&";    params += "NOHTML&";    params += "DATALIB=cdd&";    params += "EXPECT=" + NStr::DoubleToString(expect) + "&";    params += "GRAPH=1&";    params += "FILTER=" + filter_str + "&";    params += type;    //    // CConn_ServiceStream i/o    //    CConn_ServiceStream cdd_str("CddSearch");    cdd_str << params;    CRef<CSeq_annot> annot(new CSeq_annot());    try {        auto_ptr<CObjectIStream> is            (CObjectIStream::Open(eSerial_AsnText, cdd_str));        *is >> *annot;    }    catch (...) {        // our read failed - it is likely that our output was not ASN.1        string msg("No conserved domains were found for sequence\n");        msg += sequence::GetTitle(handle);        NcbiMessageBox(msg);        return;    }    //    // fix our IDs    //    if (annot->GetData().IsFtable()) {        if (annot->GetData().GetFtable().size() == 0) {            annot.Reset();        } else {            NON_CONST_ITERATE (CSeq_annot::TData::TFtable, iter,                               annot->SetData().SetFtable()) {                CSeq_feat* feat = *iter;                const CSeq_id& this_id = sequence::GetId(feat->SetLocation());                if (this_id.IsLocal()) {                    feat->SetLocation().SetId(id);                }            }        }    } else if (annot->GetData().IsAlign()) {        if (annot->GetData().GetAlign().size() == 0) {            annot.Reset();        } else {            NON_CONST_ITERATE (CSeq_annot::TData::TAlign, iter,                               annot->SetData().SetAlign()) {                CSeq_align& align = **iter;                switch (align.GetSegs().Which()) {                case CSeq_align::TSegs::e_Denseg:                    {{                        CDense_seg& seg = align.SetSegs().SetDenseg();                        NON_CONST_ITERATE(CDense_seg::TIds, id_iter, seg.SetIds()) {                            CSeq_id& this_id = **id_iter;                            if (this_id.IsLocal()) {                                this_id.Assign(id);                            }                        }                    }}                    break;                case CSeq_align::TSegs::e_Std:                    NON_CONST_ITERATE (CSeq_align::TSegs::TStd, iter,                                       align.SetSegs().SetStd()) {                        CStd_seg& seg = **iter;                        NON_CONST_ITERATE(CStd_seg::TIds, id_iter, seg.SetIds()) {                            CSeq_id& this_id = **id_iter;                            if (this_id.IsLocal()) {                                this_id.Assign(id);                            }                        }                    }                    break;                default:                    LOG_POST(Error << "unhandled seq-align type in CDDSearch");                    break;                }            }        }    }    if ( !annot ) {        string msg("No conserved domains were found for sequence\n");        msg += sequence::GetTitle(handle);        NcbiMessageBox(msg);        reply.SetStatus(eMessageStatus_failed);        return;    }    //    // return our object to the framework    //    reply.AddObject(*doc, *annot);    reply.AddAction(CPluginReplyAction::e_Add_to_document);    //    // take care of our data loader    if ( !sm_Loader ) {        DEFINE_STATIC_FAST_MUTEX(s_Mutex);        CFastMutexGuard LOCK(s_Mutex);        if ( !sm_Loader ) {            sm_Loader = new CCddDataLoader();            CDocManager::GetObjectManager().RegisterDataLoader(*sm_Loader);        }    }    scope.AddDataLoader("CDD_DataLoader");    reply.SetStatus(eMessageStatus_success);}END_NCBI_SCOPE/* * =========================================================================== * $Log: cdd_search.cpp,v $ * Revision 1000.6  2004/06/01 20:54:50  gouriano * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.13 * * Revision 1.13  2004/05/21 22:27:46  gorelenk * Added PCH ncbi_pch.hpp * * Revision 1.12  2004/04/16 14:43:15  dicuccio * Deleted dead code * * Revision 1.11  2004/03/24 13:57:19  friedman * Fixed mutex comment * * Revision 1.10  2004/03/23 19:55:18  friedman * Replaced 'static CFastMutex' with DEFINE_STATIC_FAST_MUTEX * * Revision 1.9  2004/03/16 15:37:22  vasilche * Added required include * * Revision 1.8  2004/01/27 18:37:32  dicuccio * Code clean-up.  Use standard names for plugins.  Removed unnecessary #includes * * Revision 1.7  2003/11/24 15:45:25  dicuccio * Renamed CVersion to CPluginVersion * * Revision 1.6  2003/11/18 17:47:57  dicuccio * Made data loader static and thread-safe.  Added standard processing for return values * * Revision 1.5  2003/11/06 20:12:12  dicuccio * Cleaned up handling of USING_SCOPE - removed from all headers * * Revision 1.4  2003/11/04 17:49:22  dicuccio * Changed calling parameters for plugins - pass CPluginMessage instead of paired * CPluginCommand/CPluginReply * * Revision 1.3  2003/10/20 18:30:56  dicuccio * Added CDD data laoder for retrieval of CDD alignment sequences.  Cleaned up * handling of imput streams * * Revision 1.2  2003/10/16 19:38:43  dicuccio * Removed old debugging code * * Revision 1.1  2003/10/16 12:56:35  dicuccio * Added CDD Search facility.  Cleaned up dll_register.cpp * * Revision 1.2  2003/10/07 13:47:05  dicuccio * Renamed CPluginURL* to CPluginValue* * * Revision 1.1  2003/09/16 14:06:48  dicuccio * Initial revision - split from CFileLoader * * =========================================================================== */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?