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