public static void writeLoggingJava(String fileName, XMLTag model) { try { PrintWriter PW = StringTools.OpenOutputFile(fileName); PW.println(" package VEW.Sim;"); PW.println(""); PW.println("import gnu.trove.TLongHashSet;"); PW.println("import VEW.Common.Random.*;"); PW.println("import java.io.*;"); PW.println("import java.util.zip.*;"); PW.println("import VEW.Common.XML.*;"); PW.println("import VEW.Sim.Kernel;"); PW.println("import VEW.Sim.SysVars;"); PW.println(""); PW.println("import java.util.GregorianCalendar;"); PW.println("import java.util.TimeZone;"); PW.println(""); PW.println("public class Logging {"); PW.println(""); PW.println(" public static XMLFile dataFormats;"); PW.println(" private static boolean useFloats = true;"); PW.println(" private static DataOutputStream wcFile;"); PW.println(" private static DataOutputStream phFile;"); PW.println(" private static DataOutputStream biFile;"); PW.println(" private static DataOutputStream chFile;"); PW.println(" private static DataOutputStream deFile;"); PW.println(" private static DataOutputStream[] fgFiles;"); PW.println(" private static DataOutputStream[] fgTimes;"); PW.println(" private static DataOutputStream[] lineages;"); PW.println(" private static DataOutputStream[] lifespans;"); PW.println(""); PW.println(" //private static long parishTime = 0;"); PW.println(" private static TLongHashSet[] auditIDs;"); PW.println(" private static boolean auditEnabled = false;"); PW.println(" private static XMLFile auditXMLFile = null;"); PW.println(" private static long firstSnap = 0;"); PW.println(" private static long snapSpace = 0;"); PW.println(" private static boolean newSeed = false;"); PW.println(" private static boolean useSnapRead = false;"); PW.println(" private static boolean useSnapWrite = false;"); PW.println(" public static String snapFile;"); PW.println(" private static boolean zip = true;"); PW.println(" public static int snapVersion = 740;"); PW.println(""); PW.println(" private static final TimeZone GMTTimeZone = TimeZone.getTimeZone(\"GMT\");"); PW.println( " private static final GregorianCalendar anyDate = new GregorianCalendar(GMTTimeZone);"); PW.println( " private static final GregorianCalendar compareDate = new GregorianCalendar(GMTTimeZone);"); PW.println(""); PW.println(" private static long[] fgBytesWritten;"); PW.println(""); PW.println(" /* Constants for which file category to write */"); PW.println(""); PW.println(" public static final byte CREATE = 0;"); PW.println(" public static final byte PCHANGEPARENT = 1;"); PW.println(" public static final byte PCHANGECHILD = 2;"); PW.println(" public static final byte SPLIT = 3;"); PW.println(" public static final byte MERGE = 4;"); PW.println(" public static final byte REMOVAL = 5;"); PW.println(" public static final byte INGEST = 6;"); PW.println(" public static final byte DIVIDE = 7;"); PW.println(" public static final byte CHANGE = 8;"); PW.println(""); PW.println(" /* New variables for representing fg logging types */"); PW.println(""); PW.println(" private static boolean lineage = false;"); PW.println(" private static boolean lifespan = false;"); PW.println(" private static long startLSTime = 0;"); PW.println(" private static long stopLSTime= 0;"); PW.println(""); PW.println(""); PW.println(" public static void setLineage(boolean l, long start, long end) {"); PW.println(" lineage = l;"); PW.println(" startLSTime = start;"); PW.println(" stopLSTime = end;"); PW.println(" }"); PW.println(""); PW.println(" public static void setLifespan(boolean l, long start, long end) {"); PW.println(" lifespan = l;"); PW.println(" startLSTime = start;"); PW.println(" stopLSTime = end;"); PW.println(" }"); PW.println(""); PW.println(" public static boolean getLineage() { return lineage; }"); PW.println(" public static boolean getLifespan() { return lifespan; }"); PW.println(" public static void setZip(boolean b) { zip = b; }"); PW.println(""); PW.println(" public static void setFloat(boolean b) {"); PW.println(" useFloats = b;"); PW.println( " if (dataFormats.getTag(\"format\")!=null) dataFormats.getTag(\"format\").removeFromParent();"); PW.println(" if (b) dataFormats.addTag(new XMLTag(\"format\",\"float\")); else"); PW.println(" dataFormats.addTag(new XMLTag(\"format\",\"double\"));"); PW.println(" dataFormats.write();"); PW.println(" }"); PW.println(""); PW.println(" /* Complete snapshot of current system state*/"); PW.println(""); PW.println(" public static boolean readingFromSnapshot() { return useSnapRead; }"); PW.println(""); PW.println(" public static void setSnap(long t1, long t2) {"); PW.println(" firstSnap = t1;"); PW.println(" snapSpace = t2;"); PW.println(" if (t2!=0) useSnapWrite = true;"); PW.println(" }"); PW.println(""); PW.println(" public static void setSnap(String s, boolean _newSeed) {"); PW.println(" snapFile = s;"); PW.println(" useSnapRead = true;"); PW.println(" newSeed = _newSeed;"); PW.println(" }"); PW.println(""); PW.println(" public static void writeSnapshot(String f) {"); PW.println(" try {"); PW.println( " BufferedOutputStream buffered = new BufferedOutputStream(new GZIPOutputStream(new BufferedOutputStream(new FileOutputStream(f))));"); PW.println(" DataOutputStream snapshot = new DataOutputStream(buffered);"); PW.println(" final String _snap = new String(\"VEW-CP\");"); PW.println(" for (int i=0; i<6; i++) snapshot.writeChar(_snap.charAt(i));"); PW.println(" snapshot.writeInt(snapVersion);"); PW.println(" snapshot.writeLong(Kernel.myTime);"); PW.println(" ObjectOutputStream snapObj = new ObjectOutputStream(buffered);"); PW.println(" snapObj.writeObject(Utils.rnd);"); PW.println(" snapObj.flush();"); PW.println(" Kernel.W.writePhysicsSnapshot(snapshot);"); PW.println(" Kernel.W.writeBiologicalSnapshot(snapshot);"); PW.println(" snapshot.flush();"); PW.println(" snapObj.close();"); PW.println(" snapshot.close();"); PW.println(" } catch (Exception e) { e.printStackTrace();}"); PW.println(" }"); PW.println(""); PW.println(" public static void readSnapshot() {"); PW.println(" try {"); PW.println(" // Empty system"); PW.println(" Kernel.W.clearSystem();"); PW.println(" BufferedInputStream buffered = null;"); PW.println(" if (new File(snapFile).exists()) {"); PW.println( " buffered = new BufferedInputStream(new GZIPInputStream(new BufferedInputStream(new FileInputStream(snapFile))));"); PW.println(" } else {"); PW.println(" String justFile = snapFile;"); PW.println( " while (justFile.indexOf(\"/\")>=0) justFile=justFile.substring(justFile.indexOf(\"/\")+1);"); PW.println( " while (justFile.indexOf(\"\\\\\")>=0) justFile=justFile.substring(justFile.indexOf(\"\\\\\")+1);"); PW.println( " java.util.jar.JarFile JF = new java.util.jar.JarFile(Launcher.JarPath+File.separator+\"VEW.jar\");"); PW.println(" java.util.jar.JarEntry JE = JF.getJarEntry(justFile);"); PW.println( " buffered = new BufferedInputStream(new GZIPInputStream(new BufferedInputStream(JF.getInputStream(JE))));"); PW.println(" }"); PW.println(" DataInputStream snapshot = new DataInputStream(buffered);"); PW.println(" StringBuffer s = new StringBuffer();"); PW.println(" for (int i=0; i<6; i++) s.append(snapshot.readChar());"); PW.println(" RanMT r = null;"); PW.println(" if (!s.toString().equals(\"VEW-CP\")) {"); PW.println(" System.out.println(\"Invalid snapshot\");"); PW.println(" } else {"); PW.println(" snapVersion = snapshot.readInt();"); PW.println(" System.out.println(\"Snapshot version: \"+snapVersion);"); PW.println(" SysVars._firstExecTime = snapshot.readLong();"); PW.println(" ObjectInputStream snapObj = new ObjectInputStream(buffered);"); PW.println(" r = (RanMT)snapObj.readObject();"); PW.println(" Kernel.W.readPhysicsSnapshot(snapshot);"); PW.println(" Kernel.W.readBiologicalSnapshot(snapshot);"); PW.println(" snapObj.close();"); PW.println(" snapshot.close();"); PW.println(" }"); PW.println(" if (!SysVars._seedForced) {"); PW.println(" if ((newSeed) || (r==null)) {"); PW.println(" Utils.rnd = new RanMT();"); PW.println(" Utils.rnd.setSeed(SysVars._seed);"); PW.println(" } else {"); PW.println(" Utils.rnd = r;"); PW.println(" }"); PW.println(" }"); PW.println(" } catch (Exception e) { e.printStackTrace(); }"); PW.println(" }"); PW.println(""); PW.println(" public static void writeBioReal(double v) { writeReal(biFile,v); }"); PW.println(" public static void writeChemReal(double v) { writeReal(chFile,v); }"); PW.println(" public static void writeDemReal(double v) { writeReal(deFile,v); }"); PW.println(" public static void writePhyReal(double v) { writeReal(phFile,v); }"); PW.println(" public static void writeWCReal(double v) { writeReal(wcFile,v); }"); PW.println(""); PW.println(" public static void writeFGReal(int fg, double d) {"); PW.println(" writeReal(fgFiles[fg],d);"); PW.println(" if (useFloats) fgBytesWritten[fg]+=4;"); PW.println(" else fgBytesWritten[fg]+=8;"); PW.println(" }"); PW.println(""); PW.println(" public static void writeFGLong(int fg, long l) {"); PW.println(" try {"); PW.println(" fgFiles[fg].writeLong(l);"); PW.println(" fgBytesWritten[fg]+=8;"); PW.println(" } catch (Exception e) {e.printStackTrace(); }"); PW.println(" }"); PW.println(""); PW.println(" public static void writeFGInt(int fg, int i) {"); PW.println(" try {"); PW.println(" fgFiles[fg].writeInt(i);"); PW.println(" fgBytesWritten[fg]+=4;"); PW.println(" } catch (Exception e) {e.printStackTrace(); }"); PW.println(" }"); PW.println(""); PW.println(" public static void writeReal(DataOutputStream dos, double d) {"); PW.println(" try {"); PW.println(" if (useFloats) dos.writeFloat((float)d);"); PW.println(" else dos.writeDouble(d);"); PW.println(" } catch (Exception e) { e.printStackTrace(); }"); PW.println(" }"); PW.println(""); PW.println(" public static void writeLong(DataOutputStream dos, long l) {"); PW.println(" try {"); PW.println(" dos.writeLong(l);"); PW.println(" } catch (Exception e) { e.printStackTrace(); }"); PW.println(" }"); PW.println(""); PW.println(" public static void setLineage(int fg, String file) {"); PW.println(" if (zip) lineages[fg]=makeZip(file);"); PW.println(" else lineages[fg]=makeNonZip(file);"); PW.println(" }"); PW.println(""); PW.println(" public static void setLifespan(int fg, String file) {"); PW.println(" if (zip) lifespans[fg]=makeZip(file);"); PW.println(" else lifespans[fg]=makeNonZip(file);"); PW.println(" }"); PW.println(""); PW.println(" public static void setFgTime(int fg, String file) {"); PW.println(" if (zip) fgTimes[fg]= makeZip(file);"); PW.println(" else fgTimes[fg] = makeNonZip(file);"); PW.println(" }"); PW.println(""); PW.println(" public static void setFgFile(int fg, String file) {"); PW.println(" if (zip) fgFiles[fg] = makeZip(file);"); PW.println(" else fgFiles[fg]= makeNonZip(file);"); PW.println(" }"); PW.println(""); PW.println(" public static void setWcFile(String file) {"); PW.println(" if (zip) wcFile = makeZip(file);"); PW.println(" else wcFile = makeNonZip(file);"); PW.println(" }"); PW.println(""); PW.println(" public static void setBioFile(String file) {"); PW.println(" if (zip) biFile = makeZip(file);"); PW.println(" else biFile = makeNonZip(file);"); PW.println(" }"); PW.println(""); PW.println(" public static void setChemFile(String file) {"); PW.println(" if (zip) chFile = makeZip(file);"); PW.println(" else chFile = makeNonZip(file);"); PW.println(" }"); PW.println(""); PW.println(" public static void setDemFile(String file) {"); PW.println(" if (zip) deFile = makeZip(file);"); PW.println(" else deFile = makeNonZip(file);"); PW.println(" }"); PW.println(""); PW.println(" public static void setPhyFile(String file) {"); PW.println(" if (zip) phFile = makeZip(file);"); PW.println(" else phFile = makeNonZip(file);"); PW.println(" }"); PW.println(""); PW.println(" public static DataOutputStream makeZip(String file) {"); PW.println(" try {"); PW.println( " return new DataOutputStream(new BufferedOutputStream(new GZIPOutputStream(new BufferedOutputStream(new FileOutputStream(file)))));"); PW.println(" } catch (Exception e) { e.printStackTrace(); return null; }"); PW.println(" }"); PW.println(""); PW.println(" public static DataOutputStream makeNonZip(String file) {"); PW.println(" try {"); PW.println( " return new DataOutputStream(new BufferedOutputStream(new FileOutputStream(file)));"); PW.println(" } catch (Exception e) { e.printStackTrace(); return null; }"); PW.println(" }"); PW.println(""); PW.println(" /* Perform logging */"); PW.println(""); PW.println(" public static void setAuditFile(String f) {"); PW.println(" auditEnabled = true;"); PW.println(" auditXMLFile = XMLFile.LoadFile(f);"); PW.println(" }"); PW.println(""); PW.println(" public static boolean isAuditEnabled() {"); PW.println(" return auditEnabled;"); PW.println(" }"); PW.println(""); PW.println(" public static boolean shouldLog(long pid, int fgid) {"); PW.println(" return auditIDs[fgid].contains(pid);"); PW.println(" }"); PW.println(""); PW.println(" /* Lineage format:"); PW.println(""); PW.println(" int Time (measured in Times!)"); PW.println(" byte TYPE (constant for create/pchange/split/merge/removal)"); PW.println(" long ParentID"); PW.println(" long ChildID"); PW.println(" // NEW IN 3.1"); PW.println(" int ParentStage"); PW.println(" int ChildStage"); PW.println(""); PW.println(" -> Merge: new particle assumes ParentID, with new cellcount = C1+C2."); PW.println(" */"); PW.println(""); PW.println(""); PW.println( " public static void writeCreateToLineage(int RegisterNo, long Time, long ParentID, long ChildID, int ParentStage, int ChildStage) {"); PW.println(" if ((Time>=startLSTime) && (Time<=stopLSTime)) try {"); PW.println(" lineages[RegisterNo].writeLong(Time);"); PW.println(" lineages[RegisterNo].writeByte(CREATE);"); PW.println(" lineages[RegisterNo].writeLong(ParentID);"); PW.println(" lineages[RegisterNo].writeLong(ChildID);"); PW.println(" lineages[RegisterNo].writeInt(ParentStage);"); PW.println(" lineages[RegisterNo].writeInt(ChildStage);"); PW.println(" } catch (Exception e) { e.printStackTrace(); }"); PW.println(" }"); PW.println(""); PW.println( " public static void writePChangeParentToLineage(int RegisterNo, long Time, long ParentID, int ParentStage, int ChildStage) {"); PW.println(" if ((Time>=startLSTime) && (Time<=stopLSTime)) try {"); PW.println(" lineages[RegisterNo].writeLong(Time);"); PW.println(" lineages[RegisterNo].writeByte(PCHANGEPARENT);"); PW.println(" lineages[RegisterNo].writeLong(ParentID);"); PW.println(" lineages[RegisterNo].writeLong(-1);"); PW.println(" lineages[RegisterNo].writeInt(ParentStage);"); PW.println(" lineages[RegisterNo].writeInt(ChildStage);"); PW.println(" } catch (Exception e) { e.printStackTrace(); }"); PW.println(" }"); PW.println(""); PW.println( " public static void writePChangeChildToLineage(int RegisterNo, long Time, long ParentID, long ChildID, int ParentStage, int ChildStage) {"); PW.println(" if ((Time>=startLSTime) && (Time<=stopLSTime)) try {"); PW.println(" lineages[RegisterNo].writeLong(Time);"); PW.println(" lineages[RegisterNo].writeByte(PCHANGECHILD);"); PW.println(" lineages[RegisterNo].writeLong(ParentID);"); PW.println(" lineages[RegisterNo].writeLong(ChildID);"); PW.println(" lineages[RegisterNo].writeInt(ParentStage);"); PW.println(" lineages[RegisterNo].writeInt(ChildStage);"); PW.println(" } catch (Exception e) { e.printStackTrace(); }"); PW.println(" }"); PW.println(""); PW.println( " public static void writeSplitToLineage(int RegisterNo, long Time, long ParentID, long ChildID, int stage) {"); PW.println(" if ((Time>=startLSTime) && (Time<=stopLSTime)) try {"); PW.println(" lineages[RegisterNo].writeLong(Time);"); PW.println(" lineages[RegisterNo].writeByte(SPLIT);"); PW.println(" lineages[RegisterNo].writeLong(ParentID);"); PW.println(" lineages[RegisterNo].writeLong(ChildID);"); PW.println(" lineages[RegisterNo].writeInt(stage);"); PW.println(" lineages[RegisterNo].writeInt(stage);"); PW.println(" } catch (Exception e) { e.printStackTrace(); }"); PW.println(" }"); PW.println(""); PW.println( " public static void writeMergeToLineage(int RegisterNo, long Time, long ParentID, long ChildID, int stage) {"); PW.println(" if ((Time>=startLSTime) && (Time<=stopLSTime)) try {"); PW.println(" lineages[RegisterNo].writeLong(Time);"); PW.println(" lineages[RegisterNo].writeByte(MERGE);"); PW.println(" lineages[RegisterNo].writeLong(ParentID);"); PW.println(" lineages[RegisterNo].writeLong(ChildID);"); PW.println(" lineages[RegisterNo].writeInt(stage);"); PW.println(" lineages[RegisterNo].writeInt(stage);"); PW.println(" } catch (Exception e) { e.printStackTrace(); }"); PW.println(" }"); PW.println(""); PW.println( " public static void writeRemovalToLineage(int RegisterNo, long Time, long ParentID, int stage) {"); PW.println(" if ((Time>=startLSTime) && (Time<=stopLSTime)) try {"); PW.println(" lineages[RegisterNo].writeLong(Time);"); PW.println(" lineages[RegisterNo].writeByte(REMOVAL);"); PW.println(" lineages[RegisterNo].writeLong(ParentID);"); PW.println(" lineages[RegisterNo].writeLong(0);"); PW.println(" lineages[RegisterNo].writeInt(stage);"); PW.println(" lineages[RegisterNo].writeInt(stage);"); PW.println(" } catch (Exception e) { e.printStackTrace(); }"); PW.println(" }"); PW.println(""); PW.println(" /* LifeSpan Register format:"); PW.println(""); PW.println(" int Time"); PW.println(" byte TYPE"); PW.println(" int Reason"); PW.println(" long ID1"); PW.println(" long ID2"); PW.println(" f/d CellCount1"); PW.println(" f/d CellCount2"); PW.println(""); PW.println(" -> for ingest/divide, CellCount1 = initial, CellCount2 = after"); PW.println(" -> for change, CellCount2 = (f/d) stageNumber."); PW.println(" */"); PW.println(""); PW.println( " public static void writeCreateToLifespan(int RegisterNo, int Reason, long Time, long ParentID, long ChildID, double childC, int stage) {"); PW.println(" if ((Time>=startLSTime) && (Time<=stopLSTime)) try {"); PW.println(" lifespans[RegisterNo].writeLong(Time);"); PW.println(" lifespans[RegisterNo].writeByte(CREATE);"); PW.println(" lifespans[RegisterNo].writeInt(Reason);"); PW.println(" lifespans[RegisterNo].writeLong(ParentID);"); PW.println(" lifespans[RegisterNo].writeLong(ChildID);"); PW.println(" writeReal(lifespans[RegisterNo],childC);"); PW.println(" writeReal(lifespans[RegisterNo],stage);"); PW.println(" } catch (Exception e) { e.printStackTrace(); }"); PW.println(" }"); PW.println(""); PW.println( " public static void writePChangeParentToLifespan(int RegisterNo, int Reason, long Time, long ParentID, double childC, int stage) {"); PW.println(" if ((Time>=startLSTime) && (Time<=stopLSTime)) try {"); PW.println(" lifespans[RegisterNo].writeLong(Time);"); PW.println(" lifespans[RegisterNo].writeByte(PCHANGEPARENT);"); PW.println(" lifespans[RegisterNo].writeInt(Reason);"); PW.println(" lifespans[RegisterNo].writeLong(ParentID);"); PW.println(" lifespans[RegisterNo].writeLong(-1);"); PW.println(" writeReal(lifespans[RegisterNo],childC);"); PW.println(" writeReal(lifespans[RegisterNo],stage);"); PW.println(" } catch (Exception e) { e.printStackTrace(); }"); PW.println(" }"); PW.println(""); PW.println( " public static void writePChangeChildToLifespan(int RegisterNo, long Time, long ParentID, long ChildID, double childC, int stage) {"); PW.println(" if ((Time>=startLSTime) && (Time<=stopLSTime)) try {"); PW.println(" lifespans[RegisterNo].writeLong(Time);"); PW.println(" lifespans[RegisterNo].writeByte(PCHANGECHILD);"); PW.println( " lifespans[RegisterNo].writeInt(-1); // No reason available - multiple reasons merged."); PW.println(" lifespans[RegisterNo].writeLong(ParentID);"); PW.println(" lifespans[RegisterNo].writeLong(ChildID);"); PW.println(" writeReal(lifespans[RegisterNo],childC); // Total new cell count."); PW.println(" writeReal(lifespans[RegisterNo],stage);"); PW.println(" } catch (Exception e) { e.printStackTrace(); }"); PW.println(" }"); PW.println(""); PW.println( " public static void writeSplitToLifespan(int RegisterNo, long Time, long ParentID, long ChildID, double childC) {"); PW.println(" if ((Time>=startLSTime) && (Time<=stopLSTime)) try {"); PW.println(" lifespans[RegisterNo].writeLong(Time);"); PW.println(" lifespans[RegisterNo].writeByte(SPLIT);"); PW.println(" lifespans[RegisterNo].writeInt(-1);"); PW.println(" lifespans[RegisterNo].writeLong(ParentID);"); PW.println(" lifespans[RegisterNo].writeLong(ChildID);"); PW.println(" writeReal(lifespans[RegisterNo],childC);"); PW.println(" writeReal(lifespans[RegisterNo],0.0);"); PW.println(" } catch (Exception e) { e.printStackTrace(); }"); PW.println(" }"); PW.println(""); PW.println( " public static void writeMergeToLifespan(int RegisterNo, long Time, long ParentID, long ChildID, double childC1, double childC2) {"); PW.println(" if ((Time>=startLSTime) && (Time<=stopLSTime)) try {"); PW.println(" lifespans[RegisterNo].writeLong(Time);"); PW.println(" lifespans[RegisterNo].writeByte(MERGE);"); PW.println(" lifespans[RegisterNo].writeInt(-1);"); PW.println(" lifespans[RegisterNo].writeLong(ParentID);"); PW.println(" lifespans[RegisterNo].writeLong(ChildID);"); PW.println(" writeReal(lifespans[RegisterNo],childC1);"); PW.println(" writeReal(lifespans[RegisterNo],childC2);"); PW.println(" } catch (Exception e) { e.printStackTrace(); }"); PW.println(" }"); PW.println(""); PW.println( " public static void writeRemovalToLifespan(int RegisterNo, int Reason, long Time, long ParentID, double childC1) {"); PW.println(" if ((Time>=startLSTime) && (Time<=stopLSTime)) try {"); PW.println(" lifespans[RegisterNo].writeLong(Time);"); PW.println(" lifespans[RegisterNo].writeByte(REMOVAL);"); PW.println(" lifespans[RegisterNo].writeInt(Reason);"); PW.println(" lifespans[RegisterNo].writeLong(ParentID);"); PW.println(" lifespans[RegisterNo].writeLong(-1);"); PW.println(" writeReal(lifespans[RegisterNo],childC1);"); PW.println(" writeReal(lifespans[RegisterNo],-1);"); PW.println(" } catch (Exception e) { e.printStackTrace(); }"); PW.println(" }"); PW.println(""); PW.println( " public static void writeIngestToLifespan(int RegisterNo, int Reason, long Time, long ID, double C1, double C2) {"); PW.println(" if ((Time>=startLSTime) && (Time<=stopLSTime)) try {"); PW.println(" lifespans[RegisterNo].writeLong(Time);"); PW.println(" lifespans[RegisterNo].writeByte(INGEST);"); PW.println(" lifespans[RegisterNo].writeInt(Reason);"); PW.println(" lifespans[RegisterNo].writeLong(ID);"); PW.println(" lifespans[RegisterNo].writeLong(0);"); PW.println(" writeReal(lifespans[RegisterNo],C1);"); PW.println(" writeReal(lifespans[RegisterNo],C2);"); PW.println(" } catch (Exception e) { e.printStackTrace(); }"); PW.println(" }"); PW.println(""); PW.println( " public static void writeDivideToLifespan(int RegisterNo, int Reason, long Time, long ID, double C1, double C2) {"); PW.println(" if ((Time>=startLSTime) && (Time<=stopLSTime)) try {"); PW.println(" lifespans[RegisterNo].writeLong(Time);"); PW.println(" lifespans[RegisterNo].writeByte(DIVIDE);"); PW.println(" lifespans[RegisterNo].writeInt(Reason);"); PW.println(" lifespans[RegisterNo].writeLong(ID);"); PW.println(" lifespans[RegisterNo].writeLong(0);"); PW.println(" writeReal(lifespans[RegisterNo],C1);"); PW.println(" writeReal(lifespans[RegisterNo],C2);"); PW.println(" } catch (Exception e) { e.printStackTrace(); }"); PW.println(" }"); PW.println(""); PW.println( " public static void writeChangeToLifespan(int RegisterNo, int Reason, long Time, long ID, double C1, int S) {"); PW.println(" if ((Time>=startLSTime) && (Time<=stopLSTime)) try {"); PW.println(" lifespans[RegisterNo].writeLong(Time);"); PW.println(" lifespans[RegisterNo].writeByte(CHANGE);"); PW.println(" lifespans[RegisterNo].writeInt(Reason);"); PW.println(" lifespans[RegisterNo].writeLong(ID);"); PW.println(" lifespans[RegisterNo].writeLong(0);"); PW.println(" writeReal(lifespans[RegisterNo],C1);"); PW.println(" writeReal(lifespans[RegisterNo],S);"); PW.println(" } catch (Exception e) { e.printStackTrace(); }"); PW.println(" }"); PW.println(""); PW.println(" public static boolean isYearlyTime(long freq, long after, long until) {"); PW.println(" // True if the current time is between after and until, but disregard year."); PW.println(" anyDate.setTimeInMillis(after);"); PW.println(" anyDate.set(GregorianCalendar.YEAR,1960);"); PW.println(" final long start1960=anyDate.getTimeInMillis();"); PW.println(" anyDate.setTimeInMillis(until);"); PW.println(" anyDate.set(GregorianCalendar.YEAR,1960);"); PW.println(" final long end1960=anyDate.getTimeInMillis();"); PW.println(" anyDate.setTimeInMillis(Kernel.myTime);"); PW.println(" anyDate.set(GregorianCalendar.YEAR,1960);"); PW.println(" final long now1960=anyDate.getTimeInMillis();"); PW.println(" if ((now1960<start1960) || (now1960>end1960)) return false;"); PW.println( " else return (((Kernel.myTime-SysVars.startTime) % (freq * SysVars.stepInMillis))==0);"); PW.println(" }"); PW.println(""); PW.println(" public static void writeTimes() {"); PW.println(" for (int i=0; i<fgTimes.length; i++)"); PW.println(" if (fgTimes[i]!=null) writeLong(fgTimes[i],fgBytesWritten[i]);"); PW.println(" }"); PW.println(""); PW.println(" public static String unitToTex(String u) {"); PW.println(" String pre = \"\";"); PW.println(" String code = \"\";"); PW.println(" String exp = \"\";"); PW.println(" String theunit = \"\";"); PW.println(" while (u.length()>0) {"); PW.println(" pre = u.substring(0,u.indexOf(\",\"));"); PW.println(" u = u.substring(u.indexOf(\",\")+1);"); PW.println(" code = u.substring(0,u.indexOf(\",\"));"); PW.println(" u = u.substring(u.indexOf(\",\")+1);"); PW.println(" if (u.indexOf(\",\")>=1) {"); PW.println(" exp = u.substring(0,u.indexOf(\",\"));"); PW.println(" u= u.substring(u.indexOf(\",\")+1);"); PW.println(" } else {"); PW.println(" exp = u;"); PW.println(" u = \"\";"); PW.println(" }"); PW.println(" if (pre.equals(\"-12\")) pre = \"p\";"); PW.println(" else if (pre.equals(\"-9\")) pre = \"n\";"); PW.println(" else if (pre.equals(\"-6\")) pre = \"\\\\mu\";"); PW.println(" else if (pre.equals(\"-3\")) pre = \"m\";"); PW.println(" else if (pre.equals(\"12\")) pre = \"A\";"); PW.println(" else if (pre.equals(\"9\")) pre = \"G\";"); PW.println(" else if (pre.equals(\"6\")) pre = \"M\";"); PW.println(" else if (pre.equals(\"3\")) pre = \"K\";"); PW.println(" else pre = \"\";"); PW.println(" if (!exp.equals(\"1\")) exp = \"{\"+exp+\"}\";"); PW.println(" if (exp.equals(\"1\")) exp = \"\";"); PW.println(" if (!exp.equals(\"9\")) theunit +=pre+code+exp;"); PW.println(""); PW.println(" }"); PW.println(" return theunit;"); PW.println(" }"); PW.println(""); PW.println(" public static void checkWriteSnap() {"); PW.println(" if (useSnapWrite) {"); PW.println( " if ((Kernel.myTime>=firstSnap) && (((Kernel.myTime-firstSnap)%snapSpace)==0)) {"); PW.println(" writeSnapshot(Launcher.JarPath+File.separator+\"snap.\"+Kernel.myTime);"); PW.println(" //System.out.println(\"Snap shot write : myTime = \"+Kernel.myTime);"); PW.println(" //System.out.println(\"FIRST SNAP: \"+firstSnap);"); PW.println(" //System.out.println(\"snapSPACE = \"+snapSpace);"); PW.println( " //System.out.println(\"Timestep = \"+Kernel.timeSteps+\" just written\");"); PW.println(" }"); PW.println(" }"); PW.println(" }"); PW.println(""); PW.println(" public static boolean isTime(long freq, long after, long until) {"); PW.println(" if ((Kernel.myTime<after) || (Kernel.myTime>until)) return false;"); PW.println(" else return (((Kernel.myTime-SysVars.startTime) % freq)==0);"); PW.println(" }"); PW.println(""); PW.println(" public static boolean isYearlyInterval(int years, long after, long until) {"); PW.println(" if ((Kernel.myTime<after) || (Kernel.myTime>until)) return false;"); PW.println(" else if (Kernel.myTime==after) return true;"); PW.println(" else {"); PW.println(" compareDate.setTimeInMillis(after);"); PW.println(" long compareMillis = Kernel.myTime;"); PW.println(" while (compareMillis<=until) {"); PW.println(" compareDate.add(GregorianCalendar.YEAR,years);"); PW.println(" compareMillis=compareDate.getTimeInMillis();"); PW.println(" if (Kernel.myTime==compareMillis) return true;"); PW.println(" }"); PW.println(" }"); PW.println(" return false;"); PW.println(" }"); PW.println(""); PW.println(" public static void update() {"); PW.println(" writeTimes();"); PW.println(" SysVars.logPhyFieldData();"); PW.println(" SysVars.logBioFieldData();"); PW.println(" SysVars.logChemFieldData();"); PW.println(" SysVars.logDemFieldData();"); PW.println(" SysVars.logColData();"); PW.println(" }"); PW.println(""); PW.println(" public static void init(int speciesCount) {"); PW.println(" fgBytesWritten = new long[speciesCount];"); PW.println( " dataFormats = new XMLFile(Launcher.JarPath+File.separator+\"DataFormats.xml\",\"dataformat\");"); PW.println(" dataFormats.addTag(new XMLTag(\"version\",\"1.1\"));"); PW.println(""); PW.println(" /* Initialise IDs for audits */"); PW.println(""); PW.println(" if (Logging.isAuditEnabled()) {"); PW.println(" auditIDs = new TLongHashSet[speciesCount];"); PW.println(" for (int i=0; i<speciesCount; i++) {"); PW.println(" String name = Kernel.getSpecies(i).name();"); PW.println(" TLongHashSet ids = new TLongHashSet();"); PW.println( " XMLTag fgAudit = auditXMLFile.getTagWhere(\"functionalgroup\", \"name\", name);"); PW.println(" if (fgAudit != null) {"); PW.println(" XMLTag[] idList = fgAudit.getTags(\"group/id\");"); PW.println(" if (idList != null) {"); PW.println(" for (int j = 0; j < idList.length; j++) {"); PW.println(" ids.add(Integer.parseInt(idList[j].getValue()));"); PW.println(" }"); PW.println(" }"); PW.println(""); PW.println(" idList = fgAudit.getTags(\"group/descendants/id\");"); PW.println(" if (idList != null) {"); PW.println(" for (int j = 0; j < idList.length; j++) {"); PW.println(" ids.add(Integer.parseInt(idList[j].getValue()));"); PW.println(" }"); PW.println(" }"); PW.println(" }"); PW.println(""); PW.println(" auditIDs[i] = ids;"); PW.println(" }"); PW.println(" }"); PW.println(""); PW.println(" fgFiles = new DataOutputStream[speciesCount];"); PW.println(" fgTimes = new DataOutputStream[speciesCount];"); PW.println(" if (lineage) lineages = new DataOutputStream[speciesCount];"); PW.println(" if (lifespan) lifespans = new DataOutputStream[speciesCount];"); PW.println(" dataFormats.addTag(\"deathreasons\");"); PW.println(" dataFormats.addTag(\"states\");"); PW.println(" SysVars.InitDeathReasons(dataFormats.getTag(\"dataformat/deathreasons\"));"); PW.println(" SysVars.InitStates(dataFormats.getTag(\"dataformat/states\"));"); PW.println(" SysVars.initColData();"); PW.println(" SysVars.initBioFieldData();"); PW.println(" SysVars.initChemFieldData();"); PW.println(" SysVars.initDemFieldData();"); PW.println(" SysVars.initPhyFieldData();"); PW.println(" dataFormats.write();"); PW.println(" }"); PW.println(""); PW.println(" public static void flush() {"); PW.println(" try {"); PW.println(" if (wcFile!=null) wcFile.flush();"); PW.println(" if (phFile!=null) phFile.flush();"); PW.println(" if (biFile!=null) biFile.flush();"); PW.println(" if (deFile!=null) deFile.flush();"); PW.println(" if (chFile!=null) chFile.flush();"); PW.println(" for (int i=0; i<fgFiles.length; i++) {"); PW.println(" if (fgFiles[i]!=null) fgFiles[i].flush();"); PW.println(" if (fgTimes[i]!=null) fgTimes[i].flush();"); PW.println(" }"); PW.println( " if (lifespan) for (int i=0; i<lifespans.length; i++) lifespans[i].flush();"); PW.println(" if (lineage) for (int i=0; i<lineages.length; i++) lineages[i].flush();"); PW.println(" } catch (Exception e) { e.printStackTrace(); }"); PW.println(" }"); PW.println(""); PW.println(" public static void close() {"); PW.println(" try {"); PW.println(" flush();"); PW.println(" if (wcFile!=null) wcFile.close();"); PW.println(" if (phFile!=null) phFile.close();"); PW.println(" if (biFile!=null) biFile.close();"); PW.println(" if (deFile!=null) deFile.close();"); PW.println(" if (chFile!=null) chFile.close();"); PW.println(" for (int i=0; i<fgFiles.length; i++) {"); PW.println(" if (fgFiles[i]!=null) fgFiles[i].close();"); PW.println(" if (fgTimes[i]!=null) fgTimes[i].close();"); PW.println(" }"); PW.println( " if (lifespan) for (int i=0; i<lifespans.length; i++) lifespans[i].close();"); PW.println(" if (lineage) for (int i=0; i<lineages.length; i++) lineages[i].close();"); PW.println(" } catch (Exception e) { e.printStackTrace(); }"); PW.println(" }"); PW.println("}"); PW.flush(); PW.close(); } catch (Exception e) { e.printStackTrace(); } }