packages feed

aivika-experiment-chart 2.1 → 3.0

raw patch · 37 files changed

+287/−88 lines, 37 filesdep ~aivikadep ~aivika-experimentPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: aivika, aivika-experiment

API changes (from Hackage documentation)

- Simulation.Aivika.Experiment.Chart.DeviationChartView: instance WebPageCharting r => ExperimentView DeviationChartView r WebPageWriter
- Simulation.Aivika.Experiment.Chart.FinalHistogramView: instance WebPageCharting r => ExperimentView FinalHistogramView r WebPageWriter
- Simulation.Aivika.Experiment.Chart.FinalXYChartView: instance WebPageCharting r => ExperimentView FinalXYChartView r WebPageWriter
- Simulation.Aivika.Experiment.Chart.HistogramView: instance WebPageCharting r => ExperimentView HistogramView r WebPageWriter
- Simulation.Aivika.Experiment.Chart.TimeSeriesView: instance WebPageCharting r => ExperimentView TimeSeriesView r WebPageWriter
- Simulation.Aivika.Experiment.Chart.Types: class WebPageRendering r => WebPageCharting r
- Simulation.Aivika.Experiment.Chart.XYChartView: instance WebPageCharting r => ExperimentView XYChartView r WebPageWriter
+ Simulation.Aivika.Experiment.Chart.DeviationChartView: instance ChartRendering r => ExperimentView DeviationChartView (FileRenderer r)
+ Simulation.Aivika.Experiment.Chart.DeviationChartView: instance ChartRendering r => ExperimentView DeviationChartView (WebPageRenderer r)
+ Simulation.Aivika.Experiment.Chart.FinalHistogramView: instance ChartRendering r => ExperimentView FinalHistogramView (FileRenderer r)
+ Simulation.Aivika.Experiment.Chart.FinalHistogramView: instance ChartRendering r => ExperimentView FinalHistogramView (WebPageRenderer r)
+ Simulation.Aivika.Experiment.Chart.FinalXYChartView: instance ChartRendering r => ExperimentView FinalXYChartView (FileRenderer r)
+ Simulation.Aivika.Experiment.Chart.FinalXYChartView: instance ChartRendering r => ExperimentView FinalXYChartView (WebPageRenderer r)
+ Simulation.Aivika.Experiment.Chart.HistogramView: instance ChartRendering r => ExperimentView HistogramView (FileRenderer r)
+ Simulation.Aivika.Experiment.Chart.HistogramView: instance ChartRendering r => ExperimentView HistogramView (WebPageRenderer r)
+ Simulation.Aivika.Experiment.Chart.TimeSeriesView: instance ChartRendering r => ExperimentView TimeSeriesView (FileRenderer r)
+ Simulation.Aivika.Experiment.Chart.TimeSeriesView: instance ChartRendering r => ExperimentView TimeSeriesView (WebPageRenderer r)
+ Simulation.Aivika.Experiment.Chart.Types: class ChartRendering r
+ Simulation.Aivika.Experiment.Chart.XYChartView: instance ChartRendering r => ExperimentView XYChartView (FileRenderer r)
+ Simulation.Aivika.Experiment.Chart.XYChartView: instance ChartRendering r => ExperimentView XYChartView (WebPageRenderer r)
- Simulation.Aivika.Experiment.Chart.Types: renderChart :: WebPageCharting r => r -> (Int, Int) -> FilePath -> Renderable c -> IO (PickFn c)
+ Simulation.Aivika.Experiment.Chart.Types: renderChart :: ChartRendering r => r -> (Int, Int) -> FilePath -> Renderable c -> IO (PickFn c)
- Simulation.Aivika.Experiment.Chart.Types: renderableChartExtension :: WebPageCharting r => r -> String
+ Simulation.Aivika.Experiment.Chart.Types: renderableChartExtension :: ChartRendering r => r -> String

Files

