diff --git a/prism/src/prism/NondetModelChecker.java b/prism/src/prism/NondetModelChecker.java index 65066667..471145e5 100644 --- a/prism/src/prism/NondetModelChecker.java +++ b/prism/src/prism/NondetModelChecker.java @@ -27,6 +27,7 @@ package prism; +import java.io.FileNotFoundException; import java.util.*; import jdd.*; @@ -941,7 +942,19 @@ public class NondetModelChecker extends NonProbModelChecker JDDNode probsMTBDD; DoubleVector probsDV; StateProbs probs = null; - + + // If required, export info about target states + if (prism.getExportTarget()) { + JDDNode labels[] = { model.getStart(), b2 }; + String labelNames[] = { "init", "target" }; + try { + mainLog.print("\nExporting target states info to file \"" + prism.getExportTargetFilename() + "\"..."); + PrismMTBDD.ExportLabels(labels, labelNames, "l", model.getAllDDRowVars(), model.getODD(), Prism.EXPORT_PLAIN, prism.getExportTargetFilename()); + } catch (FileNotFoundException e) { + mainLog.println("\nWarning: Could not export target to file \"" + prism.getExportTargetFilename() + "\""); + } + } + // compute yes/no/maybe states if (b2.equals(JDD.ZERO)) { yes = JDD.Constant(0); diff --git a/prism/src/prism/Prism.java b/prism/src/prism/Prism.java index 003eeb6f..fbda14c2 100644 --- a/prism/src/prism/Prism.java +++ b/prism/src/prism/Prism.java @@ -96,6 +96,11 @@ public class Prism implements PrismSettingsListener // Main PRISM settings private PrismSettings settings; + // Some additional settings (here because not available from main options panel in GUI) + // Export target state info? + protected boolean exportTarget; + protected String exportTargetFilename; + // A few miscellaneous options (i.e. defunct/hidden/undocumented/etc.) // See constructor below for default values @@ -182,6 +187,8 @@ public class Prism implements PrismSettingsListener settings.addSettingsListener(this); // default values for miscellaneous options + exportTarget = false; + exportTargetFilename = null; doReach = true; bsccComp = true; checkZeroLoops = false; @@ -323,6 +330,16 @@ public class Prism implements PrismSettingsListener // set methods for miscellaneous options + public void setExportTarget(boolean b) throws PrismException + { + exportTarget = b; + } + + public void setExportTargetFilename(String s) throws PrismException + { + exportTargetFilename = s; + } + public void setDoReach(boolean b) throws PrismException { doReach = b; @@ -427,6 +444,12 @@ public class Prism implements PrismSettingsListener // get methods for miscellaneous options + public boolean getExportTarget() + {return exportTarget; } + + public String getExportTargetFilename() + { return exportTargetFilename; } + public boolean getDoReach() { return doReach; } diff --git a/prism/src/prism/ProbModelChecker.java b/prism/src/prism/ProbModelChecker.java index 77fd7f95..6f7f2852 100644 --- a/prism/src/prism/ProbModelChecker.java +++ b/prism/src/prism/ProbModelChecker.java @@ -27,6 +27,7 @@ package prism; import java.io.File; +import java.io.FileNotFoundException; import java.util.Vector; import jdd.*; @@ -1479,6 +1480,18 @@ public class ProbModelChecker extends NonProbModelChecker DoubleVector probsDV; StateProbs probs = null; + // If required, export info about target states + if (prism.getExportTarget()) { + JDDNode labels[] = { model.getStart(), b2 }; + String labelNames[] = { "init", "target" }; + try { + mainLog.print("\nExporting target states info to file \"" + prism.getExportTargetFilename() + "\"..."); + PrismMTBDD.ExportLabels(labels, labelNames, "l", model.getAllDDRowVars(), model.getODD(), Prism.EXPORT_PLAIN, prism.getExportTargetFilename()); + } catch (FileNotFoundException e) { + mainLog.println("\nWarning: Could not export target to file \"" + prism.getExportTargetFilename() + "\""); + } + } + // compute yes/no/maybe states if (b2.equals(JDD.ZERO)) { yes = JDD.Constant(0);