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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: regexplocdemo.cpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 18:11:02  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: regexplocdemo.cpp,v 1000.2 2004/06/01 18:11:02 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: Clifford Clausen
  35. *
  36. * File Description: Demo for CRegexp to CSeq_loc class (CRegexp_loc)
  37. *
  38. * ===========================================================================
  39. */
  40. #include <ncbi_pch.hpp>
  41. #include <algo/sequence/regexp_loc.hpp>
  42. #include <corelib/ncbiapp.hpp>
  43. #include <corelib/ncbiargs.hpp>
  44. #include <corelib/ncbienv.hpp>
  45. #include <objmgr/object_manager.hpp>
  46. #include <objtools/data_loaders/genbank/gbloader.hpp>
  47. #include <objmgr/scope.hpp>
  48. #include <objmgr/seq_vector.hpp>
  49. #include <serial/iterator.hpp>
  50. #include <serial/objistr.hpp>
  51. #include <serial/objostr.hpp>
  52. #include <serial/serial.hpp>
  53. USING_NCBI_SCOPE;
  54. USING_SCOPE(objects);
  55. class CRegexpLocApp : public CNcbiApplication {
  56. public:
  57.     CRegexpLocApp(void) {DisableArgDescriptions();};
  58.     virtual void Init(void);
  59.     virtual int Run(void);
  60. };
  61. void CRegexpLocApp::Init(void)
  62. {
  63.     auto_ptr<CArgDescriptions> argDescr(new CArgDescriptions);
  64.     argDescr->AddKey("a", "accession",
  65.                      "GENBANK accession", CArgDescriptions::eString);
  66.     argDescr->AddKey("r", "PCRE",
  67.                      "Perl Compatible Regular Expression",
  68.                      CArgDescriptions::eString);
  69.     argDescr->SetUsageContext(GetArguments().GetProgramBasename(),
  70.                               "Displays CSeq_loc for CRegexpn", false);
  71.     SetupArgDescriptions(argDescr.release());
  72. }
  73. // Display CSeq_loc
  74. CNcbiOstream& operator<< (CNcbiOstream& os, const CSeq_loc &loc)
  75. {
  76.     auto_ptr<CObjectOStream> los(CObjectOStream::Open(eSerial_AsnText, os));
  77.     *los << loc;
  78.     return os;
  79. };
  80. // Gets raw sequence for input accession, matches pattern to it creating 
  81. // a CSeq_loc, then displays the CSeq_loc
  82. int GetLoc(const string& acc, const string &pat, CSeq_loc &loc, CScope &scope)
  83. {
  84.     CRef<CSeq_id> seq_id(new CSeq_id(acc));
  85.     if (seq_id->Which() == CSeq_id::e_not_set) {
  86.         cerr << "Invalid seq-id: '" << acc << "'" << endl;
  87.         return 1;
  88.     }
  89.     
  90.      CBioseq_Handle bioseq_handle = scope.GetBioseqHandle(*seq_id);
  91.     if (bioseq_handle) {
  92.         CSeqVector sv =
  93.             bioseq_handle.GetSeqVector(CBioseq_Handle::eCoding_Iupac);
  94.         // Get the raw sequence data and display it
  95.         string seq;
  96.         seq.reserve(sv.size());
  97.         sv.GetSeqData(0, sv.size(), seq);
  98.         cout << "seq=" << seq << endl;
  99.         
  100.         // Set pattern
  101.         CRegexp_loc rl(pat);
  102.         
  103.         // Find matches
  104.         TSeqPos offset = 0;
  105.         do {
  106.             // Get match
  107.             offset = rl.GetLoc(seq.c_str(), &loc, offset) + 1;
  108.             cout << offset << endl;
  109.             // Add seq_id to loc so it will display OK 
  110.             for (CTypeIterator<CSeq_interval> it(Begin(loc)); it; ++it) {
  111.                 it->SetId(*seq_id);
  112.             }
  113.             // Display loc           
  114.             cout << loc << endl;
  115.         } while (offset != 0 && offset < seq.size());
  116.         
  117.         return 0;
  118.     } else {
  119.         cerr << "Bioseq load FAILED." << endl;
  120.         return 2;
  121.     }
  122. }
  123. int CRegexpLocApp::Run(void)
  124. {
  125.     const CArgs& args = GetArgs();
  126.     CRef<CObjectManager> objMgr(new CObjectManager);
  127.     objMgr->RegisterDataLoader(*new CGBDataLoader("GENBANK"),
  128.                                CObjectManager::eDefault);
  129.     CScope scope(*objMgr);
  130.     scope.AddDefaults();
  131.     int retCode = 0;
  132.     CSeq_loc loc;
  133.     retCode = GetLoc(args["a"].AsString(),
  134.                      args["r"].AsString(),
  135.                      loc,
  136.                      scope);    
  137.     return retCode;
  138. }
  139. int main(int argc, char** argv)
  140. {
  141.     CRegexpLocApp theApp;
  142.     return theApp.AppMain(argc, argv, NULL, eDS_Default, 0);
  143. }
  144. /*
  145.  * ===========================================================================
  146.  * $Log: regexplocdemo.cpp,v $
  147.  * Revision 1000.2  2004/06/01 18:11:02  gouriano
  148.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  149.  *
  150.  * Revision 1.3  2004/05/21 21:41:04  gorelenk
  151.  * Added PCH ncbi_pch.hpp
  152.  *
  153.  * Revision 1.2  2004/01/07 17:39:28  vasilche
  154.  * Fixed include path to genbank loader.
  155.  *
  156.  * Revision 1.1  2003/07/16 19:22:00  clausen
  157.  * Initial version
  158.  *
  159.  *
  160.  * ===========================================================================
  161.  */