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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: flatten_asn.cpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 19:43:37  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: flatten_asn.cpp,v 1000.2 2004/06/01 19:43:37 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. * Author:  Aaron Ucko, NCBI
  35. *
  36. * File Description:
  37. *   new (early 2003) flat-file generator -- sample application
  38. *
  39. * ===========================================================================
  40. */
  41. #include <ncbi_pch.hpp>
  42. #include <corelib/ncbiapp.hpp>
  43. #include <serial/objistr.hpp>
  44. #include <serial/serial.hpp>
  45. #include <objects/seqset/Seq_entry.hpp>
  46. #include <objtools/data_loaders/genbank/gbloader.hpp>
  47. #include <objmgr/object_manager.hpp>
  48. #include <objmgr/scope.hpp>
  49. #include <objtools/flat/flat_gbseq_formatter.hpp>
  50. #include <objtools/flat/flat_gff_formatter.hpp>
  51. BEGIN_NCBI_SCOPE
  52. USING_SCOPE(objects);
  53. class CFlatteningApp : public CNcbiApplication
  54. {
  55. public:
  56.     void Init(void);
  57.     int  Run (void);
  58. };
  59. void CFlatteningApp::Init(void)
  60. {
  61.     auto_ptr<CArgDescriptions> arg_desc(new CArgDescriptions);
  62.     arg_desc->SetUsageContext(GetArguments().GetProgramBasename(),
  63.                               "Convert an ASN.1 Seq-entry into a flat report",
  64.                               false);
  65.     arg_desc->AddKey("in", "InputFile", "File to read the Seq-entry from",
  66.                      CArgDescriptions::eInputFile);
  67.     arg_desc->AddDefaultKey("format", "Format", "Output format",
  68.                             CArgDescriptions::eString, "genbank");
  69.     SetupArgDescriptions(arg_desc.release());
  70. }
  71. int CFlatteningApp::Run(void)
  72. {
  73.     const CArgs&   args = GetArgs();
  74.     CObjectManager objmgr;
  75.     CScope         scope(objmgr);
  76.     CRef<CSeq_entry> entry(new CSeq_entry);
  77.     {{
  78.         auto_ptr<CObjectIStream> in
  79.             (CObjectIStream::Open(args["in"].AsString(), eSerial_AsnText));
  80.         *in >> *entry;
  81.     }}
  82.     scope.AddTopLevelSeqEntry(*entry);
  83.     // allow external references
  84.     objmgr.RegisterDataLoader(*new CGBDataLoader("ID"),
  85.                               CObjectManager::eDefault);
  86.     scope.AddDefaults();
  87.     auto_ptr<CObjectOStream> oos;
  88.     auto_ptr<IFlatFormatter> formatter;
  89.     {{
  90.         const string&         format = args["format"].AsString();
  91.         IFlatFormatter::EMode mode   = IFlatFormatter::eMode_Dump;
  92.         if ( !NStr::CompareNocase(format, "gbseq") ) {
  93.             oos.reset(CObjectOStream::Open(eSerial_Xml, cout));
  94.             formatter.reset(new CFlatGBSeqFormatter(*oos, scope, mode));
  95.         } else if ( !NStr::CompareNocase(format, "gff") ) {
  96.             formatter.reset(new CFlatGFFFormatter
  97.                             (*new CFlatTextOStream(cout), scope, mode,
  98.                              CFlatGFFFormatter::fGTFCompat));
  99.         } else {
  100.             IFlatFormatter::EDatabase db;
  101.             if        ( !NStr::CompareNocase(format, "genbank") ) {
  102.                 db = IFlatFormatter::eDB_NCBI;
  103.             } else if ( !NStr::CompareNocase(format, "embl") ) {
  104.                 db = IFlatFormatter::eDB_EMBL;
  105.             } else if ( !NStr::CompareNocase(format, "ddbj") ) {
  106.                 db = IFlatFormatter::eDB_DDBJ;
  107.             } else {
  108.                 ERR_POST(Fatal << "Bad output format " << format);
  109.             }
  110.             formatter.reset(CFlatTextFormatter::New
  111.                             (*new CFlatTextOStream(cout), scope, mode, db));
  112.         }
  113.     }}
  114.     formatter->Format(*entry, *formatter);
  115.     return 0;
  116. }
  117. END_NCBI_SCOPE
  118. USING_NCBI_SCOPE;
  119. int main(int argc, const char** argv)
  120. {
  121.     return CFlatteningApp().AppMain(argc, argv);
  122. }
  123. /*
  124. * ===========================================================================
  125. *
  126. * $Log: flatten_asn.cpp,v $
  127. * Revision 1000.2  2004/06/01 19:43:37  gouriano
  128. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6
  129. *
  130. * Revision 1.6  2004/05/21 21:42:54  gorelenk
  131. * Added PCH ncbi_pch.hpp
  132. *
  133. * Revision 1.5  2004/01/07 17:37:38  vasilche
  134. * Fixed include path to genbank loader.
  135. * Moved split_cache application.
  136. *
  137. * Revision 1.4  2003/10/17 20:59:33  ucko
  138. * Enable the GenBank loader to deal with external references.
  139. *
  140. * Revision 1.3  2003/10/08 21:12:04  ucko
  141. * Support gtf format
  142. *
  143. * Revision 1.2  2003/06/02 16:06:42  dicuccio
  144. * Rearranged src/objects/ subtree.  This includes the following shifts:
  145. *     - src/objects/asn2asn --> arc/app/asn2asn
  146. *     - src/objects/testmedline --> src/objects/ncbimime/test
  147. *     - src/objects/objmgr --> src/objmgr
  148. *     - src/objects/util --> src/objmgr/util
  149. *     - src/objects/alnmgr --> src/objtools/alnmgr
  150. *     - src/objects/flat --> src/objtools/flat
  151. *     - src/objects/validator --> src/objtools/validator
  152. *     - src/objects/cddalignview --> src/objtools/cddalignview
  153. * In addition, libseq now includes six of the objects/seq... libs, and libmmdb
  154. * replaces the three libmmdb? libs.
  155. *
  156. * Revision 1.1  2003/03/10 16:39:09  ucko
  157. * Initial check-in of new flat-file generator
  158. *
  159. *
  160. * ===========================================================================
  161. */