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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: SeqFeatData.cpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 19:34:09  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R6.13
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /* $Id: SeqFeatData.cpp,v 1000.2 2004/06/01 19:34:09 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.  *   'seqfeat.asn'.
  43.  */
  44. // standard includes
  45. // generated includes
  46. #include <ncbi_pch.hpp>
  47. #include <objects/seqfeat/SeqFeatData.hpp>
  48. #include <objects/seqfeat/RNA_ref.hpp>
  49. #include <objects/seqfeat/Imp_feat.hpp>
  50. #include <algorithm>
  51. #include <util/static_map.hpp>
  52. // generated classes
  53. BEGIN_NCBI_SCOPE
  54. BEGIN_objects_SCOPE // namespace ncbi::objects::
  55. // destructor
  56. CSeqFeatData::~CSeqFeatData(void)
  57. {
  58. }
  59. // ASCII representation of subtype (GenBank feature key, e.g.)
  60. string CSeqFeatData::GetKey(EVocabulary vocab) const
  61. {
  62.     bool genbank = (vocab == eVocabulary_genbank);
  63.     if (genbank) {
  64.         switch (Which()) {
  65.         case e_Gene:
  66.             return "gene";
  67.         case e_Org:
  68.         case e_Biosrc:
  69.             return "source";
  70.         case e_Prot:
  71.             switch (GetProt().GetProcessed()) {
  72.             case CProt_ref::eProcessed_preprotein:
  73.                 return "proprotein";
  74.             case CProt_ref::eProcessed_mature:
  75.                 return "mat_peptide";
  76.             case CProt_ref::eProcessed_signal_peptide:
  77.                 return "sig_peptide";
  78.             case CProt_ref::eProcessed_transit_peptide:
  79.                 return "transit_peptide";
  80.             default:
  81.                 return "Protein";
  82.             }
  83.         case e_Site: // Is this correct, or are these encoded as Imp?
  84.             switch (GetSite()) {
  85.             case CSeqFeatData::eSite_binding:
  86.             case CSeqFeatData::eSite_metal_binding:
  87.             case CSeqFeatData::eSite_lipid_binding:
  88.                 return "misc_binding";
  89.             case CSeqFeatData::eSite_np_binding:
  90.                 return "protein_bind";
  91.             case CSeqFeatData::eSite_dna_binding:
  92.                 return "primer_bind"; // ?
  93.             case CSeqFeatData::eSite_signal_peptide:
  94.                 return "sig_peptide";
  95.             case CSeqFeatData::eSite_transit_peptide:
  96.                 return "transit_peptide";
  97.             default:
  98.                 return "misc_feature";
  99.             }
  100.         case e_Txinit:
  101.             return "promoter"; // ?
  102.         case e_Het:
  103.             return "misc_binding"; // ?
  104.         case e_Cdregion:
  105.         case e_Rna:
  106.         case e_Imp:
  107.             break;
  108.         default:
  109.             return "misc_feature"; // ???
  110.         }
  111.     }
  112.     switch (Which()) {
  113.     case e_Gene:            return "Gene";
  114.     case e_Org:             return "Org";
  115.     case e_Cdregion:        return "CDS";
  116.     case e_Prot:            return "Prot";
  117.     case e_Rna:
  118.         switch (GetRna().GetType()) {
  119.         case CRNA_ref::eType_premsg:  return "precursor_RNA";
  120.         case CRNA_ref::eType_mRNA:    return "mRNA";
  121.         case CRNA_ref::eType_tRNA:    return "tRNA";
  122.         case CRNA_ref::eType_rRNA:    return "rRNA";
  123.         case CRNA_ref::eType_snRNA:   return "snRNA";
  124.         case CRNA_ref::eType_scRNA:   return "scRNA";
  125.         case CRNA_ref::eType_snoRNA:  return "snoRNA"; // ok for GenBank?
  126.         case CRNA_ref::eType_other:
  127.             // return GetRna().GetExt().GetName();
  128.             return genbank ? "misc_RNA" : "RNA";
  129.         default:                      return "misc_RNA";
  130.         }
  131.     case e_Imp:             return GetImp().GetKey(); // "Imp"?
  132.     case e_Region:          return "Region";
  133.     case e_Comment:         return "Comment";
  134.     case e_Bond:            return "Bond";
  135.     case e_Site:            return "Site";
  136.     case e_Rsite:           return "Rsite";
  137.     case e_User:            return "User";
  138.     case e_Txinit:          return "TxInit";
  139.     case e_Num:             return "Num";
  140.     case e_Psec_str:        return "SecStr";
  141.     case e_Non_std_residue: return "NonStdRes";
  142.     case e_Het:             return "Het";
  143.     case e_Biosrc:          return "Src";
  144.     default:                return "???";
  145.     }
  146. }
  147. struct SImportEntry {
  148.     const char*            m_Name;
  149.     CSeqFeatData::ESubtype m_Subtype;
  150.     bool operator<(const SImportEntry& e) const {
  151.         return strcmp(m_Name, e.m_Name) < 0;
  152.     }
  153. };
  154. // NOTE: these must stay in ASCIIbetical order!
  155. static const SImportEntry kImportTable[] = {
  156.     { "-10_signal",          CSeqFeatData::eSubtype_10_signal },
  157.     { "-35_signal",          CSeqFeatData::eSubtype_35_signal },
  158.     { "3'UTR",               CSeqFeatData::eSubtype_3UTR },
  159.     { "3'clip",              CSeqFeatData::eSubtype_3clip },
  160.     { "5'UTR",               CSeqFeatData::eSubtype_5UTR },
  161.     { "5'clip",              CSeqFeatData::eSubtype_5clip },
  162.     { "CAAT_signal",         CSeqFeatData::eSubtype_CAAT_signal },
  163.     { "C_region",            CSeqFeatData::eSubtype_C_region },
  164.     { "D_loop",              CSeqFeatData::eSubtype_D_loop },
  165.     { "D_segment",           CSeqFeatData::eSubtype_D_segment },
  166.     { "GC_signal",           CSeqFeatData::eSubtype_GC_signal },
  167.     { "Imp_CDS",             CSeqFeatData::eSubtype_Imp_CDS },
  168.     { "J_segment",           CSeqFeatData::eSubtype_J_segment },
  169.     { "LTR",                 CSeqFeatData::eSubtype_LTR },
  170.     { "N_region",            CSeqFeatData::eSubtype_N_region },
  171.     { "RBS",                 CSeqFeatData::eSubtype_RBS },
  172.     { "STS",                 CSeqFeatData::eSubtype_STS },
  173.     { "S_region",            CSeqFeatData::eSubtype_S_region },
  174.     { "TATA_signal",         CSeqFeatData::eSubtype_TATA_signal },
  175.     { "V_region",            CSeqFeatData::eSubtype_V_region },
  176.     { "V_segment",           CSeqFeatData::eSubtype_V_segment },
  177.     { "allele",              CSeqFeatData::eSubtype_allele },
  178.     { "attenuator",          CSeqFeatData::eSubtype_attenuator },
  179.     { "conflict",            CSeqFeatData::eSubtype_conflict },
  180.     { "enhancer",            CSeqFeatData::eSubtype_enhancer },
  181.     { "exon",                CSeqFeatData::eSubtype_exon },
  182.     { "gap",                 CSeqFeatData::eSubtype_gap },
  183.     { "iDNA",                CSeqFeatData::eSubtype_iDNA },
  184.     { "intron",              CSeqFeatData::eSubtype_intron },
  185.     { "mat_peptide",         CSeqFeatData::eSubtype_mat_peptide },
  186.     { "misc_RNA",            CSeqFeatData::eSubtype_misc_RNA },
  187.     { "misc_binding",        CSeqFeatData::eSubtype_misc_binding },
  188.     { "misc_difference",     CSeqFeatData::eSubtype_misc_difference },
  189.     { "misc_feature",        CSeqFeatData::eSubtype_misc_feature },
  190.     { "misc_recomb",         CSeqFeatData::eSubtype_misc_recomb },
  191.     { "misc_signal",         CSeqFeatData::eSubtype_misc_signal },
  192.     { "misc_structure",      CSeqFeatData::eSubtype_misc_structure },
  193.     { "modified_base",       CSeqFeatData::eSubtype_modified_base },
  194.     { "mutation",            CSeqFeatData::eSubtype_mutation },
  195.     { "old_sequence",        CSeqFeatData::eSubtype_old_sequence },
  196.     { "operon",              CSeqFeatData::eSubtype_operon },
  197.     { "oriT",                CSeqFeatData::eSubtype_oriT },
  198.     { "polyA_signal",        CSeqFeatData::eSubtype_polyA_signal },
  199.     { "polyA_site",          CSeqFeatData::eSubtype_polyA_site },
  200.     { "precursor_RNA",       CSeqFeatData::eSubtype_precursor_RNA },
  201.     { "prim_transcript",     CSeqFeatData::eSubtype_prim_transcript },
  202.     { "primer_bind",         CSeqFeatData::eSubtype_primer_bind },
  203.     { "promoter",            CSeqFeatData::eSubtype_promoter },
  204.     { "protein_bind",        CSeqFeatData::eSubtype_protein_bind },
  205.     { "rep_origin",          CSeqFeatData::eSubtype_rep_origin },
  206.     { "repeat_region",       CSeqFeatData::eSubtype_repeat_region },
  207.     { "repeat_unit",         CSeqFeatData::eSubtype_repeat_unit },
  208.     { "satellite",           CSeqFeatData::eSubtype_satellite },
  209.     { "sig_peptide",         CSeqFeatData::eSubtype_sig_peptide },
  210.     { "site_ref",            CSeqFeatData::eSubtype_site_ref },
  211.     { "source",              CSeqFeatData::eSubtype_source },
  212.     { "stem_loop",           CSeqFeatData::eSubtype_stem_loop },
  213.     { "terminator",          CSeqFeatData::eSubtype_terminator },
  214.     { "transit_peptide",     CSeqFeatData::eSubtype_transit_peptide },
  215.     { "unsure",              CSeqFeatData::eSubtype_unsure },
  216.     { "variation",           CSeqFeatData::eSubtype_variation },
  217.     { "virion",              CSeqFeatData::eSubtype_virion }
  218. };
  219. static const SImportEntry* kImportTableEnd
  220.     = kImportTable + sizeof(kImportTable)/sizeof(SImportEntry);
  221. CSeqFeatData::ESubtype CSeqFeatData::GetSubtype(void) const
  222. {
  223.     if (m_Subtype == eSubtype_any) { // unknown
  224.         switch (Which()) {
  225.         case e_Gene:       m_Subtype = eSubtype_gene;     break;
  226.         case e_Org:        m_Subtype = eSubtype_org;      break;
  227.         case e_Cdregion:   m_Subtype = eSubtype_cdregion; break;
  228.         case e_Prot:
  229.             switch (GetProt().GetProcessed()) {
  230.             case CProt_ref::eProcessed_preprotein:
  231.                 m_Subtype = eSubtype_preprotein;
  232.                 break;
  233.             case CProt_ref::eProcessed_mature:
  234.                 m_Subtype = eSubtype_mat_peptide_aa;
  235.                 break;
  236.             case CProt_ref::eProcessed_signal_peptide:
  237.                 m_Subtype = eSubtype_sig_peptide_aa;
  238.                 break;
  239.             case CProt_ref::eProcessed_transit_peptide:
  240.                 m_Subtype = eSubtype_transit_peptide_aa;
  241.                 break;
  242.             default:
  243.                 m_Subtype = eSubtype_prot;
  244.                 break;
  245.             }
  246.             break;
  247.         case e_Rna:
  248.             switch (GetRna().GetType()) {
  249.             case CRNA_ref::eType_premsg: m_Subtype = eSubtype_preRNA;   break;
  250.             case CRNA_ref::eType_mRNA:   m_Subtype = eSubtype_mRNA;     break;
  251.             case CRNA_ref::eType_tRNA:   m_Subtype = eSubtype_tRNA;     break;
  252.             case CRNA_ref::eType_rRNA:   m_Subtype = eSubtype_rRNA;     break;
  253.             case CRNA_ref::eType_snRNA:  m_Subtype = eSubtype_snRNA;    break;
  254.             case CRNA_ref::eType_scRNA:  m_Subtype = eSubtype_scRNA;    break;
  255.             default:                     m_Subtype = eSubtype_otherRNA; break;
  256.             }
  257.             break;
  258.         case e_Pub:        m_Subtype = eSubtype_pub;      break;
  259.         case e_Seq:        m_Subtype = eSubtype_seq;      break;
  260.         case e_Imp:
  261.         {
  262.             const string&       key    = GetImp().GetKey();
  263.             SImportEntry        key2   = { key.c_str(), eSubtype_imp };
  264.             const SImportEntry* result = lower_bound(kImportTable,
  265.                                                      kImportTableEnd,
  266.                                                      key2);
  267.             if (strcmp(key2.m_Name, result->m_Name)) {
  268.                 m_Subtype = eSubtype_imp;
  269.             } else {
  270.                 m_Subtype = result->m_Subtype;
  271.             }
  272.             break;
  273.         }
  274.         case e_Region:          m_Subtype = eSubtype_region;          break;
  275.         case e_Comment:         m_Subtype = eSubtype_comment;         break;
  276.         case e_Bond:            m_Subtype = eSubtype_bond;            break;
  277.         case e_Site:            m_Subtype = eSubtype_site;            break;
  278.         case e_Rsite:           m_Subtype = eSubtype_rsite;           break;
  279.         case e_User:            m_Subtype = eSubtype_user;            break;
  280.         case e_Txinit:          m_Subtype = eSubtype_txinit;          break;
  281.         case e_Num:             m_Subtype = eSubtype_num;             break;
  282.         case e_Psec_str:        m_Subtype = eSubtype_psec_str;        break;
  283.         case e_Non_std_residue: m_Subtype = eSubtype_non_std_residue; break;
  284.         case e_Het:             m_Subtype = eSubtype_het;             break;
  285.         case e_Biosrc:          m_Subtype = eSubtype_biosrc;          break;
  286.         default:                m_Subtype = eSubtype_bad;             break;
  287.         }
  288.     } 
  289.     return m_Subtype;
  290. }
  291. CSeqFeatData::E_Choice CSeqFeatData::GetTypeFromSubtype (ESubtype subtype)
  292. {
  293.     switch (subtype) {
  294.         case eSubtype_gene:
  295.             return e_Gene;
  296.         case eSubtype_org:
  297.             return e_Org;
  298.         case eSubtype_cdregion:
  299.             return e_Cdregion;
  300.         case eSubtype_pub:
  301.             return e_Pub;
  302.         case eSubtype_seq:
  303.             return e_Seq;
  304.         case eSubtype_region:
  305.             return e_Region;
  306.         case eSubtype_comment:
  307.             return e_Comment;
  308.         case eSubtype_bond:
  309.             return e_Bond;
  310.         case eSubtype_site:
  311.             return e_Site;
  312.         case eSubtype_rsite:
  313.             return e_Rsite;
  314.         case eSubtype_user:
  315.             return e_User;
  316.         case eSubtype_txinit:
  317.             return e_Txinit;
  318.         case eSubtype_num:
  319.             return e_Num;
  320.         case eSubtype_psec_str:
  321.             return e_Psec_str;
  322.         case eSubtype_non_std_residue:
  323.             return e_Non_std_residue;
  324.         case eSubtype_het:
  325.             return e_Het;
  326.         case eSubtype_biosrc:
  327.             return e_Biosrc;
  328.         default:
  329.             if (subtype >= eSubtype_prot  &&
  330.                 subtype <= eSubtype_transit_peptide_aa) {
  331.                 return e_Prot;
  332.             }
  333.             if (subtype >= eSubtype_preRNA  &&  subtype <= eSubtype_otherRNA) {
  334.                 return e_Rna;
  335.             }
  336.             if (subtype >= eSubtype_imp  &&  subtype <= eSubtype_site_ref) {
  337.                 return e_Imp;
  338.             }
  339.             break;
  340.     }
  341.     return e_not_set;
  342. }
  343. map<CSeqFeatData::ESubtype, CSeqFeatData::TQualifiers> CSeqFeatData::sm_LegalQuals;
  344. map<CSeqFeatData::ESubtype, CSeqFeatData::TQualifiers> CSeqFeatData::sm_MandatoryQuals;
  345. bool CSeqFeatData::IsLegalQualifier(ESubtype subtype, EQualifier qual)
  346. {
  347.     x_InitQuals();  // does nothing if already intialized
  348.     const TQualifiers& legal = sm_LegalQuals[subtype];
  349.     return (find(legal.begin(), legal.end(), qual) != legal.end());
  350. }
  351. const CSeqFeatData::TQualifiers& CSeqFeatData::GetLegalQualifiers(ESubtype subtype)
  352. {
  353.     x_InitQuals();  // does nothing if already intialized
  354.     return sm_LegalQuals[subtype];
  355. }
  356. const CSeqFeatData::TQualifiers& CSeqFeatData::GetMandatoryQualifiers(ESubtype subtype)
  357. {
  358.     static const TQualifiers empty_vec;
  359.     x_InitQuals();  // does nothing if already intialized
  360.     if ( sm_MandatoryQuals.find(subtype) != sm_MandatoryQuals.end() ) {
  361.         return sm_MandatoryQuals[subtype];
  362.     }
  363.     return empty_vec;
  364. }
  365. void CSeqFeatData::x_InitLegalQuals(void)
  366. {
  367. #define START_SUBTYPE(x) { 
  368.     TQualifiers& quals = sm_LegalQuals[eSubtype_##x];
  369. #define ADD_QUAL(y) quals.push_back(eQual_##y)
  370. #define END_SUBTYPE }
  371. START_SUBTYPE(gene)
  372.     ADD_QUAL(allele);
  373.     ADD_QUAL(citation);
  374.     ADD_QUAL(db_xref);
  375.     ADD_QUAL(evidence);
  376.     ADD_QUAL(function);
  377.     ADD_QUAL(gene);
  378.     ADD_QUAL(label);
  379.     ADD_QUAL(locus_tag);
  380.     ADD_QUAL(map);
  381.     ADD_QUAL(note);
  382.     ADD_QUAL(operon);
  383.     ADD_QUAL(phenotype);
  384.     ADD_QUAL(product);
  385.     ADD_QUAL(pseudo);
  386.     ADD_QUAL(standard_name);
  387.     ADD_QUAL(usedin);
  388. END_SUBTYPE
  389. //START_SUBTYPE(org)
  390. //END_SUBTYPE
  391. START_SUBTYPE(cdregion)
  392.     ADD_QUAL(EC_number);
  393.     ADD_QUAL(allele);
  394.     ADD_QUAL(citation);
  395.     ADD_QUAL(codon);
  396.     ADD_QUAL(codon_start);
  397.     ADD_QUAL(db_xref);
  398.     ADD_QUAL(evidence);
  399.     ADD_QUAL(exception);
  400.     ADD_QUAL(function);
  401.     ADD_QUAL(gene);
  402.     ADD_QUAL(label);
  403.     ADD_QUAL(locus_tag);
  404.     ADD_QUAL(map);
  405.     ADD_QUAL(note);
  406.     ADD_QUAL(number);
  407.     ADD_QUAL(operon);
  408.     ADD_QUAL(product);
  409.     ADD_QUAL(protein_id);
  410.     ADD_QUAL(pseudo);
  411.     ADD_QUAL(standard_name);
  412.     ADD_QUAL(transl_except);
  413.     ADD_QUAL(transl_table);
  414.     ADD_QUAL(translation);
  415.     ADD_QUAL(usedin);
  416. END_SUBTYPE
  417. START_SUBTYPE(prot)
  418.     ADD_QUAL(allele);
  419.     ADD_QUAL(citation);
  420.     ADD_QUAL(db_xref);
  421.     ADD_QUAL(evidence);
  422.     ADD_QUAL(function);
  423.     ADD_QUAL(gene);
  424.     ADD_QUAL(label);
  425.     ADD_QUAL(locus_tag);
  426.     ADD_QUAL(map);
  427.     ADD_QUAL(note);
  428.     ADD_QUAL(product);
  429.     ADD_QUAL(protein_id);
  430.     ADD_QUAL(pseudo);
  431.     ADD_QUAL(standard_name);
  432.     ADD_QUAL(usedin);
  433. END_SUBTYPE
  434. START_SUBTYPE(preprotein)
  435.     ADD_QUAL(allele);
  436.     ADD_QUAL(citation);
  437.     ADD_QUAL(db_xref);
  438.     ADD_QUAL(evidence);
  439.     ADD_QUAL(function);
  440.     ADD_QUAL(gene);
  441.     ADD_QUAL(label);
  442.     ADD_QUAL(locus_tag);
  443.     ADD_QUAL(map);
  444.     ADD_QUAL(note);
  445.     ADD_QUAL(protein_id);
  446.     ADD_QUAL(pseudo);
  447.     ADD_QUAL(standard_name);
  448.     ADD_QUAL(usedin);
  449. END_SUBTYPE
  450. START_SUBTYPE(mat_peptide_aa)
  451.     ADD_QUAL(allele);
  452.     ADD_QUAL(citation);
  453.     ADD_QUAL(db_xref);
  454.     ADD_QUAL(evidence);
  455.     ADD_QUAL(function);
  456.     ADD_QUAL(gene);
  457.     ADD_QUAL(label);
  458.     ADD_QUAL(locus_tag);
  459.     ADD_QUAL(map);
  460.     ADD_QUAL(note);
  461.     ADD_QUAL(product);
  462.     ADD_QUAL(protein_id);
  463.     ADD_QUAL(pseudo);
  464.     ADD_QUAL(standard_name);
  465.     ADD_QUAL(usedin);
  466. END_SUBTYPE
  467. START_SUBTYPE(sig_peptide_aa)
  468.     ADD_QUAL(allele);
  469.     ADD_QUAL(citation);
  470.     ADD_QUAL(db_xref);
  471.     ADD_QUAL(evidence);
  472.     ADD_QUAL(function);
  473.     ADD_QUAL(gene);
  474.     ADD_QUAL(label);
  475.     ADD_QUAL(locus_tag);
  476.     ADD_QUAL(map);
  477.     ADD_QUAL(note);
  478.     ADD_QUAL(product);
  479.     ADD_QUAL(protein_id);
  480.     ADD_QUAL(pseudo);
  481.     ADD_QUAL(standard_name);
  482.     ADD_QUAL(usedin);
  483. END_SUBTYPE
  484. START_SUBTYPE(transit_peptide_aa)
  485.     ADD_QUAL(allele);
  486.     ADD_QUAL(citation);
  487.     ADD_QUAL(db_xref);
  488.     ADD_QUAL(evidence);
  489.     ADD_QUAL(function);
  490.     ADD_QUAL(gene);
  491.     ADD_QUAL(label);
  492.     ADD_QUAL(locus_tag);
  493.     ADD_QUAL(map);
  494.     ADD_QUAL(note);
  495.     ADD_QUAL(product);
  496.     ADD_QUAL(protein_id);
  497.     ADD_QUAL(pseudo);
  498.     ADD_QUAL(standard_name);
  499.     ADD_QUAL(usedin);
  500. END_SUBTYPE
  501. START_SUBTYPE(preRNA)
  502.     ADD_QUAL(allele);
  503.     ADD_QUAL(citation);
  504.     ADD_QUAL(function);
  505.     ADD_QUAL(gene);
  506.     ADD_QUAL(label);
  507.     ADD_QUAL(locus_tag);
  508.     ADD_QUAL(map);
  509.     ADD_QUAL(note);
  510.     ADD_QUAL(operon);
  511.     ADD_QUAL(product);
  512.     ADD_QUAL(pseudo);
  513.     ADD_QUAL(standard_name);
  514.     ADD_QUAL(usedin);
  515. END_SUBTYPE
  516. START_SUBTYPE(mRNA)
  517.     ADD_QUAL(allele);
  518.     ADD_QUAL(citation);
  519.     ADD_QUAL(db_xref);
  520.     ADD_QUAL(evidence);
  521.     ADD_QUAL(exception);
  522.     ADD_QUAL(function);
  523.     ADD_QUAL(gene);
  524.     ADD_QUAL(label);
  525.     ADD_QUAL(locus_tag);
  526.     ADD_QUAL(map);
  527.     ADD_QUAL(note);
  528.     ADD_QUAL(operon);
  529.     ADD_QUAL(product);
  530.     ADD_QUAL(pseudo);
  531.     ADD_QUAL(standard_name);
  532.     ADD_QUAL(usedin);
  533. END_SUBTYPE
  534. START_SUBTYPE(tRNA)
  535.     ADD_QUAL(allele);
  536.     ADD_QUAL(anticodon);
  537.     ADD_QUAL(citation);
  538.     ADD_QUAL(db_xref);
  539.     ADD_QUAL(evidence);
  540.     ADD_QUAL(function);
  541.     ADD_QUAL(gene);
  542.     ADD_QUAL(label);
  543.     ADD_QUAL(locus_tag);
  544.     ADD_QUAL(map);
  545.     ADD_QUAL(note);
  546.     ADD_QUAL(product);
  547.     ADD_QUAL(pseudo);
  548.     ADD_QUAL(standard_name);
  549.     ADD_QUAL(usedin);
  550. END_SUBTYPE
  551. START_SUBTYPE(rRNA)
  552.     ADD_QUAL(allele);
  553.     ADD_QUAL(citation);
  554.     ADD_QUAL(db_xref);
  555.     ADD_QUAL(evidence);
  556.     ADD_QUAL(function);
  557.     ADD_QUAL(gene);
  558.     ADD_QUAL(label);
  559.     ADD_QUAL(locus_tag);
  560.     ADD_QUAL(map);
  561.     ADD_QUAL(note);
  562.     ADD_QUAL(product);
  563.     ADD_QUAL(pseudo);
  564.     ADD_QUAL(standard_name);
  565.     ADD_QUAL(usedin);
  566. END_SUBTYPE
  567. START_SUBTYPE(snRNA)
  568.     ADD_QUAL(allele);
  569.     ADD_QUAL(citation);
  570.     ADD_QUAL(db_xref);
  571.     ADD_QUAL(evidence);
  572.     ADD_QUAL(function);
  573.     ADD_QUAL(gene);
  574.     ADD_QUAL(label);
  575.     ADD_QUAL(locus_tag);
  576.     ADD_QUAL(map);
  577.     ADD_QUAL(note);
  578.     ADD_QUAL(product);
  579.     ADD_QUAL(pseudo);
  580.     ADD_QUAL(standard_name);
  581.     ADD_QUAL(usedin);
  582. END_SUBTYPE
  583. START_SUBTYPE(scRNA)
  584.     ADD_QUAL(allele);
  585.     ADD_QUAL(citation);
  586.     ADD_QUAL(db_xref);
  587.     ADD_QUAL(evidence);
  588.     ADD_QUAL(function);
  589.     ADD_QUAL(gene);
  590.     ADD_QUAL(label);
  591.     ADD_QUAL(locus_tag);
  592.     ADD_QUAL(map);
  593.     ADD_QUAL(note);
  594.     ADD_QUAL(product);
  595.     ADD_QUAL(pseudo);
  596.     ADD_QUAL(standard_name);
  597.     ADD_QUAL(usedin);
  598. END_SUBTYPE
  599. START_SUBTYPE(snoRNA)
  600.     ADD_QUAL(allele);
  601.     ADD_QUAL(citation);
  602.     ADD_QUAL(db_xref);
  603.     ADD_QUAL(evidence);
  604.     ADD_QUAL(function);
  605.     ADD_QUAL(gene);
  606.     ADD_QUAL(label);
  607.     ADD_QUAL(locus_tag);
  608.     ADD_QUAL(map);
  609.     ADD_QUAL(note);
  610.     ADD_QUAL(product);
  611.     ADD_QUAL(pseudo);
  612.     ADD_QUAL(standard_name);
  613.     ADD_QUAL(usedin);
  614. END_SUBTYPE
  615. //START_SUBTYPE(otherRNA)
  616. //END_SUBTYPE
  617. //START_SUBTYPE(pub)
  618. //END_SUBTYPE
  619. //START_SUBTYPE(seq)
  620. //END_SUBTYPE
  621. //START_SUBTYPE(imp)
  622. //END_SUBTYPE
  623. //START_SUBTYPE(allele)
  624. //END_SUBTYPE
  625. START_SUBTYPE(attenuator)
  626.     ADD_QUAL(allele);
  627.     ADD_QUAL(citation);
  628.     ADD_QUAL(db_xref);
  629.     ADD_QUAL(evidence);
  630.     ADD_QUAL(gene);
  631.     ADD_QUAL(label);
  632.     ADD_QUAL(locus_tag);
  633.     ADD_QUAL(map);
  634.     ADD_QUAL(note);
  635.     ADD_QUAL(operon);
  636.     ADD_QUAL(phenotype);
  637.     ADD_QUAL(usedin);
  638. END_SUBTYPE
  639. START_SUBTYPE(C_region)
  640.     ADD_QUAL(allele);
  641.     ADD_QUAL(citation);
  642.     ADD_QUAL(db_xref);
  643.     ADD_QUAL(evidence);
  644.     ADD_QUAL(gene);
  645.     ADD_QUAL(label);
  646.     ADD_QUAL(locus_tag);
  647.     ADD_QUAL(map);
  648.     ADD_QUAL(note);
  649.     ADD_QUAL(product);
  650.     ADD_QUAL(pseudo);
  651.     ADD_QUAL(standard_name);
  652.     ADD_QUAL(usedin);
  653. END_SUBTYPE
  654. START_SUBTYPE(CAAT_signal)
  655.     ADD_QUAL(allele);
  656.     ADD_QUAL(citation);
  657.     ADD_QUAL(db_xref);
  658.     ADD_QUAL(evidence);
  659.     ADD_QUAL(gene);
  660.     ADD_QUAL(label);
  661.     ADD_QUAL(locus_tag);
  662.     ADD_QUAL(map);
  663.     ADD_QUAL(note);
  664.     ADD_QUAL(usedin);
  665. END_SUBTYPE
  666. START_SUBTYPE(Imp_CDS)
  667.     ADD_QUAL(EC_number);
  668.     ADD_QUAL(allele);
  669.     ADD_QUAL(citation);
  670.     ADD_QUAL(codon);
  671.     ADD_QUAL(codon_start);
  672.     ADD_QUAL(db_xref);
  673.     ADD_QUAL(evidence);
  674.     ADD_QUAL(exception);
  675.     ADD_QUAL(function);
  676.     ADD_QUAL(gene);
  677.     ADD_QUAL(label);
  678.     ADD_QUAL(locus_tag);
  679.     ADD_QUAL(map);
  680.     ADD_QUAL(note);
  681.     ADD_QUAL(number);
  682.     ADD_QUAL(operon);
  683.     ADD_QUAL(product);
  684.     ADD_QUAL(protein_id);
  685.     ADD_QUAL(pseudo);
  686.     ADD_QUAL(standard_name);
  687.     ADD_QUAL(transl_except);
  688.     ADD_QUAL(transl_table);
  689.     ADD_QUAL(translation);
  690.     ADD_QUAL(usedin);
  691. END_SUBTYPE
  692. START_SUBTYPE(conflict)
  693.     ADD_QUAL(allele);
  694.     ADD_QUAL(citation);
  695.     ADD_QUAL(db_xref);
  696.     ADD_QUAL(evidence);
  697.     ADD_QUAL(gene);
  698.     ADD_QUAL(label);
  699.     ADD_QUAL(locus_tag);
  700.     ADD_QUAL(map);
  701.     ADD_QUAL(note);
  702.     ADD_QUAL(replace);
  703.     ADD_QUAL(usedin);
  704. END_SUBTYPE
  705. START_SUBTYPE(D_loop)
  706.     ADD_QUAL(allele);
  707.     ADD_QUAL(citation);
  708.     ADD_QUAL(db_xref);
  709.     ADD_QUAL(evidence);
  710.     ADD_QUAL(gene);
  711.     ADD_QUAL(label);
  712.     ADD_QUAL(locus_tag);
  713.     ADD_QUAL(map);
  714.     ADD_QUAL(note);
  715.     ADD_QUAL(usedin);
  716. END_SUBTYPE
  717. START_SUBTYPE(D_segment)
  718.     ADD_QUAL(allele);
  719.     ADD_QUAL(citation);
  720.     ADD_QUAL(db_xref);
  721.     ADD_QUAL(evidence);
  722.     ADD_QUAL(gene);
  723.     ADD_QUAL(label);
  724.     ADD_QUAL(locus_tag);
  725.     ADD_QUAL(map);
  726.     ADD_QUAL(note);
  727.     ADD_QUAL(product);
  728.     ADD_QUAL(pseudo);
  729.     ADD_QUAL(standard_name);
  730.     ADD_QUAL(usedin);
  731. END_SUBTYPE
  732. START_SUBTYPE(enhancer)
  733.     ADD_QUAL(allele);
  734.     ADD_QUAL(citation);
  735.     ADD_QUAL(db_xref);
  736.     ADD_QUAL(evidence);
  737.     ADD_QUAL(gene);
  738.     ADD_QUAL(label);
  739.     ADD_QUAL(locus_tag);
  740.     ADD_QUAL(map);
  741.     ADD_QUAL(note);
  742.     ADD_QUAL(standard_name);
  743.     ADD_QUAL(usedin);
  744. END_SUBTYPE
  745. START_SUBTYPE(exon)
  746.     ADD_QUAL(EC_number);
  747.     ADD_QUAL(allele);
  748.     ADD_QUAL(citation);
  749.     ADD_QUAL(db_xref);
  750.     ADD_QUAL(evidence);
  751.     ADD_QUAL(function);
  752.     ADD_QUAL(gene);
  753.     ADD_QUAL(label);
  754.     ADD_QUAL(locus_tag);
  755.     ADD_QUAL(map);
  756.     ADD_QUAL(note);
  757.     ADD_QUAL(number);
  758.     ADD_QUAL(product);
  759.     ADD_QUAL(pseudo);
  760.     ADD_QUAL(standard_name);
  761.     ADD_QUAL(usedin);
  762. END_SUBTYPE
  763. START_SUBTYPE(GC_signal)
  764.     ADD_QUAL(allele);
  765.     ADD_QUAL(citation);
  766.     ADD_QUAL(db_xref);
  767.     ADD_QUAL(evidence);
  768.     ADD_QUAL(gene);
  769.     ADD_QUAL(label);
  770.     ADD_QUAL(locus_tag);
  771.     ADD_QUAL(map);
  772.     ADD_QUAL(note);
  773.     ADD_QUAL(usedin);
  774. END_SUBTYPE
  775. START_SUBTYPE(iDNA)
  776.     ADD_QUAL(allele);
  777.     ADD_QUAL(citation);
  778.     ADD_QUAL(db_xref);
  779.     ADD_QUAL(evidence);
  780.     ADD_QUAL(function);
  781.     ADD_QUAL(gene);
  782.     ADD_QUAL(label);
  783.     ADD_QUAL(locus_tag);
  784.     ADD_QUAL(map);
  785.     ADD_QUAL(note);
  786.     ADD_QUAL(number);
  787.     ADD_QUAL(standard_name);
  788.     ADD_QUAL(usedin);
  789. END_SUBTYPE
  790. START_SUBTYPE(intron)
  791.     ADD_QUAL(allele);
  792.     ADD_QUAL(citation);
  793.     ADD_QUAL(cons_splice);
  794.     ADD_QUAL(db_xref);
  795.     ADD_QUAL(evidence);
  796.     ADD_QUAL(function);
  797.     ADD_QUAL(gene);
  798.     ADD_QUAL(label);
  799.     ADD_QUAL(locus_tag);
  800.     ADD_QUAL(map);
  801.     ADD_QUAL(note);
  802.     ADD_QUAL(number);
  803.     ADD_QUAL(standard_name);
  804.     ADD_QUAL(usedin);
  805. END_SUBTYPE
  806. START_SUBTYPE(J_segment)
  807.     ADD_QUAL(allele);
  808.     ADD_QUAL(citation);
  809.     ADD_QUAL(db_xref);
  810.     ADD_QUAL(evidence);
  811.     ADD_QUAL(gene);
  812.     ADD_QUAL(label);
  813.     ADD_QUAL(locus_tag);
  814.     ADD_QUAL(map);
  815.     ADD_QUAL(note);
  816.     ADD_QUAL(product);
  817.     ADD_QUAL(pseudo);
  818.     ADD_QUAL(standard_name);
  819.     ADD_QUAL(usedin);
  820. END_SUBTYPE
  821. START_SUBTYPE(LTR)
  822.     ADD_QUAL(allele);
  823.     ADD_QUAL(citation);
  824.     ADD_QUAL(db_xref);
  825.     ADD_QUAL(evidence);
  826.     ADD_QUAL(function);
  827.     ADD_QUAL(gene);
  828.     ADD_QUAL(label);
  829.     ADD_QUAL(locus_tag);
  830.     ADD_QUAL(map);
  831.     ADD_QUAL(note);
  832.     ADD_QUAL(standard_name);
  833.     ADD_QUAL(usedin);
  834. END_SUBTYPE
  835. START_SUBTYPE(mat_peptide)
  836.     ADD_QUAL(EC_number);
  837.     ADD_QUAL(allele);
  838.     ADD_QUAL(citation);
  839.     ADD_QUAL(db_xref);
  840.     ADD_QUAL(evidence);
  841.     ADD_QUAL(function);
  842.     ADD_QUAL(gene);
  843.     ADD_QUAL(label);
  844.     ADD_QUAL(locus_tag);
  845.     ADD_QUAL(map);
  846.     ADD_QUAL(note);
  847.     ADD_QUAL(product);
  848.     ADD_QUAL(protein_id);
  849.     ADD_QUAL(pseudo);
  850.     ADD_QUAL(standard_name);
  851.     ADD_QUAL(usedin);
  852. END_SUBTYPE
  853. START_SUBTYPE(misc_binding)
  854.     ADD_QUAL(allele);
  855.     ADD_QUAL(bound_moiety);
  856.     ADD_QUAL(citation);
  857.     ADD_QUAL(db_xref);
  858.     ADD_QUAL(evidence);
  859.     ADD_QUAL(function);
  860.     ADD_QUAL(gene);
  861.     ADD_QUAL(label);
  862.     ADD_QUAL(locus_tag);
  863.     ADD_QUAL(map);
  864.     ADD_QUAL(note);
  865.     ADD_QUAL(usedin);
  866. END_SUBTYPE
  867. START_SUBTYPE(misc_difference)
  868.     ADD_QUAL(allele);
  869.     ADD_QUAL(citation);
  870.     ADD_QUAL(clone);
  871.     ADD_QUAL(db_xref);
  872.     ADD_QUAL(evidence);
  873.     ADD_QUAL(gene);
  874.     ADD_QUAL(label);
  875.     ADD_QUAL(locus_tag);
  876.     ADD_QUAL(map);
  877.     ADD_QUAL(note);
  878.     ADD_QUAL(phenotype);
  879.     ADD_QUAL(replace);
  880.     ADD_QUAL(standard_name);
  881.     ADD_QUAL(usedin);
  882. END_SUBTYPE
  883. START_SUBTYPE(misc_feature)
  884.     ADD_QUAL(allele);
  885.     ADD_QUAL(citation);
  886.     ADD_QUAL(db_xref);
  887.     ADD_QUAL(evidence);
  888.     ADD_QUAL(function);
  889.     ADD_QUAL(gene);
  890.     ADD_QUAL(label);
  891.     ADD_QUAL(locus_tag);
  892.     ADD_QUAL(map);
  893.     ADD_QUAL(note);
  894.     ADD_QUAL(number);
  895.     ADD_QUAL(phenotype);
  896.     ADD_QUAL(product);
  897.     ADD_QUAL(pseudo);
  898.     ADD_QUAL(standard_name);
  899.     ADD_QUAL(usedin);
  900. END_SUBTYPE
  901. START_SUBTYPE(misc_recomb)
  902.     ADD_QUAL(allele);
  903.     ADD_QUAL(citation);
  904.     ADD_QUAL(db_xref);
  905.     ADD_QUAL(evidence);
  906.     ADD_QUAL(gene);
  907.     ADD_QUAL(label);
  908.     ADD_QUAL(locus_tag);
  909.     ADD_QUAL(map);
  910.     ADD_QUAL(note);
  911.     ADD_QUAL(organism);
  912.     ADD_QUAL(standard_name);
  913.     ADD_QUAL(usedin);
  914. END_SUBTYPE
  915. START_SUBTYPE(misc_RNA)
  916.     ADD_QUAL(allele);
  917.     ADD_QUAL(citation);
  918.     ADD_QUAL(db_xref);
  919.     ADD_QUAL(evidence);
  920.     ADD_QUAL(function);
  921.     ADD_QUAL(gene);
  922.     ADD_QUAL(label);
  923.     ADD_QUAL(locus_tag);
  924.     ADD_QUAL(map);
  925.     ADD_QUAL(note);
  926.     ADD_QUAL(operon);
  927.     ADD_QUAL(product);
  928.     ADD_QUAL(standard_name);
  929.     ADD_QUAL(usedin);
  930. END_SUBTYPE
  931. START_SUBTYPE(misc_signal)
  932.     ADD_QUAL(allele);
  933.     ADD_QUAL(citation);
  934.     ADD_QUAL(db_xref);
  935.     ADD_QUAL(evidence);
  936.     ADD_QUAL(function);
  937.     ADD_QUAL(gene);
  938.     ADD_QUAL(label);
  939.     ADD_QUAL(locus_tag);
  940.     ADD_QUAL(map);
  941.     ADD_QUAL(note);
  942.     ADD_QUAL(operon);
  943.     ADD_QUAL(phenotype);
  944.     ADD_QUAL(standard_name);
  945.     ADD_QUAL(usedin);
  946. END_SUBTYPE
  947. START_SUBTYPE(misc_structure)
  948.     ADD_QUAL(allele);
  949.     ADD_QUAL(citation);
  950.     ADD_QUAL(db_xref);
  951.     ADD_QUAL(evidence);
  952.     ADD_QUAL(function);
  953.     ADD_QUAL(gene);
  954.     ADD_QUAL(label);
  955.     ADD_QUAL(locus_tag);
  956.     ADD_QUAL(map);
  957.     ADD_QUAL(note);
  958.     ADD_QUAL(standard_name);
  959.     ADD_QUAL(usedin);
  960. END_SUBTYPE
  961. START_SUBTYPE(modified_base)
  962.     ADD_QUAL(allele);
  963.     ADD_QUAL(citation);
  964.     ADD_QUAL(db_xref);
  965.     ADD_QUAL(evidence);
  966.     ADD_QUAL(frequency);
  967.     ADD_QUAL(gene);
  968.     ADD_QUAL(label);
  969.     ADD_QUAL(locus_tag);
  970.     ADD_QUAL(map);
  971.     ADD_QUAL(mod_base);
  972.     ADD_QUAL(note);
  973.     ADD_QUAL(usedin);
  974. END_SUBTYPE
  975. //START_SUBTYPE(mutation)
  976. //END_SUBTYPE
  977. START_SUBTYPE(N_region)
  978.     ADD_QUAL(allele);
  979.     ADD_QUAL(citation);
  980.     ADD_QUAL(db_xref);
  981.     ADD_QUAL(evidence);
  982.     ADD_QUAL(gene);
  983.     ADD_QUAL(label);
  984.     ADD_QUAL(locus_tag);
  985.     ADD_QUAL(map);
  986.     ADD_QUAL(note);
  987.     ADD_QUAL(product);
  988.     ADD_QUAL(pseudo);
  989.     ADD_QUAL(standard_name);
  990.     ADD_QUAL(usedin);
  991. END_SUBTYPE
  992. START_SUBTYPE(old_sequence)
  993.     ADD_QUAL(allele);
  994.     ADD_QUAL(citation);
  995.     ADD_QUAL(db_xref);
  996.     ADD_QUAL(evidence);
  997.     ADD_QUAL(gene);
  998.     ADD_QUAL(label);
  999.     ADD_QUAL(locus_tag);
  1000.     ADD_QUAL(map);
  1001.     ADD_QUAL(note);
  1002.     ADD_QUAL(replace);
  1003.     ADD_QUAL(usedin);
  1004. END_SUBTYPE
  1005. START_SUBTYPE(polyA_signal)
  1006.     ADD_QUAL(allele);
  1007.     ADD_QUAL(citation);
  1008.     ADD_QUAL(db_xref);
  1009.     ADD_QUAL(evidence);
  1010.     ADD_QUAL(gene);
  1011.     ADD_QUAL(label);
  1012.     ADD_QUAL(locus_tag);
  1013.     ADD_QUAL(map);
  1014.     ADD_QUAL(note);
  1015.     ADD_QUAL(usedin);
  1016. END_SUBTYPE
  1017. START_SUBTYPE(polyA_site)
  1018.     ADD_QUAL(allele);
  1019.     ADD_QUAL(citation);
  1020.     ADD_QUAL(db_xref);
  1021.     ADD_QUAL(evidence);
  1022.     ADD_QUAL(gene);
  1023.     ADD_QUAL(label);
  1024.     ADD_QUAL(locus_tag);
  1025.     ADD_QUAL(map);
  1026.     ADD_QUAL(note);
  1027.     ADD_QUAL(usedin);
  1028. END_SUBTYPE
  1029. START_SUBTYPE(precursor_RNA)
  1030.     ADD_QUAL(allele);
  1031.     ADD_QUAL(citation);
  1032.     ADD_QUAL(db_xref);
  1033.     ADD_QUAL(evidence);
  1034.     ADD_QUAL(function);
  1035.     ADD_QUAL(gene);
  1036.     ADD_QUAL(label);
  1037.     ADD_QUAL(locus_tag);
  1038.     ADD_QUAL(map);
  1039.     ADD_QUAL(note);
  1040.     ADD_QUAL(operon);
  1041.     ADD_QUAL(product);
  1042.     ADD_QUAL(standard_name);
  1043.     ADD_QUAL(usedin);
  1044. END_SUBTYPE
  1045. START_SUBTYPE(prim_transcript)
  1046.     ADD_QUAL(allele);
  1047.     ADD_QUAL(citation);
  1048.     ADD_QUAL(db_xref);
  1049.     ADD_QUAL(evidence);
  1050.     ADD_QUAL(function);
  1051.     ADD_QUAL(gene);
  1052.     ADD_QUAL(label);
  1053.     ADD_QUAL(locus_tag);
  1054.     ADD_QUAL(map);
  1055.     ADD_QUAL(note);
  1056.     ADD_QUAL(operon);
  1057.     ADD_QUAL(standard_name);
  1058.     ADD_QUAL(usedin);
  1059. END_SUBTYPE
  1060. START_SUBTYPE(primer_bind)
  1061.     ADD_QUAL(PCR_conditions);
  1062.     ADD_QUAL(allele);
  1063.     ADD_QUAL(citation);
  1064.     ADD_QUAL(db_xref);
  1065.     ADD_QUAL(evidence);
  1066.     ADD_QUAL(gene);
  1067.     ADD_QUAL(label);
  1068.     ADD_QUAL(locus_tag);
  1069.     ADD_QUAL(map);
  1070.     ADD_QUAL(note);
  1071.     ADD_QUAL(standard_name);
  1072.     ADD_QUAL(usedin);
  1073. END_SUBTYPE
  1074. START_SUBTYPE(promoter)
  1075.     ADD_QUAL(allele);
  1076.     ADD_QUAL(citation);
  1077.     ADD_QUAL(db_xref);
  1078.     ADD_QUAL(evidence);
  1079.     ADD_QUAL(function);
  1080.     ADD_QUAL(gene);
  1081.     ADD_QUAL(label);
  1082.     ADD_QUAL(locus_tag);
  1083.     ADD_QUAL(map);
  1084.     ADD_QUAL(note);
  1085.     ADD_QUAL(operon);
  1086.     ADD_QUAL(phenotype);
  1087.     ADD_QUAL(pseudo);
  1088.     ADD_QUAL(standard_name);
  1089.     ADD_QUAL(usedin);
  1090. END_SUBTYPE
  1091. START_SUBTYPE(protein_bind)
  1092.     ADD_QUAL(allele);
  1093.     ADD_QUAL(bound_moiety);
  1094.     ADD_QUAL(citation);
  1095.     ADD_QUAL(db_xref);
  1096.     ADD_QUAL(evidence);
  1097.     ADD_QUAL(function);
  1098.     ADD_QUAL(gene);
  1099.     ADD_QUAL(label);
  1100.     ADD_QUAL(locus_tag);
  1101.     ADD_QUAL(map);
  1102.     ADD_QUAL(note);
  1103.     ADD_QUAL(standard_name);
  1104.     ADD_QUAL(usedin);
  1105. END_SUBTYPE
  1106. START_SUBTYPE(RBS)
  1107.     ADD_QUAL(allele);
  1108.     ADD_QUAL(citation);
  1109.     ADD_QUAL(db_xref);
  1110.     ADD_QUAL(evidence);
  1111.     ADD_QUAL(gene);
  1112.     ADD_QUAL(label);
  1113.     ADD_QUAL(locus_tag);
  1114.     ADD_QUAL(map);
  1115.     ADD_QUAL(note);
  1116.     ADD_QUAL(standard_name);
  1117.     ADD_QUAL(usedin);
  1118. END_SUBTYPE
  1119. START_SUBTYPE(repeat_region)
  1120.     ADD_QUAL(allele);
  1121.     ADD_QUAL(citation);
  1122.     ADD_QUAL(db_xref);
  1123.     ADD_QUAL(evidence);
  1124.     ADD_QUAL(function);
  1125.     ADD_QUAL(gene);
  1126.     ADD_QUAL(insertion_seq);
  1127.     ADD_QUAL(label);
  1128.     ADD_QUAL(locus_tag);
  1129.     ADD_QUAL(map);
  1130.     ADD_QUAL(note);
  1131.     ADD_QUAL(rpt_family);
  1132.     ADD_QUAL(rpt_type);
  1133.     ADD_QUAL(rpt_unit);
  1134.     ADD_QUAL(standard_name);
  1135.     ADD_QUAL(transposon);
  1136.     ADD_QUAL(usedin);
  1137. END_SUBTYPE
  1138. START_SUBTYPE(repeat_unit)
  1139.     ADD_QUAL(allele);
  1140.     ADD_QUAL(citation);
  1141.     ADD_QUAL(db_xref);
  1142.     ADD_QUAL(evidence);
  1143.     ADD_QUAL(function);
  1144.     ADD_QUAL(gene);
  1145.     ADD_QUAL(label);
  1146.     ADD_QUAL(locus_tag);
  1147.     ADD_QUAL(map);
  1148.     ADD_QUAL(note);
  1149.     ADD_QUAL(rpt_family);
  1150.     ADD_QUAL(rpt_type);
  1151.     ADD_QUAL(rpt_unit);
  1152.     ADD_QUAL(usedin);
  1153. END_SUBTYPE
  1154. START_SUBTYPE(rep_origin)
  1155.     ADD_QUAL(allele);
  1156.     ADD_QUAL(citation);
  1157.     ADD_QUAL(db_xref);
  1158.     ADD_QUAL(direction);
  1159.     ADD_QUAL(evidence);
  1160.     ADD_QUAL(gene);
  1161.     ADD_QUAL(label);
  1162.     ADD_QUAL(locus_tag);
  1163.     ADD_QUAL(map);
  1164.     ADD_QUAL(note);
  1165.     ADD_QUAL(standard_name);
  1166.     ADD_QUAL(usedin);
  1167. END_SUBTYPE
  1168. START_SUBTYPE(S_region)
  1169.     ADD_QUAL(allele);
  1170.     ADD_QUAL(citation);
  1171.     ADD_QUAL(db_xref);
  1172.     ADD_QUAL(evidence);
  1173.     ADD_QUAL(gene);
  1174.     ADD_QUAL(label);
  1175.     ADD_QUAL(locus_tag);
  1176.     ADD_QUAL(map);
  1177.     ADD_QUAL(note);
  1178.     ADD_QUAL(product);
  1179.     ADD_QUAL(pseudo);
  1180.     ADD_QUAL(standard_name);
  1181.     ADD_QUAL(usedin);
  1182. END_SUBTYPE
  1183. START_SUBTYPE(satellite)
  1184.     ADD_QUAL(allele);
  1185.     ADD_QUAL(citation);
  1186.     ADD_QUAL(db_xref);
  1187.     ADD_QUAL(evidence);
  1188.     ADD_QUAL(gene);
  1189.     ADD_QUAL(label);
  1190.     ADD_QUAL(locus_tag);
  1191.     ADD_QUAL(map);
  1192.     ADD_QUAL(note);
  1193.     ADD_QUAL(rpt_family);
  1194.     ADD_QUAL(rpt_type);
  1195.     ADD_QUAL(rpt_unit);
  1196.     ADD_QUAL(standard_name);
  1197.     ADD_QUAL(usedin);
  1198. END_SUBTYPE
  1199. START_SUBTYPE(sig_peptide)
  1200.     ADD_QUAL(allele);
  1201.     ADD_QUAL(citation);
  1202.     ADD_QUAL(db_xref);
  1203.     ADD_QUAL(evidence);
  1204.     ADD_QUAL(function);
  1205.     ADD_QUAL(gene);
  1206.     ADD_QUAL(label);
  1207.     ADD_QUAL(locus_tag);
  1208.     ADD_QUAL(map);
  1209.     ADD_QUAL(note);
  1210.     ADD_QUAL(product);
  1211.     ADD_QUAL(protein_id);
  1212.     ADD_QUAL(pseudo);
  1213.     ADD_QUAL(standard_name);
  1214.     ADD_QUAL(usedin);
  1215. END_SUBTYPE
  1216. START_SUBTYPE(source)
  1217.     ADD_QUAL(cell_line);
  1218.     ADD_QUAL(cell_type);
  1219.     ADD_QUAL(chromosome);
  1220.     ADD_QUAL(citation);
  1221.     ADD_QUAL(clone);
  1222.     ADD_QUAL(clone_lib);
  1223.     ADD_QUAL(country);
  1224.     ADD_QUAL(cultivar);
  1225.     ADD_QUAL(db_xref);
  1226.     ADD_QUAL(dev_stage);
  1227.     ADD_QUAL(ecotype);
  1228.     ADD_QUAL(environmental_sample);
  1229.     ADD_QUAL(focus);
  1230.     ADD_QUAL(frequency);
  1231.     ADD_QUAL(germline);
  1232.     ADD_QUAL(haplotype);
  1233.     ADD_QUAL(isolate);
  1234.     ADD_QUAL(isolation_source);
  1235.     ADD_QUAL(lab_host);
  1236.     ADD_QUAL(label);
  1237.     ADD_QUAL(macronuclear);
  1238.     ADD_QUAL(map);
  1239.     ADD_QUAL(mol_type);
  1240.     ADD_QUAL(note);
  1241.     ADD_QUAL(organelle);
  1242.     ADD_QUAL(organism);
  1243.     ADD_QUAL(plasmid);
  1244.     ADD_QUAL(pop_variant);
  1245.     ADD_QUAL(proviral);
  1246.     ADD_QUAL(rearranged);
  1247.     ADD_QUAL(segment);
  1248.     ADD_QUAL(serotype);
  1249.     ADD_QUAL(serovar);
  1250.     ADD_QUAL(sex);
  1251.     ADD_QUAL(specific_host);
  1252.     ADD_QUAL(specimen_voucher);
  1253.     ADD_QUAL(strain);
  1254.     ADD_QUAL(sub_clone);
  1255.     ADD_QUAL(sub_species);
  1256.     ADD_QUAL(sub_strain);
  1257.     ADD_QUAL(tissue_lib);
  1258.     ADD_QUAL(tissue_type);
  1259.     ADD_QUAL(transgenic);
  1260.     ADD_QUAL(usedin);
  1261.     ADD_QUAL(variety);
  1262.     ADD_QUAL(virion);
  1263. END_SUBTYPE
  1264. START_SUBTYPE(stem_loop)
  1265.     ADD_QUAL(allele);
  1266.     ADD_QUAL(citation);
  1267.     ADD_QUAL(db_xref);
  1268.     ADD_QUAL(evidence);
  1269.     ADD_QUAL(function);
  1270.     ADD_QUAL(gene);
  1271.     ADD_QUAL(label);
  1272.     ADD_QUAL(locus_tag);
  1273.     ADD_QUAL(map);
  1274.     ADD_QUAL(note);
  1275.     ADD_QUAL(operon);
  1276.     ADD_QUAL(standard_name);
  1277.     ADD_QUAL(usedin);
  1278. END_SUBTYPE
  1279. START_SUBTYPE(STS)
  1280.     ADD_QUAL(allele);
  1281.     ADD_QUAL(citation);
  1282.     ADD_QUAL(db_xref);
  1283.     ADD_QUAL(evidence);
  1284.     ADD_QUAL(gene);
  1285.     ADD_QUAL(label);
  1286.     ADD_QUAL(locus_tag);
  1287.     ADD_QUAL(map);
  1288.     ADD_QUAL(note);
  1289.     ADD_QUAL(standard_name);
  1290.     ADD_QUAL(usedin);
  1291. END_SUBTYPE
  1292. START_SUBTYPE(TATA_signal)
  1293.     ADD_QUAL(allele);
  1294.     ADD_QUAL(citation);
  1295.     ADD_QUAL(db_xref);
  1296.     ADD_QUAL(evidence);
  1297.     ADD_QUAL(gene);
  1298.     ADD_QUAL(label);
  1299.     ADD_QUAL(locus_tag);
  1300.     ADD_QUAL(map);
  1301.     ADD_QUAL(note);
  1302.     ADD_QUAL(usedin);
  1303. END_SUBTYPE
  1304. START_SUBTYPE(terminator)
  1305.     ADD_QUAL(allele);
  1306.     ADD_QUAL(citation);
  1307.     ADD_QUAL(db_xref);
  1308.     ADD_QUAL(evidence);
  1309.     ADD_QUAL(gene);
  1310.     ADD_QUAL(label);
  1311.     ADD_QUAL(locus_tag);
  1312.     ADD_QUAL(map);
  1313.     ADD_QUAL(note);
  1314.     ADD_QUAL(operon);
  1315.     ADD_QUAL(standard_name);
  1316.     ADD_QUAL(usedin);
  1317. END_SUBTYPE
  1318. START_SUBTYPE(transit_peptide)
  1319.     ADD_QUAL(allele);
  1320.     ADD_QUAL(citation);
  1321.     ADD_QUAL(db_xref);
  1322.     ADD_QUAL(evidence);
  1323.     ADD_QUAL(function);
  1324.     ADD_QUAL(gene);
  1325.     ADD_QUAL(label);
  1326.     ADD_QUAL(locus_tag);
  1327.     ADD_QUAL(map);
  1328.     ADD_QUAL(note);
  1329.     ADD_QUAL(product);
  1330.     ADD_QUAL(pseudo);
  1331.     ADD_QUAL(standard_name);
  1332.     ADD_QUAL(usedin);
  1333. END_SUBTYPE
  1334. START_SUBTYPE(unsure)
  1335.     ADD_QUAL(allele);
  1336.     ADD_QUAL(citation);
  1337.     ADD_QUAL(db_xref);
  1338.     ADD_QUAL(evidence);
  1339.     ADD_QUAL(gene);
  1340.     ADD_QUAL(label);
  1341.     ADD_QUAL(locus_tag);
  1342.     ADD_QUAL(map);
  1343.     ADD_QUAL(note);
  1344.     ADD_QUAL(replace);
  1345.     ADD_QUAL(usedin);
  1346. END_SUBTYPE
  1347. START_SUBTYPE(V_region)
  1348.     ADD_QUAL(allele);
  1349.     ADD_QUAL(citation);
  1350.     ADD_QUAL(db_xref);
  1351.     ADD_QUAL(evidence);
  1352.     ADD_QUAL(gene);
  1353.     ADD_QUAL(label);
  1354.     ADD_QUAL(locus_tag);
  1355.     ADD_QUAL(map);
  1356.     ADD_QUAL(note);
  1357.     ADD_QUAL(product);
  1358.     ADD_QUAL(pseudo);
  1359.     ADD_QUAL(standard_name);
  1360.     ADD_QUAL(usedin);
  1361. END_SUBTYPE
  1362. START_SUBTYPE(V_segment)
  1363.     ADD_QUAL(allele);
  1364.     ADD_QUAL(citation);
  1365.     ADD_QUAL(db_xref);
  1366.     ADD_QUAL(evidence);
  1367.     ADD_QUAL(gene);
  1368.     ADD_QUAL(label);
  1369.     ADD_QUAL(locus_tag);
  1370.     ADD_QUAL(map);
  1371.     ADD_QUAL(note);
  1372.     ADD_QUAL(product);
  1373.     ADD_QUAL(pseudo);
  1374.     ADD_QUAL(standard_name);
  1375.     ADD_QUAL(usedin);
  1376. END_SUBTYPE
  1377. START_SUBTYPE(variation)
  1378.     ADD_QUAL(allele);
  1379.     ADD_QUAL(citation);
  1380.     ADD_QUAL(db_xref);
  1381.     ADD_QUAL(evidence);
  1382.     ADD_QUAL(frequency);
  1383.     ADD_QUAL(gene);
  1384.     ADD_QUAL(label);
  1385.     ADD_QUAL(locus_tag);
  1386.     ADD_QUAL(map);
  1387.     ADD_QUAL(note);
  1388.     ADD_QUAL(phenotype);
  1389.     ADD_QUAL(product);
  1390.     ADD_QUAL(replace);
  1391.     ADD_QUAL(standard_name);
  1392.     ADD_QUAL(usedin);
  1393. END_SUBTYPE
  1394. //START_SUBTYPE(virion)
  1395. START_SUBTYPE(3clip)
  1396.     ADD_QUAL(allele);
  1397.     ADD_QUAL(citation);
  1398.     ADD_QUAL(db_xref);
  1399.     ADD_QUAL(evidence);
  1400.     ADD_QUAL(function);
  1401.     ADD_QUAL(gene);
  1402.     ADD_QUAL(label);
  1403.     ADD_QUAL(locus_tag);
  1404.     ADD_QUAL(map);
  1405.     ADD_QUAL(note);
  1406.     ADD_QUAL(standard_name);
  1407.     ADD_QUAL(usedin);
  1408. END_SUBTYPE
  1409. START_SUBTYPE(3UTR)
  1410.     ADD_QUAL(allele);
  1411.     ADD_QUAL(citation);
  1412.     ADD_QUAL(db_xref);
  1413.     ADD_QUAL(evidence);
  1414.     ADD_QUAL(function);
  1415.     ADD_QUAL(gene);
  1416.     ADD_QUAL(label);
  1417.     ADD_QUAL(locus_tag);
  1418.     ADD_QUAL(map);
  1419.     ADD_QUAL(note);
  1420.     ADD_QUAL(standard_name);
  1421.     ADD_QUAL(usedin);
  1422. END_SUBTYPE
  1423. START_SUBTYPE(5clip)
  1424.     ADD_QUAL(allele);
  1425.     ADD_QUAL(citation);
  1426.     ADD_QUAL(db_xref);
  1427.     ADD_QUAL(evidence);
  1428.     ADD_QUAL(function);
  1429.     ADD_QUAL(gene);
  1430.     ADD_QUAL(label);
  1431.     ADD_QUAL(locus_tag);
  1432.     ADD_QUAL(map);
  1433.     ADD_QUAL(note);
  1434.     ADD_QUAL(standard_name);
  1435.     ADD_QUAL(usedin);
  1436. END_SUBTYPE
  1437. START_SUBTYPE(5UTR)
  1438.     ADD_QUAL(allele);
  1439.     ADD_QUAL(citation);
  1440.     ADD_QUAL(db_xref);
  1441.     ADD_QUAL(evidence);
  1442.     ADD_QUAL(function);
  1443.     ADD_QUAL(gene);
  1444.     ADD_QUAL(label);
  1445.     ADD_QUAL(locus_tag);
  1446.     ADD_QUAL(map);
  1447.     ADD_QUAL(note);
  1448.     ADD_QUAL(standard_name);
  1449.     ADD_QUAL(usedin);
  1450. END_SUBTYPE
  1451. START_SUBTYPE(10_signal)
  1452.     ADD_QUAL(allele);
  1453.     ADD_QUAL(citation);
  1454.     ADD_QUAL(db_xref);
  1455.     ADD_QUAL(evidence);
  1456.     ADD_QUAL(gene);
  1457.     ADD_QUAL(label);
  1458.     ADD_QUAL(locus_tag);
  1459.     ADD_QUAL(map);
  1460.     ADD_QUAL(note);
  1461.     ADD_QUAL(operon);
  1462.     ADD_QUAL(standard_name);
  1463.     ADD_QUAL(usedin);
  1464. END_SUBTYPE
  1465. START_SUBTYPE(35_signal)
  1466.     ADD_QUAL(allele);
  1467.     ADD_QUAL(citation);
  1468.     ADD_QUAL(db_xref);
  1469.     ADD_QUAL(evidence);
  1470.     ADD_QUAL(gene);
  1471.     ADD_QUAL(label);
  1472.     ADD_QUAL(locus_tag);
  1473.     ADD_QUAL(map);
  1474.     ADD_QUAL(note);
  1475.     ADD_QUAL(operon);
  1476.     ADD_QUAL(standard_name);
  1477.     ADD_QUAL(usedin);
  1478. END_SUBTYPE
  1479. START_SUBTYPE(gap)
  1480.     ADD_QUAL(estimated_length);
  1481. END_SUBTYPE
  1482. START_SUBTYPE(operon)
  1483.     ADD_QUAL(allele);
  1484.     ADD_QUAL(citation);
  1485.     ADD_QUAL(db_xref);
  1486.     ADD_QUAL(evidence);
  1487.     ADD_QUAL(function);
  1488.     ADD_QUAL(label);
  1489.     ADD_QUAL(map);
  1490.     ADD_QUAL(note);
  1491.     ADD_QUAL(operon);
  1492.     ADD_QUAL(phenotype);
  1493.     ADD_QUAL(pseudo);
  1494.     ADD_QUAL(standard_name);
  1495.     ADD_QUAL(usedin);
  1496. END_SUBTYPE
  1497. START_SUBTYPE(oriT)
  1498.     ADD_QUAL(allele);
  1499.     ADD_QUAL(bound_moiety);
  1500.     ADD_QUAL(citation);
  1501.     ADD_QUAL(db_xref);
  1502.     ADD_QUAL(direction);
  1503.     ADD_QUAL(evidence);
  1504.     ADD_QUAL(gene);
  1505.     ADD_QUAL(label);
  1506.     ADD_QUAL(locus_tag);
  1507.     ADD_QUAL(map);
  1508.     ADD_QUAL(note);
  1509.     ADD_QUAL(rpt_family);
  1510.     ADD_QUAL(rpt_type);
  1511.     ADD_QUAL(rpt_unit);
  1512.     ADD_QUAL(standard_name);
  1513.     ADD_QUAL(usedin);
  1514. END_SUBTYPE
  1515. //START_SUBTYPE(site_ref)
  1516. //END_SUBTYPE
  1517. START_SUBTYPE(region)
  1518.     ADD_QUAL(allele);
  1519.     ADD_QUAL(citation);
  1520.     ADD_QUAL(db_xref);
  1521.     ADD_QUAL(evidence);
  1522.     ADD_QUAL(gene);
  1523.     ADD_QUAL(label);
  1524.     ADD_QUAL(locus_tag);
  1525.     ADD_QUAL(map);
  1526.     ADD_QUAL(note);
  1527.     ADD_QUAL(product);
  1528.     ADD_QUAL(pseudo);
  1529.     ADD_QUAL(standard_name);
  1530.     ADD_QUAL(usedin);
  1531. END_SUBTYPE
  1532. //START_SUBTYPE(comment)
  1533. //END_SUBTYPE
  1534. //START_SUBTYPE(bond)
  1535. //END_SUBTYPE
  1536. //START_SUBTYPE(site)
  1537. //END_SUBTYPE
  1538. //START_SUBTYPE(rsite)
  1539. //END_SUBTYPE
  1540. //START_SUBTYPE(user)
  1541. //END_SUBTYPE
  1542. //START_SUBTYPE(txinit)
  1543. //END_SUBTYPE
  1544. //START_SUBTYPE(num)
  1545. //END_SUBTYPE
  1546. //START_SUBTYPE(psec_str)
  1547. //END_SUBTYPE
  1548. //START_SUBTYPE(non_std_residue)
  1549. //END_SUBTYPE
  1550. //START_SUBTYPE(het)
  1551. //END_SUBTYPE
  1552. //START_SUBTYPE(biosrc)
  1553. //END_SUBTYPE
  1554. #undef START_SUBTYPE
  1555. #undef ADD_QUAL
  1556. #undef END_SYBTYPE
  1557. }
  1558. void CSeqFeatData::x_InitMandatoryQuals(void)
  1559. {
  1560.     sm_MandatoryQuals[eSubtype_conflict].push_back(eQual_citation);
  1561.     sm_MandatoryQuals[eSubtype_gap].push_back(eQual_estimated_length);
  1562.     sm_MandatoryQuals[eSubtype_misc_binding].push_back(eQual_bound_moiety);
  1563.     sm_MandatoryQuals[eSubtype_protein_bind].push_back(eQual_bound_moiety);
  1564.     sm_MandatoryQuals[eSubtype_modified_base].push_back(eQual_mod_base);
  1565.     sm_MandatoryQuals[eSubtype_old_sequence].push_back(eQual_citation);
  1566.     sm_MandatoryQuals[eSubtype_operon].push_back(eQual_operon);
  1567. }
  1568. void CSeqFeatData::x_InitQuals(void)
  1569. {
  1570.     static bool initialized = false;
  1571.     
  1572.     if ( initialized ) {
  1573.         return;
  1574.     }
  1575.     x_InitLegalQuals();
  1576.     x_InitMandatoryQuals();
  1577.     initialized = true;
  1578. }
  1579. typedef pair<CSeqFeatData::EQualifier, string> TQualPair;
  1580. static const TQualPair kQualPairs[] = {
  1581.     TQualPair(CSeqFeatData::eQual_bad, "bad"),
  1582.     TQualPair(CSeqFeatData::eQual_allele, "allele"),
  1583.     TQualPair(CSeqFeatData::eQual_anticodon, "anticodon"),
  1584.     TQualPair(CSeqFeatData::eQual_bound_moiety, "bound_moiety"),
  1585.     TQualPair(CSeqFeatData::eQual_cell_line, "cell_line"),
  1586.     TQualPair(CSeqFeatData::eQual_cell_type, "cell_type"),
  1587.     TQualPair(CSeqFeatData::eQual_chromosome, "chromosome"),
  1588.     TQualPair(CSeqFeatData::eQual_citation, "citation"),
  1589.     TQualPair(CSeqFeatData::eQual_clone, "clone"),
  1590.     TQualPair(CSeqFeatData::eQual_clone_lib, "clone_lib"),
  1591.     TQualPair(CSeqFeatData::eQual_codon, "codon"),
  1592.     TQualPair(CSeqFeatData::eQual_codon_start, "cons_splice"),
  1593.     TQualPair(CSeqFeatData::eQual_cons_splice, "cons_splice"),
  1594.     TQualPair(CSeqFeatData::eQual_country, "country"),
  1595.     TQualPair(CSeqFeatData::eQual_cultivar, "cultivar"),
  1596.     TQualPair(CSeqFeatData::eQual_db_xref, "db_xref"),
  1597.     TQualPair(CSeqFeatData::eQual_dev_stage, "dev_stage"),
  1598.     TQualPair(CSeqFeatData::eQual_direction, "direction"),
  1599.     TQualPair(CSeqFeatData::eQual_EC_number, "EC_number"),
  1600.     TQualPair(CSeqFeatData::eQual_ecotype, "ecotype"),
  1601.     TQualPair(CSeqFeatData::eQual_environmental_sample, "environmental_sample"),
  1602.     TQualPair(CSeqFeatData::eQual_estimated_length, "estimated_length"),
  1603.     TQualPair(CSeqFeatData::eQual_evidence, "evidence"),
  1604.     TQualPair(CSeqFeatData::eQual_exception, "exception"),
  1605.     TQualPair(CSeqFeatData::eQual_focus, "focus"),
  1606.     TQualPair(CSeqFeatData::eQual_frequency, "frequency"),
  1607.     TQualPair(CSeqFeatData::eQual_function, "function"),
  1608.     TQualPair(CSeqFeatData::eQual_gene, "gene"),
  1609.     TQualPair(CSeqFeatData::eQual_germline, "germline"),
  1610.     TQualPair(CSeqFeatData::eQual_haplotype, "haplotype"),
  1611.     TQualPair(CSeqFeatData::eQual_insertion_seq, "insertion_seq"),
  1612.     TQualPair(CSeqFeatData::eQual_isolate, "isolate"),
  1613.     TQualPair(CSeqFeatData::eQual_isolation_source, "isolation_source"),
  1614.     TQualPair(CSeqFeatData::eQual_label, "label"),
  1615.     TQualPair(CSeqFeatData::eQual_lab_host, "lab_host"),
  1616.     TQualPair(CSeqFeatData::eQual_locus_tag, "locus_tag"),
  1617.     TQualPair(CSeqFeatData::eQual_map, "map"),
  1618.     TQualPair(CSeqFeatData::eQual_macronuclear, "macronuclear"),
  1619.     TQualPair(CSeqFeatData::eQual_mod_base, "mod_base"),
  1620.     TQualPair(CSeqFeatData::eQual_mol_type, "mol_type"),
  1621.     TQualPair(CSeqFeatData::eQual_note, "note"),
  1622.     TQualPair(CSeqFeatData::eQual_number, "number"),
  1623.     TQualPair(CSeqFeatData::eQual_operon, "operon"),
  1624.     TQualPair(CSeqFeatData::eQual_organelle, "organelle"),
  1625.     TQualPair(CSeqFeatData::eQual_organism, "organism"),
  1626.     TQualPair(CSeqFeatData::eQual_partial, "partial"),
  1627.     TQualPair(CSeqFeatData::eQual_PCR_conditions, "PCR_conditions"),
  1628.     TQualPair(CSeqFeatData::eQual_phenotype, "phenotype"),
  1629.     TQualPair(CSeqFeatData::eQual_pop_variant, "pop_variant"),
  1630.     TQualPair(CSeqFeatData::eQual_plasmid, "plasmid"),
  1631.     TQualPair(CSeqFeatData::eQual_product, "product"),
  1632.     TQualPair(CSeqFeatData::eQual_protein_id, "protein_id"),
  1633.     TQualPair(CSeqFeatData::eQual_proviral, "proviral"),
  1634.     TQualPair(CSeqFeatData::eQual_pseudo, "pseudo"),
  1635.     TQualPair(CSeqFeatData::eQual_rearranged, "rearranged"),
  1636.     TQualPair(CSeqFeatData::eQual_replace, "replace"),
  1637.     TQualPair(CSeqFeatData::eQual_rpt_family, "rpt_family"),
  1638.     TQualPair(CSeqFeatData::eQual_rpt_type, "rpt_type"),
  1639.     TQualPair(CSeqFeatData::eQual_rpt_unit, "rpt_unit"),
  1640.     TQualPair(CSeqFeatData::eQual_segment, "segment"),
  1641.     TQualPair(CSeqFeatData::eQual_sequence_mol, "sequence_mol"),
  1642.     TQualPair(CSeqFeatData::eQual_serotype, "serotype"),
  1643.     TQualPair(CSeqFeatData::eQual_serovar, "serovar"),
  1644.     TQualPair(CSeqFeatData::eQual_sex, "sex"),
  1645.     TQualPair(CSeqFeatData::eQual_specific_host, "specific_host"),
  1646.     TQualPair(CSeqFeatData::eQual_specimen_voucher, "specimen_voucher"),
  1647.     TQualPair(CSeqFeatData::eQual_standard_name, "standard_name"),
  1648.     TQualPair(CSeqFeatData::eQual_strain, "strain"),
  1649.     TQualPair(CSeqFeatData::eQual_sub_clone, "sub_clone"),
  1650.     TQualPair(CSeqFeatData::eQual_sub_species, "sub_species"),
  1651.     TQualPair(CSeqFeatData::eQual_sub_strain, "sub_strain"),
  1652.     TQualPair(CSeqFeatData::eQual_tissue_lib, "tissue_lib"),
  1653.     TQualPair(CSeqFeatData::eQual_tissue_type, "tissue_type"),
  1654.     TQualPair(CSeqFeatData::eQual_transgenic, "transgenic"),
  1655.     TQualPair(CSeqFeatData::eQual_translation, "translation"),
  1656.     TQualPair(CSeqFeatData::eQual_transl_except, "transl_except"),
  1657.     TQualPair(CSeqFeatData::eQual_transl_table, "transl_table"),
  1658.     TQualPair(CSeqFeatData::eQual_transposon, "transposon"),
  1659.     TQualPair(CSeqFeatData::eQual_usedin, "usedin"),
  1660.     TQualPair(CSeqFeatData::eQual_variety, "variety"),
  1661.     TQualPair(CSeqFeatData::eQual_virion, "virion"),
  1662. };
  1663. typedef CStaticArrayMap<CSeqFeatData::EQualifier, string> TQualsMap;
  1664. static const TQualsMap sc_QualPairs(kQualPairs, sizeof(kQualPairs));
  1665. const string& CSeqFeatData::GetQulifierAsString(EQualifier qual)
  1666. {
  1667.     TQualsMap::const_iterator iter = sc_QualPairs.find(qual);
  1668.     return (iter != sc_QualPairs.end()) ? iter->second : kEmptyStr;
  1669. }
  1670. END_objects_SCOPE // namespace ncbi::objects::
  1671. END_NCBI_SCOPE
  1672. /*
  1673. * ===========================================================================
  1674. *
  1675. * $Log: SeqFeatData.cpp,v $
  1676. * Revision 1000.2  2004/06/01 19:34:09  gouriano
  1677. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R6.13
  1678. *
  1679. * Revision 6.13  2004/05/19 17:26:04  gorelenk
  1680. * Added include of PCH - ncbi_pch.hpp
  1681. *
  1682. * Revision 6.12  2004/05/19 14:41:02  shomrat
  1683. * Added list of qualifiers
  1684. *
  1685. * Revision 6.11  2004/03/10 21:33:43  shomrat
  1686. * Fixed key for genbank vocabulary
  1687. *
  1688. * Revision 6.10  2003/10/24 17:14:28  shomrat
  1689. * added gap, operaon and oriT subtypes
  1690. *
  1691. * Revision 6.9  2003/06/02 18:06:10  ucko
  1692. * GetSubtype: handle imported features more efficiently.
  1693. *
  1694. * Revision 6.8  2003/05/20 01:29:39  ucko
  1695. * Added missing punctuation in imported keys' names.
  1696. *
  1697. * Revision 6.7  2003/05/19 18:21:32  ucko
  1698. * Add "break" statement accidentally dropped in last change.
  1699. *
  1700. * Revision 6.6  2003/05/19 17:35:56  ucko
  1701. * GetSubtype: properly honor Prot-ref.processed, and ignore bogus
  1702. * imports with corresponding names.
  1703. *
  1704. * Revision 6.5  2003/04/19 16:38:45  dicuccio
  1705. * Remove compiler warning about nested comments
  1706. *
  1707. * Revision 6.4  2003/04/18 21:21:25  kans
  1708. * added GetTypeFromSubtype, moved log to end of file
  1709. *
  1710. * Revision 6.3  2002/03/22 16:13:42  ucko
  1711. * CSeqFeatData::GetKey: return "Prot" rather than "Protein" in default
  1712. * vocabulary.  (Keep "Protein" for Genbank).
  1713. *
  1714. * Revision 6.2  2002/03/06 21:59:48  ucko
  1715. * CSeqFeatData::GetKey: return (misc_)RNA rather than extended name for
  1716. * RNA of type "other."
  1717. *
  1718. * Revision 6.1  2001/10/30 20:25:58  ucko
  1719. * Implement feature labels/keys, subtypes, and sorting
  1720. *
  1721. *
  1722. * ===========================================================================
  1723. */
  1724. /* Original file checksum: lines: 61, chars: 1894, CRC32: 86fb976 */