Framework for generalized association testing. Heavy lifting done in implementation of the AssociationContext(s) and AssociationContextAtom(s). Nothing really implemented.
git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@5306 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
parent
6db3210387
commit
292b421113
|
|
@ -0,0 +1,40 @@
|
||||||
|
package org.broadinstitute.sting.oneoffprojects.walkers.association;
|
||||||
|
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author chartl
|
||||||
|
* @Date 2011-02-23
|
||||||
|
* A general context for windowed association
|
||||||
|
*/
|
||||||
|
public abstract class AssociationContext<X extends AssociationContextAtom> {
|
||||||
|
private Class<? extends AssociationContextAtom> clazz;
|
||||||
|
private List<X> window;
|
||||||
|
|
||||||
|
public AssociationContext( Class<X> zclaz ) {
|
||||||
|
window = new ArrayList<X>(getWindowSize());
|
||||||
|
clazz = zclaz;
|
||||||
|
}
|
||||||
|
|
||||||
|
public X map(MapExtender e) throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException, ClassCastException {
|
||||||
|
return (X) clazz.getConstructor().newInstance(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean filter(MapExtender m) { return true; }
|
||||||
|
|
||||||
|
public void reduce(X context) {
|
||||||
|
window.add(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract int getWindowSize();
|
||||||
|
public abstract int slideByValue();
|
||||||
|
|
||||||
|
public boolean isFull() {
|
||||||
|
return window.size() >= getWindowSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void slide() {
|
||||||
|
window = window.subList(slideByValue(),window.size());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
package org.broadinstitute.sting.oneoffprojects.walkers.association;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author chartl
|
||||||
|
* @Date 2011-02-23
|
||||||
|
* general class for calculating base data for generalized association tests
|
||||||
|
*/
|
||||||
|
public abstract class AssociationContextAtom {
|
||||||
|
|
||||||
|
public AssociationContextAtom(MapExtender e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,44 @@
|
||||||
|
package org.broadinstitute.sting.oneoffprojects.walkers.association;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import org.broadinstitute.sting.oneoffprojects.walkers.association.interfaces.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by IntelliJ IDEA.
|
||||||
|
* User: chartl
|
||||||
|
* Date: Feb 24, 2011
|
||||||
|
* Time: 11:48:26 AM
|
||||||
|
* To change this template use File | Settings | File Templates.
|
||||||
|
*/
|
||||||
|
public class AssociationTestRunner {
|
||||||
|
|
||||||
|
public static List<String> runTests(AssociationContext context) {
|
||||||
|
List<String> results = new ArrayList<String>();
|
||||||
|
if ( context.getClass().isInstance(TStatistic.class)) {
|
||||||
|
results.add(runStudentT(context));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( context.getClass().isInstance(ZStatistic.class)) {
|
||||||
|
results.add(runZ(context));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( context.getClass().isInstance(FisherExact.class) ) {
|
||||||
|
results.add(runFisherExact(context));
|
||||||
|
}
|
||||||
|
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String runStudentT(AssociationContext context) {
|
||||||
|
return "Test not yet implemented";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String runZ(AssociationContext context) {
|
||||||
|
return "Test not yet implemented";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String runFisherExact(AssociationContext context) {
|
||||||
|
return "Test not yet implemented";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,52 @@
|
||||||
|
package org.broadinstitute.sting.oneoffprojects.walkers.association;
|
||||||
|
|
||||||
|
import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
|
||||||
|
import org.broadinstitute.sting.gatk.contexts.StratifiedAlignmentContext;
|
||||||
|
import org.broadinstitute.sting.gatk.datasources.sample.Sample;
|
||||||
|
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author chartl
|
||||||
|
* @Date 2011-02-23
|
||||||
|
* Holds multiple map contexts for use in the regional association walker
|
||||||
|
*/
|
||||||
|
public class MapExtender {
|
||||||
|
|
||||||
|
private MapHolder previous = null;
|
||||||
|
private MapHolder current = null;
|
||||||
|
|
||||||
|
public MapExtender() {
|
||||||
|
// no need to do anything
|
||||||
|
}
|
||||||
|
|
||||||
|
public void set(MapHolder holder) {
|
||||||
|
previous = current;
|
||||||
|
current = holder;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<Sample,StratifiedAlignmentContext> getPreviousContext() {
|
||||||
|
return previous.getContext();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ReferenceContext getPreviousRef() {
|
||||||
|
return previous.getRef();
|
||||||
|
}
|
||||||
|
|
||||||
|
public RefMetaDataTracker getPreviousTracker() {
|
||||||
|
return previous.getTracker();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<Sample,StratifiedAlignmentContext> getContext() {
|
||||||
|
return current.getContext();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ReferenceContext getReferenceContext() {
|
||||||
|
return current.getRef();
|
||||||
|
}
|
||||||
|
|
||||||
|
public RefMetaDataTracker getTracker() {
|
||||||
|
return current.getTracker();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
package org.broadinstitute.sting.oneoffprojects.walkers.association;
|
||||||
|
|
||||||
|
import org.broadinstitute.sting.gatk.contexts.AlignmentContext;
|
||||||
|
import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
|
||||||
|
import org.broadinstitute.sting.gatk.contexts.StratifiedAlignmentContext;
|
||||||
|
import org.broadinstitute.sting.gatk.datasources.sample.Sample;
|
||||||
|
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class MapHolder {
|
||||||
|
private RefMetaDataTracker tracker;
|
||||||
|
private ReferenceContext ref;
|
||||||
|
private Map<Sample, StratifiedAlignmentContext> alignments;
|
||||||
|
|
||||||
|
public MapHolder(RefMetaDataTracker t, ReferenceContext r, AlignmentContext a) {
|
||||||
|
tracker = t;
|
||||||
|
ref = r;
|
||||||
|
alignments = StratifiedAlignmentContext.splitContextBySample(a.getBasePileup());
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<Sample, StratifiedAlignmentContext> getContext() {
|
||||||
|
return alignments;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ReferenceContext getRef() {
|
||||||
|
return ref;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RefMetaDataTracker getTracker() {
|
||||||
|
return tracker;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,62 @@
|
||||||
|
package org.broadinstitute.sting.oneoffprojects.walkers.association;
|
||||||
|
|
||||||
|
import org.broadinstitute.sting.utils.GenomeLoc;
|
||||||
|
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author chartl
|
||||||
|
* @Date 2011-02-23
|
||||||
|
* A general context for windowed association
|
||||||
|
*/
|
||||||
|
public class RegionalAssociationHandler {
|
||||||
|
private MapExtender maps;
|
||||||
|
// todo -- the correct way to do this is via the PluginManager (a la VariantEval) but this is a QND implementation
|
||||||
|
private Set<AssociationContext> associations;
|
||||||
|
|
||||||
|
public RegionalAssociationHandler(Set<AssociationContext> contexts) {
|
||||||
|
maps = null;
|
||||||
|
associations = contexts;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateExtender(MapHolder mapHolder) {
|
||||||
|
maps.set(mapHolder);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Once the instances are collected; run map-reduce
|
||||||
|
* @map: MapExtender --> A child of AssociationContextAtom
|
||||||
|
* @implementation: Indirect construction via newinstance
|
||||||
|
* @reduce: (List<AssociationContext>,AssociationContext) --> List<AssociationContextAtom>
|
||||||
|
* @implementation: just append
|
||||||
|
*/
|
||||||
|
public void runMapReduce() throws NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException {
|
||||||
|
for ( AssociationContext w : associations ) {
|
||||||
|
if ( w.filter(maps) ) {
|
||||||
|
w.reduce(w.map(maps));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For those AssociationContexts with full windows:
|
||||||
|
* 1) Run their associated test(s)
|
||||||
|
* 2) Slide the windows
|
||||||
|
*/
|
||||||
|
public List<String> runTests() {
|
||||||
|
List<String> testResults = new ArrayList<String>(associations.size());
|
||||||
|
for ( AssociationContext w : associations ) {
|
||||||
|
if ( w.isFull() ) {
|
||||||
|
testResults.addAll(AssociationTestRunner.runTests(w));
|
||||||
|
w.slide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return testResults;
|
||||||
|
}
|
||||||
|
|
||||||
|
public GenomeLoc getLocation() {
|
||||||
|
return maps.getReferenceContext().getLocus();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,78 @@
|
||||||
|
package org.broadinstitute.sting.oneoffprojects.walkers.association;
|
||||||
|
|
||||||
|
import org.broadinstitute.sting.commandline.Argument;
|
||||||
|
import org.broadinstitute.sting.commandline.Output;
|
||||||
|
import org.broadinstitute.sting.gatk.contexts.AlignmentContext;
|
||||||
|
import org.broadinstitute.sting.gatk.contexts.ReferenceContext;
|
||||||
|
import org.broadinstitute.sting.gatk.refdata.RefMetaDataTracker;
|
||||||
|
import org.broadinstitute.sting.gatk.walkers.LocusWalker;
|
||||||
|
import org.broadinstitute.sting.gatk.walkers.TreeReducible;
|
||||||
|
import org.broadinstitute.sting.utils.exceptions.StingException;
|
||||||
|
|
||||||
|
import java.io.PrintStream;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author chartl
|
||||||
|
* @Date 2011-02-23
|
||||||
|
* Generalized framework for regional (windowed) associations
|
||||||
|
*/
|
||||||
|
public class RegionalAssociationWalker extends LocusWalker<MapHolder, RegionalAssociationHandler> implements TreeReducible<RegionalAssociationHandler> {
|
||||||
|
@Argument(doc="foo",shortName="AT",fullName="associationType",required=false)
|
||||||
|
public String[] associationsToUse = null;
|
||||||
|
|
||||||
|
@Output
|
||||||
|
PrintStream out;
|
||||||
|
|
||||||
|
public RegionalAssociationHandler reduceInit() {
|
||||||
|
Set<AssociationContext> validAssociations = getAssociations();
|
||||||
|
RegionalAssociationHandler wac = new RegionalAssociationHandler(validAssociations);
|
||||||
|
|
||||||
|
return wac;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MapHolder map(RefMetaDataTracker tracker, ReferenceContext ref, AlignmentContext context) {
|
||||||
|
return new MapHolder(tracker,ref,context);
|
||||||
|
}
|
||||||
|
|
||||||
|
public RegionalAssociationHandler reduce(MapHolder map, RegionalAssociationHandler rac) {
|
||||||
|
rac.updateExtender(map);
|
||||||
|
try {
|
||||||
|
rac.runMapReduce();
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new StingException("Error in map reduce",e);
|
||||||
|
}
|
||||||
|
List<String> testsHere = rac.runTests();
|
||||||
|
// todo -- really awful shitty formatting
|
||||||
|
out.printf("%s%n",rac.getLocation().toString());
|
||||||
|
for ( String s : testsHere ) {
|
||||||
|
out.printf("%s%n",s);
|
||||||
|
}
|
||||||
|
return rac;
|
||||||
|
}
|
||||||
|
|
||||||
|
private AssociationContext stringToAssociationContext(String s) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Set<AssociationContext> getAssociations() {
|
||||||
|
// todo -- this should use the package handler like variant eval
|
||||||
|
Set<AssociationContext> validAssociations = new HashSet<AssociationContext>();
|
||||||
|
for ( String s : associationsToUse ) {
|
||||||
|
validAssociations.add(stringToAssociationContext(s));
|
||||||
|
}
|
||||||
|
return validAssociations;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RegionalAssociationHandler treeReduce(RegionalAssociationHandler left, RegionalAssociationHandler right) {
|
||||||
|
// for now be dumb; in future fix the fact that left-most intervals of a 16kb shard won't see the context from
|
||||||
|
// the right-most locus of the previous shard
|
||||||
|
return right;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onTraversalDone(RegionalAssociationHandler rac) {
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
package org.broadinstitute.sting.oneoffprojects.walkers.association.interfaces;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by IntelliJ IDEA.
|
||||||
|
* User: chartl
|
||||||
|
* Date: Feb 24, 2011
|
||||||
|
* Time: 12:58:56 PM
|
||||||
|
* To change this template use File | Settings | File Templates.
|
||||||
|
*/
|
||||||
|
public interface FisherExact {
|
||||||
|
public abstract int[][] getCounts();
|
||||||
|
public abstract String[] getRowNames();
|
||||||
|
public abstract String[] getColNames();
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
package org.broadinstitute.sting.oneoffprojects.walkers.association.interfaces;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by IntelliJ IDEA.
|
||||||
|
* User: chartl
|
||||||
|
* Date: Feb 24, 2011
|
||||||
|
* Time: 12:58:16 PM
|
||||||
|
* To change this template use File | Settings | File Templates.
|
||||||
|
*/
|
||||||
|
public interface TStatistic {
|
||||||
|
public abstract double getTStatistic();
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
package org.broadinstitute.sting.oneoffprojects.walkers.association.interfaces;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by IntelliJ IDEA.
|
||||||
|
* User: chartl
|
||||||
|
* Date: Feb 24, 2011
|
||||||
|
* Time: 12:58:38 PM
|
||||||
|
* To change this template use File | Settings | File Templates.
|
||||||
|
*/
|
||||||
|
public interface ZStatistic {
|
||||||
|
public abstract double getZStatistic();
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue