aivika-experiment-chart 4.3.2 → 5.0
raw patch · 63 files changed
+668/−166 lines, 63 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 Simulation.Aivika.Experiment.Chart.Types.ChartRendering r => Simulation.Aivika.Experiment.Types.ExperimentView Simulation.Aivika.Experiment.Chart.DeviationChartView.DeviationChartView (Simulation.Aivika.Experiment.FileRenderer.FileRenderer r)
- Simulation.Aivika.Experiment.Chart.DeviationChartView: instance Simulation.Aivika.Experiment.Chart.Types.ChartRendering r => Simulation.Aivika.Experiment.Types.ExperimentView Simulation.Aivika.Experiment.Chart.DeviationChartView.DeviationChartView (Simulation.Aivika.Experiment.WebPageRenderer.WebPageRenderer r)
- Simulation.Aivika.Experiment.Chart.FinalHistogramView: instance Simulation.Aivika.Experiment.Chart.Types.ChartRendering r => Simulation.Aivika.Experiment.Types.ExperimentView Simulation.Aivika.Experiment.Chart.FinalHistogramView.FinalHistogramView (Simulation.Aivika.Experiment.FileRenderer.FileRenderer r)
- Simulation.Aivika.Experiment.Chart.FinalHistogramView: instance Simulation.Aivika.Experiment.Chart.Types.ChartRendering r => Simulation.Aivika.Experiment.Types.ExperimentView Simulation.Aivika.Experiment.Chart.FinalHistogramView.FinalHistogramView (Simulation.Aivika.Experiment.WebPageRenderer.WebPageRenderer r)
- Simulation.Aivika.Experiment.Chart.FinalXYChartView: instance Simulation.Aivika.Experiment.Chart.Types.ChartRendering r => Simulation.Aivika.Experiment.Types.ExperimentView Simulation.Aivika.Experiment.Chart.FinalXYChartView.FinalXYChartView (Simulation.Aivika.Experiment.FileRenderer.FileRenderer r)
- Simulation.Aivika.Experiment.Chart.FinalXYChartView: instance Simulation.Aivika.Experiment.Chart.Types.ChartRendering r => Simulation.Aivika.Experiment.Types.ExperimentView Simulation.Aivika.Experiment.Chart.FinalXYChartView.FinalXYChartView (Simulation.Aivika.Experiment.WebPageRenderer.WebPageRenderer r)
- Simulation.Aivika.Experiment.Chart.HistogramView: instance Simulation.Aivika.Experiment.Chart.Types.ChartRendering r => Simulation.Aivika.Experiment.Types.ExperimentView Simulation.Aivika.Experiment.Chart.HistogramView.HistogramView (Simulation.Aivika.Experiment.FileRenderer.FileRenderer r)
- Simulation.Aivika.Experiment.Chart.HistogramView: instance Simulation.Aivika.Experiment.Chart.Types.ChartRendering r => Simulation.Aivika.Experiment.Types.ExperimentView Simulation.Aivika.Experiment.Chart.HistogramView.HistogramView (Simulation.Aivika.Experiment.WebPageRenderer.WebPageRenderer r)
- Simulation.Aivika.Experiment.Chart.TimeSeriesView: instance Simulation.Aivika.Experiment.Chart.Types.ChartRendering r => Simulation.Aivika.Experiment.Types.ExperimentView Simulation.Aivika.Experiment.Chart.TimeSeriesView.TimeSeriesView (Simulation.Aivika.Experiment.FileRenderer.FileRenderer r)
- Simulation.Aivika.Experiment.Chart.TimeSeriesView: instance Simulation.Aivika.Experiment.Chart.Types.ChartRendering r => Simulation.Aivika.Experiment.Types.ExperimentView Simulation.Aivika.Experiment.Chart.TimeSeriesView.TimeSeriesView (Simulation.Aivika.Experiment.WebPageRenderer.WebPageRenderer r)
- Simulation.Aivika.Experiment.Chart.XYChartView: instance Simulation.Aivika.Experiment.Chart.Types.ChartRendering r => Simulation.Aivika.Experiment.Types.ExperimentView Simulation.Aivika.Experiment.Chart.XYChartView.XYChartView (Simulation.Aivika.Experiment.FileRenderer.FileRenderer r)
- Simulation.Aivika.Experiment.Chart.XYChartView: instance Simulation.Aivika.Experiment.Chart.Types.ChartRendering r => Simulation.Aivika.Experiment.Types.ExperimentView Simulation.Aivika.Experiment.Chart.XYChartView.XYChartView (Simulation.Aivika.Experiment.WebPageRenderer.WebPageRenderer r)
+ Simulation.Aivika.Experiment.Chart.DeviationChartView: instance Simulation.Aivika.Experiment.Chart.Types.ChartRendering r => Simulation.Aivika.Experiment.Types.ExperimentView Simulation.Aivika.Experiment.Chart.DeviationChartView.DeviationChartView (Simulation.Aivika.Experiment.Base.FileRenderer.FileRenderer r)
+ Simulation.Aivika.Experiment.Chart.DeviationChartView: instance Simulation.Aivika.Experiment.Chart.Types.ChartRendering r => Simulation.Aivika.Experiment.Types.ExperimentView Simulation.Aivika.Experiment.Chart.DeviationChartView.DeviationChartView (Simulation.Aivika.Experiment.Base.WebPageRenderer.WebPageRenderer r)
+ Simulation.Aivika.Experiment.Chart.FinalHistogramView: instance Simulation.Aivika.Experiment.Chart.Types.ChartRendering r => Simulation.Aivika.Experiment.Types.ExperimentView Simulation.Aivika.Experiment.Chart.FinalHistogramView.FinalHistogramView (Simulation.Aivika.Experiment.Base.FileRenderer.FileRenderer r)
+ Simulation.Aivika.Experiment.Chart.FinalHistogramView: instance Simulation.Aivika.Experiment.Chart.Types.ChartRendering r => Simulation.Aivika.Experiment.Types.ExperimentView Simulation.Aivika.Experiment.Chart.FinalHistogramView.FinalHistogramView (Simulation.Aivika.Experiment.Base.WebPageRenderer.WebPageRenderer r)
+ Simulation.Aivika.Experiment.Chart.FinalXYChartView: instance Simulation.Aivika.Experiment.Chart.Types.ChartRendering r => Simulation.Aivika.Experiment.Types.ExperimentView Simulation.Aivika.Experiment.Chart.FinalXYChartView.FinalXYChartView (Simulation.Aivika.Experiment.Base.FileRenderer.FileRenderer r)
+ Simulation.Aivika.Experiment.Chart.FinalXYChartView: instance Simulation.Aivika.Experiment.Chart.Types.ChartRendering r => Simulation.Aivika.Experiment.Types.ExperimentView Simulation.Aivika.Experiment.Chart.FinalXYChartView.FinalXYChartView (Simulation.Aivika.Experiment.Base.WebPageRenderer.WebPageRenderer r)
+ Simulation.Aivika.Experiment.Chart.HistogramView: instance Simulation.Aivika.Experiment.Chart.Types.ChartRendering r => Simulation.Aivika.Experiment.Types.ExperimentView Simulation.Aivika.Experiment.Chart.HistogramView.HistogramView (Simulation.Aivika.Experiment.Base.FileRenderer.FileRenderer r)
+ Simulation.Aivika.Experiment.Chart.HistogramView: instance Simulation.Aivika.Experiment.Chart.Types.ChartRendering r => Simulation.Aivika.Experiment.Types.ExperimentView Simulation.Aivika.Experiment.Chart.HistogramView.HistogramView (Simulation.Aivika.Experiment.Base.WebPageRenderer.WebPageRenderer r)
+ Simulation.Aivika.Experiment.Chart.TimeSeriesView: instance Simulation.Aivika.Experiment.Chart.Types.ChartRendering r => Simulation.Aivika.Experiment.Types.ExperimentView Simulation.Aivika.Experiment.Chart.TimeSeriesView.TimeSeriesView (Simulation.Aivika.Experiment.Base.FileRenderer.FileRenderer r)
+ Simulation.Aivika.Experiment.Chart.TimeSeriesView: instance Simulation.Aivika.Experiment.Chart.Types.ChartRendering r => Simulation.Aivika.Experiment.Types.ExperimentView Simulation.Aivika.Experiment.Chart.TimeSeriesView.TimeSeriesView (Simulation.Aivika.Experiment.Base.WebPageRenderer.WebPageRenderer r)
+ Simulation.Aivika.Experiment.Chart.XYChartView: instance Simulation.Aivika.Experiment.Chart.Types.ChartRendering r => Simulation.Aivika.Experiment.Types.ExperimentView Simulation.Aivika.Experiment.Chart.XYChartView.XYChartView (Simulation.Aivika.Experiment.Base.FileRenderer.FileRenderer r)
+ Simulation.Aivika.Experiment.Chart.XYChartView: instance Simulation.Aivika.Experiment.Chart.Types.ChartRendering r => Simulation.Aivika.Experiment.Types.ExperimentView Simulation.Aivika.Experiment.Chart.XYChartView.XYChartView (Simulation.Aivika.Experiment.Base.WebPageRenderer.WebPageRenderer r)
Files
- CHANGELOG.md +5/−0
- LICENSE +1/−1
- Simulation/Aivika/Experiment/Chart.hs +14/−12
- Simulation/Aivika/Experiment/Chart/DeviationChartView.hs +37/−31
- Simulation/Aivika/Experiment/Chart/FinalHistogramView.hs +16/−15
- Simulation/Aivika/Experiment/Chart/FinalXYChartView.hs +12/−11
- Simulation/Aivika/Experiment/Chart/HistogramView.hs +7/−6
- Simulation/Aivika/Experiment/Chart/TimeSeriesView.hs +7/−6
- Simulation/Aivika/Experiment/Chart/Types.hs +2/−2
- Simulation/Aivika/Experiment/Chart/Utils.hs +2/−2
- Simulation/Aivika/Experiment/Chart/XYChartView.hs +7/−6
- aivika-experiment-chart.cabal +20/−10
- examples/BassDiffusion/MainUsingCairo.hs +2/−1
- examples/BassDiffusion/MainUsingDiagrams.hs +5/−1
- examples/BouncingBall/MainUsingCairo.hs +2/−1
- examples/BouncingBall/MainUsingDiagrams.hs +5/−1
- examples/ChemicalReaction/MainUsingCairo.hs +2/−1
- examples/ChemicalReaction/MainUsingDiagrams.hs +5/−1
- examples/DifferenceEquations/MainUsingCairo.hs +2/−1
- examples/DifferenceEquations/MainUsingDiagrams.hs +5/−1
- examples/Financial/MainUsingCairo.hs +3/−2
- examples/Financial/MainUsingDiagrams.hs +5/−2
- examples/Furnace/Experiment.hs +2/−2
- examples/Furnace/MainUsingCairo.hs +2/−1
- examples/Furnace/MainUsingDiagrams.hs +5/−1
- examples/GPSSExample7-26/Experiment.hs +89/−0
- examples/GPSSExample7-26/MainUsingCairo.hs +13/−0
- examples/GPSSExample7-26/MainUsingDiagrams.hs +16/−0
- examples/GPSSExample7-26/Model.hs +95/−0
- examples/GPSSExample7-26/README +2/−0
- examples/GPSSExample7-31/Experiment.hs +69/−0
- examples/GPSSExample7-31/MainUsingCairo.hs +13/−0
- examples/GPSSExample7-31/MainUsingDiagrams.hs +16/−0
- examples/GPSSExample7-31/Model.hs +83/−0
- examples/GPSSExample7-31/README +2/−0
- examples/InspectionAdjustmentStations/Experiment.hs +4/−4
- examples/InspectionAdjustmentStations/MainUsingCairo.hs +2/−1
- examples/InspectionAdjustmentStations/MainUsingDiagrams.hs +5/−1
- examples/InventorySystem/Experiment.hs +2/−3
- examples/InventorySystem/MainUsingCairo.hs +2/−1
- examples/InventorySystem/MainUsingDiagrams.hs +5/−1
- examples/LinearArray/MainUsingCairo.hs +2/−1
- examples/LinearArray/MainUsingDiagrams.hs +5/−1
- examples/MachRep3/MainUsingCairo.hs +2/−1
- examples/MachRep3/MainUsingDiagrams.hs +5/−1
- examples/MachineBreakdowns/Experiment.hs +3/−3
- examples/MachineBreakdowns/MainUsingCairo.hs +2/−1
- examples/MachineBreakdowns/MainUsingDiagrams.hs +5/−1
- examples/PERT/Experiment.hs +0/−1
- examples/PERT/MainUsingCairo.hs +2/−1
- examples/PERT/MainUsingDiagrams.hs +5/−1
- examples/PortOperations/Experiment.hs +2/−2
- examples/PortOperations/MainUsingCairo.hs +2/−1
- examples/PortOperations/MainUsingDiagrams.hs +5/−1
- examples/QuarryOperations/Experiment.hs +6/−6
- examples/QuarryOperations/MainUsingCairo.hs +2/−1
- examples/QuarryOperations/MainUsingDiagrams.hs +5/−1
- examples/SingleLaneTraffic/Experiment.hs +1/−1
- examples/SingleLaneTraffic/MainUsingCairo.hs +4/−3
- examples/SingleLaneTraffic/MainUsingDiagrams.hs +6/−3
- examples/TruckHaulingSituation/Experiment.hs +4/−4
- examples/TruckHaulingSituation/MainUsingCairo.hs +2/−1
- examples/TruckHaulingSituation/MainUsingDiagrams.hs +5/−1
CHANGELOG.md view
@@ -1,4 +1,9 @@ +Version 5.0+-----++* Adjusted to a new API of library aivika-experiment.+ Version 4.3.1 -----
LICENSE view
@@ -1,4 +1,4 @@-Copyright (c) 2012-2015 David Sorokin <david.sorokin@gmail.com>+Copyright (c) 2012-2017 David Sorokin <david.sorokin@gmail.com> All rights reserved.
Simulation/Aivika/Experiment/Chart.hs view
@@ -1,31 +1,33 @@ -- | -- Module : Simulation.Aivika.Experiment.Chart--- Copyright : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com>+-- Copyright : Copyright (c) 2012-2017, David Sorokin <david.sorokin@gmail.com> -- License : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability : experimental--- Tested with: GHC 7.10.1+-- Tested with: GHC 8.0.1 -- -- This module re-exports the library functionality. -- module Simulation.Aivika.Experiment.Chart (-- * Modules+ module Simulation.Aivika.Experiment.Base, module Simulation.Aivika.Experiment.Chart.Types, - module Simulation.Aivika.Experiment.Chart.TimeSeriesView,- module Simulation.Aivika.Experiment.Chart.XYChartView,- module Simulation.Aivika.Experiment.Chart.FinalXYChartView,+ module Simulation.Aivika.Experiment.Chart.Utils, module Simulation.Aivika.Experiment.Chart.DeviationChartView,- module Simulation.Aivika.Experiment.Chart.HistogramView, module Simulation.Aivika.Experiment.Chart.FinalHistogramView,- module Simulation.Aivika.Experiment.Chart.Utils) where+ module Simulation.Aivika.Experiment.Chart.FinalXYChartView,+ module Simulation.Aivika.Experiment.Chart.HistogramView,+ module Simulation.Aivika.Experiment.Chart.TimeSeriesView,+ module Simulation.Aivika.Experiment.Chart.XYChartView) where +import Simulation.Aivika.Experiment.Base import Simulation.Aivika.Experiment.Chart.Types-import Simulation.Aivika.Experiment.Chart.TimeSeriesView-import Simulation.Aivika.Experiment.Chart.XYChartView-import Simulation.Aivika.Experiment.Chart.FinalXYChartView+import Simulation.Aivika.Experiment.Chart.Utils import Simulation.Aivika.Experiment.Chart.DeviationChartView-import Simulation.Aivika.Experiment.Chart.HistogramView import Simulation.Aivika.Experiment.Chart.FinalHistogramView-import Simulation.Aivika.Experiment.Chart.Utils+import Simulation.Aivika.Experiment.Chart.FinalXYChartView+import Simulation.Aivika.Experiment.Chart.HistogramView+import Simulation.Aivika.Experiment.Chart.TimeSeriesView+import Simulation.Aivika.Experiment.Chart.XYChartView
Simulation/Aivika/Experiment/Chart/DeviationChartView.hs view
@@ -3,11 +3,11 @@ -- | -- Module : Simulation.Aivika.Experiment.Chart.DeviationChartView--- Copyright : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com>+-- Copyright : Copyright (c) 2012-2017, David Sorokin <david.sorokin@gmail.com> -- License : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability : experimental--- Tested with: GHC 7.10.1+-- Tested with: GHC 8.0.1 -- -- The module defines 'DeviationChartView' that plots the deviation chart using rule of 3-sigma. --@@ -37,7 +37,8 @@ import Simulation.Aivika import Simulation.Aivika.Experiment-import Simulation.Aivika.Experiment.MRef+import Simulation.Aivika.Experiment.Base+import Simulation.Aivika.Experiment.Concurrent.MVar import Simulation.Aivika.Experiment.Chart.Types import Simulation.Aivika.Experiment.Chart.Utils (colourisePlotLines, colourisePlotFillBetween) @@ -123,7 +124,7 @@ instance ChartRendering r => ExperimentView DeviationChartView (WebPageRenderer r) where outputView v = - let reporter exp (WebPageRenderer renderer) dir =+ let reporter exp (WebPageRenderer renderer _) dir = do st <- newDeviationChart v exp renderer dir let context = WebPageContext $@@ -138,7 +139,7 @@ instance ChartRendering r => ExperimentView DeviationChartView (FileRenderer r) where outputView v = - let reporter exp (FileRenderer renderer) dir =+ let reporter exp (FileRenderer renderer _) dir = do st <- newDeviationChart v exp renderer dir return ExperimentReporter { reporterInitialise = return (), reporterFinalise = finaliseDeviationChart st,@@ -153,28 +154,25 @@ deviationChartRenderer :: r, deviationChartDir :: FilePath, deviationChartFile :: IORef (Maybe FilePath),- deviationChartLock :: MVar (),- deviationChartResults :: MRef (Maybe DeviationChartResults) }+ deviationChartResults :: MVar (Maybe DeviationChartResults) } -- | The deviation chart item. data DeviationChartResults = DeviationChartResults { deviationChartTimes :: IOArray Int Double, deviationChartNames :: [Either String String],- deviationChartStats :: [IOArray Int (SamplingStats Double)] }+ deviationChartStats :: [MVar (IOArray Int (SamplingStats Double))] } -- | Create a new state of the view. newDeviationChart :: DeviationChartView -> Experiment -> r -> FilePath -> ExperimentWriter (DeviationChartViewState r) newDeviationChart view exp renderer dir = liftIO $ do f <- newIORef Nothing- l <- newMVar () - r <- newMRef Nothing+ r <- newMVar Nothing return DeviationChartViewState { deviationChartView = view, deviationChartExperiment = exp, deviationChartRenderer = renderer, deviationChartDir = dir, deviationChartFile = f,- deviationChartLock = l, deviationChartResults = r } -- | Create new chart results.@@ -184,7 +182,7 @@ bnds = integIterationBnds specs times <- liftIO $ newListArray bnds (integTimes specs) stats <- forM names $ \_ -> - liftIO $ newArray bnds emptySamplingStats+ liftIO $ newArray bnds emptySamplingStats >>= newMVar return DeviationChartResults { deviationChartTimes = times, deviationChartNames = names, deviationChartStats = stats }@@ -192,14 +190,14 @@ -- | Require to return unique chart results associated with the specified state. requireDeviationChartResults :: DeviationChartViewState r -> [Either String String] -> IO DeviationChartResults requireDeviationChartResults st names =- maybeWriteMRef (deviationChartResults st)+ maybePutMVar (deviationChartResults st) (newDeviationChartResults names (deviationChartExperiment st)) $ \results -> if (names /= deviationChartNames results) then error "Series with different names are returned for different runs: requireDeviationChartResults" else return results -- | Simulate the specified series.-simulateDeviationChart :: DeviationChartViewState r -> ExperimentData -> Event DisposableEvent+simulateDeviationChart :: DeviationChartViewState r -> ExperimentData -> Composite () simulateDeviationChart st expdata = do let view = deviationChartView st rs1 = deviationChartLeftYSeries view $@@ -216,18 +214,24 @@ names = map Left names1 ++ map Right names2 signals = experimentPredefinedSignals expdata signal = resultSignalInIntegTimes signals- lock = deviationChartLock st- results <- liftIO $ requireDeviationChartResults st names- let stats = deviationChartStats results- handleSignal signal $ \_ ->- do xs <- forM exts resultValueData- i <- liftDynamics integIteration- liftIO $- forM_ (zip xs stats) $ \(x, stats) ->- withMVar lock $ \() ->- do y <- readArray stats i- let y' = combineSamplingStatsEither x y- y' `seq` writeArray stats i y'+ hs <- forM exts $ \ext ->+ newSignalHistory $+ flip mapSignalM signal $ \t ->+ resultValueData ext+ disposableComposite $+ DisposableEvent $+ do results <- liftIO $ requireDeviationChartResults st names+ let stats = deviationChartStats results+ forM_ (zip hs stats) $ \(h, stats') ->+ do (ts, xs) <- readSignalHistory h+ let (lo, hi) = bounds ts+ liftIO $+ withMVar stats' $ \stats'' ->+ forM_ [lo..hi] $ \i ->+ do let x = xs ! i+ y <- readArray stats'' i+ let y' = combineSamplingStatsEither x y+ y' `seq` writeArray stats'' i y' -- | Plot the deviation chart after the simulation is complete. finaliseDeviationChart :: ChartRendering r => DeviationChartViewState r -> ExperimentWriter ()@@ -249,7 +253,7 @@ mapFilePath (flip replaceExtension $ renderableChartExtension renderer) $ expandFilePath (deviationChartFileName view) $ M.fromList [("$TITLE", title)]- results <- liftIO $ readMRef $ deviationChartResults st+ results <- liftIO $ readMVar $ deviationChartResults st case results of Nothing -> return () Just results ->@@ -257,8 +261,9 @@ do let times = deviationChartTimes results names = deviationChartNames results stats = deviationChartStats results- ps1 <- forM (zip3 names stats plotLines) $ \(name, stats, plotLines) ->- do xs <- getAssocs stats+ ps1 <- forM (zip3 names stats plotLines) $ \(name, stats', plotLines) ->+ do stats'' <- readMVar stats'+ xs <- getAssocs stats'' zs <- forM xs $ \(i, stats) -> do t <- readArray times i return (t, samplingStatsMean stats)@@ -270,8 +275,9 @@ case name of Left _ -> return $ Left p Right _ -> return $ Right p- ps2 <- forM (zip3 names stats plotFillBetween) $ \(name, stats, plotFillBetween) ->- do xs <- getAssocs stats+ ps2 <- forM (zip3 names stats plotFillBetween) $ \(name, stats', plotFillBetween) ->+ do stats'' <- readMVar stats'+ xs <- getAssocs stats'' zs <- forM xs $ \(i, stats) -> do t <- readArray times i let mu = samplingStatsMean stats
Simulation/Aivika/Experiment/Chart/FinalHistogramView.hs view
@@ -3,11 +3,11 @@ -- | -- Module : Simulation.Aivika.Experiment.Chart.FinalHistogramView--- Copyright : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com>+-- Copyright : Copyright (c) 2012-2017, David Sorokin <david.sorokin@gmail.com> -- License : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability : experimental--- Tested with: GHC 7.10.1+-- Tested with: GHC 8.0.1 -- -- The module defines 'FinalHistogramView' that plots a histogram -- by the specified series in final time points collected from different @@ -39,7 +39,8 @@ import Simulation.Aivika import Simulation.Aivika.Experiment-import Simulation.Aivika.Experiment.MRef+import Simulation.Aivika.Experiment.Base+import Simulation.Aivika.Experiment.Concurrent.MVar import Simulation.Aivika.Experiment.Chart.Types import Simulation.Aivika.Experiment.Chart.Utils (colourisePlotBars) @@ -115,7 +116,7 @@ instance ChartRendering r => ExperimentView FinalHistogramView (WebPageRenderer r) where outputView v = - let reporter exp (WebPageRenderer renderer) dir =+ let reporter exp (WebPageRenderer renderer _) dir = do st <- newFinalHistogram v exp renderer dir let context = WebPageContext $@@ -130,7 +131,7 @@ instance ChartRendering r => ExperimentView FinalHistogramView (FileRenderer r) where outputView v = - let reporter exp (FileRenderer renderer) dir =+ let reporter exp (FileRenderer renderer _) dir = do st <- newFinalHistogram v exp renderer dir return ExperimentReporter { reporterInitialise = return (), reporterFinalise = finaliseFinalHistogram st,@@ -145,19 +146,19 @@ finalHistogramRenderer :: r, finalHistogramDir :: FilePath, finalHistogramFile :: IORef (Maybe FilePath),- finalHistogramResults :: MRef (Maybe FinalHistogramResults) }+ finalHistogramResults :: MVar (Maybe FinalHistogramResults) } -- | The histogram item. data FinalHistogramResults = FinalHistogramResults { finalHistogramNames :: [String],- finalHistogramValues :: [MRef [Double]] }+ finalHistogramValues :: [MVar [Double]] } -- | Create a new state of the view. newFinalHistogram :: FinalHistogramView -> Experiment -> r -> FilePath -> ExperimentWriter (FinalHistogramViewState r) newFinalHistogram view exp renderer dir = liftIO $ do f <- newIORef Nothing- r <- newMRef Nothing+ r <- newMVar Nothing return FinalHistogramViewState { finalHistogramView = view, finalHistogramExperiment = exp, finalHistogramRenderer = renderer,@@ -168,21 +169,21 @@ -- | Create new histogram results. newFinalHistogramResults :: [String] -> Experiment -> IO FinalHistogramResults newFinalHistogramResults names exp =- do values <- forM names $ \_ -> liftIO $ newMRef []+ do values <- forM names $ \_ -> liftIO $ newMVar [] return FinalHistogramResults { finalHistogramNames = names, finalHistogramValues = values } -- | Require to return unique results associated with the specified state. requireFinalHistogramResults :: FinalHistogramViewState r -> [String] -> IO FinalHistogramResults requireFinalHistogramResults st names =- maybeWriteMRef (finalHistogramResults st)+ maybePutMVar (finalHistogramResults st) (newFinalHistogramResults names (finalHistogramExperiment st)) $ \results -> if (names /= finalHistogramNames results) then error "Series with different names are returned for different runs: requireFinalHistogramResults" else return results -- | Simulation of the specified series.-simulateFinalHistogram :: FinalHistogramViewState r -> ExperimentData -> Event DisposableEvent+simulateFinalHistogram :: FinalHistogramViewState r -> ExperimentData -> Composite () simulateFinalHistogram st expdata = do let view = finalHistogramView st rs = finalHistogramSeries view $@@ -196,11 +197,11 @@ predicate = finalHistogramPredicate view results <- liftIO $ requireFinalHistogramResults st names let values = finalHistogramValues results- handleSignal signal $ \_ ->+ handleSignalComposite signal $ \_ -> do xs <- forM exts resultValueData liftIO $ forM_ (zip xs values) $ \(x, values) ->- modifyMRef_ values $ return . (++) x+ modifyMVar_ values $ return . (++) x -- | Plot the histogram after the simulation is complete. finaliseFinalHistogram :: ChartRendering r => FinalHistogramViewState r -> ExperimentWriter ()@@ -221,14 +222,14 @@ mapFilePath (flip replaceExtension $ renderableChartExtension renderer) $ expandFilePath (finalHistogramFileName view) $ M.fromList [("$TITLE", title)]- results <- liftIO $ readMRef $ finalHistogramResults st+ results <- liftIO $ readMVar $ finalHistogramResults st case results of Nothing -> return () Just results -> liftIO $ do let names = finalHistogramNames results values = finalHistogramValues results- xs <- forM values readMRef+ xs <- forM values readMVar let zs = histogramToBars . filterHistogram . histogram $ map filterData xs p = plotBars $
Simulation/Aivika/Experiment/Chart/FinalXYChartView.hs view
@@ -3,11 +3,11 @@ -- | -- Module : Simulation.Aivika.Experiment.Chart.FinalXYChartView--- Copyright : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com>+-- Copyright : Copyright (c) 2012-2017, David Sorokin <david.sorokin@gmail.com> -- License : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability : experimental--- Tested with: GHC 7.10.1+-- Tested with: GHC 8.0.1 -- -- The module defines 'FinalXYChartView' that plots a single XY chart -- in final time points for different simulation runs sequentially@@ -39,7 +39,8 @@ import Simulation.Aivika import Simulation.Aivika.Experiment-import Simulation.Aivika.Experiment.MRef+import Simulation.Aivika.Experiment.Base+import Simulation.Aivika.Experiment.Concurrent.MVar import Simulation.Aivika.Experiment.Chart.Types import Simulation.Aivika.Experiment.Chart.Utils (colourisePlotLines) @@ -132,7 +133,7 @@ instance ChartRendering r => ExperimentView FinalXYChartView (WebPageRenderer r) where outputView v = - let reporter exp (WebPageRenderer renderer) dir =+ let reporter exp (WebPageRenderer renderer _) dir = do st <- newFinalXYChart v exp renderer dir let context = WebPageContext $@@ -147,7 +148,7 @@ instance ChartRendering r => ExperimentView FinalXYChartView (FileRenderer r) where outputView v = - let reporter exp (FileRenderer renderer) dir =+ let reporter exp (FileRenderer renderer _) dir = do st <- newFinalXYChart v exp renderer dir return ExperimentReporter { reporterInitialise = return (), reporterFinalise = finaliseFinalXYChart st,@@ -163,7 +164,7 @@ finalXYChartDir :: FilePath, finalXYChartFile :: IORef (Maybe FilePath), finalXYChartLock :: MVar (),- finalXYChartResults :: MRef (Maybe FinalXYChartResults) }+ finalXYChartResults :: MVar (Maybe FinalXYChartResults) } -- | The XY chart results. data FinalXYChartResults =@@ -177,7 +178,7 @@ liftIO $ do f <- newIORef Nothing l <- newMVar () - r <- newMRef Nothing+ r <- newMVar Nothing return FinalXYChartViewState { finalXYChartView = view, finalXYChartExperiment = exp, finalXYChartRenderer = renderer,@@ -199,14 +200,14 @@ -- | Require to return unique results associated with the specified state. requireFinalXYChartResults :: FinalXYChartViewState r -> String -> [Either String String] -> IO FinalXYChartResults requireFinalXYChartResults st xname ynames =- maybeWriteMRef (finalXYChartResults st)+ maybePutMVar (finalXYChartResults st) (newFinalXYChartResults xname ynames (finalXYChartExperiment st)) $ \results -> if (xname /= finalXYChartXName results) || (ynames /= finalXYChartYNames results) then error "Series with different names are returned for different runs: requireFinalXYChartResults" else return results -- | Simulation.-simulateFinalXYChart :: FinalXYChartViewState r -> ExperimentData -> Event DisposableEvent+simulateFinalXYChart :: FinalXYChartViewState r -> ExperimentData -> Composite () simulateFinalXYChart st expdata = do let view = finalXYChartView st rs0 = finalXYChartXSeries view $@@ -237,7 +238,7 @@ lock = finalXYChartLock st results <- liftIO $ requireFinalXYChartResults st name0 names let xys = finalXYChartXY results- handleSignal signal $ \_ ->+ handleSignalComposite signal $ \_ -> do x <- resultValueData ext0 ys <- forM exts resultValueData i <- liftParameter simulationIndex@@ -265,7 +266,7 @@ mapFilePath (flip replaceExtension $ renderableChartExtension renderer) $ expandFilePath (finalXYChartFileName view) $ M.fromList [("$TITLE", title)]- results <- liftIO $ readMRef $ finalXYChartResults st+ results <- liftIO $ readMVar $ finalXYChartResults st case results of Nothing -> return () Just results ->
Simulation/Aivika/Experiment/Chart/HistogramView.hs view
@@ -3,11 +3,11 @@ -- | -- Module : Simulation.Aivika.Experiment.Chart.HistogramView--- Copyright : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com>+-- Copyright : Copyright (c) 2012-2017, David Sorokin <david.sorokin@gmail.com> -- License : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability : experimental--- Tested with: GHC 7.10.1+-- Tested with: GHC 8.0.1 -- -- The module defines 'HistogramView' that plots the histogram -- collecting statistics in all integration time points and does@@ -37,6 +37,7 @@ import Simulation.Aivika import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Base import Simulation.Aivika.Experiment.Chart.Types import Simulation.Aivika.Experiment.Chart.Utils (colourisePlotBars) import Simulation.Aivika.Experiment.Histogram@@ -125,7 +126,7 @@ instance ChartRendering r => ExperimentView HistogramView (WebPageRenderer r) where outputView v = - let reporter exp (WebPageRenderer renderer) dir =+ let reporter exp (WebPageRenderer renderer _) dir = do st <- newHistogram v exp renderer dir let context = WebPageContext $@@ -140,7 +141,7 @@ instance ChartRendering r => ExperimentView HistogramView (FileRenderer r) where outputView v = - let reporter exp (FileRenderer renderer) dir =+ let reporter exp (FileRenderer renderer _) dir = do st <- newHistogram v exp renderer dir return ExperimentReporter { reporterInitialise = return (), reporterFinalise = return (),@@ -176,7 +177,7 @@ histogramMap = m } -- | Plot the histogram during the simulation.-simulateHistogram :: ChartRendering r => HistogramViewState r -> ExperimentData -> Event DisposableEvent+simulateHistogram :: ChartRendering r => HistogramViewState r -> ExperimentData -> Composite () simulateHistogram st expdata = do let view = histogramView st rs = histogramSeries view $@@ -213,7 +214,7 @@ mapSignalM (const $ resultValueData ext) $ filterSignalM (const predicate) $ resultSignalInIntegTimes signals- return $+ disposableComposite $ DisposableEvent $ do xs <- forM hs readSignalHistory let zs = histogramToBars . filterHistogram . build $
Simulation/Aivika/Experiment/Chart/TimeSeriesView.hs view
@@ -3,11 +3,11 @@ -- | -- Module : Simulation.Aivika.Experiment.Chart.TimeSeriesView--- Copyright : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com>+-- Copyright : Copyright (c) 2012-2017, David Sorokin <david.sorokin@gmail.com> -- License : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability : experimental--- Tested with: GHC 7.10.1+-- Tested with: GHC 8.0.1 -- -- The module defines 'TimeSeriesView' that plots the time series charts. --@@ -36,6 +36,7 @@ import Simulation.Aivika import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Base import Simulation.Aivika.Experiment.Chart.Types import Simulation.Aivika.Experiment.Chart.Utils (colourisePlotLines) @@ -130,7 +131,7 @@ instance ChartRendering r => ExperimentView TimeSeriesView (WebPageRenderer r) where outputView v = - let reporter exp (WebPageRenderer renderer) dir =+ let reporter exp (WebPageRenderer renderer _) dir = do st <- newTimeSeries v exp renderer dir let context = WebPageContext $@@ -145,7 +146,7 @@ instance ChartRendering r => ExperimentView TimeSeriesView (FileRenderer r) where outputView v = - let reporter exp (FileRenderer renderer) dir =+ let reporter exp (FileRenderer renderer _) dir = do st <- newTimeSeries v exp renderer dir return ExperimentReporter { reporterInitialise = return (), reporterFinalise = return (),@@ -181,7 +182,7 @@ timeSeriesMap = m } -- | Plot the time series chart within simulation.-simulateTimeSeries :: ChartRendering r => TimeSeriesViewState r -> ExperimentData -> Event DisposableEvent+simulateTimeSeries :: ChartRendering r => TimeSeriesViewState r -> ExperimentData -> Composite () simulateTimeSeries st expdata = do let view = timeSeriesView st rs1 = timeSeriesLeftYSeries view $@@ -229,7 +230,7 @@ resultValueSignal ext hs1 <- inputHistory exts1 hs2 <- inputHistory exts2- return $+ disposableComposite $ DisposableEvent $ do let plots hs exts plotLineTails = do ps <-
Simulation/Aivika/Experiment/Chart/Types.hs view
@@ -1,11 +1,11 @@ -- | -- Module : Simulation.Aivika.Experiment.Chart.Types--- Copyright : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com>+-- Copyright : Copyright (c) 2012-2017, David Sorokin <david.sorokin@gmail.com> -- License : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability : experimental--- Tested with: GHC 7.10.1+-- Tested with: GHC 8.0.1 -- -- The module defines a type class for rendering charts. --
Simulation/Aivika/Experiment/Chart/Utils.hs view
@@ -1,11 +1,11 @@ -- | -- Module : Simulation.Aivika.Experiment.Chart.Utils--- Copyright : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com>+-- Copyright : Copyright (c) 2012-2017, David Sorokin <david.sorokin@gmail.com> -- License : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability : experimental--- Tested with: GHC 7.10.1+-- Tested with: GHC 8.0.1 -- -- The module defines some utilities used in the charting. --
Simulation/Aivika/Experiment/Chart/XYChartView.hs view
@@ -3,11 +3,11 @@ -- | -- Module : Simulation.Aivika.Experiment.Chart.XYChartView--- Copyright : Copyright (c) 2012-2015, David Sorokin <david.sorokin@gmail.com>+-- Copyright : Copyright (c) 2012-2017, David Sorokin <david.sorokin@gmail.com> -- License : BSD3 -- Maintainer : David Sorokin <david.sorokin@gmail.com> -- Stability : experimental--- Tested with: GHC 7.10.1+-- Tested with: GHC 8.0.1 -- -- The module defines 'XYChartView' that plots the XY charts. --@@ -36,6 +36,7 @@ import Simulation.Aivika import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Base import Simulation.Aivika.Experiment.Chart.Types import Simulation.Aivika.Experiment.Chart.Utils (colourisePlotLines) @@ -139,7 +140,7 @@ instance ChartRendering r => ExperimentView XYChartView (WebPageRenderer r) where outputView v = - let reporter exp (WebPageRenderer renderer) dir =+ let reporter exp (WebPageRenderer renderer _) dir = do st <- newXYChart v exp renderer dir let context = WebPageContext $@@ -154,7 +155,7 @@ instance ChartRendering r => ExperimentView XYChartView (FileRenderer r) where outputView v = - let reporter exp (FileRenderer renderer) dir =+ let reporter exp (FileRenderer renderer _) dir = do st <- newXYChart v exp renderer dir return ExperimentReporter { reporterInitialise = return (), reporterFinalise = return (),@@ -190,7 +191,7 @@ xyChartMap = m } -- | Plot the XY chart during the simulation.-simulateXYChart :: ChartRendering r => XYChartViewState r -> ExperimentData -> Event DisposableEvent+simulateXYChart :: ChartRendering r => XYChartViewState r -> ExperimentData -> Composite () simulateXYChart st expdata = do let view = xyChartView st rs0 = xyChartXSeries view $@@ -249,7 +250,7 @@ signalx <> signaly hs1 <- inputHistory exts1 hs2 <- inputHistory exts2- return $+ disposableComposite $ DisposableEvent $ do let plots hs exts plotLineTails = do ps <-
aivika-experiment-chart.cabal view
@@ -1,5 +1,5 @@ name: aivika-experiment-chart-version: 4.3.2+version: 5.0 synopsis: Simulation experiments with charting for the Aivika library description: This package complements the aivika [1] and aivika-experiment [2] packages with@@ -23,10 +23,10 @@ category: Simulation license: BSD3 license-file: LICENSE-copyright: (c) 2012-2015. David Sorokin <david.sorokin@gmail.com>+copyright: (c) 2012-2017. David Sorokin <david.sorokin@gmail.com> author: David Sorokin maintainer: David Sorokin <david.sorokin@gmail.com>-homepage: http://github.com/dsorokin/aivika-experiment-chart+homepage: http://www.aivikasoft.com cabal-version: >= 1.6 build-type: Simple tested-with: GHC == 7.10.1@@ -61,6 +61,16 @@ examples/Furnace/MainUsingCairo.hs examples/Furnace/MainUsingDiagrams.hs examples/Furnace/README+ examples/GPSSExample7-26/Model.hs+ examples/GPSSExample7-26/Experiment.hs+ examples/GPSSExample7-26/MainUsingCairo.hs+ examples/GPSSExample7-26/MainUsingDiagrams.hs+ examples/GPSSExample7-26/README+ examples/GPSSExample7-31/Model.hs+ examples/GPSSExample7-31/Experiment.hs+ examples/GPSSExample7-31/MainUsingCairo.hs+ examples/GPSSExample7-31/MainUsingDiagrams.hs+ examples/GPSSExample7-31/README examples/InspectionAdjustmentStations/Model.hs examples/InspectionAdjustmentStations/Experiment.hs examples/InspectionAdjustmentStations/MainUsingCairo.hs@@ -117,13 +127,13 @@ exposed-modules: Simulation.Aivika.Experiment.Chart Simulation.Aivika.Experiment.Chart.Types- Simulation.Aivika.Experiment.Chart.TimeSeriesView- Simulation.Aivika.Experiment.Chart.XYChartView- Simulation.Aivika.Experiment.Chart.FinalXYChartView+ Simulation.Aivika.Experiment.Chart.Utils Simulation.Aivika.Experiment.Chart.DeviationChartView- Simulation.Aivika.Experiment.Chart.HistogramView Simulation.Aivika.Experiment.Chart.FinalHistogramView- Simulation.Aivika.Experiment.Chart.Utils+ Simulation.Aivika.Experiment.Chart.FinalXYChartView+ Simulation.Aivika.Experiment.Chart.HistogramView+ Simulation.Aivika.Experiment.Chart.TimeSeriesView+ Simulation.Aivika.Experiment.Chart.XYChartView build-depends: base >= 3 && < 6, mtl >= 1.1.0.2,@@ -135,8 +145,8 @@ lens >= 3.9, data-default-class >= 0.0.1, colour >= 2.3.3,- aivika >= 4.3,- aivika-experiment >= 4.0.3+ aivika >= 5.1,+ aivika-experiment >= 5.0 extensions: MultiParamTypeClasses
examples/BassDiffusion/MainUsingCairo.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-cairo must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Cairo import Graphics.Rendering.Chart.Backend.Cairo@@ -9,4 +10,4 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model+main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
examples/BassDiffusion/MainUsingDiagrams.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-diagrams must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Diagrams import Graphics.Rendering.Chart.Backend.Diagrams@@ -9,4 +10,7 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model+main = + do fonts <- loadCommonFonts+ let renderer = DiagramsRenderer SVG (return fonts)+ runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model
examples/BouncingBall/MainUsingCairo.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-cairo must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Cairo import Graphics.Rendering.Chart.Backend.Cairo@@ -9,4 +10,4 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model+main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
examples/BouncingBall/MainUsingDiagrams.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-diagrams must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Diagrams import Graphics.Rendering.Chart.Backend.Diagrams@@ -9,4 +10,7 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model+main = + do fonts <- loadCommonFonts+ let renderer = DiagramsRenderer SVG (return fonts)+ runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model
examples/ChemicalReaction/MainUsingCairo.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-cairo must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Cairo import Graphics.Rendering.Chart.Backend.Cairo@@ -9,4 +10,4 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model+main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
examples/ChemicalReaction/MainUsingDiagrams.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-diagrams must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Diagrams import Graphics.Rendering.Chart.Backend.Diagrams@@ -9,4 +10,7 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model+main = + do fonts <- loadCommonFonts+ let renderer = DiagramsRenderer SVG (return fonts)+ runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model
examples/DifferenceEquations/MainUsingCairo.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-cairo must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Cairo import Graphics.Rendering.Chart.Backend.Cairo@@ -9,4 +10,4 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model+main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
examples/DifferenceEquations/MainUsingDiagrams.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-diagrams must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Diagrams import Graphics.Rendering.Chart.Backend.Diagrams@@ -9,4 +10,7 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model+main = + do fonts <- loadCommonFonts+ let renderer = DiagramsRenderer SVG (return fonts)+ runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model
examples/Financial/MainUsingCairo.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-cairo must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Cairo import Graphics.Rendering.Chart.Backend.Cairo@@ -15,11 +16,11 @@ putStrLn "*** The simulation with default parameters..." runExperiment singleExperiment singleGenerators- (WebPageRenderer $ CairoRenderer PNG) (model defaultParams)+ (WebPageRenderer (CairoRenderer PNG) experimentFilePath) (model defaultParams) putStrLn "" -- run the Monte-Carlo simulation putStrLn "*** The Monte-Carlo simulation..." randomParams >>= runExperimentParallel monteCarloExperiment monteCarloGenerators- (WebPageRenderer $ CairoRenderer PNG) . model+ (WebPageRenderer (CairoRenderer PNG) experimentFilePath) . model
examples/Financial/MainUsingDiagrams.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-diagrams must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Diagrams import Graphics.Rendering.Chart.Backend.Diagrams@@ -11,16 +12,18 @@ import Experiment main = do+ fonts <- loadCommonFonts+ let renderer = DiagramsRenderer SVG (return fonts) -- run the ordinary simulation putStrLn "*** The simulation with default parameters..." runExperiment singleExperiment singleGenerators- (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) (model defaultParams)+ (WebPageRenderer renderer experimentFilePath) (model defaultParams) putStrLn "" -- run the Monte-Carlo simulation putStrLn "*** The Monte-Carlo simulation..." randomParams >>= runExperimentParallel monteCarloExperiment monteCarloGenerators- (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) . model+ (WebPageRenderer renderer experimentFilePath) . model
examples/Furnace/Experiment.hs view
@@ -37,10 +37,10 @@ outputIngotTemp = resultByName outputIngotTempName furnaceQueue = T.Queue $ resultByName furnaceQueueName-furnaceQueueCount = T.tr $ T.queueCount furnaceQueue+furnaceQueueCount = T.queueCount furnaceQueue furnaceQueueCountStats = T.tr $ T.queueCountStats furnaceQueue furnaceQueueWaitTime = T.tr $ T.queueWaitTime furnaceQueue-furnaceQueueRate = T.tr $ T.queueRate furnaceQueue+furnaceQueueRate = T.queueRate furnaceQueue generators :: ChartRendering r => [WebPageGenerator r] generators =
examples/Furnace/MainUsingCairo.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-cairo must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Cairo import Graphics.Rendering.Chart.Backend.Cairo@@ -9,4 +10,4 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model+main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
examples/Furnace/MainUsingDiagrams.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-diagrams must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Diagrams import Graphics.Rendering.Chart.Backend.Diagrams@@ -9,4 +10,7 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model+main = + do fonts <- loadCommonFonts+ let renderer = DiagramsRenderer SVG (return fonts)+ runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model
+ examples/GPSSExample7-26/Experiment.hs view
@@ -0,0 +1,89 @@++{-# LANGUAGE FlexibleContexts #-}++module Experiment (experiment, generators) where++import Data.Monoid++import Control.Arrow++import Simulation.Aivika+import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart++import qualified Simulation.Aivika.Results.Transform as T+import qualified Simulation.Aivika.GPSS.Results.Transform as GpssT++-- | The simulation specs.+specs = Specs { spcStartTime = 0.0,+ spcStopTime = 500000.0,+ spcDT = 1000.0,+ spcMethod = RungeKutta4,+ spcGeneratorType = SimpleGenerator }++-- | The experiment.+experiment :: Experiment+experiment =+ defaultExperiment {+ experimentSpecs = specs,+ experimentRunCount = 500,+ -- experimentRunCount = 10,+ experimentTitle = "The GPSS module 7.31" }++line = GpssT.Queue $ resultByName "line"+lineContent = GpssT.queueContent line+lineContentStats = T.tr $ GpssT.queueContentStats line+lineWaitTime = T.tr $ GpssT.queueWaitTime line+lineNonZeroEntryWaitTime = T.tr $ GpssT.queueNonZeroEntryWaitTime line++prof = GpssT.Facility $ resultByName "prof"+profUtilCount = GpssT.facilityUtilisationCount prof+profUtilCountStats = T.tr $ GpssT.facilityUtilisationCountStats prof+profHoldingTime = T.tr $ GpssT.facilityHoldingTime prof++statsView title series =+ defaultFinalStatsView {+ finalStatsTitle = title,+ finalStatsSeries = series+ }++chartView title series =+ defaultDeviationChartView {+ deviationChartTitle = title,+ deviationChartRightYSeries = series+ }+ +histogramView title series = + defaultFinalHistogramView {+ finalHistogramTitle = title,+ finalHistogramSeries = series+ }++generators :: ChartRendering r => [WebPageGenerator r]+generators =+ [outputView defaultExperimentSpecsView,+ outputView defaultInfoView,+ outputView $ statsView "PROF Utilisation" $+ profUtilCount <>+ profUtilCountStats,+ outputView $ chartView "PROF Utilisation" $+ profUtilCount <> + profUtilCountStats,+ outputView $ statsView "PROF Holding Time"+ profHoldingTime,+ outputView $ chartView "PROF Holding Time"+ profHoldingTime,+ outputView $ statsView "LINE Content" $+ lineContent <>+ lineContentStats,+ outputView $ chartView "LINE Content" $+ lineContent <>+ lineContentStats,+ outputView $ histogramView "LINE Content"+ lineContent,+ outputView $ statsView "LINE Wait Time" $+ lineWaitTime <>+ lineNonZeroEntryWaitTime,+ outputView $ chartView "LINE Wait Time" $+ lineWaitTime <>+ lineNonZeroEntryWaitTime]
+ examples/GPSSExample7-26/MainUsingCairo.hs view
@@ -0,0 +1,13 @@++-- To run, package aivika-experiment-cairo must be installed.++import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart+import Simulation.Aivika.Experiment.Chart.Backend.Cairo++import Graphics.Rendering.Chart.Backend.Cairo++import Model+import Experiment++main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
+ examples/GPSSExample7-26/MainUsingDiagrams.hs view
@@ -0,0 +1,16 @@++-- To run, package aivika-experiment-diagrams must be installed.++import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart+import Simulation.Aivika.Experiment.Chart.Backend.Diagrams++import Graphics.Rendering.Chart.Backend.Diagrams++import Model+import Experiment++main = + do fonts <- loadCommonFonts+ let renderer = DiagramsRenderer SVG (return fonts)+ runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model
+ examples/GPSSExample7-26/Model.hs view
@@ -0,0 +1,95 @@++{-+ GENERATE 2000,500,,,1+ GATE NI PROF,Busy+ PREEMPT PROF,PR,Add,5+ ADVANCE (Exponential(1,0,200))+ RETURN PROF+Busy TERMINATE++ GENERATE 2000,500+ QUEUE LINE+ SEIZE PROF+ DEPART LINE+ ADVANCE (Exponential(1,0,1000))+LetGo RELEASE PROF+ TERMINATE++Add ASSIGN 5+,300+ ADVANCE P5+ TRANSFER ,LetGo++ GENERATE 10000000+ TERMINATE 1++ START 1+ -}+ +module Model (model) where++import Prelude hiding (id)++import Control.Category+import Control.Monad.Trans++import Data.Maybe++import Simulation.Aivika+import Simulation.Aivika.GPSS+import qualified Simulation.Aivika.GPSS.Queue as Q++model :: Simulation Results+model =+ do line <- runEventInStartTime Q.newQueue+ prof <- runEventInStartTime newFacility++ let phoneCallStream = randomUniformStream (2000 - 500) (2000 + 500)+ studentStream = randomUniformStream (2000 - 500) (2000 + 500)++ let phoneCalls = streamGeneratorBlock phoneCallStream 1+ phoneCallChain =+ Block (\a ->+ do f <- liftEvent (facilityInterrupted prof)+ if f+ then blockProcess (transferBlock busy) a+ else return a) >>>+ preemptBlock prof+ (PreemptBlockMode { preemptBlockPriorityMode = True,+ preemptBlockTransfer = Just add,+ -- preemptBlockTransfer = Nothing,+ preemptBlockRemoveMode = False }) >>>+ advanceBlock (randomExponentialProcess_ 200) >>>+ returnBlock prof >>>+ busy+ busy = terminateBlock+ + students = streamGeneratorBlock studentStream 0+ studentChain =+ queueBlock line 1 >>>+ seizeBlock prof >>>+ departBlock line 1 >>>+ advanceBlock (randomExponentialProcess_ 1000) >>>+ letGo+ letGo =+ releaseBlock prof >>>+ terminateBlock+ add dt0 =+ let dt = maybe 0 id dt0+ in advanceBlock (holdProcess (dt + 300)) >>>+ transferBlock letGo++ runProcessInStartTime $+ runGeneratorBlock phoneCalls phoneCallChain ++ runProcessInStartTime $+ runGeneratorBlock students studentChain ++ runEventInStartTime $+ enqueueEvent 100000 $+ do Q.resetQueue line+ resetFacility prof+ + return $+ results+ [resultSource "line" "Line" line,+ resultSource "prof" "Prof" prof]
+ examples/GPSSExample7-26/README view
@@ -0,0 +1,2 @@++Here is an example of the GPSS model. You need to have aivika-gpss installed on your computer.
+ examples/GPSSExample7-31/Experiment.hs view
@@ -0,0 +1,69 @@++{-# LANGUAGE FlexibleContexts #-}++module Experiment (experiment, generators) where++import Data.Monoid++import Control.Arrow++import Simulation.Aivika+import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart++import qualified Simulation.Aivika.Results.Transform as T+import qualified Simulation.Aivika.GPSS.Results.Transform as GpssT++-- | The simulation specs.+specs = Specs { spcStartTime = 0.0,+ spcStopTime = 20000.0,+ spcDT = 10.0,+ spcMethod = RungeKutta4,+ spcGeneratorType = SimpleGenerator }++-- | The experiment.+experiment :: Experiment+experiment =+ defaultExperiment {+ experimentSpecs = specs,+ experimentRunCount = 100,+ -- experimentRunCount = 10,+ experimentTitle = "The GPSS module 7.31" }++worker = GpssT.Facility $ resultByName "workr"+workerUtilCount = GpssT.facilityUtilisationCount worker+workerUtilCountStats = T.tr $ GpssT.facilityUtilisationCountStats worker+workerHoldingTime = T.tr $ GpssT.facilityHoldingTime worker++tatym = resultByName "stats"++statsView title series =+ defaultFinalStatsView {+ finalStatsTitle = title,+ finalStatsSeries = series+ }++chartView title series =+ defaultDeviationChartView {+ deviationChartTitle = title,+ deviationChartRightYSeries = series+ }++generators :: ChartRendering r => [WebPageGenerator r]+generators =+ [outputView defaultExperimentSpecsView,+ outputView defaultInfoView,+ outputView $ statsView "Worker Utilisation (WORKR)" $+ workerUtilCount <>+ workerUtilCountStats,+ outputView $ chartView "Worker Utilisation (WORKR)" $+ workerUtilCount <> + workerUtilCountStats,+ outputView $ statsView "Worker Holding Time (WORKR)"+ workerHoldingTime,+ outputView $ chartView "Worker Holding Time (WORKR)"+ workerHoldingTime,+ outputView $ statsView "Processing Time (TATYM)" $+ tatym,+ outputView $ chartView "Processing Time (TATYM)" $+ tatym]
+ examples/GPSSExample7-31/MainUsingCairo.hs view
@@ -0,0 +1,13 @@++-- To run, package aivika-experiment-cairo must be installed.++import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart+import Simulation.Aivika.Experiment.Chart.Backend.Cairo++import Graphics.Rendering.Chart.Backend.Cairo++import Model+import Experiment++main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
+ examples/GPSSExample7-31/MainUsingDiagrams.hs view
@@ -0,0 +1,16 @@++-- To run, package aivika-experiment-diagrams must be installed.++import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart+import Simulation.Aivika.Experiment.Chart.Backend.Diagrams++import Graphics.Rendering.Chart.Backend.Diagrams++import Model+import Experiment++main = + do fonts <- loadCommonFonts+ let renderer = DiagramsRenderer SVG (return fonts)+ runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model
+ examples/GPSSExample7-31/Model.hs view
@@ -0,0 +1,83 @@++{-+TATYM TABLE M1,450,20,20++ GENERATE ,,,1+Back1 MARK+ SEIZE WORKR+ ADVANCE 8,3+ SPLIT 1,Back1+ RELEASE WORKR+ PRIORITY 1+ GATHER 24++ SEIZE WORKR+ ADVANCE 16,3+ RELEASE WORKR+ ASSEMBLE 12+ TABULATE TATYM+ TERMINATE++ GENERATE 100000+ TERMINATE 1++ START 1+ -}++module Model (model) where++import Prelude hiding (id)++import Control.Category+import Control.Monad.Trans++import Data.Maybe++import Simulation.Aivika+import Simulation.Aivika.GPSS++model :: Simulation Results+model =+ do workr <- runEventInStartTime newFacility+ stats <- newRef emptySamplingStats++ let bottleStream = takeStream 1 $+ randomUniformStream 0 0++ let bottles = streamGeneratorBlock bottleStream 0+ bottleChain =+ Block (\a ->+ do t <- liftDynamics time+ return $ assignTransactValue a (const t)) >>>+ seizeBlock workr >>>+ advanceBlock (randomUniformProcess_ (8 - 3) (8 + 3)) >>>+ splitBlock [bottleChain] >>>+ releaseBlock workr >>>+ priorityBlock 1 >>>+ gatherBlock 24 >>>+ + seizeBlock workr >>>+ advanceBlock (randomUniformProcess_ (16 - 3) (16 + 3)) >>>+ releaseBlock workr >>>+ assembleBlock 12 >>>+ Block (\a ->+ do t <- liftDynamics time+ let t0 = transactValue a+ liftEvent $+ modifyRef stats $+ addSamplingStats (t - t0)+ return a) >>>+ terminateBlock++ runProcessInStartTime $+ runGeneratorBlock bottles bottleChain++ runEventInStartTime $+ enqueueEvent 5000 $+ do resetFacility workr+ writeRef stats emptySamplingStats + + return $+ results+ [resultSource "workr" "WORKR" workr,+ resultSource "stats" "TATYM" stats]
+ examples/GPSSExample7-31/README view
@@ -0,0 +1,2 @@++Here is an example of the GPSS model. You need to have aivika-gpss installed on your computer.
examples/InspectionAdjustmentStations/Experiment.hs view
@@ -43,14 +43,14 @@ resultProcessingFactor :: ResultTransform resultProcessingFactor =- (T.tr $ T.serverProcessingFactor inspectionStations) <>- (T.tr $ T.serverProcessingFactor adjustmentStations)+ (T.serverProcessingFactor inspectionStations) <>+ (T.serverProcessingFactor adjustmentStations) -inspectionQueueCount = T.tr $ T.queueCount inspectionQueue+inspectionQueueCount = T.queueCount inspectionQueue inspectionQueueCountStats = T.tr $ T.queueCountStats inspectionQueue inspectionWaitTime = T.tr $ T.queueWaitTime inspectionQueue -adjustmentQueueCount = T.tr $ T.queueCount adjustmentQueue+adjustmentQueueCount = T.queueCount adjustmentQueue adjustmentQueueCountStats = T.tr $ T.queueCountStats adjustmentQueue adjustmentWaitTime = T.tr $ T.queueWaitTime adjustmentQueue
examples/InspectionAdjustmentStations/MainUsingCairo.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-cairo must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Cairo import Graphics.Rendering.Chart.Backend.Cairo@@ -9,4 +10,4 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model+main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
examples/InspectionAdjustmentStations/MainUsingDiagrams.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-diagrams must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Diagrams import Graphics.Rendering.Chart.Backend.Diagrams@@ -9,4 +10,7 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model+main = + do fonts <- loadCommonFonts+ let renderer = DiagramsRenderer SVG (return fonts)+ runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model
examples/InventorySystem/Experiment.hs view
@@ -28,16 +28,15 @@ experimentTitle = "Inventory System with Lost Sales and Backorders" } radio = T.Resource $ resultByName "radio"-radioCount = T.tr $ T.resourceCount radio+radioCount = T.resourceCount radio radioCountStats = T.tr $ T.resourceCountStats radio invPos = T.TimingCounter $ resultByName "invPos"-invPosValue = T.tr $ T.timingCounterValue invPos+invPosValue = T.timingCounterValue invPos invPosStats = T.tr $ T.timingCounterStats invPos tbLostSales = resultByName "tbLostSales" tbLostSalesCount = - T.tr $ T.samplingStatsCount $ T.SamplingStats tbLostSales
examples/InventorySystem/MainUsingCairo.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-cairo must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Cairo import Graphics.Rendering.Chart.Backend.Cairo@@ -9,4 +10,4 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model+main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
examples/InventorySystem/MainUsingDiagrams.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-diagrams must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Diagrams import Graphics.Rendering.Chart.Backend.Diagrams@@ -9,4 +10,7 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model+main = + do fonts <- loadCommonFonts+ let renderer = DiagramsRenderer SVG (return fonts)+ runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model
examples/LinearArray/MainUsingCairo.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-cairo must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Cairo import Graphics.Rendering.Chart.Backend.Cairo@@ -9,4 +10,4 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) (model 51)+main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) (model 51)
examples/LinearArray/MainUsingDiagrams.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-diagrams must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Diagrams import Graphics.Rendering.Chart.Backend.Diagrams@@ -9,4 +10,7 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) (model 51)+main = + do fonts <- loadCommonFonts+ let renderer = DiagramsRenderer SVG (return fonts)+ runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) (model 51)
examples/MachRep3/MainUsingCairo.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-cairo must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Cairo import Graphics.Rendering.Chart.Backend.Cairo@@ -9,4 +10,4 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model+main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
examples/MachRep3/MainUsingDiagrams.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-diagrams must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Diagrams import Graphics.Rendering.Chart.Backend.Diagrams@@ -9,4 +10,7 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model+main = + do fonts <- loadCommonFonts+ let renderer = DiagramsRenderer SVG (return fonts)+ runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model
examples/MachineBreakdowns/Experiment.hs view
@@ -33,7 +33,7 @@ machineProcessing = T.Server $ resultByName "machineProcessing" jobsCompletedCount =- T.tr $ T.samplingStatsCount $+ T.samplingStatsCount $ T.arrivalProcessingTime jobsCompleted processingTime :: ResultTransform@@ -46,7 +46,7 @@ queueCount :: ResultTransform queueCount =- T.tr $ T.queueCount inputQueue+ T.queueCount inputQueue queueCountStats :: ResultTransform queueCountStats =@@ -54,7 +54,7 @@ processingFactor :: ResultTransform processingFactor =- T.tr $ T.serverProcessingFactor machineProcessing+ T.serverProcessingFactor machineProcessing generators :: ChartRendering r => [WebPageGenerator r] generators =
examples/MachineBreakdowns/MainUsingCairo.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-cairo must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Cairo import Graphics.Rendering.Chart.Backend.Cairo@@ -9,4 +10,4 @@ import Model import Experiment -main = runExperimentParallel experiment generators (WebPageRenderer $ CairoRenderer PNG) model+main = runExperimentParallel experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
examples/MachineBreakdowns/MainUsingDiagrams.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-diagrams must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Diagrams import Graphics.Rendering.Chart.Backend.Diagrams@@ -9,4 +10,7 @@ import Model import Experiment -main = runExperimentParallel experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model+main = + do fonts <- loadCommonFonts+ let renderer = DiagramsRenderer SVG (return fonts)+ runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model
examples/PERT/Experiment.hs view
@@ -42,7 +42,6 @@ T.ArrivalTimer series completionTimeMean series = - T.tr $ T.samplingStatsMean $ T.arrivalProcessingTime $ T.ArrivalTimer series
examples/PERT/MainUsingCairo.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-cairo must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Cairo import Graphics.Rendering.Chart.Backend.Cairo@@ -9,4 +10,4 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model+main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
examples/PERT/MainUsingDiagrams.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-diagrams must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Diagrams import Graphics.Rendering.Chart.Backend.Diagrams@@ -9,4 +10,7 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model+main = + do fonts <- loadCommonFonts+ let renderer = DiagramsRenderer SVG (return fonts)+ runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model
examples/PortOperations/Experiment.hs view
@@ -32,14 +32,14 @@ berth = T.Resource $ resultByName "berth" berthCountStats = T.tr $ T.resourceCountStats berth berthUtilisationCount = T.tr $ T.resourceUtilisationCountStats berth-berthQueueCount = T.tr $ T.resourceQueueCount berth+berthQueueCount = T.resourceQueueCount berth berthQueueCountStats = T.tr $ T.resourceQueueCountStats berth berthWaitTime = T.tr $ T.resourceWaitTime berth tug = T.Resource $ resultByName "tug" tugCountStats = T.tr $ T.resourceCountStats tug tugUtilisationCount = T.tr $ T.resourceUtilisationCountStats tug-tugQueueCount = T.tr $ T.resourceQueueCount tug+tugQueueCount = T.resourceQueueCount tug tugQueueCountStats = T.tr $ T.resourceQueueCountStats tug tugWaitTime = T.tr $ T.resourceWaitTime tug
examples/PortOperations/MainUsingCairo.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-cairo must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Cairo import Graphics.Rendering.Chart.Backend.Cairo@@ -9,4 +10,4 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model+main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
examples/PortOperations/MainUsingDiagrams.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-diagrams must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Diagrams import Graphics.Rendering.Chart.Backend.Diagrams@@ -9,4 +10,7 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model+main = + do fonts <- loadCommonFonts+ let renderer = DiagramsRenderer SVG (return fonts)+ runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model
examples/QuarryOperations/Experiment.hs view
@@ -32,18 +32,18 @@ shovelActvty = T.Activity $ resultByName "shovelActvty" crusherActvty = T.Activity $ resultByName "crusherActvty" -shovelQueueCount = T.tr $ T.queueCount shovelQueue+shovelQueueCount = T.queueCount shovelQueue shovelQueueCountStats = T.tr $ T.queueCountStats shovelQueue shovelQueueWaitTime = T.tr $ T.queueWaitTime shovelQueue-shovelQueueRate = T.tr $ T.queueRate shovelQueue+shovelQueueRate = T.queueRate shovelQueue -crusherQueueCount = T.tr $ T.queueCount crusherQueue+crusherQueueCount = T.queueCount crusherQueue crusherQueueCountStats = T.tr $ T.queueCountStats crusherQueue crusherQueueWaitTime = T.tr $ T.queueWaitTime crusherQueue-crusherQueueRate = T.tr $ T.queueRate crusherQueue+crusherQueueRate = T.queueRate crusherQueue -shovelUtilisationFactor = T.tr $ T.activityUtilisationFactor shovelActvty-crusherUtilisationFactor = T.tr $ T.activityUtilisationFactor crusherActvty+shovelUtilisationFactor = T.activityUtilisationFactor shovelActvty+crusherUtilisationFactor = T.activityUtilisationFactor crusherActvty subgenerators1 :: ChartRendering r => String -> ResultTransform -> [WebPageGenerator r] subgenerators1 title series =
examples/QuarryOperations/MainUsingCairo.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-cairo must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Cairo import Graphics.Rendering.Chart.Backend.Cairo@@ -9,4 +10,4 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model+main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
examples/QuarryOperations/MainUsingDiagrams.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-diagrams must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Diagrams import Graphics.Rendering.Chart.Backend.Diagrams@@ -9,4 +10,7 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model+main = + do fonts <- loadCommonFonts+ let renderer = DiagramsRenderer SVG (return fonts)+ runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model
examples/SingleLaneTraffic/Experiment.hs view
@@ -31,7 +31,7 @@ greenLightTime = resultByName "greenLightTime" start = T.Resource $ resultByName "start"-startQueueCount = T.tr $ T.resourceQueueCount start+startQueueCount = T.resourceQueueCount start startQueueCountStats = T.tr $ T.resourceQueueCountStats start startWaitTime = T.tr $ T.resourceWaitTime start startCountStats = T.tr $ T.resourceCountStats start
examples/SingleLaneTraffic/MainUsingCairo.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-cairo must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Cairo import Graphics.Rendering.Chart.Backend.Cairo@@ -10,6 +11,6 @@ import Experiment main = do- runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model1- runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model2- runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model3+ runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model1+ runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model2+ runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model3
examples/SingleLaneTraffic/MainUsingDiagrams.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-diagrams must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Diagrams import Graphics.Rendering.Chart.Backend.Diagrams@@ -10,6 +11,8 @@ import Experiment main = do- runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model1- runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model2- runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model3+ fonts <- loadCommonFonts+ let renderer = DiagramsRenderer SVG (return fonts)+ runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model1+ runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model2+ runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model3
examples/TruckHaulingSituation/Experiment.hs view
@@ -30,23 +30,23 @@ experimentTitle = "A Truck Hauling Situation" } loadQueue = T.Queue $ resultByName "loadQueue"-loadQueueCount = T.tr $ T.queueCount loadQueue+loadQueueCount = T.queueCount loadQueue loadQueueCountStats = T.tr $ T.queueCountStats loadQueue loadWaitTime = T.tr $ T.queueWaitTime loadQueue truckQueue = T.Queue $ resultByName "truckQueue"-truckQueueCount = T.tr $ T.queueCount truckQueue+truckQueueCount = T.queueCount truckQueue truckQueueCountStats = T.tr $ T.queueCountStats truckQueue truckWaitTime = T.tr $ T.queueWaitTime truckQueue loaderQueue = T.Queue $ resultByName "loaderQueue"-loaderQueueCount = T.tr $ T.queueCount loaderQueue+loaderQueueCount = T.queueCount loaderQueue loaderQueueCountStats = T.tr $ T.queueCountStats loaderQueue loaderWaitTime = T.tr $ T.queueWaitTime loaderQueue loaderOps = T.Operation $ resultByName "loaderOps" loaderUtilisationTime = T.tr $ T.operationUtilisationTime loaderOps-loaderUtilisationFactor = T.tr $ T.operationUtilisationFactor loaderOps+loaderUtilisationFactor = T.operationUtilisationFactor loaderOps statsView title series = defaultFinalStatsView {
examples/TruckHaulingSituation/MainUsingCairo.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-cairo must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Cairo import Graphics.Rendering.Chart.Backend.Cairo@@ -9,4 +10,4 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model+main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
examples/TruckHaulingSituation/MainUsingDiagrams.hs view
@@ -2,6 +2,7 @@ -- To run, package aivika-experiment-diagrams must be installed. import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart import Simulation.Aivika.Experiment.Chart.Backend.Diagrams import Graphics.Rendering.Chart.Backend.Diagrams@@ -9,4 +10,7 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG loadCommonFonts) model+main = + do fonts <- loadCommonFonts+ let renderer = DiagramsRenderer SVG (return fonts)+ runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model