import org.biojava.bio.seq.Sequence; //导入方法依赖的package包/类
@Override
public Integer call() throws Exception {
PrintWriter writer = null;
try {
writer = writer(evalFile);
Sequence reference = readReference();
List scaffolds = readScaffolds();
writer.println("#reference length = " + reference.length());
writer.println("#scaffold count = " + scaffolds.size());
writer.println("#scaffold lengths = " + dumpLengths(scaffolds));
RangeSet ranges = TreeRangeSet.create();
for (HighScoringPair hsp : blastn(referenceFastaFile, scaffoldsFastaFile)) {
if (reference.getName().equals(hsp.target())) {
writer.println("#" + hsp.toString());
if (hsp.targetStart() <= hsp.targetEnd()) { // strands match
ranges.add(Range.closed(hsp.targetStart(), hsp.targetEnd()));
}
else {
ranges.add(Range.closed(hsp.targetEnd(), hsp.targetStart()));
}
}
}
writer.println("#coalesced intervals = " + ranges);
long breadthOfCoverage = 0;
for (Range range : ranges.asRanges()) {
breadthOfCoverage += ContiguousSet.create(range, DiscreteDomain.longs()).size();
}
double normalizedBreadthOfCoverage = (double) breadthOfCoverage / (double) reference.length();
writer.println("#breadth-of-coverage = " + breadthOfCoverage);
writer.println("#normalized breadth-of-coverage = " + normalizedBreadthOfCoverage);
StringBuilder sb = new StringBuilder();
sb.append(referenceFastaFile.getName());
sb.append("\t");
sb.append(scaffoldsFastaFile.getName());
sb.append("\t");
sb.append(reference.length());
sb.append("\t");
sb.append(scaffolds.size());
sb.append("\t");
sb.append(ranges.asRanges().size());
sb.append("\t");
sb.append(breadthOfCoverage);
sb.append("\t");
sb.append(normalizedBreadthOfCoverage);
sb.append("\t");
writer.println(sb.toString());
return 0;
}
finally {
try {
writer.close();
}
catch (Exception e) {
// ignore
}
}
}