📄 advancedscoremodel_fill.cpp
字号:
{
if (mirror2_stats.is_viz)
{
f_vals.push_back(fval(SNI_IND_MIRROR2_VIZ,1.0));
if (mirror2_stats.has_intensity)
{
f_vals.push_back(fval(SNI_IND_HAS_MIRROR2_INTEN,1.0));
if (mirror2_stats.iso_level != 0)
f_vals.push_back(fval(SNI_MIRROR2_ISO_LEVEL,mirror2_stats.iso_level));
vector<float> iso_intens;
spec->get_iso_intens(mirror2_stats.peak_idx, iso_intens, iso_tolerance, mirror2_charge);
if (iso_intens[1]>=0)
{
f_vals.push_back(fval(SNI_IND_MIRROR2_HAS_MINUS_1,1.0));
f_vals.push_back(fval(SNI_MIRROR1_MINUS_2_INTEN_DIFF,mirror2_stats.log_intensity-iso_intens[1]));
if (iso_intens[0]>=0)
{
f_vals.push_back(fval(SNI_IND_MIRROR2_HAS_MINUS_2,1.0));
f_vals.push_back(fval(SNI_MIRROR2_MINUS_2_INTEN_DIFF,mirror2_stats.log_intensity-iso_intens[0]));
}
}
if (iso_intens[2]>=0)
{
f_vals.push_back(fval(SNI_IND_MIRROR2_HAS_PLUS_1,1.0));
f_vals.push_back(fval(SNI_MIRROR2_PLUS_1_INTEN_DIFF,mirror2_stats.log_intensity-iso_intens[2]));
if (iso_intens[3]>=0)
{
f_vals.push_back(fval(SNI_IND_MIRROR2_HAS_PLUS_2,1.0));
f_vals.push_back(fval(SNI_MIRROR2_PLUS_2_INTEN_DIFF,mirror2_stats.log_intensity-iso_intens[3]));
}
}
}
else
f_vals.push_back(fval(SNI_IND_MIRROR2_NO_INTEN,1.0));
}
else
f_vals.push_back(fval(SNI_IND_MIRROR2_NOT_VIZ,1.0));
}
// Parent 1 features
if (parent1_idx>=0)
{
if (parent1_stats.is_viz)
{
f_vals.push_back(fval(SNI_IND_PARENT1_VIZ,1.0));
if (parent1_stats.has_intensity)
{
f_vals.push_back(fval(SNI_IND_PARENT1_INTEN,1.0));
if (parent1_stats.iso_level != 0)
f_vals.push_back(fval(SNI_PARENT1_ISO_LEVEL,parent1_stats.iso_level));
f_vals.push_back(fval(SNI_PARENT1_LOG_INTEN,parent1_stats.log_intensity));
f_vals.push_back(fval(SNI_PARENT1_LOG_GLOBAL_RANK,parent1_stats.log_global_rank));
}
else
f_vals.push_back(fval(SNI_IND_PARENT1_NO_INTEN,1.0));
}
else
f_vals.push_back(fval(SNI_IND_PARENT1_NOT_VIZ,1.0));
}
// Parent 2 features
if (parent2_idx>=0)
{
if (parent2_stats.is_viz)
{
f_vals.push_back(fval(SNI_IND_PARENT2_VIZ,1.0));
if (parent2_stats.has_intensity)
{
f_vals.push_back(fval(SNI_IND_PARENT2_INTEN,1.0));
if (SNI_PARENT2_ISO_LEVEL,parent2_stats.iso_level != 0)
f_vals.push_back(fval(SNI_PARENT2_ISO_LEVEL,parent2_stats.iso_level));
f_vals.push_back(fval(SNI_PARENT2_LOG_INTEN,parent2_stats.log_intensity));
f_vals.push_back(fval(SNI_PARENT2_LOG_GLOBAL_RANK,parent2_stats.log_global_rank));
}
else
f_vals.push_back(fval(SNI_IND_PARENT2_NO_INTEN,1.0));
}
else
f_vals.push_back(fval(SNI_IND_PARENT2_NOT_VIZ,1.0));
}
// self distance
const mass_t expected_mass = config->get_fragment(model_frag_idx).calc_expected_mass(breakage->mass,pm_with_19);
const mass_t dis_min = expected_mass - spec->get_min_peak_mass();
const mass_t dis_max = spec->get_max_peak_mass() - expected_mass;
const mass_t dis = (dis_min<dis_max ? dis_min : dis_max);
if (dis<50)
{
f_vals.push_back(fval(SNI_IND_DIS_FROM_MINMAX_LESS_50,1.0));
f_vals.push_back(fval(SNI_DIS_FROM_MINMAX0,dis));
}
else if (dis<150)
{
f_vals.push_back(fval(SNI_IND_DIS_FROM_MINMAX_LESS_150,1.0));
f_vals.push_back(fval(SNI_DIS_FROM_MINMAX50,dis-50.0));
}
else if (dis<250)
{
f_vals.push_back(fval(SNI_IND_DIS_FROM_MINMAX_LESS_250,1.0));
f_vals.push_back(fval(SNI_DIS_FROM_MINMAX150,dis-150.0));
}
else
{
f_vals.push_back(fval(SNI_IND_DIS_FROM_MINMAX_MORE,1.0));
f_vals.push_back(fval(SNI_DIS_FROM_MINMAX250,dis-250.0));
}
const int rel_pos = int(10*breakage->mass/pm_with_19);
f_vals.push_back(fval(SNI_REL_POS0+rel_pos,1.0));
}
}
/**********************************************************************************
***********************************************************************************/
void StrongFragModel::fill_aa_variable_vals(
Spectrum *spec,
mass_t pm_with_19,
const Breakage *breakage,
const BreakageInfo* info,
vector<fval>& f_vals) const
{
const vector<int>& org_aas = config->get_org_aa();
const int n_aa = (info->n_aa>=0 ? org_aas[info->n_aa] : Gap);
const int c_aa = (info->c_aa>=0 ? org_aas[info->c_aa] : Gap);
const int pos = breakage->get_position_of_frag_idx(model_frag_idx);
const bool do_n_features = (n_aa != Gap);
const bool do_c_features = (c_aa != Gap);
const FragmentType& fragment = config->get_fragment(model_frag_idx);
const mass_t exp_peak_mass = (info->breakage ?
fragment.calc_expected_mass(info->breakage->mass,pm_with_19) : NEG_INF);
const mass_t exp_n_peak_mass = (do_n_features && info->n_break ?
fragment.calc_expected_mass(info->n_break->mass,pm_with_19) : NEG_INF);
const mass_t exp_c_peak_mass = (do_c_features && info->c_break ?
fragment.calc_expected_mass(info->c_break->mass,pm_with_19) : NEG_INF);
static vector<int> threshes;
if (threshes.size()==0)
{
threshes.push_back(18);
threshes.push_back(12);
threshes.push_back(8);
threshes.push_back(4);
threshes.push_back(2);
threshes.push_back(NEG_INF);
}
// fill intensity
if (pos>=0)
{
if (! do_n_features)
f_vals.push_back(fval(SI_IND_N_IS_GAP,1.0));
if (! do_c_features)
f_vals.push_back(fval(SI_IND_C_IS_GAP,1.0));
// aa category feature
if (do_n_features)
{
int k;
for (k=0; k<threshes.size(); k++)
if (info->n_side_cat>threshes[k])
break;
if (info->connects_to_N_term)
{
f_vals.push_back(fval(SI_N_TERM_CAT20+k,1.0));
}
else
f_vals.push_back(fval(SI_N_EDGE_CAT20+k,1.0));
for (k=0; k<threshes.size(); k++)
if (info->c_side_cat>threshes[k])
break;
}
if (do_c_features)
{
int k;
for (k=0; k<threshes.size(); k++)
if (info->c_side_cat>threshes[k])
break;
if (info->connects_to_C_term)
{
f_vals.push_back(fval(SI_C_TERM_CAT20+k,1.0));
}
else
f_vals.push_back(fval(SI_C_EDGE_CAT20+k,1.0));
if (do_n_features)
{
int k;
for (k=0; k<threshes.size(); k++)
if (info->span_cat>threshes[k])
break;
f_vals.push_back(fval(SI_SPAN_CAT20+k,1.0));
if (info->n_double_span_cat>NEG_INF)
{
int k;
for (k=0; k<threshes.size(); k++)
if (info->n_double_span_cat>threshes[k])
break;
f_vals.push_back(fval(SI_ND_SPAN_CAT20+k,1.0));
}
if (info->c_double_span_cat>NEG_INF)
{
int k;
for (k=0; k<threshes.size(); k++)
if (info->c_double_span_cat>threshes[k])
break;
f_vals.push_back(fval(SI_CD_SPAN_CAT20+k,1.0));
}
}
}
const Peak& peak = spec->get_peak(breakage->fragments[pos].peak_idx);
if (do_n_features)
{
if (info->connects_to_N_term)
f_vals.push_back(fval(SI_IND_CONNECTS_TO_N_TERM,1.0));
if (info->preferred_digest_aa_N_term)
f_vals.push_back(fval(SI_IND_PREFERRED_DIGEST_AA_N_TERM,1.0));
}
if (do_c_features)
{
if (info->connects_to_C_term)
f_vals.push_back(fval(SI_IND_CONNECTS_TO_C_TERM,1.0));
if (info->preferred_digest_aa_C_term)
f_vals.push_back(fval(SI_IND_PREFERRED_DIGEST_AA_C_TERM,1.0));
}
if (!info->connects_to_N_term && ! info->connects_to_C_term)
f_vals.push_back(fval(SI_IND_NOT_CONNECTED_TO_TERMS,1.0));
if (info->missed_cleavage)
f_vals.push_back(fval(SI_IND_MISSED_CLEAVAGE,1.0));
if (do_n_features)
{
if (! info->n_break || ! info->n_break->is_frag_type_visible(model_frag_idx))
{
f_vals.push_back(fval(SI_IND_N_FRAG_NOT_VIZ,1.0));
}
else
{
f_vals.push_back(fval(SI_IND_N_N_TERM,1.0));
f_vals.push_back(fval(SI_IND_N_N_TERM+n_aa,1.0));
const int n_pos=info->n_break->get_position_of_frag_idx(model_frag_idx);
if (n_pos>=0)
{
f_vals.push_back(fval(SI_IND_N_INTEN,1.0));
f_vals.push_back(fval(SI_IND_N_N_TERM_INTEN,peak.log_intensity));
f_vals.push_back(fval(SI_IND_N_N_TERM_INTEN+n_aa,peak.log_intensity));
}
else
f_vals.push_back(fval(SI_IND_N_NO_INTEN,1.0));
const mass_t dis_min =exp_n_peak_mass - spec->get_min_peak_mass();
const mass_t dis_max = spec->get_max_peak_mass() - exp_n_peak_mass;
const mass_t min_dis = (dis_min<dis_max ? dis_min : dis_max);
if (info->n_edge_is_single)
{
f_vals.push_back(fval(SI_IND_N_SE,1.0));
if (n_pos>=0)
{
const Peak& n_peak = spec->get_peak(info->n_break->fragments[n_pos].peak_idx);
const mass_t n_diff = fabs(fabs((peak.mass - n_peak.mass)* model_frag_charge) - info->exp_n_edge_mass);
f_vals.push_back(fval(SI_SE_IND_HAS_N_FRAG_INTEN,1.0));
if (min_dis<50)
{
f_vals.push_back(fval(SI_SE_IND_N_DIS_FROM_MINMAX_LESS_50_WINTEN,1.0));
}
else if (min_dis<150)
{
f_vals.push_back(fval(SI_SE_IND_N_DIS_FROM_MINMAX_LESS_150_WINTEN,1.0));
}
else if (min_dis<250)
f_vals.push_back(fval(SI_SE_IND_N_DIS_FROM_MINMAX_LESS_250_WINTEN,1.0));
if (n_diff<exact_peak_tolerance)
{
f_vals.push_back(fval(SI_SE_IND_N_FRAG_DIFF_01,1.0));
}
else if (n_diff<frag_tolerance)
{
f_vals.push_back(fval(SI_SE_IND_N_FRAG_DIFF_05,1.0));
}
else
f_vals.push_back(fval(SI_SE_IND_N_FRAG_DIFF_LARGE,1.0));
const float diff_inten = peak.log_intensity - n_peak.log_intensity;
f_vals.push_back(fval(SI_SE_IND_N_N_TERM_DIFF_INTEN,diff_inten));
f_vals.push_back(fval(SI_SE_IND_N_N_TERM_DIFF_INTEN+n_aa,diff_inten));
}
else
{
f_vals.push_back(fval(SI_SE_IND_HAS_NO_N_FRAG_INTEN,1.0));
if (min_dis<50)
{
f_vals.push_back(fval(SI_SE_IND_N_DIS_FROM_MINMAX_LESS_50_NOINTEN,1.0));
}
else if (min_dis<150)
{
f_vals.push_back(fval(SI_SE_IND_N_DIS_FROM_MINMAX_LESS_150_NOINTEN,1.0));
}
else if (min_dis<250)
f_vals.push_back(fval(SI_SE_IND_N_DIS_FROM_MINMAX_LESS_250_NOINTEN,1.0));
}
}
else // multiple edge
{
f_vals.push_back(fval(SI_IND_N_ME,1.0));
if (n_pos>=0)
{
const Peak& n_peak = spec->get_peak(info->n_break->fragments[n_pos].peak_idx);
const mass_t n_diff = fabs(fabs((peak.mass - n_peak.mass)* model_frag_charge) - info->exp_n_edge_mass);
f_vals.push_back(fval(SI_ME_IND_HAS_N_FRAG_INTEN,1.0));
if (min_dis<50)
{
f_vals.push_back(fval(SI_ME_IND_N_DIS_FROM_MINMAX_LESS_50_WINTEN,1.0));
}
else if (min_dis<150)
{
f_vals.push_back(fval(SI_ME_IND_N_DIS_FROM_MINMAX_LESS_150_WINTEN,1.0));
}
else if (min_dis<250)
f_vals.push_back(fval(SI_ME_IND_N_DIS_FROM_MINMAX_LESS_250_WINTEN,1.0));
if (n_diff<exact_peak_tolerance)
{
f_vals.push_back(fval(SI_ME_IND_N_FRAG_DIFF_01,1.0));
}
else if (n_diff<frag_tolerance)
{
f_vals.push_back(fval(SI_ME_IND_N_FRAG_DIFF_05,1.0));
}
else
f_vals.push_back(fval(SI_ME_IND_N_FRAG_DIFF_LARGE,1.0));
}
else
{
f_vals.push_back(fval(SI_ME_IND_HAS_NO_N_FRAG_INTEN,1.0));
if (min_dis<50)
{
f_vals.push_back(fval(SI_ME_IND_N_DIS_FROM_MINMAX_LESS_50_NOINTEN,1.0));
}
else if (min_dis<150)
{
f_vals.push_back(fval(SI_ME_IND_N_DIS_FROM_MINMAX_LESS_150_NOINTEN,1.0));
}
else if (min_dis<250)
f_vals.push_back(fval(SI_ME_IND_N_DIS_FROM_MINMAX_LESS_250_NOINTEN,1.0));
}
}
}
}
if (do_c_features)
{
if (! info->c_break || ! info->c_break->is_frag_type_visible(model_frag_idx))
{
f_vals.push_back(fval(SI_IND_C_FRAG_NOT_VIZ,1.0));
}
else
{
f_vals.push_back(fval(SI_IND_C_N_TERM,1.0));
f_vals.push_back(fval(SI_IND_C_N_TERM+c_aa,1.0));
const int c_pos=info->c_break->get_position_of_frag_idx(model_frag_idx);
if (c_pos>=0)
{
f_vals.push_back(fval(SI_IND_C_INTEN,1.0));
f_vals.push_back(fval(SI_IND_C_N_TERM_INTEN,peak.log_intensity));
f_vals.push_back(fval(SI_IND_C_N_TERM_INTEN+c_aa,peak.log_intensity));
}
else
f_vals.push_back(fval(SI_IND_C_NO_INTEN,1.0));
const mass_t dis_min =exp_c_peak_mass - spec->get_min_peak_mass();
const mass_t dis_max = spec->get_max_peak_mass() - exp_c_peak_mass;
const mass_t min_dis = (dis_min<dis_max ? dis_min : dis_max);
if (info->c_edge_is_single)
{
f_vals.push_back(fval(SI_IND_C_SE,1.0));
if (c_pos>=0)
{
const Peak& c_peak = spec->get_peak(info->c_break->fragments[c_pos].peak_idx);
const mass_t c_diff = fabs(fabs((peak.mass - c_peak.mass)* model_frag_charge) - info->exp_c_edge_mass);
f_vals.push_back(fval(SI_SE_IND_HAS_C_FRAG_INTEN,1.0));
if (min_dis<50)
{
f_vals.push_back(fval(SI_SE_IND_C_DIS_FROM_MINMAX_LESS_50_WINTEN,1.0));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -