Make the window and slide-by values command-line accessible, and standardize for every context. Move the test classes (which are abstract association context modules) into the proper directory.

git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@5573 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
chartl 2011-04-04 22:37:12 +00:00
parent db9908ec02
commit b52c3e7e30
22 changed files with 51 additions and 97 deletions

View File

@ -86,8 +86,8 @@ public class ValidationReport extends VariantEvaluator implements StandardEval {
for ( SiteStatus y : SiteStatus.values() )
nComp += getCounts(x, y);
if ( nComp != TP + FN + FP + TN )
throw new ReviewedStingException("BUG: nComp != TP + FN + FP + TN!");
if ( nComp != TP + FN + FP + TN + CompFiltered )
throw new ReviewedStingException("BUG: nComp != TP + FN + FP + TN + CompFiltered!");
sensitivity = (100.0 * TP) / (TP + FN);
PPV = (100.0 * TP) / (TP + FP);

View File

@ -3,10 +3,7 @@ package org.broadinstitute.sting.oneoffprojects.walkers.association;
import org.broadinstitute.sting.gatk.datasources.sample.Sample;
import org.broadinstitute.sting.utils.pileup.ReadBackedPileup;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
* Created by IntelliJ IDEA.
@ -18,16 +15,23 @@ import java.util.Map;
public abstract class AssociationContext<X,Y> {
protected List<Map<Sample,Y>> window;
private final int size;
private final int slide;
public AssociationContext() {
window = new ArrayList<Map<Sample,Y>>(getWindowSize());
this(0,0);
}
// specifies size of window
public abstract int getWindowSize();
public AssociationContext(final int winSize, final int winSlide) {
window = new ArrayList<Map<Sample, Y>>(winSize);
size = winSize;
slide = winSlide;
}
// specifies how many bases to wait until next test
public abstract int slideByValue();
public AssociationContext(final RegionalAssociationWalker parent) {
this(parent.windowSize,parent.slideBy);
this.init(parent);
}
// specifies whether to use previously seen reads
public abstract boolean usePreviouslySeenReads();
@ -66,12 +70,16 @@ public abstract class AssociationContext<X,Y> {
public boolean isFull() {
return window.size() >= getWindowSize();
return window.size() >= size;
}
public void slide() {
ArrayList<Map<Sample,Y>> newWindow = new ArrayList<Map<Sample,Y>>((window.subList(slideByValue(),window.size())));
newWindow.ensureCapacity(getWindowSize());
ArrayList<Map<Sample,Y>> newWindow = new ArrayList<Map<Sample,Y>>((window.subList(slide,window.size())));
newWindow.ensureCapacity(size);
window = newWindow;
}
public int getWindowSize() {
return window.size();
}
}

View File

@ -36,12 +36,17 @@ public class RegionalAssociationWalker extends LocusWalker<MapHolder, RegionalAs
public String[] associationsToUse = null;
@Argument(doc="Change output file to bedgraph format (s p q, not STAT: s P: p Q: q",shortName="bg",fullName="bedgraph",required=false)
public boolean bedGraph = false;
@Argument(doc="Set the window size for associations to this value",shortName="w",fullName="window",required=false)
public int windowSize = 50;
@Argument(doc="Set the window sliding value for associations to this value",shortName="s",fullName="slide",required=false)
public int slideBy = 10;
@Output
@Multiplex(value=RegionalAssociationMultiplexer.class,arguments={"associationsToUse","bedGraph"})
Map<AssociationContext,PrintStream> out;
public void initialize() {
if ( windowSize < 1 ) { throw new UserException("Window size cannot be less than one."); }
for ( Sample s : getSamples() ) {
if ( s.getProperty("cohort") == null ) {
@ -76,7 +81,6 @@ public class RegionalAssociationWalker extends LocusWalker<MapHolder, RegionalAs
throw new StingException("Error in map reduce",e);
}
Map<AssociationContext,String> testsHere = rac.runTests(bedGraph);
// todo -- really awful shitty formatting
if ( testsHere.size() > 0 ) {
for ( Map.Entry<AssociationContext,String> result : testsHere.entrySet() ) {
out.get(result.getKey().getClass()).printf("%s%n",result.getValue());
@ -88,18 +92,15 @@ public class RegionalAssociationWalker extends LocusWalker<MapHolder, RegionalAs
public Set<AssociationContext> getAssociations() {
List<Class<? extends AssociationContext>> contexts = new PluginManager<AssociationContext>(AssociationContext.class).getPlugins();
if ( associationsToUse.length > 0 && associationsToUse[0].equals("ALL") ) {
HashSet<AssociationContext> allAssoc = new HashSet<AssociationContext>(contexts.size());
for ( Class<? extends AssociationContext> clazz : contexts ) {
AssociationContext context;
try {
context = clazz.newInstance();
context = clazz.getConstructor(new Class[] {RegionalAssociationWalker.class}).newInstance(new Object[] {this});
} catch (Exception e ) {
throw new StingException("The class "+clazz.getSimpleName()+" could not be instantiated",e);
}
context.init(this);
allAssoc.add(context);
}
return allAssoc;
@ -115,11 +116,10 @@ public class RegionalAssociationWalker extends LocusWalker<MapHolder, RegionalAs
for ( String s : associationsToUse ) {
AssociationContext context;
try {
context = classNameToClass.get(s).newInstance();
context = classNameToClass.get(s).getConstructor(new Class[]{RegionalAssociationWalker.class}).newInstance(new Object[] {this});
} catch ( Exception e ) {
throw new StingException("The class "+s+" could not be instantiated.",e);
}
context.init(this);
validAssociations.add(context);
}
return validAssociations;

View File

@ -1,7 +1,5 @@
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules;
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules.casecontrol;
import org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol.TStatistic;
import org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol.UStatistic;
import org.broadinstitute.sting.utils.pileup.PileupElement;
import org.broadinstitute.sting.utils.pileup.ReadBackedPileup;
@ -26,7 +24,5 @@ public class BaseQualityScore extends TStatistic {
return (Collection) baseQuals;
}
public int getWindowSize() { return 100; }
public int slideByValue() { return 10; }
public boolean usePreviouslySeenReads() { return true; }
}

View File

@ -1,4 +1,5 @@
package org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol;
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules.casecontrol;
import org.broadinstitute.sting.gatk.datasources.sample.Sample;
import org.broadinstitute.sting.oneoffprojects.walkers.association.AssociationContext;

View File

@ -1,4 +1,4 @@
package org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol;
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules.casecontrol;
/**
* Created by IntelliJ IDEA.

View File

@ -1,7 +1,5 @@
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules;
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules.casecontrol;
import org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol.TStatistic;
import org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol.UStatistic;
import org.broadinstitute.sting.utils.pileup.PileupElement;
import org.broadinstitute.sting.utils.pileup.ReadBackedPileup;
@ -12,9 +10,8 @@ import java.util.List;
/**
* @author chartl
*/
public class InsertSizeDistribution extends TStatistic {
public int getWindowSize() { return 100; }
public int slideByValue() { return 10; }
public class InsertSizeDistribution extends UStatistic {
public boolean usePreviouslySeenReads() { return false; }
public Collection<Number> map(ReadBackedPileup pileup) {

View File

@ -1,6 +1,5 @@
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules;
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules.casecontrol;
import org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol.ZStatistic;
import org.broadinstitute.sting.utils.collections.Pair;
import org.broadinstitute.sting.utils.pileup.PileupElement;
import org.broadinstitute.sting.utils.pileup.ReadBackedPileup;
@ -26,8 +25,6 @@ public class MappingQuality0 extends ZStatistic {
return new Pair<Number,Number>(mq0,total);
}
public int getWindowSize() { return 100; }
public int slideByValue() { return 10; }
public boolean usePreviouslySeenReads() { return false; }
}

View File

@ -1,6 +1,5 @@
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules;
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules.casecontrol;
import org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol.UStatistic;
import org.broadinstitute.sting.utils.pileup.PileupElement;
import org.broadinstitute.sting.utils.pileup.ReadBackedPileup;
@ -27,7 +26,5 @@ public class MateMappingQuality extends UStatistic {
return (Collection) mateMapQ;
}
public int getWindowSize() { return 100; }
public int slideByValue() { return 10; }
public boolean usePreviouslySeenReads() { return false; }
}

View File

@ -1,6 +1,5 @@
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules;
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules.casecontrol;
import org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol.ZStatistic;
import org.broadinstitute.sting.utils.collections.Pair;
import org.broadinstitute.sting.utils.pileup.PileupElement;
import org.broadinstitute.sting.utils.pileup.ReadBackedPileup;
@ -14,8 +13,6 @@ import org.broadinstitute.sting.utils.pileup.ReadBackedPileup;
*/
public class MateOtherContig extends ZStatistic {
public int getWindowSize() { return 100; }
public int slideByValue() { return 10; }
public boolean usePreviouslySeenReads() { return false; }
public Pair<Number,Number> map(ReadBackedPileup pileup) {

View File

@ -1,6 +1,5 @@
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules;
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules.casecontrol;
import org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol.ZStatistic;
import org.broadinstitute.sting.utils.collections.Pair;
import org.broadinstitute.sting.utils.pileup.PileupElement;
import org.broadinstitute.sting.utils.pileup.ReadBackedPileup;
@ -29,7 +28,5 @@ public class MateSameStrand extends ZStatistic {
return new Pair<Number,Number>(mateSameStrand,numPairs);
}
public int getWindowSize() { return 100; }
public int slideByValue() { return 10; }
public boolean usePreviouslySeenReads() { return false; }
}

View File

@ -1,6 +1,5 @@
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules;
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules.casecontrol;
import org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol.ZStatistic;
import org.broadinstitute.sting.utils.collections.Pair;
import org.broadinstitute.sting.utils.pileup.PileupElement;
import org.broadinstitute.sting.utils.pileup.ReadBackedPileup;
@ -29,7 +28,5 @@ public class MateUnmapped extends ZStatistic {
return new Pair<Number,Number>(numPairUnmapped,numMatedReads);
}
public int getWindowSize() { return 100; }
public int slideByValue() { return 10; }
public boolean usePreviouslySeenReads() { return false; }
}

View File

@ -1,9 +1,8 @@
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules;
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules.casecontrol;
import org.broadinstitute.sting.gatk.datasources.sample.Sample;
import org.broadinstitute.sting.oneoffprojects.walkers.association.MapExtender;
import org.broadinstitute.sting.oneoffprojects.walkers.association.RegionalAssociationWalker;
import org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol.UStatistic;
import org.broadinstitute.sting.utils.BaseUtils;
import org.broadinstitute.sting.utils.MathUtils;
import org.broadinstitute.sting.utils.collections.Pair;
@ -85,7 +84,5 @@ public class MismatchRate extends UStatistic {
// note: this is to satisfy the interface, and is never called due to override
public Collection<Number> map(ReadBackedPileup pileup) { return null; }
public int getWindowSize() { return 100; }
public int slideByValue() { return 10; }
public boolean usePreviouslySeenReads() { return true; }
}

View File

@ -1,6 +1,5 @@
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules;
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules.casecontrol;
import org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol.ZStatistic;
import org.broadinstitute.sting.utils.collections.Pair;
import org.broadinstitute.sting.utils.pileup.PileupElement;
import org.broadinstitute.sting.utils.pileup.ReadBackedPileup;
@ -27,7 +26,5 @@ public class ProperPairs extends ZStatistic {
return new Pair<Number,Number>(numPropPair,numReads);
}
public int getWindowSize() { return 100; }
public int slideByValue() { return 10; }
public boolean usePreviouslySeenReads() { return false; }
}

View File

@ -1,8 +1,7 @@
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules;
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules.casecontrol;
import net.sf.samtools.CigarElement;
import net.sf.samtools.CigarOperator;
import org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol.TStatistic;
import org.broadinstitute.sting.utils.pileup.PileupElement;
import org.broadinstitute.sting.utils.pileup.ReadBackedPileup;
@ -33,7 +32,5 @@ public class ReadClipping extends TStatistic {
return (Collection) clipping;
}
public int getWindowSize() { return 100; }
public int slideByValue() { return 10; }
public boolean usePreviouslySeenReads() { return false; }
}

View File

@ -1,9 +1,7 @@
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules;
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules.casecontrol;
import net.sf.samtools.CigarElement;
import net.sf.samtools.CigarOperator;
import org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol.TStatistic;
import org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol.UStatistic;
import org.broadinstitute.sting.utils.pileup.PileupElement;
import org.broadinstitute.sting.utils.pileup.ReadBackedPileup;
@ -33,7 +31,5 @@ public class ReadIndels extends UStatistic {
return (Collection) indelElements;
}
public int getWindowSize() { return 100; }
public int slideByValue() { return 10; }
public boolean usePreviouslySeenReads() { return false; }
}

View File

@ -1,7 +1,5 @@
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules;
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules.casecontrol;
import org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol.TStatistic;
import org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol.UStatistic;
import org.broadinstitute.sting.utils.pileup.PileupElement;
import org.broadinstitute.sting.utils.pileup.ReadBackedPileup;
@ -26,7 +24,5 @@ public class ReadMappingQuality extends TStatistic {
return (Collection) mapQuals;
}
public int getWindowSize() { return 100; }
public int slideByValue() { return 10; }
public boolean usePreviouslySeenReads() { return false; }
}

View File

@ -1,8 +1,7 @@
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules;
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules.casecontrol;
import org.broadinstitute.sting.gatk.datasources.sample.Sample;
import org.broadinstitute.sting.oneoffprojects.walkers.association.MapExtender;
import org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol.ZStatistic;
import org.broadinstitute.sting.utils.BaseUtils;
import org.broadinstitute.sting.utils.collections.Pair;
import org.broadinstitute.sting.utils.pileup.ReadBackedPileup;
@ -42,7 +41,5 @@ public class ReferenceMismatches extends ZStatistic {
return new Pair<Number,Number>(nonref,total);
}
public int getWindowSize() { return 100; }
public int slideByValue() { return 10; }
public boolean usePreviouslySeenReads() { return true; }
}

View File

@ -1,15 +1,10 @@
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules;
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules.casecontrol;
import org.broadinstitute.sting.gatk.datasources.sample.Sample;
import org.broadinstitute.sting.gatk.walkers.LocusWalker;
import org.broadinstitute.sting.gatk.walkers.Walker;
import org.broadinstitute.sting.oneoffprojects.walkers.association.MapExtender;
import org.broadinstitute.sting.oneoffprojects.walkers.association.RegionalAssociationWalker;
import org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol.TStatistic;
import org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol.UStatistic;
import org.broadinstitute.sting.utils.MathUtils;
import org.broadinstitute.sting.utils.collections.Pair;
import org.broadinstitute.sting.utils.exceptions.StingException;
import org.broadinstitute.sting.utils.pileup.ReadBackedPileup;
import java.util.*;
@ -75,8 +70,6 @@ public class SampleDepth extends UStatistic {
// note: this is to satisfy the interface, and is never called due to override
public Collection<Number> map(ReadBackedPileup pileup) { return null; }
public int getWindowSize() { return 100; }
public int slideByValue() { return 10; }
public boolean usePreviouslySeenReads() { return true; }

View File

@ -1,6 +1,5 @@
package org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol;
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules.casecontrol;
import org.broadinstitute.sting.utils.collections.Pair;
import org.broadinstitute.sting.utils.pileup.ReadBackedPileup;
import java.util.ArrayList;

View File

@ -1,4 +1,4 @@
package org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol;
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules.casecontrol;
import org.broadinstitute.sting.utils.pileup.ReadBackedPileup;

View File

@ -1,13 +1,8 @@
package org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol;
package org.broadinstitute.sting.oneoffprojects.walkers.association.modules.casecontrol;
import org.broadinstitute.sting.utils.collections.Pair;
import org.broadinstitute.sting.utils.pileup.ReadBackedPileup;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Set;
/**
* Created by IntelliJ IDEA.
* User: chartl