packages feed

aivika-experiment-chart 5.0 → 5.1

raw patch · 35 files changed

+114/−61 lines, 35 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: [deviationChartGridSize] :: DeviationChartView -> Int
+ Simulation.Aivika.Experiment.Chart.Types: renderingLayout :: ChartRendering r => r -> Layout Double Double -> Layout Double Double
+ Simulation.Aivika.Experiment.Chart.Types: renderingLayoutLR :: ChartRendering r => r -> LayoutLR Double Double Double -> LayoutLR Double Double Double
- Simulation.Aivika.Experiment.Chart.DeviationChartView: DeviationChartView :: String -> String -> Int -> Int -> ExperimentFilePath -> ResultTransform -> ResultTransform -> ResultTransform -> String -> [PlotLines Double Double -> PlotLines Double Double] -> [PlotFillBetween Double Double -> PlotFillBetween Double Double] -> (LayoutAxis Double -> LayoutAxis Double) -> (LayoutLR Double Double Double -> LayoutLR Double Double Double) -> DeviationChartView
+ Simulation.Aivika.Experiment.Chart.DeviationChartView: DeviationChartView :: String -> String -> Int -> Int -> Int -> ExperimentFilePath -> ResultTransform -> ResultTransform -> ResultTransform -> String -> [PlotLines Double Double -> PlotLines Double Double] -> [PlotFillBetween Double Double -> PlotFillBetween Double Double] -> (LayoutAxis Double -> LayoutAxis Double) -> (LayoutLR Double Double Double -> LayoutLR Double Double Double) -> DeviationChartView

Files

