Browse Source

Fixed "changed" setting in graph display of simulation paths.

git-svn-id: https://www.prismmodelchecker.org/svn/prism/prism/trunk@5482 bbc10eb1-c90d-0410-af57-cb519fbb1720
master
Dave Parker 14 years ago
parent
commit
b2f33e44a7
  1. 65
      prism/src/simulator/PathToGraph.java

65
prism/src/simulator/PathToGraph.java

@ -27,6 +27,7 @@
package simulator;
import java.util.ArrayList;
import java.util.BitSet;
import java.util.List;
import org.jfree.data.xy.XYDataItem;
@ -54,10 +55,12 @@ public class PathToGraph extends PathDisplayer
private int numRewardStructs;
// Displayer state
/** Step counter */
private double lastTime;
private State lastState;
private double[] lastStateRewards;
/** For each variable/reward, whether we skipped plotting a point last time */
private BitSet skippedVars = new BitSet();
private BitSet skippedRewards = new BitSet();
/**
* Construct a {@link PathToGraph} object
@ -120,7 +123,7 @@ public class PathToGraph extends PathDisplayer
@Override
public void displaySnapshot(double timeCumul, State newState, double[] newStateRewards)
{
displayState(timeCumul, newState, newStateRewards, true);
displayState(timeCumul, newState, newStateRewards, !showChangesOnly);
}
private void displayState(double time, State state, double[] stateRewards, boolean force)
@ -128,42 +131,36 @@ public class PathToGraph extends PathDisplayer
if (varsToShow == null) {
for (int j = 0; j < numVars; j++) {
Object val = state.varValues[j];
double d = 0.0;
if (force || !val.equals(lastState.varValues[j])) {
try {
d = TypeDouble.getInstance().castValueTo(val).doubleValue();
graphModel.addPointToSeries(varSeriesKeys.get(j), new XYDataItem(time, d));
} catch (PrismException e) {
if (val instanceof Boolean) {
d = ((Boolean) val).booleanValue() ? 1.0 : 0.0;
graphModel.addPointToSeries(varSeriesKeys.get(j), new XYDataItem(time, d));
}
}
boolean plot = force || !val.equals(lastState.varValues[j]);
if (plot) {
if (skippedVars.get(j))
addPoint(varSeriesKeys.get(j), lastTime, lastState.varValues[j]);
addPoint(varSeriesKeys.get(j), time, val);
}
skippedVars.set(j, !plot);
}
} else {
for (int j : varsToShow) {
Object val = state.varValues[j];
double d = 0.0;
if (force || !val.equals(lastState.varValues[j])) {
try {
d = TypeDouble.getInstance().castValueTo(val).doubleValue();
graphModel.addPointToSeries(varSeriesKeys.get(j), new XYDataItem(time, d));
} catch (PrismException e) {
if (val instanceof Boolean) {
d = ((Boolean) val).booleanValue() ? 1.0 : 0.0;
graphModel.addPointToSeries(varSeriesKeys.get(j), new XYDataItem(time, d));
}
}
boolean plot = force || !val.equals(lastState.varValues[j]);
if (plot) {
if (skippedVars.get(j))
addPoint(varSeriesKeys.get(j), lastTime, lastState.varValues[j]);
addPoint(varSeriesKeys.get(j), time, val);
}
skippedVars.set(j, !plot);
}
}
if (showRewards) {
for (int j = 0; j < numRewardStructs; j++) {
double d = stateRewards[j];
if (force || lastStateRewards[j] != stateRewards[j]) {
boolean plot = force || lastStateRewards[j] != stateRewards[j];
if (plot) {
if (skippedRewards.get(j))
graphModel.addPointToSeries(rewardSeriesKeys.get(j), new XYDataItem(lastTime, lastStateRewards[j]));
graphModel.addPointToSeries(rewardSeriesKeys.get(j), new XYDataItem(time, d));
}
skippedRewards.set(j, !plot);
}
}
lastTime = time;
@ -173,6 +170,24 @@ public class PathToGraph extends PathDisplayer
}
}
/**
* Add a point to a given graph series. X-value is {@code x}.
* Y-value is {@code value}, which will mapped to a double as appropriate.
*/
private void addPoint(SeriesKey seriesKey, double x, Object val)
{
double d;
try {
d = TypeDouble.getInstance().castValueTo(val).doubleValue();
graphModel.addPointToSeries(seriesKey, new XYDataItem(x, d));
} catch (PrismException e) {
if (val instanceof Boolean) {
d = ((Boolean) val).booleanValue() ? 1.0 : 0.0;
graphModel.addPointToSeries(seriesKey, new XYDataItem(x, d));
}
}
}
@Override
public void endDisplay()
{

Loading…
Cancel
Save