readfeat.cpp

来自「ncbi源码」· C++ 代码 · 共 1,648 行 · 第 1/5 页

CPP
1,648
字号
        string str = string (site_key_to_subtype [i].key);        m_SiteKeys [string (site_key_to_subtype [i].key)] = site_key_to_subtype [i].subtype;    }    for (int i = 0; i < sizeof (trna_key_to_subtype) / sizeof (TrnaInit); i++) {        string str = string (trna_key_to_subtype [i].key);        m_TrnaKeys [string (trna_key_to_subtype [i].key)] = trna_key_to_subtype [i].subtype;    }    for (int i = 0; i < sizeof (single_key_list) / sizeof (SingleInit); i++) {        string str = string (single_key_list [i].key);        m_SingleKeys.push_back (str);    }}// destructorCFeature_table_reader_imp::~CFeature_table_reader_imp(void){}bool CFeature_table_reader_imp::x_ParseFeatureTableLine (const string& line, Int4* startP, Int4* stopP,                                                         bool* partial5P, bool* partial3P, bool* ispointP,                                                         string& featP, string& qualP, string& valP, Int4 offset){    SIZE_TYPE      numtkns;    bool           badNumber = false;    bool           ispoint = false;    size_t         len;    bool           partial5 = false;    bool           partial3 = false;    Int4           startv = -1;    Int4           stopv = -1;    Int4           swp;    string         start, stop, feat, qual, val, stnd;    vector<string> tkns;    if (line.empty ()) return false;    tkns.clear ();    NStr::Tokenize (line, "\t", tkns);    numtkns = tkns.size ();    if (numtkns > 0) {        start = tkns [0];    }    if (numtkns > 1) {        stop = tkns [1];    }    if (numtkns > 2) {        feat = tkns [2];    }    if (numtkns > 3) {        qual = tkns [3];    }    if (numtkns > 4) {        val = tkns [4];    }    if (numtkns > 5) {        stnd = tkns [5];    }    if (! start.empty ()) {        if (start [0] == '<') {            partial5 = true;            start.erase (0, 1);        }        len = start.length ();        if (len > 1 && start [len - 1] == '^') {          ispoint = true;          start [len - 1] = '\0';        }        try {            startv = NStr::StringToLong (start);        } catch (...) {            badNumber = true;        }    }    if (! stop.empty ()) {        if (stop [0] == '>') {            partial3 = true;            stop.erase (0, 1);        }        try {            stopv = NStr::StringToLong (stop);        } catch (CStringException) {            badNumber = true;        }    }    if (badNumber) {        startv = -1;        stopv = -1;    } else {        startv--;        stopv--;        if (! stnd.empty ()) {            if (stnd == "minus" || stnd == "-" || stnd == "complement") {                if (start < stop) {                    swp = startv;                    startv = stopv;                    stopv = swp;                }            }        }    }    *startP = startv + offset;    *stopP = stopv + offset;    *partial5P = partial5;    *partial3P = partial3;    *ispointP = ispoint;    featP = feat;    qualP = qual;    valP = val;    return true;}bool CFeature_table_reader_imp::x_AddQualifierToGene (CSeqFeatData& sfdata,                                                      EQual qtype, const string& val){    CGene_ref& grp = sfdata.SetGene ();    switch (qtype) {        case eQual_gene:            grp.SetLocus (val);            return true;        case eQual_allele:            grp.SetAllele (val);            return true;        case eQual_gene_desc:            grp.SetDesc (val);            return true;        case eQual_gene_syn:            {                CGene_ref::TSyn& syn = grp.SetSyn ();                syn.push_back (val);                return true;            }        case eQual_map:            grp.SetMaploc (val);            return true;        case eQual_locus_tag:            grp.SetLocus_tag (val);            return true;        default:            break;    }    return false;}bool CFeature_table_reader_imp::x_AddQualifierToCdregion (CRef<CSeq_feat> sfp, CSeqFeatData& sfdata,                                                          EQual qtype, const string& val){    CCdregion& crp = sfdata.SetCdregion ();    switch (qtype) {        case eQual_codon_start:            {                int frame = NStr::StringToInt (val);                switch (frame) {                    case 0:                        crp.SetFrame (CCdregion::eFrame_not_set);                        break;                    case 1:                        crp.SetFrame (CCdregion::eFrame_one);                        break;                    case 2:                        crp.SetFrame (CCdregion::eFrame_two);                        break;                    case 3:                        crp.SetFrame (CCdregion::eFrame_three);                        break;                    default:                        break;                }                return true;            }        case eQual_EC_number:            {                CProt_ref& prp = sfp->SetProtXref ();                CProt_ref::TEc& ec = prp.SetEc ();                ec.push_back (val);                return true;            }        case eQual_function:            {                CProt_ref& prp = sfp->SetProtXref ();                CProt_ref::TActivity& fun = prp.SetActivity ();                fun.push_back (val);                return true;            }        case eQual_product:            {                CProt_ref& prp = sfp->SetProtXref ();                CProt_ref::TName& prod = prp.SetName ();                prod.push_back (val);                return true;            }        case eQual_prot_desc:            {                CProt_ref& prp = sfp->SetProtXref ();                prp.SetDesc (val);                return true;            }        case eQual_prot_note:            return true;        case eQual_transl_except:            return true;        default:            break;    }    return false;}int CFeature_table_reader_imp::x_ParseTrnaString (const string& val){    string fst, scd;    scd = val;    if (NStr::StartsWith (val, "tRNA-")) {        NStr::SplitInTwo (val, "-", fst, scd);    }    if (m_TrnaKeys.find (scd) != m_TrnaKeys.end ()) {        return m_TrnaKeys [scd];    }    return 0;}bool CFeature_table_reader_imp::x_AddQualifierToRna (CSeqFeatData& sfdata,                                                     EQual qtype, const string& val){    CRNA_ref& rrp = sfdata.SetRna ();    CRNA_ref::EType rnatyp = rrp.GetType ();    switch (rnatyp) {        case CRNA_ref::eType_premsg:        case CRNA_ref::eType_mRNA:        case CRNA_ref::eType_rRNA:        case CRNA_ref::eType_snRNA:        case CRNA_ref::eType_scRNA:        case CRNA_ref::eType_snoRNA:        case CRNA_ref::eType_other:            switch (qtype) {                case eQual_product:                    {                        CRNA_ref::TExt& tex = rrp.SetExt ();                        CRNA_ref::C_Ext::E_Choice exttype = tex.Which ();                        if (exttype == CRNA_ref::C_Ext::e_TRNA) return false;                        tex.SetName (val);                        return true;                    }                default:                    break;            }            break;        case CRNA_ref::eType_tRNA:            switch (qtype) {                case eQual_product: {                        CRNA_ref::TExt& tex = rrp.SetExt ();                        CRNA_ref::C_Ext::E_Choice exttype = tex.Which ();                        if (exttype == CRNA_ref::C_Ext::e_Name) return false;                        CTrna_ext& trx = tex.SetTRNA ();                        int aaval = x_ParseTrnaString (val);                        if (aaval > 0) {                            CTrna_ext::TAa& taa = trx.SetAa ();                            taa.SetNcbieaa (aaval);                            trx.SetAa (taa);                            tex.SetTRNA (trx);                            return true;                        }                    }                    break;                default:                    break;            }            break;        default:            break;    }    return false;}bool CFeature_table_reader_imp::x_AddQualifierToImp (CRef<CSeq_feat> sfp, CSeqFeatData& sfdata,                                                     EQual qtype, const string& qual, const string& val){    switch (qtype) {        case eQual_allele:        case eQual_bound_moiety:        case eQual_clone:        case eQual_cons_splice:        case eQual_direction:        case eQual_EC_number:        case eQual_frequency:        case eQual_function:        case eQual_insertion_seq:        case eQual_label:        case eQual_map:        case eQual_number:        case eQual_operon:        case eQual_organism:        case eQual_PCR_conditions:        case eQual_phenotype:        case eQual_product:        case eQual_replace:        case eQual_rpt_family:        case eQual_rpt_type:        case eQual_rpt_unit:        case eQual_standard_name:        case eQual_transposon:        case eQual_usedin:            {                CSeq_feat::TQual& qlist = sfp->SetQual ();                CRef<CGb_qual> gbq (new CGb_qual);                gbq->SetQual (qual);                gbq->SetVal (val);                qlist.push_back (gbq);                return true;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?