CHANGELOG.md view
@@ -1,4 +1,13 @@ +Version 5.1+-----++* Changed the default chart settings.++* Using the result source titles instead of coding names.++* The Deviation chart does not depend on the integration time step anymore.+ Version 5.0 ----- 
Simulation/Aivika/Experiment/Chart/DeviationChartView.hs view
@@ -42,7 +42,7 @@ import Simulation.Aivika.Experiment.Chart.Types import Simulation.Aivika.Experiment.Chart.Utils (colourisePlotLines, colourisePlotFillBetween) --- | Defines the 'View' that plots the deviation chart.+-- | Defines the 'View' that plots the deviation chart in time points by the specified grid. data DeviationChartView =   DeviationChartView { deviationChartTitle       :: String,                        -- ^ This is a title used in HTML.@@ -52,6 +52,8 @@                        -- ^ The width of the chart.                        deviationChartHeight      :: Int,                        -- ^ The height of the chart.+                       deviationChartGridSize    :: Int,+                       -- ^ The size of the grid, where the series data are collected.                        deviationChartFileName    :: ExperimentFilePath,                        -- ^ It defines the file name with optional extension for each image to be saved.                        -- It may include special variable @$TITLE@.@@ -111,6 +113,7 @@                        deviationChartDescription = "It shows the Deviation chart by rule 3-sigma.",                        deviationChartWidth       = 640,                        deviationChartHeight      = 480,+                       deviationChartGridSize    = 2 * 640,                        deviationChartFileName    = UniqueFilePath "DeviationChart",                        deviationChartTransform   = id,                        deviationChartLeftYSeries  = mempty, @@ -176,11 +179,15 @@                                       deviationChartResults    = r }         -- | Create new chart results.-newDeviationChartResults :: [Either String String] -> Experiment -> IO DeviationChartResults-newDeviationChartResults names exp =-  do let specs = experimentSpecs exp-         bnds  = integIterationBnds specs-     times <- liftIO $ newListArray bnds (integTimes specs)+newDeviationChartResults :: DeviationChartViewState r -> [Either String String] -> IO DeviationChartResults+newDeviationChartResults st names =+  do let exp   = deviationChartExperiment st+         view  = deviationChartView st+         size  = deviationChartGridSize view+         specs = experimentSpecs exp+         grid  = timeGrid specs size+         bnds  = (0, 1 + length grid)+     times <- liftIO $ newListArray bnds $ map snd grid      stats <- forM names $ \_ ->         liftIO $ newArray bnds emptySamplingStats >>= newMVar      return DeviationChartResults { deviationChartTimes = times,@@ -191,7 +198,7 @@ requireDeviationChartResults :: DeviationChartViewState r -> [Either String String] -> IO DeviationChartResults requireDeviationChartResults st names =   maybePutMVar (deviationChartResults st)-  (newDeviationChartResults names (deviationChartExperiment st)) $ \results ->+  (newDeviationChartResults st names) $ \results ->   if (names /= deviationChartNames results)   then error "Series with different names are returned for different runs: requireDeviationChartResults"   else return results@@ -200,6 +207,9 @@ simulateDeviationChart :: DeviationChartViewState r -> ExperimentData -> Composite () simulateDeviationChart st expdata =   do let view    = deviationChartView st+         loc     = localisePathResultTitle $+                   experimentLocalisation $+                   deviationChartExperiment st          rs1     = deviationChartLeftYSeries view $                    deviationChartTransform view $                    experimentResults expdata@@ -209,14 +219,15 @@          exts1   = resultsToDoubleStatsEitherValues rs1          exts2   = resultsToDoubleStatsEitherValues rs2          exts    = exts1 ++ exts2-         names1  = map resultValueName exts1-         names2  = map resultValueName exts2+         names1  = map (loc . resultValueIdPath) exts1+         names2  = map (loc . resultValueIdPath) exts2          names   = map Left names1 ++ map Right names2-         signals = experimentPredefinedSignals expdata-         signal  = resultSignalInIntegTimes signals+     signal <- liftEvent $+               newSignalInTimeGrid $+               deviationChartGridSize view      hs <- forM exts $ \ext ->            newSignalHistory $-           flip mapSignalM signal $ \t ->+           flip mapSignalM signal $ \i ->            resultValueData ext      disposableComposite $        DisposableEvent $@@ -303,7 +314,9 @@                   if null $ rights ps                   then layoutlr_right_axis_visibility .~ AxisVisibility False False False                   else id-                chart = plotLayout . updateLeftAxis . updateRightAxis $+                chart = plotLayout .+                        renderingLayoutLR renderer .+                        updateLeftAxis . updateRightAxis $                         layoutlr_x_axis .~ axis $                         layoutlr_title .~ plotTitle' $                         layoutlr_plots .~ ps $
Simulation/Aivika/Experiment/Chart/FinalHistogramView.hs view
@@ -186,11 +186,14 @@ simulateFinalHistogram :: FinalHistogramViewState r -> ExperimentData -> Composite () simulateFinalHistogram st expdata =   do let view    = finalHistogramView st+         loc     = localisePathResultTitle $+                   experimentLocalisation $+                   finalHistogramExperiment st          rs      = finalHistogramSeries view $                    finalHistogramTransform view $                    experimentResults expdata          exts    = resultsToDoubleListValues rs-         names   = map resultValueName exts+         names   = map (loc . resultValueIdPath) exts          signals = experimentPredefinedSignals expdata          signal  = filterSignalM (const predicate) $                    resultSignalInStopTime signals@@ -246,7 +249,9 @@                                 layout_right_axis_visibility .~ v $                                 l                   else id-                chart = layout . updateAxes $+                chart = layout .+                        renderingLayout renderer .+                        updateAxes $                         layout_title .~ plotTitle' $                         layout_plots .~ [p] $                         def
Simulation/Aivika/Experiment/Chart/FinalXYChartView.hs view
@@ -210,6 +210,9 @@ simulateFinalXYChart :: FinalXYChartViewState r -> ExperimentData -> Composite () simulateFinalXYChart st expdata =   do let view    = finalXYChartView st+         loc     = localisePathResultTitle $+                   experimentLocalisation $+                   finalXYChartExperiment st          rs0     = finalXYChartXSeries view $                    finalXYChartTransform view $                    experimentResults expdata@@ -226,9 +229,9 @@          exts1   = resultsToDoubleValues rs1          exts2   = resultsToDoubleValues rs2          exts    = exts1 ++ exts2-         name0   = resultValueName ext0-         names1  = map resultValueName exts1-         names2  = map resultValueName exts2+         name0   = loc $ resultValueIdPath ext0+         names1  = map (loc . resultValueIdPath) exts1+         names2  = map (loc . resultValueIdPath) exts2          names   = map Left names1 ++ map Right names2          signals = experimentPredefinedSignals expdata          signal  = filterSignalM (const predicate) $@@ -296,7 +299,9 @@                   if null $ rights ps                   then layoutlr_right_axis_visibility .~ AxisVisibility False False False                   else id-                chart = plotLayout . updateLeftAxis . updateRightAxis $+                chart = plotLayout .+                        renderingLayoutLR renderer .+                        updateLeftAxis . updateRightAxis $                         layoutlr_x_axis .~ axis $                         layoutlr_title .~ plotTitle' $                         layoutlr_plots .~ ps $
Simulation/Aivika/Experiment/Chart/HistogramView.hs view
@@ -180,11 +180,14 @@ simulateHistogram :: ChartRendering r => HistogramViewState r -> ExperimentData -> Composite () simulateHistogram st expdata =   do let view    = histogramView st+         loc     = localisePathResultTitle $+                   experimentLocalisation $+                   histogramExperiment st          rs      = histogramSeries view $                    histogramTransform view $                    experimentResults expdata          exts    = resultsToDoubleListValues rs-         names   = map resultValueName exts+         names   = map (loc . resultValueIdPath) exts          signals = experimentPredefinedSignals expdata          n = experimentRunCount $ histogramExperiment st          build   = histogramBuild view@@ -233,7 +236,9 @@                               layout_right_axis_visibility .~ v $                               l                 else id-              chart = layout . updateAxes $+              chart = layout .+                      renderingLayout renderer .+                      updateAxes $                       layout_title .~ runPlotTitle' $                       layout_plots .~ [p] $                       def
Simulation/Aivika/Experiment/Chart/TimeSeriesView.hs view
@@ -185,6 +185,9 @@ simulateTimeSeries :: ChartRendering r => TimeSeriesViewState r -> ExperimentData -> Composite () simulateTimeSeries st expdata =   do let view    = timeSeriesView st+         loc     = localisePathResultTitle $+                   experimentLocalisation $+                   timeSeriesExperiment st          rs1     = timeSeriesLeftYSeries view $                    timeSeriesTransform view $                    experimentResults expdata@@ -241,7 +244,7 @@                           toPlot $                           plotLines $                           plot_lines_values .~ filterPlotLinesValues (zip (elems ts) (elems xs)) $-                          plot_lines_title .~ resultValueName ext $+                          plot_lines_title .~ (loc $ resultValueIdPath ext) $                           def                    return (ps, drop (length hs) plotLineTails)           (ps1, plotLineTails) <- plots hs1 exts1 (tails plotLines)@@ -260,7 +263,9 @@                 if null ps2                 then layoutlr_right_axis_visibility .~ AxisVisibility False False False                 else id-              chart = plotLayout . updateLeftAxis . updateRightAxis $+              chart = plotLayout .+                      renderingLayoutLR renderer .+                      updateLeftAxis . updateRightAxis $                       layoutlr_x_axis .~ axis $                       layoutlr_title .~ runPlotTitle' $                       layoutlr_plots .~ ps' $
Simulation/Aivika/Experiment/Chart/Types.hs view
@@ -26,3 +26,9 @@   -- | Generate an image file with the specified path for the given chart.   -- The width and height are passed in the second argument to the function.   renderChart :: r -> (Int, Int) -> FilePath -> Renderable c -> IO (PickFn c)++  -- | Return the rendering layout.+  renderingLayoutLR :: r -> LayoutLR Double Double Double -> LayoutLR Double Double Double++  -- | Return the rendering layout.+  renderingLayout :: r -> Layout Double Double -> Layout Double Double
Simulation/Aivika/Experiment/Chart/XYChartView.hs view
@@ -194,6 +194,9 @@ simulateXYChart :: ChartRendering r => XYChartViewState r -> ExperimentData -> Composite () simulateXYChart st expdata =   do let view    = xyChartView st+         loc     = localisePathResultTitle $+                   experimentLocalisation $+                   xyChartExperiment st          rs0     = xyChartXSeries view $                    xyChartTransform view $                    experimentResults expdata@@ -261,7 +264,7 @@                           toPlot $                           plotLines $                           plot_lines_values .~ filterPlotLinesValues (elems zs) $-                          plot_lines_title .~ resultValueName ext $+                          plot_lines_title .~ (loc $ resultValueIdPath ext) $                           def                    return (ps, drop (length hs) plotLineTails)                (ps1, plotLineTails) <- plots hs1 exts1 (tails plotLines)@@ -270,7 +273,7 @@               ps2' = map Right ps2               ps'  = ps1' ++ ps2'               axis = plotBottomAxis $-                      laxis_title .~ resultValueName ext0 $+                      laxis_title .~ (loc $ resultValueIdPath ext0) $                       def               updateLeftAxis =                 if null ps1@@ -280,7 +283,9 @@                 if null ps2                 then layoutlr_right_axis_visibility .~ AxisVisibility False False False                 else id-              chart = plotLayout . updateLeftAxis . updateRightAxis $+              chart = plotLayout .+                      renderingLayoutLR renderer .+                      updateLeftAxis . updateRightAxis $                       layoutlr_x_axis .~ axis $                       layoutlr_title .~ runPlotTitle' $                       layoutlr_plots .~ ps' $
aivika-experiment-chart.cabal view
@@ -1,12 +1,12 @@ name:            aivika-experiment-chart-version:         5.0+version:         5.1 synopsis:        Simulation experiments with charting for the Aivika library description:     This package complements the aivika [1] and aivika-experiment [2] packages with     charting capabilites. Now the simulation results can be represented     as charts.     .-    Nevertheless, to plot the charts, you hould use one of the rendering backends+    Nevertheless, to plot the charts, you should use one of the rendering backends     provided by packages aivika-experiment-cairo [3] or aivika-experiment-diagrams [4].     While the Cairo-based backend suits mostly to Linux and partially OS X, the Diagrams-based      backend is mainly destined for MS Windows, although it should work on Linux @@ -145,8 +145,8 @@                      lens >= 3.9,                      data-default-class >= 0.0.1,                      colour >= 2.3.3,-                     aivika >= 5.1,-                     aivika-experiment >= 5.0+                     aivika >= 5.3,+                     aivika-experiment >= 5.1      extensions:      MultiParamTypeClasses 
examples/BassDiffusion/MainUsingCairo.hs view
@@ -10,4 +10,4 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model+main = runExperimentParallel experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
examples/BassDiffusion/MainUsingDiagrams.hs view
@@ -13,4 +13,4 @@ main =    do fonts <- loadCommonFonts      let renderer = DiagramsRenderer SVG (return fonts)-     runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model+     runExperimentParallel experiment generators (WebPageRenderer renderer experimentFilePath) model
examples/BassDiffusion/Model.hs view
@@ -101,6 +101,6 @@      return $         results        [resultSource -        "potentialAdopters" "potential adopters" potentialAdopters,+        "potentialAdopters" "potential adopters of the product" potentialAdopters,         resultSource -        "adopters" "adopters" adopters]+        "adopters" "adopters of the product" adopters]
examples/Furnace/MainUsingCairo.hs view
@@ -10,4 +10,4 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model+main = runExperimentParallel experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
examples/Furnace/MainUsingDiagrams.hs view
@@ -13,4 +13,4 @@ main =    do fonts <- loadCommonFonts      let renderer = DiagramsRenderer SVG (return fonts)-     runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model+     runExperimentParallel experiment generators (WebPageRenderer renderer experimentFilePath) model
examples/GPSSExample7-26/MainUsingCairo.hs view
@@ -10,4 +10,4 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model+main = runExperimentParallel experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
examples/GPSSExample7-26/MainUsingDiagrams.hs view
@@ -13,4 +13,4 @@ main =    do fonts <- loadCommonFonts      let renderer = DiagramsRenderer SVG (return fonts)-     runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model+     runExperimentParallel experiment generators (WebPageRenderer renderer experimentFilePath) model
examples/GPSSExample7-31/MainUsingCairo.hs view
@@ -10,4 +10,4 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model+main = runExperimentParallel experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
examples/GPSSExample7-31/MainUsingDiagrams.hs view
@@ -13,4 +13,4 @@ main =    do fonts <- loadCommonFonts      let renderer = DiagramsRenderer SVG (return fonts)-     runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model+     runExperimentParallel experiment generators (WebPageRenderer renderer experimentFilePath) model
examples/InspectionAdjustmentStations/MainUsingCairo.hs view
@@ -10,4 +10,4 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model+main = runExperimentParallel experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
examples/InspectionAdjustmentStations/MainUsingDiagrams.hs view
@@ -13,4 +13,4 @@ main =    do fonts <- loadCommonFonts      let renderer = DiagramsRenderer SVG (return fonts)-     runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model+     runExperimentParallel experiment generators (WebPageRenderer renderer experimentFilePath) model
examples/InventorySystem/MainUsingCairo.hs view
@@ -10,4 +10,4 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model+main = runExperimentParallel experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
examples/InventorySystem/MainUsingDiagrams.hs view
@@ -13,4 +13,4 @@ main =    do fonts <- loadCommonFonts      let renderer = DiagramsRenderer SVG (return fonts)-     runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model+     runExperimentParallel experiment generators (WebPageRenderer renderer experimentFilePath) model
examples/MachRep3/MainUsingCairo.hs view
@@ -10,4 +10,4 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model+main = runExperimentParallel experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
examples/MachRep3/MainUsingDiagrams.hs view
@@ -13,4 +13,4 @@ main =    do fonts <- loadCommonFonts      let renderer = DiagramsRenderer SVG (return fonts)-     runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model+     runExperimentParallel experiment generators (WebPageRenderer renderer experimentFilePath) model
examples/MachineBreakdowns/MainUsingDiagrams.hs view
@@ -13,4 +13,4 @@ main =    do fonts <- loadCommonFonts      let renderer = DiagramsRenderer SVG (return fonts)-     runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model+     runExperimentParallel experiment generators (WebPageRenderer renderer experimentFilePath) model
examples/PERT/MainUsingCairo.hs view
@@ -10,4 +10,4 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model+main = runExperimentParallel experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
examples/PERT/MainUsingDiagrams.hs view
@@ -13,4 +13,4 @@ main =    do fonts <- loadCommonFonts      let renderer = DiagramsRenderer SVG (return fonts)-     runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model+     runExperimentParallel experiment generators (WebPageRenderer renderer experimentFilePath) model
examples/PortOperations/MainUsingCairo.hs view
@@ -10,4 +10,4 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model+main = runExperimentParallel experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
examples/PortOperations/MainUsingDiagrams.hs view
@@ -13,4 +13,4 @@ main =    do fonts <- loadCommonFonts      let renderer = DiagramsRenderer SVG (return fonts)-     runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model+     runExperimentParallel experiment generators (WebPageRenderer renderer experimentFilePath) model
examples/QuarryOperations/MainUsingCairo.hs view
@@ -10,4 +10,4 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model+main = runExperimentParallel experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
examples/QuarryOperations/MainUsingDiagrams.hs view
@@ -13,4 +13,4 @@ main =    do fonts <- loadCommonFonts      let renderer = DiagramsRenderer SVG (return fonts)-     runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model+     runExperimentParallel experiment generators (WebPageRenderer renderer experimentFilePath) model
examples/SingleLaneTraffic/MainUsingCairo.hs view
@@ -11,6 +11,6 @@ import Experiment  main = do-  runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model1-  runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model2-  runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model3+  runExperimentParallel experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model1+  runExperimentParallel experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model2+  runExperimentParallel experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model3
examples/SingleLaneTraffic/MainUsingDiagrams.hs view
@@ -13,6 +13,6 @@ main = do   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+  runExperimentParallel experiment generators (WebPageRenderer renderer experimentFilePath) model1+  runExperimentParallel experiment generators (WebPageRenderer renderer experimentFilePath) model2+  runExperimentParallel experiment generators (WebPageRenderer renderer experimentFilePath) model3
examples/TruckHaulingSituation/MainUsingCairo.hs view
@@ -10,4 +10,4 @@ import Model import Experiment -main = runExperiment experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model+main = runExperimentParallel experiment generators (WebPageRenderer (CairoRenderer PNG) experimentFilePath) model
examples/TruckHaulingSituation/MainUsingDiagrams.hs view
@@ -13,4 +13,4 @@ main =    do fonts <- loadCommonFonts      let renderer = DiagramsRenderer SVG (return fonts)-     runExperiment experiment generators (WebPageRenderer renderer experimentFilePath) model+     runExperimentParallel experiment generators (WebPageRenderer renderer experimentFilePath) model