示例#1
0
文件: Exon.cpp 项目: pjuren/radX
/**
 * \brief TODO
 */
bool
Exon::sameRegion(const GenomicRegion &r) const {
  return ((r.get_chrom() == this->region.get_chrom()) &&
          (r.get_start() == this->region.get_start()) &&
          (r.get_end() == this->region.get_end()) &&
          (r.get_strand() == this->region.get_strand()));
}
示例#2
0
void
merge(istream &cpg_stream, ostream &dmr_stream, double cutoff) {

  bool skipped_last_cpg, sig_raw;
  GenomicRegion dmr;
  dmr.set_name("dmr");
  size_t dmr_test_cov = 0; size_t dmr_test_meth = 0;
  size_t dmr_rest_cov = 0; size_t dmr_rest_meth = 0;
  size_t test_cov = 0; size_t test_meth = 0;
  size_t rest_cov = 0; size_t rest_meth = 0;

  // Find the first significant CpG, or terminate the function if none exist.
  if (!read_next_significant_cpg(cpg_stream, dmr, cutoff, skipped_last_cpg,
                            sig_raw, test_cov, test_meth, rest_cov, rest_meth))
    return;

  dmr.set_score(sig_raw);
  dmr_test_cov += test_cov;
  dmr_test_meth += test_meth;
  dmr_rest_cov += rest_cov;
  dmr_rest_meth += rest_meth;

  GenomicRegion cpg;
  cpg.set_name("dmr");

  while(read_next_significant_cpg(cpg_stream, cpg, cutoff, skipped_last_cpg,
                          sig_raw, test_cov, test_meth, rest_cov, rest_meth)) {

    if (skipped_last_cpg || cpg.get_chrom() != dmr.get_chrom()) {
      if (dmr.get_score() != 0)
        dmr_stream << dmr.get_chrom() << '\t'
                   << dmr.get_start() << '\t'
                   << dmr.get_end()   << '\t'
                   << dmr.get_name()  << '\t'
                   << dmr.get_score() << '\t'
                   << double(dmr_test_meth)/dmr_test_cov -
                      double(dmr_rest_meth)/dmr_rest_cov << std::endl;
      dmr = cpg;
      dmr.set_score(sig_raw);
      dmr_test_cov = test_cov;
      dmr_test_meth = test_meth;
      dmr_rest_cov = rest_cov;
      dmr_rest_meth = rest_meth;
    } else {
      dmr.set_end(cpg.get_end());
      dmr.set_score(dmr.get_score() + sig_raw);
      dmr_test_cov += test_cov;
      dmr_test_meth += test_meth;
      dmr_rest_cov += rest_cov;
      dmr_rest_meth += rest_meth;
    }
  }

  dmr_stream << dmr << std::endl;
}
示例#3
0
文件: Exon.cpp 项目: pjuren/radX
/**
 * \brief Does this exon partially overlap the given genomic region? This
 *        function doesn't consider an exact region match (i.e. same chrom,
 *        start, end, and strand) to be a 'partial overlap'.
 */
bool
Exon::partialOverlap(const GenomicRegion &r) const {
  if (r.get_chrom() != this->region.get_chrom()) return false;
  if (r.get_strand() != this->region.get_strand()) return false;
  // by now they must be one the same chromosome and strand... first see if
  // they match exactly
  if ((r.get_start() == this->region.get_start()) &&
      (r.get_end() == this->region.get_end())) return false;
  // not an exact match
  return (r.overlaps(this->region));
}
示例#4
0
static void
convert_coordinates(const unordered_map<size_t, size_t> &cpgs,
                    GenomicRegion &region)  {
  const unordered_map<size_t, size_t>::const_iterator
    start_itr(cpgs.find(region.get_start()));
  const unordered_map<size_t, size_t>::const_iterator
    end_itr(cpgs.find(region.get_end()));
  if (start_itr == cpgs.end() || end_itr == cpgs.end())
    throw runtime_error("could not convert:\n" + region.tostring());
  region.set_start(start_itr->second);
  region.set_end(end_itr->second);
}
示例#5
0
文件: pmd.cpp 项目: sarahsma/methpipe
static bool
precedes(const string &chrom, const size_t position, 
	 const GenomicRegion &r) {
  return chrom < r.get_chrom() ||
    (chrom == r.get_chrom() && position < r.get_start());
}
示例#6
0
static inline bool
start_leq(const GenomicRegion &a, const GenomicRegion &b) {
  return a.get_start() <= b.get_start();
}