⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 advancedscoremodel_fill.cpp

📁 MS-Clustering is designed to rapidly cluster large MS/MS datasets. The program merges similar spectr
💻 CPP
📖 第 1 页 / 共 4 页
字号:
			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 + -