use of cbit.vcell.server.bionetgen.BNGInput in project vcell by virtualcell.
the class RulebasedTransformer method generateNetwork.
private void generateNetwork(SimulationContext simContext, Set<ReactionRule> fromReactions, MathMappingCallback mathMappingCallback) throws ClassNotFoundException, IOException {
TaskCallbackMessage tcm;
BNGOutputSpec outputSpec;
speciesEquivalenceMap.clear();
kineticsParameterMap.clear();
NetworkGenerationRequirements networkGenerationRequirements = NetworkGenerationRequirements.ComputeFullNoTimeout;
String input = convertToBngl(simContext, true, mathMappingCallback, networkGenerationRequirements);
// System.out.println(input); // TODO: uncomment to see the xml string
for (Map.Entry<FakeSeedSpeciesInitialConditionsParameter, Pair<SpeciesContext, Expression>> entry : speciesEquivalenceMap.entrySet()) {
FakeSeedSpeciesInitialConditionsParameter key = entry.getKey();
Pair<SpeciesContext, Expression> value = entry.getValue();
SpeciesContext sc = value.one;
Expression initial = value.two;
System.out.println("key: " + key.fakeParameterName + ", species: " + sc.getName() + ", initial: " + initial.infix());
}
BNGInput bngInput = new BNGInput(input);
BNGOutput bngOutput = null;
try {
// for the writeXML command we don't want to run iteration by iteration - it wouldn't even make sense since we don't flatten anything
// so we run bionetgen the "old" way
final BNGExecutorService bngService = BNGExecutorService.getInstanceOld(bngInput, networkGenerationRequirements.timeoutDurationMS);
bngOutput = bngService.executeBNG();
} catch (RuntimeException ex) {
ex.printStackTrace(System.out);
// rethrow without losing context
throw ex;
} catch (Exception ex) {
ex.printStackTrace(System.out);
throw new RuntimeException(ex.getMessage());
}
simContext.setInsufficientIterations(false);
simContext.setInsufficientMaxMolecules(false);
String bngConsoleString = bngOutput.getConsoleOutput();
tcm = new TaskCallbackMessage(TaskCallbackStatus.DetailBatch, bngConsoleString);
// simContext.appendToConsole(tcm);
// String bngNetString = bngOutput.getNetFileContent();
// outputSpec = BNGOutputFileParser.createBngOutputSpec(bngNetString);
// //BNGOutputFileParser.printBNGNetOutput(outputSpec); // prints all output to console
//
// if (mathMappingCallback.isInterrupted()){
// String msg = "Canceled by user.";
// // tcm = new TaskCallbackMessage(TaskCallbackStatus.Error, msg);
// // simContext.appendToConsole(tcm);
// // simContext.setMd5hash(null); // clean the cache if the user interrupts
// throw new UserCancelException(msg);
// }
// if(outputSpec.getBNGSpecies().length > SimulationConsolePanel.speciesLimit) {
// String message = SimulationConsolePanel.getSpeciesLimitExceededMessage(outputSpec);
// // tcm = new TaskCallbackMessage(TaskCallbackStatus.Error, message);
// // simContext.appendToConsole(tcm);
// // simContext.setMd5hash(null);
// throw new RuntimeException(message);
// }
// if(outputSpec.getBNGReactions().length > SimulationConsolePanel.reactionsLimit) {
// String message = SimulationConsolePanel.getReactionsLimitExceededMessage(outputSpec);
// // tcm = new TaskCallbackMessage(TaskCallbackStatus.Error, message);
// // simContext.appendToConsole(tcm);
// // simContext.setMd5hash(null);
// throw new RuntimeException(message);
// }
// TODO: uncomment here to parse the xml file!!!
parseBngOutput(simContext, fromReactions, bngOutput);
//
// Saving the observables, as produced by bionetgen
// in debug configurations add to command line -Ddebug.user=danv
//
// String debugUser = PropertyLoader.getProperty("debug.user", "not_defined");
// if (debugUser.equals("danv") || debugUser.equals("mblinov")){
// System.out.println("Saving their observables");
// parseObservablesBngOutput(simContext, bngOutput);
// }
// compareOutputs(simContext);
}
use of cbit.vcell.server.bionetgen.BNGInput in project vcell by virtualcell.
the class BNGOutputPanel method runBNGButton_ActionPerformed.
/**
* Comment
*/
private void runBNGButton_ActionPerformed(java.awt.event.ActionEvent actionEvent) {
getConsoleTextArea().setText("");
getOutputTextArea().setText("");
getdefaultListModel().removeAllElements();
refreshButton(true);
// Do all the text checks here; and pop up warnings if needed, before going in to the BNGWindowManager to execute BNG.
if (getBNGLInputPanel().getText() == null || getBNGLInputPanel().getText().equals("")) {
PopupGenerator.showErrorDialog(this, "No input; Cannot run BioNetGen");
return;
}
setbngInput(new BNGInput(getBNGLInputPanel().getText()));
if (getbngInput() == null) {
PopupGenerator.showErrorDialog(this, "No input; Cannot run BioNetGen");
return;
}
// execute BNG thro' BNGWindowManager
getBngWindowManager().runBioNetGen(getbngInput());
// Clear the Output tab
((java.awt.CardLayout) getOutputsTextPanel().getLayout()).show(getOutputsTextPanel(), getOutputTextScrollPane().getName());
getOutputTextArea().setText("");
getOutputLabel().setText("");
}
use of cbit.vcell.server.bionetgen.BNGInput in project vcell by virtualcell.
the class NetworkConstraintsPanel method runBioNetGen.
private void runBioNetGen() {
EditConstraintsPanel panel = new EditConstraintsPanel(this);
ChildWindowManager childWindowManager = ChildWindowManager.findChildWindowManager(this);
ChildWindow childWindow = childWindowManager.addChildWindow(panel, panel, "Edit / Test Constraints");
Dimension dim = new Dimension(320, 330);
childWindow.pack();
panel.setChildWindow(childWindow);
childWindow.setPreferredSize(dim);
childWindow.showModal();
int maxIterations;
int maxMolecules;
int speciesLimit;
int reactionsLimit;
Map<MolecularType, Integer> testMaxStoichiometryMap = new LinkedHashMap<>();
StoichiometryTableModel stoichiometryTableModel = panel.getStoichiometryTableModel();
for (int row = 0; row < stoichiometryTableModel.getRowCount(); row++) {
MaxStoichiometryEntity nce = stoichiometryTableModel.getValueAt(row);
MolecularType key = nce.getMolecularType();
Integer value = nce.getValue();
testMaxStoichiometryMap.put(key, value);
}
if (panel.getButtonPushed() == ActionButtons.Run) {
maxIterations = new Integer(panel.maxIterationTextField.getText());
maxMolecules = new Integer(panel.maxMolTextField.getText());
speciesLimit = new Integer(panel.speciesLimitTextField.getText());
reactionsLimit = new Integer(panel.reactionsLimitTextField.getText());
fieldSimulationContext.getNetworkConstraints().setTestConstraints(maxIterations, maxMolecules, speciesLimit, reactionsLimit, testMaxStoichiometryMap);
} else if (panel.getButtonPushed() == ActionButtons.Apply) {
activateConsole();
maxIterations = new Integer(panel.maxIterationTextField.getText());
maxMolecules = new Integer(panel.maxMolTextField.getText());
speciesLimit = new Integer(panel.speciesLimitTextField.getText());
reactionsLimit = new Integer(panel.reactionsLimitTextField.getText());
fieldSimulationContext.getNetworkConstraints().setTestConstraints(maxIterations, maxMolecules, speciesLimit, reactionsLimit, testMaxStoichiometryMap);
fieldSimulationContext.getNetworkConstraints().updateConstraintsFromTest();
// apply will invalidate everything: generated species, reactions, console, cache, etc
updateBioNetGenOutput(null);
refreshInterface();
TaskCallbackMessage tcm = new TaskCallbackMessage(TaskCallbackStatus.Clean, "");
fieldSimulationContext.appendToConsole(tcm);
String message = "Warning: The current Constraints are not tested / validated.";
tcm = new TaskCallbackMessage(TaskCallbackStatus.Warning, message);
fieldSimulationContext.appendToConsole(tcm);
message = "The Network generation may take a very long time or the generated network may be incomplete. " + "We recommend testing this set of constraints.";
tcm = new TaskCallbackMessage(TaskCallbackStatus.Notification, message);
fieldSimulationContext.appendToConsole(tcm);
return;
} else {
// when cancel we put back in sync the test values
maxIterations = fieldSimulationContext.getNetworkConstraints().getMaxIteration();
maxMolecules = fieldSimulationContext.getNetworkConstraints().getMaxMoleculesPerSpecies();
speciesLimit = fieldSimulationContext.getNetworkConstraints().getSpeciesLimit();
reactionsLimit = fieldSimulationContext.getNetworkConstraints().getReactionsLimit();
fieldSimulationContext.getNetworkConstraints().setTestConstraints(maxIterations, maxMolecules, speciesLimit, reactionsLimit, testMaxStoichiometryMap);
return;
}
// TODO: do not delete the commented code below
// uncomment the next 6 lines to keep the data in the dialogs synchronized with the most recent reaction network
// if(viewSpeciesDialog != null) {
// viewSpeciesDialog.dispose();
// }
// if(viewReactionsDialog != null) {
// viewReactionsDialog.dispose();
// }
activateConsole();
// previousIterationSpecies = 0;
synchronized (this) {
fieldSimulationContext.setMd5hash(null);
fieldSimulationContext.setMostRecentlyCreatedOutputSpec(null);
}
refreshInterface();
if (!checkBnglRequirements()) {
return;
}
NetworkTransformer transformer = new NetworkTransformer();
MathMappingCallback dummyCallback = new MathMappingCallback() {
public void setProgressFraction(float percentDone) {
}
public void setMessage(String message) {
}
public boolean isInterrupted() {
return false;
}
};
String input = transformer.convertToBngl(fieldSimulationContext, true, dummyCallback, NetworkGenerationRequirements.ComputeFullNoTimeout);
// we alter the input string to use the test values for speciesLimit and reactionsLimit
BufferedReader br = new BufferedReader(new StringReader(input));
StringBuilder sb = new StringBuilder();
int lineNumber = 0;
while (true) {
String line = null;
try {
line = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
if (line == null) {
// end of document
break;
}
if (line.isEmpty()) {
sb.append("\n");
lineNumber++;
continue;
}
if (line.contains(NetworkConstraints.SPECIES_LIMIT_PARAMETER)) {
sb.append(NetworkConstraints.SPECIES_LIMIT_PARAMETER + "\t\t" + speciesLimit + "\n");
} else if (line.contains(NetworkConstraints.REACTIONS_LIMIT_PARAMETER)) {
sb.append(NetworkConstraints.REACTIONS_LIMIT_PARAMETER + "\t\t" + reactionsLimit + "\n");
} else {
sb.append(line + "\n");
}
}
input = sb.toString();
// we alter the input string to use the test values for max iterations and max molecules per species
// get rid of the default generate network command...
input = input.substring(0, input.indexOf("generate_network({"));
// ... and replace it with the "fake" one
StringWriter bnglStringWriter = new StringWriter();
PrintWriter pw = new PrintWriter(bnglStringWriter);
// testMaxStoichiometryMap
RbmNetworkGenerator.generateNetworkEx(maxIterations, maxMolecules, true, pw, fieldSimulationContext.getModel().getRbmModelContainer(), fieldSimulationContext, NetworkGenerationRequirements.ComputeFullNoTimeout);
String genNetStr = bnglStringWriter.toString();
pw.close();
input += genNetStr;
BNGInput bngInput = new BNGInput(input);
final BNGExecutorService bngService = BNGExecutorService.getInstance(bngInput, NetworkGenerationRequirements.NoTimeoutMS);
bngService.registerBngUpdaterCallback(this);
Hashtable<String, Object> hash = new Hashtable<String, Object>();
AsynchClientTask[] tasksArray = new AsynchClientTask[3];
TaskCallbackMessage message = new TaskCallbackMessage(TaskCallbackStatus.Clean, "");
fieldSimulationContext.appendToConsole(message);
tasksArray[0] = new RunBioNetGen(bngService);
tasksArray[1] = new CreateBNGOutputSpec(bngService);
tasksArray[2] = new ReturnBNGOutput(bngService, fieldSimulationContext, this);
ClientTaskDispatcher.dispatch(this, hash, tasksArray, false, true, new ProgressDialogListener() {
@Override
public void cancelButton_actionPerformed(EventObject newEvent) {
try {
bngService.stopBNG();
String s = "...user cancelled.";
TaskCallbackMessage tcm = new TaskCallbackMessage(TaskCallbackStatus.TaskStopped, s);
// message will be processed in TaskCallbackProcessor::case TaskStopped
setNewCallbackMessage(tcm);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
use of cbit.vcell.server.bionetgen.BNGInput in project vcell by virtualcell.
the class NetworkTransformer method generateNetwork.
private BNGOutputSpec generateNetwork(SimulationContext simContext, MathMappingCallback mathMappingCallback, NetworkGenerationRequirements networkGenerationRequirements) throws ClassNotFoundException, IOException {
TaskCallbackMessage tcm;
BNGOutputSpec outputSpec;
speciesEquivalenceMap.clear();
kineticsParameterMap.clear();
String input = convertToBngl(simContext, true, mathMappingCallback, networkGenerationRequirements);
for (Map.Entry<FakeSeedSpeciesInitialConditionsParameter, Pair<SpeciesContext, Expression>> entry : speciesEquivalenceMap.entrySet()) {
FakeSeedSpeciesInitialConditionsParameter key = entry.getKey();
Pair<SpeciesContext, Expression> value = entry.getValue();
SpeciesContext sc = value.one;
Expression initial = value.two;
System.out.println("key: " + key.fakeParameterName + ", species: " + sc.getName() + ", initial: " + initial.infix());
}
String md5hash = MD5.md5(input);
if (isBngHashValid(input, md5hash, simContext)) {
String s = "Previously saved outputSpec is up-to-date, no need to generate network.";
System.out.println(s);
tcm = new TaskCallbackMessage(TaskCallbackStatus.Notification, s);
simContext.appendToConsole(tcm);
if (simContext.isInsufficientIterations()) {
s = NetworkTransformer.getInsufficientIterationsMessage();
System.out.println(s);
tcm = new TaskCallbackMessage(TaskCallbackStatus.Error, s);
simContext.appendToConsole(tcm);
}
if (simContext.isInsufficientMaxMolecules()) {
s = NetworkTransformer.getInsufficientMaxMoleculesMessage();
System.out.println(s);
tcm = new TaskCallbackMessage(TaskCallbackStatus.Error, s);
simContext.appendToConsole(tcm);
}
outputSpec = simContext.getMostRecentlyCreatedOutputSpec();
return (BNGOutputSpec) BeanUtils.cloneSerializable(outputSpec);
}
BNGInput bngInput = new BNGInput(input);
BNGOutput bngOutput = null;
try {
final BNGExecutorService bngService = BNGExecutorService.getInstance(bngInput, networkGenerationRequirements.timeoutDurationMS);
bngService.registerBngUpdaterCallback(simContext);
bngOutput = bngService.executeBNG();
} catch (BNGException ex) {
ex.printStackTrace(System.out);
System.out.println("bionetgen exception");
if (ex.getMessage().contains("was asked to write the network, but no reactions were found")) {
RuntimeException rex = new RuntimeException("Specified species and reaction rules are not sufficient to define reaction network.");
throw rex;
} else {
// rethrow without losing context
throw ex;
}
} catch (RuntimeException ex) {
ex.printStackTrace(System.out);
System.out.println("runtime exception");
throw ex;
} catch (Exception ex) {
ex.printStackTrace(System.out);
System.out.println("other exception");
throw new RuntimeException(ex.getMessage());
}
// simContext.setInsufficientIterations(false);
// simContext.setInsufficientMaxMolecules(false);
String bngConsoleString = bngOutput.getConsoleOutput();
// TODO: this message we check if insufficient iterations / max molecules
// DO IT OUTSIDE (in the bng service), we now can
// tcm = new TaskCallbackMessage(TaskCallbackStatus.DetailBatch, bngConsoleString);
// simContext.appendToConsole(tcm);
tcm = new TaskCallbackMessage(TaskCallbackStatus.TaskEndNotificationOnly, "");
simContext.setNewCallbackMessage(tcm);
tcm = new TaskCallbackMessage(TaskCallbackStatus.TaskEndAdjustSimulationContextFlagsOnly, "");
simContext.setNewCallbackMessage(tcm);
String bngNetString = bngOutput.getNetFileContent();
outputSpec = BNGOutputFileParser.createBngOutputSpec(bngNetString);
// prints all output to console
BNGOutputFileParser.printBNGNetOutput(outputSpec);
if (mathMappingCallback.isInterrupted()) {
String msg = "Canceled by user.";
tcm = new TaskCallbackMessage(TaskCallbackStatus.Error, msg);
simContext.appendToConsole(tcm);
// clean the cache if the user interrupts
simContext.setMd5hash(null);
throw new UserCancelException(msg);
}
if (outputSpec.getBNGSpecies().length > NetworkTransformer.getSpeciesLimit(simContext)) {
String message = NetworkTransformer.getSpeciesLimitExceededMessage(outputSpec, simContext);
tcm = new TaskCallbackMessage(TaskCallbackStatus.Error, message);
simContext.appendToConsole(tcm);
simContext.setMd5hash(null);
message = "Unable to generate Math for Application " + simContext.getName() + ".\n" + message;
throw new RuntimeException(message);
}
if (outputSpec.getBNGReactions().length > NetworkTransformer.getReactionsLimit(simContext)) {
String message = NetworkTransformer.getReactionsLimitExceededMessage(outputSpec, simContext);
tcm = new TaskCallbackMessage(TaskCallbackStatus.Error, message);
simContext.appendToConsole(tcm);
simContext.setMd5hash(null);
message = "Unable to generate Math for Application " + simContext.getName() + ".\n" + message;
throw new RuntimeException(message);
}
// System.out.println("old hash: " + simContext.getMd5hash());
if (md5hash != null && md5hash.length() != 0 && outputSpec != null) {
System.out.println("saving hash and output spec");
synchronized (this) {
simContext.setMd5hash(md5hash);
simContext.setMostRecentlyCreatedOutputSpec(outputSpec);
}
} else {
System.out.println("something is wrong with the hash and/or output spec");
}
return (BNGOutputSpec) BeanUtils.cloneSerializable(outputSpec);
}
Aggregations