diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/AssociationContext.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/AssociationContext.java index 44d3aa2ba..cfd0c249f 100755 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/AssociationContext.java +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/AssociationContext.java @@ -1,42 +1,74 @@ package org.broadinstitute.sting.oneoffprojects.walkers.association; -import java.lang.reflect.InvocationTargetException; -import java.util.*; +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; /** - * @Author chartl - * @Date 2011-02-23 - * A general context for windowed association + * Created by IntelliJ IDEA. + * User: chartl + * Date: 3/2/11 + * Time: 11:58 AM + * To change this template use File | Settings | File Templates. */ -public abstract class AssociationContext { - protected Class clazz; - protected List window; +public abstract class AssociationContext { - public AssociationContext( Class zclaz ) { - window = new ArrayList(getWindowSize()); - clazz = zclaz; + protected List> window; + + public AssociationContext() { + window = new ArrayList>(getWindowSize()); } - public X map(MapExtender e) throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException, ClassCastException { - return (X) clazz.getConstructor(new Class[] {MapExtender.class}).newInstance(new Object[] {e}); - } + // specifies size of window + public abstract int getWindowSize(); + // specifies how many bases to wait until next test + public abstract int slideByValue(); + + // specifies whether to use previously seen reads + public abstract boolean usePreviouslySeenReads(); + + // specifies the map from a sample's pileup to the data we want to test + public abstract Object map(ReadBackedPileup rbp); + + // specifies how to take the per-sample data and reduce them into testable pairs + public abstract Map reduce(List> win); + + // do we filter the current location (e.g. omit from window) public boolean filter(MapExtender m) { return true; } - public void reduce(X context) { - window.add(context); + public Map mapLocus(MapExtender extender) { + Map pileups; + if ( ! usePreviouslySeenReads() ) { + pileups = extender.getReadFilteredPileup(); + } else { + pileups = extender.getFullPileup(); + } + Map maps = new HashMap(pileups.size()); + for ( Map.Entry samPileup : pileups.entrySet() ) { + maps.put(samPileup.getKey(),map(samPileup.getValue())); + } + + return maps; + } + + + public void addData(Map sampleData) { + window.add(sampleData); } - public abstract int getWindowSize(); - public abstract int slideByValue(); public boolean isFull() { return window.size() >= getWindowSize(); } public void slide() { - ArrayList newWindow = new ArrayList((window.subList(slideByValue(),window.size()))); + ArrayList> newWindow = new ArrayList>((window.subList(slideByValue(),window.size()))); newWindow.ensureCapacity(getWindowSize()); window = newWindow; } -} \ No newline at end of file +} diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/AssociationContextAtom.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/AssociationContextAtom.java deleted file mode 100755 index 522943114..000000000 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/AssociationContextAtom.java +++ /dev/null @@ -1,13 +0,0 @@ -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) { - - } -} diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/AssociationTestRunner.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/AssociationTestRunner.java index 39b6bfd3a..2eb092d34 100755 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/AssociationTestRunner.java +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/AssociationTestRunner.java @@ -5,7 +5,8 @@ import java.util.List; import cern.jet.random.Normal; import cern.jet.random.StudentT; -import org.broadinstitute.sting.oneoffprojects.walkers.association.interfaces.*; +import org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol.*; +import org.broadinstitute.sting.utils.MathUtils; /** * Created by IntelliJ IDEA. @@ -34,17 +35,19 @@ public class AssociationTestRunner { return results; } - public static String runStudentT(TStatistic context) { - double t = context.getTStatistic(); - StudentT studentT = new StudentT(context.getDegreesOfFreedom(),null); + public static String runStudentT(TStatistic context) { /* + StudentT studentT = new StudentT(dfnum/dfdenom,null); double p = t < 0 ? 2*studentT.cdf(t) : 2*(1-studentT.cdf(t)); - return String.format("T: %.2f\tP: %.2e",t,p); + return String.format("T: %.2f\tP: %.2e",t,p);*/ + return null; } - public static String runZ(ZStatistic context) { - double z = context.getZStatistic(); + public static String runZ(ZStatistic context) { /* + double z = num/Math.sqrt(se); double p = z < 0 ? 2*standardNormal.cdf(z) : 2*(1-standardNormal.cdf(z)); - return String.format("Z: %.2f\tP: %.2e",z,p); + return String.format("Z: %.2f\tP: %.2e",z,p);*/ + + return null; } public static String runFisherExact(AssociationContext context) { diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/MapExtender.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/MapExtender.java index a9153aad3..c731aaa7a 100755 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/MapExtender.java +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/MapExtender.java @@ -1,11 +1,16 @@ package org.broadinstitute.sting.oneoffprojects.walkers.association; +import net.sf.samtools.SAMRecord; +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 org.broadinstitute.sting.utils.pileup.PileupElement; +import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; +import org.broadinstitute.sting.utils.pileup.ReadBackedPileupImpl; -import java.util.Map; +import java.util.*; /** * @Author chartl @@ -13,9 +18,12 @@ import java.util.Map; * Holds multiple map contexts for use in the regional association walker */ public class MapExtender { - + static StratifiedAlignmentContext.StratifiedContextType TYPE = StratifiedAlignmentContext.StratifiedContextType.COMPLETE; + // hold on to these -- atoms may want access to the tracker or other context types private MapHolder previous = null; private MapHolder current = null; + private Map fullPileup = null; + private Map readFilteredPileup = null; public MapExtender() { // no need to do anything @@ -24,8 +32,41 @@ public class MapExtender { public void set(MapHolder holder) { previous = current; current = holder; + + Map prevPileup = fullPileup; + fullPileup = new HashMap(); + readFilteredPileup = new HashMap(); + + if ( current != null ) { + for ( Map.Entry sac : current.getContext().entrySet() ) { + AlignmentContext context = sac.getValue().getContext(TYPE); + if ( context.hasBasePileup() ) { + fullPileup.put(sac.getKey(),context.getBasePileup()); + } else if ( context.hasExtendedEventPileup() ) { + fullPileup.put(sac.getKey(),context.getExtendedEventPileup()); + } + + if ( prevPileup != null ) { + + List filtElems = new ArrayList(fullPileup.get(sac.getKey()).size()); + Set seenReads = prevPileup.containsKey(sac.getKey()) ? new HashSet(prevPileup.get(sac.getKey()).getReads()) : new HashSet(0); + for ( PileupElement e : fullPileup.get(sac.getKey()) ) { + if ( ! seenReads.contains(e.getRead()) ) { + filtElems.add(e); + } + } + + readFilteredPileup.put(sac.getKey(),new ReadBackedPileupImpl(current.getRef().getLocus(),filtElems)); + } else { + readFilteredPileup = fullPileup; + } + } + } } + public Map getFullPileup() { return fullPileup; } + public Map getReadFilteredPileup(){ return readFilteredPileup; } + public Map getPreviousContext() { return previous != null ? previous.getContext() : null; } diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/RegionalAssociationHandler.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/RegionalAssociationHandler.java index e9cbf5c47..4ec4945ad 100755 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/RegionalAssociationHandler.java +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/RegionalAssociationHandler.java @@ -2,7 +2,6 @@ package org.broadinstitute.sting.oneoffprojects.walkers.association; import org.broadinstitute.sting.utils.GenomeLoc; -import java.lang.reflect.InvocationTargetException; import java.util.*; /** @@ -31,10 +30,10 @@ public class RegionalAssociationHandler { * @reduce: (List,AssociationContext) --> List * @implementation: just append */ - public void runMapReduce() throws NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException { + public void runMapReduce() { for ( AssociationContext w : associations ) { if ( w.filter(maps) ) { - w.reduce(w.map(maps)); + w.addData(w.mapLocus(maps)); } } } diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/RegionalAssociationWalker.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/RegionalAssociationWalker.java index ad469539f..387298ca3 100755 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/RegionalAssociationWalker.java +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/RegionalAssociationWalker.java @@ -7,8 +7,6 @@ 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.oneoffprojects.walkers.association.modules.LowMappingQuality; -import org.broadinstitute.sting.oneoffprojects.walkers.association.modules.LowMappingQualityAtom; import org.broadinstitute.sting.utils.exceptions.StingException; import org.broadinstitute.sting.utils.exceptions.UserException; @@ -59,11 +57,8 @@ public class RegionalAssociationWalker extends LocusWalker getAssociations() { diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/interfaces/TStatistic.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/interfaces/TStatistic.java deleted file mode 100755 index ba0230f7e..000000000 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/interfaces/TStatistic.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.broadinstitute.sting.oneoffprojects.walkers.association.interfaces; - -import org.broadinstitute.sting.utils.collections.Pair; - -/** - * 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(); - public abstract double getDegreesOfFreedom(); -} \ No newline at end of file diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/interfaces/ZStatistic.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/interfaces/ZStatistic.java deleted file mode 100755 index b2c74d65e..000000000 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/interfaces/ZStatistic.java +++ /dev/null @@ -1,12 +0,0 @@ -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(); -} \ No newline at end of file diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/modules/InsertSizeDistribution.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/modules/InsertSizeDistribution.java new file mode 100755 index 000000000..d1f6fdf6a --- /dev/null +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/modules/InsertSizeDistribution.java @@ -0,0 +1,28 @@ +package org.broadinstitute.sting.oneoffprojects.walkers.association.modules; + +import org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol.TStatistic; +import org.broadinstitute.sting.utils.pileup.PileupElement; +import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +/** + * @author chartl + */ +public class InsertSizeDistribution extends TStatistic { + public int getWindowSize() { return 100; } + public int slideByValue() { return 10; } + public boolean usePreviouslySeenReads() { return false; } + + public Collection map(ReadBackedPileup pileup) { + List insertSizes = new ArrayList(pileup.size()); + for ( PileupElement e : pileup ) { + insertSizes.add(e.getRead().getInferredInsertSize()); + } + + return (Collection) insertSizes; + } + +} diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/modules/LowMappingQuality.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/modules/LowMappingQuality.java deleted file mode 100755 index 86234be8a..000000000 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/modules/LowMappingQuality.java +++ /dev/null @@ -1,89 +0,0 @@ -package org.broadinstitute.sting.oneoffprojects.walkers.association.modules; - -import org.broadinstitute.sting.gatk.datasources.sample.Sample; -import org.broadinstitute.sting.oneoffprojects.walkers.association.AssociationContext; -import org.broadinstitute.sting.oneoffprojects.walkers.association.AssociationContextAtom; -import org.broadinstitute.sting.oneoffprojects.walkers.association.interfaces.TStatistic; -import org.broadinstitute.sting.oneoffprojects.walkers.association.interfaces.ZStatistic; -import org.broadinstitute.sting.utils.MathUtils; -import org.broadinstitute.sting.utils.collections.Pair; - -import java.util.*; - -/** - * Created by IntelliJ IDEA. - * User: chartl - * Date: Feb 24, 2011 - * Time: 1:49:37 PM - * To change this template use File | Settings | File Templates. - */ -public class LowMappingQuality extends AssociationContext implements ZStatistic, TStatistic { - private double df = -1; - - public LowMappingQuality(Class atomClass ) { - super(atomClass); - } - - public LowMappingQuality() { - this(LowMappingQualityAtom.class); - } - - public int getWindowSize() { return 20; } - public int slideByValue() { return 5; } - - public double getZStatistic() { - int case_low= 0; - int case_tot = 0; - int ctrl_low = 0; - int ctrl_tot = 0; - for ( LowMappingQualityAtom atom : window ) { - Map> ccc = atom.getCaseControlCounts(); - case_low += ccc.get("case").first; - case_tot += ccc.get("case").second; - ctrl_low += ccc.get("control").first; - ctrl_tot += ccc.get("control").second; - } - double p_case = ( (double) case_low)/case_tot; - double p_ctrl = ((double) ctrl_low)/ctrl_tot; - double p_pool = ( (double) case_low + (double) ctrl_low )/(case_tot+ctrl_tot); - double SE = Math.sqrt( p_pool*(1-p_pool)*( 1/((double)ctrl_tot) + 1/((double)case_tot) )); - return (p_case - p_ctrl)/SE; - } - - public double getTStatistic() { - // todo -- running average is unnecessary and inefficient here, but was quick to write - MathUtils.RunningAverage cases = new MathUtils.RunningAverage(); - MathUtils.RunningAverage controls = new MathUtils.RunningAverage(); - Set caseSamples = new HashSet(); - Set controlSamples = new HashSet(); - for ( LowMappingQualityAtom atom : window ) { - Map> caseControlQuals = atom.getCaseControlMappingQuals(); - cases.addAll((Collection) caseControlQuals.get("case")); - controls.addAll((Collection) caseControlQuals.get("control")); - for ( Sample s : atom.getSamples() ) { - if ( s.getProperty("cohort").equals("case") ) { - caseSamples.add(s); - } - if ( s.getProperty("cohort").equals("control")) { - controlSamples.add(s); - } - } - } - double a = cases.var()/caseSamples.size(); - double b = controls.var()/controlSamples.size(); - - df = ( a + b )/( a*a/(caseSamples.size()-1) + b*b/(controlSamples.size()-1)); - - return ( cases.mean() - controls.mean() )/Math.sqrt( (cases.var()/caseSamples.size()) + (controls.var()/controlSamples.size())); - } - - // todo -- this is super hacky - public double getDegreesOfFreedom() { - if ( df < 0 ) { - getTStatistic(); - } - double holder = df; - df = -1; - return holder; - } -} diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/modules/LowMappingQualityAtom.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/modules/LowMappingQualityAtom.java deleted file mode 100755 index 200ee9ec6..000000000 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/modules/LowMappingQualityAtom.java +++ /dev/null @@ -1,143 +0,0 @@ -package org.broadinstitute.sting.oneoffprojects.walkers.association.modules; - -import org.broadinstitute.sting.gatk.contexts.StratifiedAlignmentContext; -import org.broadinstitute.sting.gatk.datasources.sample.Sample; -import org.broadinstitute.sting.oneoffprojects.walkers.association.AssociationContextAtom; -import org.broadinstitute.sting.oneoffprojects.walkers.association.MapExtender; -import org.broadinstitute.sting.oneoffprojects.walkers.association.MapHolder; -import org.broadinstitute.sting.utils.collections.Pair; -import org.broadinstitute.sting.utils.pileup.PileupElement; - -import java.util.*; - -/** - * Created by IntelliJ IDEA. - * User: chartl - * Date: Feb 24, 2011 - * Time: 1:49:55 PM - * To change this template use File | Settings | File Templates. - */ -public class LowMappingQualityAtom extends AssociationContextAtom { - private static int LOW_THRESH = 5; - private static StratifiedAlignmentContext.StratifiedContextType TYPE = StratifiedAlignmentContext.StratifiedContextType.COMPLETE; - - protected Map> stratifiedCounts; - protected Map> mappingQualities; - - public LowMappingQualityAtom(MapExtender e) { - super(e); - stratifiedCounts = new HashMap>(); - mappingQualities = new HashMap>(); - for ( Sample s : e.getContext().keySet() ) { - makeCounts(s,e.getPreviousContext(),e.getContext()); - } - } - - public void makeCounts( Sample sample, Map prev, Map cur ) { - int low = 0; - int tot = 0; - if ( cur != null && cur.get(sample) != null && cur.get(sample).getContext(TYPE) != null) { - HashSet rnames; - List mapQuals = new ArrayList(cur.size()); - if ( prev != null && prev.get(sample) != null && prev.get(sample).getContext(TYPE) != null) { - rnames = new HashSet(prev.get(sample).getContext(TYPE).size()); - if ( prev.get(sample).getContext(TYPE).hasBasePileup()) { - for ( PileupElement e : prev.get(sample).getContext(TYPE).getBasePileup() ) { - rnames.add(e.getRead().getReadName()); - } - } - if ( prev.get(sample).getContext(TYPE).hasExtendedEventPileup()) { - for ( PileupElement e : prev.get(sample).getContext(TYPE).getExtendedEventPileup() ) { - rnames.add(e.getRead().getReadName()); - } - } - } else { - rnames = new HashSet(0); - } - if ( cur.get(sample).getContext(TYPE).hasBasePileup()) { - for ( PileupElement e : cur.get(sample).getContext(TYPE).getBasePileup() ) { - if ( ! rnames.contains(e.getRead().getReadName()) ) { - ++tot; - if ( e.getMappingQual() < LOW_THRESH ) { - ++low; - } - mapQuals.add(e.getMappingQual()); - } - } - } - if ( cur.get(sample).getContext(TYPE).hasExtendedEventPileup()) { - for ( PileupElement e : cur.get(sample).getContext(TYPE).getExtendedEventPileup() ) { - if ( ! rnames.contains(e.getRead().getReadName()) ) { - ++tot; - if ( e.getMappingQual() < LOW_THRESH ) { - ++low; - } - mapQuals.add(e.getMappingQual()); - } - } - } - - stratifiedCounts.put(sample,new Pair(low,tot)); - mappingQualities.put(sample,mapQuals); - } - - } - - public Map> getCounts() { - return stratifiedCounts; - } - - public Map> getCaseControlCounts() { - Pair cases = new Pair(0,0); - Pair controls = new Pair(0,0); - for ( Map.Entry> e : stratifiedCounts.entrySet() ) { - if ( e.getKey().getProperty("cohort").equals("case") ) { - cases.first += e.getValue().first; - cases.second += e.getValue().second; - } - if ( e.getKey().getProperty("cohort").equals("control") ) { - controls.first += e.getValue().first; - controls.second += e.getValue().second; - } - } - - Map> caseControlCounts= new HashMap>(2); - caseControlCounts.put("case",cases); - caseControlCounts.put("control",controls); - return caseControlCounts; - } - - public Map> getCaseControlMappingQuals() { - int caseSize = 0; - int controlSize = 0; - for ( Map.Entry> v : mappingQualities.entrySet() ) { - if ( v.getKey().getProperty("cohort").equals("case") ) { - caseSize += v.getValue().size(); - } - if ( v.getKey().getProperty("cohort").equals("control") ) { - controlSize += v.getValue().size(); - } - } - List caseQuals = new ArrayList(caseSize); - List controlQuals = new ArrayList(controlSize); - for ( Map.Entry> v : mappingQualities.entrySet() ) { - if ( v.getKey().getProperty("cohort").equals("case") ) { - caseQuals.addAll(v.getValue()); - } - - if ( v.getKey().getProperty("cohort").equals("control")) { - controlQuals.addAll(v.getValue()); - } - } - - Map> caseControlQuals = new HashMap>(2); - caseControlQuals.put("case",caseQuals); - caseControlQuals.put("control",controlQuals); - return caseControlQuals; - } - - public Set getSamples() { - return stratifiedCounts.keySet(); - } - -} diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/modules/MateOtherContig.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/modules/MateOtherContig.java new file mode 100755 index 000000000..cdc6513df --- /dev/null +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/modules/MateOtherContig.java @@ -0,0 +1,36 @@ +package org.broadinstitute.sting.oneoffprojects.walkers.association.modules; + +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; + +/** + * Created by IntelliJ IDEA. + * User: chartl + * Date: 3/1/11 + * Time: 3:00 PM + * To change this template use File | Settings | File Templates. + */ +public class MateOtherContig extends ZStatistic { + + public int getWindowSize() { return 50; } + public int slideByValue() { return 25; } + public boolean usePreviouslySeenReads() { return false; } + + public Pair map(ReadBackedPileup pileup) { + int tot = 0; + int otherCon = 0; + for ( PileupElement e : pileup ) { + if ( e.getRead().getReadPairedFlag() ) { + ++tot; + if ( ! e.getRead().getMateReferenceIndex().equals(e.getRead().getReferenceIndex()) ) { + ++otherCon; + } + } + } + + return new Pair(tot,otherCon); + } + +} diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/modules/MateUnmapped.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/modules/MateUnmapped.java new file mode 100755 index 000000000..70cd04c1a --- /dev/null +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/modules/MateUnmapped.java @@ -0,0 +1,35 @@ +package org.broadinstitute.sting.oneoffprojects.walkers.association.modules; + +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; + +/** + * Created by IntelliJ IDEA. + * User: chartl + * Date: 3/2/11 + * Time: 2:09 PM + * To change this template use File | Settings | File Templates. + */ +public class MateUnmapped extends ZStatistic { + + public Pair map(ReadBackedPileup pileup) { + int numMatedReads = 0; + int numPairUnmapped = 0; + for (PileupElement e : pileup ) { + if ( e.getRead().getProperPairFlag() ) { + ++numMatedReads; + if ( e.getRead().getMateUnmappedFlag() ) { + ++numPairUnmapped; + } + } + } + + return new Pair(numMatedReads,numPairUnmapped); + } + + public int getWindowSize() { return 100; } + public int slideByValue() { return 25; } + public boolean usePreviouslySeenReads() { return false; } +} diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/statistics/casecontrol/CaseControl.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/statistics/casecontrol/CaseControl.java new file mode 100755 index 000000000..f5764ff23 --- /dev/null +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/statistics/casecontrol/CaseControl.java @@ -0,0 +1,50 @@ +package org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol; + +import org.broadinstitute.sting.gatk.datasources.sample.Sample; +import org.broadinstitute.sting.oneoffprojects.walkers.association.AssociationContext; +import org.broadinstitute.sting.utils.pileup.ReadBackedPileup; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by IntelliJ IDEA. + * @author chartl + */ +public abstract class CaseControl extends AssociationContext { + + public Map reduce(List> window) { + X accumCase = null; + X accumControl = null; + for ( Map sampleXMap : window ) { + for ( Map.Entry entry : sampleXMap.entrySet() ) { + if ( entry.getKey().getProperty("cohort").equals("case") ) { + accum(accumCase, entry.getValue()); + } else if ( entry.getKey().getProperty("cohort").equals("control") ) { + accum(accumControl,entry.getValue()); + } + } + } + + Map cohortMap = new HashMap(2); + cohortMap.put(Cohort.CASE,accumCase); + cohortMap.put(Cohort.CONTROL,accumControl); + return cohortMap; + } + + protected X accum(X left, X right) { + if ( left == null ) { + return right; + } + if ( right == null ) { + return left; + } + return add(left,right); + } + + public abstract X map(ReadBackedPileup rbp); + public abstract X add(X left, X right); + + public enum Cohort { CASE,CONTROL } +} diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/interfaces/FisherExact.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/statistics/casecontrol/FisherExact.java similarity index 93% rename from java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/interfaces/FisherExact.java rename to java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/statistics/casecontrol/FisherExact.java index 6c3dfd0d0..1728f4782 100755 --- a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/interfaces/FisherExact.java +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/statistics/casecontrol/FisherExact.java @@ -1,4 +1,4 @@ -package org.broadinstitute.sting.oneoffprojects.walkers.association.interfaces; +package org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol; /** * Created by IntelliJ IDEA. diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/statistics/casecontrol/TStatistic.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/statistics/casecontrol/TStatistic.java new file mode 100755 index 000000000..650f8ff4e --- /dev/null +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/statistics/casecontrol/TStatistic.java @@ -0,0 +1,37 @@ +package org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.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 + * Date: Feb 24, 2011 + * Time: 12:58:16 PM + * To change this template use File | Settings | File Templates. + */ +public abstract class TStatistic extends CaseControl> { + + public abstract Collection map(ReadBackedPileup rbp ); + + public Collection add(Collection left, Collection right) { + if ( left instanceof List) { + ((List) left).addAll(right); + return left; + } else if ( left instanceof Set ) { + ((Set) left).addAll(right); + return left; + } else { + List newList = new ArrayList(left.size()+right.size()); + newList.addAll(left); + newList.addAll(right); + return newList; + } + } + +} \ No newline at end of file diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/statistics/casecontrol/UStatistic.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/statistics/casecontrol/UStatistic.java new file mode 100755 index 000000000..dab1e1122 --- /dev/null +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/statistics/casecontrol/UStatistic.java @@ -0,0 +1,36 @@ +package org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.casecontrol; + +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 + * Date: 3/2/11 + * Time: 1:53 PM + * To change this template use File | Settings | File Templates. + */ +public abstract class UStatistic extends CaseControl> { + + public abstract Collection map(ReadBackedPileup rbp ); + + public Collection add(Collection left, Collection right) { + if ( left instanceof List) { + ((List) left).addAll(right); + return left; + } else if ( left instanceof Set) { + ((Set) left).addAll(right); + return left; + } else { + List newList = new ArrayList(left.size()+right.size()); + newList.addAll(left); + newList.addAll(right); + return newList; + } + } + +} diff --git a/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/statistics/casecontrol/ZStatistic.java b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/statistics/casecontrol/ZStatistic.java new file mode 100755 index 000000000..a0bdccfa6 --- /dev/null +++ b/java/src/org/broadinstitute/sting/oneoffprojects/walkers/association/statistics/casecontrol/ZStatistic.java @@ -0,0 +1,26 @@ +package org.broadinstitute.sting.oneoffprojects.walkers.association.statistics.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 + * Date: Feb 24, 2011 + * Time: 12:58:38 PM + * To change this template use File | Settings | File Templates. + */ +public abstract class ZStatistic extends CaseControl> { + public abstract Pair map(ReadBackedPileup rbp ); + + public Pair add(Pair left, Pair right) { + return new Pair(left.first.doubleValue()+right.first.doubleValue(), + left.second.doubleValue()+right.second.doubleValue()); + } + +} \ No newline at end of file