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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: test_density_map.cpp,v $
  4.  * PRODUCTION Revision 1000.0  2004/06/01 21:22:02  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.2
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: test_density_map.cpp,v 1000.0 2004/06/01 21:22: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.  * Authors:  Mike DiCuccio
  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 <corelib/ncbitime.hpp>
  44. #include <objmgr/object_manager.hpp>
  45. #include <objtools/data_loaders/genbank/gbloader.hpp>
  46. #include <objmgr/scope.hpp>
  47. #include <objmgr/bioseq_handle.hpp>
  48. #include <objmgr/seq_vector.hpp>
  49. #include <objmgr/feat_ci.hpp>
  50. #include <gui/objutils/density_map.hpp>
  51. using namespace ncbi;
  52. using namespace ncbi::objects;
  53. class CTestDensityMap : public CNcbiApplication
  54. {
  55. public:
  56.     void Init();
  57.     int Run();
  58. };
  59. void CTestDensityMap::Init(void)
  60. {
  61.     // Prepare command line descriptions
  62.     auto_ptr<CArgDescriptions> arg_desc(new CArgDescriptions);
  63.     // input file containing the SAGE data (default = stdin)
  64.     arg_desc->AddKey("id", "Accession", "Accession to test",
  65.                      CArgDescriptions::eString);
  66.     arg_desc->AddDefaultKey("iters", "Iterations", "Iterations to test",
  67.                             CArgDescriptions::eInteger, "10");
  68.     arg_desc->AddDefaultKey("window", "WindowSize", "Number of bases per bin",
  69.                             CArgDescriptions::eInteger, "10000");
  70.     // Pass argument descriptions to the application
  71.     //
  72.     SetupArgDescriptions(arg_desc.release());
  73. }
  74. int CTestDensityMap::Run(void)
  75. {
  76.     CArgs args = GetArgs();
  77.     string id_str = args["id"].AsString();
  78.     int iters = args["iters"].AsInteger();
  79.     int window = args["window"].AsInteger();
  80.     CSeq_id id(id_str);
  81.     if (id.Which() == CSeq_id::e_not_set) {
  82.         LOG_POST(Fatal << "can't interpret id = " << id_str);
  83.     }
  84.     CRef<CObjectManager> obj_mgr(new CObjectManager());
  85.     obj_mgr->RegisterDataLoader(*new CGBDataLoader(), CObjectManager::eDefault);
  86.     CScope scope(*obj_mgr);
  87.     scope.AddDefaults();
  88.     CBioseq_Handle handle = scope.GetBioseqHandle(id);
  89.     //
  90.     // first pass: retrieves all features.  We can ignore this pass
  91.     //
  92.     SAnnotSelector sel;
  93.     sel.SetAnnotType(CSeq_annot::TData::e_Ftable)
  94.         .SetOverlapType(SAnnotSelector::eOverlap_TotalRange)
  95.         .SetResolveMethod(SAnnotSelector::eResolve_All)
  96.         .SetDataSource("")
  97.         .SetFeatType(CSeqFeatData::e_Gene)
  98.         ;
  99.         
  100.     CFeat_CI iter(handle, 0, 0, sel);
  101.     cout << "iterations:   " << iters << endl;
  102.     cout << "seq size:     " << handle.GetSeqVector().size() << endl;
  103.     cout << "window:       " << window << endl;
  104.     cout << id_str << ":    " << iter.GetSize() << " features" << endl;
  105.     CStopWatch sw;
  106.     sw.Start();
  107.     TSeqPos sum = 0;
  108.     int i;
  109.     for (i = 0;  i < iters;  ++i) {
  110.         CFeat_CI iter(handle, 0, 0, sel);
  111.         sum += iter.GetSize();
  112.     }
  113.     double e1 = sw.Elapsed();
  114.     cout << "overhead time: " << e1 << " seconds" << endl;
  115.     cout << "overhead/iter: " << e1 / double(iters) << endl;
  116.     cout << endl;
  117.     sw.Start();
  118.     TSeqPos max = 0;
  119.     vector<TSeqPos> bins;
  120.     for (i = 0;  i < iters;  ++i) {
  121.         sum += max = CDensityMap<int>::GetDensityMap(handle, 0, 0, window, sel, bins);
  122.     }
  123.     double e2 = sw.Elapsed();
  124.     cout << "density map:   " << bins.size() << endl;
  125.     cout << "map max:       " << max << endl;
  126.     cout << "map time:      " << e2 << " seconds" << endl;
  127.     cout << "map time/iter: " << (e2) / double(iters) << endl;
  128.     cout << endl;
  129.     
  130.     sw.Start();
  131.     
  132.     CDensityMap<int> new_bins(handle, window);
  133.     for (i = 0; i < iters; ++i ) {
  134.         new_bins.Clear();
  135.         new_bins.AddFeatures(handle, sel);
  136.     }
  137.     double e3 = sw.Elapsed();
  138.     
  139.     cout << "new bins:      " << new_bins.GetBins() << endl;
  140.     cout << "new bins max:  " << new_bins.GetMax() << endl;
  141.     cout << "new bins time: " << e3 << " seconds" << endl;
  142.     cout << "new time/iter: " << (e3) / double(iters) << endl;
  143.  
  144.     return 0;
  145. }
  146. int main(int argc, const char* argv[])
  147. {
  148.     return CTestDensityMap().AppMain(argc, argv, 0, eDS_Default, 0);
  149. }
  150. /*
  151.  * ===========================================================================
  152.  * $Log: test_density_map.cpp,v $
  153.  * Revision 1000.0  2004/06/01 21:22:02  gouriano
  154.  * PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.2
  155.  *
  156.  * Revision 1.2  2004/05/21 22:27:44  gorelenk
  157.  * Added PCH ncbi_pch.hpp
  158.  *
  159.  * Revision 1.1  2004/05/09 23:59:55  dicuccio
  160.  * Standardized names of demo and test applications.  Cleaned up LIB
  161.  * specifications to eliminate unneeded libraries after splitting libgui_utils
  162.  * into libgui_utils and libgui_objutils
  163.  *
  164.  * Revision 1.6  2004/05/06 18:00:11  gorelenk
  165.  * Fixed include to density_map.hpp
  166.  *
  167.  * Revision 1.5  2004/04/13 17:38:46  grichenk
  168.  * Fixed enumerator usage.
  169.  *
  170.  * Revision 1.4  2004/03/23 21:07:55  gorelenk
  171.  * Corrected compilation errors.
  172.  *
  173.  * Revision 1.3  2004/02/09 21:02:46  rsmith
  174.  * compare new and old CDensityMap implementations.
  175.  *
  176.  * Revision 1.2  2004/01/07 17:39:03  vasilche
  177.  * Fixed include path to genbank loader.
  178.  *
  179.  * Revision 1.1  2003/08/15 19:05:42  dicuccio
  180.  * Initial revision
  181.  *
  182.  * ===========================================================================
  183.  */