|
11 | 11 | import htsjdk.variant.vcf.VCFFileReader; |
12 | 12 | import org.apache.commons.lang3.StringUtils; |
13 | 13 | import org.apache.commons.lang3.tuple.Pair; |
| 14 | +import org.apache.log4j.Logger; |
14 | 15 | import org.json.JSONObject; |
15 | 16 | import org.labkey.api.module.ModuleLoader; |
16 | 17 | import org.labkey.api.pipeline.PipelineJob; |
@@ -142,7 +143,7 @@ public void doFinalize() |
142 | 143 | if (_encounteredAlleles.keySet().size() == 1) |
143 | 144 | { |
144 | 145 | _ref = _encounteredAlleles.keySet().iterator().next(); |
145 | | - _alternates = new ArrayList<>(_encounteredAlleles.get(_ref)); |
| 146 | + _alternates = Collections.unmodifiableList(_encounteredAlleles.get(_ref)); |
146 | 147 | _renamedAlleles = Collections.emptyMap(); |
147 | 148 |
|
148 | 149 | return; |
@@ -186,13 +187,26 @@ public void doFinalize() |
186 | 187 | _renamedAlleles.put(ref, alleleMap); |
187 | 188 | } |
188 | 189 | } |
189 | | - _alternates = finalAlleles; |
| 190 | + _alternates = Collections.unmodifiableList(finalAlleles); |
190 | 191 | } |
191 | 192 |
|
192 | 193 | public boolean isMergedRef() |
193 | 194 | { |
194 | 195 | return _encounteredAlleles.size() > 1; |
195 | 196 | } |
| 197 | + |
| 198 | + public void checkValid(Logger log) |
| 199 | + { |
| 200 | + if (_alternates.isEmpty()) |
| 201 | + { |
| 202 | + log.error("No alternate alleles found: " + _contig + "/" + _start + "/" + _ref); |
| 203 | + _encounteredAlleles.forEach((a, b) -> { |
| 204 | + log.error(a.getBaseString() + ": " + b.stream().map(Allele::getBaseString).collect(Collectors.joining(","))); |
| 205 | + }); |
| 206 | + |
| 207 | + throw new IllegalArgumentException("No alternate alleles found: " + _contig + "/" + _start + "/" + _ref); |
| 208 | + } |
| 209 | + } |
196 | 210 | } |
197 | 211 |
|
198 | 212 | @Override |
@@ -255,16 +269,7 @@ public void processFilesRemote(List<SequenceOutputFile> inputFiles, JobContext c |
255 | 269 |
|
256 | 270 | siteToAllele.forEach((x, y) -> { |
257 | 271 | y.doFinalize(); |
258 | | - |
259 | | - if (y._alternates.isEmpty()) |
260 | | - { |
261 | | - ctx.getLogger().error("No alternate alleles found: " + y._contig + "/" + y._start + "/" + y._ref); |
262 | | - y._encounteredAlleles.forEach((a, b) -> { |
263 | | - ctx.getLogger().error(a.getBaseString() + ": " + b.stream().map(Allele::getBaseString).collect(Collectors.joining(","))); |
264 | | - }); |
265 | | - |
266 | | - throw new IllegalArgumentException("No alternate alleles found: " + y._contig + "/" + y._start + "/" + y._ref); |
267 | | - } |
| 272 | + y.checkValid(ctx.getLogger()); |
268 | 273 | }); |
269 | 274 |
|
270 | 275 | ReferenceGenome genome = ctx.getSequenceSupport().getCachedGenome(genomeIds.iterator().next()); |
@@ -300,7 +305,7 @@ public void processFilesRemote(List<SequenceOutputFile> inputFiles, JobContext c |
300 | 305 | line.add(String.valueOf(site.getRight() + siteDef._ref.length() - 1)); |
301 | 306 |
|
302 | 307 | line.add(siteDef._ref.getBaseString()); |
303 | | - line.add(siteDef._alternates.stream().map(Allele::getBaseString).skip(1).collect(Collectors.joining(";"))); |
| 308 | + line.add(siteDef._alternates.stream().map(Allele::getBaseString).collect(Collectors.joining(";"))); |
304 | 309 |
|
305 | 310 | if (!it.hasNext()) |
306 | 311 | { |
@@ -336,9 +341,15 @@ public void processFilesRemote(List<SequenceOutputFile> inputFiles, JobContext c |
336 | 341 | while (it.hasNext()) |
337 | 342 | { |
338 | 343 | VariantContext vc = it.next(); |
339 | | - if (vc.getStart() != siteDef._start) |
| 344 | + |
| 345 | + //This could occur with a deletion from the prior position |
| 346 | + if (vc.getStart() < siteDef._start) |
| 347 | + { |
| 348 | + ctx.getLogger().info("Variant start less than site def, probably indicates an upstream deletion: " + siteDef._start + " / " + vc.getStart() + " / " + so.getFile().getPath()); |
| 349 | + } |
| 350 | + else if (vc.getStart() > siteDef._start) |
340 | 351 | { |
341 | | - throw new PipelineJobException("Iterating incorrect start: " + siteDef._start + " / " + vc.getStart() + " / " + so.getFile().getPath()); |
| 352 | + throw new PipelineJobException("Unexpected variant start. site: " + siteDef._start + " / vc: " + vc.getStart() + " / " + so.getFile().getPath()); |
342 | 353 | } |
343 | 354 |
|
344 | 355 | refs.add(vc.getReference()); |
|
0 commit comments