{-|
Module      : TimeSeries.Plot
Copyright   : (C) 2013 Parallel Scientific Labs, LLC
License     : GPL-2
Stability   : experimental
Portability : portable

Format conversion for plotting data.

-}
module TimeSeries.Plot where

import TimeSeries.Utils

-- | Read correlated data from sample csv file and convert to format
-- fed to \"tplot\" from timeplot package.
--
-- E.g. Plot to \"out.png\":
--
-- > $ tplot -if rho09.tmp -o out.png -or 1920x1080 -tf '%s' -dk lines
--
rho09_100000 :: IO ()
rho09_100000 = rho09 "data/correlated-walks_rho09_n100000_k5.csv"

-- | Like 'rho09_100000', but using fewer input data.
rho09_10000 :: IO ()
rho09_10000 = rho09 "data/correlated-walks_rho09_n10000_k5.csv"

-- | Actual work for plotting.
rho09 :: FilePath -> IO ()
rho09 path = do
  csvData <- readFile path
  let csvValues = tail $ lines csvData
      f [t,v1,v2,v3,v4,v5] =
        let t' = filter (/= '"') t
        in  unlines
              [ unwords [t', "=V1", v1]
              , unwords [t', "=V2", v2]
              , unwords [t', "=V3", v3]
              , unwords [t', "=V4", v4]
              , unwords [t', "=V5", v5]
              ]
      f _ = error "malformed input"
      res = unlines . map (f . comma) $ csvValues
  writeFile "rho09.tmp" res