colors.h
Go to the documentation of this file.
1 #ifndef PLOT_H
2 #define PLOT_H
3 
4 #ifndef __CINT__
5 #include <iostream>
6 #include <vector>
7 #include <cassert>
8 
9 #include "TColor.h"
10 #include "TH1.h"
11 #include "TPad.h"
12 #include "TList.h"
13 #include "TClass.h"
14 
15 //======================================================================
16 TH1* getPadAxisHist(TPad* pad)
17 {
18  TIter next(pad->GetListOfPrimitives());
19  TObject *obj;
20  while (( obj=next() )) {
21  // cout << obj->GetName() << endl;
22  if ( obj->IsA()->InheritsFrom(TH1::Class()) ) {
23  // cout << "getPadAxisHist returning hist with name " << obj->GetName() << endl;
24  return (TH1*)obj;
25  }
26  }
27  return NULL;
28 }
29 
30 //======================================================================
31 std::vector<TH1*> getPadHists(TPad* pad)
32 {
33  std::vector<TH1*> ret;
34  TIter next(pad->GetListOfPrimitives());
35  TObject *obj;
36  while (( obj=next() )) {
37  //cout << obj->GetName() << endl;
38  if ( obj->IsA()->InheritsFrom(TH1::Class()) ) {
39  //cout << "getPadAxisHist returning hist with name " << obj->GetName() << endl;
40  ret.push_back((TH1*)obj);
41  }
42  }
43  return ret;
44 }
45 
46 //======================================================================
47 double getPadMax(TPad* pad)
48 {
49  TIter next(pad->GetListOfPrimitives());
50  TObject *obj;
51  Double_t runningMax=-9e99;//Hparam.ymax;
52  while (( obj=next() )) {
53  if ( obj->IsA()->InheritsFrom(TH1::Class()) ) {
54  TH1* curHist=(TH1*)obj;
55  const double thisMax=curHist->GetBinContent(curHist->GetMaximumBin());
56  if (thisMax > runningMax) {
57  runningMax=thisMax;
58  }
59  }
60  }
61  return runningMax;
62 }
63 
64 //======================================================================
65 void reMax(TPad* pad, double ymin=0, double headroom=1.1)
66 {
67  TH1* firstHist=getPadAxisHist(pad);
68  if(!firstHist){
69  std::cerr << "reMax: No histogram in pad " << pad->GetName() << ". Can't reMax" << std::endl;
70  return;
71  }
72  firstHist->GetYaxis()->SetRangeUser(ymin, headroom*getPadMax(pad));
73  pad->Update();
74 }
75 
76 //======================================================================
78 {
80 };
81 
82 //======================================================================
83 const std::vector<int>& getColors(int whichColours)
84 {
85  const int alphabetColors[]={
86  TColor::GetColor( 25, 25, 25 ), //ebony
87  TColor::GetColor( 240, 163, 255 ), //amethyst
88  TColor::GetColor( 255, 0, 16 ), //red
89  TColor::GetColor( 128, 128, 128 ), //iron
90  TColor::GetColor( 25, 164, 5 ), //orpiment
91  TColor::GetColor( 0, 153, 143 ), //turquoise
92  TColor::GetColor( 0, 51, 128 ), //navy
93  TColor::GetColor( 94, 241, 242 ), //sky
94  TColor::GetColor( 157, 204, 0 ), //lime
95  TColor::GetColor( 153, 63, 0 ), //caramel
96  TColor::GetColor( 224, 255, 102 ), //uranium
97  TColor::GetColor( 76, 0, 92 ), //damson
98  TColor::GetColor( 255, 168, 187 ), //pink
99  TColor::GetColor( 194, 0, 136 ), //mallow
100  TColor::GetColor( 255, 204, 153 ), //honeydew
101  TColor::GetColor( 43, 206, 72 ), //green
102  TColor::GetColor( 0, 117, 220 ), //blue
103  TColor::GetColor( 0, 92, 49 ), //forest
104  TColor::GetColor( 255, 225, 0 ), //yellow
105  TColor::GetColor( 153, 0, 0 ), //wine
106  TColor::GetColor( 143, 124, 0 ), //khaki
107  TColor::GetColor( 16, 10, 255 ), //violet
108  TColor::GetColor( 255, 255, 128 ), //xanthin
109  TColor::GetColor( 255, 80, 0 ), //zinnia
110  TColor::GetColor( 148, 255, 181 ), //jade
111  TColor::GetColor( 66, 102, 0 ) //quagmire
112  };
113 
114  const int kellyColors[]={
115  // TColor::GetColor("#f2f3f4"), // white,
116  TColor::GetColor("#222222"), // black,
117  TColor::GetColor("#f3c300"), // yellow,
118  TColor::GetColor("#875692"), // purple,
119  TColor::GetColor("#f38400"), // orange,
120  TColor::GetColor("#a1caf1"), // lightblue,
121  TColor::GetColor("#be0032"), // red,
122  TColor::GetColor("#c2b280"), // buff,
123  TColor::GetColor("#848482"), // gray,
124  TColor::GetColor("#008856"), // green,
125  TColor::GetColor("#e68fac"), // purplishpink,
126  TColor::GetColor("#0067a5"), // blue,
127  TColor::GetColor("#f99379"), // yellowishpink,
128  TColor::GetColor("#604e97"), // violet,
129  TColor::GetColor("#f6a600"), // orangeyellow,
130  TColor::GetColor("#b3446c"), // purplishred,
131  TColor::GetColor("#dcd300"), // greenishyellow,
132  TColor::GetColor("#882d17"), // reddishbrown,
133  TColor::GetColor("#8db600"), // yellowgreen,
134  TColor::GetColor("#654522"), // yellowishbrown,
135  TColor::GetColor("#e25822"), // reddishorange,
136  TColor::GetColor("#2b3d26") // olivegreen
137  };
138 
139  const int palette36Colors[]={
140  TColor::GetColor("#5A5156"),
141  // TColor::GetColor("#E4E1E3"), // much too light
142  TColor::GetColor("#F6222E"),
143  TColor::GetColor("#FE00FA"),
144  TColor::GetColor("#16FF32"),
145  TColor::GetColor("#3283FE"),
146  TColor::GetColor("#FEAF16"),
147  TColor::GetColor("#B00068"),
148  TColor::GetColor("#1CFFCE"),
149  TColor::GetColor("#90AD1C"),
150  TColor::GetColor("#2ED9FF"),
151  TColor::GetColor("#DEA0FD"),
152  TColor::GetColor("#AA0DFE"),
153  TColor::GetColor("#F8A19F"),
154  TColor::GetColor("#325A9B"),
155  TColor::GetColor("#C4451C"),
156  TColor::GetColor("#1C8356"),
157  TColor::GetColor("#85660D"),
158  TColor::GetColor("#B10DA1"),
159  TColor::GetColor("#FBE426"),
160  TColor::GetColor("#1CBE4F"),
161  TColor::GetColor("#FA0087"),
162  TColor::GetColor("#FC1CBF"),
163  TColor::GetColor("#F7E1A0"),
164  TColor::GetColor("#C075A6"),
165  TColor::GetColor("#782AB6"),
166  TColor::GetColor("#AAF400"),
167  TColor::GetColor("#BDCDFF"),
168  TColor::GetColor("#822E1C"),
169  TColor::GetColor("#B5EFB5"),
170  TColor::GetColor("#7ED7D1"),
171  TColor::GetColor("#1C7F93"),
172  TColor::GetColor("#D85FF7"),
173  TColor::GetColor("#683B79"),
174  TColor::GetColor("#66B0FF"),
175  TColor::GetColor("#3B00FB"),
176  };
177 
178  const int glasbeyColors[]={
179  TColor::GetColor("#0000FF"),
180  TColor::GetColor("#FF0000"),
181  TColor::GetColor("#00FF00"),
182  TColor::GetColor("#000033"),
183  TColor::GetColor("#FF00B6"),
184  TColor::GetColor("#005300"),
185  TColor::GetColor("#FFD300"),
186  TColor::GetColor("#009FFF"),
187  TColor::GetColor("#9A4D42"),
188  TColor::GetColor("#00FFBE"),
189  TColor::GetColor("#783FC1"),
190  TColor::GetColor("#1F9698"),
191  TColor::GetColor("#FFACFD"),
192  TColor::GetColor("#B1CC71"),
193  TColor::GetColor("#F1085C"),
194  TColor::GetColor("#FE8F42"),
195  TColor::GetColor("#DD00FF"),
196  TColor::GetColor("#201A01"),
197  TColor::GetColor("#720055"),
198  TColor::GetColor("#766C95"),
199  TColor::GetColor("#02AD24"),
200  TColor::GetColor("#C8FF00"),
201  TColor::GetColor("#886C00"),
202  TColor::GetColor("#FFB79F"),
203  TColor::GetColor("#858567"),
204  TColor::GetColor("#A10300"),
205  TColor::GetColor("#14F9FF"),
206  TColor::GetColor("#00479E"),
207  TColor::GetColor("#DC5E93"),
208  TColor::GetColor("#93D4FF"),
209  TColor::GetColor("#004CFF")
210  };
211 
212  const int brewerSet1Colors[]={
213  TColor::GetColor("#e41a1c"),
214  TColor::GetColor("#377eb8"),
215  TColor::GetColor("#4daf4a"),
216  TColor::GetColor("#984ea3"),
217  TColor::GetColor("#ff7f00"),
218  TColor::GetColor("#ffff33"),
219  TColor::GetColor("#a65628"),
220  TColor::GetColor("#f781bf")
221  };
222 
223  const int brewerDark2Colors[]={
224  TColor::GetColor( 27, 158, 119),
225  TColor::GetColor(217, 95, 2),
226  TColor::GetColor(117, 112, 179),
227  TColor::GetColor(231, 41, 138),
228  TColor::GetColor(102, 166, 30),
229  TColor::GetColor(230, 171, 2),
230  TColor::GetColor(166, 118, 29),
231  TColor::GetColor(102, 102, 102)
232  };
233 
234  const int nPalettes=6;
235  static std::vector<std::vector<int> > allPalettes(nPalettes);
236  static bool firstCall=true;
237 
238  if(firstCall){
239  for(int j=0; j<nPalettes; ++j){
240  int nColors=0;
241  const int* firstColor=NULL;
242 
243  switch(j){
244  case 0:
245  nColors=26;
246  firstColor=alphabetColors;
247  break;
248  case 1:
249  nColors=21;
250  firstColor=kellyColors;
251  break;
252  case 2:
253  nColors=35; // 36 because I commented one out
254  firstColor=palette36Colors;
255  break;
256  case 3:
257  nColors=30;
258  firstColor=glasbeyColors;
259  break;
260  case 4:
261  nColors=8;
262  firstColor=brewerSet1Colors;
263  break;
264  case 5:
265  nColors=8;
266  firstColor=brewerDark2Colors;
267  break;
268  default:
269  assert(0 && "whichColours must be 0-5");
270  }
271 
272  for(int i=0; i<nColors; ++i){
273  allPalettes[j].push_back(firstColor[i]);
274  }
275  }
276  firstCall=false;
277  }
278  return allPalettes[whichColours];
279 }
280 
281 //======================================================================
282 void autoColorHists(TPad* pad, int whichColours=kBrewerSet1Palette)
283 {
284  const std::vector<int>& colours=getColors(whichColours);
285 
286  std::vector<TH1*> hists=getPadHists(pad);
287  for(unsigned int i=0; i<hists.size(); ++i){
288  hists[i]->SetLineColor(colours[i%colours.size()]);
289  }
290  pad->Draw();
291 }
292 
293 #endif // #ifndef __CINT__
294 #endif // include guard
std::vector< TH1 * > getPadHists(TPad *pad)
Definition: colors.h:31
double getPadMax(TPad *pad)
Definition: colors.h:47
OStream cerr
Definition: OStream.cxx:7
TString hists[nhists]
Definition: bdt_com.C:3
void autoColorHists(TPad *pad, int whichColours=kBrewerSet1Palette)
Definition: colors.h:282
void reMax(TPad *pad, double ymin=0, double headroom=1.1)
Definition: colors.h:65
const double j
Definition: BetheBloch.cxx:29
const std::vector< int > & getColors(int whichColours)
Definition: colors.h:83
TH1 * getPadAxisHist(TPad *pad)
Definition: colors.h:16
EColorPalettes
Definition: colors.h:77
assert(nhit_max >=nhit_nbins)
Double_t ymin
Definition: plot.C:24
void next()
Definition: show_event.C:84