module Experiment (experiment, generators) where

import Data.Monoid

import Simulation.Aivika
import Simulation.Aivika.Experiment
import Simulation.Aivika.Experiment.Chart

specs = Specs { spcStartTime = 0, 
                spcStopTime = 13, 
                spcDT = 0.01,
                spcMethod = RungeKutta4,
                spcGeneratorType = SimpleGenerator }

experiment :: Experiment
experiment =
  defaultExperiment {
    experimentSpecs = specs,
    experimentRunCount = 1,
    experimentTitle = "Chemical Reaction",
    experimentDescription = "Chemical Reaction as described in " ++
                            "the 5-minute tutorial of Berkeley-Madonna" }

t = resultByName "t"
a = resultByName "a"
b = resultByName "b"
c = resultByName "c"

generators :: ChartRendering r => [WebPageGenerator r]
generators =
  [outputView defaultExperimentSpecsView,
   outputView $ defaultLastValueView {
     lastValueSeries = t <> a <> b <> c },
   outputView $ defaultTableView {
     tableSeries = t <> a <> b <> c },
   outputView $ defaultTimeSeriesView {
     timeSeriesTitle = "Time Series",
     timeSeriesLeftYSeries = a <> b <> c },
   outputView $ defaultXYChartView {
     xyChartTitle = "XYChart - 1",
     xyChartPlotTitle = "b=b(a), c=c(a)",
     xyChartXSeries = a,
     xyChartLeftYSeries = b,
     xyChartRightYSeries = c },
   outputView $ defaultXYChartView {
     xyChartTitle = "XYChart - 2",
     xyChartPlotTitle = "a=a(b), c=c(b)",
     xyChartXSeries = b,
     xyChartRightYSeries = a <> c },
   outputView $ defaultXYChartView {
     xyChartTitle = "XYChart - 3",
     xyChartPlotTitle = "a=a(c), b=b(c)",
     xyChartXSeries = c,
     xyChartLeftYSeries = b,
     xyChartRightYSeries = a } ]