static void print_hashstats(famstats_t *stats, FILE *fp) { std::vector<fm_t> fms(kh_size(stats->fm)); unsigned i; khiter_t ki; fprintf(fp, "#Family size\tNumber of families\n"); for(i = 0, ki = kh_begin(stats->fm); ki != kh_end(stats->fm); ++ki) if(kh_exist(stats->fm, ki)) fms[i++] = {kh_val(stats->fm, ki), kh_key(stats->fm, ki)}; std::sort(fms.begin(), fms.end(), [](const fm_t a, const fm_t b){ return a.fm < b.fm; }); for(i = 0; i < stats->fm->n_occupied; ++i) fprintf(fp, "%" PRIu64 "\t%" PRIu64 "\n", fms[i].fm, fms[i].n); fms.resize(stats->rc->n_occupied); for(i = 0, ki = kh_begin(stats->rc); ki != kh_end(stats->rc); ++ki) if(kh_exist(stats->rc, ki)) fms[i++] = {kh_val(stats->rc, ki), kh_key(stats->rc, ki)}; std::sort(fms.begin(), fms.end(), [](const fm_t a, const fm_t b){ return a.fm < b.fm; }); if(fms[0].fm != (uint64_t)-1) { fprintf(fp, "#RV'd in family\tNumber of families\n"); for(i = 0; i < stats->rc->n_occupied; ++i) fprintf(fp, "%" PRIu64 "\t%" PRIu64 "\n", fms[i].fm, fms[i].n); } // Handle stats->np fms.resize(stats->np->n_occupied); size_t n_rsq_fams(0); for(i = 0, ki = kh_begin(stats->np); ki != kh_end(stats->np); ++ki) { if(kh_exist(stats->np, ki)) { fms[i++] = {kh_val(stats->np, ki), kh_key(stats->np, ki)}; n_rsq_fams += kh_val(stats->np, ki); } } std::sort(fms.begin(), fms.end(), [](const fm_t a, const fm_t b){ return a.fm < b.fm; }); fprintf(fp, "#Number of families that were rescued: %lu\n", n_rsq_fams); fputs("#Number of pre-rescue reads in rescued\tNumber of families\n", fp); for(i = 0; i < stats->np->n_occupied; ++i) fprintf(fp, "%" PRIu64 "\t%" PRIu64 "\n", fms[i].fm, fms[i].n); }
void DOWHAM::WhamStep(std::vector<float> &step) { /* void sgemv(char trans, int m, int n, float alpha, float *a, int lda, float *x, int incx, float beta, float *y, int incy) */ const char trans = 'N'; const float fone = 1; const int ione = 1; #ifdef _OPENMP omp_set_num_threads(omp_get_max_threads()); #endif std::vector<float> fms(nexperiments,0); int vsize = wham_args.nstates; std::vector<float> Momegas_times_trajectory(wham_args.nstates,0); sgemv_(&trans,&nexperiments,&vsize,&fone,&c_major_omega[0],&nexperiments,&step[0],&ione,&fone,&Momegas_times_trajectory[0],&ione); //sgemv('N',nexperiments,vsize,1,&c_major_omega[0],nexperiments,&step[0],1,1,&Momegas_times_trajectory[0],1); for (int i=0; i<nexperiments; i++) { fms[i] = wham_args.sample[i] / Momegas_times_trajectory[i]; } vsize = nexperiments; std::vector<float> MomegasT_times_fms(wham_args.nstates,0); sgemv_(&trans,&wham_args.nstates,&vsize,&fone,&c_major_omega_transpose[0],&wham_args.nstates,&fms[0],&ione,&fone,&MomegasT_times_fms[0],&ione); //sgemv('N',wham_args.nstates,vsize,1,&c_major_omega_transpose[0],wham_args.nstates,&fms[0],1,1,&MomegasT_times_fms[0],1); for (int i=0; i<wham_args.nstates; i++) { step[i] = wham_args.counts[i] / MomegasT_times_fms[i]; } vec_normalize(step); return; }