package statalign.postprocess.plugins.benchmarks;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import statalign.postprocess.plugins.RNAalifoldResult;
import statalign.postprocess.utils.RNAFoldingTools;
import com.ppfold.algo.AlignmentData;
import com.ppfold.algo.FuzzyAlignment;
import com.ppfold.algo.ResultBundle;
public class Dataset implements Serializable {
public String title;
public long randomSeed = 1;
public int burnIn = 0;
public int mcmcSteps = 0;
public int samplingRate = 0;
/**
*
*/
private static final long serialVersionUID = -3205713573185024480L;
public File fastaFile;
public AlignmentData inputAlignment = new AlignmentData();
public AlignmentData mpdAlignment = new AlignmentData();
/*
public double reliabilityOnSamplingAndAveraging = -1;
public double reliabilityOnReference = -1;
public double reliabilityOnMPD = -1;
public double reliabilityOnEntropyExp = -1;
public double reliabilityOnEntropyObs = -1;
*/
public ArrayList<Double> posteriors = new ArrayList<Double>();
public double posteriorsAverage = -1;
public double mpdVsInputSim = -1;
public ArrayList<AlignmentData> sampledAlignments = new ArrayList<AlignmentData>();
public ArrayList<Double> logLikelihoods = new ArrayList<Double>();
public ArrayList<ResultBundle> sampledStructures = new ArrayList<ResultBundle>();
public ArrayList<int[]> pairedSitesProjectedSamples = new ArrayList<int[]>();
public ArrayList<int[]> projectPairedSitesOnCumulativeMatrix = new ArrayList<int[]>();
public ArrayList<FuzzyAlignment> cumulativeFuzzyAlignment = new ArrayList<FuzzyAlignment>();
public ArrayList<ResultBundle> cumulativeFuzzyExpResults = new ArrayList<ResultBundle>();
public ArrayList<ResultBundle> cumulativeFuzzyObsResults = new ArrayList<ResultBundle>();
//public ArrayList<Double> cumulativeEntropyExp = new ArrayList<Double>();
//public ArrayList<Double> cumulativeEntropyObs = new ArrayList<Double>();
//public double entropyExpSamplignAndAveraging;
//public double entropyObsSamplignAndAveraging;
public ResultBundle resultBundleReference;
public ResultBundle resultBundleMPD;
public ResultBundle resultBundleEntropyExp;
public ResultBundle resultBundleEntropyObs;
public ResultBundle resultBundlePPfold;
public double fuzzyAlignmentObsEntropyVal= 0;
public double fuzzyAlignmentObsEntropyPerc= 0;
public double fuzzyAlignmentObsEntropyMax= 0;
public double ppfoldReliabilityEntropyObs;
public double pairsOnlyReliabilityEntropyObs;
public double pairsOnlyReliabilityEntropyObsPosteriorWeighted = -1;
public double ppfoldReliabilityScoreSamplingAndAveraging = -1;
public double ppfoldReliabilityScoreSamplingAndAveragingWeighted = -1;
public double pairsOnlyReliabilityScoreSamplingAndAveragingPosteriorWeighted = -1;
public double ppfoldReliabilityMPD = -1;
public double pairsOnlyReliabilityScoreSamplingAndAveraging = -1;
public double pairsOnlyReliabilityScoreSamplingAndAveragingWeighted = -1;
public double pairsOnlyReliabilityMPD = -1;
public double pairsOnlyMPDPosteriorWeighted = -1;
public int [] pairedSites;
public int [] pairedSitesWeighted;
public int [] pairedSitesMPD; // also projected
public int [] pairedSitesPPfoldProjected;
public String pairedSitesRefSeq;
public String pairedSitesWeightedRefSeq;
public int [] pairedSitesEntropyExp;
public int [] pairedSitesEntropyObs;
//public ArrayList<RNAalifoldResult> rnaAlifoldSamples = new ArrayList<RNAalifoldResult>();
public ArrayList<int[]> pairedSitesProjectedRnaAlifoldSamples = new ArrayList<int[]>();
//public RNAalifoldResult rnaAlifoldFinal;
public int [] pairedSitesRNAalifold;
public double ppfoldReliabilityScoreRNAalifold;
public double pairsOnlyReliabilityScoreRNAalifold;
public RNAalifoldResult rnaAlifoldMPD;
//public int[] pairedSitesMPDprojected;
public RNAalifoldResult rnaAlifoldRef;
public int[] pairedSitesRNAalifoldMPDProjected;
public int[] pairedSitesRNAalifoldRefProjected;
//public int [] pairedSitesMPD;
/*public int [] samplingAndAveragingPairedSites;
public int [] refencedPairedSites;
public int [] mpdPairedSites;*/
public int [] pairedSitesCombined;
public double ppfoldReliabilityScoreCombined;
public double pairsOnlyReliabilityScoreCombined;
public ArrayList<ResultBundle> matrixFolds = new ArrayList<ResultBundle>();
public int [] pairedSitesMatrix;
public double ppfoldReliabilityScoreConsensusEvol;
public double pairsOnlyReliabilityScoreConsensusEvol;
public void saveDatasetResult(File outFile)
{
try
{
ObjectOutput out = new ObjectOutputStream(new FileOutputStream(outFile));
out.writeObject(this);
out.close();
}
catch(IOException ex)
{
ex.printStackTrace();
}
}
public static Dataset loadDatasetResult(File inFile)
{
try
{
ObjectInputStream in = new ObjectInputStream(new FileInputStream(inFile));
Dataset ret = (Dataset) in.readObject();
in.close();
return ret;
}
catch(IOException ex)
{
ex.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}