package org.seqcode.deepseq.experiments; /** * ControlledExperiment combines two Samples representing signal and control experiments. * An object of this type may be considered as a single replicate of a given ExperimentCondition. * Maintains traceback links to parent conditions, targets, and experiment types. * * @author Shaun Mahony * @version %I%, %G% */ public class ControlledExperiment { protected ExptConfig econfig; protected int index; protected Sample signal=null; //signal channel protected Sample control=null; //control channel protected double ctrlScalingRatio = 1.0; //scaling signal channel versus control channel protected double signalVsNoiseFraction= 0.0; //Fraction of reads assigned to signal in the signal channel. Init to zero to parameterize Poisson background model in the absence of a sig/noise estimate protected String condName; protected String repName; protected String name; protected ExperimentCondition myCondition=null; protected ExperimentTarget myTarget = null; protected ExperimentType myExptType= null; public ControlledExperiment(ExptConfig c, int idx, String cn, String rn, Sample sig, Sample ctrl){ econfig = c; index=idx; condName = cn; repName = rn; name = condName+":"+repName; signal=sig; control = ctrl; //Initialize with read count normalization. //Other scaling strategies (median, regression, SES) will be initialized in ExperimentCondition ctrlScalingRatio = control!=null ? (signal.getHitCount()/control.getHitCount())*econfig.getFixedScalingFactor() : 1; //Start with assumption of no signal signalVsNoiseFraction = 0.0; } //Accessors public int getIndex(){return index;} public String getName(){return name;} public String getCondName(){return condName;} public String getRepName(){return repName;} public Sample getSignal(){return signal;} public Sample getControl(){return control;} public boolean hasControl(){return control!=null;} public double getControlScaling(){return ctrlScalingRatio;} public double getSignalVsNoiseFraction(){return signalVsNoiseFraction;} public void setSignalVsNoiseFraction(double snf){signalVsNoiseFraction=snf;} public ExperimentCondition getCondition(){return myCondition;} public ExperimentTarget getTarget(){return myTarget;} public ExperimentType getExptType(){return myExptType;} public void setScaling(double s){ctrlScalingRatio = s;} public void setCondition(ExperimentCondition c){myCondition = c;} public void setTarget(ExperimentTarget t){myTarget = t;} public void setExptType(ExperimentType t){myExptType = t;} }