public static InsertSizeMetrics getInsertSizeMetrics(File insertSizeMetricsFile, boolean singleEndExpected) { InsertSizeMetrics bestMetrics = null; if (insertSizeMetricsFile != null && insertSizeMetricsFile.exists()) { for (InsertSizeMetrics metric : Iterables.filter(MetricsFile.readBeans(insertSizeMetricsFile), InsertSizeMetrics.class)) { if (metric.SAMPLE == null && metric.LIBRARY == null && metric.READ_GROUP == null) { if (bestMetrics == null || bestMetrics.READ_PAIRS < metric.READ_PAIRS) { bestMetrics = metric; } } } } if (!singleEndExpected && bestMetrics == null) { log.info(String.format("No pair-end insert size metrics found in %s. Assuming this library contains single-end reads", insertSizeMetricsFile)); } return bestMetrics; } public static MapqMetrics getMapqMetrics(File mapqMetricsFile) {
private static IdsvMetrics getIdsvMetrics(File idsvMetricsFiles) { IdsvMetrics metric = Iterators.getOnlyElement(Iterables.filter(MetricsFile.readBeans(idsvMetricsFiles), IdsvMetrics.class).iterator(), null); if (metric == null) { metric = new IdsvMetrics(); log.error(String.format("No idsv metrics found in %s.", idsvMetricsFiles)); } return metric; } public static InsertSizeMetrics getInsertSizeMetrics(File insertSizeMetricsFile, boolean singleEndExpected) {
private static List<CigarDetailMetrics> getCigarMetrics(File cigarMetricsFile) { if (cigarMetricsFile == null) return null; List<CigarDetailMetrics> list = new ArrayList<CigarDetailMetrics>(); for (CigarDetailMetrics metric : Iterables.filter(MetricsFile.readBeans(cigarMetricsFile), CigarDetailMetrics.class)) { list.add(metric); } Collections.sort(list, CigarDetailMetricsByLength); for (CigarOperator op : CigarOperator.values()) { List<CigarDetailMetrics> opList = list.stream().filter(cdm -> cdm.OPERATOR == CigarOperator.enumToCharacter(op)).collect(Collectors.toList()); for (int i = 0; i < opList.size(); i++) { if (opList.get(i).LENGTH != i) { String msg = String.format("%s missing cigar metric: expected metric for length %d, found %d", cigarMetricsFile, i, opList.get(0).LENGTH); log.error(msg); throw new RuntimeException(msg); } } } return list; } public InsertSizeDistribution getInsertSizeDistribution() {
public static MapqMetrics getMapqMetrics(File mapqMetricsFile) { if (mapqMetricsFile == null) return null; MapqMetrics bestMetrics = null; for (MapqMetrics metric : Iterables.filter(MetricsFile.readBeans(mapqMetricsFile), MapqMetrics.class)) { if (metric.SAMPLE == null && metric.LIBRARY == null && metric.READ_GROUP == null) { if (bestMetrics == null || bestMetrics.MAPPED_READS < metric.MAPPED_READS) { bestMetrics = metric; } } } if (bestMetrics == null) { bestMetrics = new MapqMetrics(); log.error(String.format("No mapq metrics found in %s.", mapqMetricsFile)); } return bestMetrics; } public IdsvSamFileMetrics(InsertSizeMetrics insertSize, IdsvMetrics idsvMetrics, MapqMetrics mapqMetrics, InsertSizeDistribution insertDistribution, List<CigarDetailMetrics> cigarDetailMetrics) {
private void examineMetricsFile(final File output, final int numDuplicates, final int numReadPairsExamined) { final List<DuplicationMetrics> metricsList = MetricsFile.readBeans(output); Assert.assertEquals(metricsList.size(), 1); final DuplicationMetrics metrics = metricsList.get(0); Assert.assertEquals(metrics.READ_PAIR_DUPLICATES * 2 + metrics.UNPAIRED_READ_DUPLICATES, numDuplicates); Assert.assertEquals(metrics.READ_PAIRS_EXAMINED, numReadPairsExamined); }
public StructuralVariantReadMetrics getSVMetrics() { File svMetricsFile = getContext().getFileSystemContext().getSVMetrics(getFile()); if (svMetrics == null && svMetricsFile.exists()) { for (StructuralVariantReadMetrics metric : Iterables.filter(MetricsFile.readBeans(svMetricsFile), StructuralVariantReadMetrics.class)) { if (metric.SAMPLE == null && metric.LIBRARY == null && metric.READ_GROUP == null) { svMetrics = metric; break; } } } return svMetrics; }
@Test(dataProvider = "OneCovariateErrorMetricsDataProvider") public void testOneCovariateErrorMetrics(final String errorSubscript, final File samFile, final int priorQ, BaseErrorMetric expectedMetric) { final File referenceFile = new File(TEST_DIR, "chrM.reference.fasta"); final File vcf = new File(TEST_DIR, "NIST.selected.vcf"); final File outputBaseFileName = new File(OUTPUT_DATA_PATH, "test"); final File errorByAll = new File(outputBaseFileName.getAbsolutePath() + errorSubscript); errorByAll.deleteOnExit(); outputBaseFileName.deleteOnExit(); final String[] args = { "INPUT=" + samFile, "OUTPUT=" + outputBaseFileName, "REFERENCE_SEQUENCE=" + referenceFile.getAbsolutePath(), "ERROR_METRICS=" + "ERROR:TWO_BASE_PADDED_CONTEXT", // Not all covariates are included by default, but we still want to test them. "ERROR_METRICS=" + "ERROR:CONSENSUS", "ERROR_METRICS=" + "ERROR:NS_IN_READ", "ERROR_METRICS=" + "ERROR:BINNED_CYCLE", "VCF=" + vcf.getAbsolutePath() }; Assert.assertEquals(new CollectSamErrorMetrics().instanceMain(args), 0); ErrorMetric.setPriorError(QualityUtil.getErrorProbabilityFromPhredScore(priorQ)); expectedMetric.calculateDerivedFields(); // Note that soft clipped bases are not counted List<BaseErrorMetric> metrics = MetricsFile.readBeans(errorByAll); BaseErrorMetric metric = metrics .stream() .filter(m -> m.COVARIATE.equals(expectedMetric.COVARIATE)) .findAny() .orElseThrow(() -> new AssertionError("didn't find metric with COVARIATE==" + expectedMetric.COVARIATE)); Assert.assertEquals(metric, expectedMetric); }