advancedscoremodel_regional.cpp

来自「MS-Clustering is designed to rapidly clu」· C++ 代码 · 共 1,341 行 · 第 1/5 页

CPP
1,341
字号
			cout << "Problem with models!!!" << endl;
			exit(1);
		}

		cout << endl << endl << "TRAINING NO INTENSITY MODEL FOR CHARGE " <<
			charge << " SIZE " << size_idx << " REGION " << region_idx << " FRAGMENT " << i << " " <<
			config->get_fragment(frag_idx).label << endl << endl;

		no_inten_ds.purge_low_count_features(min_num_of_samples_per_feature);
		int num_bad=no_inten_ds.check_samples(true);
			if (num_bad>0)
				cout << "Warning: had " << num_bad << " bad samples removed!" << endl;

		no_inten_ds.print_summary();
		no_inten_ds.print_feature_summary(cout, ScoreModelFields_SNI_names);
		if (! strong_models[i].no_inten_model.train_cg(no_inten_ds,num_me_rounds,2E-5))
		{
			cout << "Coudln't train no inten ME model, exiting!" << endl;
			exit(1);
		}
		else
		{
			cout << endl << "NO INTENSITY - Charge " << charge << " size " << size_idx << " region " << region_idx << 
				" fragment " << config->get_fragment(frag_idx).label << endl;
			strong_models[i].no_inten_model.print_ds_probs(no_inten_ds);
			strong_models[i].no_inten_log_scaling_factor = 
				log(strong_models[i].no_inten_model.calc_log_scaling_constant(0,no_inten_ds,1.1*(1.0-frag_prob)));
		}

		strong_models[i].ind_has_models = true;
	}

	for (i=0; i<regular_models.size(); i++)
	{
		ME_Regression_DataSet inten_ds, no_inten_ds;
		const int frag_idx = regular_models[i].model_frag_idx;
		const float frag_prob = get_frag_prob(frag_idx);

		cout << endl << endl << "TRAINING INTENSITY MODEL FOR CHARGE " <<
			charge << " SIZE " << size_idx << " REGION " << region_idx << " FRAGMENT " << i << " " <<
			config->get_fragment(frag_idx).label << endl << endl;

		int j;
		for (j=0; j<3; j++)
		{
			cout << "SEED: " << get_random_seed() << endl;
			create_training_set(model, regular_models[i], fm, inten_ds, no_inten_ds);

			inten_ds.purge_low_count_features(min_num_of_samples_per_feature);
			int num_bad=inten_ds.check_samples(true);
			if (num_bad>0)
				cout << "Warning: had " << num_bad << " bad samples removed!" << endl;


			inten_ds.print_summary();
			inten_ds.print_feature_summary(cout, ScoreModelFields_RI_names);
			if (! regular_models[i].inten_model.train_cg(inten_ds,num_me_rounds,2E-5))
			{
				cout << "Coudln't train ME model, setting all weights to 0! (" <<j<<")"<< endl;
			}
			else
			{
				cout << endl << "INTENSTY - Charge " << charge << " size " << size_idx << " region " << region_idx << 
					" fragment " << config->get_fragment(frag_idx).label << endl ;
				regular_models[i].inten_model.print_ds_probs(inten_ds);
				regular_models[i].inten_log_scaling_factor = 
					log(regular_models[i].inten_model.calc_log_scaling_constant(0,inten_ds,1.1*frag_prob));
				break;
			}
		}
		
		cout << endl << endl << "TRAINING NO INTENSITY MODEL FOR CHARGE " <<
				charge << " SIZE " << size_idx << " REGION " << region_idx << " FRAGMENT " << i << " " <<
				config->get_fragment(frag_idx).label << endl << endl;

		no_inten_ds.purge_low_count_features(min_num_of_samples_per_feature);

		int num_bad=no_inten_ds.check_samples(true);
		if (num_bad>0)
			cout << "Warning: had " << num_bad << " bad samples removed!" << endl;


		no_inten_ds.print_summary();
		no_inten_ds.print_feature_summary(cout, ScoreModelFields_RNI_names);
		if (! regular_models[i].no_inten_model.train_cg(no_inten_ds,num_me_rounds,2E-5))
		{
			cout << "Coudln't train ME model, setting all weights to 0!" << endl;
		}
		else
		{
			cout << endl << "NO INTENSTY - Charge " << charge << " size " << size_idx << " region " << region_idx << 
				" fragment " << config->get_fragment(frag_idx).label << endl;
				regular_models[i].no_inten_model.print_ds_probs(no_inten_ds);
				regular_models[i].no_inten_log_scaling_factor = 
					log(regular_models[i].no_inten_model.calc_log_scaling_constant(0,no_inten_ds,(1.0-frag_prob)));
		}

		regular_models[i].ind_has_models = true;
	}	


	was_initialized = true;

	write_regional_score_model(name);

	return true;
}




void BreakageInfo::print(Config *config) const
{
	const vector<string>& aa2label = config->get_aa2label();
	cout << setw(2) << this->type << "> ";
	cout << (this->connects_to_N_term ? '[' : ' ');
	cout << (this->n_edge_is_single ? '1' : '2');
	cout <<  " " << aa2label[this->n_aa] << " : " << aa2label[this->c_aa] << " ";
	cout << (this->c_edge_is_single ? '1' : '2');
	cout << (this->connects_to_C_term ? ']' : ' ');
	cout << " " << fixed << setprecision(3) << "  # " <<this->node_idx << " ";
	if (this->missed_cleavage)
		cout << "MC!";
	cout << endl;
}

