AliPhysics  85eb05e (85eb05e)
Combine.C
Go to the documentation of this file.
1 #ifndef __CINT__
2 # include <TFile.h>
3 # include <THStack.h>
4 # include <TH1.h>
5 # include <TH2.h>
6 # include <TError.h>
7 # include <TMath.h>
8 # include <TClass.h>
9 # include <TCanvas.h>
10 # include <TSystem.h>
11 # include <TFitResult.h>
12 # include <TF1.h>
13 # include "GraphSysErr.C"
14 #else
15 class TFile;
16 class THStack;
17 class TH1;
18 class TH2;
19 class TCanvas;
20 class TDirectory;
21 class TDirectory;
22 #endif
23 
24 const Bool_t kCombineLoaded = true;
25 Int_t cW = 1200;
26 Int_t cH = 800;
27 
28 //____________________________________________________________________
29 namespace CombineNS
30 {
31  void AddPath(const TString& dir, Bool_t prepend=true)
32  {
33  TString d(gSystem->ExpandPathName(dir.Data()));
34  gSystem->AddIncludePath(Form("-I%s", d.Data()));
35  const char* oldPath = gROOT->GetMacroPath();
36  gROOT->SetMacroPath(Form(".:%s:%s",
37  prepend ? d.Data() : oldPath,
38  prepend ? oldPath : d.Data()));
39  }
40 }
41 
42 
43 //____________________________________________________________________
52 void MakeCommon(TObject* o, const char* name, Double_t val, Color_t c)
53 {
54  GraphSysErr* gse = static_cast<GraphSysErr*>(o);
55  Int_t id = gse->DefineCommon(name,true,val,GraphSysErr::kBox);
56  gse->SetSysFillColor(id, c);
57  gse->SetSysLineColor(id, c);
58 }
59 //____________________________________________________________________
69 Int_t MakeP2P(TObject* o, const char* name, Color_t c)
70 {
71  GraphSysErr* gse = static_cast<GraphSysErr*>(o);
72  Int_t id = gse->DeclarePoint2Point(name,true,GraphSysErr::kBox);
73  gse->SetSysFillColor(id, c);
74  gse->SetSysLineColor(id, c);
75  return id;
76 }
77 
78 //====================================================================
80 {
81  return sMin + TMath::Power(x/xMax, 2)*(sMax-sMin);
82 }
83 
85 {
86  return SysEval(x, sMin, sMax, 80);
87 }
89 {
90  return SysEval(x, sMin, sMax, 2);
91 }
92 
93 //____________________________________________________________________
103 {
104  if (!g) return 0;
105 
106  Double_t c1 = 0;
107  Double_t c2 = 100;
108  switch (bin) {
109  case 0: c1 = 0; c2 = 5; break;
110  case 1: c1 = 5; c2 = 10; break;
111  case 2: c1 = 10; c2 = 20; break;
112  case 3: c1 = 20; c2 = 30; break;
113  case 4: c1 = 30; c2 = 40; break;
114  case 5: c1 = 40; c2 = 50; break;
115  case 6: c1 = 50; c2 = 60; break;
116  case 7: c1 = 60; c2 = 70; break;
117  case 8: c1 = 70; c2 = 80; break;
118  case 9: c1 = 80; c2 = 90; break;
119  }
120  if (!gROOT->GetClass("GraphSysErr")) return 0;
121  TString bnn; bnn.Form("%03dd%02d_%03dd%02d",
122  Int_t(c1), Int_t(c1*100)%100,
123  Int_t(c2), Int_t(c2*100)%100);
124  Bool_t mc = g->GetMarkerStyle() == 30;
125  TString nme(bnn);
126  if (mc) nme.Prepend("CENTT_");
127  else nme.Prepend("CENT_");
128 
129  Color_t col = g->GetMarkerColor();
130  // Double_t bg = (1-c1/100)*(2-0.1)+0.1;
131  // Double_t c = TMath::Power(c1/100,2)*(6.2-0.4)+0.4;
132  Double_t bg = CSysEval(c2, 0.02, 0.001);
133  Double_t c = CSysEval(c2, 0.005, 0.075);
134  GraphSysErr* gse = new GraphSysErr(nme,"");
135  gse->SetName(nme);
136  gse->SetTitle(Form("%5.1f - %5.1f%%", c1, c2));
137  gse->SetKey("author", "PREGHENELLA : 2015");
138  gse->SetKey("title", "dNch/deta in PbPb at 5023 GeV");
139  gse->SetKey("obskey", "DN/DETARAP");
140  gse->SetKey("reackey", "PB PB --> CHARGED X");
141  gse->SetKey("laboratory", "CERN");
142  gse->SetKey("accelerator", "LHC");
143  gse->SetKey("detector", "TRACKLETS");
144  gse->SetKey("reference", "ALICE-AN-2830");
145  gse->AddQualifier("CENTRALITY IN PCT", Form("%.1f TO %.1f",c1,c2));
146  gse->AddQualifier("SQRT(S)/NUCLEON IN GEV", "5023");
147  gse->SetXTitle("ETARAP");
148  gse->SetYTitle("DN/DETARAP");
149  gse->SetMarkerStyle(g->GetMarkerStyle());
150  gse->SetMarkerSize(g->GetMarkerSize());
152  gse->SetMarkerColor(col);
153  gse->SetLineColor(col);
154  gse->SetFillColor(col);
155  gse->SetSumFillColor(col);
156  gse->SetSumLineColor(col);
158  gse->SetCommonSumFillColor(col);
159  gse->SetCommonSumLineColor(col);
161  if (!mc) {
162  MakeCommon(gse, "Particle composition", 0.01, col);
163  MakeCommon(gse, "Weak decay", 0.01, col);
164  MakeCommon(gse, "pT extrapolation", 0.02, col);
165  MakeCommon(gse, "EG dependence", 0.02, col);
166  MakeCommon(gse, "Background subrtaction", bg, col);
167  MakeCommon(gse, "Centrality", c, col);
168  }
169  Int_t acc = 0;
170  if (!mc) acc = MakeP2P(gse, "Acceptance", col);
171 
172  Int_t j = 0;
173  for (Int_t i = 1; i <= g->GetNbinsX(); i++) {
174  Double_t eta = g->GetXaxis()->GetBinCenter(i);
175  Double_t eEta = g->GetXaxis()->GetBinWidth(i)/2;
176  Double_t xo = TMath::Abs(eta)+eEta;
177  if (xo > 2) continue;
178  Double_t ea = 0.02*TMath::Power(xo/2,2);
179  gse->SetPoint(j, eta, g->GetBinContent(i));
180  gse->SetPointError(j, eEta, eEta);
181  gse->SetStatError(j, g->GetBinError(i),g->GetBinError(i));
182  if (acc != 0)
183  gse->SetSysError(acc, j, eEta, eEta, ea/100, ea/100);
184  j++;
185  }
186  return gse;
187 
188 
189 }
190 
191 //====================================================================
192 TObject* GetO(TDirectory* dir, const char* name="result",
193  TClass* cls=0, Bool_t verbose=true)
194 {
195  if (!dir) {
196  if (verbose) Warning("GetHS", "No directory");
197  return 0;
198  }
199  TString par; par = gSystem->DirName(name);
200  TString bse; bse = gSystem->BaseName(name);
201 
202  if (!par.EqualTo(".")) {
203  TDirectory* save = dir;
204  dir = save->GetDirectory(par);
205  if (!dir) {
206  // Warning("", "Failed to get directory %s", par.Data());
207  // save->ls();
208  return 0;
209  }
210  }
211  TObject* o = dir->Get(bse);
212  if (!o) {
213  if (verbose) Warning("GetO", "%s not found in %s", name, dir->GetName());
214  return 0;
215  }
216  if (!cls) return o;
217  if (!o->IsA()->InheritsFrom(cls)) {
218  if (verbose) Warning("GetO", "%s is not a %s!", name, cls->GetName());
219  return 0;
220  }
221  return o;
222 }
223 
224 //____________________________________________________________________
225 THStack* GetHS(TDirectory* dir, const char* name="result", Bool_t verbose=true)
226 {
227  return static_cast<THStack*>(GetO(dir,name,THStack::Class(),verbose));
228 }
229 //____________________________________________________________________
230 TH1* GetH1(TDirectory* dir, const char* name="result", Bool_t verbose=true)
231 {
232  return static_cast<TH1*>(GetO(dir,name,TH1::Class(),verbose));
233 }
234 //____________________________________________________________________
235 TH2* GetH2(TDirectory* dir, const char* name="result", Bool_t verbose=true)
236 {
237  return static_cast<TH2*>(GetO(dir,name,TH2::Class(),verbose));
238 }
239 
240 //====================================================================
241 TH1* Combine(TH1* left, TH1* middle, TH1* right, TDirectory* out,
242  Bool_t cutAtTwo=true)
243 {
244  TH1* hs[] = { left, middle, right, 0 };
245  TH1* r = static_cast<TH1*>(middle->Clone());
246  r->SetDirectory(0);
247  r->Reset();
248  if (cutAtTwo) {
249  if (r->GetMarkerStyle() == 20)
250  r->SetMarkerStyle(29);
251  else
252  r->SetMarkerStyle(30);
253  }
254 
255  for (Int_t i = 1; i <= r->GetNbinsX(); i++) {
256  Double_t aeta = TMath::Abs(r->GetXaxis()->GetBinCenter(i));
257  Double_t weta = r->GetXaxis()->GetBinWidth (i);
258  if (cutAtTwo && (aeta + weta/2) > 2) continue; // Kill bins outside +/- 2
259  TH1** ph = hs;
260  Double_t sum = 0;
261  Double_t sumw = 0;
262  Int_t n = 0;
263  while (*ph) {
264  TH1* h = *ph;
265  ph++;
266 
267  Double_t c = h->GetBinContent(i);
268  Double_t e = h->GetBinError(i);
269  if (c < 1e-6) continue;
270 
271  sum += c;
272  sumw += e * e;
273  n += 1;
274  }
275  if (n <= 0) continue;
276  r->SetBinContent(i, sum/n);
277  r->SetBinError (i, TMath::Sqrt(sumw));
278  }
279  return r;
280 }
281 
282 //____________________________________________________________________
283 TH2* Combine(TH2* left, TH2* middle, TH2* right, TDirectory* out)
284 {
285  TH2* hs[] = { left, middle, right, 0 };
286  TH2* r = static_cast<TH2*>(middle->Clone());
287  r->SetDirectory(0);
288  r->Reset();
289  if (r->GetMarkerStyle() == 20)
290  r->SetMarkerStyle(29);
291  else
292  r->SetMarkerStyle(30);
293 
294 
295  for (Int_t i = 1; i <= r->GetNbinsX(); i++) {
296  Double_t aeta = TMath::Abs(r->GetXaxis()->GetBinCenter(i));
297  Double_t weta = r->GetXaxis()->GetBinWidth (i);
298  if ((aeta + weta/2) > 2) continue; // Kill bins outside +/- 2
299  for (Int_t j = 1; j <= r->GetNbinsY(); j++) {
300  TH2** ph = hs;
301  Double_t sum = 0;
302  Double_t sumw = 0;
303  Int_t n = 0;
304  while (*ph) {
305  TH2* h = *ph;
306  ph++;
307 
308  Double_t c = h->GetBinContent(i,j);
309  Double_t e = h->GetBinError(i,j);
310  if (c < 1e-6) continue;
311 
312  sum += c;
313  sumw += e * e;
314  n += 1;
315  }
316  if (n <= 0) continue;
317  r->SetBinContent(i, sum/n);
318  r->SetBinError (i, TMath::Sqrt(sumw));
319  }
320  }
321  return r;
322 }
323 
324 //____________________________________________________________________
325 void
327  TH2* smiddle,
328  TH2* sright,
329  TDirectory* out)
330 {
331  Int_t nyLeft = sleft ->GetYaxis()->GetNbins();
332  Int_t nyMiddle = smiddle->GetYaxis()->GetNbins();
333  Int_t nyRight = sright ->GetYaxis()->GetNbins();
334  TH2* maps[] = { sleft, smiddle, sright };
335  TArrayD bins(nyLeft+nyMiddle+nyRight+1);
336  bins[0] = sleft->GetYaxis()->GetXmin();
337  Int_t j = 1;
338  for (Int_t k = 0; k < 3; k++) {
339  TH2* tmp = maps[k];
340  for (Int_t i = 1; i <= tmp->GetYaxis()->GetNbins(); i++, j++)
341  bins[j] = tmp->GetYaxis()->GetBinUpEdge(i);
342  }
343 
344  TH2* ret = new TH2D(smiddle->GetName(), smiddle->GetTitle(),
345  smiddle->GetXaxis()->GetNbins(),
346  smiddle->GetXaxis()->GetXmin(),
347  smiddle->GetXaxis()->GetXmax(),
348  nyLeft+nyMiddle+nyRight, bins.GetArray());
349  ret->SetXTitle(smiddle->GetXaxis()->GetTitle());
350  ret->SetYTitle(smiddle->GetYaxis()->GetTitle());
351  ret->SetZTitle(smiddle->GetZaxis()->GetTitle());
352  ret->SetDirectory(out);
353  static_cast<TAttAxis*>(smiddle->GetXaxis())->Copy(*ret->GetXaxis());
354  static_cast<TAttAxis*>(smiddle->GetYaxis())->Copy(*ret->GetYaxis());
355  static_cast<TAttAxis*>(smiddle->GetZaxis())->Copy(*ret->GetZaxis());
356 
357  Int_t base = 0;
358  for (Int_t k = 0; k < 3; k++) {
359  TH2* tmp = maps[k];
360  for (Int_t i = 1; i <= tmp->GetXaxis()->GetNbins(); i++) {
361  for (Int_t j = 1; j <= tmp->GetYaxis()->GetNbins(); j++) {
362  ret->SetBinContent(i,base+j,tmp->GetBinContent(i,j));
363  ret->SetBinError (i,base+j,tmp->GetBinError (i,j));
364  }
365  }
366  base += tmp->GetYaxis()->GetNbins();
367  }
368 }
369 
370 
371 
372 
373 
374 
375 
376 
377 //____________________________________________________________________
378 void
379 Combine(THStack* sleft,
380  THStack* smiddle,
381  THStack* sright,
382  THStack* result,
383  TDirectory* out,
384  TList* gses,
385  TH1* cent=0,
386  Bool_t cutAtTwo=true)
387 {
388  TIter ileft (sleft ->GetHists());
389  TIter imiddle(smiddle->GetHists());
390  TIter iright (sright ->GetHists());
391  TH1* hleft = 0;
392  TH1* hmiddle = 0;
393  TH1* hright = 0;
394  Int_t cnt = 0;
395  TH1* mid = cent ? static_cast<TH1*>(cent->Clone("mid")) : 0;
396  if (mid) {
397  mid->Reset();
398  mid->SetDirectory(out);
399  mid->SetXTitle("#eta");
400  mid->SetYTitle("d#it{N}_{ch}/d#it{#eta}|_{|#it{#eta}|<0.5}");
401  mid->SetTitle("Mid-rapidity");
402  }
403  Int_t bin = 0;
404  while ((hleft = static_cast<TH1*>(ileft ())) &&
405  (hmiddle = static_cast<TH1*>(imiddle())) &&
406  (hright = static_cast<TH1*>(iright ()))) {
407  TH1* h = Combine(hleft, hmiddle, hright, out, cutAtTwo);
408  if (mid && !TString(h->GetName()).Contains("truth")) {
409  TF1* f = new TF1(Form("f%s", h->GetName()), "pol0", -.5, +.5);
410  TFitResultPtr s = h->Fit(f, "QS+", "", -.5, +.5);
411  bin++;
412  mid->SetBinContent(bin, s->Parameter(0));
413  mid->SetBinError (bin, s->ParError (0));
414  Printf("dNch/deta %20s: %6.1f +/- %6.1f (%5.2f)",
415  h->GetName(), s->Parameter(0), s->ParError(0), s->Chi2()/s->Ndf());
416  }
417  if (result) result->Add(h);
418  if (gses) {
419  TObject* g = MakeGSE(h, cnt);
420  if (h->GetMarkerStyle() == 29) cnt++;
421  // Printf("Adding GSE %s -> %s", h->GetName(), g->GetName());
422  gses->Add(g);
423  }
424  }
425 }
426 
427 void
428 Combine(UShort_t flags=0x0, const char* var="none")
429 {
430  const char* fwd = "$ALICE_PHYSICS/PWGLF/FORWARD/analysis2";
431  if (gSystem->Getenv("ANA_SRC")) fwd = gSystem->Getenv("ANA_SRC");
432  CombineNS::AddPath("$HOME/GraphSysErr");
433  CombineNS::AddPath(TString::Format("%s/gse", fwd), false);
434  CombineNS::AddPath(TString::Format("%s/dndeta/tracklets", fwd));
435  if (!gROOT->GetClass("GraphSysErr")) gROOT->LoadMacro("GraphSysErr.C+g");
436 
437  UShort_t which = flags & 0x3;
438  TFile* fleft = TFile::Open(Form("partial/left_%s_0x%x.root", var,which),
439  "READ");
440  TFile* fmiddle = TFile::Open(Form("partial/middle_%s_0x%x.root",var,which),
441  "READ");
442  TFile* fright = TFile::Open(Form("partial/right_%s_0x%x.root", var,which),
443  "READ");
444 
445  TH1* cent = GetH1(fmiddle, "cent");
446  THStack* sleft = GetHS(fleft);
447  THStack* smiddle = GetHS(fmiddle);
448  THStack* sright = GetHS(fright);
449 
450  gSystem->mkdir("results",1);
451  TFile* out = TFile::Open(Form("results/combine_%s_0x%x.root", var, which),
452  "RECREATE");
453  const char* obs = "\\mathrm{d}N_{\\mathrm{ch}}/\\mathrm{d}\\eta";
454  TList* gses = new TList;
455  THStack* result = new THStack("result",
456  Form("%s\\hbox{ %s %s}",
457  obs, which == 0x3 ? "combinatorics" :
458  "injection", var));
459  Combine(sleft, smiddle, sright, result, out, gses, cent);
460  result->Write();
461  cent->Write("cent");
462 
463  if (cent) {
464  for (Int_t i = 1; i <= cent->GetNbinsX(); i++) {
465  TString name;
466  Double_t c1 = cent->GetXaxis()->GetBinLowEdge(i);
467  Double_t c2 = cent->GetXaxis()->GetBinUpEdge (i);
468  name.Form("cent%03dd%02d_%03dd%02d",
469  Int_t(c1), Int_t(c1*100)%100, Int_t(c2), Int_t(c2*100)%100);
470  TString sname(name); sname.Append("/summary");
471  sleft = GetHS(fleft, sname);
472  smiddle = GetHS(fmiddle,sname);
473  sright = GetHS(fright, sname);
474  if (!sleft || !smiddle || !sright) continue;
475  TDirectory* dir = out->mkdir(name);
476  dir->cd();
477  THStack* summary = new THStack("summary","");
478  Combine(sleft,smiddle,sright,summary, 0, 0);
479  summary->Write();
480  dir->cd("..");
481 
482  TDirectory* det = dir->mkdir("details");
483  const char* maps[] = { "realMeas", "realBg", "realSig",
484  "simMeas", "simBg", "simSig",
485  "trueGen", "alpha", "fiducial", 0 };
486  const char** pmap = maps;
487  while (*pmap) {
488  sname.Form("%s/details/%s", name.Data(), *pmap);
489  TH2* mleft = GetH2(fleft, sname);
490  TH2* mmiddle = GetH2(fmiddle,sname);
491  TH2* mright = GetH2(fright, sname);
492  if (!mleft || !mmiddle || !mright) continue;
493  CombineMap(mleft, mmiddle, mright, det);
494  pmap++;
495  }
496  sname.Form("%s/details/scalar", name.Data());
497  TH1* hleft = GetH1(fleft, sname, false);
498  TH1* hmiddle = GetH1(fmiddle,sname, false);
499  TH1* hright = GetH1(fright, sname, false);
500  if (hleft && hmiddle && hright) {
501  TH1* kHist = Combine(hleft, hmiddle, hright, det);
502  det->cd();
503  kHist->Write();
504  }
505 
506 
507  sname.Form("%s/details/deltas", name.Data());
508  sleft = GetHS(fleft, sname);
509  smiddle = GetHS(fmiddle,sname);
510  sright = GetHS(fright, sname);
511  if (!sleft || !smiddle || !sright) continue;
512  THStack* deltas = new THStack("deltas","");
513  Combine(sleft,smiddle,sright,deltas, 0, 0, 0, false);
514  det->cd();
515  deltas->Write();
516 
517  TDirectory* avg = dir->mkdir("averages");
518  avg->cd();
519  const char* avgs[] = { "realAvgMeas", "realAvgBg", "realAvgSig",
520  "simAvgMeas", "simAvgBg", "simAvgSig",
521  "truth", 0 };
522  const char** pavg = avgs;
523  while (*pavg) {
524  sname.Form("%s/averages/%s", name.Data(), *pavg);
525  hleft = GetH1(fleft, sname);
526  hmiddle = GetH1(fmiddle,sname);
527  hright = GetH1(fright, sname);
528  if (!hleft || !hmiddle || !hright) continue;
529  TH1* avgH = Combine(hleft, hmiddle, hright, avg);
530  avgH->Write();
531  pavg++;
532  }
533 
534  }
535  }
536  gSystem->mkdir("plots",1);
537  TCanvas* c = new TCanvas("c","c", cW, cH);
538  c->SetTopMargin(0.01);
539  c->SetRightMargin(0.01);
540  result->Draw("nostack");
541  result->GetHistogram()->GetYaxis()->SetTitleOffset(1.5);
542  result->GetHistogram()->SetYTitle(obs);
543  result->GetHistogram()->SetXTitle("\\eta");
544  c->Print(Form("plots/combine_%s_0x%x.png", var, which));
545 
546  out->cd();
547  if (gses) {
548  gses->SetName("container");
549  gses->Draw("quad combine stat xbase=2.2");
550  gses->Write(gses->GetName(), TObject::kSingleKey);
551  }
552  Printf("Output stored in %s", out->GetName());
553  out->Write();
554 }
555 
556 
557 
558 //____________________________________________________________________
559 //
560 // EOF
561 //
void SetSysLineColor(Int_t id, Color_t color)
Definition: GraphSysErr.C:4359
void SetYTitle(const char *title)
Definition: GraphSysErr.C:3598
double Double_t
Definition: External.C:58
void SetKey(const char *key, const char *value, Bool_t replace=false)
Definition: GraphSysErr.C:4587
TH1 * GetH1(TDirectory *dir, const char *name="result", Bool_t verbose=true)
Definition: Combine.C:230
void SetPointError(Int_t i, Double_t ex)
Definition: GraphSysErr.C:3468
TSystem * gSystem
void SetSysError(Int_t id, Double_t eyl, Double_t eyh)
Definition: GraphSysErr.C:3528
TH2 * GetH2(TDirectory *dir, const char *name="result", Bool_t verbose=true)
Definition: Combine.C:235
void AddPath(const TString &dir, Bool_t prepend=true)
Definition: Combine.C:31
void SetCommonSumLineColor(Color_t color)
Definition: GraphSysErr.C:4503
TCanvas * c
Definition: TestFitELoss.C:172
void AddQualifier(const TString &key, const TString &value, Bool_t replace=false)
Definition: GraphSysErr.C:4759
const char * obs
Definition: Compare.C:20
void SetCommonSumOption(EDrawOption_t opt)
Definition: GraphSysErr.C:4491
const Bool_t kCombineLoaded
Definition: Combine.C:24
Double_t EtaSysEval(Double_t x, Double_t sMin, Double_t sMax)
Definition: Combine.C:88
void SetStatError(Int_t i, Double_t ey)
Definition: GraphSysErr.C:3505
Double_t SysEval(Double_t x, Double_t sMin, Double_t sMax, Double_t xMax)
Definition: Combine.C:79
void SetPoint(Int_t i, Double_t x, Double_t y)
Definition: GraphSysErr.C:3457
void SetTitle(const char *name)
Definition: GraphSysErr.C:3576
Int_t cH
Definition: Combine.C:26
UInt_t DefineCommon(const char *title, Bool_t relative, Double_t ey, EDrawOption_t option=kFill)
Definition: GraphSysErr.C:3350
int Int_t
Definition: External.C:63
UInt_t DeclarePoint2Point(const char *title, Bool_t relative, EDrawOption_t option=kBar)
Definition: GraphSysErr.C:3393
void SetDataOption(EDrawOption_t opt)
Definition: GraphSysErr.C:3586
Definition: External.C:228
void SetSysFillColor(Int_t id, Color_t color)
Definition: GraphSysErr.C:4395
An (X,Y) graph with configurable errors.
TH1 * Combine(TH1 *left, TH1 *middle, TH1 *right, TDirectory *out, Bool_t cutAtTwo=true)
Definition: Combine.C:241
Double_t CSysEval(Double_t x, Double_t sMin, Double_t sMax)
Definition: Combine.C:84
Int_t cW
Definition: Combine.C:25
void SetSumOption(EDrawOption_t opt)
Definition: GraphSysErr.C:4449
Int_t MakeP2P(TObject *o, const char *name, Color_t c)
Definition: Combine.C:69
const char * fwd
TObject * MakeGSE(TH1 *g, Int_t bin)
Definition: Combine.C:102
Definition: External.C:220
void CombineMap(TH2 *sleft, TH2 *smiddle, TH2 *sright, TDirectory *out)
Definition: Combine.C:326
unsigned short UShort_t
Definition: External.C:28
TObject * GetO(TDirectory *dir, const char *name="result", TClass *cls=0, Bool_t verbose=true)
Definition: Combine.C:192
void SetSumFillColor(Color_t color)
Definition: GraphSysErr.C:4479
TList * GetHists(UShort_t flags, const char *var, const char *stackName="result", const char *sub="")
Definition: Compare.C:81
bool Bool_t
Definition: External.C:53
void SetSumLineColor(Color_t color)
Definition: GraphSysErr.C:4461
void SetXTitle(const char *title)
Definition: GraphSysErr.C:3592
void SetCommonSumFillColor(Color_t color)
Definition: GraphSysErr.C:4521
Definition: External.C:196
void MakeCommon(TObject *o, const char *name, Double_t val, Color_t c)
Definition: Combine.C:52
THStack * GetHS(TDirectory *dir, const char *name="result", Bool_t verbose=true)
Definition: Combine.C:225
TDirectoryFile * dir