Skip to content

Commit

Permalink
Print mean values (after burnin) to out.summary. Fixes #7.
Browse files Browse the repository at this point in the history
  • Loading branch information
trvrb committed Feb 22, 2014
1 parent fd3e07d commit 0e87cf1
Show file tree
Hide file tree
Showing 5 changed files with 90 additions and 25 deletions.
2 changes: 1 addition & 1 deletion HostPopulation.java
Expand Up @@ -512,7 +512,7 @@ public void printState(PrintStream stream) {
}

public void printHeader(PrintStream stream) {
stream.printf("\t%sDiv\t%sTmrca\t%sNetau\t%sSerialInterval\t%sAntigenicDiv\t%sN\t%sS\t%sI\t%sR\t%sCases", name, name, name, name, name, name, name, name, name, name);
stream.printf("\t%sDiversity\t%sTmrca\t%sNetau\t%sSerialInterval\t%sAntigenicDiversity\t%sN\t%sS\t%sI\t%sR\t%sCases", name, name, name, name, name, name, name, name, name, name);
}

// reset population to factory condition
Expand Down
2 changes: 1 addition & 1 deletion Parameters.java
Expand Up @@ -26,7 +26,7 @@ public class Parameters {
public static boolean repeatSim = true; // repeat simulation until endDay is reached?
public static boolean immunityReconstruction = false; // whether to print immunity reconstruction to out.immunity
public static boolean memoryProfiling = false; // requires -javaagent:classmexer.jar to run
public static double yearsFromMK = 5.0;
public static double yearsFromMK = 1.0;
public static boolean pcaSamples = false; // whether to rotate and flip virus tree
public static boolean detailedOutput = false; // whether to output out.hosts and out.viruses files enabling checkpointing
public static boolean restartFromCheckpoint = false; // whether to load population from out.hosts
Expand Down
91 changes: 79 additions & 12 deletions Simulation.java
Expand Up @@ -15,6 +15,17 @@ public class Simulation {
private double serialInterval;
private double antigenicDiversity;

private List<Double> diversityList = new ArrayList<Double>();
private List<Double> tmrcaList = new ArrayList<Double>();
private List<Double> netauList = new ArrayList<Double>();
private List<Double> serialIntervalList = new ArrayList<Double>();
private List<Double> antigenicDiversityList = new ArrayList<Double>();
private List<Double> nList = new ArrayList<Double>();
private List<Double> sList = new ArrayList<Double>();
private List<Double> iList = new ArrayList<Double>();
private List<Double> rList = new ArrayList<Double>();
private List<Double> casesList = new ArrayList<Double>();

// constructor
public Simulation() {
for (int i = 0; i < Parameters.demeCount; i++) {
Expand Down Expand Up @@ -240,7 +251,7 @@ public void printState() {
}

public void printHeader(PrintStream stream) {
stream.print("date\tdiv\ttmrca\tnetau\tserialInterval\tantigenicDiv\ttotalN\ttotalS\ttotalI\ttotalR\ttotalCases");
stream.print("date\tdiversity\ttmrca\tnetau\tserialInterval\tantigenicDiversity\ttotalN\ttotalS\ttotalI\ttotalR\ttotalCases");
for (int i = 0; i < Parameters.demeCount; i++) {
HostPopulation hp = demes.get(i);
hp.printHeader(stream);
Expand All @@ -249,14 +260,51 @@ public void printHeader(PrintStream stream) {
}

public void printState(PrintStream stream) {
if (Parameters.day > Parameters.burnin) {
stream.printf("%.4f\t%.4f\t%.4f\t%.4f\t%.5f\t%.4f\t%d\t%d\t%d\t%d\t%d", Parameters.getDate(), getDiversity(), getTmrca(), getNetau(), getSerialInterval(), getAntigenicDiversity(), getN(), getS(), getI(), getR(), getCases());
for (int i = 0; i < Parameters.demeCount; i++) {
HostPopulation hp = demes.get(i);
hp.printState(stream);
}
stream.println();
stream.printf("%.4f\t%.4f\t%.4f\t%.4f\t%.5f\t%.4f\t%d\t%d\t%d\t%d\t%d", Parameters.getDate(), getDiversity(), getTmrca(), getNetau(), getSerialInterval(), getAntigenicDiversity(), getN(), getS(), getI(), getR(), getCases());
for (int i = 0; i < Parameters.demeCount; i++) {
HostPopulation hp = demes.get(i);
hp.printState(stream);
}
stream.println();
}

public void printSummary() {

try {
File summaryFile = new File("out.summary");
summaryFile.delete();
summaryFile.createNewFile();
PrintStream summaryStream = new PrintStream(summaryFile);
summaryStream.printf("parameter\tfull\n");

summaryStream.printf("diversity\t%.4f\n", mean(diversityList));
summaryStream.printf("tmrca\t%.4f\n", mean(tmrcaList));
summaryStream.printf("netau\t%.4f\n", mean(netauList));
summaryStream.printf("serialInterval\t%.5f\n", mean(serialIntervalList));
summaryStream.printf("antigenicDiversity\t%.4f\n", mean(antigenicDiversityList));
summaryStream.printf("N\t%.4f\n", mean(nList));
summaryStream.printf("S\t%.4f\n", mean(sList));
summaryStream.printf("I\t%.4f\n", mean(iList));
summaryStream.printf("R\t%.4f\n", mean(rList));
summaryStream.printf("cases\t%.4f\n", mean(casesList));

summaryStream.close();
} catch(IOException ex) {
System.out.println("Could not write to file");
System.exit(0);
}

}

private double mean(List<Double> list) {
double mean = 0;
if(!list.isEmpty()) {
for (Double item : list) {
mean += (double) item;
}
mean /= (double) list.size();
}
return mean;
}

public void updateDiversity() {
Expand Down Expand Up @@ -289,12 +337,25 @@ public void updateDiversity() {
}

diversity /= (double) sampleCount;
tmrca /= 2.0;
antigenicDiversity /= (double) sampleCount;
tmrca /= 2.0;
netau = coalOpp / coalCount;
serialInterval /= (double) sampleCount;
antigenicDiversity /= (double) sampleCount;

}

public void pushLists() {
diversityList.add(diversity);
tmrcaList.add(tmrca);
netauList.add(netau);
serialIntervalList.add(serialInterval);
antigenicDiversityList.add(antigenicDiversity);
nList.add((double) getN());
sList.add((double) getS());
iList.add((double) getI());
rList.add((double) getR());
casesList.add((double) getCases());
}

public void resetCases() {
for (int i = 0; i < Parameters.demeCount; i++) {
Expand Down Expand Up @@ -328,7 +389,7 @@ public void run() {
seriesFile.delete();
seriesFile.createNewFile();
PrintStream seriesStream = new PrintStream(seriesFile);
System.out.println("day\tdiv\ttmrca\tnetau\tserialInterval\tantigenicDiv\tN\tS\tI\tR\tcases");
System.out.println("day\tdiversity\ttmrca\tnetau\tserialInterval\tantigenicDiversity\tN\tS\tI\tR\tcases");
printHeader(seriesStream);

for (int i = 0; i < Parameters.endDay; i++) {
Expand All @@ -338,7 +399,10 @@ public void run() {
if (Parameters.day % Parameters.printStep == 0) {
updateDiversity();
printState();
printState(seriesStream);
if (Parameters.day > Parameters.burnin) {
printState(seriesStream);
pushLists();
}
resetCases();
}

Expand All @@ -361,6 +425,9 @@ public void run() {
System.out.println("Could not write to file");
System.exit(0);
}

// Summary
printSummary();

// tree reduction
VirusTree.pruneTips();
Expand Down
18 changes: 8 additions & 10 deletions VirusTree.java
Expand Up @@ -733,20 +733,18 @@ public static double trunkOpportunity() {
public static void printMK() {

try {
File mkFile = new File("out.mk");
mkFile.delete();
mkFile.createNewFile();
PrintStream mkStream = new PrintStream(mkFile);
mkStream.printf("sideBranchMut\tsideBranchOpp\tsideBranchRate\ttrunkMut\ttrunkOpp\ttrunkRate\tmk\n");
int sideBranchMut = sideBranchMutations();
PrintStream summaryStream = new PrintStream(new FileOutputStream("out.summary", true)); // append
double sideBranchMut = (double) sideBranchMutations();
double sideBranchOpp = sideBranchOpportunity();
double sideBranchRate = sideBranchMut / sideBranchOpp;
int trunkMut = trunkMutations();
double trunkMut = (double) trunkMutations();
double trunkOpp = trunkOpportunity();
double trunkRate = trunkMut / trunkOpp;
double mk = trunkRate / sideBranchRate;
mkStream.printf("%d,%.4f,%.4f,%d,%.4f,%.4f,%.4f\n", sideBranchMut, sideBranchOpp, sideBranchRate, trunkMut, trunkOpp, trunkRate, mk);
mkStream.close();
double mkRatio = trunkRate / sideBranchRate;
summaryStream.printf("sideBranchRate\t%.4f\n", sideBranchRate);
summaryStream.printf("trunkRate\t%.4f\n", trunkRate);
summaryStream.printf("mkRatio\t%.4f\n", mkRatio);
summaryStream.close();
} catch(IOException ex) {
System.out.println("Could not write to file");
System.exit(0);
Expand Down
2 changes: 1 addition & 1 deletion parameters.yml
Expand Up @@ -15,7 +15,7 @@ netauWindow: 100 # window in days to calculate Ne*tau
repeatSim: true # repeat simulation until endDay is reached?
immunityReconstruction: false # whether to print immunity reconstruction to out.immunity
memoryProfiling: false # requires -javaagent:classmexer.jar to run
yearsFromMK: 5.0 # how many years to consider present when calculating MK
yearsFromMK: 1.0 # how many years to consider present when calculating MK
pcaSamples: false # whether to rotate and flip virus tree
detailedOutput: false # whether to output out.hosts and out.viruses files enabling checkpointing
restartFromCheckpoint: false # whether to load population from out.hosts
Expand Down

0 comments on commit 0e87cf1

Please sign in to comment.