void PrmGraph::fill_breakage_info(const Model *model, BreakageInfo *info, int node_idx,
								  int n_edge_idx, int n_variant_idx,
								  int c_edge_idx, int c_variant_idx, int type) const
{
	const vector<mass_t>& aa2mass = config->get_aa2mass();
	const vector<int>& n_term_digest_aas = config->get_n_term_digest_aas();
	const vector<int>& c_term_digest_aas = config->get_c_term_digest_aas();
	
	info->node_idx = node_idx;
	info->breakage = &nodes[node_idx].breakage;
	info->type = type;

	info->n_edge_idx = n_edge_idx;
	info->n_var_idx  = n_variant_idx;
	info->c_edge_idx = c_edge_idx;
	info->c_var_idx  = c_variant_idx;

	int n_second_before_cut = NEG_INF;
	if (n_edge_idx>=0)
	{
		const MultiEdge& n_edge = multi_edges[n_edge_idx];
		const Node& n_node = nodes[n_edge.n_idx];
		int *v_ptr = n_edge.variant_ptrs[n_variant_idx];

		info->n_var_ptr = v_ptr;

		const int num_aa = *v_ptr++;
		int n_aa = v_ptr[num_aa-1];
		mass_t exp_edge_mass=0;
		int j;
		for (j=0; j<num_aa; j++)
			exp_edge_mass+=aa2mass[v_ptr[j]];

		if (n_aa == Ile || n_aa == Xle)
			n_aa = Leu;

		info->n_aa = n_aa;
		info->nn_aa = v_ptr[0];
		
		if (info->nn_aa == Ile || info->nn_aa == Xle)
			info->nn_aa = Leu;

		info->n_break = n_edge.n_break;
		info->exp_n_edge_mass = exp_edge_mass;
		info->n_edge_is_single = (num_aa ==1);

		if (! info->n_edge_is_single)
			n_second_before_cut = v_ptr[num_aa-2];
		if (n_second_before_cut == Ile || n_second_before_cut == Xle)
			n_second_before_cut = Leu;

		if (n_node.type == NODE_N_TERM)
		{
			info->connects_to_N_term=true;
			int j;
			for (j=0; j<n_term_digest_aas.size(); j++)
				if (n_term_digest_aas[j] == *v_ptr)
				{
					info->preferred_digest_aa_N_term=true;
					break;
				}
		}

		for (j=0; j<c_term_digest_aas.size(); j++)
			if (c_term_digest_aas[j] == v_ptr[num_aa-1])
			{
				info->missed_cleavage= true;
				break;
			}

		info->ind_n_edge_overlaps = (n_edge.ind_edge_overlaps);
		info->n_side_cat = model->get_aa_category(num_aa,v_ptr,info->connects_to_N_term,false);
	}
	else
	{
		info->n_aa=Gap;
		info->nn_aa=Gap;
	}

	if (c_edge_idx>=0)
	{
		const MultiEdge& c_edge = multi_edges[c_edge_idx];
		const Node& c_node = nodes[c_edge.c_idx];
		int *v_ptr = c_edge.variant_ptrs[c_variant_idx];

		info->c_var_ptr = v_ptr;

		const int num_aa = *v_ptr++;
		int c_aa = v_ptr[0];
		mass_t exp_edge_mass=0;
		int j;
		for (j=0; j<num_aa; j++)
			exp_edge_mass+=aa2mass[v_ptr[j]];

		if (c_aa == Ile || c_aa == Xle)
			c_aa = Leu;

		info->c_aa = c_aa;
		info->cc_aa = v_ptr[num_aa-1];

		if (info->cc_aa == Ile || info->cc_aa == Xle)
			info->cc_aa = Leu;

		info->c_break = c_edge.c_break;
		info->exp_c_edge_mass = exp_edge_mass;
		info->c_edge_is_single = (num_aa ==1);

		int c_second_after_cut=NEG_INF;
		if (! info->c_edge_is_single)
			c_second_after_cut = v_ptr[1];
		if (c_second_after_cut == Ile || c_second_after_cut == Xle)
			c_second_after_cut = Leu;

		if (c_node.type == NODE_C_TERM)
		{
			info->connects_to_C_term=true;
			int j;
			for (j=0; j<c_term_digest_aas.size(); j++)
				if (c_term_digest_aas[j] == v_ptr[num_aa-1])
				{
					info->preferred_digest_aa_C_term=true;
					break;
				}
		}

		for (j=0; j<n_term_digest_aas.size(); j++)
			if (n_term_digest_aas[j] == v_ptr[0])
			{
				info->missed_cleavage= true;
				break;
			}

		info->ind_c_edge_overlaps = (c_edge.ind_edge_overlaps);
		info->c_side_cat = model->get_aa_category(num_aa,v_ptr,false,info->connects_to_C_term);
		if (n_edge_idx>=0)
		{
			int aas[2]={info->n_aa,info->c_aa};
			info->span_cat = model->get_aa_category(2,aas,info->connects_to_N_term && info->n_edge_is_single,info->connects_to_C_term && info->c_edge_is_single);
			
			if (! info->n_edge_is_single)
			{
				if (n_second_before_cut<0)
				{

⌨️ 快捷键说明

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