RodBinding<T> are properly generic now.
VariantContextRodBinding removed, as RodBinding<VariantContext> is the right style now.
This commit is contained in:
parent
3b799db61a
commit
6acb4aad3b
|
|
@ -26,6 +26,7 @@
|
||||||
package org.broadinstitute.sting.commandline;
|
package org.broadinstitute.sting.commandline;
|
||||||
|
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
|
import org.broad.tribble.Feature;
|
||||||
import org.broadinstitute.sting.gatk.walkers.Multiplex;
|
import org.broadinstitute.sting.gatk.walkers.Multiplex;
|
||||||
import org.broadinstitute.sting.gatk.walkers.Multiplexer;
|
import org.broadinstitute.sting.gatk.walkers.Multiplexer;
|
||||||
import org.broadinstitute.sting.utils.classloader.JVMUtils;
|
import org.broadinstitute.sting.utils.classloader.JVMUtils;
|
||||||
|
|
@ -299,10 +300,10 @@ class RodBindingArgumentTypeDescriptor extends ArgumentTypeDescriptor {
|
||||||
ArgumentDefinition defaultDefinition = createDefaultArgumentDefinition(source);
|
ArgumentDefinition defaultDefinition = createDefaultArgumentDefinition(source);
|
||||||
String value = getArgumentValue( defaultDefinition, matches );
|
String value = getArgumentValue( defaultDefinition, matches );
|
||||||
try {
|
try {
|
||||||
// TODO: determine type of internal value via Parameter
|
|
||||||
Constructor ctor = type.getConstructor(Class.class, String.class, String.class, ParsingEngine.class);
|
|
||||||
RodBinding result = (RodBinding)ctor.newInstance(null, source.field.getName(), value, parsingEngine);
|
|
||||||
Tags tags = getArgumentTags(matches);
|
Tags tags = getArgumentTags(matches);
|
||||||
|
Constructor ctor = type.getConstructor(Class.class, String.class, String.class, Tags.class);
|
||||||
|
Class parameterType = getParameterizedTypeClass(source.field.getGenericType());
|
||||||
|
RodBinding result = (RodBinding)ctor.newInstance(parameterType, source.field.getName(), value, tags);
|
||||||
parsingEngine.addTags(result,tags);
|
parsingEngine.addTags(result,tags);
|
||||||
return result;
|
return result;
|
||||||
} catch (InvocationTargetException e) {
|
} catch (InvocationTargetException e) {
|
||||||
|
|
@ -315,6 +316,16 @@ class RodBindingArgumentTypeDescriptor extends ArgumentTypeDescriptor {
|
||||||
value, source.field.getName()));
|
value, source.field.getName()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Class getParameterizedTypeClass(Type t) {
|
||||||
|
if ( t instanceof ParameterizedType ) {
|
||||||
|
ParameterizedType parameterizedType = (ParameterizedType)t;
|
||||||
|
if ( parameterizedType.getActualTypeArguments().length != 1 )
|
||||||
|
throw new ReviewedStingException("BUG: more than 1 generic type found on class" + t);
|
||||||
|
return (Class)parameterizedType.getActualTypeArguments()[0];
|
||||||
|
} else
|
||||||
|
throw new ReviewedStingException("BUG: could not find generic type on class " + t);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,10 @@ package org.broadinstitute.sting.commandline;
|
||||||
import org.broad.tribble.Feature;
|
import org.broad.tribble.Feature;
|
||||||
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
||||||
import org.broadinstitute.sting.gatk.refdata.utils.GATKFeature;
|
import org.broadinstitute.sting.gatk.refdata.utils.GATKFeature;
|
||||||
|
import org.broadinstitute.sting.utils.GenomeLoc;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -38,14 +41,14 @@ import java.util.List;
|
||||||
public class RodBinding<T extends Feature> {
|
public class RodBinding<T extends Feature> {
|
||||||
final String variableName;
|
final String variableName;
|
||||||
final String source;
|
final String source;
|
||||||
final ParsingEngine parser;
|
final Tags tags;
|
||||||
final Class<T> type;
|
final Class<T> type;
|
||||||
|
|
||||||
protected RodBinding(Class<T> type, final String variableName, final String source, final ParsingEngine parser) {
|
public RodBinding(Class<T> type, final String variableName, final String source, final Tags tags) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.variableName = variableName;
|
this.variableName = variableName;
|
||||||
this.source = source;
|
this.source = source;
|
||||||
this.parser = parser;
|
this.tags = tags;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getVariableName() {
|
public String getVariableName() {
|
||||||
|
|
@ -56,16 +59,26 @@ public class RodBinding<T extends Feature> {
|
||||||
return source;
|
return source;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Accessors should be kept in sync with RefMetaDataTracker
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// ------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
public List<T> getValues(final RefMetaDataTracker tracker) {
|
public List<T> getValues(final RefMetaDataTracker tracker) {
|
||||||
return tracker.getValues(variableName, type);
|
return tracker.getValues(type, getVariableName());
|
||||||
|
}
|
||||||
|
public List<T> getValues(final RefMetaDataTracker tracker, final GenomeLoc onlyAtThisLoc) {
|
||||||
|
return tracker.getValues(type, getVariableName(), onlyAtThisLoc);
|
||||||
}
|
}
|
||||||
|
|
||||||
// public <T> List<T> getValues(final RefMetaDataTracker tracker, final Class<T> clazz) {
|
|
||||||
// return tracker.getValues(variableName, clazz);
|
|
||||||
// }
|
|
||||||
|
|
||||||
public T getFirstValue(final RefMetaDataTracker tracker) {
|
public T getFirstValue(final RefMetaDataTracker tracker) {
|
||||||
return tracker.getFirstValue(variableName, type);
|
return tracker.getFirstValue(type, getVariableName());
|
||||||
|
}
|
||||||
|
public T getFirstValue(final RefMetaDataTracker tracker, final GenomeLoc onlyAtThisLoc) {
|
||||||
|
return tracker.getFirstValue(type, getVariableName(), onlyAtThisLoc);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasValues(final RefMetaDataTracker tracker) {
|
public boolean hasValues(final RefMetaDataTracker tracker) {
|
||||||
|
|
@ -77,7 +90,7 @@ public class RodBinding<T extends Feature> {
|
||||||
}
|
}
|
||||||
|
|
||||||
public Tags getTags() {
|
public Tags getTags() {
|
||||||
return parser.getTags(this);
|
return tags;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
|
|
|
||||||
|
|
@ -1,78 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2011, The Broad Institute
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person
|
|
||||||
* obtaining a copy of this software and associated documentation
|
|
||||||
* files (the "Software"), to deal in the Software without
|
|
||||||
* restriction, including without limitation the rights to use,
|
|
||||||
* copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the
|
|
||||||
* Software is furnished to do so, subject to the following
|
|
||||||
* conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be
|
|
||||||
* included in all copies or substantial portions of the Software.
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
||||||
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
||||||
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
||||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
||||||
* OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.broadinstitute.sting.commandline;
|
|
||||||
|
|
||||||
import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
|
|
||||||
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
|
||||||
import org.broadinstitute.sting.utils.GenomeLoc;
|
|
||||||
import org.broadinstitute.sting.utils.variantcontext.VariantContext;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A RodBinding representing a walker argument that gets bound to a ROD track containing VariantContexts
|
|
||||||
*/
|
|
||||||
public class VariantContextRodBinding extends RodBinding {
|
|
||||||
/**
|
|
||||||
* Create a new RodBinding specialized to provide VariantContexts.
|
|
||||||
* @param variableName the name of the field in the walker that we will bind the ROD track too
|
|
||||||
* @param sourceFile the data source from which we will read the VCs
|
|
||||||
* @param parser the Engine parser used to obtain information about this argument, such as its underlying file type
|
|
||||||
*/
|
|
||||||
protected VariantContextRodBinding(final String variableName, final String sourceFile, final ParsingEngine parser) {
|
|
||||||
super(VariantContext.class, variableName, sourceFile, parser);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Forwarding method to identical tracker method
|
|
||||||
*/
|
|
||||||
public Collection<VariantContext> getVariantContexts(final RefMetaDataTracker tracker,
|
|
||||||
final GenomeLoc curLocation,
|
|
||||||
final boolean requireStartHere,
|
|
||||||
final boolean takeFirstOnly ) {
|
|
||||||
return tracker.getVariantContexts(variableName, curLocation, requireStartHere, takeFirstOnly);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Forwarding method to identical tracker method
|
|
||||||
* @param tracker
|
|
||||||
* @param curLocation
|
|
||||||
* @param requireStartHere
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public VariantContext getVariantContext(final RefMetaDataTracker tracker,
|
|
||||||
final GenomeLoc curLocation,
|
|
||||||
final boolean requireStartHere ) {
|
|
||||||
return tracker.getVariantContext(variableName, curLocation, requireStartHere);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Forwarding method to identical tracker method
|
|
||||||
*/
|
|
||||||
public VariantContext getVariantContext(final RefMetaDataTracker tracker,
|
|
||||||
final GenomeLoc curLocation) {
|
|
||||||
return tracker.getVariantContext(variableName, curLocation);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -24,6 +24,7 @@
|
||||||
|
|
||||||
package org.broadinstitute.sting.gatk.walkers.variantutils;
|
package org.broadinstitute.sting.gatk.walkers.variantutils;
|
||||||
|
|
||||||
|
import org.broad.tribble.Feature;
|
||||||
import org.broadinstitute.sting.commandline.*;
|
import org.broadinstitute.sting.commandline.*;
|
||||||
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;
|
||||||
|
|
@ -62,10 +63,10 @@ public class VariantsToTableNewRodStyle extends RodWalker<Integer, Integer> {
|
||||||
public boolean ALLOW_MISSING_DATA = false;
|
public boolean ALLOW_MISSING_DATA = false;
|
||||||
|
|
||||||
@Input(fullName="variants", shortName="V", doc="The variant file we will convert to a table", required=true)
|
@Input(fullName="variants", shortName="V", doc="The variant file we will convert to a table", required=true)
|
||||||
public VariantContextRodBinding variants;
|
public RodBinding<VariantContext> variants;
|
||||||
|
|
||||||
@Input(fullName="rodList", shortName="RL", doc="A list of ROD types that we will convert to a table", required=true)
|
// @Input(fullName="rodList", shortName="RL", doc="A list of ROD types that we will convert to a table", required=true)
|
||||||
public List<RodBinding> variantsList;
|
// public List<RodBinding<Feature>> variantsList;
|
||||||
|
|
||||||
public void initialize() {
|
public void initialize() {
|
||||||
out.println(Utils.join("\t", fieldsToTake));
|
out.println(Utils.join("\t", fieldsToTake));
|
||||||
|
|
@ -134,11 +135,11 @@ public class VariantsToTableNewRodStyle extends RodWalker<Integer, Integer> {
|
||||||
if ( tracker == null ) // RodWalkers can make funky map calls
|
if ( tracker == null ) // RodWalkers can make funky map calls
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
for ( RodBinding binding : variantsList )
|
// for ( RodBinding binding : variantsList )
|
||||||
System.out.printf("VariantList binding %s tags=%s%n", binding, getToolkit().getTags(binding).getPositionalTags());
|
// System.out.printf("VariantList binding %s tags=%s%n", binding, getToolkit().getTags(binding).getPositionalTags());
|
||||||
|
|
||||||
if ( ++nRecords < MAX_RECORDS || MAX_RECORDS == -1 ) {
|
if ( ++nRecords < MAX_RECORDS || MAX_RECORDS == -1 ) {
|
||||||
VariantContext vc = variants.getVariantContext(tracker, context.getLocation());
|
VariantContext vc = variants.getFirstValue(tracker, context.getLocation());
|
||||||
if ( (keepMultiAllelic || vc.isBiallelic()) && ( showFiltered || vc.isNotFiltered() ) ) {
|
if ( (keepMultiAllelic || vc.isBiallelic()) && ( showFiltered || vc.isNotFiltered() ) ) {
|
||||||
List<String> vals = extractFields(vc, fieldsToTake, ALLOW_MISSING_DATA);
|
List<String> vals = extractFields(vc, fieldsToTake, ALLOW_MISSING_DATA);
|
||||||
out.println(Utils.join("\t", vals));
|
out.println(Utils.join("\t", vals));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue