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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: test_taxtree.cpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 21:13:30  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.9
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: test_taxtree.cpp,v 1000.2 2004/06/01 21:13:30 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/ncbistd.hpp>
  41. #include <corelib/ncbiapp.hpp>
  42. #include <corelib/ncbienv.hpp>
  43. #include <corelib/ncbiargs.hpp>
  44. #include <gui/utils/fltk_utils.hpp>
  45. #include <gui/utils/message_box.hpp>
  46. #include <gui/widgets/fl/status_bar_ex.hpp>
  47. #include <gui/widgets/tax_tree/tax_tree.hpp>
  48. #include <gui/widgets/tax_tree/tax_tree_ds.hpp>
  49. #include <objects/entrez2/entrez2_client.hpp>
  50. #include <objects/entrez2/Entrez2_eval_boolean.hpp>
  51. #include <objects/entrez2/Entrez2_boolean_exp.hpp>
  52. #include <objects/entrez2/Entrez2_boolean_element.hpp>
  53. #include <objects/entrez2/Entrez2_boolean_reply.hpp>
  54. #include <objects/entrez2/Entrez2_id_list.hpp>
  55. #include <objmgr/object_manager.hpp>
  56. #include <objmgr/scope.hpp>
  57. #include <objtools/data_loaders/genbank/gbloader.hpp>
  58. #include <gui/utils/dialog.hpp>
  59. #include <FL/Fl.H>
  60. #include <FL/Fl_Double_Window.H>
  61. #include <FL/Fl_Menu_Bar.H>
  62. #include <FL/Fl_Group.H>
  63. #include <FL/Fl_Box.H>
  64. #include <FL/Fl_Input.H>
  65. #include <FL/Fl_Choice.H>
  66. // #include "entrez2_ds.hpp"
  67. BEGIN_NCBI_SCOPE
  68. USING_SCOPE(ncbi::objects);
  69. #include "test_taxtree_.cpp"
  70. CTaxTreeTestDlg::CTaxTreeTestDlg()
  71. {
  72.     m_Window.reset(x_CreateWindow());
  73.     m_Tree->SetReporter(m_StatusBar);
  74. }
  75. void CTaxTreeTestDlg::x_OnSubmitQuery()
  76. {
  77.     CFltkCursorGuard WAIT_GUARD;
  78.     CStatusBarGuard LOCK(*m_StatusBar, "Submitting query...");
  79.     string query = m_Query->value();
  80.     if (query.empty()) {
  81.         return;
  82.     }
  83.     //
  84.     // prepare the Entrez query
  85.     //
  86.     CEntrez2_eval_boolean req;
  87.     req.SetReturn_UIDs(true);
  88.     CEntrez2_boolean_exp& exp = req.SetQuery();
  89.     // set the database we're querying
  90.     exp.SetDb().Set("nucleotide");
  91.     // set the query
  92.     CRef<CEntrez2_boolean_element> elem(new CEntrez2_boolean_element());
  93.     elem->SetStr(query);
  94.     exp.SetExp().push_back(elem);
  95.     // set some limits - if num > 0, we assume it's correct
  96. CRef<CEntrez2_boolean_reply> query_res;
  97.     try {
  98.         // now, submit our query.  this gets us the UIDs we want
  99.         query_res = x_GetClient().AskEval_boolean(req);
  100.         const CEntrez2_id_list& ids = query_res->GetUids();
  101.         vector<int> uids;
  102.         uids.reserve(ids.GetNum());
  103.         _TRACE("query: " << query << " UIDs: " << ids.GetNum());
  104.         CTaxTreeDS_ObjMgr::TUidVec seq_ids;
  105.         seq_ids.reserve(uids.size());
  106.         CEntrez2_id_list::TConstUidIterator iter = ids.GetConstUidIterator();
  107.         for (size_t i = 0;  i < ids.GetNum();  ++i, ++iter) {
  108.             uids.push_back(*iter);
  109.             CRef<CSeq_id> id(new CSeq_id());
  110.             id->SetGi(*iter);
  111.             seq_ids.push_back(id);
  112.         }
  113.         if ( !m_ObjMgr ) {
  114.             m_ObjMgr.Reset(new CObjectManager());
  115.             m_ObjMgr->RegisterDataLoader(*new CGBDataLoader(),
  116.                                          CObjectManager::eDefault);
  117.             m_Scope.Reset(new CScope(*m_ObjMgr));
  118.             m_Scope->AddDefaults();
  119.         }
  120.         m_DataSource.Reset(new CTaxTreeDS_ObjMgr(*m_Scope, seq_ids));
  121.         // m_DataSource.Reset(new CTaxTreeDS_Entrez2(uids));
  122.         m_Tree->SetDataSource(*m_DataSource);
  123.         // m_Tree->SetGis(uids);
  124.     }
  125.     catch (CException& e) {
  126.         LOG_POST(Info << "exception: " << e.what());
  127.         LOG_POST(Info << "query failed; reconnecting...");
  128.     }
  129. }
  130. void CTaxTreeTestDlg::x_OnShowRelatedSeqs()
  131. {
  132.     CTaxTreeDataSource::TUidVec gis;
  133.     m_Tree->GetSelectedUids(gis);
  134.     if (gis.size() != 1) {
  135.         NcbiMessageBox("Please select one and only one sequence");
  136.         return;
  137.     }
  138.     CStatusBarGuard LOCK(*m_StatusBar, "Submitting query...");
  139.     int gi = gis.front();
  140.     vector<int> gis_n;
  141.     x_GetClient().GetNeighbors(gi, "nucleotide", "nucleotide_nucleotide",
  142.                                gis_n);
  143.     m_StatusBar->SetMessage("Found " +
  144.                             NStr::IntToString(gis_n.size()) +
  145.                             " related sequences");
  146.     // m_Tree->SetGis(gis);
  147. }
  148. CEntrez2Client& CTaxTreeTestDlg::x_GetClient()
  149. {
  150.     if ( !m_Client ) {
  151.         m_Client.Reset(new CEntrez2Client());
  152.     }
  153.     return *m_Client;
  154. }
  155. class CTestTreeApp : public CNcbiApplication
  156. {
  157. private:
  158.     virtual void Init(void);
  159.     virtual int  Run(void);
  160.     virtual void Exit(void);
  161. };
  162. void CTestTreeApp::Init(void)
  163. {
  164.     // Create command-line argument descriptions class
  165.     auto_ptr<CArgDescriptions> arg_desc(new CArgDescriptions);
  166.     // Specify USAGE context
  167.     arg_desc->SetUsageContext(GetArguments().GetProgramBasename(),
  168.                               "CTreeBrowser demo program");
  169.     // Setup arg.descriptions for this application
  170.     SetupArgDescriptions(arg_desc.release());
  171. }
  172. int CTestTreeApp::Run(void)
  173. {
  174.     // Get arguments
  175.     CArgs args = GetArgs();
  176.     char *argv[1];
  177.     argv[0] = "app";
  178.     CTaxTreeTestDlg window;
  179.     window.Show(1, argv);
  180.     return 0;
  181. }
  182. /////////////////////////////////////////////////////////////////////////////
  183. //  Cleanup
  184. void CTestTreeApp::Exit(void)
  185. {
  186.     SetDiagStream(0);
  187. }
  188. /////////////////////////////////////////////////////////////////////////////
  189. //  MAIN
  190. END_NCBI_SCOPE
  191. USING_SCOPE(ncbi);
  192. int main(int argc, const char* argv[])
  193. {
  194.     // Execute main application function
  195.     return CTestTreeApp().AppMain(argc, argv, 0, eDS_Default, 0);
  196. }
  197. /*
  198.  * ===========================================================================
  199.  * $Log: test_taxtree.cpp,v $
  200.  * Revision 1000.2  2004/06/01 21:13:30  gouriano
  201.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.9
  202.  *
  203.  * Revision 1.9  2004/05/28 19:27:51  dicuccio
  204.  * Compilation fixes
  205.  *
  206.  * Revision 1.8  2004/05/21 22:27:55  gorelenk
  207.  * Added PCH ncbi_pch.hpp
  208.  *
  209.  * Revision 1.7  2004/05/13 17:31:46  dicuccio
  210.  * Renamed data source file
  211.  *
  212.  * Revision 1.6  2004/04/20 20:18:37  gorelenk
  213.  * Fixed error in implementations of
  214.  * CTaxTreeTestDlg::x_OnShowRelatedSeqs and
  215.  * CTaxTreeTestDlg::x_OnSubmitQuery .
  216.  *
  217.  * Revision 1.5  2004/01/28 01:08:11  ucko
  218.  * Use CTaxTreeDS_ObjMgr rather than CTaxTreeDS_Entrez2, which isn't
  219.  * (yet) in the tree.
  220.  *
  221.  * Revision 1.4  2004/01/27 18:49:26  dicuccio
  222.  * Restored functionality
  223.  *
  224.  * Revision 1.3  2003/12/23 15:39:19  dicuccio
  225.  * Altered the data source - expose an ITreeIterator; the widget no longer
  226.  * directly creates a CTaxon1 class.  Chaned storage notion from 'gi' to 'uid'
  227.  *
  228.  * Revision 1.2  2003/12/22 22:00:19  ucko
  229.  * Don't try to call SetGi, since it doesn't seem to exist yet....
  230.  *
  231.  * Revision 1.1  2003/12/22 19:43:01  dicuccio
  232.  * Initial revision
  233.  *
  234.  * Revision 1.1  2003/12/09 19:08:16  dicuccio
  235.  * Moved test_treebrowser from widgets/FLU/demo to here
  236.  *
  237.  * Revision 1.1  2003/12/09 15:51:31  dicuccio
  238.  * Deprecated Fl_Toggle_Tree - replaced with Flu_Tree_Browser.  Added CTreeBrowser
  239.  * as a standard tree interface
  240.  *
  241.  * Revision 1.2  2003/08/21 12:06:42  dicuccio
  242.  * Many bug fixes - Fl_Toggle_Tree is nearly completed.  Reimplemented correct
  243.  * clipping of the widget to its extent.  Added scroll bar (not yet working).
  244.  * Removed dead code
  245.  *
  246.  * Revision 1.1  2003/07/30 12:25:25  dicuccio
  247.  * Initial revision
  248.  *
  249.  * ===========================================================================
  250.  */