示例#1
0
    double run() {
      Setup(lattice).setup();
      Solver solver(lattice);

      TimeTracker tt;
      tt.start();
      solver.run();
      tt.stop();

      return tt.elapsedSeconds();

    }
示例#2
0
// Very simple
void greedy() {

  TimeTracker tt;

  tt.start();

  // Could be optimized a LOT
  bool changed;
  do{
    changed = false;
    for(node_ptr n = lattice.begin(); n != lattice.end(); ++n) {
      if(n->gain > 0) {
	flipNode<3>(n);
	changed = true;
      }
    }
  }while(changed);

  tt.stop();

  cout << "Greedy finished in " << tt.asString() << "." << endl;
}
示例#3
0
template <int nd, typename Kernel> void run_benchmark(char mode, size_t edge_size, size_t random_seed) {

  typedef typename Indexer<nd>::index_vect index_vect;
  
  vector<dtype> X;

  ImageOptions opt;

  construct_random_bitmap<nd>(X, edge_size, opt, 10000 + random_seed);

  index_vect dimensions(edge_size); 

  // Now run it...
  TimeTracker tt;

  tt.start();
  _LatticeEnergy<nd, Kernel, dtype> le_qbp(dimensions);
  GraphCutEnergyWrapper<nd> le_gc(dimensions);

  make<nd>(&le_qbp, &le_gc, mode, opt, X, edge_size);

  tt.stop();

  cout << "Time taken in setup = " << tt.asString() << "." << endl;


  cout << "Starting LatticeEnergy version." << endl;
  tt.reset();
  tt.start();
  le_qbp.run();
  tt.stop();
  cout << "Time taken in QBP optimization = " << tt.asString() << "." << endl;

  cout << "Starting GraphCuts version." << endl;
  tt.reset();
  tt.start();
  le_gc.run();
  tt.stop();
  cout << "Time taken in GC optimization = " << tt.asString() << "." << endl;

  size_t n_pos = 0;
  size_t n_neg = 0;
  size_t fpos_mismatch_count = 0;
  size_t fneg_mismatch_count = 0;
  
  for(IndexIterator<nd> idxit(dimensions); !idxit.done(); ++idxit) {
    bool q_on  = le_qbp.on(idxit.coords());
    bool gc_on = le_gc.on(idxit.coords());

    if(!q_on && gc_on)
      ++fneg_mismatch_count;

    if(q_on && !gc_on)
      ++fpos_mismatch_count;

    ++(q_on ? n_pos : n_neg);
  }
  
  if( (fneg_mismatch_count + fpos_mismatch_count) != 0) {
    cout << "WARNING: mismatch count between QBP and GC is " 
	 << (fneg_mismatch_count + fpos_mismatch_count) 
	 << " (false negatives = " << fneg_mismatch_count
	 << ", false positives = " << fpos_mismatch_count 
	 << ", total negatives = " << n_neg
	 << ", total positives = " << n_pos
	 << ")"
	 << "!" << endl;
  } else {
    cout << "Solutions exactly match." << endl;
  }
}
示例#4
0
static
void
runESL(const ESLOptions& opt)
{
    TimeTracker timer;
    timer.resume();
    {
        // early test that we have permission to write to output file
        OutStream outs(opt.outputFilename);
    }

    typedef std::shared_ptr<bam_streamer> stream_ptr;
    std::vector<stream_ptr> bamStreams;

    // setup all data for main alignment loop:
    for (const std::string& afile : opt.alignFileOpt.alignmentFilename)
    {
        stream_ptr tmp(new bam_streamer(afile.c_str(),
                                        (opt.region.empty()
                                         ? NULL
                                         : opt.region.c_str())));
        bamStreams.push_back(tmp);
    }

    const unsigned bamCount(bamStreams.size());

    assert(0 != bamCount);

    // check bam header compatibility:
    if (bamCount > 1)
    {
        /// TODO: provide a better error exception for failed bam header check:
        const bam_header_t* compareHeader(bamStreams[0]->get_header());
        for (unsigned bamIndex(1); bamIndex<bamCount; ++bamIndex)
        {
            const bam_header_t* indexHeader(bamStreams[bamIndex]->get_header());
            if (! check_header_compatibility(compareHeader,indexHeader))
            {
                log_os << "ERROR: incompatible bam headers between files:\n"
                       << "\t" << opt.alignFileOpt.alignmentFilename[0] << "\n"
                       << "\t" << opt.alignFileOpt.alignmentFilename[bamIndex] << "\n";
                exit(EXIT_FAILURE);
            }
        }
    }

    // assume headers compatible after this point....

    const bam_header_t& header(*(bamStreams[0]->get_header()));
    const bam_header_info bamHeader(header);

    int32_t tid(0), beginPos(0), endPos(0);
    parse_bam_region(bamHeader,opt.region,tid,beginPos,endPos);

    const GenomeInterval scanRegion(tid,beginPos,endPos);
#ifdef DEBUG_ESL
    static const std::string log_tag("EstimateSVLoci");
    log_os << log_tag << " scanRegion= " << scanRegion << "\n";
#endif

    // grab the reference for segment we're estimating plus a buffer around the segment edges:
    static const unsigned refEdgeBufferSize(500);

    reference_contig_segment refSegment;
    getIntervalReferenceSegment(opt.referenceFilename, bamHeader, refEdgeBufferSize, scanRegion, refSegment);

    SVLocusSetFinder locusFinder(opt, scanRegion, bamHeader, refSegment);

    input_stream_data sdata;
    for (unsigned bamIndex(0); bamIndex<bamCount; ++bamIndex)
    {
        sdata.register_reads(*bamStreams[bamIndex],bamIndex);
    }

    // loop through alignments:
    input_stream_handler sinput(sdata);
    while (sinput.next())
    {
        const input_record_info current(sinput.get_current());

        if (current.itype != INPUT_TYPE::READ)
        {
            log_os << "ERROR: invalid input condition.\n";
            exit(EXIT_FAILURE);
        }

        const bam_streamer& readStream(*bamStreams[current.sample_no]);
        const bam_record& read(*(readStream.get_record_ptr()));

        locusFinder.update(read, current.sample_no);
    }

    // finished updating:
    locusFinder.flush();
    timer.stop();
    const CpuTimes totalTimes(timer.getTimes());
#ifdef DEBUG_ESL
    log_os << log_tag << " found " << locusFinder.getLocusSet().size() << " loci. \n";
    log_os << log_tag << " totalTime: ";
    totalTimes.reportHr(log_os);
    log_os << "\n";
#endif
    locusFinder.setBuildTime(totalTimes);
    locusFinder.getLocusSet().save(opt.outputFilename.c_str());
}