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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: local_finder.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 18:08:46  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.2
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: local_finder.cpp,v 1000.1 2004/06/01 18:08:46 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:  Alexandre Souvorov
  35.  *
  36.  * File Description:
  37.  *
  38.  */
  39. #include <ncbi_pch.hpp>
  40. #include <corelib/ncbiapp.hpp>
  41. #include <corelib/ncbienv.hpp>
  42. #include <corelib/ncbiargs.hpp>
  43. #include <algo/gnomon/gnomon.hpp>
  44. #include <serial/serial.hpp>
  45. #include <serial/objostr.hpp>
  46. USING_SCOPE(ncbi);
  47. USING_SCOPE(ncbi::objects);
  48. class CLocalFinderApp : public CNcbiApplication
  49. {
  50. public:
  51.     void Init(void);
  52.     int Run(void);
  53. };
  54. void CLocalFinderApp::Init(void)
  55. {
  56.     // Prepare command line descriptions
  57.     auto_ptr<CArgDescriptions> arg_desc(new CArgDescriptions);
  58.     arg_desc->AddKey("input", "InputFile",
  59.                      "File containing FASTA-format sequence",
  60.                      CArgDescriptions::eString);
  61.     arg_desc->AddDefaultKey("from", "From",
  62.                             "From",
  63.                             CArgDescriptions::eInteger,
  64.                             "0");
  65.     arg_desc->AddDefaultKey("to", "To",
  66.                             "To",
  67.                             CArgDescriptions::eInteger,
  68.                             "1000000000");
  69.     arg_desc->AddKey("model", "ModelData",
  70.                      "Model Data",
  71.                      CArgDescriptions::eString);
  72.     arg_desc->AddDefaultKey("ap", "AprioriInfo",
  73.                             "A priori info",
  74.                             CArgDescriptions::eString,
  75.                             "");
  76.     arg_desc->AddDefaultKey("fs", "FrameShifts",
  77.                             "Frame Shifts",
  78.                             CArgDescriptions::eString,
  79.                             "");
  80.     arg_desc->AddFlag("rep", "Repeats");
  81.     // Pass argument descriptions to the application
  82.     //
  83.     SetupArgDescriptions(arg_desc.release());
  84. }
  85. int CLocalFinderApp::Run(void)
  86. {
  87.     CArgs myargs = GetArgs();
  88.     string file         = myargs["input"].AsString();
  89.     int left            = myargs["from"].AsInteger();
  90.     int right           = myargs["to"].AsInteger();
  91.     string modeldata    = myargs["model"].AsString();
  92.     string apriorifile  = myargs["ap"].AsString();
  93.     string shifts       = myargs["fs"].AsString();
  94.     bool repeats        = myargs["rep"];
  95.     CGnomon gnomon;
  96.     // set our model data file
  97.     gnomon.SetModelData(modeldata);
  98.     //
  99.     // read our sequence data
  100.     //
  101.     {{
  102.          CNcbiIfstream from(file.c_str());
  103.          vector<char> seq;
  104.          string line;
  105.          char c;
  106.          getline(from,line);
  107.          while(from >> c) seq.push_back(c);
  108.          gnomon.SetSequence(seq);
  109.      }}
  110.     // set the a priori information
  111.     gnomon.SetAprioriInfo(apriorifile);
  112.     // set the frame shift information
  113.     gnomon.SetFrameShiftInfo(shifts);
  114.     // set the repeats flag
  115.     gnomon.SetRepeats(repeats);
  116.     // set the scan range
  117.     gnomon.SetScanRange(CRange<TSeqPos>(left, right));
  118.     // run!
  119.     gnomon.Run();
  120.     /**
  121.       int cgcontent = 0;
  122.       int len = seq.size();
  123.       right = min(right,len-1);
  124.       for(int i = left; i <= right; ++i)
  125.       {
  126.       int c = toupper(seq[i]);
  127.       if(c == 'C' || c == 'G') ++cgcontent;
  128.       }
  129.       cgcontent = cgcontent*100./(right-left+1)+0.5;
  130.       double e1 = sw.Elapsed();
  131.       if(debug) cerr << "Input time: " << e1 << endl;
  132.       sw.Start();
  133.     // MDD_Donor donor(modeldata,cgcontent);
  134.     WAM_Donor<2> donor(modeldata,cgcontent);
  135.     WAM_Acceptor<2> acceptor(modeldata,cgcontent);
  136.     WMM_Start start(modeldata,cgcontent);
  137.     WAM_Stop stop(modeldata,cgcontent);
  138.     MC3_CodingRegion<5> cdr(modeldata,cgcontent);
  139.     MC_NonCodingRegion<5> intron_reg(modeldata,cgcontent), intergenic_reg(modeldata,cgcontent);
  140.     // NullRegion intron_reg, intergenic_reg;
  141.     Intron::Init(modeldata,cgcontent,right-left+1);
  142.     Intergenic::Init(modeldata,cgcontent,right-left+1);
  143.     Exon::Init(modeldata,cgcontent);
  144.     double e2 = sw.Elapsed();
  145.     if(debug) cerr << "Init time: " << e2 << endl;
  146.     sw.Start();
  147.     bool leftwall = true, rightwall = true;
  148.     SeqScores ss(acceptor, donor, start, stop, cdr, intron_reg, 
  149.     intergenic_reg, seq, left, right, cls, fshifts, repeats, 
  150.     leftwall, rightwall, file);
  151.     HMM_State::SetSeqScores(ss);
  152.     double e3 = sw.Elapsed();
  153.     if(debug) cerr << "Scoring time: " << e3 << endl;
  154.     sw.Start();
  155.     Parse parse(ss);
  156.     double e4 = sw.Elapsed();
  157.     if(debug) cerr << "Parse time: " << e4 << endl;
  158.     sw.Start();
  159.     parse.PrintGenes();
  160.      **/
  161.     // dump the annotation
  162.     CRef<CSeq_annot> annot = gnomon.GetAnnot();
  163.     auto_ptr<CObjectOStream> os(CObjectOStream::Open(eSerial_AsnText, cout));
  164.     *os << *annot;
  165.     return 0;
  166. }
  167. /////////////////////////////////////////////////////////////////////////////
  168. //  MAIN
  169. int main(int argc, const char* argv[])
  170. {
  171.     return CLocalFinderApp().AppMain(argc, argv, 0, eDS_Default, 0);
  172. }
  173. /*
  174.  * ===========================================================================
  175.  * $Log: local_finder.cpp,v $
  176.  * Revision 1000.1  2004/06/01 18:08:46  gouriano
  177.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.2
  178.  *
  179.  * Revision 1.2  2004/05/21 21:41:03  gorelenk
  180.  * Added PCH ncbi_pch.hpp
  181.  *
  182.  * Revision 1.1  2003/10/24 15:07:25  dicuccio
  183.  * Initial revision
  184.  *
  185.  * ===========================================================================
  186.  */