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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: genbank_gather.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:44:40  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.12
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: genbank_gather.cpp,v 1000.1 2004/06/01 19:44:40 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, NCBI
  35. *
  36. * File Description:
  37. *   
  38. *
  39. * ===========================================================================
  40. */
  41. #include <ncbi_pch.hpp>
  42. #include <corelib/ncbistd.hpp>
  43. #include <objects/general/Object_id.hpp>
  44. #include <objects/general/User_field.hpp>
  45. #include <objmgr/seqdesc_ci.hpp>
  46. #include <objtools/format/item_ostream.hpp>
  47. #include <objtools/format/items/locus_item.hpp>
  48. #include <objtools/format/items/defline_item.hpp>
  49. #include <objtools/format/items/accession_item.hpp>
  50. #include <objtools/format/items/version_item.hpp>
  51. #include <objtools/format/items/dbsource_item.hpp>
  52. #include <objtools/format/items/segment_item.hpp>
  53. #include <objtools/format/items/keywords_item.hpp>
  54. #include <objtools/format/items/source_item.hpp>
  55. #include <objtools/format/items/reference_item.hpp>
  56. #include <objtools/format/items/comment_item.hpp>
  57. #include <objtools/format/items/basecount_item.hpp>
  58. #include <objtools/format/items/sequence_item.hpp>
  59. #include <objtools/format/items/ctrl_items.hpp>
  60. #include <objtools/format/items/feature_item.hpp>
  61. #include <objtools/format/items/primary_item.hpp>
  62. #include <objtools/format/items/wgs_item.hpp>
  63. #include <objtools/format/items/genome_item.hpp>
  64. #include <objtools/format/items/contig_item.hpp>
  65. #include <objtools/format/items/origin_item.hpp>
  66. #include <objtools/format/gather_items.hpp>
  67. #include <objtools/format/genbank_gather.hpp>
  68. #include <objtools/format/context.hpp>
  69. BEGIN_NCBI_SCOPE
  70. BEGIN_SCOPE(objects)
  71. CGenbankGatherer::CGenbankGatherer(void)
  72. {
  73. }
  74. bool s_ShowBaseCount(const CFlatFileConfig& cfg)
  75.     return (cfg.IsModeDump()  ||  cfg.IsModeGBench());
  76. }
  77. bool s_ShowContig(CBioseqContext& ctx)
  78. {
  79.     if ( (ctx.IsSegmented()  &&  ctx.HasParts())  ||
  80.          (ctx.IsDelta()  &&  !ctx.IsDeltaLitOnly()) ) {
  81.         return true;
  82.     }
  83.     return false;
  84. }
  85. void CGenbankGatherer::x_DoSingleSection(CBioseqContext& ctx) const
  86. {
  87.     const CFlatFileConfig& cfg = ctx.Config();
  88.     ItemOS() << new CStartSectionItem(ctx);
  89.     ItemOS() << new CLocusItem(ctx);
  90.     ItemOS() << new CDeflineItem(ctx);
  91.     ItemOS() << new CAccessionItem(ctx);
  92.     ItemOS() << new CVersionItem(ctx);
  93.     if ( ctx.IsProt() ) {
  94.         ItemOS() << new CDBSourceItem(ctx);
  95.     }
  96.     ItemOS() << new CKeywordsItem(ctx);
  97.     if ( ctx.IsPart() ) {
  98.         ItemOS() << new CSegmentItem(ctx);
  99.     }
  100.     ItemOS() << new CSourceItem(ctx);
  101.     x_GatherReferences();
  102.     x_GatherComments();
  103.     ItemOS() << new CPrimaryItem(ctx);
  104.     ItemOS() << new CFeatHeaderItem(ctx);
  105.     if ( !cfg.HideSourceFeats() ) {
  106.         x_GatherSourceFeatures();
  107.     }
  108.     if ( ctx.IsWGSMaster()  &&  ctx.GetTech() == CMolInfo::eTech_wgs ) {
  109.         x_GatherWGS(ctx);
  110.     } else if ( ctx.DoContigStyle() ) {
  111.         if ( cfg.ShowContigFeatures() ) {
  112.             x_GatherFeatures();
  113.         }
  114.         ItemOS() << new CContigItem(ctx);
  115.         if ( cfg.ShowContigAndSeq() ) {
  116.             if ( ctx.IsNuc()  &&  s_ShowBaseCount(cfg) ) {
  117.                 ItemOS() << new CBaseCountItem(ctx);
  118.             }
  119.             ItemOS() << new COriginItem(ctx);
  120.             x_GatherSequence();
  121.         }
  122.     } else {
  123.         x_GatherFeatures();
  124.         if ( cfg.ShowContigAndSeq()  &&  s_ShowContig(ctx) ) {
  125.             ItemOS() << new CContigItem(ctx);
  126.         }
  127.         if ( ctx.IsNuc()  &&  s_ShowBaseCount(cfg) ) {
  128.             ItemOS() << new CBaseCountItem(ctx);
  129.         }
  130.         ItemOS() << new COriginItem(ctx);
  131.         x_GatherSequence();
  132.     }
  133.         
  134.     ItemOS() << new CEndSectionItem(ctx);
  135. }
  136. void CGenbankGatherer::x_GatherWGS(CBioseqContext& ctx) const
  137. {
  138.     const string* first = 0;
  139.     const string* last  = 0;
  140.     for (CSeqdesc_CI desc(ctx.GetHandle(), CSeqdesc::e_User);  desc;  ++desc) {
  141.         const CUser_object& uo = desc->GetUser();
  142.         CWGSItem::EWGSType wgs_type = CWGSItem::eWGS_not_set;
  143.         if ( !uo.GetType().IsStr() ) {
  144.             continue;
  145.         }
  146.         const string& type = uo.GetType().GetStr();
  147.         if ( NStr::CompareNocase(type, "WGSProjects") == 0 ) {
  148.             wgs_type = CWGSItem::eWGS_Projects;
  149.         } else if ( NStr::CompareNocase(type, "WGS-Scaffold-List") == 0 ) {
  150.             wgs_type = CWGSItem::eWGS_ScaffoldList;
  151.         } else if ( NStr::CompareNocase(type, "WGS-Contig-List") == 0 ) {
  152.             wgs_type = CWGSItem::eWGS_ContigList;
  153.         }
  154.         if ( wgs_type == CWGSItem::eWGS_not_set ) {
  155.             continue;
  156.         }
  157.         ITERATE (CUser_object::TData, it, uo.GetData()) {
  158.             if ( !(*it)->GetLabel().IsStr() ) {
  159.                 continue;
  160.             }
  161.             const string& label = (*it)->GetLabel().GetStr();
  162.             if ( NStr::CompareNocase(label, "WGS_accession_first") == 0  ||
  163.                  NStr::CompareNocase(label, "Accession_first") == 0 ) {
  164.                 first = &((*it)->GetData().GetStr());
  165.             } else if ( NStr::CompareNocase(label, "WGS_accession_last") == 0 ||
  166.                         NStr::CompareNocase(label, "Accession_last") == 0 ) {
  167.                 last = &((*it)->GetData().GetStr());
  168.             }
  169.         }
  170.         if ( (first != 0)  &&  (last != 0) ) {
  171.             ItemOS() << new CWGSItem(wgs_type, *first, *last, uo, ctx);
  172.         }
  173.     }    
  174. }
  175. END_SCOPE(objects)
  176. END_NCBI_SCOPE
  177. /*
  178. * ===========================================================================
  179. *
  180. * $Log: genbank_gather.cpp,v $
  181. * Revision 1000.1  2004/06/01 19:44:40  gouriano
  182. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.12
  183. *
  184. * Revision 1.12  2004/05/21 21:42:54  gorelenk
  185. * Added PCH ncbi_pch.hpp
  186. *
  187. * Revision 1.11  2004/04/22 16:00:08  shomrat
  188. * Changes in context
  189. *
  190. * Revision 1.10  2004/03/31 17:17:25  shomrat
  191. * Active bioseq set outside method
  192. *
  193. * Revision 1.9  2004/03/25 20:40:17  shomrat
  194. * Use handles
  195. *
  196. * Revision 1.8  2004/03/18 15:42:12  shomrat
  197. * Remove redundant include directives
  198. *
  199. * Revision 1.7  2004/03/12 16:58:43  shomrat
  200. * Filtering moved to gather_items
  201. *
  202. * Revision 1.6  2004/02/19 18:14:41  shomrat
  203. * Added Origin item; supress source-features if flag is set
  204. *
  205. * Revision 1.5  2004/02/11 22:53:05  shomrat
  206. * using types in flag file
  207. *
  208. * Revision 1.4  2004/02/11 16:53:08  shomrat
  209. * x_GatherFeature signature changed
  210. *
  211. * Revision 1.3  2004/01/14 16:15:57  shomrat
  212. * removed const; using ctrl_items
  213. *
  214. * Revision 1.2  2003/12/18 17:43:34  shomrat
  215. * context.hpp moved
  216. *
  217. * Revision 1.1  2003/12/17 20:22:21  shomrat
  218. * Initial Revision (adapted from flat lib)
  219. *
  220. *
  221. * ===========================================================================
  222. */