use of org.vcell.util.BigString in project vcell by virtualcell.
the class MathVerifier method checkMathForBioModel.
private void checkMathForBioModel(BigString bioModelXMLFromDB, BioModel bioModelFromDB, User user, boolean bUpdateDatabase) throws Exception {
BioModel bioModelNewMath = XmlHelper.XMLToBioModel(new XMLSource(bioModelXMLFromDB.toString()));
bioModelFromDB.refreshDependencies();
bioModelNewMath.refreshDependencies();
//
// get all Simulations for this model
//
Simulation[] modelSimsFromDB = bioModelFromDB.getSimulations();
//
// for each application, recompute mathDescription, and verify it is equivalent
// then check each associated simulation to ensure math overrides are applied in an equivalent manner also.
//
SimulationContext[] simContextsFromDB = bioModelFromDB.getSimulationContexts();
SimulationContext[] simContextsNewMath = bioModelNewMath.getSimulationContexts();
for (int k = 0; k < simContextsFromDB.length; k++) {
SimulationContext simContextFromDB = simContextsFromDB[k];
Simulation[] appSimsFromDB = simContextFromDB.getSimulations();
SimulationContext simContextNewMath = simContextsNewMath[k];
Simulation[] appSimsNewMath = simContextNewMath.getSimulations();
MathCompareResults mathCompareResults_latest = null;
MathCompareResults mathCompareResults_4_8 = null;
try {
MathDescription origMathDesc = simContextFromDB.getMathDescription();
//
// find out if any simulation belonging to this Application has data
//
boolean bApplicationHasData = false;
for (int l = 0; l < modelSimsFromDB.length; l++) {
SimulationStatusPersistent simulationStatus = dbServerImpl.getSimulationStatus(modelSimsFromDB[l].getKey());
if (simulationStatus != null && simulationStatus.getHasData()) {
bApplicationHasData = true;
}
}
//
try {
if (simContextNewMath.getGeometry().getDimension() > 0 && simContextNewMath.getGeometry().getGeometrySurfaceDescription().getGeometricRegions() == null) {
simContextNewMath.getGeometry().getGeometrySurfaceDescription().updateAll();
}
} catch (Exception e) {
e.printStackTrace(System.out);
}
//
// updated mathdescription loaded into copy of biomodel, then test for equivalence.
//
cbit.vcell.mapping.MathMapping mathMapping = simContextNewMath.createNewMathMapping();
MathDescription newMathDesc = mathMapping.getMathDescription();
String issueString = null;
org.vcell.util.Issue[] issues = mathMapping.getIssues();
if (issues != null && issues.length > 0) {
StringBuffer buffer = new StringBuffer("Issues(" + issues.length + "):");
for (int l = 0; l < issues.length; l++) {
buffer.append(" <<" + issues[l].toString() + ">>");
}
issueString = buffer.toString();
}
MathCompareResults testIfSameResult = cbit.vcell.math.MathUtilities.testIfSame(SimulationSymbolTable.createMathSymbolTableFactory(), origMathDesc, newMathDesc);
mathCompareResults_latest = MathDescription.testEquivalency(SimulationSymbolTable.createMathSymbolTableFactory(), origMathDesc, newMathDesc);
System.out.println(">>>BioModel(" + bioModelFromDB.getVersion().getVersionKey() + ") '" + bioModelFromDB.getName() + "':" + bioModelFromDB.getVersion().getDate() + ", Application(" + simContextFromDB.getKey() + ") '" + simContextFromDB.getName() + "' <<EQUIV=" + mathCompareResults_latest.isEquivalent() + ">>: " + mathCompareResults_latest.toDatabaseStatus());
MathDescription mathDesc_4_8 = null;
try {
mathDesc_4_8 = new MathMapping_4_8(simContextNewMath).getMathDescription();
mathCompareResults_4_8 = MathDescription.testEquivalency(SimulationSymbolTable.createMathSymbolTableFactory(), origMathDesc, mathDesc_4_8);
} catch (Exception e) {
e.printStackTrace(System.out);
mathCompareResults_4_8 = new MathCompareResults(Decision.MathDifferent_FAILURE_UNKNOWN, e.getMessage());
}
simContextNewMath.setMathDescription(newMathDesc);
//
if (bUpdateDatabase) {
java.sql.Connection con = null;
java.sql.Statement stmt = null;
try {
con = conFactory.getConnection(new Object());
stmt = con.createStatement();
// KeyValue mathKey = origMathDesc.getKey();
String UPDATESTATUS = "UPDATE " + SimContextStat2Table.table.getTableName() + " SET " + SimContextStat2Table.table.hasData.getUnqualifiedColName() + " = " + ((bApplicationHasData) ? (1) : (0)) + ", " + SimContextStat2Table.table.equiv.getUnqualifiedColName() + " = " + (mathCompareResults_latest.isEquivalent() ? (1) : (0)) + ", " + SimContextStat2Table.table.status.getUnqualifiedColName() + " = '" + org.vcell.util.TokenMangler.getSQLEscapedString(mathCompareResults_latest.toDatabaseStatus(), 255) + "', " + SimContextStat2Table.table.equiv_4_8.getUnqualifiedColName() + " = " + (mathCompareResults_4_8.isEquivalent() ? (1) : (0)) + ", " + SimContextStat2Table.table.status_4_8.getUnqualifiedColName() + " = '" + org.vcell.util.TokenMangler.getSQLEscapedString(mathCompareResults_4_8.toDatabaseStatus(), 255) + "'" + // ((issueString!=null)?(", "+SimContextStat2Table.table.comments.getUnqualifiedColName()+" = '"+org.vcell.util.TokenMangler.getSQLEscapedString(issueString,255)+"'"):(""))+
" WHERE " + SimContextStat2Table.table.simContextRef.getUnqualifiedColName() + " = " + simContextFromDB.getKey();
int numRowsChanged = stmt.executeUpdate(UPDATESTATUS);
if (numRowsChanged != 1) {
System.out.println("failed to update status");
}
con.commit();
if (lg.isTraceEnabled())
lg.trace("-------------- Update=true, saved 'newMath' for Application '" + simContextFromDB.getName() + "'");
} catch (SQLException e) {
lg.error(e.getMessage(), e);
if (lg.isWarnEnabled())
lg.warn("*&*&*&*&*&*&*& Update=true, FAILED TO UPDATE MATH for Application '" + simContextFromDB.getName() + "'");
} finally {
if (stmt != null) {
stmt.close();
}
con.close();
}
}
} catch (Throwable e) {
// exception in SimContext
lg.error(e.getMessage(), e);
if (bUpdateDatabase) {
java.sql.Connection con = null;
java.sql.Statement stmt = null;
try {
con = conFactory.getConnection(new Object());
stmt = con.createStatement();
// KeyValue mathKey = origMathDesc.getKey();
String UPDATESTATUS = "UPDATE " + SimContextStat2Table.table.getTableName() + " SET " + SimContextStat2Table.table.status.getUnqualifiedColName() + " = 'EXCEPTION: " + org.vcell.util.TokenMangler.getSQLEscapedString(e.toString()) + "'" + " WHERE " + SimContextStat2Table.table.simContextRef.getUnqualifiedColName() + " = " + simContextFromDB.getKey();
int numRowsChanged = stmt.executeUpdate(UPDATESTATUS);
if (numRowsChanged != 1) {
System.out.println("failed to update status with exception");
}
con.commit();
if (lg.isTraceEnabled())
lg.trace("-------------- Update=true, saved exception for Application '" + simContextFromDB.getName() + "'");
} catch (SQLException e2) {
lg.error(e2.getMessage(), e2);
if (lg.isWarnEnabled())
lg.warn("*&*&*&*&*&*&*& Update=true, FAILED TO save exception status for Application '" + simContextFromDB.getName() + "'");
} finally {
if (stmt != null) {
stmt.close();
}
con.close();
}
}
}
//
for (int l = 0; l < appSimsFromDB.length; l++) {
try {
boolean bSimEquivalent = Simulation.testEquivalency(appSimsNewMath[l], appSimsFromDB[l], mathCompareResults_latest);
if (lg.isTraceEnabled())
lg.trace("Application(" + simContextFromDB.getKey() + ") '" + simContextFromDB.getName() + "', " + "Simulation(" + modelSimsFromDB[l].getKey() + ") '" + modelSimsFromDB[l].getName() + "':" + modelSimsFromDB[l].getVersion().getDate() + "mathEquivalency=" + mathCompareResults_latest.isEquivalent() + ", simEquivalency=" + bSimEquivalent);
//
if (bUpdateDatabase) {
java.sql.Connection con = null;
java.sql.Statement stmt = null;
try {
con = conFactory.getConnection(new Object());
stmt = con.createStatement();
String UPDATESTATUS = "UPDATE " + SimStatTable.table.getTableName() + " SET " + SimStatTable.table.equiv.getUnqualifiedColName() + " = " + ((bSimEquivalent) ? (1) : (0)) + ", " + SimStatTable.table.status.getUnqualifiedColName() + " = '" + org.vcell.util.TokenMangler.getSQLEscapedString(mathCompareResults_latest.decision.description) + "'" + " WHERE " + SimStatTable.table.simRef.getUnqualifiedColName() + " = " + appSimsFromDB[l].getKey();
int numRowsChanged = stmt.executeUpdate(UPDATESTATUS);
if (numRowsChanged != 1) {
System.out.println("failed to update status");
}
con.commit();
if (lg.isTraceEnabled())
lg.trace("-------------- Update=true, saved 'simulation status for simulation '" + appSimsFromDB[l].getName() + "'");
} catch (SQLException e) {
lg.error(e.getMessage(), e);
if (lg.isWarnEnabled())
lg.warn("*&*&*&*&*&*&*& Update=true, FAILED TO UPDATE status for simulation '" + appSimsFromDB[l].getName() + "'");
} finally {
if (stmt != null) {
stmt.close();
}
con.close();
}
}
} catch (Throwable e) {
// exception in SimContext
lg.error(e.getMessage(), e);
if (bUpdateDatabase) {
java.sql.Connection con = null;
java.sql.Statement stmt = null;
try {
con = conFactory.getConnection(new Object());
stmt = con.createStatement();
// KeyValue mathKey = origMathDesc.getKey();
String UPDATESTATUS = "UPDATE " + SimStatTable.table.getTableName() + " SET " + SimStatTable.table.status.getUnqualifiedColName() + " = 'EXCEPTION: " + org.vcell.util.TokenMangler.getSQLEscapedString(e.toString()) + "'" + " WHERE " + SimStatTable.table.simRef.getUnqualifiedColName() + " = " + appSimsFromDB[l].getKey();
int numRowsChanged = stmt.executeUpdate(UPDATESTATUS);
if (numRowsChanged != 1) {
System.out.println("failed to update status with exception");
}
con.commit();
if (lg.isTraceEnabled())
lg.trace("-------------- Update=true, saved exception for Simulation '" + appSimsFromDB[l].getName() + "'");
} catch (SQLException e2) {
lg.error(e2.getMessage(), e2);
if (lg.isWarnEnabled())
lg.warn("*&*&*&*&*&*&*& Update=true, FAILED TO save exception status for simulation '" + appSimsFromDB[l].getName() + "'");
} finally {
if (stmt != null) {
stmt.close();
}
con.close();
}
}
}
}
}
}
use of org.vcell.util.BigString in project vcell by virtualcell.
the class MathVerifier method scanBioModels.
/**
* Insert the method's description here.
* Creation date: (2/2/01 3:40:29 PM)
*/
public void scanBioModels(boolean bUpdateDatabase, KeyValue[] bioModelKeys) throws MathException, MappingException, SQLException, DataAccessException, ModelException, ExpressionException {
java.util.Calendar calendar = java.util.GregorianCalendar.getInstance();
// calendar.set(2002,java.util.Calendar.MAY,7+1);
calendar.set(2002, java.util.Calendar.JULY, 1);
final java.util.Date fluxCorrectionOrDisablingBugFixDate = calendar.getTime();
// calendar.set(2001,java.util.Calendar.JUNE,13+1);
calendar.set(2002, java.util.Calendar.JANUARY, 1);
final java.util.Date totalVolumeCorrectionFixDate = calendar.getTime();
User user = new User(PropertyLoader.ADMINISTRATOR_ACCOUNT, new KeyValue(PropertyLoader.ADMINISTRATOR_ID));
for (int i = 0; i < bioModelKeys.length; i++) {
BioModelInfo bioModelInfo = dbServerImpl.getBioModelInfo(user, bioModelKeys[i]);
if (lg.isTraceEnabled())
lg.trace("Testing bioModel with key '" + bioModelKeys[i] + "'");
java.sql.Connection con = null;
java.sql.Statement stmt = null;
try {
//
// read in the BioModel from the database
//
BigString bioModelXML = dbServerImpl.getBioModelXML(user, bioModelInfo.getVersion().getVersionKey());
BioModel bioModelFromDB = XmlHelper.XMLToBioModel(new XMLSource(bioModelXML.toString()));
BioModel bioModelNewMath = XmlHelper.XMLToBioModel(new XMLSource(bioModelXML.toString()));
bioModelFromDB.refreshDependencies();
bioModelNewMath.refreshDependencies();
//
// get all Simulations for this model
//
Simulation[] modelSimsFromDB = bioModelFromDB.getSimulations();
//
// for each application, recompute mathDescription, and verify it is equivalent
// then check each associated simulation to ensure math overrides are applied in an equivalent manner also.
//
SimulationContext[] simContextsFromDB = bioModelFromDB.getSimulationContexts();
SimulationContext[] simContextsNewMath = bioModelNewMath.getSimulationContexts();
for (int k = 0; k < simContextsFromDB.length; k++) {
SimulationContext simContextFromDB = simContextsFromDB[k];
Simulation[] appSimsFromDB = simContextFromDB.getSimulations();
SimulationContext simContextNewMath = simContextsNewMath[k];
Simulation[] appSimsNewMath = simContextNewMath.getSimulations();
MathCompareResults mathCompareResults = null;
try {
MathDescription origMathDesc = simContextFromDB.getMathDescription();
//
// find out if any simulation belonging to this Application has data
//
boolean bApplicationHasData = false;
for (int l = 0; l < modelSimsFromDB.length; l++) {
SimulationStatusPersistent simulationStatus = dbServerImpl.getSimulationStatus(modelSimsFromDB[l].getKey());
if (simulationStatus != null && simulationStatus.getHasData()) {
bApplicationHasData = true;
}
}
//
try {
if (simContextNewMath.getGeometry().getDimension() > 0 && simContextNewMath.getGeometry().getGeometrySurfaceDescription().getGeometricRegions() == null) {
simContextNewMath.getGeometry().getGeometrySurfaceDescription().updateAll();
}
} catch (Exception e) {
e.printStackTrace(System.out);
}
//
// updated mathdescription loaded into copy of biomodel, then test for equivalence.
//
cbit.vcell.mapping.MathMapping mathMapping = simContextNewMath.createNewMathMapping();
MathDescription newMathDesc = mathMapping.getMathDescription();
String issueString = null;
org.vcell.util.Issue[] issues = mathMapping.getIssues();
if (issues != null && issues.length > 0) {
StringBuffer buffer = new StringBuffer("Issues(" + issues.length + "):");
for (int l = 0; l < issues.length; l++) {
buffer.append(" <<" + issues[l].toString() + ">>");
}
issueString = buffer.toString();
}
simContextNewMath.setMathDescription(newMathDesc);
MathCompareResults testIfSameResults = cbit.vcell.math.MathUtilities.testIfSame(SimulationSymbolTable.createMathSymbolTableFactory(), origMathDesc, newMathDesc);
mathCompareResults = MathDescription.testEquivalency(SimulationSymbolTable.createMathSymbolTableFactory(), origMathDesc, newMathDesc);
StringBuffer buffer = new StringBuffer();
buffer.append(">>>BioModel(" + bioModelFromDB.getVersion().getVersionKey() + ") '" + bioModelFromDB.getName() + "':" + bioModelFromDB.getVersion().getDate() + ", Application(" + simContextFromDB.getKey() + ") '" + simContextFromDB.getName() + "' <<EQUIV=" + mathCompareResults.isEquivalent() + ">>: " + mathCompareResults.toDatabaseStatus());
//
if (bUpdateDatabase) {
con = null;
stmt = null;
try {
con = conFactory.getConnection(new Object());
stmt = con.createStatement();
// KeyValue mathKey = origMathDesc.getKey();
String UPDATESTATUS = "UPDATE " + SimContextStat2Table.table.getTableName() + " SET " + SimContextStat2Table.table.hasData.getUnqualifiedColName() + " = " + ((bApplicationHasData) ? (1) : (0)) + ", " + SimContextStat2Table.table.equiv.getUnqualifiedColName() + " = " + (mathCompareResults.isEquivalent() ? (1) : (0)) + ", " + SimContextStat2Table.table.status.getUnqualifiedColName() + " = '" + org.vcell.util.TokenMangler.getSQLEscapedString(mathCompareResults.toDatabaseStatus()) + "'" + ((issueString != null) ? (", " + SimContextStat2Table.table.comments.getUnqualifiedColName() + " = '" + org.vcell.util.TokenMangler.getSQLEscapedString(issueString, 255) + "'") : ("")) + " WHERE " + SimContextStat2Table.table.simContextRef.getUnqualifiedColName() + " = " + simContextFromDB.getKey();
int numRowsChanged = stmt.executeUpdate(UPDATESTATUS);
if (numRowsChanged != 1) {
System.out.println("failed to update status");
}
con.commit();
if (lg.isTraceEnabled())
lg.trace("-------------- Update=true, saved 'newMath' for Application '" + simContextFromDB.getName() + "'");
} catch (SQLException e) {
lg.error(e.getMessage(), e);
if (lg.isWarnEnabled())
lg.warn("*&*&*&*&*&*&*& Update=true, FAILED TO UPDATE MATH for Application '" + simContextFromDB.getName() + "'");
} finally {
if (stmt != null) {
stmt.close();
}
con.close();
}
}
} catch (Throwable e) {
// exception in SimContext
lg.error(e.getMessage(), e);
if (bUpdateDatabase) {
con = null;
stmt = null;
try {
con = conFactory.getConnection(new Object());
stmt = con.createStatement();
String status = "'EXCEPTION: " + org.vcell.util.TokenMangler.getSQLEscapedString(e.toString()) + "'";
if (status.length() > 255)
status = status.substring(0, 254) + "'";
String UPDATESTATUS = "UPDATE " + SimContextStat2Table.table.getTableName() + " SET " + SimContextStat2Table.table.status.getUnqualifiedColName() + " = " + status + " WHERE " + SimContextStat2Table.table.simContextRef.getUnqualifiedColName() + " = " + simContextFromDB.getKey();
int numRowsChanged = stmt.executeUpdate(UPDATESTATUS);
if (numRowsChanged != 1) {
System.out.println("failed to update status with exception");
}
con.commit();
if (lg.isTraceEnabled())
lg.trace("-------------- Update=true, saved exception for Application '" + simContextFromDB.getName() + "'");
} catch (SQLException e2) {
lg.error(e2.getMessage(), e2);
if (lg.isWarnEnabled())
lg.warn("*&*&*&*&*&*&*& Update=true, FAILED TO save exception status for Application '" + simContextFromDB.getName() + "'");
} finally {
if (stmt != null) {
stmt.close();
}
con.close();
}
}
}
//
for (int l = 0; l < appSimsFromDB.length; l++) {
try {
boolean bSimEquivalent = Simulation.testEquivalency(appSimsNewMath[l], appSimsFromDB[l], mathCompareResults);
if (lg.isTraceEnabled())
lg.trace("Application(" + simContextFromDB.getKey() + ") '" + simContextFromDB.getName() + "', " + "Simulation(" + modelSimsFromDB[l].getKey() + ") '" + modelSimsFromDB[l].getName() + "':" + modelSimsFromDB[l].getVersion().getDate() + "mathEquivalency=" + mathCompareResults.isEquivalent() + ", simEquivalency=" + bSimEquivalent);
//
if (bUpdateDatabase) {
con = null;
stmt = null;
try {
con = conFactory.getConnection(new Object());
stmt = con.createStatement();
String UPDATESTATUS = "UPDATE " + SimStatTable.table.getTableName() + " SET " + SimStatTable.table.equiv.getUnqualifiedColName() + " = " + ((bSimEquivalent) ? (1) : (0)) + ", " + SimStatTable.table.status.getUnqualifiedColName() + " = '" + org.vcell.util.TokenMangler.getSQLEscapedString(mathCompareResults.decision.description) + "'" + " WHERE " + SimStatTable.table.simRef.getUnqualifiedColName() + " = " + appSimsFromDB[l].getKey();
int numRowsChanged = stmt.executeUpdate(UPDATESTATUS);
if (numRowsChanged != 1) {
System.out.println("failed to update status");
}
con.commit();
if (lg.isTraceEnabled())
lg.trace("-------------- Update=true, saved 'simulation status for simulation '" + appSimsFromDB[l].getName() + "'");
} catch (SQLException e) {
lg.error(e.getMessage(), e);
if (lg.isWarnEnabled())
lg.warn("*&*&*&*&*&*&*& Update=true, FAILED TO UPDATE status for simulation '" + appSimsFromDB[l].getName() + "'");
} finally {
if (stmt != null) {
stmt.close();
}
con.close();
}
}
} catch (Throwable e) {
// exception in SimContext
lg.error(e.getMessage(), e);
if (bUpdateDatabase) {
con = null;
stmt = null;
try {
con = conFactory.getConnection(new Object());
stmt = con.createStatement();
String status = "'EXCEPTION: " + org.vcell.util.TokenMangler.getSQLEscapedString(e.toString()) + "'";
if (status.length() > 255)
status = status.substring(0, 254) + "'";
String UPDATESTATUS = "UPDATE " + SimStatTable.table.getTableName() + " SET " + SimStatTable.table.status.getUnqualifiedColName() + " = " + status + " WHERE " + SimStatTable.table.simRef.getUnqualifiedColName() + " = " + appSimsFromDB[l].getKey();
int numRowsChanged = stmt.executeUpdate(UPDATESTATUS);
if (numRowsChanged != 1) {
System.out.println("failed to update status with exception");
}
con.commit();
if (lg.isTraceEnabled())
lg.trace("-------------- Update=true, saved exception for Simulation '" + appSimsFromDB[l].getName() + "'");
} catch (SQLException e2) {
lg.error(e2.getMessage(), e2);
if (lg.isWarnEnabled())
lg.warn("*&*&*&*&*&*&*& Update=true, FAILED TO save exception status for simulation '" + appSimsFromDB[l].getName() + "'");
} finally {
if (stmt != null) {
stmt.close();
}
con.close();
}
}
}
}
}
} catch (Throwable e) {
// exception in whole BioModel
lg.error(e.getMessage(), e);
// can't update anything in database, since we don't know what simcontexts are involved
}
}
}
use of org.vcell.util.BigString in project vcell by virtualcell.
the class DatabaseServerImpl method getVCImageXML.
/**
* getVersionable method comment.
*/
public BigString getVCImageXML(User user, KeyValue key) throws DataAccessException, ObjectNotFoundException {
try {
if (lg.isTraceEnabled())
lg.trace("DatabaseServerImpl.getVCImageXML(user=" + user + ", Key=" + key + ")");
boolean bCheckPermission = true;
VCImage image = dbTop.getVCImage(new QueryHashtable(), user, key, bCheckPermission);
return new BigString(XmlHelper.imageToXML(image));
} catch (ObjectNotFoundException e) {
lg.error(e.getMessage(), e);
throw new ObjectNotFoundException(e.getMessage());
} catch (Throwable e) {
lg.error(e.getMessage(), e);
throw new DataAccessException(e.getMessage());
}
}
use of org.vcell.util.BigString in project vcell by virtualcell.
the class VCComprehensiveStatistics method collectMathModelStats.
private void collectMathModelStats(long startDateInMs, long endDateInMs) throws DataAccessException {
retrieveUsers();
for (User user : userList) {
if (!userConstraintList.contains(user.getName())) {
continue;
}
if (!internalDeveloper.contains(user.getName())) {
boolean bInternal = internalUsers.contains(user.getName());
ModelStat modelStat = mathModelStats[bInternal ? 0 : 1];
MathModelInfo[] mathModelInfos = dbServerImpl.getMathModelInfos(user, false);
for (MathModelInfo mmi : mathModelInfos) {
Date createDate = mmi.getVersion().getDate();
long t = createDate.getTime();
// }
if (t < startDateInMs || t > endDateInMs) {
continue;
}
// modelStat.count_model ++;
try {
BigString mathModelXML = dbServerImpl.getMathModelXML(user, mmi.getVersion().getVersionKey());
MathModel mathModel = (MathModel) waitForModel(mathModelXML, true);
if (mathModel == null) {
System.out.println("---------- Skipped MathModel " + mmi.getVersion() + " ----------");
continue;
}
modelStat.count_model++;
boolean bHasCompletedSim = false;
for (Simulation sim : mathModel.getSimulations()) {
SimulationStatusPersistent ss = dbServerImpl.getSimulationStatus(sim.getKey());
for (int scan = 0; scan < sim.getScanCount(); scan++) {
SimulationJobStatusPersistent jobStatus = ss.getJobStatus(scan);
if (jobStatus != null) {
if (jobStatus.getSchedulerStatus() == SchedulerStatus.COMPLETED) {
bHasCompletedSim = true;
long elapsed = jobStatus.getEndDate().getTime() - jobStatus.getStartDate().getTime();
if (elapsed < 2 * MINUTE_IN_MS) {
modelStat.runningTimeHistogram[0]++;
} else if (elapsed < 5 * MINUTE_IN_MS) {
modelStat.runningTimeHistogram[1]++;
} else if (elapsed < 20 * MINUTE_IN_MS) {
modelStat.runningTimeHistogram[2]++;
} else if (elapsed < HOUR_IN_MS) {
modelStat.runningTimeHistogram[3]++;
} else if (elapsed < DAY_IN_MS) {
modelStat.runningTimeHistogram[4]++;
} else {
modelStat.runningTimeHistogram[5]++;
}
}
int dimension = sim.getMathDescription().getGeometry().getDimension();
modelStat.count_geoDimSim[dimension]++;
if (sim.getMathDescription().isNonSpatialStoch()) {
modelStat.count_sim_stochastic++;
} else {
modelStat.count_sim_deterministic++;
}
if (dimension > 0) {
if (sim.getSolverTaskDescription().getSolverDescription().isSemiImplicitPdeSolver()) {
modelStat.count_semiSim++;
} else {
modelStat.count_fullySim++;
}
}
}
}
}
if (bHasCompletedSim) {
modelStat.count_model_simcomplete++;
}
} catch (Exception e2) {
e2.printStackTrace(System.out);
}
}
}
}
itemCount++;
statOutputPW.println(itemCount + ". MathModel Statistics ");
statOutputPW.println("====================================================");
for (ModelStat modelStat : mathModelStats) {
statOutputPW.println("\t" + modelStat.title);
statOutputPW.println("========================================");
statOutputPW.println("number of mathmodels saved :\t" + modelStat.count_model);
statOutputPW.println("number of mathmodels that has at least 1 completed simulation :\t" + modelStat.count_model_simcomplete);
statOutputPW.println();
statOutputPW.println("Simulation statistics (including all simulations (stopped, failed, completed) :");
statOutputPW.println("number of run simulation ODE :\t" + modelStat.count_geoDimSim[0]);
statOutputPW.println("number of run simulation 1D :\t" + modelStat.count_geoDimSim[1]);
statOutputPW.println("number of run simulation 2D :\t" + modelStat.count_geoDimSim[2]);
statOutputPW.println("number of run simulation 3D :\t" + modelStat.count_geoDimSim[3]);
statOutputPW.println("number of run simulation Semi-Implicit :\t" + modelStat.count_semiSim);
statOutputPW.println("number of run simulation Fully-Implicit :\t" + modelStat.count_fullySim);
statOutputPW.println("number of run simulation stochastic :\t" + modelStat.count_sim_stochastic);
statOutputPW.println("number of run simulation deterministic :\t" + modelStat.count_sim_deterministic);
statOutputPW.println();
statOutputPW.println("Running time histogram for completed simulations only:");
statOutputPW.println("0 ~ 2min:\t" + modelStat.runningTimeHistogram[0]);
statOutputPW.println("2 ~ 5min:\t" + modelStat.runningTimeHistogram[1]);
statOutputPW.println("5 ~ 20min:\t" + modelStat.runningTimeHistogram[2]);
statOutputPW.println("20min ~ 1hr:\t" + modelStat.runningTimeHistogram[3]);
statOutputPW.println("1hr ~ 1day:\t" + modelStat.runningTimeHistogram[4]);
statOutputPW.println(">1day:\t" + modelStat.runningTimeHistogram[5]);
statOutputPW.println();
statOutputPW.println();
statOutputPW.flush();
}
}
use of org.vcell.util.BigString in project vcell by virtualcell.
the class VCDatabaseScanner method scanMathModels.
public void scanMathModels(VCDatabaseVisitor databaseVisitor, PrintStream logFilePrintStream, User[] users, KeyValue singleMathmodelKey, HashSet<KeyValue> includeHash, HashSet<KeyValue> excludeHash, boolean bAbortOnDataAccessException) throws DataAccessException, XmlParseException {
BadMathVisitor badMathVisitor = null;
if (databaseVisitor instanceof BadMathVisitor) {
badMathVisitor = (BadMathVisitor) databaseVisitor;
}
final boolean isBadMathVisitor = badMathVisitor != null;
if (users == null) {
users = getAllUsers();
}
try {
// start visiting models and writing log
logFilePrintStream.println("Start scanning mathmodels ......");
logFilePrintStream.println("\n");
for (int i = 0; i < users.length; i++) {
User user = users[i];
MathModelInfo[] mathInfos = dbServerImpl.getMathModelInfos(user, false);
for (int j = 0; j < mathInfos.length; j++) {
if (singleMathmodelKey != null && !mathInfos[j].getVersion().getVersionKey().compareEqual(singleMathmodelKey)) {
System.out.println("skipping geometry, not the single one that we wanted");
continue;
}
if (excludeHash != null && excludeHash.contains(mathInfos[j].getVersion().getVersionKey())) {
System.out.println("skipping geometry with key '" + mathInfos[j].getVersion().getVersionKey() + "'");
continue;
}
if (includeHash != null && !includeHash.contains(mathInfos[j].getVersion().getVersionKey())) {
System.out.println("not including geometry with key '" + mathInfos[j].getVersion().getVersionKey() + "'");
continue;
}
if (!databaseVisitor.filterMathModel(mathInfos[j])) {
continue;
}
KeyValue vk = null;
try {
vk = mathInfos[j].getVersion().getVersionKey();
BigString mathModelXML = dbServerImpl.getMathModelXML(user, mathInfos[j].getVersion().getVersionKey());
MathModel mathModel = cbit.vcell.xml.XmlHelper.XMLToMathModel(new XMLSource(mathModelXML.toString()));
mathModel.refreshDependencies();
databaseVisitor.visitMathModel(mathModel, logFilePrintStream);
} catch (Exception e2) {
if (isBadMathVisitor) {
badMathVisitor.unableToLoad(vk, e2);
}
lg.error(e2.getMessage(), e2);
if (bAbortOnDataAccessException) {
throw e2;
}
}
}
}
logFilePrintStream.close();
} catch (Exception e) {
System.err.println("error writing to log file.");
}
}
Aggregations