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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: seqtest.cpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 21:13:05  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.5
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: seqtest.cpp,v 1000.2 2004/06/01 21:13:05 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:  Denis Vakatov
  35.  *
  36.  * File Description:
  37.  *    CSeqTestApp -- test of OpenGL framework for rendering images as a CGI app
  38.  */
  39. #include <ncbi_pch.hpp>
  40. #include <cgi/cgictx.hpp>
  41. #include <gui/opengl/mesa/glcgi_image.hpp>
  42. #include <gui/opengl/glutils.hpp>
  43. #include <gui/opengl/glcamera.hpp>
  44. #include <objmgr/object_manager.hpp>
  45. #include <objtools/data_loaders/genbank/gbloader.hpp>
  46. #include <objtools/data_loaders/genbank/readers/id1/reader_id1.hpp>
  47. #include <gui/widgets/seq_graphic/seqgraphic_conf.hpp>
  48. #include <gui/widgets/seq_graphic/seqgraphic_ds.hpp>
  49. #include "../seqgraphic_render.hpp"
  50. USING_SCOPE(ncbi);   //using namespace ncbi;
  51. USING_SCOPE(objects);
  52. /////////////////////////////////////////////////////////////////////////////
  53. //  CSeqTestApplication::
  54. //
  55. class CSeqTestApplication : public CGlCgiImageApplication
  56. {
  57. public:
  58.     CSeqTestApplication();
  59.     virtual void Init();
  60.     virtual void Render(CCgiContext& ctx);
  61. private:
  62.     // camrea set-up
  63.     CGlCamera m_Camera;
  64.     CRef<CObjectManager> m_ObjMgr;
  65.     CRef<CScope> m_Scope;
  66.   
  67.     // data source and renderer
  68.     CRef<CSeqGraphicDataSource> m_DataSource;
  69. };
  70. CSeqTestApplication::CSeqTestApplication()
  71. {
  72.     m_Camera.SetLayout(CGlCamera::ePerspective);
  73.     m_Camera.SetFieldOfView(45.0f);
  74.     m_Camera.SetNearPlane(0.1f);
  75.     m_Camera.SetFarPlane(500.0f);
  76. }
  77. void CSeqTestApplication::Init()
  78. {
  79.     string syb_path = GetEnvironment().Get("SYBASE");
  80.     if (syb_path.empty()) {
  81.         syb_path = "/export/home/sybase/clients/current";
  82.         CDir dir(syb_path);
  83.         if ( !dir.Exists() ) {
  84.             syb_path = "/netopt/Sybase/clients/current";
  85.         }
  86.         SetEnvironment("SYBASE", syb_path);
  87.     }
  88.     CGlCgiImageApplication::Init();
  89. }
  90. void CSeqTestApplication::Render(CCgiContext& ctx)
  91. {
  92.     // retrieve our CGI rendering params
  93.     const CCgiRequest& request  = ctx.GetRequest();
  94.     const TCgiEntries& entries = request.GetEntries();
  95.     //
  96.     // retrieve the seq-id of interest
  97.     //
  98.     TCgiEntries::const_iterator acc_iter = entries.find("id");
  99.     if ( acc_iter == entries.end() ) {
  100.         LOG_POST(Error << "Error: accession not indicated to cgi");
  101.         return;
  102.     }
  103.     
  104.     CSeq_id id(acc_iter->second);
  105.     m_ObjMgr.Reset(new CObjectManager());
  106.     m_ObjMgr->RegisterDataLoader(*new CGBDataLoader("GenBank",
  107.                                                     new CId1Reader()),
  108.                                  CObjectManager::eDefault);
  109.     m_Scope.Reset(new CScope(*m_ObjMgr));
  110.     m_Scope->AddDefaults();
  111.     if (!m_Scope->GetBioseqHandle(id) ) {
  112.         LOG_POST(Error << "Failed to retrieve sequence for "
  113.                  << acc_iter->second);
  114.         return;
  115.     }
  116.     
  117.     m_DataSource.Reset(new CSeqGraphicDataSource( m_Scope.GetObject(), id));
  118.     //m_DataSource.Reset(new CTestDataSource(acc_iter->second));
  119.     
  120.     
  121.     // Setup configuration
  122.     // Create an empty config and pass it to the widget
  123.     CRef<CSeqGraphicConfig> config( new CSeqGraphicConfig(NULL) ); 
  124.     config->SetHistogram(CSeqFeatData::e_Imp, 
  125.                         CSeqFeatData::eSubtype_STS, true);
  126.     config->SetHistogram(CSeqFeatData::e_Imp, 
  127.                         CSeqFeatData::eSubtype_repeat_region, true);
  128.     //
  129.     // and set up our renderer
  130.     //
  131.     // make sure we reflect the whole window, and our sequence
  132.     TVPRect rc(0, 0, m_Width, m_Height);
  133.     CSeqGraphicRenderer renderer;
  134.     renderer.SetConfig(config);
  135.     renderer.SetDataSource(rc, m_DataSource);
  136.     //
  137.     // rendering options
  138.     //
  139.     // rendered width
  140.     TSeqPos from = 0;
  141.     TSeqPos to = m_DataSource->GetSequenceLength();
  142.     TCgiEntries::const_iterator from_iter = entries.find("from");
  143.     if (from_iter != entries.end()) {
  144.         from = NStr::StringToInt(from_iter->second);
  145.     }
  146.     TCgiEntries::const_iterator to_iter = entries.find("to");
  147.     if (to_iter != entries.end()) {
  148.         to = NStr::StringToInt(to_iter->second);
  149.     }
  150.     renderer.ZoomOnRange(TSeqRange(from, to));
  151.     //
  152.     // and draw!
  153.     //
  154.     renderer.draw();
  155. }
  156. /////////////////////////////////////////////////////////////////////////////
  157. //  MAIN
  158. //
  159. int main(int argc, const char* argv[])
  160. {
  161.     int result = CSeqTestApplication().AppMain(argc, argv, 0, eDS_Default, 0);
  162.     _TRACE("back to normal diags");
  163.     return result;
  164. }
  165. /*
  166.  * ===========================================================================
  167.  * $Log: seqtest.cpp,v $
  168.  * Revision 1000.2  2004/06/01 21:13:05  gouriano
  169.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.5
  170.  *
  171.  * Revision 1.5  2004/05/21 22:27:55  gorelenk
  172.  * Added PCH ncbi_pch.hpp
  173.  *
  174.  * Revision 1.4  2004/03/24 15:16:48  dicuccio
  175.  * Added standard settings for SYBASE variable
  176.  *
  177.  * Revision 1.3  2004/03/11 17:53:06  dicuccio
  178.  * Deprecated typedefs TPosition, TDimension, TIndex, TColor.  Use TSeqRange instead of TRange
  179.  *
  180.  * Revision 1.2  2004/02/06 16:37:20  lebedev
  181.  * CGI demo updated to use new seq_renderer, datasource and configuration
  182.  *
  183.  * Revision 1.1  2003/07/16 15:14:46  dicuccio
  184.  * Initial revision
  185.  *
  186.  * Revision 1.1  2003/06/09 19:21:44  dicuccio
  187.  * Initial revision
  188.  *
  189.  * ===========================================================================
  190.  */