/** * Does all annotations for the workflow. * * @param parents * @return */ private List<Job> doAnnotations(Job... parents) { List<Job> finalAnnotatorJobs = new ArrayList<Job>(); Predicate<String> isExtractedSNV = p -> p.contains("extracted-snv") && p.endsWith(".vcf.gz"); final String passFilteredOxoGSuffix = ".pass-filtered.oxoG.vcf.gz"; // list filtering should only ever produce one result. for (int i = 0; i < this.tumours.size(); i++) { TumourInfo tInf = this.tumours.get(i); String tumourAliquotID = tInf.getAliquotID(); PcawgAnnotatorJobGenerator generator = new PcawgAnnotatorJobGenerator( this.JSONlocation, this.JSONrepoName, this.JSONfolderName, this.JSONfileName); generator.setGitMoveTestMode(this.gitMoveTestMode); generator.setAllowMissingFiles(this.allowMissingFiles); generator.setBroadOxogSNVFileName( this.filesForUpload .stream() .filter( p -> ((p.contains(tumourAliquotID) && p.contains("broad-mutect") && p.endsWith(passFilteredOxoGSuffix)))) .findFirst() .orElseGet(emptyStringWhenMissingFilesAllowed)); generator.setBroadOxoGSNVFromIndelFileName( this.filesForUpload .stream() .filter(p -> (p.contains(Pipeline.broad.toString()) && isExtractedSNV.test(p))) .findFirst() .orElseGet(emptyStringWhenMissingFilesAllowed)); generator.setSangerOxogSNVFileName( this.filesForUpload .stream() .filter( p -> ((p.contains(tumourAliquotID) && p.contains("svcp_") && p.endsWith(passFilteredOxoGSuffix)))) .findFirst() .orElseGet(emptyStringWhenMissingFilesAllowed)); generator.setSangerOxoGSNVFromIndelFileName( this.filesForUpload .stream() .filter(p -> (p.contains(Pipeline.sanger.toString()) && isExtractedSNV.test(p))) .findFirst() .orElseGet(emptyStringWhenMissingFilesAllowed)); generator.setDkfzEmbleOxogSNVFileName( this.filesForUpload .stream() .filter( p -> ((p.contains(tumourAliquotID) && p.contains("dkfz-snvCalling") && p.endsWith(passFilteredOxoGSuffix)))) .findFirst() .orElseGet(emptyStringWhenMissingFilesAllowed)); generator.setDkfzEmblOxoGSNVFromIndelFileName( this.filesForUpload .stream() .filter(p -> (p.contains(Pipeline.dkfz_embl.toString()) && isExtractedSNV.test(p))) .findFirst() .orElseGet(emptyStringWhenMissingFilesAllowed)); // Remember: MUSE files do not get PASS-filtered. Also, there is no INDEL so there cannot be // any SNVs extracted from INDELs. generator.setMuseOxogSNVFileName( this.filesForUpload .stream() .filter(p -> p.toUpperCase().contains("MUSE") && p.endsWith(".oxoG.vcf.gz")) .findFirst() .orElseGet(emptyStringWhenMissingFilesAllowed)); generator.setNormalizedBroadIndel( this.normalizedIndels .stream() .filter(CommonPredicates.isBroad.and(matchesTumour(tumourAliquotID))) .findFirst() .orElse(new VcfInfo()) .getFileName()); generator.setNormalizedDkfzEmblIndel( this.normalizedIndels .stream() .filter(CommonPredicates.isDkfzEmbl.and(matchesTumour(tumourAliquotID))) .findFirst() .orElse(new VcfInfo()) .getFileName()); generator.setNormalizedSangerIndel( this.normalizedIndels .stream() .filter(CommonPredicates.isSanger.and(matchesTumour(tumourAliquotID))) .findFirst() .orElse(new VcfInfo()) .getFileName()); List<Job> jobs = generator.doAnnotations( this, tInf.getAliquotID(), tInf.getTumourMinibamPath(), this.normalMinibamPath, this.updateFilesForUpload, parents); finalAnnotatorJobs.addAll(jobs); } return finalAnnotatorJobs; }