-
Notifications
You must be signed in to change notification settings - Fork 594
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ReblockGVCFs cleanup #8411
Merged
Merged
ReblockGVCFs cleanup #8411
Changes from 1 commit
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -108,6 +108,7 @@ public final class ReblockGVCF extends MultiVariantWalker { | |
public static final String RGQ_THRESHOLD_SHORT_NAME = "rgq-threshold"; | ||
public static final String TREE_SCORE_THRESHOLD_LONG_NAME = "tree-score-threshold-to-no-call"; | ||
public static final String ANNOTATIONS_TO_KEEP_LONG_NAME = "annotations-to-keep"; | ||
public static final String ANNOTATIONS_TO_REMOVE_LONG_NAME = "format-annotations-to-remove"; | ||
public static final String KEEP_ALL_ALTS_ARG_NAME = "keep-all-alts"; | ||
public static final String QUAL_APPROX_LONG_NAME = "do-qual-score-approximation"; | ||
public static final String QUAL_APPROX_SHORT_NAME = "do-qual-approx"; | ||
|
@@ -154,6 +155,10 @@ public final class ReblockGVCF extends MultiVariantWalker { | |
@Argument(fullName=ANNOTATIONS_TO_KEEP_LONG_NAME, doc="Annotations that are not recognized by GATK to keep, that should be kept in final GVCF at variant sites.", optional = true) | ||
private List<String> annotationsToKeep = new ArrayList<>(); | ||
|
||
@Advanced | ||
@Argument(fullName=ANNOTATIONS_TO_REMOVE_LONG_NAME, doc="FORMAT level annotations to remove from all genotypes in final GVCF.", optional = true) | ||
private List<String> annotationsToRemove = new ArrayList<>(); | ||
|
||
@Advanced | ||
@Argument(fullName=QUAL_APPROX_LONG_NAME, shortName=QUAL_APPROX_SHORT_NAME, doc="Add necessary INFO field annotation to perform QUAL approximation downstream; required for GnarlyGenotyper", optional = true) | ||
protected boolean doQualApprox = false; | ||
|
@@ -227,6 +232,9 @@ public void onTraversalStart() { | |
+ ", but the " + GATKVCFConstants.TREE_SCORE + " annotation is not present in the input GVCF."); | ||
} | ||
|
||
List<String> missingAnnotationsToRemove = annotationsToRemove.stream().filter(a -> inputHeader.getFormatHeaderLine(a)==null).toList(); | ||
missingAnnotationsToRemove.forEach(a -> logger.warn("FORMAT level annotation " + a + ", which was requested to be removed by --" + ANNOTATIONS_TO_REMOVE_LONG_NAME + ", not found in input GVCF header.")); | ||
|
||
final Set<VCFHeaderLine> inputHeaders = inputHeader.getMetaDataInSortedOrder(); | ||
|
||
final Set<VCFHeaderLine> headerLines = new HashSet<>(inputHeaders); | ||
|
@@ -317,7 +325,27 @@ protected void createAnnotationEngine() { | |
// get VariantContexts from input gVCFs and regenotype | ||
@Override | ||
public void apply(VariantContext variant, ReadsContext reads, ReferenceContext ref, FeatureContext features) { | ||
regenotypeVC(variant); | ||
if (!variant.hasAllele(Allele.NON_REF_ALLELE)) { | ||
throw new GATKException("Variant Context at " + variant.getContig() + ":" + variant.getStart() + " does not contain a <NON-REF> allele. This tool is only intended for use with GVCFs."); | ||
} | ||
VariantContext newVC = annotationsToRemove.size() > 0 ? vcFormatAnnotationsRemoved(variant) : variant; | ||
regenotypeVC(newVC); | ||
} | ||
|
||
/** | ||
* Remove format level annotations from genotype in variant context. | ||
* | ||
* @param vc variant context to remove format annotations from | ||
* @return variant context with format annotations removed from genotype | ||
*/ | ||
private VariantContext vcFormatAnnotationsRemoved(final VariantContext vc) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The grammar of this method name feels weird. Like usually they're verb phrases. I would prefer "removeVCFormatAnnotations" |
||
final Genotype genotype = vc.getGenotype(0); | ||
Map<String, Object> extendedAttributes = genotype.getExtendedAttributes(); | ||
for (String annotation : annotationsToRemove) { | ||
extendedAttributes.remove(annotation); | ||
} | ||
final Genotype newGenotype = new GenotypeBuilder(genotype).noAttributes().attributes(extendedAttributes).make(); | ||
return new VariantContextBuilder(vc).genotypes(newGenotype).make(); | ||
} | ||
|
||
/** | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would use a UserException instead -- I think it's a subclass