Skip to content

Instantly share code, notes, and snippets.

@si14
Created August 15, 2014 15:54
Show Gist options
  • Save si14/1c4a9d3831d6538d1f01 to your computer and use it in GitHub Desktop.
Save si14/1c4a9d3831d6538d1f01 to your computer and use it in GitHub Desktop.
StreamUtil.zippingStream(WigParser.newParser().parse(sourcePaths[0]),
WigParser.newParser().parse(sourcePaths[1]),
StreamUtil.ZipPair::create)
.peek(StreamUtil.equalityForBoth(wigPair -> wigPair.first,
"wig files should have same structure"))
.filter(StreamUtil.predicateForBoth(wigPair -> {
final Chromosome chromosome = chromosomeMap.get(wigPair.first);
return chromosome != null && !chromosome.isMitochondrialChromosome();
}))
.forEach(StreamUtil.consumerForEach((pairLevel, pairCoverage) -> {
final Chromosome chromosome = chromosomeMap.get(pairLevel.first);
StreamUtil.zippingStream(pairLevel.second.getRanges(),
pairCoverage.second.getRanges(),
StreamUtil.ZipPair::create)
.peek(StreamUtil.equalityForBoth(ScoredRange::getStartOffset,
"offsets should be equal for level and coverage"))
.forEach(StreamUtil.consumerForEach((rangeLevel, rangeCoverage) -> {
final double level = rangeLevel.getScore();
final double coverage = rangeCoverage.getScore();
final int offset = rangeLevel.getStartOffset();
methylome.add(chromosome, Strand.PLUS,
new CoveredNucleotideInfo(offset, MethylationPattern.CG,
(short) (level / 100 * coverage),
(short) coverage));
}));
}));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment