seqtest.cpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:7k
- /*
- * ===========================================================================
- * PRODUCTION $Log: seqtest.cpp,v $
- * PRODUCTION Revision 1000.2 2004/06/01 21:13:05 gouriano
- * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.5
- * PRODUCTION
- * ===========================================================================
- */
- /* $Id: seqtest.cpp,v 1000.2 2004/06/01 21:13:05 gouriano Exp $
- * ===========================================================================
- *
- * PUBLIC DOMAIN NOTICE
- * National Center for Biotechnology Information
- *
- * This software/database is a "United States Government Work" under the
- * terms of the United States Copyright Act. It was written as part of
- * the author's official duties as a United States Government employee and
- * thus cannot be copyrighted. This software/database is freely available
- * to the public for use. The National Library of Medicine and the U.S.
- * Government have not placed any restriction on its use or reproduction.
- *
- * Although all reasonable efforts have been taken to ensure the accuracy
- * and reliability of the software and data, the NLM and the U.S.
- * Government do not and cannot warrant the performance or results that
- * may be obtained by using this software or data. The NLM and the U.S.
- * Government disclaim all warranties, express or implied, including
- * warranties of performance, merchantability or fitness for any particular
- * purpose.
- *
- * Please cite the author in any work or product based on this material.
- *
- * ===========================================================================
- *
- * Author: Denis Vakatov
- *
- * File Description:
- * CSeqTestApp -- test of OpenGL framework for rendering images as a CGI app
- */
- #include <ncbi_pch.hpp>
- #include <cgi/cgictx.hpp>
- #include <gui/opengl/mesa/glcgi_image.hpp>
- #include <gui/opengl/glutils.hpp>
- #include <gui/opengl/glcamera.hpp>
- #include <objmgr/object_manager.hpp>
- #include <objtools/data_loaders/genbank/gbloader.hpp>
- #include <objtools/data_loaders/genbank/readers/id1/reader_id1.hpp>
- #include <gui/widgets/seq_graphic/seqgraphic_conf.hpp>
- #include <gui/widgets/seq_graphic/seqgraphic_ds.hpp>
- #include "../seqgraphic_render.hpp"
- USING_SCOPE(ncbi); //using namespace ncbi;
- USING_SCOPE(objects);
- /////////////////////////////////////////////////////////////////////////////
- // CSeqTestApplication::
- //
- class CSeqTestApplication : public CGlCgiImageApplication
- {
- public:
- CSeqTestApplication();
- virtual void Init();
- virtual void Render(CCgiContext& ctx);
- private:
- // camrea set-up
- CGlCamera m_Camera;
- CRef<CObjectManager> m_ObjMgr;
- CRef<CScope> m_Scope;
-
- // data source and renderer
- CRef<CSeqGraphicDataSource> m_DataSource;
- };
- CSeqTestApplication::CSeqTestApplication()
- {
- m_Camera.SetLayout(CGlCamera::ePerspective);
- m_Camera.SetFieldOfView(45.0f);
- m_Camera.SetNearPlane(0.1f);
- m_Camera.SetFarPlane(500.0f);
- }
- void CSeqTestApplication::Init()
- {
- string syb_path = GetEnvironment().Get("SYBASE");
- if (syb_path.empty()) {
- syb_path = "/export/home/sybase/clients/current";
- CDir dir(syb_path);
- if ( !dir.Exists() ) {
- syb_path = "/netopt/Sybase/clients/current";
- }
- SetEnvironment("SYBASE", syb_path);
- }
- CGlCgiImageApplication::Init();
- }
- void CSeqTestApplication::Render(CCgiContext& ctx)
- {
- // retrieve our CGI rendering params
- const CCgiRequest& request = ctx.GetRequest();
- const TCgiEntries& entries = request.GetEntries();
- //
- // retrieve the seq-id of interest
- //
- TCgiEntries::const_iterator acc_iter = entries.find("id");
- if ( acc_iter == entries.end() ) {
- LOG_POST(Error << "Error: accession not indicated to cgi");
- return;
- }
-
- CSeq_id id(acc_iter->second);
- m_ObjMgr.Reset(new CObjectManager());
- m_ObjMgr->RegisterDataLoader(*new CGBDataLoader("GenBank",
- new CId1Reader()),
- CObjectManager::eDefault);
- m_Scope.Reset(new CScope(*m_ObjMgr));
- m_Scope->AddDefaults();
-
- if (!m_Scope->GetBioseqHandle(id) ) {
- LOG_POST(Error << "Failed to retrieve sequence for "
- << acc_iter->second);
- return;
- }
-
- m_DataSource.Reset(new CSeqGraphicDataSource( m_Scope.GetObject(), id));
- //m_DataSource.Reset(new CTestDataSource(acc_iter->second));
-
-
- // Setup configuration
- // Create an empty config and pass it to the widget
- CRef<CSeqGraphicConfig> config( new CSeqGraphicConfig(NULL) );
- config->SetHistogram(CSeqFeatData::e_Imp,
- CSeqFeatData::eSubtype_STS, true);
- config->SetHistogram(CSeqFeatData::e_Imp,
- CSeqFeatData::eSubtype_repeat_region, true);
- //
- // and set up our renderer
- //
- // make sure we reflect the whole window, and our sequence
- TVPRect rc(0, 0, m_Width, m_Height);
- CSeqGraphicRenderer renderer;
- renderer.SetConfig(config);
- renderer.SetDataSource(rc, m_DataSource);
- //
- // rendering options
- //
- // rendered width
- TSeqPos from = 0;
- TSeqPos to = m_DataSource->GetSequenceLength();
- TCgiEntries::const_iterator from_iter = entries.find("from");
- if (from_iter != entries.end()) {
- from = NStr::StringToInt(from_iter->second);
- }
- TCgiEntries::const_iterator to_iter = entries.find("to");
- if (to_iter != entries.end()) {
- to = NStr::StringToInt(to_iter->second);
- }
- renderer.ZoomOnRange(TSeqRange(from, to));
- //
- // and draw!
- //
- renderer.draw();
- }
- /////////////////////////////////////////////////////////////////////////////
- // MAIN
- //
- int main(int argc, const char* argv[])
- {
- int result = CSeqTestApplication().AppMain(argc, argv, 0, eDS_Default, 0);
- _TRACE("back to normal diags");
- return result;
- }
- /*
- * ===========================================================================
- * $Log: seqtest.cpp,v $
- * Revision 1000.2 2004/06/01 21:13:05 gouriano
- * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.5
- *
- * Revision 1.5 2004/05/21 22:27:55 gorelenk
- * Added PCH ncbi_pch.hpp
- *
- * Revision 1.4 2004/03/24 15:16:48 dicuccio
- * Added standard settings for SYBASE variable
- *
- * Revision 1.3 2004/03/11 17:53:06 dicuccio
- * Deprecated typedefs TPosition, TDimension, TIndex, TColor. Use TSeqRange instead of TRange
- *
- * Revision 1.2 2004/02/06 16:37:20 lebedev
- * CGI demo updated to use new seq_renderer, datasource and configuration
- *
- * Revision 1.1 2003/07/16 15:14:46 dicuccio
- * Initial revision
- *
- * Revision 1.1 2003/06/09 19:21:44 dicuccio
- * Initial revision
- *
- * ===========================================================================
- */