(final OutputStream out, final PrintStream err)
| 173 | } |
| 174 | |
| 175 | @Override |
| 176 | protected int mainExec(final OutputStream out, final PrintStream err) throws IOException { |
| 177 | final File outFile = (File) mFlags.getValue(OUTPUT_FLAG); |
| 178 | final List<File> inputs = CommonFlags.getFileList(mFlags, CommonFlags.INPUT_LIST_FLAG, null, false); |
| 179 | final HashSet<File> dupTest = new HashSet<>(); |
| 180 | for (final File f : inputs) { |
| 181 | if (!dupTest.add(f.getCanonicalFile())) { |
| 182 | throw new NoTalkbackSlimException("File: " + f.getPath() + " is specified more than once."); |
| 183 | } |
| 184 | } |
| 185 | final Collection<String> extraHeaderLines = getHeaderLines(mFlags); |
| 186 | final HashSet<String> forceMerge; |
| 187 | if (mFlags.isSet(FORCE_MERGE_ALL)) { |
| 188 | forceMerge = null; |
| 189 | } else { |
| 190 | final List<?> forceMergeRaw = mFlags.getValues(FORCE_MERGE); |
| 191 | forceMerge = new HashSet<>(); |
| 192 | for (final Object o : forceMergeRaw) { |
| 193 | forceMerge.add((String) o); |
| 194 | } |
| 195 | } |
| 196 | final boolean gzip = !mFlags.isSet(NO_GZIP); |
| 197 | final VariantStatistics stats = mFlags.isSet(STATS_FLAG) ? new VariantStatistics(null) : null; |
| 198 | final ReferenceRanges<String> regions = CommonFlags.parseRegionOrBedRegions(mFlags); |
| 199 | final VcfPositionZipper posZip = new VcfPositionZipper(regions, forceMerge, inputs.toArray(new File[0])); |
| 200 | final VcfHeader header = posZip.getHeader(); |
| 201 | VcfUtils.addHeaderLines(header, extraHeaderLines); |
| 202 | |
| 203 | String defaultFormat = FORMAT_GENOTYPE; |
| 204 | if (header.getFormatField(FORMAT_GENOTYPE) == null && header.getFormatLines().size() > 0) { |
| 205 | defaultFormat = header.getFormatLines().get(0).getId(); |
| 206 | } |
| 207 | |
| 208 | final boolean stdout = FileUtils.isStdio(outFile); |
| 209 | final File vcfFile = VcfUtils.getZippedVcfFileName(gzip, outFile); |
| 210 | final VcfRecordMerger merger; |
| 211 | if (mFlags.isSet(GT_MAJORITY)) { |
| 212 | if (!FORMAT_GENOTYPE.equals(defaultFormat)) { |
| 213 | throw new NoTalkbackSlimException("VCF header does not contain GT declaration"); |
| 214 | } |
| 215 | merger = new VcfGtMajorityMerger(); |
| 216 | } else if (mFlags.isSet(NO_ALT_MERGE)) { |
| 217 | merger = new VcfSameAltsMerger(); |
| 218 | } else { |
| 219 | merger = new VcfRecordMerger(); |
| 220 | } |
| 221 | merger.setHeader(header); |
| 222 | merger.setDefaultFormat(defaultFormat); |
| 223 | merger.setAllowMerging(!mFlags.isSet(NO_RECORD_MERGE)); |
| 224 | merger.setPaddingAware(!mFlags.isSet(NON_PADDING_AWARE)); |
| 225 | merger.setDropUnmergeable(!mFlags.isSet(PRESERVE_FORMATS)); |
| 226 | |
| 227 | try (final VcfWriter w = new VcfWriterFactory(mFlags).addRunInfo(true).make(header, vcfFile)) { |
| 228 | final ZipperCallback callback = (records, headers) -> { |
| 229 | assert records.length > 0; |
| 230 | final VcfRecord[] mergedArr = merger.mergeRecords(records, headers); |
| 231 | for (VcfRecord merged : mergedArr) { |
| 232 | if (stats != null) { |
nothing calls this directly
no test coverage detected