Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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;
}