use of uk.ac.ebi.www.biomodels_main.services.BioModelsWebServices.BioModelsWebServicesServiceLocator in project vcell by virtualcell.
the class BioModelsNetJPanel method searchImport.
private void searchImport() {
AsynchClientTask searchTask = new AsynchClientTask("Search BioModels", AsynchClientTask.TASKTYPE_NONSWING_BLOCKING) {
@Override
public void run(Hashtable<String, Object> hashTable) throws Exception {
Hashtable<String, String> vcellCompatibleBioModels_ID_Name_Hash = readVCellCompatibleBioModels_ID_Name_Hash();
ClientTaskStatusSupport clientTaskStatusSupport = getClientTaskStatusSupport();
// clientTaskStatusSupport.setProgress(0);
clientTaskStatusSupport.setMessage("Initializing BioModels Search...");
BioModelsWebServicesServiceLocator bioModelsWebServicesServiceLocator = new BioModelsWebServicesServiceLocator();
BioModelsWebServices bioModelsWebServices = bioModelsWebServicesServiceLocator.getBioModelsWebServices();
// clientTaskStatusSupport.setProgress(10);
clientTaskStatusSupport.setMessage("Executing BioModels Search...");
TreeSet<String> modelIDsMergedSearch = new TreeSet<String>();
boolean bHasModelEntryID = modelEntryIDTextField.getText() != null && modelEntryIDTextField.getText().length() > 0;
if (bHasModelEntryID) {
clientTaskStatusSupport.setMessage("Executing BioModels Search (Model ID matches)...");
// String[] modelIDsAll = bioModelsWebServices.getAllModelsId();
String[] modelIDsAll = vcellCompatibleBioModels_ID_Name_Hash.keySet().toArray(new String[0]);
for (int i = 0; i < modelIDsAll.length; i++) {
if (modelIDsAll[i].toUpperCase().indexOf(modelEntryIDTextField.getText().toUpperCase()) != -1) {
modelIDsMergedSearch.add(modelIDsAll[i]);
}
}
}
boolean bHasModelName = modelNameTextField.getText() != null && modelNameTextField.getText().length() > 0;
if (bHasModelName) {
clientTaskStatusSupport.setMessage("Executing BioModels Search (Model Name matches)...");
TreeSet<String> modelIDsByNameSet = new TreeSet<String>();
// String[] modelIDsByName = bioModelsWebServices.getModelsIdByName(modelNameTextField.getText());
String[] modelIDsAll = vcellCompatibleBioModels_ID_Name_Hash.keySet().toArray(new String[0]);
for (int i = 0; i < modelIDsAll.length; i++) {
if (vcellCompatibleBioModels_ID_Name_Hash.get(modelIDsAll[i]).toUpperCase().indexOf(modelNameTextField.getText().toUpperCase()) != -1) {
modelIDsByNameSet.add(modelIDsAll[i]);
}
}
// }
if (bHasModelEntryID) {
// intersection
modelIDsMergedSearch.retainAll(modelIDsByNameSet);
} else {
modelIDsMergedSearch = modelIDsByNameSet;
}
}
boolean bHasModelPublication = publicationTextField.getText() != null && publicationTextField.getText().length() > 0;
if (bHasModelPublication) {
clientTaskStatusSupport.setMessage("Executing BioModels Search (Publication matches)...");
TreeSet<String> modelIDsByPublicationSet = new TreeSet<String>();
String[] modelIDsbyPublication = bioModelsWebServices.getModelsIdByPublication(publicationTextField.getText());
for (int i = 0; i < modelIDsbyPublication.length; i++) {
modelIDsByPublicationSet.add(modelIDsbyPublication[i]);
}
if (bHasModelEntryID || bHasModelName) {
// intersection
modelIDsMergedSearch.retainAll(modelIDsByPublicationSet);
} else {
modelIDsMergedSearch = modelIDsByPublicationSet;
}
}
if (!(bHasModelEntryID || bHasModelName || bHasModelPublication)) {
// Get all models
// modelIDsMergedSearch.addAll(Arrays.asList(bioModelsWebServices.getAllModelsId()));
modelIDsMergedSearch.addAll(Arrays.asList(vcellCompatibleBioModels_ID_Name_Hash.keySet().toArray(new String[0])));
}
// clientTaskStatusSupport.setProgress(COLLECTION_PROGRESS);
if (modelIDsMergedSearch.size() > 0) {
// Intersect with supported BioModel IDs
modelIDsMergedSearch.retainAll(Arrays.asList(vcellCompatibleBioModels_ID_Name_Hash.keySet().toArray(new String[0])));
clientTaskStatusSupport.setMessage("Found " + modelIDsMergedSearch.size() + " VCell compatible BioModels");
String[] modelIDMergedSearchArr = modelIDsMergedSearch.toArray(new String[0]);
TreeMap<String, String> model_ID_Name_Map = new TreeMap<String, String>();
String nameNotfound = "NameNotFound_0";
for (int i = 0; i < modelIDMergedSearchArr.length; i++) {
if (clientTaskStatusSupport.isInterrupted()) {
// DialogUtils.showWarningDialog(BioModelsNetJPanel.this, "Search Cancelled");
throw UserCancelException.CANCEL_GENERIC;
}
try {
// clientTaskStatusSupport.setMessage("Retrieving "+modelIDMergedSearchArr[i]+" "+(i+1)+" of "+modelIDMergedSearchArr.length);
// String modelName = bioModelsWebServices.getModelNameById(modelIDMergedSearchArr[i]);
String modelName = vcellCompatibleBioModels_ID_Name_Hash.get(modelIDMergedSearchArr[i]);
// Assume model names are unique
model_ID_Name_Map.put(modelName, modelIDMergedSearchArr[i]);
} catch (Exception e) {
// For some reason Web Service API sometimes throws java.util.NoSuchElementException
// if id exists but name can't be found.
e.printStackTrace();
model_ID_Name_Map.put(nameNotfound, modelIDMergedSearchArr[i]);
nameNotfound = TokenMangler.getNextEnumeratedToken(nameNotfound);
}
}
// Make name,id rowdata for tablelist to allow user selection
String[] sortedModelNames = model_ID_Name_Map.keySet().toArray(new String[0]);
final String[][] rowData = new String[sortedModelNames.length][2];
for (int i = 0; i < sortedModelNames.length; i++) {
rowData[i][0] = sortedModelNames[i];
rowData[i][1] = model_ID_Name_Map.get(sortedModelNames[i]);
}
// Allow user to select model for opening
final String importNow = "Import";
final String cancel = "Cancel";
DialogUtils.TableListResult result = DialogUtils.showComponentOptionsTableList(BioModelsNetJPanel.this, "Select a BioModel to import", new String[] { "Model Names", "BioModels Entry ID" }, rowData, ListSelectionModel.SINGLE_SELECTION, null, new String[] { importNow, cancel }, importNow, new Comparator<Object>() {
public int compare(Object o1, Object o2) {
if (o1 instanceof String && o2 instanceof String) {
return ((String) o1).compareTo((String) o2);
}
throw new RuntimeException("row data should only be String");
}
});
if (result.selectedOption != null && result.selectedOption.equals(importNow)) {
// Close Dialog showing "this" panel so ProgressPopup not obscured during openDocument
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
disposeParentDialog();
}
});
closeClientTaskStatusSupport(clientTaskStatusSupport);
// Download and open (in new window) SBML document selected by user
String bioModelSBML = bioModelsWebServices.getModelSBMLById(rowData[result.selectedTableRows[0]][1]);
final ExternalDocInfo externalDocInfo = new ExternalDocInfo(bioModelSBML, sortedModelNames[result.selectedTableRows[0]]);
new Thread(new Runnable() {
public void run() {
documentWindow.getTopLevelWindowManager().getRequestManager().openDocument(externalDocInfo, documentWindow.getTopLevelWindowManager(), true);
}
}).start();
}
} else {
closeClientTaskStatusSupport(clientTaskStatusSupport);
DialogUtils.showWarningDialog(BioModelsNetJPanel.this, "No BioModels found matching current search criteria.");
throw UserCancelException.CANCEL_GENERIC;
}
}
};
ClientTaskDispatcher.dispatch(BioModelsNetJPanel.this, new Hashtable<String, Object>(), new AsynchClientTask[] { searchTask }, true, true, null, true);
}
use of uk.ac.ebi.www.biomodels_main.services.BioModelsWebServices.BioModelsWebServicesServiceLocator in project vcell by virtualcell.
the class BioModelsNetPanel method importFromBioModelsNet.
public void importFromBioModelsNet() {
Object obj = tree.getLastSelectedPathComponent();
if (obj == null || !(obj instanceof BioModelNode)) {
return;
}
BioModelNode selectedNode = (BioModelNode) obj;
Object userObject = selectedNode.getUserObject();
if (!(userObject instanceof BioModelsNetModelInfo)) {
return;
}
final BioModelsNetModelInfo bioModelsNetInfo = (BioModelsNetModelInfo) userObject;
AsynchClientTask task1 = new AsynchClientTask("Importing " + bioModelsNetInfo.getName(), AsynchClientTask.TASKTYPE_NONSWING_BLOCKING) {
@Override
public void run(Hashtable<String, Object> hashTable) throws Exception {
BioModelsWebServicesServiceLocator bioModelsWebServicesServiceLocator = new BioModelsWebServicesServiceLocator();
BioModelsWebServices bioModelsWebServices = bioModelsWebServicesServiceLocator.getBioModelsWebServices();
String bioModelSBML = bioModelsWebServices.getModelSBMLById(bioModelsNetInfo.getId());
ExternalDocInfo externalDocInfo = ExternalDocInfo.createBioModelsNetExternalDocInfo(bioModelSBML, bioModelsNetInfo.getName());
if (externalDocInfo != null) {
hashTable.put("externalDocInfo", externalDocInfo);
}
}
};
AsynchClientTask task2 = new AsynchClientTask("Opening", AsynchClientTask.TASKTYPE_NONSWING_BLOCKING) {
@Override
public void run(Hashtable<String, Object> hashTable) throws Exception {
ExternalDocInfo externalDocInfo = (ExternalDocInfo) hashTable.get("externalDocInfo");
if (externalDocInfo == null) {
return;
}
documentWindowManager.getRequestManager().openDocument(externalDocInfo, documentWindowManager, true);
}
};
ClientTaskDispatcher.dispatch(documentWindowManager.getComponent(), new Hashtable<String, Object>(), new AsynchClientTask[] { task1, task2 }, false);
}
use of uk.ac.ebi.www.biomodels_main.services.BioModelsWebServices.BioModelsWebServicesServiceLocator in project vcell by virtualcell.
the class BioModelsNetPropertiesPanel method importFromBioModelsNet.
public void importFromBioModelsNet() {
AsynchClientTask task1 = new AsynchClientTask("Importing " + bioModelsNetModelInfo.getName(), AsynchClientTask.TASKTYPE_NONSWING_BLOCKING) {
@Override
public void run(Hashtable<String, Object> hashTable) throws Exception {
BioModelsWebServicesServiceLocator bioModelsWebServicesServiceLocator = new BioModelsWebServicesServiceLocator();
BioModelsWebServices bioModelsWebServices = bioModelsWebServicesServiceLocator.getBioModelsWebServices();
String bioModelSBML = bioModelsWebServices.getModelSBMLById(bioModelsNetModelInfo.getId());
ExternalDocInfo externalDocInfo = new ExternalDocInfo(bioModelSBML, bioModelsNetModelInfo.getName());
if (externalDocInfo != null) {
hashTable.put("externalDocInfo", externalDocInfo);
}
}
};
AsynchClientTask task2 = new AsynchClientTask("Opening", AsynchClientTask.TASKTYPE_NONSWING_BLOCKING) {
@Override
public void run(Hashtable<String, Object> hashTable) throws Exception {
ExternalDocInfo externalDocInfo = (ExternalDocInfo) hashTable.get("externalDocInfo");
if (externalDocInfo == null) {
return;
}
documentWindowManager.getRequestManager().openDocument(externalDocInfo, documentWindowManager, true);
}
};
ClientTaskDispatcher.dispatch(documentWindowManager.getComponent(), new Hashtable<String, Object>(), new AsynchClientTask[] { task1, task2 }, false);
}
use of uk.ac.ebi.www.biomodels_main.services.BioModelsWebServices.BioModelsWebServicesServiceLocator in project vcell by virtualcell.
the class BiomodelsDB_TestSuite method main.
public static void main(String[] args) {
try {
Logging.init();
/*sanity check -- we currently only have a copasi_java dll for 32-bit, so let's make sure
* we're running on the right JVM. (Note we can run this on 64 bit machine, just have to install
* a 32 bit JVM...)
*/
OperatingSystemInfo osi = OperatingSystemInfo.getInstance();
if (!osi.isWindows() || osi.is64bit()) {
System.err.println("run on 32 bit JVM");
System.exit(99);
}
// following are set in command line processing
SortedSet<BiomodelsNetEntry> modelIDs = new TreeSet<BiomodelsNetEntry>();
BioModelsWebServices service = null;
File outDir = null;
boolean isDetailed;
{
// scope for command line processing
Options commandOptions = new Options();
Option help = new Option("help", false, "show help");
commandOptions.addOption(help);
Option detailed = new Option("detailed", false, "record detailed information");
commandOptions.addOption(detailed);
Option output = new Option("output", true, "output directory");
output.setRequired(true);
commandOptions.addOption(output);
OptionGroup primary = new OptionGroup();
LOption min = new LOption("min", true, "minimum number of model to import", true);
min.setType(Number.class);
LOption only = new LOption("only", true, "run only this model", false);
only.setType(Number.class);
LOption include = new LOption("include", true, "run on models in specified file", false);
include.setType(String.class);
LOption exclude = new LOption("exclude", true, "exclude models in specified file", true);
exclude.setType(String.class);
primary.addOption(min).addOption(only).addOption(include).addOption(exclude);
for (Object obj : primary.getOptions()) {
// CLI old, non-generic API
commandOptions.addOption((Option) obj);
}
CommandLine cmdLine = null;
try {
CommandLineParser parser = new DefaultParser();
cmdLine = parser.parse(commandOptions, args);
} catch (ParseException e1) {
e1.printStackTrace();
HelpFormatter hf = new HelpFormatter();
hf.printHelp("BiomodelsDB_TestSuite", commandOptions);
System.exit(2);
}
Option[] present = cmdLine.getOptions();
Set<Option> optionSet = new HashSet<Option>(Arrays.asList(present));
if (optionSet.contains(help)) {
HelpFormatter hf = new HelpFormatter();
hf.printHelp("BiomodelsDB_TestSuite", commandOptions);
System.exit(0);
}
// placeholder, avoid messing with nulls
LOption primaryOpt = new LOption("", false, "", true);
@SuppressWarnings("unchecked") Collection<? extends Option> priOpts = primary.getOptions();
priOpts.retainAll(optionSet);
if (!priOpts.isEmpty()) {
assert (priOpts.size() == 1);
primaryOpt = (LOption) priOpts.iterator().next();
}
outDir = new File(cmdLine.getOptionValue(output.getOpt()));
if (!outDir.exists()) {
outDir.mkdirs();
}
isDetailed = optionSet.contains(detailed);
BioModelsWebServicesServiceLocator locator = new BioModelsWebServicesServiceLocator();
service = locator.getBioModelsWebServices();
if (primaryOpt.downloads) {
String[] modelStrings = service.getAllCuratedModelsId();
for (String s : modelStrings) {
modelIDs.add(new BiomodelsNetEntry(s));
}
}
if (primaryOpt == only) {
Long only1 = (Long) cmdLine.getParsedOptionValue(only.getOpt());
modelIDs.add(new BiomodelsNetEntry(only1.intValue()));
} else if (primaryOpt == min) {
Long lv = (Long) cmdLine.getParsedOptionValue(min.getOpt());
int minimumModel = lv.intValue();
for (int m = 0; m < minimumModel; m++) {
modelIDs.remove(new BiomodelsNetEntry(m));
}
} else if (primaryOpt == include) {
FileBaseFilter fbf = new FileBaseFilter(cmdLine.getOptionValue(include.getOpt()));
modelIDs.addAll(fbf.models);
} else if (primaryOpt == exclude) {
FileBaseFilter fbf = new FileBaseFilter(cmdLine.getOptionValue(exclude.getOpt()));
modelIDs.removeAll(fbf.models);
}
}
// end command line processing
WriterFlusher flusher = new WriterFlusher(10);
PrintWriter detailWriter;
PrintWriter bngWriter;
PrintWriter sbmlWriter;
SBMLExceptionSorter sbmlExceptions;
if (isDetailed) {
detailWriter = new PrintWriter(new File(outDir, "compareDetail.txt"));
bngWriter = new PrintWriter(new File(outDir, "bngErrors.txt"));
sbmlWriter = new PrintWriter(new File(outDir, "sbmlErrors.txt"));
sbmlExceptions = new LiveSorter();
flusher.add(detailWriter);
flusher.add(bngWriter);
flusher.add(sbmlWriter);
} else {
detailWriter = new PrintWriter(new NullWriter());
bngWriter = new PrintWriter(new NullWriter());
sbmlWriter = new PrintWriter(new NullWriter());
sbmlExceptions = new NullSorter();
}
PropertyLoader.loadProperties();
/**
* example properties
*
* vcell.COPASI.executable = "C:\\Program Files\\COPASI\\bin\\CopasiSE.exe"
* vcell.mathSBML.directory = "c:\\developer\\eclipse\\workspace\\mathsbml\\"
* vcell.mathematica.kernel.executable = "C:\\Program Files\\Wolfram Research\\Mathematica\\7.0\\MathKernel.exe"
*/
ResourceUtil.setNativeLibraryDirectory();
PrintWriter printWriter = new PrintWriter(new FileWriter(new File(outDir, "summary.log"), true));
flusher.add(printWriter);
listModels(printWriter, modelIDs);
// SBMLSolver copasiSBMLSolver = new CopasiSBMLSolver();
SBMLSolver copasiSBMLSolver = new SBMLSolver() {
@Override
public File solve(String filePrefix, File outDir, String sbmlText, SimSpec testSpec) throws IOException, SolverException, SbmlException {
throw new RuntimeException("COPASI SOLVER REMOVED, REIMPLEMENT");
}
@Override
public String getResultsFileColumnDelimiter() {
throw new RuntimeException("COPASI SOLVER REMOVED, REIMPLEMENT");
}
};
try {
printWriter.println(" | *BIOMODEL ID* | *BioModel name* | *PASS* | *Rel Error (VC/COP)(VC/MSBML)(COP/MSBML)* | *Exception* | ");
removeToxic(modelIDs, printWriter);
for (BiomodelsNetEntry modelID : modelIDs) {
String modelName = service.getModelNameById(modelID.toString());
String modelSBML = service.getModelById(modelID.toString());
Element bioModelInfo = new Element(BioModelsNetPanel.BIOMODELINFO_ELEMENT_NAME);
bioModelInfo.setAttribute(BioModelsNetPanel.ID_ATTRIBUTE_NAME, modelID.toString());
bioModelInfo.setAttribute(BioModelsNetPanel.SUPPORTED_ATTRIBUTE_NAME, "false");
bioModelInfo.setAttribute("vcell_ran", "false");
bioModelInfo.setAttribute("COPASI_ran", "false");
bioModelInfo.setAttribute("mSBML_ran", "false");
bioModelInfo.setAttribute(BioModelsNetPanel.MODELNAME_ATTRIBUTE_NAME, modelName);
boolean bUseUTF8 = true;
File sbmlFile = new File(outDir, modelID + ".sbml");
XmlUtil.writeXMLStringToFile(modelSBML, sbmlFile.getAbsolutePath(), bUseUTF8);
PrintStream saved_sysout = System.out;
PrintStream saved_syserr = System.err;
PrintStream new_sysout = null;
PrintStream new_syserr = null;
try {
String filePrefix = modelID.toString();
String sbmlText = modelSBML;
File logFile = new File(outDir, filePrefix + ".log");
new_sysout = new PrintStream(logFile);
new_syserr = new_sysout;
System.setOut(new_sysout);
System.setErr(new_syserr);
StringBuffer combinedErrorBuffer = new StringBuffer();
SimSpec simSpec = SimSpec.fromSBML(modelSBML);
String[] varsToTest = simSpec.getVarsList();
printWriter.print("ModelId: " + modelID + ": ");
// if a model crashes out the libSBML dll, we will terminate abruptly. Flush
// summary log before that happens
printWriter.flush();
try {
//
// get VCell solution with an embedded "ROUND TRIP" (time and species concentrations)
//
ODESolverResultSet vcellResults_RT = null;
try {
VCellSBMLSolver vcellSBMLSolver_RT = new VCellSBMLSolver();
vcellSBMLSolver_RT.setRoundTrip(false);
// TODO try with round-trip later.
String columnDelimiter = vcellSBMLSolver_RT.getResultsFileColumnDelimiter();
File resultFile = vcellSBMLSolver_RT.solve(filePrefix, outDir, sbmlFile.getAbsolutePath(), simSpec);
vcellResults_RT = readResultFile(resultFile, columnDelimiter);
bioModelInfo.setAttribute("vcell_ran", "true");
} catch (BNGException e) {
bngWriter.println(modelID + " " + e.getMessage());
throw e;
} catch (SBMLImportException e) {
ModelException me = new ModelException(modelID, e);
write(sbmlWriter, me);
sbmlExceptions.add(me);
throw e;
} catch (Exception e) {
printWriter.println("vcell solve(roundtrip=true) failed");
e.printStackTrace(printWriter);
System.out.println("vcell solve(roundtrip=true) failed");
e.printStackTrace(System.out);
combinedErrorBuffer.append(" *VCELL_RT* _" + e.getMessage() + "_ ");
Element vcellSolverReport = new Element("SolverReport");
vcellSolverReport.setAttribute("solverName", "vcell");
vcellSolverReport.setAttribute("errorMessage", e.getMessage());
bioModelInfo.addContent(vcellSolverReport);
bioModelInfo.setAttribute("vcell_ran", "false");
}
//
// get COPASI solution (time and species concentrations)
//
ODESolverResultSet copasiResults = null;
try {
String columnDelimiter = copasiSBMLSolver.getResultsFileColumnDelimiter();
File resultFile = copasiSBMLSolver.solve(filePrefix, outDir, sbmlText, simSpec);
copasiResults = readResultFile(resultFile, columnDelimiter);
bioModelInfo.setAttribute("COPASI_ran", "true");
} catch (Exception e) {
printWriter.println("Copasi solve() failed");
e.printStackTrace(printWriter);
System.out.println("Copasi solve() failed");
e.printStackTrace(System.out);
combinedErrorBuffer.append(" *COPASI* _" + e.getMessage() + "_ ");
Element copasiSolverReport = new Element("SolverReport");
copasiSolverReport.setAttribute("solverName", "COPASI");
copasiSolverReport.setAttribute("errorMessage", e.getMessage());
bioModelInfo.addContent(copasiSolverReport);
bioModelInfo.setAttribute("COPASI_ran", "false");
}
//
// get mSBML solution (time and species concentrations)
//
/*
ODESolverResultSet mSBMLResults = null;
if (idInt != 246 && idInt != 250 && idInt != 285 && idInt != 301) {
try {
MathSBMLSolver mSBMLSolver = new MathSBMLSolver();
String columnDelimiter = mSBMLSolver.getResultsFileColumnDelimiter();
org.sbml.libsbml.SBMLDocument sbmlDocument = new SBMLReader().readSBML(sbmlFile.getAbsolutePath());
long level = sbmlDocument.getLevel();
long version = sbmlDocument.getVersion();
String mathsbmlFilePrefix = filePrefix;
if (level!=2 || (level==2 && version>3)){
// sbmlDocument.setConsistencyChecksForConversion(libsbmlConstants.LIBSBML_CAT_MODELING_PRACTICE, false);
long numErrors = sbmlDocument.checkL2v3Compatibility();
if (numErrors==0){
boolean bConversionWorked = sbmlDocument.setLevelAndVersion(2, 3, false);
SBMLDocument doc = new SBMLDocument(sbmlDocument);
doc.setLevelAndVersion(2,3,false);
if (bConversionWorked){
mathsbmlFilePrefix = filePrefix+"_L2V3";
long newVersion = doc.getVersion();
SBMLWriter sbmlWriter = new SBMLWriter();
sbmlText = sbmlWriter.writeToString(doc);
try {
XmlUtil.writeXMLStringToFile(sbmlText, mathsbmlFilePrefix+".sbml", true);
} catch (IOException e1) {
e1.printStackTrace(System.out);
}
}else{
throw new RuntimeException("couldn't convert SBML from L"+level+"V"+version+" to L2V3");
}
}else{
throw new RuntimeException("couldn't convert SBML from L"+level+"V"+version+" to L2V3, not compatible: "+sbmlDocument.getError(0));
}
}
File resultFile = mSBMLSolver.solve(mathsbmlFilePrefix, outDir, sbmlText, simSpec);
mSBMLResults = readResultFile(resultFile, columnDelimiter);
bioModelInfo.setAttribute("mSBML_ran","true");
}catch (Exception e){
printWriter.println("mSBML solve() failed");
e.printStackTrace(printWriter);
System.out.println("mSBML solve() failed");
e.printStackTrace(System.out);
combinedErrorBuffer.append(" *mSBML* _"+e.getMessage()+"_ ");
Element mSBMLSolverReport = new Element("SolverReport");
mSBMLSolverReport.setAttribute("solverName","mSBML");
mSBMLSolverReport.setAttribute("errorMessage",e.getMessage());
bioModelInfo.addContent(mSBMLSolverReport);
bioModelInfo.setAttribute("mSBML_ran","false");
}
}
*/
//
// compare results from COPASI and VCELL_RT
//
Boolean bCOPASI_VCELL_matched = null;
if (copasiResults != null && vcellResults_RT != null) {
try {
SimulationComparisonSummary summary = MathTestingUtilities.compareResultSets(copasiResults, vcellResults_RT, varsToTest, TestCaseNew.REGRESSION, 1e-5, 1e-5);
double maxRelError = summary.getMaxRelativeError();
bioModelInfo.setAttribute("COPASI_VCELL_maxRelErr", Double.toString(maxRelError));
if (maxRelError < 1) {
bCOPASI_VCELL_matched = true;
} else {
detailWriter.println(modelID + " " + modelName);
bCOPASI_VCELL_matched = false;
Element solverComparison = new Element("SolverComparison");
solverComparison.setAttribute("solver1", "vcell");
solverComparison.setAttribute("solver2", "COPASI");
VariableComparisonSummary[] failedVCSummaries = summary.getFailingVariableComparisonSummaries(1e-5, 1e-5);
for (VariableComparisonSummary vcSummary : failedVCSummaries) {
Element failedVariableSummary = getVariableSummary(vcSummary);
solverComparison.addContent(failedVariableSummary);
String ss = vcSummary.toShortString();
detailWriter.print('\t');
detailWriter.println(ss);
System.out.println(ss);
}
detailWriter.println();
bioModelInfo.addContent(solverComparison);
}
} catch (Exception e) {
printWriter.println("COMPARE VC/COPASI failed");
e.printStackTrace(printWriter);
System.out.println("COMPARE VC/COPASI failed");
e.printStackTrace(System.out);
combinedErrorBuffer.append(" *COMPARE VC/COPASI* _" + e.getMessage() + "_ ");
Element solverComparison = new Element("SolverComparison");
solverComparison.setAttribute("solver1", "vcell");
solverComparison.setAttribute("solver2", "COPASI");
solverComparison.setAttribute("error", e.getMessage());
bioModelInfo.addContent(solverComparison);
}
}
/*
Boolean bmSBML_VCELL_matched = null;
if (mSBMLResults!=null && vcellResults_RT!=null){
try {
SimulationComparisonSummary summary = MathTestingUtilities.compareUnEqualResultSets(mSBMLResults, vcellResults_RT, varsToTest, 1e-5, 1e-5, 1);
double maxRelError = summary.getMaxRelativeError();
bioModelInfo.setAttribute("mSBML_VCELL_maxRelErr", Double.toString(maxRelError));
if (maxRelError<1){
bmSBML_VCELL_matched = true;
}else{
bmSBML_VCELL_matched = false;
Element solverComparison = new Element("SolverComparison");
solverComparison.setAttribute("solver1","vcell");
solverComparison.setAttribute("solver2","mSBML");
VariableComparisonSummary[] failedVCSummaries = summary.getFailingVariableComparisonSummaries(1e-5, 1e-5);
for (VariableComparisonSummary vcSummary : failedVCSummaries){
Element failedVariableSummary = getVariableSummary(vcSummary);
solverComparison.addContent(failedVariableSummary);
System.out.println(vcSummary.toShortString());
}
bioModelInfo.addContent(solverComparison);
}
} catch (Exception e) {
printWriter.println("COMPARE VCRT/mSBML failed");
e.printStackTrace(printWriter);
System.out.println("COMPARE VCRT/mSBML failed");
e.printStackTrace(System.out);
combinedErrorBuffer.append(" *COMPARE VCRT/mSBML* _"+e.getMessage()+"_ ");
Element solverComparison = new Element("SolverComparison");
solverComparison.setAttribute("solver1","vcell");
solverComparison.setAttribute("solver2","mSBML");
solverComparison.setAttribute("error",e.getMessage());
bioModelInfo.addContent(solverComparison);
}
}
//
// compare results from COPASI and mSBML
//
Boolean bCOPASI_mSBML_matched = null;
if (copasiResults!=null && mSBMLResults!=null){
try {
SimulationComparisonSummary summary = MathTestingUtilities.compareUnEqualResultSets(copasiResults, mSBMLResults, varsToTest, 1e-5, 1e-5, 1);
double maxRelError = summary.getMaxRelativeError();
bioModelInfo.setAttribute("COPASI_mSBML_maxRelErr", Double.toString(maxRelError));
if (maxRelError<1){
bCOPASI_mSBML_matched = true;
}else{
bCOPASI_mSBML_matched = false;
Element solverComparison = new Element("SolverComparison");
solverComparison.setAttribute("solver1","COPASI");
solverComparison.setAttribute("solver2","mSBML");
solverComparison.setAttribute("result","failed");
VariableComparisonSummary[] vcSummaries = summary.getVariableComparisonSummaries();
for (VariableComparisonSummary vcSummary : vcSummaries){
Element failedVariableSummary = getVariableSummary(vcSummary);
solverComparison.addContent(failedVariableSummary);
System.out.println(vcSummary.toShortString());
}
bioModelInfo.addContent(solverComparison);
}
} catch (Exception e) {
printWriter.println("COMPARE COPASI/mSBML failed");
e.printStackTrace(printWriter);
System.out.println("COMPARE COPASI/mSBML failed");
e.printStackTrace(System.out);
combinedErrorBuffer.append(" *COMPARE COPASI/mSBML* _"+e.getMessage()+"_ ");
Element solverComparison = new Element("SolverComparison");
solverComparison.setAttribute("solver1","COPASI");
solverComparison.setAttribute("solver2","mSBML");
solverComparison.setAttribute("error",e.getMessage());
}
}
*/
if ((bCOPASI_VCELL_matched != null && bCOPASI_VCELL_matched.booleanValue())) {
// || /*(bmSBML_VCELL_matched!=null && bmSBML_VCELL_matched.booleanValue()) */ )
bioModelInfo.setAttribute(BioModelsNetPanel.SUPPORTED_ATTRIBUTE_NAME, "true");
printWriter.println("PASS");
} else {
bioModelInfo.setAttribute(BioModelsNetPanel.SUPPORTED_ATTRIBUTE_NAME, "false");
printWriter.println("FAIL");
}
} catch (Exception e) {
e.printStackTrace(printWriter);
combinedErrorBuffer.append(" *UNKNOWN* _" + e.getMessage() + "_ ");
bioModelInfo.setAttribute(BioModelsNetPanel.SUPPORTED_ATTRIBUTE_NAME, "false");
bioModelInfo.setAttribute("exception", e.getMessage());
}
printWriter.flush();
// write for each model just in case files get corrupted (it happened).
write(bioModelInfo, new File(outDir, modelID + "_report.xml"));
} finally {
if (new_sysout != null) {
new_sysout.close();
new_sysout = null;
}
if (new_syserr != null) {
new_syserr.close();
new_syserr = null;
}
System.setOut(saved_sysout);
System.setOut(saved_syserr);
}
}
// this writes out the SBML import exceptions grouped by type
if (!sbmlExceptions.isEmpty()) {
Map<Category, Collection<ModelException>> map = sbmlExceptions.getMap();
try (PrintWriter pw = new PrintWriter(new File(outDir, "sbmlSorted.txt"))) {
// SBMLImportException.Category
for (Category c : Category.values()) {
Collection<ModelException> meCollection = map.get(c);
for (ModelException me : meCollection) {
write(pw, me);
}
}
}
}
} finally {
printWriter.close();
detailWriter.close();
bngWriter.close();
}
} catch (Throwable e) {
e.printStackTrace(System.out);
e.printStackTrace(System.err);
}
System.exit(0);
}
Aggregations