static void gthinitfragments(GtFragment *fragments, GtUword *num_of_fragments, GthMatch *storematchtab, GtUword numofmatches, GtUword rare, double fragweightfactor) { GthMatch *mptr; GtFragment *fragmentptr; GtWord tmp, largestdim1 = 0, largestdim2 = 0; GtDiscDistri *startpointdistri = NULL; /* init number of fragments */ *num_of_fragments = 0; if (rare) startpointdistri = gt_disc_distri_new(); for (mptr = storematchtab; mptr < storematchtab + numofmatches; mptr++) { /* first dimension */ tmp = mptr->Storepositionreference + mptr->Storelengthreference - 1; if (largestdim1 < tmp) largestdim1 = tmp; /* second dimension */ tmp = mptr->Storepositiongenomic + mptr->Storelengthgenomic - 1; if (largestdim2 < tmp) largestdim2 = tmp; } for (mptr = storematchtab, fragmentptr = fragments; mptr < storematchtab + numofmatches; mptr++) { if (rare) gt_disc_distri_add(startpointdistri, mptr->Storepositionreference); if ((!rare || gt_disc_distri_get(startpointdistri, mptr->Storepositionreference) <= rare) && (mptr == storematchtab || /* is the first match */ !gth_matches_are_equal(mptr, mptr-1))) { /* or is different from last one */ fragmentptr->weight = (GtWord) (fragweightfactor * (double) abs(mptr->Storescore)); fragmentptr->startpos1 = mptr->Storepositionreference; fragmentptr->endpos1 = mptr->Storepositionreference + mptr->Storelengthreference - 1; fragmentptr->startpos2 = mptr->Storepositiongenomic; fragmentptr->endpos2 = mptr->Storepositiongenomic + mptr->Storelengthgenomic - 1; fragmentptr++; (*num_of_fragments)++; } } gt_disc_distri_delete(startpointdistri); gt_assert(*num_of_fragments <= numofmatches); }
void gt_bioseq_show_seqlengthdistri(GtBioseq *bs, GtFile *outfp) { GtDiscDistri *d; GtUword i; gt_assert(bs); d = gt_disc_distri_new(); for (i = 0; i < gt_bioseq_number_of_sequences(bs); i++) gt_disc_distri_add(d, gt_bioseq_get_sequence_length(bs, i)); gt_file_xprintf(outfp, "sequence length distribution:\n"); gt_disc_distri_show(d, outfp); gt_disc_distri_delete(d); }
void gt_Outlcpinfo_delete(GtOutlcpinfo *outlcpinfo) { if (outlcpinfo == NULL) { return; } gt_turningwheel_delete(outlcpinfo->turnwheel); if (outlcpinfo->lcpsubtab.lcp2file != NULL) { if (!outlcpinfo->swallow_tail_lcpvalues && outlcpinfo->lcpsubtab.lcp2file->countoutputlcpvalues < outlcpinfo->numsuffixes2output) { outlcpinfo->lcpsubtab.lcp2file->countoutputlcpvalues += outmany0lcpvalues(outlcpinfo->numsuffixes2output - outlcpinfo->lcpsubtab.lcp2file ->countoutputlcpvalues, outlcpinfo->lcpsubtab.lcp2file->outfplcptab); } gt_assert(outlcpinfo->swallow_tail_lcpvalues || outlcpinfo->lcpsubtab.lcp2file->countoutputlcpvalues == outlcpinfo->numsuffixes2output); GT_FREEARRAY(&outlcpinfo->lcpsubtab.lcp2file->largelcpvalues, Largelcpvalue); gt_fa_fclose(outlcpinfo->lcpsubtab.lcp2file->outfplcptab); gt_fa_fclose(outlcpinfo->lcpsubtab.lcp2file->outfpllvtab); gt_free(outlcpinfo->lcpsubtab.lcp2file->reservoir); outlcpinfo->lcpsubtab.lcp2file->smalllcpvalues = NULL; outlcpinfo->lcpsubtab.lcp2file->reservoir = NULL; outlcpinfo->lcpsubtab.lcp2file->sizereservoir = 0; gt_free(outlcpinfo->lcpsubtab.lcp2file); } else { gt_free(outlcpinfo->lcpsubtab.tableoflcpvalues.bucketoflcpvalues); #ifndef NDEBUG gt_free(outlcpinfo->lcpsubtab.tableoflcpvalues.isset); #endif } gt_free(outlcpinfo->lcpsubtab.lcpprocess); outlcpinfo->lcpsubtab.tableoflcpvalues.bucketoflcpvalues = NULL; #ifndef NDEBUG outlcpinfo->lcpsubtab.tableoflcpvalues.isset = NULL; #endif outlcpinfo->lcpsubtab.tableoflcpvalues.numofentries = 0; if (outlcpinfo->lcpsubtab.distlcpvalues != NULL) { gt_disc_distri_show(outlcpinfo->lcpsubtab.distlcpvalues,NULL); gt_disc_distri_delete(outlcpinfo->lcpsubtab.distlcpvalues); } gt_free(outlcpinfo); }
void gth_stat_delete(GthStat *stat) { if (!stat) return; gt_disc_distri_delete(stat->exondistribution); gt_disc_distri_delete(stat->introndistribution); gt_disc_distri_delete(stat->matchnumdistribution); gt_disc_distri_delete(stat->refseqcoveragedistribution); gt_disc_distri_delete(stat->sa_alignment_score_distribution); gt_disc_distri_delete(stat->sa_coverage_distribution); gt_free(stat); }
static void stat_visitor_free(GtNodeVisitor *nv) { GtStatVisitor *sv = stat_visitor_cast(nv); gt_cstr_table_delete(sv->used_sources); gt_disc_distri_delete(sv->cds_length_distribution); gt_disc_distri_delete(sv->intron_length_distribution); gt_disc_distri_delete(sv->exon_number_distribution); gt_disc_distri_delete(sv->exon_length_distribution); gt_disc_distri_delete(sv->gene_score_distribution); gt_disc_distri_delete(sv->gene_length_distribution); }
static inline GtDiscDistri *read_zero_disc_distri(GtDiscDistri *dist, FILE *fp, GtError *err) { int had_err = 0; GtUword idx, symbol; GtUint64 freq; GtUword num_of_zero_leaves; dist = gt_disc_distri_new(); had_err = gt_io_error_fread_one(num_of_zero_leaves, fp, err); for (idx = 0; !had_err && idx < num_of_zero_leaves; idx++) { had_err = gt_io_error_fread_one(symbol, fp, err); if (!had_err) had_err = gt_io_error_fread_one(freq, fp, err); if (!had_err) gt_disc_distri_add_multi(dist, symbol, freq); } if (had_err) { gt_disc_distri_delete(dist); dist = NULL; } return dist; }
int gt_disc_distri_unit_test(GtError *err) { GtDiscDistri *d; int had_err = 0; gt_error_check(err); d = gt_disc_distri_new(); ensure(had_err, gt_disc_distri_get(d, 0) == 0); ensure(had_err, gt_disc_distri_get(d, 100) == 0); if (!had_err) { gt_disc_distri_add(d, 0); gt_disc_distri_add_multi(d, 100, 256); } ensure(had_err, gt_disc_distri_get(d, 0) == 1); ensure(had_err, gt_disc_distri_get(d, 100) == 256); gt_disc_distri_delete(d); return had_err; }
static inline GtDiscDistri *write_zero_disc_distri(GtDiscDistri *dist, EncsecDistriData *data, GtError *err) { GtUword num_of_zero_leaves; data->written_elems = 0; data->err = err; data->had_err = 0; gt_disc_distri_foreach(dist, encdesc_distri_iter_count, data); if (!data->had_err) { num_of_zero_leaves = data->written_elems; } data->had_err = gt_io_error_fwrite_one(num_of_zero_leaves, data->fp, err); if (!data->had_err) { data->written_elems = 0; gt_disc_distri_foreach(dist, encdesc_distri_iter_write, data); gt_assert(data->written_elems == num_of_zero_leaves); } if (data->had_err) { gt_disc_distri_delete(dist); dist = NULL; } return dist; }