Moving more tools over to use the standard VC arg collection. Also, while I'm in there, I removed all of the empty references to @Requires given that it's no longer relevant.

This commit is contained in:
Eric Banks 2011-08-10 12:20:18 -04:00
parent c884b6bf1f
commit a42f90db11
17 changed files with 17 additions and 43 deletions

View File

@ -50,7 +50,6 @@ import java.util.*;
/** /**
* Annotates variant calls with context information. Users can specify which of the available annotations to use. * Annotates variant calls with context information. Users can specify which of the available annotations to use.
*/ */
@Requires(value={})
@Allows(value={DataSource.READS, DataSource.REFERENCE}) @Allows(value={DataSource.READS, DataSource.REFERENCE})
@Reference(window=@Window(start=-50,stop=50)) @Reference(window=@Window(start=-50,stop=50))
@By(DataSource.REFERENCE) @By(DataSource.REFERENCE)

View File

@ -32,7 +32,6 @@ import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource; import org.broadinstitute.sting.gatk.datasources.rmd.ReferenceOrderedDataSource;
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
import org.broadinstitute.sting.gatk.refdata.features.beagle.BeagleFeature; import org.broadinstitute.sting.gatk.refdata.features.beagle.BeagleFeature;
import org.broadinstitute.sting.gatk.walkers.Requires;
import org.broadinstitute.sting.gatk.walkers.RodWalker; import org.broadinstitute.sting.gatk.walkers.RodWalker;
import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLoc;
import org.broadinstitute.sting.utils.SampleUtils; import org.broadinstitute.sting.utils.SampleUtils;
@ -50,7 +49,6 @@ import static java.lang.Math.log10;
/** /**
* Takes files produced by Beagle imputation engine and creates a vcf with modified annotations. * Takes files produced by Beagle imputation engine and creates a vcf with modified annotations.
*/ */
@Requires(value={})
public class BeagleOutputToVCFWalker extends RodWalker<Integer, Integer> { public class BeagleOutputToVCFWalker extends RodWalker<Integer, Integer> {
@ArgumentCollection @ArgumentCollection

View File

@ -31,7 +31,6 @@ import org.broadinstitute.sting.gatk.arguments.StandardVariantContextInputArgume
import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext;
import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
import org.broadinstitute.sting.gatk.walkers.Requires;
import org.broadinstitute.sting.gatk.walkers.RodWalker; import org.broadinstitute.sting.gatk.walkers.RodWalker;
import org.broadinstitute.sting.gatk.walkers.variantrecalibration.VQSRCalibrationCurve; import org.broadinstitute.sting.gatk.walkers.variantrecalibration.VQSRCalibrationCurve;
import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLoc;
@ -51,7 +50,6 @@ import java.util.*;
/** /**
* Produces an input file to Beagle imputation engine, listing genotype likelihoods for each sample in input variant file * Produces an input file to Beagle imputation engine, listing genotype likelihoods for each sample in input variant file
*/ */
@Requires(value={})
public class ProduceBeagleInputWalker extends RodWalker<Integer, Integer> { public class ProduceBeagleInputWalker extends RodWalker<Integer, Integer> {
@ArgumentCollection protected StandardVariantContextInputArgumentCollection variantCollection = new StandardVariantContextInputArgumentCollection(); @ArgumentCollection protected StandardVariantContextInputArgumentCollection variantCollection = new StandardVariantContextInputArgumentCollection();

View File

@ -32,7 +32,6 @@ import org.broadinstitute.sting.commandline.RodBinding;
import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext;
import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
import org.broadinstitute.sting.gatk.walkers.Requires;
import org.broadinstitute.sting.gatk.walkers.RodWalker; import org.broadinstitute.sting.gatk.walkers.RodWalker;
import org.broadinstitute.sting.utils.GenomeLoc; import org.broadinstitute.sting.utils.GenomeLoc;
import org.broadinstitute.sting.utils.SampleUtils; import org.broadinstitute.sting.utils.SampleUtils;
@ -55,7 +54,6 @@ import java.util.Set;
* in input variant file. Will additional hold back a fraction of the sites for evaluation, marking the * in input variant file. Will additional hold back a fraction of the sites for evaluation, marking the
* genotypes at that sites as missing, and writing the truth of these sites to a second VCF file * genotypes at that sites as missing, and writing the truth of these sites to a second VCF file
*/ */
@Requires(value={})
public class VariantsToBeagleUnphasedWalker extends RodWalker<Integer, Integer> { public class VariantsToBeagleUnphasedWalker extends RodWalker<Integer, Integer> {
@Input(fullName="variants", shortName = "V", doc="Input VCF file", required=true) @Input(fullName="variants", shortName = "V", doc="Input VCF file", required=true)
public RodBinding<VariantContext> variants; public RodBinding<VariantContext> variants;

View File

@ -29,7 +29,6 @@ import org.broadinstitute.sting.commandline.Output;
import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext;
import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
import org.broadinstitute.sting.gatk.walkers.Requires;
import org.broadinstitute.sting.gatk.walkers.RodWalker; import org.broadinstitute.sting.gatk.walkers.RodWalker;
import java.io.File; import java.io.File;
@ -131,7 +130,6 @@ import java.util.List;
* @author Mark DePristo * @author Mark DePristo
* @since 7/4/11 * @since 7/4/11
*/ */
@Requires(value={})
public class DiffObjectsWalker extends RodWalker<Integer, Integer> { public class DiffObjectsWalker extends RodWalker<Integer, Integer> {
/** /**
* Writes out a file of the DiffEngine format: * Writes out a file of the DiffEngine format:

View File

@ -46,7 +46,6 @@ import java.util.*;
/** /**
* Filters variant calls using a number of user-selectable, parameterizable criteria. * Filters variant calls using a number of user-selectable, parameterizable criteria.
*/ */
@Requires(value={})
@Reference(window=@Window(start=-50,stop=50)) @Reference(window=@Window(start=-50,stop=50))
public class VariantFiltrationWalker extends RodWalker<Integer, Integer> { public class VariantFiltrationWalker extends RodWalker<Integer, Integer> {

View File

@ -49,7 +49,6 @@ import java.util.TreeSet;
* the name 'allele' so we know which alternate allele to use at each site. * the name 'allele' so we know which alternate allele to use at each site.
*/ */
@BAQMode(QualityMode = BAQ.QualityMode.ADD_TAG, ApplicationTime = BAQ.ApplicationTime.ON_INPUT) @BAQMode(QualityMode = BAQ.QualityMode.ADD_TAG, ApplicationTime = BAQ.ApplicationTime.ON_INPUT)
@Requires(value={})
@Reference(window=@Window(start=-200,stop=200)) @Reference(window=@Window(start=-200,stop=200))
@By(DataSource.READS) @By(DataSource.READS)
@Downsample(by=DownsampleType.BY_SAMPLE, toCoverage=250) @Downsample(by=DownsampleType.BY_SAMPLE, toCoverage=250)

View File

@ -24,9 +24,9 @@
package org.broadinstitute.sting.gatk.walkers.variantutils; package org.broadinstitute.sting.gatk.walkers.variantutils;
import org.broadinstitute.sting.commandline.Input; import org.broadinstitute.sting.commandline.ArgumentCollection;
import org.broadinstitute.sting.commandline.Output; import org.broadinstitute.sting.commandline.Output;
import org.broadinstitute.sting.commandline.RodBinding; import org.broadinstitute.sting.gatk.arguments.StandardVariantContextInputArgumentCollection;
import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext;
import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
@ -46,10 +46,10 @@ import java.util.Set;
* Filters a lifted-over VCF file for ref bases that have been changed. * Filters a lifted-over VCF file for ref bases that have been changed.
*/ */
@Reference(window=@Window(start=0,stop=100)) @Reference(window=@Window(start=0,stop=100))
@Requires(value={})
public class FilterLiftedVariants extends RodWalker<Integer, Integer> { public class FilterLiftedVariants extends RodWalker<Integer, Integer> {
@Input(fullName="variants", shortName = "V", doc="Input VCF file", required=true)
public RodBinding<VariantContext> variants; @ArgumentCollection
protected StandardVariantContextInputArgumentCollection variantCollection = new StandardVariantContextInputArgumentCollection();
private static final int MAX_VARIANT_SIZE = 100; private static final int MAX_VARIANT_SIZE = 100;
@ -59,10 +59,11 @@ public class FilterLiftedVariants extends RodWalker<Integer, Integer> {
private long failedLocs = 0, totalLocs = 0; private long failedLocs = 0, totalLocs = 0;
public void initialize() { public void initialize() {
Set<String> samples = SampleUtils.getSampleListWithVCFHeader(getToolkit(), Arrays.asList(variants.getName())); String trackName = variantCollection.variants.getName();
Map<String, VCFHeader> vcfHeaders = VCFUtils.getVCFHeadersFromRods(getToolkit(), Arrays.asList(variants.getName())); Set<String> samples = SampleUtils.getSampleListWithVCFHeader(getToolkit(), Arrays.asList(trackName));
Map<String, VCFHeader> vcfHeaders = VCFUtils.getVCFHeadersFromRods(getToolkit(), Arrays.asList(trackName));
final VCFHeader vcfHeader = new VCFHeader(vcfHeaders.containsKey(variants.getName()) ? vcfHeaders.get(variants.getName()).getMetaData() : null, samples); final VCFHeader vcfHeader = new VCFHeader(vcfHeaders.containsKey(trackName) ? vcfHeaders.get(trackName).getMetaData() : null, samples);
writer.writeHeader(vcfHeader); writer.writeHeader(vcfHeader);
} }
@ -89,7 +90,7 @@ public class FilterLiftedVariants extends RodWalker<Integer, Integer> {
if ( tracker == null ) if ( tracker == null )
return 0; return 0;
Collection<VariantContext> VCs = tracker.getValues(variants, context.getLocation()); Collection<VariantContext> VCs = tracker.getValues(variantCollection.variants, context.getLocation());
for ( VariantContext vc : VCs ) for ( VariantContext vc : VCs )
filterAndWrite(ref.getBases(), vc); filterAndWrite(ref.getBases(), vc);

View File

@ -48,7 +48,6 @@ import java.util.*;
* Left-aligns indels from a variants file. * Left-aligns indels from a variants file.
*/ */
@Reference(window=@Window(start=-200,stop=200)) @Reference(window=@Window(start=-200,stop=200))
@Requires(value={})
public class LeftAlignVariants extends RodWalker<Integer, Integer> { public class LeftAlignVariants extends RodWalker<Integer, Integer> {
@ArgumentCollection @ArgumentCollection

View File

@ -34,7 +34,6 @@ import org.broadinstitute.sting.gatk.arguments.StandardVariantContextInputArgume
import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext;
import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
import org.broadinstitute.sting.gatk.walkers.Requires;
import org.broadinstitute.sting.gatk.walkers.RodWalker; import org.broadinstitute.sting.gatk.walkers.RodWalker;
import org.broadinstitute.sting.utils.SampleUtils; import org.broadinstitute.sting.utils.SampleUtils;
import org.broadinstitute.sting.utils.codecs.vcf.*; import org.broadinstitute.sting.utils.codecs.vcf.*;
@ -48,7 +47,6 @@ import java.util.*;
/** /**
* Lifts a VCF file over from one build to another. Note that the resulting VCF could be mis-sorted. * Lifts a VCF file over from one build to another. Note that the resulting VCF could be mis-sorted.
*/ */
@Requires(value={})
public class LiftoverVariants extends RodWalker<Integer, Integer> { public class LiftoverVariants extends RodWalker<Integer, Integer> {
@ArgumentCollection @ArgumentCollection

View File

@ -24,15 +24,12 @@
package org.broadinstitute.sting.gatk.walkers.variantutils; package org.broadinstitute.sting.gatk.walkers.variantutils;
import org.broadinstitute.sting.commandline.Argument; import org.broadinstitute.sting.commandline.*;
import org.broadinstitute.sting.commandline.Input;
import org.broadinstitute.sting.commandline.Output;
import org.broadinstitute.sting.commandline.RodBinding;
import org.broadinstitute.sting.gatk.GenomeAnalysisEngine; import org.broadinstitute.sting.gatk.GenomeAnalysisEngine;
import org.broadinstitute.sting.gatk.arguments.StandardVariantContextInputArgumentCollection;
import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext;
import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
import org.broadinstitute.sting.gatk.walkers.Requires;
import org.broadinstitute.sting.gatk.walkers.RodWalker; import org.broadinstitute.sting.gatk.walkers.RodWalker;
import org.broadinstitute.sting.utils.SampleUtils; import org.broadinstitute.sting.utils.SampleUtils;
import org.broadinstitute.sting.utils.codecs.vcf.*; import org.broadinstitute.sting.utils.codecs.vcf.*;
@ -45,10 +42,10 @@ import java.util.*;
/** /**
* Takes a VCF file, randomly splits variants into two different sets, and outputs 2 new VCFs with the results. * Takes a VCF file, randomly splits variants into two different sets, and outputs 2 new VCFs with the results.
*/ */
@Requires(value={})
public class RandomlySplitVariants extends RodWalker<Integer, Integer> { public class RandomlySplitVariants extends RodWalker<Integer, Integer> {
@Input(fullName="variants", shortName = "V", doc="Input VCF file", required=true)
public RodBinding<VariantContext> variants; @ArgumentCollection
protected StandardVariantContextInputArgumentCollection variantCollection = new StandardVariantContextInputArgumentCollection();
@Output(fullName="out1", shortName="o1", doc="File #1 to which variants should be written", required=true) @Output(fullName="out1", shortName="o1", doc="File #1 to which variants should be written", required=true)
protected VCFWriter vcfWriter1 = null; protected VCFWriter vcfWriter1 = null;
@ -72,7 +69,7 @@ public class RandomlySplitVariants extends RodWalker<Integer, Integer> {
iFraction = (int)(fraction * 1000.0); iFraction = (int)(fraction * 1000.0);
// setup the header info // setup the header info
final List<String> inputNames = Arrays.asList(variants.getName()); final List<String> inputNames = Arrays.asList(variantCollection.variants.getName());
Set<String> samples = SampleUtils.getUniqueSamplesFromRods(getToolkit(), inputNames); Set<String> samples = SampleUtils.getUniqueSamplesFromRods(getToolkit(), inputNames);
Set<VCFHeaderLine> hInfo = new HashSet<VCFHeaderLine>(); Set<VCFHeaderLine> hInfo = new HashSet<VCFHeaderLine>();
hInfo.addAll(VCFUtils.getHeaderFields(getToolkit(), inputNames)); hInfo.addAll(VCFUtils.getHeaderFields(getToolkit(), inputNames));
@ -94,7 +91,7 @@ public class RandomlySplitVariants extends RodWalker<Integer, Integer> {
if ( tracker == null ) if ( tracker == null )
return 0; return 0;
Collection<VariantContext> vcs = tracker.getValues(variants, context.getLocation()); Collection<VariantContext> vcs = tracker.getValues(variantCollection.variants, context.getLocation());
for ( VariantContext vc : vcs ) { for ( VariantContext vc : vcs ) {
int random = GenomeAnalysisEngine.getRandomGenerator().nextInt(1000); int random = GenomeAnalysisEngine.getRandomGenerator().nextInt(1000);
if ( random < iFraction ) if ( random < iFraction )

View File

@ -38,7 +38,6 @@ import org.broadinstitute.sting.commandline.Output;
import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext;
import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
import org.broadinstitute.sting.gatk.walkers.Requires;
import org.broadinstitute.sting.gatk.walkers.RodWalker; import org.broadinstitute.sting.gatk.walkers.RodWalker;
import org.broadinstitute.sting.utils.SampleUtils; import org.broadinstitute.sting.utils.SampleUtils;
import org.broadinstitute.sting.utils.variantcontext.Allele; import org.broadinstitute.sting.utils.variantcontext.Allele;
@ -54,7 +53,6 @@ import java.util.*;
* Takes a VCF file, selects variants based on sample(s) in which it was found and/or on various annotation criteria, * Takes a VCF file, selects variants based on sample(s) in which it was found and/or on various annotation criteria,
* recompute the value of certain annotations based on the new sample set, and output a new VCF with the results. * recompute the value of certain annotations based on the new sample set, and output a new VCF with the results.
*/ */
@Requires(value={})
public class SelectVariants extends RodWalker<Integer, Integer> { public class SelectVariants extends RodWalker<Integer, Integer> {
/** /**
* The VCF file we are selecting variants from. * The VCF file we are selecting variants from.

View File

@ -50,7 +50,6 @@ import java.util.Set;
* Validates a variants file. * Validates a variants file.
*/ */
@Reference(window=@Window(start=0,stop=100)) @Reference(window=@Window(start=0,stop=100))
@Requires(value={})
public class ValidateVariants extends RodWalker<Integer, Integer> { public class ValidateVariants extends RodWalker<Integer, Integer> {
@ArgumentCollection @ArgumentCollection

View File

@ -36,7 +36,6 @@ import org.broadinstitute.sting.gatk.walkers.*;
import org.broadinstitute.sting.utils.QualityUtils; import org.broadinstitute.sting.utils.QualityUtils;
import org.broadinstitute.sting.utils.SampleUtils; import org.broadinstitute.sting.utils.SampleUtils;
import org.broadinstitute.sting.utils.codecs.vcf.*; import org.broadinstitute.sting.utils.codecs.vcf.*;
import org.broadinstitute.sting.utils.collections.Pair;
import org.broadinstitute.sting.utils.variantcontext.Allele; import org.broadinstitute.sting.utils.variantcontext.Allele;
import org.broadinstitute.sting.utils.variantcontext.VariantContext; import org.broadinstitute.sting.utils.variantcontext.VariantContext;
import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils; import org.broadinstitute.sting.utils.variantcontext.VariantContextUtils;
@ -47,7 +46,6 @@ import java.util.*;
* Converts Sequenom files to a VCF annotated with QC metrics (HW-equilibrium, % failed probes) * Converts Sequenom files to a VCF annotated with QC metrics (HW-equilibrium, % failed probes)
*/ */
@Reference(window=@Window(start=0,stop=40)) @Reference(window=@Window(start=0,stop=40))
@Requires(value={})
public class VariantValidationAssessor extends RodWalker<VariantContext,Integer> { public class VariantValidationAssessor extends RodWalker<VariantContext,Integer> {
@Input(fullName="variants", shortName = "V", doc="Input VCF file", required=true) @Input(fullName="variants", shortName = "V", doc="Input VCF file", required=true)
public RodBinding<VariantContext> variants; public RodBinding<VariantContext> variants;

View File

@ -31,7 +31,6 @@ import org.broadinstitute.sting.utils.variantcontext.VariantContext;
import org.broadinstitute.sting.gatk.contexts.AlignmentContext; import org.broadinstitute.sting.gatk.contexts.AlignmentContext;
import org.broadinstitute.sting.gatk.contexts.ReferenceContext; import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker; import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
import org.broadinstitute.sting.gatk.walkers.Requires;
import org.broadinstitute.sting.gatk.walkers.RodWalker; import org.broadinstitute.sting.gatk.walkers.RodWalker;
import org.broadinstitute.sting.utils.Utils; import org.broadinstitute.sting.utils.Utils;
import org.broadinstitute.sting.utils.exceptions.UserException; import org.broadinstitute.sting.utils.exceptions.UserException;
@ -43,7 +42,6 @@ import java.util.*;
/** /**
* Emits specific fields as dictated by the user from one or more VCF files. * Emits specific fields as dictated by the user from one or more VCF files.
*/ */
@Requires(value={})
public class VariantsToTable extends RodWalker<Integer, Integer> { public class VariantsToTable extends RodWalker<Integer, Integer> {
@ArgumentCollection @ArgumentCollection

View File

@ -56,7 +56,6 @@ import java.util.*;
/** /**
* Converts variants from other file formats to VCF format. * Converts variants from other file formats to VCF format.
*/ */
@Requires(value={})
@Reference(window=@Window(start=-40,stop=40)) @Reference(window=@Window(start=-40,stop=40))
public class VariantsToVCF extends RodWalker<Integer, Integer> { public class VariantsToVCF extends RodWalker<Integer, Integer> {

View File

@ -26,7 +26,6 @@ package org.broadinstitute.sting.gatk;
import org.testng.Assert; import org.testng.Assert;
import org.broadinstitute.sting.commandline.Hidden; import org.broadinstitute.sting.commandline.Hidden;
import org.broadinstitute.sting.gatk.walkers.Requires;
import org.broadinstitute.sting.gatk.walkers.Walker; import org.broadinstitute.sting.gatk.walkers.Walker;
import org.broadinstitute.sting.gatk.walkers.qc.CountLociWalker; import org.broadinstitute.sting.gatk.walkers.qc.CountLociWalker;
import org.broadinstitute.sting.utils.exceptions.DynamicClassResolutionException; import org.broadinstitute.sting.utils.exceptions.DynamicClassResolutionException;
@ -64,7 +63,6 @@ public class WalkerManagerUnitTest {
} }
@Hidden @Hidden
@Requires(value={})
class UninstantiableWalker extends Walker<Integer,Long> { class UninstantiableWalker extends Walker<Integer,Long> {
// Private constructor will generate uninstantiable message // Private constructor will generate uninstantiable message
private UninstantiableWalker() {} private UninstantiableWalker() {}