Simulation/Aivika/Experiment/Chart/DeviationChartView.hs view
@@ -1,5 +1,5 @@ -{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}+{-# LANGUAGE MultiParamTypeClasses #-}  -- | -- Module     : Simulation.Aivika.Experiment.Chart.DeviationChartView@@ -120,20 +120,32 @@                        deviationChartBottomAxis  = id,                        deviationChartLayout      = id } -instance WebPageCharting r => ExperimentView DeviationChartView r WebPageWriter where+instance ChartRendering r => ExperimentView DeviationChartView (WebPageRenderer r) where      outputView v = -    let reporter exp renderer dir =+    let reporter exp (WebPageRenderer renderer) dir =           do st <- newDeviationChart v exp renderer dir-             let writer =+             let context =+                   WebPageContext $                    WebPageWriter { reporterWriteTOCHtml = deviationChartTOCHtml st,                                    reporterWriteHtml    = deviationChartHtml st }              return ExperimentReporter { reporterInitialise = return (),                                          reporterFinalise   = finaliseDeviationChart st,                                          reporterSimulate   = simulateDeviationChart st,-                                         reporterRequest    = writer }+                                         reporterContext    = context }     in ExperimentGenerator { generateReporter = reporter }++instance ChartRendering r => ExperimentView DeviationChartView (FileRenderer r) where   +  outputView v = +    let reporter exp (FileRenderer renderer) dir =+          do st <- newDeviationChart v exp renderer dir+             return ExperimentReporter { reporterInitialise = return (),+                                         reporterFinalise   = finaliseDeviationChart st,+                                         reporterSimulate   = simulateDeviationChart st,+                                         reporterContext    = FileContext }+    in ExperimentGenerator { generateReporter = reporter }+   -- | The state of the view. data DeviationChartViewState r =   DeviationChartViewState { deviationChartView       :: DeviationChartView,@@ -218,7 +230,7 @@                y' `seq` writeArray stats i y'       -- | Plot the deviation chart after the simulation is complete.-finaliseDeviationChart :: WebPageCharting r => DeviationChartViewState r -> ExperimentWriter ()+finaliseDeviationChart :: ChartRendering r => DeviationChartViewState r -> ExperimentWriter () finaliseDeviationChart st =   do let view = deviationChartView st          title = deviationChartTitle view
Simulation/Aivika/Experiment/Chart/FinalHistogramView.hs view
@@ -1,5 +1,5 @@ -{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}+{-# LANGUAGE MultiParamTypeClasses #-}  -- | -- Module     : Simulation.Aivika.Experiment.Chart.FinalHistogramView@@ -112,20 +112,32 @@                        finalHistogramPlotBars    = colourisePlotBars,                        finalHistogramLayout      = id } -instance WebPageCharting r => ExperimentView FinalHistogramView r WebPageWriter where+instance ChartRendering r => ExperimentView FinalHistogramView (WebPageRenderer r) where      outputView v = -    let reporter exp renderer dir =+    let reporter exp (WebPageRenderer renderer) dir =           do st <- newFinalHistogram v exp renderer dir-             let writer =+             let context =+                   WebPageContext $                    WebPageWriter { reporterWriteTOCHtml = finalHistogramTOCHtml st,                                    reporterWriteHtml    = finalHistogramHtml st }              return ExperimentReporter { reporterInitialise = return (),                                          reporterFinalise   = finaliseFinalHistogram st,                                          reporterSimulate   = simulateFinalHistogram st,-                                         reporterRequest    = writer }+                                         reporterContext    = context }     in ExperimentGenerator { generateReporter = reporter }++instance ChartRendering r => ExperimentView FinalHistogramView (FileRenderer r) where   +  outputView v = +    let reporter exp (FileRenderer renderer) dir =+          do st <- newFinalHistogram v exp renderer dir+             return ExperimentReporter { reporterInitialise = return (),+                                         reporterFinalise   = finaliseFinalHistogram st,+                                         reporterSimulate   = simulateFinalHistogram st,+                                         reporterContext    = FileContext }+    in ExperimentGenerator { generateReporter = reporter }+   -- | The state of the view. data FinalHistogramViewState r =   FinalHistogramViewState { finalHistogramView       :: FinalHistogramView,@@ -191,7 +203,7 @@             modifyMRef_ values $ return . (++) x       -- | Plot the histogram after the simulation is complete.-finaliseFinalHistogram :: WebPageCharting r => FinalHistogramViewState r -> ExperimentWriter ()+finaliseFinalHistogram :: ChartRendering r => FinalHistogramViewState r -> ExperimentWriter () finaliseFinalHistogram st =   do let view = finalHistogramView st          title = finalHistogramTitle view
Simulation/Aivika/Experiment/Chart/FinalXYChartView.hs view
@@ -1,5 +1,5 @@ -{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}+{-# LANGUAGE MultiParamTypeClasses #-}  -- | -- Module     : Simulation.Aivika.Experiment.Chart.FinalXYChartView@@ -129,20 +129,32 @@                      finalXYChartBottomAxis  = id,                      finalXYChartLayout      = id } -instance WebPageCharting r => ExperimentView FinalXYChartView r WebPageWriter where+instance ChartRendering r => ExperimentView FinalXYChartView (WebPageRenderer r) where      outputView v = -    let reporter exp renderer dir =+    let reporter exp (WebPageRenderer renderer) dir =           do st <- newFinalXYChart v exp renderer dir-             let writer =+             let context =+                   WebPageContext $                    WebPageWriter { reporterWriteTOCHtml = finalXYChartTOCHtml st,                                    reporterWriteHtml    = finalXYChartHtml st }              return ExperimentReporter { reporterInitialise = return (),                                          reporterFinalise   = finaliseFinalXYChart st,                                          reporterSimulate   = simulateFinalXYChart st,-                                         reporterRequest    = writer }+                                         reporterContext    = context }     in ExperimentGenerator { generateReporter = reporter }++instance ChartRendering r => ExperimentView FinalXYChartView (FileRenderer r) where   +  outputView v = +    let reporter exp (FileRenderer renderer) dir =+          do st <- newFinalXYChart v exp renderer dir+             return ExperimentReporter { reporterInitialise = return (),+                                         reporterFinalise   = finaliseFinalXYChart st,+                                         reporterSimulate   = simulateFinalXYChart st,+                                         reporterContext    = FileContext }+    in ExperimentGenerator { generateReporter = reporter }+   -- | The state of the view. data FinalXYChartViewState r =   FinalXYChartViewState { finalXYChartView       :: FinalXYChartView,@@ -235,7 +247,7 @@             x `seq` y `seq` writeArray xy i $ Just (x, y)       -- | Plot the XY chart after the simulation is complete.-finaliseFinalXYChart :: WebPageCharting r => FinalXYChartViewState r -> ExperimentWriter ()+finaliseFinalXYChart :: ChartRendering r => FinalXYChartViewState r -> ExperimentWriter () finaliseFinalXYChart st =   do let view = finalXYChartView st           title = finalXYChartTitle view
Simulation/Aivika/Experiment/Chart/HistogramView.hs view
@@ -1,5 +1,5 @@ -{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}+{-# LANGUAGE MultiParamTypeClasses #-}  -- | -- Module     : Simulation.Aivika.Experiment.Chart.HistogramView@@ -122,20 +122,32 @@                   histogramPlotBars    = colourisePlotBars,                   histogramLayout      = id } -instance WebPageCharting r => ExperimentView HistogramView r WebPageWriter where+instance ChartRendering r => ExperimentView HistogramView (WebPageRenderer r) where      outputView v = -    let reporter exp renderer dir =+    let reporter exp (WebPageRenderer renderer) dir =           do st <- newHistogram v exp renderer dir-             let writer =+             let context =+                   WebPageContext $                    WebPageWriter { reporterWriteTOCHtml = histogramTOCHtml st,                                    reporterWriteHtml    = histogramHtml st }              return ExperimentReporter { reporterInitialise = return (),                                          reporterFinalise   = return (),                                          reporterSimulate   = simulateHistogram st,-                                         reporterRequest    = writer }+                                         reporterContext    = context }     in ExperimentGenerator { generateReporter = reporter }++instance ChartRendering r => ExperimentView HistogramView (FileRenderer r) where   +  outputView v = +    let reporter exp (FileRenderer renderer) dir =+          do st <- newHistogram v exp renderer dir+             return ExperimentReporter { reporterInitialise = return (),+                                         reporterFinalise   = return (),+                                         reporterSimulate   = simulateHistogram st,+                                         reporterContext    = FileContext }+    in ExperimentGenerator { generateReporter = reporter }+   -- | The state of the view. data HistogramViewState r =   HistogramViewState { histogramView       :: HistogramView,@@ -145,7 +157,7 @@                        histogramMap        :: M.Map Int FilePath }    -- | Create a new state of the view.-newHistogram :: WebPageCharting r => HistogramView -> Experiment -> r -> FilePath -> ExperimentWriter (HistogramViewState r)+newHistogram :: ChartRendering r => HistogramView -> Experiment -> r -> FilePath -> ExperimentWriter (HistogramViewState r) newHistogram view exp renderer dir =   do let n = experimentRunCount exp      fs <- forM [0..(n - 1)] $ \i ->@@ -164,7 +176,7 @@                                  histogramMap        = m }         -- | Plot the histogram during the simulation.-simulateHistogram :: WebPageCharting r => HistogramViewState r -> ExperimentData -> Event DisposableEvent+simulateHistogram :: ChartRendering r => HistogramViewState r -> ExperimentData -> Event DisposableEvent simulateHistogram st expdata =   do let view    = histogramView st          rs      = histogramSeries view $
Simulation/Aivika/Experiment/Chart/TimeSeriesView.hs view
@@ -1,5 +1,5 @@ -{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}+{-# LANGUAGE MultiParamTypeClasses #-}  -- | -- Module     : Simulation.Aivika.Experiment.Chart.TimeSeriesView@@ -127,20 +127,32 @@                    timeSeriesBottomAxis  = id,                    timeSeriesLayout      = id } -instance WebPageCharting r => ExperimentView TimeSeriesView r WebPageWriter where+instance ChartRendering r => ExperimentView TimeSeriesView (WebPageRenderer r) where      outputView v = -    let reporter exp renderer dir =+    let reporter exp (WebPageRenderer renderer) dir =           do st <- newTimeSeries v exp renderer dir-             let writer =+             let context =+                   WebPageContext $                    WebPageWriter { reporterWriteTOCHtml = timeSeriesTOCHtml st,                                    reporterWriteHtml    = timeSeriesHtml st }              return ExperimentReporter { reporterInitialise = return (),                                          reporterFinalise   = return (),                                          reporterSimulate   = simulateTimeSeries st,-                                         reporterRequest    = writer }+                                         reporterContext    = context }     in ExperimentGenerator { generateReporter = reporter }++instance ChartRendering r => ExperimentView TimeSeriesView (FileRenderer r) where   +  outputView v = +    let reporter exp (FileRenderer renderer) dir =+          do st <- newTimeSeries v exp renderer dir+             return ExperimentReporter { reporterInitialise = return (),+                                         reporterFinalise   = return (),+                                         reporterSimulate   = simulateTimeSeries st,+                                         reporterContext    = FileContext }+    in ExperimentGenerator { generateReporter = reporter }+   -- | The state of the view. data TimeSeriesViewState r =   TimeSeriesViewState { timeSeriesView       :: TimeSeriesView,@@ -150,7 +162,7 @@                         timeSeriesMap        :: M.Map Int FilePath }    -- | Create a new state of the view.-newTimeSeries :: WebPageCharting r => TimeSeriesView -> Experiment -> r -> FilePath -> ExperimentWriter (TimeSeriesViewState r)+newTimeSeries :: ChartRendering r => TimeSeriesView -> Experiment -> r -> FilePath -> ExperimentWriter (TimeSeriesViewState r) newTimeSeries view exp renderer dir =   do let n = experimentRunCount exp      fs <- forM [0..(n - 1)] $ \i ->@@ -169,7 +181,7 @@                                   timeSeriesMap        = m }         -- | Plot the time series chart within simulation.-simulateTimeSeries :: WebPageCharting r => TimeSeriesViewState r -> ExperimentData -> Event DisposableEvent+simulateTimeSeries :: ChartRendering r => TimeSeriesViewState r -> ExperimentData -> Event DisposableEvent simulateTimeSeries st expdata =   do let view    = timeSeriesView st          rs1     = timeSeriesLeftYSeries view $
Simulation/Aivika/Experiment/Chart/Types.hs view
@@ -11,14 +11,14 @@ --  module Simulation.Aivika.Experiment.Chart.Types-       (WebPageCharting(..)) where+       (ChartRendering(..)) where  import Graphics.Rendering.Chart  import Simulation.Aivika.Experiment  -- | A type class of chart renderers.-class WebPageRendering r => WebPageCharting r where+class ChartRendering r where    -- | The file extension used when rendering.   renderableChartExtension :: r -> String
Simulation/Aivika/Experiment/Chart/XYChartView.hs view
@@ -1,5 +1,5 @@ -{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}+{-# LANGUAGE MultiParamTypeClasses #-}  -- | -- Module     : Simulation.Aivika.Experiment.Chart.XYChartView@@ -136,20 +136,32 @@                 xyChartBottomAxis  = id,                 xyChartLayout      = id } -instance WebPageCharting r => ExperimentView XYChartView r WebPageWriter where+instance ChartRendering r => ExperimentView XYChartView (WebPageRenderer r) where      outputView v = -    let reporter exp renderer dir =+    let reporter exp (WebPageRenderer renderer) dir =           do st <- newXYChart v exp renderer dir-             let writer =+             let context =+                   WebPageContext $                    WebPageWriter { reporterWriteTOCHtml = xyChartTOCHtml st,                                    reporterWriteHtml    = xyChartHtml st }              return ExperimentReporter { reporterInitialise = return (),                                          reporterFinalise   = return (),                                          reporterSimulate   = simulateXYChart st,-                                         reporterRequest    = writer }+                                         reporterContext    = context }     in ExperimentGenerator { generateReporter = reporter }++instance ChartRendering r => ExperimentView XYChartView (FileRenderer r) where   +  outputView v = +    let reporter exp (FileRenderer renderer) dir =+          do st <- newXYChart v exp renderer dir+             return ExperimentReporter { reporterInitialise = return (),+                                         reporterFinalise   = return (),+                                         reporterSimulate   = simulateXYChart st,+                                         reporterContext    = FileContext }+    in ExperimentGenerator { generateReporter = reporter }+   -- | The state of the view. data XYChartViewState r =   XYChartViewState { xyChartView       :: XYChartView,@@ -159,7 +171,7 @@                      xyChartMap        :: M.Map Int FilePath }    -- | Create a new state of the view.-newXYChart :: WebPageCharting r => XYChartView -> Experiment -> r -> FilePath -> ExperimentWriter (XYChartViewState r)+newXYChart :: ChartRendering r => XYChartView -> Experiment -> r -> FilePath -> ExperimentWriter (XYChartViewState r) newXYChart view exp renderer dir =   do let n = experimentRunCount exp      fs <- forM [0..(n - 1)] $ \i ->@@ -178,7 +190,7 @@                                xyChartMap        = m }         -- | Plot the XY chart during the simulation.-simulateXYChart :: WebPageCharting r => XYChartViewState r -> ExperimentData -> Event DisposableEvent+simulateXYChart :: ChartRendering r => XYChartViewState r -> ExperimentData -> Event DisposableEvent simulateXYChart st expdata =   do let view    = xyChartView st          rs0     = xyChartXSeries view $
aivika-experiment-chart.cabal view
@@ -1,5 +1,5 @@ name:            aivika-experiment-chart-version:         2.1+version:         3.0 synopsis:        Simulation experiments with charting for the Aivika library description:     This package complements the Aivika and Aivika Experiment packages with@@ -28,6 +28,11 @@                      examples/BassDiffusion/MainUsingCairo.hs                      examples/BassDiffusion/MainUsingDiagrams.hs                      examples/BassDiffusion/README+                     examples/BouncingBall/Model.hs+                     examples/BouncingBall/Experiment.hs+                     examples/BouncingBall/MainUsingCairo.hs+                     examples/BouncingBall/MainUsingDiagrams.hs+                     examples/BouncingBall/README                      examples/ChemicalReaction/Model.hs                      examples/ChemicalReaction/Experiment.hs                      examples/ChemicalReaction/MainUsingCairo.hs@@ -86,11 +91,10 @@                      lens >= 3.9,                      data-default-class < 0.1,                      colour >= 2.3.3,-                     aivika >= 2.1,-                     aivika-experiment >= 2.1+                     aivika >= 3.0,+                     aivika-experiment >= 3.0 -    extensions:      FlexibleInstances,-                     MultiParamTypeClasses+    extensions:      MultiParamTypeClasses      ghc-options:     -O2 
examples/BassDiffusion/Experiment.hs view
@@ -20,7 +20,7 @@     experimentRunCount = 20,     experimentDescription = "This is the famous Bass Diffusion model solved with help of the agent-based modelling." } -generators :: WebPageCharting r => [WebPageGenerator r]+generators :: ChartRendering r => [WebPageGenerator r] generators =   [outputView defaultExperimentSpecsView,    outputView $ defaultDeviationChartView {
examples/BassDiffusion/MainUsingCairo.hs view
@@ -9,4 +9,4 @@ import Model import Experiment -main = runExperiment experiment generators (CairoRenderer PNG) model+main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
examples/BassDiffusion/MainUsingDiagrams.hs view
@@ -11,4 +11,4 @@ import Model import Experiment -main = runExperiment experiment generators (DiagramsRenderer SVG M.empty) model+main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG M.empty) model
+ examples/BouncingBall/Experiment.hs view
@@ -0,0 +1,42 @@++module Experiment (experiment, generators) where++import Data.Monoid++import Simulation.Aivika+import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart++specs = Specs { spcStartTime = 0, +                spcStopTime = 25, +                spcDT = 0.01,+                spcMethod = RungeKutta4,+                spcGeneratorType = SimpleGenerator }++experiment :: Experiment+experiment =+  defaultExperiment {+    experimentSpecs = specs,+    experimentRunCount = 1,+    experimentTitle = "Bouncing Ball",+    experimentDescription = "Simulation of a Bouncing Ball as described in " +++                            "the corresponded MATLAB & Simulink example" }++generators :: ChartRendering r => [WebPageGenerator r]+generators =+  [outputView defaultExperimentSpecsView,+   outputView $ defaultTableView {+     tableSeries =+        resultByName "t" <>+        resultByName "x" <>+        resultByName "v" },+   outputView $ defaultTimeSeriesView {+     timeSeriesDescription = "The chart shows the position of the ball",+     timeSeriesTitle = "Position",+     timeSeriesLeftYSeries =+        resultByName "x" },+   outputView $ defaultTimeSeriesView {+     timeSeriesDescription = "The chart shows the velocity of the ball",+     timeSeriesTitle = "Velocity",+     timeSeriesLeftYSeries =+        resultByName "v" } ]
+ examples/BouncingBall/MainUsingCairo.hs view
@@ -0,0 +1,12 @@++-- To run, package aivika-experiment-cairo must be installed.++import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart.Backend.Cairo++import Graphics.Rendering.Chart.Backend.Cairo++import Model+import Experiment++main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
+ examples/BouncingBall/MainUsingDiagrams.hs view
@@ -0,0 +1,14 @@++-- To run, package aivika-experiment-diagrams must be installed.++import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart.Backend.Diagrams++import Graphics.Rendering.Chart.Backend.Diagrams++import qualified Data.Map as M++import Model+import Experiment++main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG M.empty) model
+ examples/BouncingBall/Model.hs view
@@ -0,0 +1,50 @@++{-# LANGUAGE RecursiveDo #-}++-- Example: Simulation of a Bouncing Ball.+--+-- It is described in MATLAB & Simulink example available by the following link:+--+-- http://www.mathworks.com/help/simulink/examples/simulation-of-a-bouncing-ball.html++module Model (model) where++import Control.Monad+import Control.Monad.Trans++import Simulation.Aivika+import Simulation.Aivika.SystemDynamics++-- the acceleration due to gravity+g = 9.81++-- the initial velocity+v0 = 15++-- the initial position+x0 = 10++-- the coefficient of restitution of the ball+k = 0.8++model :: Simulation Results+model = mdo+  v <- integEither dv v0+  x <- integEither dx x0+  let dv = do+        x' <- x+        v' <- v+        if x' < 0+          then return $ Left (- k * v')+          else return $ Right (- g)+      dx = do+        x' <- x+        v' <- v+        if x' < 0+          then return $ Left 0+          else return $ Right v'+  return $+    results+    [resultSource "t" "time" time,+     resultSource "x" "position" x,+     resultSource "v" "velocity" v]
+ examples/BouncingBall/README view
@@ -0,0 +1,5 @@+Example: Simulation of a Bouncing Ball.++It is described in MATLAB & Simulink example available by the following link:++http://www.mathworks.com/help/simulink/examples/simulation-of-a-bouncing-ball.html
examples/ChemicalReaction/Experiment.hs view
@@ -22,7 +22,7 @@     experimentDescription = "Chemical Reaction as described in " ++                             "the 5-minute tutorial of Berkeley-Madonna" } -generators :: WebPageCharting r => [WebPageGenerator r]+generators :: ChartRendering r => [WebPageGenerator r] generators =   [outputView defaultExperimentSpecsView,    outputView $ defaultLastValueView {
examples/ChemicalReaction/MainUsingCairo.hs view
@@ -9,4 +9,4 @@ import Model import Experiment -main = runExperiment experiment generators (CairoRenderer PNG) model+main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
examples/ChemicalReaction/MainUsingDiagrams.hs view
@@ -11,4 +11,4 @@ import Model import Experiment -main = runExperiment experiment generators (DiagramsRenderer SVG M.empty) model+main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG M.empty) model
examples/DifferenceEquations/Experiment.hs view
@@ -23,7 +23,7 @@                             "the corresponded tutorial of Berkeley-Madonna " ++                             "with small modification for calculating std." } -generators :: WebPageCharting r => [WebPageGenerator r]+generators :: ChartRendering r => [WebPageGenerator r] generators =   [outputView defaultExperimentSpecsView,    outputView $ defaultTableView {
examples/DifferenceEquations/MainUsingCairo.hs view
@@ -9,4 +9,4 @@ import Model import Experiment -main = runExperiment experiment generators (CairoRenderer PNG) model+main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
examples/DifferenceEquations/MainUsingDiagrams.hs view
@@ -11,4 +11,4 @@ import Model import Experiment -main = runExperiment experiment generators (DiagramsRenderer SVG M.empty) model+main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG M.empty) model
examples/Financial/Experiment.hs view
@@ -25,7 +25,7 @@     experimentDescription = "Financial Model (the Monte-Carlo simulation) as described in " ++                             "Vensim 5 Modeling Guide, Chapter Financial Modeling and Risk." } -monteCarloGenerators :: WebPageCharting r => [WebPageGenerator r]+monteCarloGenerators :: ChartRendering r => [WebPageGenerator r] monteCarloGenerators =   [outputView defaultExperimentSpecsView,    outputView $ defaultDeviationChartView {@@ -72,7 +72,7 @@     experimentDescription = "Financial Model as described in " ++                             "Vensim 5 Modeling Guide, Chapter Financial Modeling and Risk." } -singleGenerators :: WebPageCharting r => [WebPageGenerator r]+singleGenerators :: ChartRendering r => [WebPageGenerator r] singleGenerators =   [outputView defaultExperimentSpecsView,    outputView $ defaultTimeSeriesView {
examples/Financial/MainUsingCairo.hs view
@@ -15,11 +15,11 @@   putStrLn "*** The simulation with default parameters..."   runExperiment     singleExperiment singleGenerators-    (CairoRenderer PNG) (model defaultParams)+    (WebPageRenderer $ CairoRenderer PNG) (model defaultParams)   putStrLn ""    -- run the Monte-Carlo simulation   putStrLn "*** The Monte-Carlo simulation..."   randomParams >>= runExperimentParallel     monteCarloExperiment monteCarloGenerators-    (CairoRenderer PNG) . model+    (WebPageRenderer $ CairoRenderer PNG) . model
examples/Financial/MainUsingDiagrams.hs view
@@ -17,11 +17,11 @@   putStrLn "*** The simulation with default parameters..."   runExperiment     singleExperiment singleGenerators-    (DiagramsRenderer SVG M.empty) (model defaultParams)+    (WebPageRenderer $ DiagramsRenderer SVG M.empty) (model defaultParams)   putStrLn ""    -- run the Monte-Carlo simulation   putStrLn "*** The Monte-Carlo simulation..."   randomParams >>= runExperimentParallel     monteCarloExperiment monteCarloGenerators-    (DiagramsRenderer SVG M.empty) . model+    (WebPageRenderer $ DiagramsRenderer SVG M.empty) . model
examples/Furnace/Experiment.hs view
@@ -27,7 +27,7 @@     experimentRunCount = 100,     experimentTitle = "The Furnace model (the Monte-Carlo simulation)" } -generators :: WebPageCharting r => [WebPageGenerator r]+generators :: ChartRendering r => [WebPageGenerator r] generators =   [outputView defaultExperimentSpecsView,    outputView $ defaultDeviationChartView {@@ -72,39 +72,39 @@      deviationChartTitle = "Deviation Chart - 3",      deviationChartPlotTitle = "The queue size",      deviationChartRightYSeries =-       resultByName furnaceQueueName >>> resultByProperty "queueCount" },+       resultByName furnaceQueueName >>> resultById QueueCountId },    outputView $ defaultFinalHistogramView {      finalHistogramTitle = "Final Histogram - 3",      finalHistogramPlotTitle = "The queue size in the final time point.",      finalHistogramSeries =-       resultByName furnaceQueueName >>> resultByProperty "queueCount" },+       resultByName furnaceQueueName >>> resultById QueueCountId },    outputView $ defaultFinalStatsView {      finalStatsTitle = "Final Statistics - 3",      finalStatsDescription = "The summary of the queue size in the final time point.",      finalStatsSeries =-       resultByName furnaceQueueName >>> resultByProperty "queueCount" },+       resultByName furnaceQueueName >>> resultById QueueCountId },    outputView $ defaultDeviationChartView {      deviationChartTitle = "Deviation Chart - 4",      deviationChartPlotTitle = "The mean wait time",      deviationChartRightYSeries =-       resultByName furnaceQueueName >>> resultByProperty "queueWaitTime" },+       resultByName furnaceQueueName >>> resultById QueueWaitTimeId },    outputView $ defaultFinalStatsView {      finalStatsTitle = "Final Statistics - 4",      finalStatsDescription = "The summary of the mean wait time in " ++                              "the final time point.",      finalStatsSeries =-       resultByName furnaceQueueName >>> resultByProperty "queueWaitTime" },+       resultByName furnaceQueueName >>> resultById QueueWaitTimeId },    outputView $ defaultDeviationChartView {      deviationChartTitle = "Deviation Chart - 5",      deviationChartPlotTitle = "The queue rate",      deviationChartRightYSeries =-       resultByName furnaceQueueName >>> resultByProperty "queueRate" },+       resultByName furnaceQueueName >>> resultById QueueRateId },    outputView $ defaultFinalStatsView {      finalStatsTitle = "Final Statistics - 5",      finalStatsDescription = "The summary of the queue rate in " ++                              "the final time point.",      finalStatsSeries =-       resultByName furnaceQueueName >>> resultByProperty "queueRate" },+       resultByName furnaceQueueName >>> resultById QueueRateId },    outputView $ defaultDeviationChartView {      deviationChartTitle = "Deviation Chart - 6",      deviationChartPlotTitle = "The mean heating time",
examples/Furnace/MainUsingCairo.hs view
@@ -9,4 +9,4 @@ import Model import Experiment -main = runExperiment experiment generators (CairoRenderer PNG) model+main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
examples/Furnace/MainUsingDiagrams.hs view
@@ -11,4 +11,4 @@ import Model import Experiment -main = runExperiment experiment generators (DiagramsRenderer SVG M.empty) model+main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG M.empty) model
examples/InspectionAdjustmentStations/Experiment.hs view
@@ -28,36 +28,36 @@ resultProcessingTime :: ResultTransform resultProcessingTime =   (resultByName "inputArrivalTimer" >>>-   resultByProperty "processingTime")+   resultById ArrivalProcessingTimeId)   <>   (resultByName "outputArrivalTimer" >>>-   resultByProperty "processingTime")+   resultById ArrivalProcessingTimeId)  resultProcessingFactor :: ResultTransform resultProcessingFactor =   (resultByName "inspectionStations" >>>-   resultByProperty "processingFactor")+   resultById ServerProcessingFactorId)   <>   (resultByName "adjustmentStations" >>>-   resultByProperty "processingFactor")+   resultById ServerProcessingFactorId)  resultQueueSize :: ResultTransform resultQueueSize =   (resultByName "inspectionQueue" >>>-   resultByProperty "queueCount")+   resultById QueueCountId)   <>   (resultByName "adjustmentQueue" >>>-   resultByProperty "queueCount")+   resultById QueueCountId)  resultWaitTime :: ResultTransform resultWaitTime =   (resultByName "inspectionQueue" >>>-   resultByProperty "queueWaitTime")+   resultById QueueWaitTimeId)   <>   (resultByName "adjustmentQueue" >>>-   resultByProperty "queueWaitTime")+   resultById QueueWaitTimeId) -generators :: WebPageCharting r => [WebPageGenerator r]+generators :: ChartRendering r => [WebPageGenerator r] generators =   [outputView defaultExperimentSpecsView,    outputView $ defaultFinalStatsView {
examples/InspectionAdjustmentStations/MainUsingCairo.hs view
@@ -9,4 +9,4 @@ import Model import Experiment -main = runExperiment experiment generators (CairoRenderer PNG) model+main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
examples/InspectionAdjustmentStations/MainUsingDiagrams.hs view
@@ -11,4 +11,4 @@ import Model import Experiment -main = runExperiment experiment generators (DiagramsRenderer SVG M.empty) model+main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG M.empty) model
examples/LinearArray/Experiment.hs view
@@ -22,7 +22,7 @@     experimentDescription = "Model Linear Array as described in " ++                             "the examples included in Berkeley-Madonna." } -generators :: WebPageCharting r => [WebPageGenerator r]+generators :: ChartRendering r => [WebPageGenerator r] generators =    [outputView defaultExperimentSpecsView,    outputView $ defaultTableView {
examples/LinearArray/MainUsingCairo.hs view
@@ -9,4 +9,4 @@ import Model import Experiment -main = runExperiment experiment generators (CairoRenderer PNG) (model 51)+main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) (model 51)
examples/LinearArray/MainUsingDiagrams.hs view
@@ -11,4 +11,4 @@ import Model import Experiment -main = runExperiment experiment generators (DiagramsRenderer SVG M.empty) (model 51)+main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG M.empty) (model 51)
examples/MachRep3/Experiment.hs view
@@ -24,7 +24,7 @@ t = resultByName "totalUpTime" n = resultByName "runIndex" -generators :: WebPageCharting r => [WebPageGenerator r]+generators :: ChartRendering r => [WebPageGenerator r] generators =   [outputView defaultExperimentSpecsView,    outputView $ defaultDeviationChartView {
examples/MachRep3/MainUsingCairo.hs view
@@ -9,4 +9,4 @@ import Model import Experiment -main = runExperiment experiment generators (CairoRenderer PNG) model+main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
examples/MachRep3/MainUsingDiagrams.hs view
@@ -11,4 +11,4 @@ import Model import Experiment -main = runExperiment experiment generators (DiagramsRenderer SVG M.empty) model+main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG M.empty) model