never executed always true always false
    1 {-# LANGUAGE OverloadedStrings #-}
    2 {-|
    3   A colormap takes a number between 0 and 1 (inclusive) and spits out a color.
    4   The colors do not have an alpha component but one can be added with
    5   `Codec.Picture.Types.promotePixel`.
    6 -}
    7 module Reanimate.ColorMap
    8   ( turbo
    9   , viridis
   10   , magma
   11   , inferno
   12   , plasma
   13   , sinebow
   14   , parula
   15   , cividis
   16   , jet
   17   , hsv
   18   , hsvMatlab
   19   , greyscale
   20   ) where
   21 
   22 import Data.Text (Text)
   23 import Data.Vector (Vector)
   24 import qualified Data.Text as T
   25 import qualified Data.Vector as V
   26 import Codec.Picture
   27 import Data.Char
   28 import Data.Bits
   29 import qualified Data.Colour.RGBSpace.HSV as HSV
   30 import           Data.Colour.RGBSpace
   31 
   32 -- | Given a number t in the range [0,1], returns the corresponding color from
   33 --   the “turbo” color scheme by Anton Mikhailov.
   34 --
   35 --   <<docs/gifs/doc_turbo.gif>>
   36 turbo :: Double -> PixelRGB8
   37 turbo t = PixelRGB8 red green blue
   38   where
   39     red   = trunc (round (34.61 + t * (1172.33 - t * (10793.56 - t * (33300.12 - t * (38394.49 - t * 14825.05))))))
   40     green = trunc (round (23.31 + t * (557.33 + t * (1225.33 - t * (3574.96 - t * (1073.77 + t * 707.56))))))
   41     blue  = trunc (round (27.2 + t * (3211.1 - t * (15327.97 - t * (27814 - t * (22569.18 - t * 6838.66))))))
   42     trunc :: Integer -> Pixel8
   43     trunc = fromIntegral . min 255 . max 0
   44 
   45 -- | Given a number t in the range [0,1], returns the corresponding color from
   46 --   the “viridis” perceptually-uniform color scheme designed by van der Walt,
   47 --   Smith and Firing for matplotlib, represented as an RGB string.
   48 --
   49 --   <<docs/gifs/doc_viridis.gif>>
   50 viridis :: Double -> PixelRGB8
   51 viridis = ramp (colors
   52   "44015444025645045745055946075a46085c460a5d460b5e470d60470e614710634711644713\
   53   \6548146748166848176948186a481a6c481b6d481c6e481d6f481f7048207148217348237448\
   54   \2475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f\
   55   \463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142\
   56   \874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b\
   57   \518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d\
   58   \355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b\
   59   \8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a\
   60   \778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e\
   61   \25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f\
   62   \8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e\
   63   \9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a685\
   64   \22a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db2\
   65   \7d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340\
   66   \bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c765\
   67   \5ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d0\
   68   \5477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195\
   69   \d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2b\
   70   \b8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e2\
   71   \19dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8\
   72   \e621fbe723fde725")
   73 
   74 -- | Given a number t in the range [0,1], returns the corresponding color from
   75 --   the “magma” perceptually-uniform color scheme designed by van der Walt and
   76 --   Smith for matplotlib, represented as an RGB string.
   77 --
   78 --   <<docs/gifs/doc_magma.gif>>
   79 magma :: Double -> PixelRGB8
   80 magma = ramp (colors
   81   "00000401000501010601010802010902020b02020d03030f0303120404140504160605180605\
   82   \1a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d3414\
   83   \0e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e221150241253\
   84   \25125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f\
   85   \6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f\
   86   \127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980\
   87   \641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621\
   88   \817822817922827b23827c23827e24828025828125818326818426818627818827818928818b\
   89   \29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7f\
   90   \a02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb336\
   91   \7ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c8\
   92   \3e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476a\
   93   \dc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb57\
   94   \60ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf6\
   95   \6c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835f\
   96   \fb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b\
   97   \6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afe\
   98   \b47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8d\
   99   \fecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2\
  100   \a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fc\
  101   \f9bbfcfbbdfcfdbf")
  102 
  103 -- | Given a number t in the range [0,1], returns the corresponding color from
  104 --   the “inferno” perceptually-uniform color scheme designed by van der Walt
  105 --   and Smith for matplotlib, represented as an RGB string.
  106 --
  107 --   <<docs/gifs/doc_inferno.gif>>
  108 inferno :: Double -> PixelRGB8
  109 inferno = ramp (colors
  110   "00000401000501010601010802010a02020c02020e0302100403120403140504170604190705\
  111   \1b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b3716\
  112   \0b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b55\
  113   \2b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a\
  114   \67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d55\
  115   \0f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e\
  116   \6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e\
  117   \6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f246990256892\
  118   \25689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60\
  119   \a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b935\
  120   \56ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb\
  121   \4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3c\
  122   \db503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee860\
  123   \2de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2\
  124   \741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890c\
  125   \f98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca1\
  126   \08fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfb\
  127   \ba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13d\
  128   \f7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea\
  129   \69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9\
  130   \fc9dfafda1fcffa4")
  131 
  132 -- | Given a number t in the range [0,1], returns the corresponding color from
  133 --   the “plasma” perceptually-uniform color scheme designed by van der Walt and
  134 --   Smith for matplotlib, represented as an RGB string.
  135 --
  136 --   <<docs/gifs/doc_plasma.gif>>
  137 plasma :: Double -> PixelRGB8
  138 plasma = ramp (colors
  139   "0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05\
  140   \932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41\
  141   \049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a4\
  142   \5601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900\
  143   \a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d\
  144   \03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca4\
  145   \8f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a\
  146   \9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b0\
  147   \2991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786\
  148   \be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca45\
  149   \7acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5\
  150   \546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263\
  151   \e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e971\
  152   \58e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1\
  153   \814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143\
  154   \f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca3\
  155   \38fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efe\
  156   \b72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26\
  157   \fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df\
  158   \25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1\
  159   \f525f0f724f0f921")
  160 
  161 -- | Given a number t in the range [0,1], returns the corresponding color from
  162 --   the “sinebow” color scheme by Jim Bumgardner and Charlie Loyd.
  163 --
  164 --   <<docs/gifs/doc_sinebow.gif>>
  165 sinebow :: Double -> PixelRGB8
  166 sinebow t = PixelRGB8 r g b
  167   where
  168     pi_1_3 = pi / 3
  169     pi_2_3 = pi * 2 / 3
  170     x = (0.5 - t) * pi
  171     r = round $ 255 * sin x**2
  172     g = round $ 255 * sin (x+pi_1_3)**2
  173     b = round $ 255 * sin (x+pi_2_3)**2
  174 
  175 -- | Given a number t in the range [0,1], returns the corresponding color from
  176 --   the “cividis” color vision deficiency-optimized color scheme designed by
  177 --   Nuñez, Anderton, and Renslow, represented as an RGB string.
  178 --
  179 --   <<docs/gifs/doc_cividis.gif>>
  180 cividis :: Double -> PixelRGB8
  181 cividis t = PixelRGB8 red green blue
  182   where
  183     red   = trunc $ round(-4.54 - t * (35.34 - t * (2381.73 - t * (6402.7 - t * (7024.72 - t * 2710.57)))))
  184     green = trunc $ round(32.49 + t * (170.73 + t * (52.82 - t * (131.46 - t * (176.58 - t * 67.37)))))
  185     blue  = trunc $ round(81.24 + t * (442.36 - t * (2482.43 - t * (6167.24 - t * (6614.94 - t * 2475.67)))))
  186     trunc :: Integer -> Pixel8
  187     trunc = fromIntegral . min 255 . max 0
  188 
  189 -- | Jet colormap. Used to be the default in matlab. Obsolete.
  190 --
  191 --   <<docs/gifs/doc_jet.gif>>
  192 jet :: Double -> PixelRGB8
  193 jet t = PixelRGB8 red green blue
  194   where
  195     red   = trunc $ min (4*t - 1.5) (-4*t + 4.5)
  196     green = trunc $ min (4*t - 0.5) (-4*t + 3.5)
  197     blue  = trunc $ min (4*t + 0.5) (-4*t + 2.5)
  198     trunc :: Double -> Pixel8
  199     trunc = round . min 255 . max 0 . (*) 255
  200 
  201 -- | hsv colormap. Goes from 0 degrees to 360 degrees.
  202 --
  203 --   <<docs/gifs/doc_hsv.gif>>
  204 hsv :: Double -> PixelRGB8
  205 hsv t = PixelRGB8 (round $ r*255) (round $ g*255) (round $ b*255)
  206   where
  207     RGB r g b = HSV.hsv (t * 360) 1 1
  208 
  209 -- | Matlab hsv colormap. Goes from 0 degrees to 330 degrees.
  210 --
  211 --   <<docs/gifs/doc_hsvMatlab.gif>>
  212 hsvMatlab :: Double -> PixelRGB8
  213 hsvMatlab t = PixelRGB8 (round $ r*255) (round $ g*255) (round $ b*255)
  214   where
  215     RGB r g b = HSV.hsv (t * 330) 1 1
  216 
  217 -- | Greyscale colormap.
  218 --
  219 --   <<docs/gifs/doc_greyscale.gif>>
  220 greyscale :: Double -> PixelRGB8
  221 greyscale t = PixelRGB8 v v v
  222   where
  223     v = round $ t * 255
  224 
  225 -- | Parula is the default colormap for matlab.
  226 --
  227 --   <<docs/gifs/doc_parula.gif>>
  228 parula :: Double -> PixelRGB8
  229 parula = ramp vec
  230   where
  231     vec = V.fromList $ pixels colorList
  232     pixels [] = []
  233     pixels (r:g:b:xs) =
  234       PixelRGB8 (round $ r*255) (round $ g*255) (round $ b*255) :
  235       pixels xs
  236     pixels _ = error "Reanimate.ColorMap.parula: Broken data"
  237     colorList :: [Double]
  238     colorList =
  239        [0.2081, 0.1663, 0.5292
  240        ,0.2091, 0.1721, 0.5411
  241        ,0.2101, 0.1779, 0.5530
  242        ,0.2109, 0.1837, 0.5650
  243        ,0.2116, 0.1895, 0.5771
  244        ,0.2121, 0.1954, 0.5892
  245        ,0.2124, 0.2013, 0.6013
  246        ,0.2125, 0.2072, 0.6135
  247        ,0.2123, 0.2132, 0.6258
  248        ,0.2118, 0.2192, 0.6381
  249        ,0.2111, 0.2253, 0.6505
  250        ,0.2099, 0.2315, 0.6629
  251        ,0.2084, 0.2377, 0.6753
  252        ,0.2063, 0.2440, 0.6878
  253        ,0.2038, 0.2503, 0.7003
  254        ,0.2006, 0.2568, 0.7129
  255        ,0.1968, 0.2632, 0.7255
  256        ,0.1921, 0.2698, 0.7381
  257        ,0.1867, 0.2764, 0.7507
  258        ,0.1802, 0.2832, 0.7634
  259        ,0.1728, 0.2902, 0.7762
  260        ,0.1641, 0.2975, 0.7890
  261        ,0.1541, 0.3052, 0.8017
  262        ,0.1427, 0.3132, 0.8145
  263        ,0.1295, 0.3217, 0.8269
  264        ,0.1147, 0.3306, 0.8387
  265        ,0.0986, 0.3397, 0.8495
  266        ,0.0816, 0.3486, 0.8588
  267        ,0.0646, 0.3572, 0.8664
  268        ,0.0482, 0.3651, 0.8722
  269        ,0.0329, 0.3724, 0.8765
  270        ,0.0213, 0.3792, 0.8796
  271        ,0.0136, 0.3853, 0.8815
  272        ,0.0086, 0.3911, 0.8827
  273        ,0.0060, 0.3965, 0.8833
  274        ,0.0051, 0.4017, 0.8834
  275        ,0.0054, 0.4066, 0.8831
  276        ,0.0067, 0.4113, 0.8825
  277        ,0.0089, 0.4159, 0.8816
  278        ,0.0116, 0.4203, 0.8805
  279        ,0.0148, 0.4246, 0.8793
  280        ,0.0184, 0.4288, 0.8779
  281        ,0.0223, 0.4329, 0.8763
  282        ,0.0264, 0.4370, 0.8747
  283        ,0.0306, 0.4410, 0.8729
  284        ,0.0349, 0.4449, 0.8711
  285        ,0.0394, 0.4488, 0.8692
  286        ,0.0437, 0.4526, 0.8672
  287        ,0.0477, 0.4564, 0.8652
  288        ,0.0514, 0.4602, 0.8632
  289        ,0.0549, 0.4640, 0.8611
  290        ,0.0582, 0.4677, 0.8589
  291        ,0.0612, 0.4714, 0.8568
  292        ,0.0640, 0.4751, 0.8546
  293        ,0.0666, 0.4788, 0.8525
  294        ,0.0689, 0.4825, 0.8503
  295        ,0.0710, 0.4862, 0.8481
  296        ,0.0729, 0.4899, 0.8460
  297        ,0.0746, 0.4937, 0.8439
  298        ,0.0761, 0.4974, 0.8418
  299        ,0.0773, 0.5012, 0.8398
  300        ,0.0782, 0.5051, 0.8378
  301        ,0.0789, 0.5089, 0.8359
  302        ,0.0794, 0.5129, 0.8341
  303        ,0.0795, 0.5169, 0.8324
  304        ,0.0793, 0.5210, 0.8308
  305        ,0.0788, 0.5251, 0.8293
  306        ,0.0778, 0.5295, 0.8280
  307        ,0.0764, 0.5339, 0.8270
  308        ,0.0746, 0.5384, 0.8261
  309        ,0.0724, 0.5431, 0.8253
  310        ,0.0698, 0.5479, 0.8247
  311        ,0.0668, 0.5527, 0.8243
  312        ,0.0636, 0.5577, 0.8239
  313        ,0.0600, 0.5627, 0.8237
  314        ,0.0562, 0.5677, 0.8234
  315        ,0.0523, 0.5727, 0.8231
  316        ,0.0484, 0.5777, 0.8228
  317        ,0.0445, 0.5826, 0.8223
  318        ,0.0408, 0.5874, 0.8217
  319        ,0.0372, 0.5922, 0.8209
  320        ,0.0342, 0.5968, 0.8198
  321        ,0.0317, 0.6012, 0.8186
  322        ,0.0296, 0.6055, 0.8171
  323        ,0.0279, 0.6097, 0.8154
  324        ,0.0265, 0.6137, 0.8135
  325        ,0.0255, 0.6176, 0.8114
  326        ,0.0248, 0.6214, 0.8091
  327        ,0.0243, 0.6250, 0.8066
  328        ,0.0239, 0.6285, 0.8039
  329        ,0.0237, 0.6319, 0.8010
  330        ,0.0235, 0.6352, 0.7980
  331        ,0.0233, 0.6384, 0.7948
  332        ,0.0231, 0.6415, 0.7916
  333        ,0.0230, 0.6445, 0.7881
  334        ,0.0229, 0.6474, 0.7846
  335        ,0.0227, 0.6503, 0.7810
  336        ,0.0227, 0.6531, 0.7773
  337        ,0.0232, 0.6558, 0.7735
  338        ,0.0238, 0.6585, 0.7696
  339        ,0.0246, 0.6611, 0.7656
  340        ,0.0263, 0.6637, 0.7615
  341        ,0.0282, 0.6663, 0.7574
  342        ,0.0306, 0.6688, 0.7532
  343        ,0.0338, 0.6712, 0.7490
  344        ,0.0373, 0.6737, 0.7446
  345        ,0.0418, 0.6761, 0.7402
  346        ,0.0467, 0.6784, 0.7358
  347        ,0.0516, 0.6808, 0.7313
  348        ,0.0574, 0.6831, 0.7267
  349        ,0.0629, 0.6854, 0.7221
  350        ,0.0692, 0.6877, 0.7173
  351        ,0.0755, 0.6899, 0.7126
  352        ,0.0820, 0.6921, 0.7078
  353        ,0.0889, 0.6943, 0.7029
  354        ,0.0956, 0.6965, 0.6979
  355        ,0.1031, 0.6986, 0.6929
  356        ,0.1104, 0.7007, 0.6878
  357        ,0.1180, 0.7028, 0.6827
  358        ,0.1258, 0.7049, 0.6775
  359        ,0.1335, 0.7069, 0.6723
  360        ,0.1418, 0.7089, 0.6669
  361        ,0.1499, 0.7109, 0.6616
  362        ,0.1585, 0.7129, 0.6561
  363        ,0.1671, 0.7148, 0.6507
  364        ,0.1758, 0.7168, 0.6451
  365        ,0.1849, 0.7186, 0.6395
  366        ,0.1938, 0.7205, 0.6338
  367        ,0.2033, 0.7223, 0.6281
  368        ,0.2128, 0.7241, 0.6223
  369        ,0.2224, 0.7259, 0.6165
  370        ,0.2324, 0.7275, 0.6107
  371        ,0.2423, 0.7292, 0.6048
  372        ,0.2527, 0.7308, 0.5988
  373        ,0.2631, 0.7324, 0.5929
  374        ,0.2735, 0.7339, 0.5869
  375        ,0.2845, 0.7354, 0.5809
  376        ,0.2953, 0.7368, 0.5749
  377        ,0.3064, 0.7381, 0.5689
  378        ,0.3177, 0.7394, 0.5630
  379        ,0.3289, 0.7406, 0.5570
  380        ,0.3405, 0.7417, 0.5512
  381        ,0.3520, 0.7428, 0.5453
  382        ,0.3635, 0.7438, 0.5396
  383        ,0.3753, 0.7446, 0.5339
  384        ,0.3869, 0.7454, 0.5283
  385        ,0.3986, 0.7461, 0.5229
  386        ,0.4103, 0.7467, 0.5175
  387        ,0.4218, 0.7473, 0.5123
  388        ,0.4334, 0.7477, 0.5072
  389        ,0.4447, 0.7482, 0.5021
  390        ,0.4561, 0.7485, 0.4972
  391        ,0.4672, 0.7487, 0.4924
  392        ,0.4783, 0.7489, 0.4877
  393        ,0.4892, 0.7491, 0.4831
  394        ,0.5000, 0.7491, 0.4786
  395        ,0.5106, 0.7492, 0.4741
  396        ,0.5212, 0.7492, 0.4698
  397        ,0.5315, 0.7491, 0.4655
  398        ,0.5418, 0.7490, 0.4613
  399        ,0.5519, 0.7489, 0.4571
  400        ,0.5619, 0.7487, 0.4531
  401        ,0.5718, 0.7485, 0.4490
  402        ,0.5816, 0.7482, 0.4451
  403        ,0.5913, 0.7479, 0.4412
  404        ,0.6009, 0.7476, 0.4374
  405        ,0.6103, 0.7473, 0.4335
  406        ,0.6197, 0.7469, 0.4298
  407        ,0.6290, 0.7465, 0.4261
  408        ,0.6382, 0.7460, 0.4224
  409        ,0.6473, 0.7456, 0.4188
  410        ,0.6564, 0.7451, 0.4152
  411        ,0.6653, 0.7446, 0.4116
  412        ,0.6742, 0.7441, 0.4081
  413        ,0.6830, 0.7435, 0.4046
  414        ,0.6918, 0.7430, 0.4011
  415        ,0.7004, 0.7424, 0.3976
  416        ,0.7091, 0.7418, 0.3942
  417        ,0.7176, 0.7412, 0.3908
  418        ,0.7261, 0.7405, 0.3874
  419        ,0.7346, 0.7399, 0.3840
  420        ,0.7430, 0.7392, 0.3806
  421        ,0.7513, 0.7385, 0.3773
  422        ,0.7596, 0.7378, 0.3739
  423        ,0.7679, 0.7372, 0.3706
  424        ,0.7761, 0.7364, 0.3673
  425        ,0.7843, 0.7357, 0.3639
  426        ,0.7924, 0.7350, 0.3606
  427        ,0.8005, 0.7343, 0.3573
  428        ,0.8085, 0.7336, 0.3539
  429        ,0.8166, 0.7329, 0.3506
  430        ,0.8246, 0.7322, 0.3472
  431        ,0.8325, 0.7315, 0.3438
  432        ,0.8405, 0.7308, 0.3404
  433        ,0.8484, 0.7301, 0.3370
  434        ,0.8563, 0.7294, 0.3336
  435        ,0.8642, 0.7288, 0.3300
  436        ,0.8720, 0.7282, 0.3265
  437        ,0.8798, 0.7276, 0.3229
  438        ,0.8877, 0.7271, 0.3193
  439        ,0.8954, 0.7266, 0.3156
  440        ,0.9032, 0.7262, 0.3117
  441        ,0.9110, 0.7259, 0.3078
  442        ,0.9187, 0.7256, 0.3038
  443        ,0.9264, 0.7256, 0.2996
  444        ,0.9341, 0.7256, 0.2953
  445        ,0.9417, 0.7259, 0.2907
  446        ,0.9493, 0.7264, 0.2859
  447        ,0.9567, 0.7273, 0.2808
  448        ,0.9639, 0.7285, 0.2754
  449        ,0.9708, 0.7303, 0.2696
  450        ,0.9773, 0.7326, 0.2634
  451        ,0.9831, 0.7355, 0.2570
  452        ,0.9882, 0.7390, 0.2504
  453        ,0.9922, 0.7431, 0.2437
  454        ,0.9952, 0.7476, 0.2373
  455        ,0.9973, 0.7524, 0.2310
  456        ,0.9986, 0.7573, 0.2251
  457        ,0.9991, 0.7624, 0.2195
  458        ,0.9990, 0.7675, 0.2141
  459        ,0.9985, 0.7726, 0.2090
  460        ,0.9976, 0.7778, 0.2042
  461        ,0.9964, 0.7829, 0.1995
  462        ,0.9950, 0.7880, 0.1949
  463        ,0.9933, 0.7931, 0.1905
  464        ,0.9914, 0.7981, 0.1863
  465        ,0.9894, 0.8032, 0.1821
  466        ,0.9873, 0.8083, 0.1780
  467        ,0.9851, 0.8133, 0.1740
  468        ,0.9828, 0.8184, 0.1700
  469        ,0.9805, 0.8235, 0.1661
  470        ,0.9782, 0.8286, 0.1622
  471        ,0.9759, 0.8337, 0.1583
  472        ,0.9736, 0.8389, 0.1544
  473        ,0.9713, 0.8441, 0.1505
  474        ,0.9692, 0.8494, 0.1465
  475        ,0.9672, 0.8548, 0.1425
  476        ,0.9654, 0.8603, 0.1385
  477        ,0.9638, 0.8659, 0.1343
  478        ,0.9623, 0.8716, 0.1301
  479        ,0.9611, 0.8774, 0.1258
  480        ,0.9600, 0.8834, 0.1215
  481        ,0.9593, 0.8895, 0.1171
  482        ,0.9588, 0.8958, 0.1126
  483        ,0.9586, 0.9022, 0.1082
  484        ,0.9587, 0.9088, 0.1036
  485        ,0.9591, 0.9155, 0.0990
  486        ,0.9599, 0.9225, 0.0944
  487        ,0.9610, 0.9296, 0.0897
  488        ,0.9624, 0.9368, 0.0850
  489        ,0.9641, 0.9443, 0.0802
  490        ,0.9662, 0.9518, 0.0753
  491        ,0.9685, 0.9595, 0.0703
  492        ,0.9710, 0.9673, 0.0651
  493        ,0.9736, 0.9752, 0.0597
  494        ,0.9763, 0.9831, 0.0538]
  495 
  496 --------------------------------------------------------------------------------
  497 -- Helpers
  498 
  499 colors :: Text -> Vector PixelRGB8
  500 colors = V.fromList . map (toColor . map (fromIntegral . digitToInt) . T.unpack) . T.chunksOf 6
  501   where
  502     toColor [r1,r2,g1,g2,b1,b2] =
  503       PixelRGB8 (r1 `shiftL` 4 + r2) (g1 `shiftL` 4 + g2) (b1 `shiftL` 4+b2)
  504     toColor _ = error "Reanimate.ColorMap.colors: Broken data"
  505 
  506 ramp :: Vector PixelRGB8 -> Double -> PixelRGB8
  507 ramp v = \t -> v V.! max 0 (min (len-1) $ round $ t * (len'-1))
  508   where
  509     len = V.length v
  510     len' = fromIntegral len