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

📄 advancedscoremodel_fill.cpp

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