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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: test_relloc.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:47:26  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.7
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: test_relloc.cpp,v 1000.1 2004/06/01 19:47:26 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:  Aaron Ucko
  35. *
  36. * File Description:
  37. *   test code for SRelLoc
  38. */
  39. #include <ncbi_pch.hpp>
  40. #include <corelib/ncbistd.hpp>
  41. #include <corelib/ncbiapp.hpp>
  42. #include <corelib/ncbiargs.hpp>
  43. #include <corelib/ncbienv.hpp>
  44. #include <objects/seq/Bioseq.hpp>
  45. #include <objects/seqfeat/Seq_feat.hpp>
  46. #include <objmgr/bioseq_handle.hpp>
  47. #include <objmgr/feat_ci.hpp>
  48. #include <objtools/data_loaders/genbank/gbloader.hpp>
  49. #include <objmgr/object_manager.hpp>
  50. #include <objmgr/scope.hpp>
  51. #include <objmgr/util/sequence.hpp>
  52. BEGIN_NCBI_SCOPE
  53. USING_SCOPE(objects);
  54. USING_SCOPE(sequence);
  55. class CRelLocTester : public CNcbiApplication
  56. {
  57.     virtual void Init(void);
  58.     virtual int  Run(void);
  59. };
  60. void CRelLocTester::Init(void)
  61. {
  62.     auto_ptr<CArgDescriptions> arg_desc(new CArgDescriptions);
  63.     arg_desc->SetUsageContext(GetArguments().GetProgramBasename(),
  64.                               "Test the use of SRelLoc", false);
  65.     arg_desc->AddKey("gi", "SeqEntryID", "GI id of the Seq-Entry to examine",
  66.                      CArgDescriptions::eInteger);
  67.     SetupArgDescriptions(arg_desc.release());
  68. }
  69. int CRelLocTester::Run(void)
  70. {
  71.     const CArgs&   args = GetArgs();
  72.     CObjectManager objmgr;
  73.     CScope         scope(objmgr);
  74.     CSeq_id        id;
  75.     
  76.     id.SetGi(args["gi"].AsInteger());
  77.     objmgr.RegisterDataLoader(*(new CGBDataLoader), CObjectManager::eDefault);
  78.     scope.AddDefaults();
  79.     CBioseq_Handle handle = scope.GetBioseqHandle(id); 
  80.     CConstRef<CSeq_loc> parent;
  81.     for (CFeat_CI it(handle, 0, 0, CSeqFeatData::e_Cdregion);  it;  ++it) {
  82.         parent = &it->GetLocation();
  83.         BREAK(it);
  84.     }
  85.     if ( !parent ) {
  86.         // use the middle third
  87.         TSeqPos length = handle.GetBioseqCore()->GetInst().GetLength();
  88.         CRef<CSeq_interval> ival(new CSeq_interval);
  89.         ival->SetFrom(  length/3);
  90.         ival->SetTo  (2*length/3);
  91.         CRef<CSeq_loc> p(new CSeq_loc);
  92.         p->SetInt(*ival);
  93.         parent = p;
  94.     }
  95.     {{
  96.         string label;
  97.         parent->GetLabel(&label);
  98.         cout << "Using parent location " << label << endl;
  99.     }}
  100.     for (CFeat_CI it(handle, 0, 0, CSeqFeatData::e_not_set);  it;  ++it) {
  101.         const CSeq_loc& child = it->GetLocation();
  102.         string label;
  103.         child.GetLabel(&label);
  104.         cout << "Child location " << label << " maps to " << flush;
  105.         SRelLoc rl(*parent, child, &scope);
  106.         if (rl.m_Ranges.empty()) {
  107.             cout << "nothing" << endl;
  108.             _ASSERT(sequence::Compare(*parent, child) == sequence::eNoOverlap);
  109.         } else {
  110.             string sep;
  111.             ITERATE (SRelLoc::TRanges, r, rl.m_Ranges) {
  112.                 cout << sep << (*r)->GetFrom() << "-" << (*r)->GetTo();
  113.                 sep = ", ";
  114.             }
  115.             label.erase();
  116.             rl.Resolve(&scope)->GetLabel(&label);
  117.             cout << endl << "... and back to " << label << endl;
  118.         }
  119.     }
  120.     return 0;
  121. }
  122. END_NCBI_SCOPE
  123. USING_NCBI_SCOPE;
  124. int main(int argc, const char** argv)
  125. {
  126.     return CRelLocTester().AppMain(argc, argv);
  127. }
  128. /*
  129. * ===========================================================================
  130. *
  131. * $Log: test_relloc.cpp,v $
  132. * Revision 1000.1  2004/06/01 19:47:26  gouriano
  133. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.7
  134. *
  135. * Revision 1.7  2004/05/21 21:42:56  gorelenk
  136. * Added PCH ncbi_pch.hpp
  137. *
  138. * Revision 1.6  2004/01/07 17:37:38  vasilche
  139. * Fixed include path to genbank loader.
  140. * Moved split_cache application.
  141. *
  142. * Revision 1.5  2003/10/15 19:53:11  ucko
  143. * Also display the result of resolving the relative location, if non-empty.
  144. *
  145. * Revision 1.4  2003/06/02 16:06:40  dicuccio
  146. * Rearranged src/objects/ subtree.  This includes the following shifts:
  147. *     - src/objects/asn2asn --> arc/app/asn2asn
  148. *     - src/objects/testmedline --> src/objects/ncbimime/test
  149. *     - src/objects/objmgr --> src/objmgr
  150. *     - src/objects/util --> src/objmgr/util
  151. *     - src/objects/alnmgr --> src/objtools/alnmgr
  152. *     - src/objects/flat --> src/objtools/flat
  153. *     - src/objects/validator --> src/objtools/validator
  154. *     - src/objects/cddalignview --> src/objtools/cddalignview
  155. * In addition, libseq now includes six of the objects/seq... libs, and libmmdb
  156. * replaces the three libmmdb? libs.
  157. *
  158. * Revision 1.3  2003/04/24 16:15:59  vasilche
  159. * Added missing includes and forward class declarations.
  160. *
  161. * Revision 1.2  2003/03/11 16:00:58  kuznets
  162. * iterate -> ITERATE
  163. *
  164. * Revision 1.1  2003/01/22 21:05:40  ucko
  165. * Add simple test/demo for SRelLoc
  166. *
  167. *
  168. * ===========================================================================
  169. */