MCPcopy Create free account
hub / github.com/RealTimeGenomics/rtg-tools / mainExec

Method mainExec

src/main/java/com/rtg/vcf/VcfMerge.java:175–251  ·  view source on GitHub ↗
(final OutputStream out, final PrintStream err)

Source from the content-addressed store, hash-verified

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) {

Callers

nothing calls this directly

Calls 15

getFileListMethod · 0.95
getHeaderLinesMethod · 0.95
getHeaderMethod · 0.95
addHeaderLinesMethod · 0.95
getFormatFieldMethod · 0.95
getFormatLinesMethod · 0.95
isStdioMethod · 0.95
getZippedVcfFileNameMethod · 0.95
setHeaderMethod · 0.95
setDefaultFormatMethod · 0.95
setAllowMergingMethod · 0.95

Tested by

no test coverage detected