// initialize sampleDB
initializeSampleDB();
// our microscheduler, which is in charge of running everything
MicroScheduler microScheduler = createMicroscheduler();
threadEfficiencyMonitor = microScheduler.getThreadEfficiencyMonitor();
// create temp directories as necessary
initializeTempDirectory();
// create the output streams
initializeOutputStreams(microScheduler.getOutputTracker());
// Initializing the shard iterator / BAM schedule might take some time, so let the user know vaguely what's going on
logger.info("Preparing for traversal" +
(readsDataSource.getReaderIDs().size() > 0 ? String.format(" over %d BAM files", readsDataSource.getReaderIDs().size()) : ""));
Iterable<Shard> shardStrategy = getShardStrategy(readsDataSource,microScheduler.getReference(),intervals);
logger.info("Done preparing for traversal");
// execute the microscheduler, storing the results
return microScheduler.execute(this.walker, shardStrategy);
//monitor.stop();
//logger.info(String.format("Maximum heap size consumed: %d",monitor.getMaxMemoryUsed()));
//return result;