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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: flat_reference.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 20:59:59  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.4
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef OBJECTS_FLAT___FLAT_REFERENCE__HPP
  10. #define OBJECTS_FLAT___FLAT_REFERENCE__HPP
  11. /*  $Id: flat_reference.hpp,v 1000.0 2003/10/29 20:59:59 gouriano Exp $
  12. * ===========================================================================
  13. *
  14. *                            PUBLIC DOMAIN NOTICE
  15. *               National Center for Biotechnology Information
  16. *
  17. *  This software/database is a "United States Government Work" under the
  18. *  terms of the United States Copyright Act.  It was written as part of
  19. *  the author's official duties as a United States Government employee and
  20. *  thus cannot be copyrighted.  This software/database is freely available
  21. *  to the public for use. The National Library of Medicine and the U.S.
  22. *  Government have not placed any restriction on its use or reproduction.
  23. *
  24. *  Although all reasonable efforts have been taken to ensure the accuracy
  25. *  and reliability of the software and data, the NLM and the U.S.
  26. *  Government do not and cannot warrant the performance or results that
  27. *  may be obtained by using this software or data. The NLM and the U.S.
  28. *  Government disclaim all warranties, express or implied, including
  29. *  warranties of performance, merchantability or fitness for any particular
  30. *  purpose.
  31. *
  32. *  Please cite the author in any work or product based on this material.
  33. *
  34. * ===========================================================================
  35. *
  36. * Author:  Aaron Ucko, NCBI
  37. *
  38. * File Description:
  39. *   new (early 2003) flat-file generator -- bibliographic references
  40. *
  41. */
  42. #include <objtools/flat/flat_item.hpp>
  43. #include <objects/general/Date.hpp>
  44. #include <objects/general/Date_std.hpp>
  45. #include <objects/seq/Pubdesc.hpp>
  46. #include <objects/seqloc/Seq_loc.hpp>
  47. #include <set>
  48. BEGIN_NCBI_SCOPE
  49. BEGIN_SCOPE(objects)
  50. class CAuth_list;
  51. class CCit_art;
  52. class CCit_book;
  53. class CCit_gen;
  54. class CCit_jour;
  55. class CCit_let;
  56. class CCit_pat;
  57. class CCit_proc;
  58. class CCit_sub;
  59. class CImprint;
  60. class CMedline_entry;
  61. class CPub;
  62. class CPub_equiv;
  63. class CPub_set;
  64. class CTitle;
  65. class CFlatReference : public IFlatItem
  66. {
  67. public:
  68.     enum ECategory {
  69.         eUnknown,     // none of the below
  70.         ePublished,   // published paper
  71.         eUnpublished, // unpublished paper
  72.         eSubmission   // direct submission
  73.     };
  74.     CFlatReference(const CPubdesc& pub, const CSeq_loc* loc,
  75.                    const CFlatContext& ctx);
  76.     // also drops duplicates and cleans up remaining items
  77.     static void Sort(vector<CRef<CFlatReference> >& v, CFlatContext& ctx);
  78.     void Format (IFlatFormatter& f)  const;
  79.     bool Matches(const CPub_set& ps) const;
  80.     bool HasMUID(int id) const { return m_MUIDs.find(id) != m_MUIDs.end(); }
  81.     bool HasPMID(int id) const { return m_PMIDs.find(id) != m_PMIDs.end(); }
  82.     // same form(!)
  83.     string GetMedlineURL(int muid) const { return x_GetURL(muid); }
  84.     string GetPubMedURL (int pmid) const { return x_GetURL(pmid); }
  85.     string GetRange(const CFlatContext& ctx) const;
  86.     // typically has to go through m_Pub(desc), since we don't want to store
  87.     // format-dependent strings
  88.     void GetTitles(string& title, string& journal, const CFlatContext& ctx)
  89.         const;
  90.     const CPubdesc&     GetPubdesc   (void) const { return *m_Pubdesc;   }
  91.     const CSeq_loc*     GetLoc       (void) const { return m_Loc;        }
  92.     const set<int>&     GetPMIDs     (void) const { return m_PMIDs;      }
  93.     const set<int>&     GetMUIDs     (void) const { return m_MUIDs;      }
  94.     int                 GetSerial    (void) const { return m_Serial;     }
  95.     const list<string>& GetAuthors   (void) const { return m_Authors;    }
  96.     const string&       GetConsortium(void) const { return m_Consortium; }
  97.     const string&       GetRemark    (void) const { return m_Remark;     }
  98. private: // XXX - many of these should become pointers
  99.     CConstRef<CPubdesc>  m_Pubdesc;
  100.     CConstRef<CPub>      m_Pub; // main entry
  101.     CConstRef<CSeq_loc>  m_Loc; // null if from a descriptor
  102.     set<int>             m_PMIDs;
  103.     set<int>             m_MUIDs;
  104.     ECategory            m_Category;
  105.     int                  m_Serial;
  106.     CConstRef<CDate_std> m_StdDate;
  107.     list<string>         m_Authors; // GB-style: Last,F.M.
  108.     string               m_Consortium;
  109.     string               m_Title;
  110.     string               m_Journal; // or contact info for submissions
  111.     string               m_Volume; // normally numeric
  112.     string               m_Issue;
  113.     string               m_Pages;
  114.     CConstRef<CDate>     m_Date;
  115.     string               m_Remark;
  116.     static string x_GetURL(int id);
  117.     void x_Init(const CPub&           pub,  const CFlatContext& ctx);
  118.     void x_Init(const CCit_gen&       gen,  const CFlatContext& ctx);
  119.     void x_Init(const CCit_sub&       sub,  const CFlatContext& ctx);
  120.     void x_Init(const CMedline_entry& mle,  const CFlatContext& ctx);
  121.     void x_Init(const CCit_art&       art,  const CFlatContext& ctx);
  122.     void x_Init(const CCit_jour&      jour, const CFlatContext& ctx);
  123.     void x_Init(const CCit_book&      book, const CFlatContext& ctx);
  124.     void x_Init(const CCit_pat&       pat,  const CFlatContext& ctx);
  125.     void x_Init(const CCit_let&       man,  const CFlatContext& ctx);
  126.     void x_AddAuthors(const CAuth_list& auth);
  127.     void x_SetJournal(const CTitle& title, const CFlatContext& ctx);
  128.     void x_AddImprint(const CImprint& imp, const CFlatContext& ctx);
  129. };
  130. ///////////////////////////////////////////////////////////////////////////
  131. //
  132. // INLINE METHODS
  133. inline string CFlatReference::x_GetURL(int id)
  134. {
  135.     return "http://www.ncbi.nlm.nih.gov/entrez/utils/qmap.cgi?uid="
  136.         + NStr::IntToString(id) + "&form=6&db=m&Dopt=r";
  137. }
  138. END_SCOPE(objects)
  139. END_NCBI_SCOPE
  140. /*
  141. * ===========================================================================
  142. *
  143. * $Log: flat_reference.hpp,v $
  144. * Revision 1000.0  2003/10/29 20:59:59  gouriano
  145. * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.4
  146. *
  147. * Revision 1.4  2003/06/02 16:01:39  dicuccio
  148. * Rearranged include/objects/ subtree.  This includes the following shifts:
  149. *     - include/objects/alnmgr --> include/objtools/alnmgr
  150. *     - include/objects/cddalignview --> include/objtools/cddalignview
  151. *     - include/objects/flat --> include/objtools/flat
  152. *     - include/objects/objmgr/ --> include/objmgr/
  153. *     - include/objects/util/ --> include/objmgr/util/
  154. *     - include/objects/validator --> include/objtools/validator
  155. *
  156. * Revision 1.3  2003/04/10 20:06:46  ucko
  157. * GetLoc: return a pointer rather than a reference, as it's usually NULL.
  158. *
  159. * Revision 1.2  2003/03/21 18:47:47  ucko
  160. * Turn most structs into (accessor-requiring) classes; replace some
  161. * formerly copied fields with pointers to the original data.
  162. *
  163. * Revision 1.1  2003/03/10 16:39:08  ucko
  164. * Initial check-in of new flat-file generator
  165. *
  166. *
  167. * ===========================================================================
  168. */
  169. #endif  /* OBJECTS_FLAT___FLAT_REFERENCE__HPP */