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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: Seq_id.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 19:30:49  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.47
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /* $Id: Seq_id.hpp,v 1000.2 2004/06/01 19:30:49 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:  .......
  35.  *
  36.  * File Description:
  37.  *   .......
  38.  *
  39.  * Remark:
  40.  *   This code was originally generated by application DATATOOL
  41.  *   using specifications from the ASN data definition file
  42.  *   'seqloc.asn'.
  43.  */
  44. #ifndef OBJECTS_SEQLOC_SEQ_ID_HPP
  45. #define OBJECTS_SEQLOC_SEQ_ID_HPP
  46. // generated includes
  47. #include <objects/seqloc/Seq_id_.hpp>
  48. #include <corelib/ncbi_limits.hpp>
  49. #include <serial/serializable.hpp>
  50. #include <objects/seqloc/Textseq_id.hpp>
  51. // generated classes
  52. BEGIN_NCBI_SCOPE
  53. BEGIN_objects_SCOPE // namespace ncbi::objects::
  54. class CBioseq;
  55. class NCBI_SEQLOC_EXPORT CSeq_id : public CSeq_id_Base,
  56.                                    public CSerializable
  57. {
  58.     typedef CSeq_id_Base Tparent;
  59. public:
  60.     //
  61.     // See also CSeq_id related functions in "util/sequence.hpp":
  62.     //
  63.     //   TSeqPos GetLength(const CSeq_id&, CScope*);
  64.     //   bool IsSameBioseq(const CSeq_id&, const CSeq_id&, CScope*);
  65.     //
  66.     // Default constructor
  67.     CSeq_id( void );
  68.     // Takes either a FastA-style string delimited by vertical bars or
  69.     // a raw accession (with optional version).
  70.     CSeq_id( const string& the_id );
  71.     // Construct a seq-id from a dbtag
  72.     CSeq_id(const CDbtag& tag, bool set_as_general = true);
  73.     // With proper choice
  74.     CSeq_id(CSeq_id_Base::E_Choice the_type,
  75.             int           int_seq_id);     // see explanation in x_Init below
  76.     // With proper choice
  77.     CSeq_id(CSeq_id_Base::E_Choice the_type,
  78.             const string&          acc_in,  // see explanation in x_Init below
  79.             const string&          name_in,
  80.             // force not optional; if not given, use the constructor below
  81.             const string&          version_in,
  82.             const string&          release_in = kEmptyStr);
  83.     CSeq_id(CSeq_id_Base::E_Choice the_type,
  84.             const string&          acc_in,  // see explanation in x_Init below
  85.             const string&          name_in,
  86.             int                    version    = 0,
  87.             const string&          release_in = kEmptyStr);
  88.     // Need to lookup choice
  89.     CSeq_id(const string& the_type,
  90.             const string& acc_in,     // see explanation in x_Init below
  91.             const string& name_in,
  92.             // force not optional; if not given, use the constructor below
  93.             const string& version_in,
  94.             const string& release_in = kEmptyStr);
  95.     CSeq_id(const string& the_type,
  96.             const string& acc_in,   // see explanation in x_Init below
  97.             const string& name_in,
  98.             int           version    = 0 ,
  99.             const string& release_in = kEmptyStr);
  100.     // Destructor
  101.     virtual ~CSeq_id(void);
  102.     // Converts a string to a choice, no need to require a member.
  103.     static CSeq_id::E_Choice WhichInverseSeqId(const char* SeqIdCode);
  104.     // For s_IdentifyAccession (below)
  105.     enum EAccessionInfo {
  106.         // Mask for Seq_id type; allow 8 bits to be safe
  107.         eAcc_type_mask = 0xff,
  108.         // Useful flags
  109.         fAcc_nuc       = 0x80000000,
  110.         fAcc_prot      = 0x40000000,
  111.         fAcc_predicted = 0x20000000, // only for refseq
  112.         eAcc_flag_mask = 0xe0000000,
  113.         // Common divisions and categories (0 << 8 .. 127 << 8)
  114.         eAcc_other         = 0 << 8, // no further classification
  115.         eAcc_est           = 1 << 8,
  116.         eAcc_dirsub        = 2 << 8, // direct submission; trumps other values
  117.         eAcc_genome        = 3 << 8,
  118.         eAcc_div_patent    = 4 << 8,
  119.         eAcc_htgs          = 5 << 8,
  120.         eAcc_con           = 6 << 8, // just a contig/segset
  121.         eAcc_segset        = eAcc_con, // was once wrongly split out
  122.         eAcc_wgs           = 7 << 8,
  123.         eAcc_division_mask = 0xff00,
  124.         // Actual return values with EXAMPLE prefixes (to be followed
  125.         // by digits), grouped by Seq-id type.  In most cases, there
  126.         // are other prefixes with the same classification, and if not
  127.         // there could be.
  128.         eAcc_unknown         = e_not_set | eAcc_other,
  129.         eAcc_unreserved_nuc  = e_not_set | 128 << 8 | fAcc_nuc,  // XY
  130.         eAcc_unreserved_prot = e_not_set | 128 << 8 | fAcc_prot, // XYZ
  131.         eAcc_ambiguous_nuc   = e_not_set | 192 << 8 | fAcc_nuc,  // N0-N1
  132.         // Most N accessions are GenBank ESTs, but some low-numbered ones
  133.         // (now only used as primary accessions) were assigned haphazardly,
  134.         // and some are therefore ambiguous.
  135.         eAcc_maybe_gb        = eAcc_ambiguous_nuc | 1,
  136.         eAcc_maybe_embl      = eAcc_ambiguous_nuc | 2,
  137.         eAcc_maybe_ddbj      = eAcc_ambiguous_nuc | 4,
  138.         eAcc_gb_embl         = eAcc_maybe_gb | eAcc_maybe_embl,
  139.         eAcc_gb_ddbj         = eAcc_maybe_gb | eAcc_maybe_ddbj,
  140.         eAcc_embl_ddbj       = eAcc_maybe_embl | eAcc_maybe_ddbj,
  141.         eAcc_gb_embl_ddbj    = (eAcc_maybe_gb | eAcc_maybe_embl
  142.                                 | eAcc_maybe_ddbj),
  143.         eAcc_local  = e_Local  | eAcc_other,
  144.         eAcc_gibbsq = e_Gibbsq | eAcc_other,
  145.         eAcc_gibbmt = e_Gibbmt | eAcc_other,
  146.         eAcc_giim   = e_Giim   | eAcc_other,
  147.         eAcc_gb_prot        = e_Genbank | eAcc_other      | fAcc_prot, // AAA
  148.         eAcc_gb_other_nuc   = e_Genbank | eAcc_other      | fAcc_nuc,  // AS
  149.         eAcc_gb_est         = e_Genbank | eAcc_est        | fAcc_nuc,  // H
  150.         eAcc_gb_dirsub      = e_Genbank | eAcc_dirsub     | fAcc_nuc,  // U
  151.         eAcc_gb_genome      = e_Genbank | eAcc_genome     | fAcc_nuc,  // AE
  152.         eAcc_gb_patent      = e_Genbank | eAcc_div_patent /* | fAcc_nuc */, //I
  153.         eAcc_gb_patent_prot = e_Genbank | eAcc_div_patent | fAcc_prot, // AAE
  154.         eAcc_gb_htgs        = e_Genbank | eAcc_htgs       | fAcc_nuc,  // AC
  155.         eAcc_gb_con         = e_Genbank | eAcc_con,                    // CH
  156.         eAcc_gb_segset      = eAcc_gb_con, // for compatibility
  157.         eAcc_gb_wgs_nuc     = e_Genbank | eAcc_wgs        | fAcc_nuc,  // AAAA
  158.         eAcc_gb_wgs_prot    = e_Genbank | eAcc_wgs        | fAcc_prot, // EAA
  159.         eAcc_gsdb_dirsub    = e_Genbank | 128 << 8        | fAcc_nuc,  // J
  160.         eAcc_gb_gsdb        = e_Genbank | 129 << 8        | fAcc_nuc,  // AD
  161.         eAcc_gb_gss         = e_Genbank | 130 << 8        | fAcc_nuc,  // B
  162.         eAcc_gb_sts         = e_Genbank | 131 << 8        | fAcc_nuc,  // G
  163.         eAcc_gb_backbone    = e_Genbank | 132 << 8        | fAcc_nuc,  // S
  164.         eAcc_gb_cdna        = e_Genbank | 133 << 8        | fAcc_nuc,  // BC
  165.         eAcc_embl_prot      = e_Embl | eAcc_other      | fAcc_prot, // CAA
  166.         eAcc_embl_other_nuc = e_Embl | eAcc_other      | fAcc_nuc,  // N00060
  167.         eAcc_embl_est       = e_Embl | eAcc_est        | fAcc_nuc,  // F
  168.         eAcc_embl_dirsub    = e_Embl | eAcc_dirsub     | fAcc_nuc,  // V
  169.         eAcc_embl_genome    = e_Embl | eAcc_genome     | fAcc_nuc,  // AL
  170.         eAcc_embl_patent    = e_Embl | eAcc_div_patent | fAcc_nuc,  // A
  171.         eAcc_embl_htgs      = e_Embl | eAcc_htgs       | fAcc_nuc,  // unused
  172.         eAcc_embl_con       = e_Embl | eAcc_con        | fAcc_nuc,  // AN
  173.         eAcc_embl_wgs_nuc   = e_Embl | eAcc_wgs        | fAcc_nuc,  // CAAA
  174.         eAcc_embl_wgs_prot  = e_Embl | eAcc_wgs        | fAcc_prot, // unused
  175.         eAcc_pir       = e_Pir       | eAcc_other | fAcc_prot,
  176.         eAcc_swissprot = e_Swissprot | eAcc_other | fAcc_prot,
  177.         eAcc_patent    = e_Patent    | eAcc_other,
  178.         eAcc_refseq_prot            = e_Other | eAcc_other  | fAcc_prot,  //NP_
  179.         eAcc_refseq_genome          = e_Other | eAcc_genome | fAcc_nuc,   //NS_
  180.         eAcc_refseq_wgs_nuc         = e_Other | eAcc_wgs    | fAcc_nuc,   //NZ_
  181.         eAcc_refseq_wgs_prot        = e_Other | eAcc_wgs    | fAcc_prot,  //ZP_
  182.         eAcc_refseq_contig          = e_Other | eAcc_segset,              //NT_
  183.         eAcc_refseq_unreserved      = e_Other | 128 << 8,                 //AA_
  184.         eAcc_refseq_mrna            = e_Other | 129 << 8    | fAcc_nuc,   //NM_
  185.         eAcc_refseq_chromosome      = e_Other | 130 << 8    | fAcc_nuc,   //NC_
  186.         eAcc_refseq_genomic         = e_Other | 131 << 8    | fAcc_nuc,   //NG_
  187.         // non-coding RNA
  188.         eAcc_refseq_ncrna           = e_Other | 132 << 8    | fAcc_nuc,   //NR_
  189.         eAcc_refseq_wgs_intermed    = e_Other | 133 << 8    | fAcc_nuc,   //NW_
  190.         eAcc_refseq_prot_predicted  = eAcc_refseq_prot  | fAcc_predicted, //XP_
  191.         eAcc_refseq_mrna_predicted  = eAcc_refseq_mrna  | fAcc_predicted, //XM_
  192.         eAcc_refseq_ncrna_predicted = eAcc_refseq_ncrna | fAcc_predicted, //XR_
  193.         eAcc_general = e_General | eAcc_other,
  194.         eAcc_gi      = e_Gi      | eAcc_other,
  195.         eAcc_ddbj_prot      = e_Ddbj | eAcc_other      | fAcc_prot, // BAA
  196.         eAcc_ddbj_other_nuc = e_Ddbj | eAcc_other      | fAcc_nuc,  // N00028
  197.         eAcc_ddbj_est       = e_Ddbj | eAcc_est        | fAcc_nuc,  // C
  198.         eAcc_ddbj_dirsub    = e_Ddbj | eAcc_dirsub     | fAcc_nuc,  // D
  199.         eAcc_ddbj_genome    = e_Ddbj | eAcc_genome     | fAcc_nuc,  // AP
  200.         eAcc_ddbj_patent    = e_Ddbj | eAcc_div_patent | fAcc_nuc,  // E
  201.         eAcc_ddbj_htgs      = e_Ddbj | eAcc_htgs       | fAcc_nuc,  // AK
  202.         eAcc_ddbj_con       = e_Ddbj | eAcc_con        | fAcc_nuc,  // BA
  203.         eAcc_ddbj_wgs_nuc   = e_Ddbj | eAcc_wgs        | fAcc_nuc,  // BAAA
  204.         eAcc_ddbj_wgs_prot  = e_Ddbj | eAcc_wgs        | fAcc_prot, // GAA
  205.         eAcc_prf = e_Prf | eAcc_other | fAcc_prot,
  206.         eAcc_pdb = e_Pdb | eAcc_other | fAcc_prot,
  207.         eAcc_gb_tpa_nuc  = e_Tpg | eAcc_other | fAcc_nuc,    // BK
  208.         eAcc_gb_tpa_prot = e_Tpg | eAcc_other | fAcc_prot,   // DAA
  209.         eAcc_embl_tpa_nuc  = e_Tpe | eAcc_other | fAcc_nuc,  // BN
  210.         eAcc_embl_tpa_prot = e_Tpe | eAcc_other | fAcc_prot, // unused
  211.         eAcc_ddbj_tpa_nuc  = e_Tpd | eAcc_other | fAcc_nuc,  // BR
  212.         eAcc_ddbj_tpa_prot = e_Tpd | eAcc_other | fAcc_prot  // FAA
  213.     };
  214.     static E_Choice GetAccType(EAccessionInfo info)
  215.         { return static_cast<E_Choice>(info & eAcc_type_mask); }
  216.     // Deduces information from a bare accession a la WHICH_db_accession;
  217.     // may report false negatives on properties.
  218.     static EAccessionInfo IdentifyAccession(const string& accession);
  219.     EAccessionInfo IdentifyAccession(void) const;
  220.     // Match() - TRUE if SeqIds are equivalent
  221.     bool Match(const CSeq_id& sid2) const;
  222.     // Compare return values
  223.     enum E_SIC {
  224.         e_error = 0,  // some problem
  225.         e_DIFF,       // different SeqId types-can't compare
  226.         e_NO,         // SeqIds compared, but are different
  227.         e_YES         // SeqIds compared, are equivalent
  228.     };
  229.     // Compare() - more general
  230.     E_SIC Compare(const CSeq_id& sid2) const;
  231.     int CompareOrdered(const CSeq_id& sid2) const;
  232.     bool operator<(const CSeq_id& sid2) const
  233.         {
  234.             return CompareOrdered(sid2) < 0;
  235.         }
  236.     // Return compatible CTextseq_id
  237.     const CTextseq_id* GetTextseq_Id(void) const;
  238.     // Implement serializable interface
  239.     virtual void WriteAsFasta(ostream& out) const;
  240.     CProxy DumpAsFasta(void) const { return Dump(eAsFasta); }
  241.     const string AsFastaString(void) const;
  242.     // return the label for a given string
  243.     enum ELabelType {
  244.         eType,
  245.         eContent,
  246.         eBoth,
  247.         eFasta,
  248.         // default is to show type + content
  249.         eDefault = eBoth
  250.     };
  251.     enum ELabelFlags {
  252.         fLabel_Version = 0x10,
  253.         // default options - always show the version
  254.         fLabel_Default = fLabel_Version
  255.     };
  256.     typedef int TLabelFlags;
  257.     void GetLabel(string*     label,
  258.                   ELabelType  type  = eDefault,
  259.                   TLabelFlags flags = fLabel_Default) const;
  260.     //Return seqid string with optional version for text seqid type
  261.     string GetSeqIdString(bool with_version = false) const;
  262.     // Get a string representation of the sequence IDs of a given bioseq.  This
  263.     // function produces strings in a number of possible formats.
  264.     enum EStringFormat {
  265.         eFormat_FastA,              // FastA format
  266.         eFormat_ForceGI,            // GI only, in FastA format
  267.         eFormat_BestWithoutVersion, // 'Best' accession, without the version
  268.         eFormat_BestWithVersion     // 'Best' accession, with version
  269.     };
  270.     static string GetStringDescr(const CBioseq& bioseq, EStringFormat fmt);
  271.     // Numerical quality ranking; lower is better.
  272.     // (Text)Score and WorstRank both basically correspond to the C
  273.     // Toolkit's SeqIdFindWorst, which favors textual accessions,
  274.     // whereas BestRank corresponds to the C Toolkit's SeqIdFindBest
  275.     // and favors GIs.  All three give a slight bonus to accessions
  276.     // that carry versions.
  277.     int AdjustScore       (int base_score) const;
  278.     int BaseTextScore     (void)           const;
  279.     int BaseBestRankScore (void)           const;
  280.     int BaseWorstRankScore(void)           const;
  281.     int TextScore     (void) const { return AdjustScore(BaseTextScore()); }
  282.     int BestRankScore (void) const { return AdjustScore(BaseBestRankScore()); }
  283.     int WorstRankScore(void) const
  284.         { return AdjustScore(BaseWorstRankScore()); }
  285.     // Wrappers for use with FindBestChoice from <corelib/ncbiutil.hpp>
  286.     static int Score(const CRef<CSeq_id>& id)
  287.         { return id ? id->TextScore() : kMax_Int; }
  288.     static int BestRank(const CRef<CSeq_id>& id)
  289.         { return id ? id->BestRankScore() : kMax_Int; }
  290.     static int WorstRank(const CRef<CSeq_id>& id)
  291.         { return id ? id->WorstRankScore() : kMax_Int; }
  292.     virtual void Assign(const CSerialObject& source,
  293.                         ESerialRecursionMode how = eRecursive);
  294.     virtual bool Equals(const CSerialObject& object,
  295.                         ESerialRecursionMode how = eRecursive) const;
  296. private:
  297.     void x_Init
  298.     (CSeq_id_Base::E_Choice the_type,
  299.      // Just first string, as in text seqid, for unusual
  300.      // cases (patents, pdb) not really an acc
  301.      const string&          acc_in,
  302.      const string&          name_in    = kEmptyStr,
  303.      int                    version    = 0,
  304.      const string&          release_in = kEmptyStr);
  305.     // Prohibit copy constructor & assignment operator
  306.     CSeq_id(const CSeq_id&);
  307.     CSeq_id& operator= (const CSeq_id&);
  308.     //CRef<CAbstractObjectManager> m_ObjectManager;
  309. };
  310. // Search the container of CRef<CSeq_id> for the id of given type.
  311. // Return the id of requested type, or null CRef.
  312. template<class container>
  313. CRef<CSeq_id> GetSeq_idByType(const container& ids,
  314.                                     CSeq_id::E_Choice choice)
  315. {
  316.     ITERATE (typename container, iter, ids) {
  317.         if ((*iter)->Which() == choice){
  318.             return *iter;
  319.         }
  320.     }
  321.     return CRef<CSeq_id>(0);
  322. }
  323. //return gi from id list if exists, return 0 otherwise
  324. template<class container>
  325. int FindGi(const container& ids)
  326. {
  327.     CRef<CSeq_id> id = GetSeq_idByType(ids, CSeq_id::e_Gi);
  328.     return id ? id->GetGi() : 0;
  329. }
  330. //return text seq-id from id list if exists, return 0 otherwise
  331. template<class container>
  332. CRef<CSeq_id> FindTextseq_id(const container& ids)
  333. {
  334.     ITERATE (typename container, iter, ids) {
  335.         if ( (*iter)->GetTextseq_Id() ) {
  336.             return *iter;
  337.         }
  338.     }
  339.     return CRef<CSeq_id>(0);
  340. }
  341. /////////////////// CSeq_id inline methods
  342. // Match - just uses Compare
  343. inline
  344. bool CSeq_id::Match (const CSeq_id& sid2) const
  345. {
  346.     return Compare(sid2) == e_YES;
  347. }
  348. inline
  349. int CSeq_id::AdjustScore(int base_score) const
  350. {
  351.     int score = base_score * 10;
  352.     const CTextseq_id* text_id = GetTextseq_Id();
  353.     if (text_id) {
  354.         if ( !text_id->IsSetVersion() ) {
  355.             score += 4;
  356.         }
  357.         if ( !text_id->IsSetAccession() ) {
  358.             score += 3;
  359.         }
  360.         if ( !text_id->IsSetName() ) {
  361.             score += 2;
  362.         }
  363.     }
  364.     return score;
  365. }
  366. inline
  367. int CSeq_id::BaseTextScore(void) const
  368. {
  369.     switch (Which()) {
  370.     case e_not_set:                                return kMax_Int;
  371.     case e_Giim:    case e_Gi:                     return 20;
  372.     case e_General: case e_Gibbsq: case e_Gibbmt:  return 15;
  373.     case e_Local:   case e_Patent:                 return 10;
  374.     case e_Other:                                  return 8;
  375.     default:                                       return 5;
  376.     }
  377. }
  378. inline
  379. int CSeq_id::BaseBestRankScore(void) const
  380. {
  381.     switch (Which()) {
  382.     case e_not_set:                               return 83;
  383.     case e_General: case e_Local:                 return 80;
  384.     case e_Gibbsq: case e_Gibbmt: case e_Giim:    return 70;
  385.     case e_Patent:                                return 67;
  386.     case e_Other:                                 return 65;
  387.     case e_Ddbj: case e_Prf: case e_Pdb:
  388.     case e_Tpe:  case e_Tpd: case e_Embl:
  389.     case e_Pir:  case e_Swissprot:
  390.     case e_Tpg:  case e_Genbank:                  return 60;
  391.     case e_Gi:                                    return 51;
  392.     default:                                      return 5;
  393.     }
  394. }
  395. inline
  396. int CSeq_id::BaseWorstRankScore(void) const
  397. {
  398.     switch (Which()) {
  399.     case e_not_set:                               return 83;
  400.     case e_Gi: case e_Giim:                       return 20;
  401.     case e_General: case e_Gibbsq: case e_Gibbmt: return 15;
  402.     case e_Local: case e_Patent:                  return 10;
  403.     case e_Other:                                 return 8;
  404.     case e_Ddbj: case e_Prf: case e_Pdb:
  405.     case e_Tpe:  case e_Tpd: case e_Embl:
  406.     case e_Pir:  case e_Swissprot:
  407.     case e_Tpg:  case e_Genbank:                  return 5;
  408.     default:                                      return 3;
  409.     }
  410. }
  411. /////////////////// end of CSeq_id inline methods
  412. END_objects_SCOPE // namespace ncbi::objects::
  413. END_NCBI_SCOPE
  414. /*
  415.  * ===========================================================================
  416.  *
  417.  * $Log: Seq_id.hpp,v $
  418.  * Revision 1000.2  2004/06/01 19:30:49  gouriano
  419.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.47
  420.  *
  421.  * Revision 1.47  2004/05/11 14:34:12  ucko
  422.  * Factored out and refined Textseq-id bonus calculation.
  423.  *
  424.  * Revision 1.46  2004/04/28 14:13:17  grichenk
  425.  * Added FindTextseq_id()
  426.  *
  427.  * Revision 1.45  2004/04/19 18:20:16  grichenk
  428.  * Added GetSeq_idByType() and FindGi()
  429.  *
  430.  * Revision 1.44  2004/04/01 16:36:34  ucko
  431.  * Make the scoring functions wrappers around const methods (with slightly
  432.  * different names to avoid ambiguity when passing CSeq_id::Score et al. to
  433.  * FindBestChoice) and add a more verbose comment.  Also, WorstRank,
  434.  * despite being "Worst," should still favor versioned accessions.
  435.  *
  436.  * Revision 1.43  2004/03/30 20:46:08  ucko
  437.  * BestRank: demote gibb* and patent to 70 and 67 respectively per the C Toolkit.
  438.  *
  439.  * Revision 1.42  2004/03/25 15:58:41  gouriano
  440.  * Added possibility to copy and compare serial object non-recursively
  441.  *
  442.  * Revision 1.41  2004/03/01 18:26:04  dicuccio
  443.  * Modified CSeq_id::Score(), CSeq_id::BestRank(), and CSeq_id::WorstRank to
  444.  * consider an accession's version if present.
  445.  *
  446.  * Revision 1.40  2004/01/22 21:03:58  dicuccio
  447.  * Separated functionality of enums in GetLabel() into discrete mode and flags
  448.  *
  449.  * Revision 1.39  2004/01/22 18:45:45  dicuccio
  450.  * Added new API: CSeq_id::GetLabel().  Rewired GetSeqIdString() to feed into
  451.  * GetLabel().  Rewired GetStringDescr() to feed into GetLabel() directly instead
  452.  * of feeding through GetSeqIdString().
  453.  *
  454.  * Revision 1.38  2004/01/21 18:04:20  dicuccio
  455.  * Added ctor to create a seq-id from a given dbtag, performing conversion to
  456.  * specific seq-id types where possible
  457.  *
  458.  * Revision 1.37  2004/01/16 22:11:15  ucko
  459.  * Update for new CSerializable interface.
  460.  *
  461.  * Revision 1.36  2004/01/09 19:54:13  ucko
  462.  * Give EXAMPLE prefixes to ease migration from hardcoded checks.
  463.  *
  464.  * Revision 1.35  2003/10/24 14:55:10  ucko
  465.  * Merged eAcc_con and eAcc_segset (had been mistakenly separated);
  466.  * renamed eAcc_gb_segset to eAcc_gb_con, but left the old name as a synoynm.
  467.  *
  468.  * Revision 1.34  2003/02/06 22:23:29  vasilche
  469.  * Added CSeq_id::Assign(), CSeq_loc::Assign().
  470.  * Added int CSeq_id::Compare() (not safe).
  471.  * Added caching of CSeq_loc::GetTotalRange().
  472.  *
  473.  * Revision 1.33  2003/02/04 15:15:11  grichenk
  474.  * Overrided Assign() for CSeq_loc and CSeq_id
  475.  *
  476.  * Revision 1.32  2003/01/18 08:40:04  kimelman
  477.  * addes seqid constructor for numeric types
  478.  *
  479.  * Revision 1.31  2003/01/07 19:52:07  ucko
  480.  * Add more refseq types (NR_, NS_, NW_) and list the prefixes as comments.
  481.  *
  482.  * Revision 1.30  2002/12/26 16:39:22  vasilche
  483.  * Object manager class CSeqMap rewritten.
  484.  *
  485.  * Revision 1.29  2002/12/26 12:43:42  dicuccio
  486.  * Added Win32 export specifiers
  487.  *
  488.  * Revision 1.28  2002/11/26 15:12:15  dicuccio
  489.  * Added general processing function to retrieve sequence id descriptions in a
  490.  * number of formats.
  491.  *
  492.  * Revision 1.27  2002/10/23 18:22:57  ucko
  493.  * Add self-classification (using known type information) and expand
  494.  * EAccessionInfo accordingly.
  495.  *
  496.  * Revision 1.26  2002/10/22 20:18:30  jianye
  497.  * Added GetSeqIdString()
  498.  *
  499.  * Revision 1.25  2002/10/03 18:51:11  clausen
  500.  * Removed extra whitespace
  501.  *
  502.  * Revision 1.24  2002/10/03 17:06:13  clausen
  503.  * Added BestRank() and WorstRank()
  504.  *
  505.  * Revision 1.23  2002/08/22 21:25:26  ucko
  506.  * Added a standard score function for FindBestChoice corresponding to
  507.  * the table in SeqIdFindWorst.
  508.  *
  509.  * Revision 1.22  2002/08/16 19:25:14  ucko
  510.  * +eAcc_refseq_wgs_*
  511.  *
  512.  * Revision 1.21  2002/08/14 15:52:05  ucko
  513.  * Add eAcc_refseq_ncrna(_predicted) [non-coding RNA, XR_].
  514.  *
  515.  * Revision 1.20  2002/08/01 20:32:52  ucko
  516.  * s_IdentifyAccession -> IdentifyAccession; s_ is only for module-static names.
  517.  *
  518.  * Revision 1.19  2002/07/30 19:41:33  ucko
  519.  * Add s_IdentifyAccession (along with EAccessionInfo and GetAccType).
  520.  * Move CVS log to end.
  521.  *
  522.  * Revision 1.18  2002/06/07 11:16:57  clausen
  523.  * Fixed comments
  524.  *
  525.  * Revision 1.17  2002/06/07 11:13:01  clausen
  526.  * Added comment about util/sequence.hpp
  527.  *
  528.  * Revision 1.16  2002/06/06 20:32:01  clausen
  529.  * Moved methods using object manager to objects/util
  530.  *
  531.  * Revision 1.15  2002/05/22 14:03:34  grichenk
  532.  * CSerialUserOp -- added prefix UserOp_ to Assign() and Equals()
  533.  *
  534.  * Revision 1.14  2002/05/03 21:28:04  ucko
  535.  * Introduce T(Signed)SeqPos.
  536.  *
  537.  * Revision 1.13  2002/01/10 18:43:34  clausen
  538.  * Added GetLength
  539.  *
  540.  * Revision 1.12  2001/08/31 15:59:59  clausen
  541.  * Added new constructors for FastA construction and added tpg, tpd, and tpe id types
  542.  *
  543.  * Revision 1.11  2001/07/25 19:11:09  grichenk
  544.  * Equals() and Assign() re-declared as protected
  545.  *
  546.  * Revision 1.10  2001/07/16 16:22:44  grichenk
  547.  * Added CSerialUserOp class to create Assign() and Equals() methods for
  548.  * user-defind classes.
  549.  * Added SerialAssign<>() and SerialEquals<>() functions.
  550.  *
  551.  * Revision 1.9  2001/06/25 18:52:01  grichenk
  552.  * Prohibited copy constructor and assignment operator
  553.  *
  554.  * Revision 1.8  2001/04/17 04:13:03  vakatov
  555.  * Utilize the redesigned "CSerializable" base class.
  556.  * Completely get rid of the non-standard "AsFastaString()" method in
  557.  * favor of more standard "DumpAsFasta()" one.
  558.  *
  559.  * Revision 1.7  2001/04/16 16:55:19  kholodov
  560.  * Modified: Added implementation for the ISerializable interface.
  561.  *
  562.  * Revision 1.6  2001/01/03 16:38:53  vasilche
  563.  * Added CAbstractObjectManager - stub for object manager.
  564.  * CRange extracted to separate file.
  565.  *
  566.  * Revision 1.5  2000/12/26 17:28:34  vasilche
  567.  * Simplified and formatted code.
  568.  *
  569.  * Revision 1.4  2000/12/08 22:18:41  ostell
  570.  * changed MakeFastString to AsFastaString and to use ostream instead of string
  571.  *
  572.  * Revision 1.3  2000/12/08 20:45:56  ostell
  573.  * added MakeFastaString()
  574.  *
  575.  * Revision 1.2  2000/11/27 20:36:39  vasilche
  576.  * Enum should be defined in public area.
  577.  *
  578.  * Revision 1.1  2000/11/21 18:58:12  vasilche
  579.  * Added Match() methods for CSeq_id, CObject_id and CDbtag.
  580.  *
  581.  * ===========================================================================
  582.  */
  583. #endif // OBJECTS_SEQLOC_SEQ_ID_HPP