Esempio n. 1
0
inline Vector speed_test(
	void test(size_t size, size_t repeat),
	const Vector& size_vec               ,
	double time_min                      )
{
	// check that size_vec is a simple vector with size_t elements
	CheckSimpleVector<size_t, Vector>();

	size_t   n = size_vec.size();
	Vector rate_vec(n);
	size_t i;
	for(i = 0; i < n; i++)
	{	size_t size   = size_vec[i];
		size_t repeat = 1;
		double s0     = elapsed_seconds();
		double s1     = elapsed_seconds();
		while( s1 - s0 < time_min )
		{	repeat = 2 * repeat;
			s0     = elapsed_seconds();
			test(size, repeat);
			s1     = elapsed_seconds();
		}
		rate_vec[i] = (size_t)(.5 + repeat / (s1 - s0));
	}
	return rate_vec;
}
Esempio n. 2
0
bool speed_test(void)
{	bool ok = true;

	// size of the test cases
	vector<size_t> size_vec(2);
	size_vec[0] = 40;
	size_vec[1] = 80;

	// minimum amount of time to run test
	double time_min = 0.5;

	// run the test cases
	vector<size_t> rate_vec(2);
	rate_vec = CppAD::speed_test(test, size_vec, time_min);

	// time per repeat loop (note counting setup or teardown)
	double time_0 = 1. / double(rate_vec[0]);
	double time_1 = 1. / double(rate_vec[1]);

	// for this case, time should be linear w.r.t size
	double check    = double(size_vec[1]) * time_0 / double(size_vec[0]);
	double rel_diff = (check - time_1) / time_1;
	ok             &= (std::fabs(rel_diff) <= .1);
	if( ! ok )
		std::cout << std::endl << "rel_diff = " << rel_diff << std::endl;

	a.clear();
	b.clear();
	c.clear();
	return ok;
}
Esempio n. 3
0
vector<double> ribo_model::build_rate_vec(rid_t t)
{
  vector<double> rate_vec(codon_vec_len(t),0);
  // build elongation rate vector
  for (size_t i=0; i!=rate_vec.size(); ++i)
    rate_vec[i] = get_erate(model[t].codon_id_map[i]);
  // insert initiation rate at the beginning of rate vector
  rate_vec.insert(rate_vec.begin(), get_irate(t));
  return rate_vec;
}
Esempio n. 4
0
void ribo_model::update_profile(const ribo_profile& rprofile, bool ignore_no_map, int nproc)
{
  omp_set_num_threads(nproc);
  #pragma omp parallel for schedule(static)
  for (size_t t=0; t<rprofile.number_of_transcripts(); ++t) {
    if (ignore_no_map and rprofile.get_tot_count(t) == 0) continue;
    tmodel& m = get_model_ref(t);
    if (get_obj(t)<0) continue;
    vector<double> rate_vec(build_rate_vec(t));
    double trate = compute_profile(rate_vec, m.profile);
    if (trate>0)
      set_trate(t, trate);
    else
      compute_translation_rate(t, rate_vec);
    compute_transcript_abundance(t, rprofile.get_read_assignments(t));
  }
}