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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: utilities.cpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 19:47:34  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.20
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: utilities.cpp,v 1000.2 2004/06/01 19:47:34 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:  Mati Shomrat
  35.  *
  36.  * File Description:
  37.  *      Implementation of utility classes and functions.
  38.  *
  39.  */
  40. #include <ncbi_pch.hpp>
  41. #include <corelib/ncbistd.hpp>
  42. #include <corelib/ncbistr.hpp>
  43. #include <serial/enumvalues.hpp>
  44. #include <serial/serialimpl.hpp>
  45. #include <objects/seqloc/Seq_id.hpp>
  46. #include <objects/seqfeat/SeqFeatData.hpp>
  47. #include <objects/seqfeat/Gb_qual.hpp>
  48. #include <objects/seqset/Seq_entry.hpp>
  49. #include <objects/seqset/Bioseq_set.hpp>
  50. #include <objects/seq/Bioseq.hpp>
  51. #include <objmgr/bioseq_handle.hpp>
  52. #include <objmgr/scope.hpp>
  53. #include <objmgr/seq_vector.hpp>
  54. #include <objmgr/util/sequence.hpp>
  55. #include <vector>
  56. #include <algorithm>
  57. #include <list>
  58. #include "utilities.hpp"
  59. BEGIN_NCBI_SCOPE
  60. BEGIN_SCOPE(objects)
  61. BEGIN_SCOPE(validator)
  62. // =============================================================================
  63. //                           Enumeration of GBQual types
  64. // =============================================================================
  65. CGbqualType::EType CGbqualType::GetType(const string& qual)
  66. {
  67.     EType type;
  68.     try {
  69.         type = static_cast<EType>(GetTypeInfo_enum_EType()->FindValue(qual));
  70.     } catch (runtime_error rt) {
  71.         type = CGbqualType::e_Bad;
  72.     }
  73.     return type;
  74. }
  75. CGbqualType::EType CGbqualType::GetType(const CGb_qual& qual)
  76. {
  77.     return GetType(qual.GetQual());
  78. }
  79. const string& CGbqualType::GetString(CGbqualType::EType gbqual)
  80. {
  81.     return GetTypeInfo_enum_EType()->FindName(gbqual, true);
  82. }
  83.         
  84. BEGIN_NAMED_ENUM_IN_INFO("", CGbqualType::, EType, false)
  85. {
  86.     ADD_ENUM_VALUE("bad",               e_Bad);
  87.     ADD_ENUM_VALUE("allele",            e_Allele);
  88.     ADD_ENUM_VALUE("anticodon",         e_Anticodon);
  89.     ADD_ENUM_VALUE("bound_moiety",      e_Bound_moiety);
  90.     ADD_ENUM_VALUE("citation",          e_Citation);
  91.     ADD_ENUM_VALUE("clone",             e_Clone);
  92.     ADD_ENUM_VALUE("codon",             e_Codon);
  93.     ADD_ENUM_VALUE("codon_start",       e_Codon_start);
  94.     ADD_ENUM_VALUE("cons_splice",       e_Cons_splice);
  95.     ADD_ENUM_VALUE("direction",         e_Direction);
  96.     ADD_ENUM_VALUE("EC_number",         e_EC_number);
  97.     ADD_ENUM_VALUE("evidence",          e_Evidence);
  98.     ADD_ENUM_VALUE("exception",         e_Exception);
  99.     ADD_ENUM_VALUE("frequency",         e_Frequency);
  100.     ADD_ENUM_VALUE("function",          e_Function);
  101.     ADD_ENUM_VALUE("gene",              e_Gene);
  102.     ADD_ENUM_VALUE("insertion_seq",     e_Insertion_seq);
  103.     ADD_ENUM_VALUE("label",             e_Label);
  104.     ADD_ENUM_VALUE("locus_tag",         e_Locus_tag);
  105.     ADD_ENUM_VALUE("map",               e_Map);
  106.     ADD_ENUM_VALUE("mod_base",          e_Mod_base);
  107.     ADD_ENUM_VALUE("note",              e_Note);
  108.     ADD_ENUM_VALUE("number",            e_Number);
  109.     ADD_ENUM_VALUE("organism",          e_Organism);
  110.     ADD_ENUM_VALUE("partial",           e_Partial);
  111.     ADD_ENUM_VALUE("PCR_conditions",    e_PCR_conditions);
  112.     ADD_ENUM_VALUE("phenotype",         e_Phenotype);
  113.     ADD_ENUM_VALUE("product",           e_Product);
  114.     ADD_ENUM_VALUE("replace",           e_Replace);
  115.     ADD_ENUM_VALUE("rpt_family",        e_Rpt_family);
  116.     ADD_ENUM_VALUE("rpt_type",          e_Rpt_type);
  117.     ADD_ENUM_VALUE("rpt_unit",          e_Rpt_unit);
  118.     ADD_ENUM_VALUE("site",              e_Site);
  119.     ADD_ENUM_VALUE("site_type",         e_Site_type);
  120.     ADD_ENUM_VALUE("standard_name",     e_Standard_name);
  121.     ADD_ENUM_VALUE("transl_except",     e_Transl_except);
  122.     ADD_ENUM_VALUE("transl_table",      e_Transl_table);
  123.     ADD_ENUM_VALUE("translation",       e_Translation);
  124.     ADD_ENUM_VALUE("transposon",        e_Transposon);
  125.     ADD_ENUM_VALUE("usedin",            e_Usedin);
  126. }
  127. END_ENUM_INFO
  128. // =============================================================================
  129. //                        Associating Features and GBQuals
  130. // =============================================================================
  131. bool CFeatQualAssoc::IsLegalGbqual
  132. (CSeqFeatData::ESubtype ftype,
  133.  CGbqualType::EType gbqual) 
  134. {
  135.     return Instance()->IsLegal(ftype, gbqual);
  136. }
  137. const CFeatQualAssoc::TGBQualTypeVec& CFeatQualAssoc::GetMandatoryGbquals
  138. (CSeqFeatData::ESubtype ftype)
  139. {
  140.     return Instance()->GetMandatoryQuals(ftype);
  141. }
  142. auto_ptr<CFeatQualAssoc> CFeatQualAssoc::sm_Instance;
  143. bool CFeatQualAssoc::IsLegal
  144. (CSeqFeatData::ESubtype ftype, 
  145.  CGbqualType::EType gbqual)
  146. {
  147.     if ( m_LegalGbquals.find(ftype) != m_LegalGbquals.end() ) {
  148.         if ( find( m_LegalGbquals[ftype].begin(), 
  149.                    m_LegalGbquals[ftype].end(), 
  150.                    gbqual) != m_LegalGbquals[ftype].end() ) {
  151.             return true;
  152.         }
  153.     }
  154.     return false;
  155. }
  156. const CFeatQualAssoc::TGBQualTypeVec& CFeatQualAssoc::GetMandatoryQuals
  157. (CSeqFeatData::ESubtype ftype)
  158. {
  159.     static TGBQualTypeVec empty;
  160.     if ( m_MandatoryGbquals.find(ftype) != m_MandatoryGbquals.end() ) {
  161.         return m_MandatoryGbquals[ftype];
  162.     }
  163.     return empty;
  164. }
  165. CFeatQualAssoc* CFeatQualAssoc::Instance(void)
  166. {
  167.     if ( !sm_Instance.get() ) {
  168.         sm_Instance.reset(new CFeatQualAssoc);
  169.     }
  170.     return sm_Instance.get();
  171. }
  172. CFeatQualAssoc::CFeatQualAssoc(void)
  173. {
  174.     PoplulateLegalGbquals();
  175.     PopulateMandatoryGbquals();
  176. }
  177. void CFeatQualAssoc::Associate
  178. (CSeqFeatData::ESubtype feat_subtype,
  179.  CGbqualType::EType gbqual_type)
  180. {
  181.     // IMPORTANT: Bug in GCC compile prevent the code to be written as:
  182.     //    m_LegalGbqual[feat_subtype].push_back(gbqual_type);
  183.     TGBQualTypeVec& vec = m_LegalGbquals[feat_subtype];
  184.     vec.push_back(gbqual_type);
  185. }
  186. void CFeatQualAssoc::PoplulateLegalGbquals(void)
  187. {
  188.     // gene
  189.     Associate( CSeqFeatData::eSubtype_gene, CGbqualType::e_Allele );
  190.     Associate( CSeqFeatData::eSubtype_gene, CGbqualType::e_Function );
  191.     Associate( CSeqFeatData::eSubtype_gene, CGbqualType::e_Label );
  192.     Associate( CSeqFeatData::eSubtype_gene, CGbqualType::e_Map );
  193.     Associate( CSeqFeatData::eSubtype_gene, CGbqualType::e_Phenotype );
  194.     Associate( CSeqFeatData::eSubtype_gene, CGbqualType::e_Product );
  195.     Associate( CSeqFeatData::eSubtype_gene, CGbqualType::e_Standard_name );
  196.     Associate( CSeqFeatData::eSubtype_gene, CGbqualType::e_Usedin );
  197.     
  198.  
  199.     // CDS
  200.     Associate( CSeqFeatData::eSubtype_cdregion, CGbqualType::e_Allele );
  201.     Associate( CSeqFeatData::eSubtype_cdregion, CGbqualType::e_Codon );
  202.     Associate( CSeqFeatData::eSubtype_cdregion, CGbqualType::e_Label );
  203.     Associate( CSeqFeatData::eSubtype_cdregion, CGbqualType::e_Map );
  204.     Associate( CSeqFeatData::eSubtype_cdregion, CGbqualType::e_Number );
  205.     Associate( CSeqFeatData::eSubtype_cdregion, CGbqualType::e_Standard_name );
  206.     Associate( CSeqFeatData::eSubtype_cdregion, CGbqualType::e_Usedin );
  207.     // prot
  208.     Associate( CSeqFeatData::eSubtype_prot, CGbqualType::e_Product );
  209.     // preRNA
  210.     Associate( CSeqFeatData::eSubtype_preRNA, CGbqualType::e_Allele );
  211.     Associate( CSeqFeatData::eSubtype_preRNA, CGbqualType::e_Function );
  212.     Associate( CSeqFeatData::eSubtype_preRNA, CGbqualType::e_Label );
  213.     Associate( CSeqFeatData::eSubtype_preRNA, CGbqualType::e_Map );
  214.     Associate( CSeqFeatData::eSubtype_preRNA, CGbqualType::e_Product );
  215.     Associate( CSeqFeatData::eSubtype_preRNA, CGbqualType::e_Standard_name );
  216.     Associate( CSeqFeatData::eSubtype_preRNA, CGbqualType::e_Usedin );
  217.     // mRNA
  218.     Associate( CSeqFeatData::eSubtype_mRNA, CGbqualType::e_Allele );
  219.     Associate( CSeqFeatData::eSubtype_mRNA, CGbqualType::e_Function );
  220.     Associate( CSeqFeatData::eSubtype_mRNA, CGbqualType::e_Label );
  221.     Associate( CSeqFeatData::eSubtype_mRNA, CGbqualType::e_Map );
  222.     Associate( CSeqFeatData::eSubtype_mRNA, CGbqualType::e_Product );
  223.     Associate( CSeqFeatData::eSubtype_mRNA, CGbqualType::e_Standard_name );
  224.     Associate( CSeqFeatData::eSubtype_mRNA, CGbqualType::e_Usedin );
  225.     // tRNA
  226.     Associate( CSeqFeatData::eSubtype_tRNA, CGbqualType::e_Function );
  227.     Associate( CSeqFeatData::eSubtype_tRNA, CGbqualType::e_Label );
  228.     Associate( CSeqFeatData::eSubtype_tRNA, CGbqualType::e_Map );
  229.     Associate( CSeqFeatData::eSubtype_tRNA, CGbqualType::e_Product );
  230.     Associate( CSeqFeatData::eSubtype_tRNA, CGbqualType::e_Standard_name );
  231.     Associate( CSeqFeatData::eSubtype_tRNA, CGbqualType::e_Usedin );
  232.     // rRNA
  233.     Associate( CSeqFeatData::eSubtype_rRNA, CGbqualType::e_Function );
  234.     Associate( CSeqFeatData::eSubtype_rRNA, CGbqualType::e_Label );
  235.     Associate( CSeqFeatData::eSubtype_rRNA, CGbqualType::e_Map );
  236.     Associate( CSeqFeatData::eSubtype_rRNA, CGbqualType::e_Product );
  237.     Associate( CSeqFeatData::eSubtype_rRNA, CGbqualType::e_Standard_name );
  238.     Associate( CSeqFeatData::eSubtype_rRNA, CGbqualType::e_Usedin );
  239.     // snRNA
  240.     Associate( CSeqFeatData::eSubtype_snRNA, CGbqualType::e_Function );
  241.     Associate( CSeqFeatData::eSubtype_snRNA, CGbqualType::e_Label );
  242.     Associate( CSeqFeatData::eSubtype_snRNA, CGbqualType::e_Map );
  243.     Associate( CSeqFeatData::eSubtype_snRNA, CGbqualType::e_Product );
  244.     Associate( CSeqFeatData::eSubtype_snRNA, CGbqualType::e_Standard_name );
  245.     Associate( CSeqFeatData::eSubtype_snRNA, CGbqualType::e_Usedin );
  246.     // scRNA
  247.     Associate( CSeqFeatData::eSubtype_scRNA, CGbqualType::e_Function );
  248.     Associate( CSeqFeatData::eSubtype_scRNA, CGbqualType::e_Label );
  249.     Associate( CSeqFeatData::eSubtype_scRNA, CGbqualType::e_Map );
  250.     Associate( CSeqFeatData::eSubtype_scRNA, CGbqualType::e_Product );
  251.     Associate( CSeqFeatData::eSubtype_scRNA, CGbqualType::e_Standard_name );
  252.     Associate( CSeqFeatData::eSubtype_scRNA, CGbqualType::e_Usedin );
  253.     // otherRNA
  254.     Associate( CSeqFeatData::eSubtype_otherRNA, CGbqualType::e_Function );
  255.     Associate( CSeqFeatData::eSubtype_otherRNA, CGbqualType::e_Label );
  256.     Associate( CSeqFeatData::eSubtype_otherRNA, CGbqualType::e_Map );
  257.     Associate( CSeqFeatData::eSubtype_otherRNA, CGbqualType::e_Product );
  258.     Associate( CSeqFeatData::eSubtype_otherRNA, CGbqualType::e_Standard_name );
  259.     Associate( CSeqFeatData::eSubtype_otherRNA, CGbqualType::e_Usedin );
  260.     // attenuator
  261.     Associate( CSeqFeatData::eSubtype_attenuator, CGbqualType::e_Label );
  262.     Associate( CSeqFeatData::eSubtype_attenuator, CGbqualType::e_Map );
  263.     Associate( CSeqFeatData::eSubtype_attenuator, CGbqualType::e_Phenotype );
  264.     Associate( CSeqFeatData::eSubtype_attenuator, CGbqualType::e_Usedin );
  265.     // C_region
  266.     Associate( CSeqFeatData::eSubtype_C_region, CGbqualType::e_Label );
  267.     Associate( CSeqFeatData::eSubtype_C_region, CGbqualType::e_Map );
  268.     Associate( CSeqFeatData::eSubtype_C_region, CGbqualType::e_Product );
  269.     Associate( CSeqFeatData::eSubtype_C_region, CGbqualType::e_Standard_name );
  270.     Associate( CSeqFeatData::eSubtype_C_region, CGbqualType::e_Usedin );
  271.     // CAAT_signal
  272.     Associate( CSeqFeatData::eSubtype_CAAT_signal, CGbqualType::e_Label );
  273.     Associate( CSeqFeatData::eSubtype_CAAT_signal, CGbqualType::e_Map );
  274.     Associate( CSeqFeatData::eSubtype_CAAT_signal, CGbqualType::e_Usedin );
  275.     // Imp_CDS
  276.     Associate( CSeqFeatData::eSubtype_Imp_CDS, CGbqualType::e_Codon );
  277.     Associate( CSeqFeatData::eSubtype_Imp_CDS, CGbqualType::e_EC_number );
  278.     Associate( CSeqFeatData::eSubtype_Imp_CDS, CGbqualType::e_Function );
  279.     Associate( CSeqFeatData::eSubtype_Imp_CDS, CGbqualType::e_Label );
  280.     Associate( CSeqFeatData::eSubtype_Imp_CDS, CGbqualType::e_Map );
  281.     Associate( CSeqFeatData::eSubtype_Imp_CDS, CGbqualType::e_Number );
  282.     Associate( CSeqFeatData::eSubtype_Imp_CDS, CGbqualType::e_Product );
  283.     Associate( CSeqFeatData::eSubtype_Imp_CDS, CGbqualType::e_Standard_name );
  284.     Associate( CSeqFeatData::eSubtype_Imp_CDS, CGbqualType::e_Usedin );
  285.     // conflict
  286.     Associate( CSeqFeatData::eSubtype_conflict, CGbqualType::e_Label );
  287.     Associate( CSeqFeatData::eSubtype_conflict, CGbqualType::e_Map );
  288.     Associate( CSeqFeatData::eSubtype_conflict, CGbqualType::e_Replace );
  289.     Associate( CSeqFeatData::eSubtype_conflict, CGbqualType::e_Label );
  290.     // D_loop
  291.     Associate( CSeqFeatData::eSubtype_D_loop, CGbqualType::e_Label );
  292.     Associate( CSeqFeatData::eSubtype_D_loop, CGbqualType::e_Map );
  293.     Associate( CSeqFeatData::eSubtype_D_loop, CGbqualType::e_Usedin );
  294.     // D_segment
  295.     Associate( CSeqFeatData::eSubtype_D_segment, CGbqualType::e_Label );
  296.     Associate( CSeqFeatData::eSubtype_D_segment, CGbqualType::e_Map );
  297.     Associate( CSeqFeatData::eSubtype_D_segment, CGbqualType::e_Product );
  298.     Associate( CSeqFeatData::eSubtype_D_segment, CGbqualType::e_Standard_name );
  299.     Associate( CSeqFeatData::eSubtype_D_segment, CGbqualType::e_Usedin );
  300.     // enhancer
  301.     Associate( CSeqFeatData::eSubtype_enhancer, CGbqualType::e_Label );
  302.     Associate( CSeqFeatData::eSubtype_enhancer, CGbqualType::e_Map );
  303.     Associate( CSeqFeatData::eSubtype_enhancer, CGbqualType::e_Standard_name );
  304.     Associate( CSeqFeatData::eSubtype_enhancer, CGbqualType::e_Usedin );
  305.     // exon
  306.     Associate( CSeqFeatData::eSubtype_exon, CGbqualType::e_Allele );
  307.     Associate( CSeqFeatData::eSubtype_exon, CGbqualType::e_EC_number );
  308.     Associate( CSeqFeatData::eSubtype_exon, CGbqualType::e_Function );
  309.     Associate( CSeqFeatData::eSubtype_exon, CGbqualType::e_Label );
  310.     Associate( CSeqFeatData::eSubtype_exon, CGbqualType::e_Map );
  311.     Associate( CSeqFeatData::eSubtype_exon, CGbqualType::e_Number );
  312.     Associate( CSeqFeatData::eSubtype_exon, CGbqualType::e_Product );
  313.     Associate( CSeqFeatData::eSubtype_exon, CGbqualType::e_Standard_name );
  314.     Associate( CSeqFeatData::eSubtype_exon, CGbqualType::e_Usedin );
  315.     // GC_signal
  316.     Associate( CSeqFeatData::eSubtype_GC_signal, CGbqualType::e_Label );
  317.     Associate( CSeqFeatData::eSubtype_GC_signal, CGbqualType::e_Map );
  318.     Associate( CSeqFeatData::eSubtype_GC_signal, CGbqualType::e_Usedin );
  319.     // iDNA
  320.     Associate( CSeqFeatData::eSubtype_iDNA, CGbqualType::e_Function );
  321.     Associate( CSeqFeatData::eSubtype_iDNA, CGbqualType::e_Label );
  322.     Associate( CSeqFeatData::eSubtype_iDNA, CGbqualType::e_Map );
  323.     Associate( CSeqFeatData::eSubtype_iDNA, CGbqualType::e_Number );
  324.     Associate( CSeqFeatData::eSubtype_iDNA, CGbqualType::e_Standard_name );
  325.     Associate( CSeqFeatData::eSubtype_iDNA, CGbqualType::e_Usedin );
  326.     // intron
  327.     Associate( CSeqFeatData::eSubtype_intron, CGbqualType::e_Allele );
  328.     Associate( CSeqFeatData::eSubtype_intron, CGbqualType::e_Cons_splice );
  329.     Associate( CSeqFeatData::eSubtype_intron, CGbqualType::e_Function );
  330.     Associate( CSeqFeatData::eSubtype_intron, CGbqualType::e_Label );
  331.     Associate( CSeqFeatData::eSubtype_intron, CGbqualType::e_Map );
  332.     Associate( CSeqFeatData::eSubtype_intron, CGbqualType::e_Number );
  333.     Associate( CSeqFeatData::eSubtype_intron, CGbqualType::e_Standard_name );
  334.     Associate( CSeqFeatData::eSubtype_intron, CGbqualType::e_Usedin );
  335.     // J_segment
  336.     Associate( CSeqFeatData::eSubtype_J_segment, CGbqualType::e_Label );
  337.     Associate( CSeqFeatData::eSubtype_J_segment, CGbqualType::e_Map );
  338.     Associate( CSeqFeatData::eSubtype_J_segment, CGbqualType::e_Product );
  339.     Associate( CSeqFeatData::eSubtype_J_segment, CGbqualType::e_Standard_name );
  340.     Associate( CSeqFeatData::eSubtype_J_segment, CGbqualType::e_Usedin );
  341.     // LTR
  342.     Associate( CSeqFeatData::eSubtype_LTR, CGbqualType::e_Function );
  343.     Associate( CSeqFeatData::eSubtype_LTR, CGbqualType::e_Label );
  344.     Associate( CSeqFeatData::eSubtype_LTR, CGbqualType::e_Map );
  345.     Associate( CSeqFeatData::eSubtype_LTR, CGbqualType::e_Standard_name );
  346.     Associate( CSeqFeatData::eSubtype_LTR, CGbqualType::e_Usedin );
  347.     // mat_peptide
  348.     Associate( CSeqFeatData::eSubtype_mat_peptide, CGbqualType::e_EC_number );
  349.     Associate( CSeqFeatData::eSubtype_mat_peptide, CGbqualType::e_Function );
  350.     Associate( CSeqFeatData::eSubtype_mat_peptide, CGbqualType::e_Label );
  351.     Associate( CSeqFeatData::eSubtype_mat_peptide, CGbqualType::e_Map );
  352.     Associate( CSeqFeatData::eSubtype_mat_peptide, CGbqualType::e_Product );
  353.     Associate( CSeqFeatData::eSubtype_mat_peptide, CGbqualType::e_Standard_name );
  354.     Associate( CSeqFeatData::eSubtype_mat_peptide, CGbqualType::e_Usedin );
  355.     // misc_binding
  356.     Associate( CSeqFeatData::eSubtype_misc_binding, CGbqualType::e_Bound_moiety );
  357.     Associate( CSeqFeatData::eSubtype_misc_binding, CGbqualType::e_Function );
  358.     Associate( CSeqFeatData::eSubtype_misc_binding, CGbqualType::e_Label );
  359.     Associate( CSeqFeatData::eSubtype_misc_binding, CGbqualType::e_Map );
  360.     Associate( CSeqFeatData::eSubtype_misc_binding, CGbqualType::e_Usedin );
  361.     // misc_difference
  362.     Associate( CSeqFeatData::eSubtype_misc_difference, CGbqualType::e_Clone );
  363.     Associate( CSeqFeatData::eSubtype_misc_difference, CGbqualType::e_Label );
  364.     Associate( CSeqFeatData::eSubtype_misc_difference, CGbqualType::e_Map );
  365.     Associate( CSeqFeatData::eSubtype_misc_difference, CGbqualType::e_Phenotype );
  366.     Associate( CSeqFeatData::eSubtype_misc_difference, CGbqualType::e_Replace );
  367.     Associate( CSeqFeatData::eSubtype_misc_difference, CGbqualType::e_Standard_name );
  368.     Associate( CSeqFeatData::eSubtype_misc_difference, CGbqualType::e_Usedin );
  369.     // misc_feature
  370.     Associate( CSeqFeatData::eSubtype_misc_feature, CGbqualType::e_Function );
  371.     Associate( CSeqFeatData::eSubtype_misc_feature, CGbqualType::e_Label );
  372.     Associate( CSeqFeatData::eSubtype_misc_feature, CGbqualType::e_Map );
  373.     Associate( CSeqFeatData::eSubtype_misc_feature, CGbqualType::e_Number );
  374.     Associate( CSeqFeatData::eSubtype_misc_feature, CGbqualType::e_Phenotype );
  375.     Associate( CSeqFeatData::eSubtype_misc_feature, CGbqualType::e_Product );
  376.     Associate( CSeqFeatData::eSubtype_misc_feature, CGbqualType::e_Standard_name );
  377.     Associate( CSeqFeatData::eSubtype_misc_feature, CGbqualType::e_Usedin );
  378.     // misc_recomb
  379.     Associate( CSeqFeatData::eSubtype_misc_recomb, CGbqualType::e_Label );
  380.     Associate( CSeqFeatData::eSubtype_misc_recomb, CGbqualType::e_Map );
  381.     Associate( CSeqFeatData::eSubtype_misc_recomb, CGbqualType::e_Organism );
  382.     Associate( CSeqFeatData::eSubtype_misc_recomb, CGbqualType::e_Standard_name );
  383.     Associate( CSeqFeatData::eSubtype_misc_recomb, CGbqualType::e_Usedin );
  384.     // misc_signal
  385.     Associate( CSeqFeatData::eSubtype_misc_signal, CGbqualType::e_Function );
  386.     Associate( CSeqFeatData::eSubtype_misc_signal, CGbqualType::e_Label );
  387.     Associate( CSeqFeatData::eSubtype_misc_signal, CGbqualType::e_Map );
  388.     Associate( CSeqFeatData::eSubtype_misc_signal, CGbqualType::e_Phenotype );
  389.     Associate( CSeqFeatData::eSubtype_misc_signal, CGbqualType::e_Standard_name );
  390.     Associate( CSeqFeatData::eSubtype_misc_signal, CGbqualType::e_Usedin );
  391.     // misc_structure
  392.     Associate( CSeqFeatData::eSubtype_misc_structure, CGbqualType::e_Function );
  393.     Associate( CSeqFeatData::eSubtype_misc_structure, CGbqualType::e_Label );
  394.     Associate( CSeqFeatData::eSubtype_misc_structure, CGbqualType::e_Map );
  395.     Associate( CSeqFeatData::eSubtype_misc_structure, CGbqualType::e_Standard_name );
  396.     Associate( CSeqFeatData::eSubtype_misc_structure, CGbqualType::e_Usedin );
  397.     // modified_base
  398.     Associate( CSeqFeatData::eSubtype_modified_base, CGbqualType::e_Frequency );
  399.     Associate( CSeqFeatData::eSubtype_modified_base, CGbqualType::e_Label );
  400.     Associate( CSeqFeatData::eSubtype_modified_base, CGbqualType::e_Map );
  401.     Associate( CSeqFeatData::eSubtype_modified_base, CGbqualType::e_Mod_base );
  402.     Associate( CSeqFeatData::eSubtype_modified_base, CGbqualType::e_Usedin );
  403.     // N_region
  404.     Associate( CSeqFeatData::eSubtype_N_region, CGbqualType::e_Label );
  405.     Associate( CSeqFeatData::eSubtype_N_region, CGbqualType::e_Map );
  406.     Associate( CSeqFeatData::eSubtype_N_region, CGbqualType::e_Product );
  407.     Associate( CSeqFeatData::eSubtype_N_region, CGbqualType::e_Standard_name );
  408.     Associate( CSeqFeatData::eSubtype_N_region, CGbqualType::e_Usedin );
  409.     // old_sequence
  410.     Associate( CSeqFeatData::eSubtype_old_sequence, CGbqualType::e_Label );
  411.     Associate( CSeqFeatData::eSubtype_old_sequence, CGbqualType::e_Map );
  412.     Associate( CSeqFeatData::eSubtype_old_sequence, CGbqualType::e_Replace );
  413.     Associate( CSeqFeatData::eSubtype_old_sequence, CGbqualType::e_Usedin );
  414.     // polyA_signal
  415.     Associate( CSeqFeatData::eSubtype_polyA_signal, CGbqualType::e_Label );
  416.     Associate( CSeqFeatData::eSubtype_polyA_signal, CGbqualType::e_Map );
  417.     Associate( CSeqFeatData::eSubtype_polyA_signal, CGbqualType::e_Usedin );
  418.     // polyA_site
  419.     Associate( CSeqFeatData::eSubtype_polyA_site, CGbqualType::e_Label );
  420.     Associate( CSeqFeatData::eSubtype_polyA_site, CGbqualType::e_Map );
  421.     Associate( CSeqFeatData::eSubtype_polyA_site, CGbqualType::e_Usedin );
  422.     // prim_transcript
  423.     Associate( CSeqFeatData::eSubtype_prim_transcript, CGbqualType::e_Allele );
  424.     Associate( CSeqFeatData::eSubtype_prim_transcript, CGbqualType::e_Function );
  425.     Associate( CSeqFeatData::eSubtype_prim_transcript, CGbqualType::e_Label );
  426.     Associate( CSeqFeatData::eSubtype_prim_transcript, CGbqualType::e_Map );
  427.     Associate( CSeqFeatData::eSubtype_prim_transcript, CGbqualType::e_Standard_name );
  428.     Associate( CSeqFeatData::eSubtype_prim_transcript, CGbqualType::e_Usedin );
  429.     // primer_bind
  430.     Associate( CSeqFeatData::eSubtype_primer_bind, CGbqualType::e_Label );
  431.     Associate( CSeqFeatData::eSubtype_primer_bind, CGbqualType::e_Map );
  432.     Associate( CSeqFeatData::eSubtype_primer_bind, CGbqualType::e_PCR_conditions );
  433.     Associate( CSeqFeatData::eSubtype_primer_bind, CGbqualType::e_Standard_name );
  434.     Associate( CSeqFeatData::eSubtype_primer_bind, CGbqualType::e_Usedin );
  435.     // promoter
  436.     Associate( CSeqFeatData::eSubtype_promoter, CGbqualType::e_Function );
  437.     Associate( CSeqFeatData::eSubtype_promoter, CGbqualType::e_Label );
  438.     Associate( CSeqFeatData::eSubtype_promoter, CGbqualType::e_Map );
  439.     Associate( CSeqFeatData::eSubtype_promoter, CGbqualType::e_Phenotype );
  440.     Associate( CSeqFeatData::eSubtype_promoter, CGbqualType::e_Standard_name );
  441.     Associate( CSeqFeatData::eSubtype_promoter, CGbqualType::e_Usedin );
  442.     // protein_bind
  443.     Associate( CSeqFeatData::eSubtype_protein_bind, CGbqualType::e_Bound_moiety );
  444.     Associate( CSeqFeatData::eSubtype_protein_bind, CGbqualType::e_Function );
  445.     Associate( CSeqFeatData::eSubtype_protein_bind, CGbqualType::e_Label );
  446.     Associate( CSeqFeatData::eSubtype_protein_bind, CGbqualType::e_Map );
  447.     Associate( CSeqFeatData::eSubtype_protein_bind, CGbqualType::e_Standard_name );
  448.     Associate( CSeqFeatData::eSubtype_protein_bind, CGbqualType::e_Usedin );
  449.     // RBS
  450.     Associate( CSeqFeatData::eSubtype_RBS, CGbqualType::e_Label );
  451.     Associate( CSeqFeatData::eSubtype_RBS, CGbqualType::e_Map );
  452.     Associate( CSeqFeatData::eSubtype_RBS, CGbqualType::e_Standard_name );
  453.     Associate( CSeqFeatData::eSubtype_RBS, CGbqualType::e_Usedin );
  454.     // repeat_region
  455.     Associate( CSeqFeatData::eSubtype_repeat_region, CGbqualType::e_Function );
  456.     Associate( CSeqFeatData::eSubtype_repeat_region, CGbqualType::e_Label );
  457.     Associate( CSeqFeatData::eSubtype_repeat_region, CGbqualType::e_Map );
  458.     Associate( CSeqFeatData::eSubtype_repeat_region, CGbqualType::e_Rpt_family );
  459.     Associate( CSeqFeatData::eSubtype_repeat_region, CGbqualType::e_Rpt_type );
  460.     Associate( CSeqFeatData::eSubtype_repeat_region, CGbqualType::e_Rpt_unit );
  461.     Associate( CSeqFeatData::eSubtype_repeat_region, CGbqualType::e_Standard_name );
  462.     Associate( CSeqFeatData::eSubtype_repeat_region, CGbqualType::e_Transposon );
  463.     Associate( CSeqFeatData::eSubtype_repeat_region, CGbqualType::e_Usedin );
  464.     Associate( CSeqFeatData::eSubtype_repeat_region, CGbqualType::e_Insertion_seq );
  465.     // repeat_unit
  466.     Associate( CSeqFeatData::eSubtype_repeat_unit, CGbqualType::e_Function );
  467.     Associate( CSeqFeatData::eSubtype_repeat_unit, CGbqualType::e_Label );
  468.     Associate( CSeqFeatData::eSubtype_repeat_unit, CGbqualType::e_Map );
  469.     Associate( CSeqFeatData::eSubtype_repeat_unit, CGbqualType::e_Rpt_family );
  470.     Associate( CSeqFeatData::eSubtype_repeat_unit, CGbqualType::e_Rpt_type );
  471.     Associate( CSeqFeatData::eSubtype_repeat_unit, CGbqualType::e_Usedin );
  472.     // rep_origin
  473.     Associate( CSeqFeatData::eSubtype_rep_origin, CGbqualType::e_Direction );
  474.     Associate( CSeqFeatData::eSubtype_rep_origin, CGbqualType::e_Label );
  475.     Associate( CSeqFeatData::eSubtype_rep_origin, CGbqualType::e_Map );
  476.     Associate( CSeqFeatData::eSubtype_rep_origin, CGbqualType::e_Standard_name );
  477.     Associate( CSeqFeatData::eSubtype_rep_origin, CGbqualType::e_Usedin );
  478.     // S_region
  479.     Associate( CSeqFeatData::eSubtype_repeat_unit, CGbqualType::e_Label );
  480.     Associate( CSeqFeatData::eSubtype_repeat_unit, CGbqualType::e_Map );
  481.     Associate( CSeqFeatData::eSubtype_repeat_unit, CGbqualType::e_Product );
  482.     Associate( CSeqFeatData::eSubtype_repeat_unit, CGbqualType::e_Standard_name );
  483.     Associate( CSeqFeatData::eSubtype_repeat_unit, CGbqualType::e_Usedin );
  484.     // satellite
  485.     Associate( CSeqFeatData::eSubtype_satellite, CGbqualType::e_Label );
  486.     Associate( CSeqFeatData::eSubtype_satellite, CGbqualType::e_Map );
  487.     Associate( CSeqFeatData::eSubtype_satellite, CGbqualType::e_Rpt_family );
  488.     Associate( CSeqFeatData::eSubtype_satellite, CGbqualType::e_Rpt_type );
  489.     Associate( CSeqFeatData::eSubtype_satellite, CGbqualType::e_Rpt_unit );
  490.     Associate( CSeqFeatData::eSubtype_satellite, CGbqualType::e_Standard_name );
  491.     Associate( CSeqFeatData::eSubtype_satellite, CGbqualType::e_Usedin );
  492.     // sig_peptide
  493.     Associate( CSeqFeatData::eSubtype_sig_peptide, CGbqualType::e_Function );
  494.     Associate( CSeqFeatData::eSubtype_sig_peptide, CGbqualType::e_Label );
  495.     Associate( CSeqFeatData::eSubtype_sig_peptide, CGbqualType::e_Map );
  496.     Associate( CSeqFeatData::eSubtype_sig_peptide, CGbqualType::e_Product );
  497.     Associate( CSeqFeatData::eSubtype_sig_peptide, CGbqualType::e_Standard_name );
  498.     Associate( CSeqFeatData::eSubtype_sig_peptide, CGbqualType::e_Usedin );
  499.     // stem_loop
  500.     Associate( CSeqFeatData::eSubtype_stem_loop, CGbqualType::e_Function );
  501.     Associate( CSeqFeatData::eSubtype_stem_loop, CGbqualType::e_Label );
  502.     Associate( CSeqFeatData::eSubtype_stem_loop, CGbqualType::e_Map );
  503.     Associate( CSeqFeatData::eSubtype_stem_loop, CGbqualType::e_Standard_name );
  504.     Associate( CSeqFeatData::eSubtype_stem_loop, CGbqualType::e_Usedin );
  505.     // STS
  506.     Associate( CSeqFeatData::eSubtype_STS, CGbqualType::e_Label );
  507.     Associate( CSeqFeatData::eSubtype_STS, CGbqualType::e_Map );
  508.     Associate( CSeqFeatData::eSubtype_STS, CGbqualType::e_Standard_name );
  509.     Associate( CSeqFeatData::eSubtype_STS, CGbqualType::e_Usedin );
  510.     // TATA_signal
  511.     Associate( CSeqFeatData::eSubtype_TATA_signal, CGbqualType::e_Label );
  512.     Associate( CSeqFeatData::eSubtype_TATA_signal, CGbqualType::e_Map );
  513.     Associate( CSeqFeatData::eSubtype_TATA_signal, CGbqualType::e_Usedin );
  514.     // terminator
  515.     Associate( CSeqFeatData::eSubtype_terminator, CGbqualType::e_Label );
  516.     Associate( CSeqFeatData::eSubtype_terminator, CGbqualType::e_Map );
  517.     Associate( CSeqFeatData::eSubtype_terminator, CGbqualType::e_Standard_name );
  518.     Associate( CSeqFeatData::eSubtype_terminator, CGbqualType::e_Usedin );
  519.     // transit_peptide
  520.     Associate( CSeqFeatData::eSubtype_transit_peptide, CGbqualType::e_Function );
  521.     Associate( CSeqFeatData::eSubtype_transit_peptide, CGbqualType::e_Label );
  522.     Associate( CSeqFeatData::eSubtype_transit_peptide, CGbqualType::e_Map );
  523.     Associate( CSeqFeatData::eSubtype_transit_peptide, CGbqualType::e_Product );
  524.     Associate( CSeqFeatData::eSubtype_transit_peptide, CGbqualType::e_Standard_name );
  525.     Associate( CSeqFeatData::eSubtype_transit_peptide, CGbqualType::e_Usedin );
  526.     // unsure
  527.     Associate( CSeqFeatData::eSubtype_unsure, CGbqualType::e_Label );
  528.     Associate( CSeqFeatData::eSubtype_unsure, CGbqualType::e_Map );
  529.     Associate( CSeqFeatData::eSubtype_unsure, CGbqualType::e_Replace );
  530.     Associate( CSeqFeatData::eSubtype_unsure, CGbqualType::e_Usedin );
  531.     // V_region
  532.     Associate( CSeqFeatData::eSubtype_V_region, CGbqualType::e_Label );
  533.     Associate( CSeqFeatData::eSubtype_V_region, CGbqualType::e_Map );
  534.     Associate( CSeqFeatData::eSubtype_V_region, CGbqualType::e_Product );
  535.     Associate( CSeqFeatData::eSubtype_V_region, CGbqualType::e_Standard_name );
  536.     Associate( CSeqFeatData::eSubtype_V_region, CGbqualType::e_Usedin );
  537.     // V_segment
  538.     Associate( CSeqFeatData::eSubtype_V_segment, CGbqualType::e_Label );
  539.     Associate( CSeqFeatData::eSubtype_V_segment, CGbqualType::e_Map );
  540.     Associate( CSeqFeatData::eSubtype_V_segment, CGbqualType::e_Product );
  541.     Associate( CSeqFeatData::eSubtype_V_segment, CGbqualType::e_Standard_name );
  542.     Associate( CSeqFeatData::eSubtype_V_segment, CGbqualType::e_Usedin );
  543.     // variation
  544.     Associate( CSeqFeatData::eSubtype_variation, CGbqualType::e_Allele );
  545.     Associate( CSeqFeatData::eSubtype_variation, CGbqualType::e_Frequency );
  546.     Associate( CSeqFeatData::eSubtype_variation, CGbqualType::e_Label );
  547.     Associate( CSeqFeatData::eSubtype_variation, CGbqualType::e_Map );
  548.     Associate( CSeqFeatData::eSubtype_variation, CGbqualType::e_Phenotype );
  549.     Associate( CSeqFeatData::eSubtype_variation, CGbqualType::e_Product );
  550.     Associate( CSeqFeatData::eSubtype_variation, CGbqualType::e_Replace );
  551.     Associate( CSeqFeatData::eSubtype_variation, CGbqualType::e_Standard_name );
  552.     Associate( CSeqFeatData::eSubtype_variation, CGbqualType::e_Usedin );
  553.     // 3clip
  554.     Associate( CSeqFeatData::eSubtype_3clip, CGbqualType::e_Allele );
  555.     Associate( CSeqFeatData::eSubtype_3clip, CGbqualType::e_Function );
  556.     Associate( CSeqFeatData::eSubtype_3clip, CGbqualType::e_Label );
  557.     Associate( CSeqFeatData::eSubtype_3clip, CGbqualType::e_Map );
  558.     Associate( CSeqFeatData::eSubtype_3clip, CGbqualType::e_Standard_name );
  559.     Associate( CSeqFeatData::eSubtype_3clip, CGbqualType::e_Usedin );
  560.     // 3UTR
  561.     Associate( CSeqFeatData::eSubtype_3UTR, CGbqualType::e_Allele );
  562.     Associate( CSeqFeatData::eSubtype_3UTR, CGbqualType::e_Function );
  563.     Associate( CSeqFeatData::eSubtype_3UTR, CGbqualType::e_Label );
  564.     Associate( CSeqFeatData::eSubtype_3UTR, CGbqualType::e_Map );
  565.     Associate( CSeqFeatData::eSubtype_3UTR, CGbqualType::e_Standard_name );
  566.     Associate( CSeqFeatData::eSubtype_3UTR, CGbqualType::e_Usedin );
  567.     // 5clip
  568.     Associate( CSeqFeatData::eSubtype_5clip, CGbqualType::e_Allele );
  569.     Associate( CSeqFeatData::eSubtype_5clip, CGbqualType::e_Function );
  570.     Associate( CSeqFeatData::eSubtype_5clip, CGbqualType::e_Label );
  571.     Associate( CSeqFeatData::eSubtype_5clip, CGbqualType::e_Map );
  572.     Associate( CSeqFeatData::eSubtype_5clip, CGbqualType::e_Standard_name );
  573.     Associate( CSeqFeatData::eSubtype_5clip, CGbqualType::e_Usedin );
  574.     // 5UTR
  575.     Associate( CSeqFeatData::eSubtype_5UTR, CGbqualType::e_Allele );
  576.     Associate( CSeqFeatData::eSubtype_5UTR, CGbqualType::e_Function );
  577.     Associate( CSeqFeatData::eSubtype_5UTR, CGbqualType::e_Label );
  578.     Associate( CSeqFeatData::eSubtype_5UTR, CGbqualType::e_Map );
  579.     Associate( CSeqFeatData::eSubtype_5UTR, CGbqualType::e_Standard_name );
  580.     Associate( CSeqFeatData::eSubtype_5UTR, CGbqualType::e_Usedin );
  581.     // 10_signal
  582.     Associate( CSeqFeatData::eSubtype_10_signal, CGbqualType::e_Label );
  583.     Associate( CSeqFeatData::eSubtype_10_signal, CGbqualType::e_Map );
  584.     Associate( CSeqFeatData::eSubtype_10_signal, CGbqualType::e_Standard_name );
  585.     Associate( CSeqFeatData::eSubtype_10_signal, CGbqualType::e_Usedin );
  586.     // 35_signal
  587.     Associate( CSeqFeatData::eSubtype_35_signal, CGbqualType::e_Label );
  588.     Associate( CSeqFeatData::eSubtype_35_signal, CGbqualType::e_Map );
  589.     Associate( CSeqFeatData::eSubtype_35_signal, CGbqualType::e_Standard_name );
  590.     Associate( CSeqFeatData::eSubtype_35_signal, CGbqualType::e_Usedin );
  591.     // region
  592.     Associate( CSeqFeatData::eSubtype_region, CGbqualType::e_Function );
  593.     Associate( CSeqFeatData::eSubtype_region, CGbqualType::e_Label );
  594.     Associate( CSeqFeatData::eSubtype_region, CGbqualType::e_Map );
  595.     Associate( CSeqFeatData::eSubtype_region, CGbqualType::e_Number );
  596.     Associate( CSeqFeatData::eSubtype_region, CGbqualType::e_Phenotype );
  597.     Associate( CSeqFeatData::eSubtype_region, CGbqualType::e_Product );
  598.     Associate( CSeqFeatData::eSubtype_region, CGbqualType::e_Standard_name );
  599.     Associate( CSeqFeatData::eSubtype_region, CGbqualType::e_Usedin );
  600.     // mat_peptide_aa
  601.     Associate( CSeqFeatData::eSubtype_mat_peptide_aa, CGbqualType::e_Label );
  602.     Associate( CSeqFeatData::eSubtype_mat_peptide_aa, CGbqualType::e_Map );
  603.     Associate( CSeqFeatData::eSubtype_mat_peptide_aa, CGbqualType::e_Product );
  604.     Associate( CSeqFeatData::eSubtype_mat_peptide_aa, CGbqualType::e_Standard_name );
  605.     Associate( CSeqFeatData::eSubtype_mat_peptide_aa, CGbqualType::e_Usedin );
  606.     // sig_peptide_aa
  607.     Associate( CSeqFeatData::eSubtype_sig_peptide_aa, CGbqualType::e_Label );
  608.     Associate( CSeqFeatData::eSubtype_sig_peptide_aa, CGbqualType::e_Map );
  609.     Associate( CSeqFeatData::eSubtype_sig_peptide_aa, CGbqualType::e_Product );
  610.     Associate( CSeqFeatData::eSubtype_sig_peptide_aa, CGbqualType::e_Standard_name );
  611.     Associate( CSeqFeatData::eSubtype_sig_peptide_aa, CGbqualType::e_Usedin );
  612.     // transit_peptide_aa
  613.     Associate( CSeqFeatData::eSubtype_transit_peptide_aa, CGbqualType::e_Label );
  614.     Associate( CSeqFeatData::eSubtype_transit_peptide_aa, CGbqualType::e_Map );
  615.     Associate( CSeqFeatData::eSubtype_transit_peptide_aa, CGbqualType::e_Product );
  616.     Associate( CSeqFeatData::eSubtype_transit_peptide_aa, CGbqualType::e_Standard_name );
  617.     Associate( CSeqFeatData::eSubtype_transit_peptide_aa, CGbqualType::e_Usedin );
  618.     // snoRNA
  619.     Associate( CSeqFeatData::eSubtype_snoRNA, CGbqualType::e_Function );
  620.     Associate( CSeqFeatData::eSubtype_snoRNA, CGbqualType::e_Label );
  621.     Associate( CSeqFeatData::eSubtype_snoRNA, CGbqualType::e_Map );
  622.     Associate( CSeqFeatData::eSubtype_snoRNA, CGbqualType::e_Product );
  623.     Associate( CSeqFeatData::eSubtype_snoRNA, CGbqualType::e_Standard_name );
  624.     Associate( CSeqFeatData::eSubtype_snoRNA, CGbqualType::e_Usedin );
  625. }
  626. void CFeatQualAssoc::PopulateMandatoryGbquals(void)
  627. {
  628.     // gene feature requires gene gbqual
  629.     m_MandatoryGbquals[CSeqFeatData::eSubtype_gene].push_back(CGbqualType::e_Gene);
  630.     // misc_binding & protein_bind require bound_moiety
  631.     m_MandatoryGbquals[CSeqFeatData::eSubtype_misc_binding].push_back(CGbqualType::e_Bound_moiety);
  632.     m_MandatoryGbquals[CSeqFeatData::eSubtype_protein_bind].push_back(CGbqualType::e_Bound_moiety);
  633.     // modified_base requires mod_base
  634.     m_MandatoryGbquals[CSeqFeatData::eSubtype_modified_base].push_back(CGbqualType::e_Mod_base);
  635. }
  636. // =============================================================================
  637. //                                 Country Names
  638. // =============================================================================
  639. // legal country names
  640. const string CCountries::sm_Countries[] = {
  641.   "Afghanistan",
  642.   "Albania",
  643.   "Algeria",
  644.   "American Samoa",
  645.   "Andorra",
  646.   "Angola",
  647.   "Anguilla",
  648.   "Antarctica",
  649.   "Antigua and Barbuda",
  650.   "Argentina",
  651.   "Armenia",
  652.   "Aruba",
  653.   "Ashmore and Cartier Islands",
  654.   "Australia",
  655.   "Austria",
  656.   "Azerbaijan",
  657.   "Bahamas",
  658.   "Bahrain",
  659.   "Baker Island",
  660.   "Bangladesh",
  661.   "Barbados",
  662.   "Bassas da India",
  663.   "Belarus",
  664.   "Belgium",
  665.   "Belize",
  666.   "Benin",
  667.   "Bermuda",
  668.   "Bhutan",
  669.   "Bolivia",
  670.   "Bosnia and Herzegovina",
  671.   "Botswana",
  672.   "Bouvet Island",
  673.   "Brazil",
  674.   "British Virgin Islands",
  675.   "Brunei",
  676.   "Bulgaria",
  677.   "Burkina Faso",
  678.   "Burundi",
  679.   "Cambodia",
  680.   "Cameroon",
  681.   "Canada",
  682.   "Cape Verde",
  683.   "Cayman Islands",
  684.   "Central African Republic",
  685.   "Chad",
  686.   "Chile",
  687.   "China",
  688.   "Christmas Island",
  689.   "Clipperton Island",
  690.   "Cocos Islands",
  691.   "Colombia",
  692.   "Comoros",
  693.   "Cook Islands",
  694.   "Coral Sea Islands",
  695.   "Costa Rica",
  696.   "Cote d'Ivoire",
  697.   "Croatia",
  698.   "Cuba",
  699.   "Cyprus",
  700.   "Czech Republic",
  701.   "Democratic Republic of the Congo",
  702.   "Denmark",
  703.   "Djibouti",
  704.   "Dominica",
  705.   "Dominican Republic",
  706.   "East Timor",
  707.   "Ecuador",
  708.   "Egypt",
  709.   "El Salvador",
  710.   "Equatorial Guinea",
  711.   "Eritrea",
  712.   "Estonia",
  713.   "Ethiopia",
  714.   "Europa Island",
  715.   "Falkland Islands (Islas Malvinas)",
  716.   "Faroe Islands",
  717.   "Fiji",
  718.   "Finland",
  719.   "France",
  720.   "French Guiana",
  721.   "French Polynesia",
  722.   "French Southern and Antarctic Lands",
  723.   "Gabon",
  724.   "Gambia",
  725.   "Gaza Strip",
  726.   "Georgia",
  727.   "Germany",
  728.   "Ghana",
  729.   "Gibraltar",
  730.   "Glorioso Islands",
  731.   "Greece",
  732.   "Greenland",
  733.   "Grenada",
  734.   "Guadeloupe",
  735.   "Guam",
  736.   "Guatemala",
  737.   "Guernsey",
  738.   "Guinea",
  739.   "Guinea-Bissau",
  740.   "Guyana",
  741.   "Haiti",
  742.   "Heard Island and McDonald Islands",
  743.   "Honduras",
  744.   "Hong Kong",
  745.   "Howland Island",
  746.   "Hungary",
  747.   "Iceland",
  748.   "India",
  749.   "Indonesia",
  750.   "Iran",
  751.   "Iraq",
  752.   "Ireland",
  753.   "Isle of Man",
  754.   "Israel",
  755.   "Italy",
  756.   "Jamaica",
  757.   "Jan Mayen",
  758.   "Japan",
  759.   "Jarvis Island",
  760.   "Jersey",
  761.   "Johnston Atoll",
  762.   "Jordan",
  763.   "Juan de Nova Island",
  764.   "Kazakhstan",
  765.   "Kenya",
  766.   "Kerguelen Archipelago",
  767.   "Kingman Reef",
  768.   "Kiribati",
  769.   "Kuwait",
  770.   "Kyrgyzstan",
  771.   "Laos",
  772.   "Latvia",
  773.   "Lebanon",
  774.   "Lesotho",
  775.   "Liberia",
  776.   "Libya",
  777.   "Liechtenstein",
  778.   "Lithuania",
  779.   "Luxembourg",
  780.   "Macau",
  781.   "Macedonia",
  782.   "Madagascar",
  783.   "Malawi",
  784.   "Malaysia",
  785.   "Maldives",
  786.   "Mali",
  787.   "Malta",
  788.   "Marshall Islands",
  789.   "Martinique",
  790.   "Mauritania",
  791.   "Mauritius",
  792.   "Mayotte",
  793.   "Mexico",
  794.   "Micronesia",
  795.   "Midway Islands",
  796.   "Moldova",
  797.   "Monaco",
  798.   "Mongolia",
  799.   "Montserrat",
  800.   "Morocco",
  801.   "Mozambique",
  802.   "Myanmar",
  803.   "Namibia",
  804.   "Nauru",
  805.   "Navassa Island",
  806.   "Nepal",
  807.   "Netherlands",
  808.   "Netherlands Antilles",
  809.   "New Caledonia",
  810.   "New Zealand",
  811.   "Nicaragua",
  812.   "Niger",
  813.   "Nigeria",
  814.   "Niue",
  815.   "Norfolk Island",
  816.   "North Korea",
  817.   "Northern Mariana Islands",
  818.   "Norway",
  819.   "Oman",
  820.   "Pakistan",
  821.   "Palau",
  822.   "Palmyra Atoll",
  823.   "Panama",
  824.   "Papua New Guinea",
  825.   "Paracel Islands",
  826.   "Paraguay",
  827.   "Peru",
  828.   "Philippines",
  829.   "Pitcairn Islands",
  830.   "Poland",
  831.   "Portugal",
  832.   "Puerto Rico",
  833.   "Qatar",
  834.   "Republic of the Congo",
  835.   "Reunion",
  836.   "Romania",
  837.   "Russia",
  838.   "Rwanda",
  839.   "Saint Helena",
  840.   "Saint Kitts and Nevis",
  841.   "Saint Lucia",
  842.   "Saint Pierre and Miquelon",
  843.   "Saint Vincent and the Grenadines",
  844.   "Samoa",
  845.   "San Marino",
  846.   "Sao Tome and Principe",
  847.   "Saudi Arabia",
  848.   "Senegal",
  849.   "Serbia and Montenegro",
  850.   "Seychelles",
  851.   "Sierra Leone",
  852.   "Singapore",
  853.   "Slovakia",
  854.   "Slovenia",
  855.   "Solomon Islands",
  856.   "Somalia",
  857.   "South Africa",
  858.   "South Georgia and the South Sandwich Islands",
  859.   "South Korea",
  860.   "Spain",
  861.   "Spratly Islands",
  862.   "Sri Lanka",
  863.   "Sudan",
  864.   "Suriname",
  865.   "Svalbard",
  866.   "Swaziland",
  867.   "Sweden",
  868.   "Switzerland",
  869.   "Syria",
  870.   "Taiwan",
  871.   "Tajikistan",
  872.   "Tanzania",
  873.   "Thailand",
  874.   "Togo",
  875.   "Tokelau",
  876.   "Tonga",
  877.   "Trinidad and Tobago",
  878.   "Tromelin Island",
  879.   "Tunisia",
  880.   "Turkey",
  881.   "Turkmenistan",
  882.   "Turks and Caicos Islands",
  883.   "Tuvalu",
  884.   "Uganda",
  885.   "Ukraine",
  886.   "United Arab Emirates",
  887.   "United Kingdom",
  888.   "Uruguay",
  889.   "USA",
  890.   "Uzbekistan",
  891.   "Vanuatu",
  892.   "Venezuela",
  893.   "Viet Nam",
  894.   "Virgin Islands",
  895.   "Wake Island",
  896.   "Wallis and Futuna",
  897.   "West Bank",
  898.   "Western Sahara",
  899.   "Yemen",
  900.   "Yugoslavia",
  901.   "Zambia",
  902.   "Zimbabwe"
  903. };
  904. bool CCountries::IsValid(const string& country)
  905. {
  906.   string name = country;
  907.   size_t pos = country.find(':');
  908.   if ( pos != string::npos ) {
  909.     name = country.substr(0, pos);
  910.   }
  911.   const string *begin = sm_Countries;
  912.   const string *end = &(sm_Countries[sizeof(sm_Countries) / sizeof(string)]);
  913.   if ( find (begin, end, name) == end ) {
  914.     return false;
  915.   }
  916.   return true;
  917. }
  918. // =============================================================================
  919. //                                    Functions
  920. // =============================================================================
  921. bool IsClassInEntry(const CSeq_entry& se, CBioseq_set::EClass clss)
  922. {
  923.     for ( CTypeConstIterator <CBioseq_set> si(se); si; ++si ) {
  924.         if ( si->GetClass() == clss ) {
  925.             return true;
  926.         }
  927.     }
  928.     return false;
  929. }
  930. bool IsDeltaOrFarSeg(const CSeq_loc& loc, CScope* scope)
  931. {
  932.     CBioseq_Handle bsh = scope->GetBioseqHandle(loc);
  933.     const CSeq_entry& se = bsh.GetTopLevelSeqEntry();
  934.     if ( bsh.IsSetInst_Repr() ) {
  935.         CBioseq_Handle::TInst::TRepr repr = bsh.GetInst_Repr();
  936.         if ( repr == CSeq_inst::eRepr_delta ) {
  937.             if ( !IsClassInEntry(se, CBioseq_set::eClass_nuc_prot) ) {
  938.                 return true;
  939.             }
  940.         }
  941.         if ( repr == CSeq_inst::eRepr_seg ) {
  942.             if ( !IsClassInEntry(se, CBioseq_set::eClass_parts) ) {
  943.                 return true;
  944.             }
  945.         }
  946.     }
  947.     
  948.     return false;
  949. }
  950. // Check if string is either empty or contains just white spaces
  951. bool IsBlankString(const string& str)
  952. {
  953.     if ( !str.empty() ) {
  954.         size_t len = str.length();
  955.         for ( size_t i = 0; i < len; ++i ) {
  956.             if ( !isspace(str[i]) ) {
  957.                 return false;
  958.             }
  959.         }
  960.     }
  961.     return true;
  962. }
  963. bool IsBlankStringList(const list< string >& str_list)
  964. {
  965.     ITERATE( list< string >, str, str_list ) {
  966.         if ( !IsBlankString(*str) ) {
  967.             return false;
  968.         }
  969.     }
  970.     return true;
  971. }
  972. int GetGIForSeqId(const CSeq_id& id)
  973. {
  974.     return 0;
  975.     //return CID1Client().AskGetgi(id);
  976. }
  977. list< CRef< CSeq_id > > GetSeqIdsForGI(int gi)
  978. {
  979.     return list< CRef< CSeq_id > >();
  980.     //return CID1Client().AskGetseqidsfromgi(gi);
  981. }
  982. CSeqVector GetSequenceFromLoc
  983. (const CSeq_loc& loc,
  984.  CScope& scope,
  985.  CBioseq_Handle::EVectorCoding coding)
  986. {
  987.     CConstRef<CSeqMap> map = 
  988.         CSeqMap::CreateSeqMapForSeq_loc(loc, &scope);
  989.     ENa_strand strand = sequence::GetStrand(loc, &scope);
  990.     return CSeqVector(map, scope, coding, strand);
  991. }
  992. CSeqVector GetSequenceFromFeature
  993. (const CSeq_feat& feat,
  994.  CScope& scope,
  995.  CBioseq_Handle::EVectorCoding coding,
  996.  bool product)
  997. {
  998.     
  999.     if ( (product   &&  !feat.CanGetProduct())  ||
  1000.          (!product  &&  !feat.CanGetLocation()) ) {
  1001.         return CSeqVector();
  1002.     }
  1003.     
  1004.     const CSeq_loc* loc = product ? &feat.GetProduct() : &feat.GetLocation();
  1005.     return GetSequenceFromLoc(*loc, scope, coding);
  1006. }
  1007. END_SCOPE(validator)
  1008. END_SCOPE(objects)
  1009. END_NCBI_SCOPE
  1010. /*
  1011. * ===========================================================================
  1012. *
  1013. * $Log: utilities.cpp,v $
  1014. * Revision 1000.2  2004/06/01 19:47:34  gouriano
  1015. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.20
  1016. *
  1017. * Revision 1.20  2004/05/21 21:42:56  gorelenk
  1018. * Added PCH ncbi_pch.hpp
  1019. *
  1020. * Revision 1.19  2004/04/23 16:24:53  shomrat
  1021. * Stop using CBioseq_Handle deprecated interface
  1022. *
  1023. * Revision 1.18  2003/11/12 20:30:23  shomrat
  1024. * added East Timor to the legal country codes
  1025. *
  1026. * Revision 1.17  2003/10/27 14:15:57  shomrat
  1027. * added utility functions for retrieving sequence under Seq-loc or Seq-feat
  1028. *
  1029. * Revision 1.16  2003/07/22 16:35:35  shomrat
  1030. * Added Kerguelen Archipelago to the countries list
  1031. *
  1032. * Revision 1.15  2003/06/16 16:17:11  shomrat
  1033. * IsResidue moved to .hpp file as an inline function
  1034. *
  1035. * Revision 1.14  2003/06/02 16:06:43  dicuccio
  1036. * Rearranged src/objects/ subtree.  This includes the following shifts:
  1037. *     - src/objects/asn2asn --> arc/app/asn2asn
  1038. *     - src/objects/testmedline --> src/objects/ncbimime/test
  1039. *     - src/objects/objmgr --> src/objmgr
  1040. *     - src/objects/util --> src/objmgr/util
  1041. *     - src/objects/alnmgr --> src/objtools/alnmgr
  1042. *     - src/objects/flat --> src/objtools/flat
  1043. *     - src/objects/validator --> src/objtools/validator
  1044. *     - src/objects/cddalignview --> src/objtools/cddalignview
  1045. * In addition, libseq now includes six of the objects/seq... libs, and libmmdb
  1046. * replaces the three libmmdb? libs.
  1047. *
  1048. * Revision 1.13  2003/05/28 16:20:59  shomrat
  1049. * Corrections to feature-gbqual associations
  1050. *
  1051. * Revision 1.12  2003/05/02 21:10:16  shomrat
  1052. * Serbia and Montenegro restored to list of countries, but Yugoslavia also remains
  1053. *
  1054. * Revision 1.11  2003/04/24 16:16:00  vasilche
  1055. * Added missing includes and forward class declarations.
  1056. *
  1057. * Revision 1.10  2003/03/31 14:41:34  shomrat
  1058. * $id: -> $id$
  1059. *
  1060. * Revision 1.9  2003/03/28 16:25:56  shomrat
  1061. * Added IsResidue
  1062. *
  1063. * Revision 1.8  2003/03/24 14:41:39  shomrat
  1064. * Removed direct calls to ID1, temporary implementation for GetGIForSeqId and getSeqIdsForGI
  1065. *
  1066. * Revision 1.7  2003/03/21 16:19:21  shomrat
  1067. * Added GetGiForSeqId and GetSeqIdsForGI
  1068. *
  1069. * Revision 1.6  2003/03/11 16:04:09  kuznets
  1070. * iterate -> ITERATE
  1071. *
  1072. * Revision 1.5  2003/02/07 21:04:10  shomrat
  1073. * Added transposon as a legal qual for repeat_region
  1074. *
  1075. * Revision 1.4  2003/01/21 19:45:55  shomrat
  1076. * Added IsBlankString and IsBlankStringList
  1077. *
  1078. * Revision 1.3  2003/01/06 16:38:03  shomrat
  1079. * ASSOCIATE macro replaced with function to overcome a bug in GCC compiler
  1080. *
  1081. * Revision 1.2  2002/12/24 16:50:15  shomrat
  1082. * Removal of redundant GBQual types
  1083. *
  1084. * Revision 1.1  2002/12/23 20:13:18  shomrat
  1085. * Initial submission after splitting former implementation
  1086. *
  1087. *
  1088. * ===========================================================================
  1089. */