five_column_reader.cpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:7k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: five_column_reader.cpp,v $
  4.  * PRODUCTION Revision 1000.5  2004/06/01 20:58:38  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.9
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: five_column_reader.cpp,v 1000.5 2004/06/01 20:58:38 gouriano Exp $
  10.  * ===========================================================================
  11.  *
  12.  *                            PUBLIC DOMAIN NOTICE
  13.  *               National Center for Biotechnology Information
  14.  *
  15.  *  This software/database is a "United States Government Work" under the
  16.  *  terms of the United States Copyright Act.  It was written as part of
  17.  *  the author's official duties as a United States Government employee and
  18.  *  thus cannot be copyrighted.  This software/database is freely available
  19.  *  to the public for use. The National Library of Medicine and the U.S.
  20.  *  Government have not placed any restriction on its use or reproduction.
  21.  *
  22.  *  Although all reasonable efforts have been taken to ensure the accuracy
  23.  *  and reliability of the software and data, the NLM and the U.S.
  24.  *  Government do not and cannot warrant the performance or results that
  25.  *  may be obtained by using this software or data. The NLM and the U.S.
  26.  *  Government disclaim all warranties, express or implied, including
  27.  *  warranties of performance, merchantability or fitness for any particular
  28.  *  purpose.
  29.  *
  30.  *  Please cite the author in any work or product based on this material.
  31.  *
  32.  * ===========================================================================
  33.  *
  34.  * Authors: Josh Cherry
  35.  *
  36.  * File Description:   Plugin to load five-column feature table
  37.  */
  38. #include <ncbi_pch.hpp>
  39. #include "five_column_reader.hpp"
  40. #include <objtools/readers/readfeat.hpp>
  41. #include <gui/core/idocument.hpp>
  42. #include <gui/core/version.hpp>
  43. #include <gui/plugin/PluginCommandSet.hpp>
  44. #include <gui/plugin/PluginInfo.hpp>
  45. #include <gui/plugin/PluginValue.hpp>
  46. #include <gui/plugin/PluginValueConstraint.hpp>
  47. #include <objects/general/Int_fuzz.hpp>
  48. #include <objects/general/Object_id.hpp>
  49. #include <objects/seqfeat/Cdregion.hpp>
  50. #include <objects/seqfeat/Feat_id.hpp>
  51. #include <objects/seqfeat/Genetic_code.hpp>
  52. #include <objects/seqfeat/SeqFeatData.hpp>
  53. #include <objects/seqfeat/Seq_feat.hpp>
  54. #include <objects/seqloc/Seq_interval.hpp>
  55. #include <objects/seqloc/Seq_loc.hpp>
  56. #include <corelib/ncbistd.hpp>
  57. #include <objmgr/util/feature.hpp>
  58. #include <serial/objostr.hpp>
  59. BEGIN_NCBI_SCOPE
  60. USING_SCOPE(objects);
  61. void CFiveColumnReader::GetInfo(CPluginInfo& info)
  62. {
  63.     info.Reset();
  64.     // version info macro
  65.     info.SetInfo(CPluginVersion::eMajor, CPluginVersion::eMinor, 0,
  66.                  string(__DATE__) + " " + string(__TIME__),
  67.                  "CFiveColumnReader",
  68.                  "Five-column feature table",
  69.                  "Load the contents of a five-column feature table",
  70.                  "");
  71.     // command info
  72.     CPluginCommandSet& cmds     = info.SetCommands();
  73.     CPluginCommand& import_args = cmds.AddDataCommand(eDataCommand_import);
  74.     import_args.AddArgument("id", "ID",
  75.                             CSeq_id::GetTypeInfo(),
  76.                             CPluginArg::TData::e_Single);
  77.     import_args.AddArgument("fname", "File to load", CPluginArg::eFile);
  78.     import_args.AddDefaultArgument("mode", "Accession to use",
  79.                                    CPluginArg::eString,
  80.                                    "Use this ID");
  81.     import_args.SetConstraint("mode", (*CPluginValueConstraint::CreateSet(),
  82.                                        "Use this ID",
  83.                                        "Get accession from file"));
  84. }
  85. void CFiveColumnReader::Import(CPluginMessage& msg)
  86. {
  87.     const CPluginCommand& args = msg.GetRequest().GetCommand();
  88.     CPluginReply& reply = msg.SetReply();
  89.     reply.SetStatus(eMessageStatus_failed);
  90.     LOG_POST(Info << "CFiveColumnReader::Load: start point.");
  91.     const CPluginArg& arg = args["id"];
  92.     IDocument* doc = const_cast<IDocument*>(arg.GetDocument());
  93.     const CSeq_id* id = dynamic_cast<const CSeq_id*>(arg.GetObject());
  94.     const string& fname = args["fname"].AsString();
  95.     try {
  96.         _TRACE("CFiveColumnReader::Load: reading file...");
  97.         CNcbiIfstream is(fname.c_str());
  98.         CRef<CSeq_annot> annot;
  99.         if (args["mode"].AsString() == "Get accession from file") {
  100.             annot = CFeature_table_reader::ReadSequinFeatureTable(is);
  101.         } else {
  102.             // use the id we're handed
  103.             // may need to throw away the first line of file
  104.             // (this allows use of a file that does have a
  105.             // ">Features" line)
  106.             string first;
  107.             getline(is, first);
  108.             if (!(first[0] == '>')) {
  109.                 // it's not a ">" line, so rewind the file
  110.                 is.seekg(0);
  111.             }
  112.             string id_string = id->GetSeqIdString();
  113.             annot = CFeature_table_reader
  114.                 ::ReadSequinFeatureTable(is, id_string, fname);
  115.         }
  116.             
  117.         // this is not the same 'name' that's filled in by
  118.         // ReadSequinFeatureTable, which is within a desc
  119.         annot->SetName(fname);
  120.         string comment = string("Annotations loaded from file ")
  121.             + fname;
  122.         annot->AddComment(comment);
  123.         // save the object in the reply for framework processing
  124.         reply.AddObject(*doc, *annot);
  125.         reply.AddAction(CPluginReplyAction::e_Add_to_document);
  126.         reply.SetStatus(eMessageStatus_success);
  127.     }
  128.     catch (CException& e) {
  129.         LOG_POST(Info << "failed to read five-column file: " << e.what());
  130.         _TRACE("failed to read five-column file: " << e.what() );
  131.     }
  132. #ifndef _DEBUG
  133.     catch (...) {
  134.         _TRACE("failed to read five-column file: unknown error");
  135.     }
  136. #endif
  137. }
  138. END_NCBI_SCOPE
  139. /*
  140.  * =====================================================================
  141.  * $Log: five_column_reader.cpp,v $
  142.  * Revision 1000.5  2004/06/01 20:58:38  gouriano
  143.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.9
  144.  *
  145.  * Revision 1.9  2004/05/21 22:27:48  gorelenk
  146.  * Added PCH ncbi_pch.hpp
  147.  *
  148.  * Revision 1.8  2004/02/13 15:11:28  mjohnson
  149.  * Removed hardcoded plugin help URL
  150.  *
  151.  * Revision 1.7  2004/02/11 21:01:52  jcherry
  152.  * Use file argument rather than manually launching file chooser
  153.  *
  154.  * Revision 1.6  2003/11/24 15:45:39  dicuccio
  155.  * Renamed CVersion to CPluginVersion
  156.  *
  157.  * Revision 1.5  2003/11/18 17:49:26  dicuccio
  158.  * Added standard processing of return values
  159.  *
  160.  * Revision 1.4  2003/11/14 00:20:30  jcherry
  161.  * Added url for help
  162.  *
  163.  * Revision 1.3  2003/11/06 20:12:15  dicuccio
  164.  * Cleaned up handling of USING_SCOPE - removed from all headers
  165.  *
  166.  * Revision 1.2  2003/11/04 17:49:25  dicuccio
  167.  * Changed calling parameters for plugins - pass CPluginMessage instead of paired
  168.  * CPluginCommand/CPluginReply
  169.  *
  170.  * Revision 1.1  2003/11/03 14:58:36  jcherry
  171.  * Initial version
  172.  *
  173.  * =====================================================================
  174.  */