Add deprecated command-line arguments, and switched over UG to output to

-o/--out instead of -varout.  Let's watch as our intrepid support engineer
gracefully responds to all the incoming questions of the form: "the GATK told
me to use -o instead of -varout.  What do I do?"


git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@4078 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
hanna 2010-08-22 21:01:44 +00:00
parent b80cf7d1d9
commit c177801d81
9 changed files with 61 additions and 45 deletions

View File

@ -110,8 +110,8 @@ public class ArgumentDefinition {
* @param required Whether or not this argument is required. * @param required Whether or not this argument is required.
* @param isFlag Whether or not this argument should be treated as a flag. * @param isFlag Whether or not this argument should be treated as a flag.
* @param isMultiValued Whether or not this argument supports multiple values. * @param isMultiValued Whether or not this argument supports multiple values.
* @param componentType For multivalued arguments the type of the components.
* @param isHidden Whether or not this argument should be hidden from the command-line argument system. * @param isHidden Whether or not this argument should be hidden from the command-line argument system.
* @param componentType For multivalued arguments the type of the components.
* @param exclusiveOf Whether this command line argument is mutually exclusive of other arguments. * @param exclusiveOf Whether this command line argument is mutually exclusive of other arguments.
* @param validation A regular expression for command-line argument validation. * @param validation A regular expression for command-line argument validation.
* @param validOptions is there a particular list of options that's valid for this argument definition? List them if so, otherwise set this to null. * @param validOptions is there a particular list of options that's valid for this argument definition? List them if so, otherwise set this to null.
@ -124,8 +124,8 @@ public class ArgumentDefinition {
boolean required, boolean required,
boolean isFlag, boolean isFlag,
boolean isMultiValued, boolean isMultiValued,
Class componentType,
boolean isHidden, boolean isHidden,
Class componentType,
String exclusiveOf, String exclusiveOf,
String validation, String validation,
List<String> validOptions) { List<String> validOptions) {
@ -162,8 +162,8 @@ public class ArgumentDefinition {
String defaultShortName, String defaultShortName,
boolean isFlag, boolean isFlag,
boolean isMultiValued, boolean isMultiValued,
Class componentType,
boolean isHidden, boolean isHidden,
Class componentType,
List<String> validOptions) { List<String> validOptions) {
String fullName = (String)getValue(annotation, "fullName"); String fullName = (String)getValue(annotation, "fullName");
@ -190,8 +190,8 @@ public class ArgumentDefinition {
this.required = isRequired(annotation, isFlag); this.required = isRequired(annotation, isFlag);
this.isFlag = isFlag; this.isFlag = isFlag;
this.isMultiValued = isMultiValued; this.isMultiValued = isMultiValued;
this.componentType = componentType;
this.isHidden = isHidden; this.isHidden = isHidden;
this.componentType = componentType;
this.exclusiveOf = getExclusiveOf(annotation); this.exclusiveOf = getExclusiveOf(annotation);
this.validation = getValidationRegex(annotation); this.validation = getValidationRegex(annotation);
this.validOptions = validOptions; this.validOptions = validOptions;
@ -213,8 +213,8 @@ public class ArgumentDefinition {
String fieldName, String fieldName,
boolean isFlag, boolean isFlag,
boolean isMultiValued, boolean isMultiValued,
Class componentType,
boolean isHidden, boolean isHidden,
Class componentType,
List<String> validOptions) { List<String> validOptions) {
this.ioType = ArgumentIOType.getIOType(annotation); this.ioType = ArgumentIOType.getIOType(annotation);
this.argumentType = argumentType; this.argumentType = argumentType;
@ -224,8 +224,8 @@ public class ArgumentDefinition {
this.required = isRequired(annotation, isFlag); this.required = isRequired(annotation, isFlag);
this.isFlag = isFlag; this.isFlag = isFlag;
this.isMultiValued = isMultiValued; this.isMultiValued = isMultiValued;
this.componentType = componentType;
this.isHidden = isHidden; this.isHidden = isHidden;
this.componentType = componentType;
this.exclusiveOf = getExclusiveOf(annotation); this.exclusiveOf = getExclusiveOf(annotation);
this.validation = getValidationRegex(annotation); this.validation = getValidationRegex(annotation);
this.validOptions = validOptions; this.validOptions = validOptions;

View File

@ -173,7 +173,7 @@ public class ArgumentSource {
* @return True if so. False otherwise. * @return True if so. False otherwise.
*/ */
public boolean isHidden() { public boolean isHidden() {
return field.isAnnotationPresent(Hidden.class); return field.isAnnotationPresent(Hidden.class) || field.isAnnotationPresent(Deprecated.class);
} }
/** /**
@ -184,6 +184,14 @@ public class ArgumentSource {
return typeDescriptor instanceof MultiplexArgumentTypeDescriptor; return typeDescriptor instanceof MultiplexArgumentTypeDescriptor;
} }
/**
* Returns whether the field has been deprecated and should no longer be used.
* @return True if field has been deprecated.
*/
public boolean isDeprecated() {
return field.isAnnotationPresent(Deprecated.class);
}
/** /**
* Builds out a new type descriptor for the given dependent argument as a function * Builds out a new type descriptor for the given dependent argument as a function
* of the containing object. * of the containing object.

View File

@ -147,8 +147,8 @@ public abstract class ArgumentTypeDescriptor {
source.field.getName(), source.field.getName(),
source.isFlag(), source.isFlag(),
source.isMultiValued(), source.isMultiValued(),
getCollectionComponentType(source.field),
source.isHidden(), source.isHidden(),
getCollectionComponentType(source.field),
getValidOptions(source) ); getValidOptions(source) );
} }

View File

@ -256,7 +256,11 @@ public class ParsingEngine {
List<ArgumentSource> argumentSources = extractArgumentSources(object.getClass()); List<ArgumentSource> argumentSources = extractArgumentSources(object.getClass());
List<ArgumentSource> dependentArguments = new ArrayList<ArgumentSource>(); List<ArgumentSource> dependentArguments = new ArrayList<ArgumentSource>();
for( ArgumentSource argumentSource: argumentSources ) { for( ArgumentSource argumentSource: argumentSources ) {
if(argumentSource.isDeprecated() && argumentMatches.findMatches(argumentSource).size() > 0)
notifyDeprecatedCommandLineArgument(argumentSource);
// If this argument source depends on other command-line arguments, skip it and make a note to process it later. // If this argument source depends on other command-line arguments, skip it and make a note to process it later.
if(argumentSource.isDependent()) { if(argumentSource.isDependent()) {
dependentArguments.add(argumentSource); dependentArguments.add(argumentSource);
@ -272,6 +276,19 @@ public class ParsingEngine {
} }
} }
/**
* Notify the user that a deprecated command-line argument has been used.
* @param argumentSource Deprecated argument source specified by user.
*/
private void notifyDeprecatedCommandLineArgument(ArgumentSource argumentSource) {
// Grab the first argument definition and report that one as the failure. Theoretically, we should notify of all failures.
List<ArgumentDefinition> definitions = argumentSource.createArgumentDefinitions();
if(definitions.size() < 1)
throw new StingException("Internal error. Argument source creates no definitions.");
ArgumentDefinition definition = definitions.get(0);
throw new StingException(String.format("The parameter %s is deprecated. %s",definition.fullName,definition.doc));
}
/** /**
* Loads a single argument into the object and that objects children. * Loads a single argument into the object and that objects children.
* @param argumentMatches Argument matches to load into the object. * @param argumentMatches Argument matches to load into the object.

View File

@ -25,11 +25,17 @@ import org.broadinstitute.sting.gatk.walkers.LocusWalker;
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.commandline.Output;
import java.io.PrintStream;
/** /**
* An example walker for illustrative purposes. * An example walker for illustrative purposes.
*/ */
public class HelloWalker extends LocusWalker<Integer,Long> { public class HelloWalker extends LocusWalker<Integer,Long> {
@Output
PrintStream out;
/** /**
* The map function runs once per single-base locus, and accepts a 'context', a * The map function runs once per single-base locus, and accepts a 'context', a
* data structure consisting of the reads which overlap the locus, the sites over * data structure consisting of the reads which overlap the locus, the sites over

View File

@ -121,8 +121,8 @@ public class SAMFileWriterArgumentTypeDescriptor extends ArgumentTypeDescriptor
DEFAULT_ARGUMENT_SHORTNAME, DEFAULT_ARGUMENT_SHORTNAME,
false, false,
source.isMultiValued(), source.isMultiValued(),
getCollectionComponentType(source.field),
source.isHidden(), source.isHidden(),
getCollectionComponentType(source.field),
null ); null );
} }
@ -141,10 +141,10 @@ public class SAMFileWriterArgumentTypeDescriptor extends ArgumentTypeDescriptor
false, false,
false, false,
false, false,
null,
source.isHidden(), source.isHidden(),
null, null,
null, null,
null,
null ); null );
} }
} }

View File

@ -74,7 +74,7 @@ public class VCFWriterArgumentTypeDescriptor extends ArgumentTypeDescriptor {
@Override @Override
public List<ArgumentDefinition> createArgumentDefinitions( ArgumentSource source ) { public List<ArgumentDefinition> createArgumentDefinitions( ArgumentSource source ) {
return Arrays.asList( createGenotypeFileArgumentDefinition(source) ); return Arrays.asList( createDefaultArgumentDefinition(source) );
} }
/** /**
@ -103,7 +103,7 @@ public class VCFWriterArgumentTypeDescriptor extends ArgumentTypeDescriptor {
@Override @Override
public Object parse( ArgumentSource source, Class type, ArgumentMatches matches ) { public Object parse( ArgumentSource source, Class type, ArgumentMatches matches ) {
// Get the filename for the genotype file, if it exists. If not, we'll need to send output to out. // Get the filename for the genotype file, if it exists. If not, we'll need to send output to out.
String writerFileName = getArgumentValue(createGenotypeFileArgumentDefinition(source),matches); String writerFileName = getArgumentValue(createDefaultArgumentDefinition(source),matches);
File writerFile = writerFileName != null ? new File(writerFileName) : null; File writerFile = writerFileName != null ? new File(writerFileName) : null;
// Create a stub for the given object. // Create a stub for the given object.
@ -113,23 +113,4 @@ public class VCFWriterArgumentTypeDescriptor extends ArgumentTypeDescriptor {
return stub; return stub;
} }
/**
* Gets the definition of the argument representing the BAM file itself.
* @param source Argument source for the BAM file. Must not be null.
* @return Argument definition for the BAM file itself. Will not be null.
*/
private ArgumentDefinition createGenotypeFileArgumentDefinition(ArgumentSource source) {
Annotation annotation = this.getArgumentAnnotation(source);
return new ArgumentDefinition( annotation,
source.field.getType(),
"variants_out",
"varout",
false,
source.isMultiValued(),
getCollectionComponentType(source.field),
source.isHidden(),
null );
}
} }

View File

@ -52,9 +52,13 @@ public class UnifiedGenotyper extends LocusWalker<VariantCallContext, UnifiedGen
@ArgumentCollection private UnifiedArgumentCollection UAC = new UnifiedArgumentCollection(); @ArgumentCollection private UnifiedArgumentCollection UAC = new UnifiedArgumentCollection();
// control the output // control the output
@Argument(doc = "File to which variants should be written", required = false) @Output(doc="File to which variants should be written",required=false)
public VCFWriter writer = null; public VCFWriter writer = null;
@Argument(fullName="variants_out",shortName="varout",doc="Please use --out instead",required=false)
@Deprecated
public boolean varout;
@Argument(fullName = "verbose_mode", shortName = "verbose", doc = "File to print all of the annotated and detailed debugging output", required = false) @Argument(fullName = "verbose_mode", shortName = "verbose", doc = "File to print all of the annotated and detailed debugging output", required = false)
protected File verboseFile = null; protected File verboseFile = null;

View File

@ -23,7 +23,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest {
@Test @Test
public void testMultiSamplePilot1Joint() { public void testMultiSamplePilot1Joint() {
WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec(
baseCommand + " -I " + validationDataLocation + "low_coverage_CEU.chr1.10k-11k.bam -varout %s -L 1:10,022,000-10,025,000", 1, baseCommand + " -I " + validationDataLocation + "low_coverage_CEU.chr1.10k-11k.bam -o %s -L 1:10,022,000-10,025,000", 1,
Arrays.asList("99ff7d7031cc5038ec95f7872311c6b5")); Arrays.asList("99ff7d7031cc5038ec95f7872311c6b5"));
executeTest("testMultiSamplePilot1 - Joint Estimate", spec); executeTest("testMultiSamplePilot1 - Joint Estimate", spec);
} }
@ -31,7 +31,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest {
@Test @Test
public void testMultiSamplePilot2Joint() { public void testMultiSamplePilot2Joint() {
WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec(
baseCommand + " -I " + validationDataLocation + "pilot2_daughters.chr20.10k-11k.bam -varout %s -L 20:10,000,000-10,050,000", 1, baseCommand + " -I " + validationDataLocation + "pilot2_daughters.chr20.10k-11k.bam -o %s -L 20:10,000,000-10,050,000", 1,
Arrays.asList("497ac35ab217d5c0c21ee7733219ef5d")); Arrays.asList("497ac35ab217d5c0c21ee7733219ef5d"));
executeTest("testMultiSamplePilot2 - Joint Estimate", spec); executeTest("testMultiSamplePilot2 - Joint Estimate", spec);
} }
@ -39,7 +39,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest {
@Test @Test
public void testSingleSamplePilot2Joint() { public void testSingleSamplePilot2Joint() {
WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec(
baseCommand + " -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -varout %s -L 1:10,000,000-10,100,000", 1, baseCommand + " -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -o %s -L 1:10,000,000-10,100,000", 1,
Arrays.asList("29670c1c6ae4a1e7fc27c4d78c434a72")); Arrays.asList("29670c1c6ae4a1e7fc27c4d78c434a72"));
executeTest("testSingleSamplePilot2 - Joint Estimate", spec); executeTest("testSingleSamplePilot2 - Joint Estimate", spec);
} }
@ -55,17 +55,17 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest {
String md5 = "c6a4347807f624c2a31fb95080ed68b8"; String md5 = "c6a4347807f624c2a31fb95080ed68b8";
WalkerTest.WalkerTestSpec spec1 = new WalkerTest.WalkerTestSpec( WalkerTest.WalkerTestSpec spec1 = new WalkerTest.WalkerTestSpec(
baseCommand + " -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -varout %s -L 1:10,000,000-10,075,000", 1, baseCommand + " -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -o %s -L 1:10,000,000-10,075,000", 1,
Arrays.asList(md5)); Arrays.asList(md5));
executeTest("test parallelization (single thread)", spec1); executeTest("test parallelization (single thread)", spec1);
WalkerTest.WalkerTestSpec spec2 = new WalkerTest.WalkerTestSpec( WalkerTest.WalkerTestSpec spec2 = new WalkerTest.WalkerTestSpec(
baseCommand + " -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -varout %s -L 1:10,000,000-10,075,000 -nt 2", 1, baseCommand + " -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -o %s -L 1:10,000,000-10,075,000 -nt 2", 1,
Arrays.asList(md5)); Arrays.asList(md5));
executeTest("test parallelization (2 threads)", spec2); executeTest("test parallelization (2 threads)", spec2);
WalkerTest.WalkerTestSpec spec3 = new WalkerTest.WalkerTestSpec( WalkerTest.WalkerTestSpec spec3 = new WalkerTest.WalkerTestSpec(
baseCommand + " -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -varout %s -L 1:10,000,000-10,075,000 -nt 4", 1, baseCommand + " -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -o %s -L 1:10,000,000-10,075,000 -nt 4", 1,
Arrays.asList(md5)); Arrays.asList(md5));
executeTest("test parallelization (4 threads)", spec3); executeTest("test parallelization (4 threads)", spec3);
} }
@ -87,7 +87,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest {
for ( Map.Entry<String, String> entry : e.entrySet() ) { for ( Map.Entry<String, String> entry : e.entrySet() ) {
WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec(
baseCommand + " -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -varout %s -L 1:10,000,000-10,010,000 " + entry.getKey(), 1, baseCommand + " -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -o %s -L 1:10,000,000-10,010,000 " + entry.getKey(), 1,
Arrays.asList(entry.getValue())); Arrays.asList(entry.getValue()));
executeTest(String.format("testParameter[%s]", entry.getKey()), spec); executeTest(String.format("testParameter[%s]", entry.getKey()), spec);
} }
@ -96,12 +96,12 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest {
@Test @Test
public void testConfidence() { public void testConfidence() {
WalkerTest.WalkerTestSpec spec1 = new WalkerTest.WalkerTestSpec( WalkerTest.WalkerTestSpec spec1 = new WalkerTest.WalkerTestSpec(
baseCommand + " -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -varout %s -L 1:10,000,000-10,010,000 -stand_call_conf 10 ", 1, baseCommand + " -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -o %s -L 1:10,000,000-10,010,000 -stand_call_conf 10 ", 1,
Arrays.asList("0937f45888cab1aacfa129d45d82384f")); Arrays.asList("0937f45888cab1aacfa129d45d82384f"));
executeTest("testConfidence1", spec1); executeTest("testConfidence1", spec1);
WalkerTest.WalkerTestSpec spec2 = new WalkerTest.WalkerTestSpec( WalkerTest.WalkerTestSpec spec2 = new WalkerTest.WalkerTestSpec(
baseCommand + " -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -varout %s -L 1:10,000,000-10,010,000 -stand_emit_conf 10 ", 1, baseCommand + " -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -o %s -L 1:10,000,000-10,010,000 -stand_emit_conf 10 ", 1,
Arrays.asList("99419b1852b744092bc7418747dc78f3")); Arrays.asList("99419b1852b744092bc7418747dc78f3"));
executeTest("testConfidence2", spec2); executeTest("testConfidence2", spec2);
} }
@ -119,7 +119,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest {
for ( Map.Entry<Double, String> entry : e.entrySet() ) { for ( Map.Entry<Double, String> entry : e.entrySet() ) {
WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec(
baseCommand + " -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -varout %s -L 1:10,000,000-10,100,000 --heterozygosity " + entry.getKey(), 1, baseCommand + " -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -o %s -L 1:10,000,000-10,100,000 --heterozygosity " + entry.getKey(), 1,
Arrays.asList(entry.getValue())); Arrays.asList(entry.getValue()));
executeTest(String.format("testHeterozyosity[%s]", entry.getKey()), spec); executeTest(String.format("testHeterozyosity[%s]", entry.getKey()), spec);
} }
@ -139,7 +139,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest {
for ( Map.Entry<String, String> entry : e.entrySet() ) { for ( Map.Entry<String, String> entry : e.entrySet() ) {
WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec(
baseCommand + " -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -varout %s -L 1:10,000,000-10,100,000 -bm " + entry.getKey(), 1, baseCommand + " -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.SLX.bam -o %s -L 1:10,000,000-10,100,000 -bm " + entry.getKey(), 1,
Arrays.asList(entry.getValue())); Arrays.asList(entry.getValue()));
executeTest(String.format("testOtherBaseCallModel[%s]", entry.getKey()), spec); executeTest(String.format("testOtherBaseCallModel[%s]", entry.getKey()), spec);
} }
@ -155,7 +155,7 @@ public class UnifiedGenotyperIntegrationTest extends WalkerTest {
WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec( WalkerTest.WalkerTestSpec spec = new WalkerTest.WalkerTestSpec(
baseCommand + baseCommand +
" -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.allTechs.bam" + " -I " + validationDataLocation + "NA12878.1kg.p2.chr1_10mb_11_mb.allTechs.bam" +
" -varout %s" + " -o %s" +
" -L 1:10,000,000-10,100,000", " -L 1:10,000,000-10,100,000",
1, 1,
Arrays.asList("ce22e33e550ea62d8786deb38a70049a")); Arrays.asList("ce22e33e550ea62d8786deb38a70049a"));