📄 advancedscoremodel_fill.cpp
字号:
f_vals.push_back(fval(RI_IND_LOG_INTEN_LESS2,1.0));
f_vals.push_back(fval(RI_LOG_INTEN_LESS2,log_inten-1.0));
}
else if (log_inten<3.0)
{
f_vals.push_back(fval(RI_IND_LOG_INTEN_LESS3,1.0));
f_vals.push_back(fval(RI_LOG_INTEN_LESS3,log_inten-2.0));
}
else if (log_inten<4.0)
{
f_vals.push_back(fval(RI_IND_LOG_INTEN_LESS4,1.0));
f_vals.push_back(fval(RI_LOG_INTEN_LESS4,log_inten-3.0));
}
else
{
f_vals.push_back(fval(RI_IND_LOG_INTEN_MORE,1.0));
f_vals.push_back(fval(RI_LOG_INTEN_MORE,log_inten-4.0));
}
// self distance
const mass_t dis_min = frag_stats.mass - spec->get_min_peak_mass();
const mass_t dis_max = spec->get_max_peak_mass() - frag_stats.mass;
const mass_t dis = (dis_min<dis_max ? dis_min : dis_max);
if (dis<50)
{
f_vals.push_back(fval(RI_IND_DIS_FROM_MINMAX_LESS_50,1.0));
f_vals.push_back(fval(RI_DIS_FROM_MINMAX0,dis));
f_vals.push_back(fval(RI_LOG_INTEN_DIS50,log_inten));
}
else if (dis<150)
{
f_vals.push_back(fval(RI_IND_DIS_FROM_MINMAX_LESS_150,1.0));
f_vals.push_back(fval(RI_DIS_FROM_MINMAX50,dis-50.0));
f_vals.push_back(fval(RI_LOG_INTEN_DIS150,log_inten));
}
else if (dis<250)
{
f_vals.push_back(fval(RI_IND_DIS_FROM_MINMAX_LESS_250,1.0));
f_vals.push_back(fval(RI_DIS_FROM_MINMAX150,dis-150.0));
f_vals.push_back(fval(RI_LOG_INTEN_DIS250,log_inten));
}
else
{
f_vals.push_back(fval(RI_IND_DIS_FROM_MINMAX_MORE,1.0));
f_vals.push_back(fval(RI_DIS_FROM_MINMAX250,dis-250.0));
f_vals.push_back(fval(RI_LOG_INTEN_DISMORE,log_inten));
}
const int rel_pos = int(10*breakage->mass/pm_with_19);
f_vals.push_back(fval(RI_REL_POS0+rel_pos,1.0));
bool got_prefix = false;
bool got_suffix = false;
int combo_idx=0;
int pow=1;
int num_parents_with_intensity=0;
int i;
for (i=0; i<num_parents; i++)
{
if (parent_frag_stasts[i].has_intensity)
{
num_parents_with_intensity++;
if (config->get_fragment(parent_idxs[i]).orientation == PREFIX)
{
got_prefix = true;
}
else
got_suffix = true;
if (i<4)
combo_idx += pow;
}
pow*=2;
}
if (num_parents_with_intensity>6)
num_parents_with_intensity=7;
f_vals.push_back(fval(RI_IND_NUM_PARENTS_WITH_INTEN_IS_0+num_parents_with_intensity,1.0));
f_vals.push_back(fval(RI_IND_PARENT_COMBO_0+combo_idx,1.0));
if (got_prefix && got_suffix)
{
f_vals.push_back(fval(RI_IND_GOT_BOTH_ORIS,1.0));
}
else if (got_prefix)
{
f_vals.push_back(fval(RI_IND_GOT_PREFIX,1.0));
}
else if (got_suffix)
f_vals.push_back(fval(RI_IND_GOT_SUFFIX,1.0));
for (i=0; i<num_parents; i++)
{
const int offset_idx = 7*i;
if (! parent_frag_stasts[i].is_viz)
{
f_vals.push_back(fval(RI_IND_PARENT1_NOT_VIZ+offset_idx,1.0));
}
else
{
if (! parent_frag_stasts[i].has_intensity)
{
f_vals.push_back(fval(RI_IND_PARENT1_NO_INTEN+offset_idx,1.0));
}
else
{
if (parent_frag_stasts[i].iso_level != 0)
f_vals.push_back(fval(RI_PARENT1_ISO_LEVEL+offset_idx,parent_frag_stasts[i].iso_level));
const float parent_log = parent_frag_stasts[i].log_intensity;
if (parent_log>log_inten)
{
f_vals.push_back(fval(RI_IND_PARENT1_INTEN_MORE+offset_idx,1.0));
f_vals.push_back(fval(RI_PARENT1_INTEN_DIFF_MORE+offset_idx,parent_log-log_inten));
}
else
{
f_vals.push_back(fval(RI_IND_PARENT1_INTEN_LESS+offset_idx,1.0));
f_vals.push_back(fval(RI_PARENT1_INTEN_DIFF_LESS+offset_idx,parent_log-log_inten));
}
}
}
}
for (i=0; i<f_vals.size(); i++)
if (f_vals[i].f_idx>RI_NUM_FEATURES)
{
int qq=1;
}
}
else // Fill features for non-visible
{
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);
f_vals.push_back(fval(RNI_CONST,1.0));
if (dis<50)
{
f_vals.push_back(fval(RNI_IND_DIS_FROM_MINMAX_LESS_50,1.0));
f_vals.push_back(fval(RNI_DIS_FROM_MINMAX0,dis));
}
else if (dis<150)
{
f_vals.push_back(fval(RNI_IND_DIS_FROM_MINMAX_LESS_150,1.0));
f_vals.push_back(fval(RNI_DIS_FROM_MINMAX50,dis-50.0));
}
else if (dis<250)
{
f_vals.push_back(fval(RNI_IND_DIS_FROM_MINMAX_LESS_250,1.0));
f_vals.push_back(fval(RNI_DIS_FROM_MINMAX150,dis-150.0));
}
else
{
f_vals.push_back(fval(RNI_IND_DIS_FROM_MINMAX_MORE,1.0));
f_vals.push_back(fval(RNI_DIS_FROM_MINMAX250,dis-250.0));
}
const int rel_pos = int(10*breakage->mass/pm_with_19);
f_vals.push_back(fval(RNI_REL_POS0+rel_pos,1.0));
bool got_prefix=false;
bool got_suffix=false;
int combo_idx=0;
int pow=1;
int num_parents_with_intensity=0;
int i;
for (i=0; i<num_parents; i++)
{
if (parent_frag_stasts[i].has_intensity)
{
num_parents_with_intensity++;
if (config->get_fragment(parent_idxs[i]).orientation == PREFIX)
{
got_prefix = true;
}
else
got_suffix = true;
if (i<4)
combo_idx += pow;
}
pow*=2;
}
if (num_parents_with_intensity>6)
num_parents_with_intensity=7;
f_vals.push_back(fval(RNI_IND_NUM_PARENTS_WITH_INTEN_IS_0+num_parents_with_intensity,1.0));
f_vals.push_back(fval(RNI_IND_PARENT_COMBO_0+combo_idx,1.0));
if (got_prefix && got_suffix)
{
f_vals.push_back(fval(RI_IND_GOT_BOTH_ORIS,1.0));
}
else if (got_prefix)
{
f_vals.push_back(fval(RI_IND_GOT_PREFIX,1.0));
}
else if (got_suffix)
f_vals.push_back(fval(RI_IND_GOT_SUFFIX,1.0));
for (i=0; i<num_parents; i++)
{
const int offset_idx = 5*i;
if (! parent_frag_stasts[i].is_viz)
{
f_vals.push_back(fval(RNI_IND_PARENT1_NOT_VIZ+offset_idx,1.0));
}
else
{
if (! parent_frag_stasts[i].has_intensity)
{
f_vals.push_back(fval(RNI_IND_PARENT1_NO_INTEN+offset_idx,1.0));
}
else
{
f_vals.push_back(fval(RNI_PARENT1_LOG_INTEN+offset_idx,parent_frag_stasts[i].log_intensity));
f_vals.push_back(fval(RNI_PARENT1_LOG_GLOBAL_RANK+offset_idx,parent_frag_stasts[i].log_global_rank));
if (parent_frag_stasts[i].iso_level != 0)
f_vals.push_back(fval(RNI_PARENT1_ISO_LEVEL+offset_idx,parent_frag_stasts[i].iso_level));
}
}
}
}
}
/**********************************************************************************
***********************************************************************************/
void RegularFragModel::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);
// fill intensity
if (pos>=0)
{
if (! do_n_features)
f_vals.push_back(fval(RI_IND_N_IS_GAP,1.0));
if (! do_c_features)
f_vals.push_back(fval(RI_IND_C_IS_GAP,1.0));
const float log_inten = spec->get_peak(breakage->fragments[pos].peak_idx).log_intensity;
// add aa presence indicators
if (do_n_features)
{
int *var_ptr = info->n_var_ptr;
const int num_aa = *var_ptr++;
int k;
for (k=0; k<num_aa; k++)
{
const int n_aa = org_aas[var_ptr[k]];
f_vals.push_back(fval(RI_IND_N_HAS_N_TERM,1.0));
f_vals.push_back(fval(RI_IND_N_HAS_N_TERM+n_aa,1.0));
f_vals.push_back(fval(RI_N_N_TERM_SELF_INTEN,log_inten));
f_vals.push_back(fval(RI_N_N_TERM_SELF_INTEN+n_aa,log_inten));
}
}
if (do_c_features)
{
int *var_ptr = info->c_var_ptr;
const int num_aa = *var_ptr++;
int k;
for (k=0; k<num_aa; k++)
{
const int c_aa = org_aas[var_ptr[k]];
f_vals.push_back(fval(RI_IND_C_HAS_N_TERM,1.0));
f_vals.push_back(fval(RI_IND_C_HAS_N_TERM+c_aa,1.0));
f_vals.push_back(fval(RI_C_N_TERM_SELF_INTEN,log_inten));
f_vals.push_back(fval(RI_C_N_TERM_SELF_INTEN+c_aa,log_inten));
}
}
}
else // Fill no frag features
{
if (! do_n_features)
f_vals.push_back(fval(RNI_IND_N_IS_GAP,1.0));
if (! do_c_features)
f_vals.push_back(fval(RNI_IND_C_IS_GAP,1.0));
// add aa presence indicators
if (do_n_features)
{
int *var_ptr = info->n_var_ptr;
const int num_aa = *var_ptr++;
int k;
for (k=0; k<num_aa; k++)
{
const int n_aa = org_aas[var_ptr[k]];
f_vals.push_back(fval(RNI_IND_N_HAS_N_TERM,1.0));
f_vals.push_back(fval(RNI_IND_N_HAS_N_TERM+n_aa,1.0));
}
}
if (do_c_features)
{
int *var_ptr = info->c_var_ptr;
const int num_aa = *var_ptr++;
int k;
for (k=0; k<num_aa; k++)
{
const int c_aa = org_aas[var_ptr[k]];
f_vals.push_back(fval(RNI_IND_C_HAS_N_TERM,1.0));
f_vals.push_back(fval(RNI_IND_C_HAS_N_TERM+c_aa,1.0));
}
}
}
}
void StrongFragModel::fill_combo_vectors(Spectrum *spec,
mass_t pm_with_19,
const Breakage *breakage,
const vector<BreakageInfo>& infos,
vector< ME_Regression_Sample > & samples) const
{
vector<fval> const_vals;
fill_constant_vals(spec,pm_with_19,breakage,const_vals);
samples.resize(infos.size());
int i;
for (i=0; i<infos.size(); i++)
{
vector< fval > var_vals;
fill_aa_variable_vals(spec,pm_with_19,breakage,&infos[i],var_vals);
samples[i].f_vals = const_vals;
int j;
for (j=0; j<var_vals.size(); j++)
samples[i].f_vals.push_back(var_vals[j]);
}
}
void StrongFragModel::fill_single_frag_vector(Spectrum *spec,
mass_t pm_with_19,
const Breakage *breakage,
BreakageInfo& info,
vector< fval >& f_vals) const
{
fill_constant_vals(spec,pm_with_19,breakage,f_vals);
fill_aa_variable_vals(spec,pm_with_19,breakage,&info,f_vals);
sort(f_vals.begin(),f_vals.end());
}
void RegularFragModel::fill_combo_vectors(Spectrum *spec,
mass_t pm_with_19,
const Breakage *breakage,
const vector<BreakageInfo>& infos,
vector< ME_Regression_Sample > & samples) const
{
vector<fval> const_vals;
fill_constant_vals(spec,pm_with_19,breakage,const_vals);
samples.resize(infos.size());
int i;
for (i=0; i<infos.size(); i++)
{
vector< fval > var_vals;
fill_aa_variable_vals(spec,pm_with_19,breakage,&infos[i],var_vals);
samples[i].f_vals = const_vals;
int j;
for (j=0; j<var_vals.size(); j++)
samples[i].f_vals.push_back(var_vals[j]);
}
}
void RegularFragModel::fill_single_frag_vector(Spectrum *spec,
mass_t pm_with_19,
const Breakage *breakage,
BreakageInfo& info,
vector< fval >& f_vals) const
{
fill_constant_vals(spec,pm_with_19,breakage,f_vals);
fill_aa_variable_vals(spec,pm_with_19,breakage,&info,f_vals);
sort(f_vals.begin(),f_vals.end());
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -