View Javadoc

1   package org.lcsim.util.heprep;
2   import java.awt.Color;
3   
4   /**
5    *
6    * @author tonyj
7    */
8   public class RainbowColorMap implements ColorMap {
9       /** The red values. */
10      private int[] red =
11              { 120, 115, 111, 106, 102,  97,  93,  88,  84,  79,  75,  70,  66,  61,
12                57,  52,  48,  43,  39,  34,  30,  25,  21,  16,  12,   7,   3,   0,   0,   0,
13                 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
14                 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
15                 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
16                 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
17                 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
18                 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
19                 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   1,   5,
20                10,  14,  19,  23,  28,  32,  37,  41,  46,  50,  55,  59,  64,  68,  73,  77,
21                82,  86,  91,  95, 100, 104, 109, 113, 118, 123, 127, 132, 136, 141, 145, 150,
22               154, 159, 163, 168, 172, 177, 181, 186, 190, 195, 199, 204, 208, 213, 217, 222,
23               226, 231, 235, 240, 244, 249, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255,
24               255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
25               255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
26               255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 };
27  
28      /** The green values. */
29      private int[] green =
30              {  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
31                 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   2,   6,  11,
32                15,  20,  24,  29,  33,  38,  42,  47,  51,  56,  60,  65,  69,  74,  78,  83,
33                87,  92,  96, 101, 105, 110, 114, 119, 123, 128, 132, 137, 141, 146, 150, 155,
34               159, 164, 168, 173, 177, 182, 186, 191, 195, 200, 204, 209, 213, 218, 222, 227,
35               231, 236, 241, 245, 250, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
36               255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
37               255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
38               255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
39               255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
40               255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
41               255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
42               255, 255, 255, 255, 255, 255, 255, 252, 248, 243, 239, 234, 230, 225, 221, 216,
43               212, 207, 203, 198, 194, 189, 185, 180, 176, 171, 167, 162, 158, 153, 149, 144,
44               140, 135, 131, 126, 122, 117, 113, 108, 104,  99,  95,  90,  86,  81,  77,  72,
45                68,  63,  59,  54,  50,  45,  41,  36,  32,  27,  23,  18,  14,   9,   5,   0 };
46  
47      /** The blue values. */
48      private int[] blue =
49              {255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
50               255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
51               255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
52               255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
53               255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
54               255, 255, 255, 255, 255, 255, 251, 247, 242, 238, 233, 229, 224, 220, 215, 211,
55               206, 202, 197, 193, 188, 184, 179, 175, 170, 166, 161, 157, 152, 148, 143, 139,
56               134, 130, 125, 121, 116, 112, 107, 103,  98,  94,  89,  85,  80,  76,  71,  67,
57                62,  58,  53,  49,  44,  40,  35,  31,  26,  22,  17,  13,   8,   4,   0,   0,
58                 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
59                 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
60                 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
61                 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
62                 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
63                 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
64                 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0 };
65      
66                 public Color getColor(double value, float alpha) {
67          if (value < 0 || value > 1) throw new IllegalArgumentException("Value must be in range [0,1]: "+value);
68          int bin = (int) Math.floor(value*red.length);
69          if (bin >= red.length) bin = red.length-1;
70          int a = (int) (alpha*256);
71          if (a < 0) a = 0;
72          if (a > 255) a = 255;
73          return new Color(red[bin],green[bin],blue[bin],a);
74      }  
75  }