ROOT logo
/**
 * @file   DrawMCResult.C
 * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
 * @date   Thu Jul  7 10:57:01 2011
 * 
 * @brief  Script to draw steps (deprecated version - use DrawSteps.C)
 * 
 * 
 * @deprecated Use DrawSteps.C instead
 * @ingroup pwglf_forward_scripts_qa
 */
/** 
 * 
 * 
 * @param forward Forward folder
 * @param sub     Sub-folder to get
 * @param name    Name of stack
 * 
 * @return Stack, or null
 *
 * @deprecated Use DrawSteps.C instead
 * @ingroup pwglf_forward_scripts_qa
 */
THStack*
GetStack(const TList& forward,  const char* sub, const char* name)
{
  TList* lsub = static_cast<TList*>(forward.FindObject(sub));
  if (!lsub) { 
    Warning("GetStack", "Sub list %s not found in %s", sub, forward.GetName());
    return 0;
  }
  THStack* ret = static_cast<THStack*>(lsub->FindObject(name));
  if (!ret) 
    Warning("GetStack" "Stack %s not found in %s", name, sub);
  return ret;
}

/** 
 * Rebin a histogram
 * 
 * @param h      Histogram
 * @param rebin  Rebinning factor
 * 
 * @return Pointer to histogram
 *
 * @deprecated Use DrawSteps.C instead
 * @ingroup pwglf_forward_scripts_qa
 */
TH1* 
Rebin(TH1* h, Int_t rebin)
{
  if (rebin <= 1) return h;
  h->Rebin(rebin);
  h->Scale(1. / rebin);
  return h;
}

/** 
 * Take ratio of two histograms
 * 
 * @param h1  Numerator
 * @param h2  Denominator
 * 
 * @return Newly allocated histogram containg ratio
 *
 * @deprecated Use DrawSteps.C instead
 * @ingroup pwglf_forward_scripts_qa
 */
TH1*
Ratio(const TH1* h1, const TH1* h2)
{
  if (!h1) return;
  if (!h2) return;
  
  TH1* copy = static_cast<TH1*>(h2->Clone("tmp"));
  copy->SetName(Form("%s_%s", h2->GetName(), h1->GetName()));
  copy->SetTitle(Form("%s/%s", h2->GetTitle(), h1->GetTitle()));
  copy->SetDirectory(0);
  copy->Divide(h1);

  return copy;
}
/** 
 * Take ratio of histograms in stacks
 * 
 * @param r   Return stack of ratios
 * @param h1  Numerators
 * @param h2  Denominators
 * 
 * @return How many histograms in the return stack
 *
 * @deprecated Use DrawSteps.C instead
 * @ingroup pwglf_forward_scripts_qa
 */
Int_t 
Ratio(THStack* r, const THStack* h1, const THStack* h2)
{
  if (!h1) return 0;
  if (!h2) return 0;

  int n1 = h1->GetHists()->GetEntries();
  int n2 = h2->GetHists()->GetEntries();
  int nH = 0;
  for (int i = 0; i < n1 && i < n2; i++) { 
    TH1* hh1 = static_cast<TH1*>(h1->GetHists()->At(i));
    TH1* hh2 = static_cast<TH1*>(h2->GetHists()->At(i));
    TH1* h   = Ratio(hh1, hh2);
    if (!h) continue;
    nH++;
    r->Add(h);
  }
  return nH;
}
/** 
 * Draw MC results
 * 
 * @param filename  Input file name
 * @param rebin     Rebinning factor
 * @param ratios    Whether to show ratios
 *
 * @deprecated Use DrawSteps.C instead
 * @ingroup pwglf_forward_scripts_qa
 */
void
DrawMCResult(const char* filename="forward.root", Int_t rebin=1,
	     Bool_t ratios=true)
{
  gStyle->SetPalette(1);
  gStyle->SetOptFit(0);
  gStyle->SetOptStat(0);

  TFile* file = TFile::Open(filename, "READ");
  if (!file) { 
    Error("DrawMCResult", "failed to open %s", filename);
    return;
  }

  TList* forward = static_cast<TList*>(file->Get("Forward"));
  if (!forward) { 
    Error("DrawMCResult", "List Forward not found in %s", filename);
    return;
  }
  THStack* res    = GetStack(*forward, "ringResults", "all");
  THStack* mcRes  = GetStack(*forward, "mcRingResults", "all");
  THStack* deltas = GetStack(*forward, "fmdSharingFilter", "sums");
  THStack* nchs   = GetStack(*forward, "fmdDensityCalculator", "sums");
  THStack* prims  = GetStack(*forward, "fmdCorrector", "sums");
  
  TH1* sumEta = static_cast<TH1*>(forward->FindObject("mcSumEta"));
  if (!sumEta) { 
    Warning("DrawMCResults", "mcSumEta not found in Forward");
  }


  gStyle->SetTitleBorderSize(0);
  gStyle->SetTitleFillColor(0);
  gStyle->SetTitleStyle(0);
  // gStyle->SetTitleColor(kBlack);


  TCanvas* c = new TCanvas("c", "C", 900, 700);
  c->SetFillColor(0);
  c->SetBorderSize(0);
  c->SetTopMargin(0.05);
  c->SetRightMargin(0.05);

  Double_t y1 = (ratios ? .3 : 0);
  TPad* p1 = new TPad("p1", "p1", 0, y1, 1, 1, 0, 0, 0); 
  p1->SetBottomMargin(ratios ? 0.01 : .10);
  p1->SetFillColor(0);
  p1->SetBorderSize(0);
  p1->SetTopMargin(0.05);
  p1->SetRightMargin(0.05);
  p1->Draw();
  p1->cd();

  THStack* all = new THStack("all", "Analysis steps");
  if (res) {
    res->SetTitle("dN_{ch}/d#eta");
    TIter next(res->GetHists());
    TH1* h = 0;
    while ((h = static_cast<TH1*>(next()))) all->Add(Rebin(h,rebin));
  }
  if (mcRes) {
    mcRes->SetTitle("Track-Refs");
    TIter next(mcRes->GetHists());
    TH1* h = 0;
    while ((h = static_cast<TH1*>(next()))) all->Add(Rebin(h,rebin));
  }
  if (deltas) {
    deltas->SetTitle("#sum_{} #Delta/#Delta_{mip}");
    TIter next(deltas->GetHists());
    TH1* h = 0;
    while ((h = static_cast<TH1*>(next()))) { 
      h->SetMarkerStyle(25);
      all->Add(Rebin(h,rebin));
    }
  }
  if (nchs) {
    nchs->SetTitle("#sum_{} N_{ch,incl}");
    TIter next(nchs->GetHists());
    TH1* h = 0;
    while ((h = static_cast<TH1*>(next()))) { 
      h->SetMarkerStyle(21);
      all->Add(Rebin(h,rebin));
    }
  }
  if (prims) {
    prims->SetTitle("#sum_{} N_{ch,primary}");
    TIter next(prims->GetHists());
    TH1* h = 0;
    while ((h = static_cast<TH1*>(next()))) { 
      h->SetMarkerStyle(22);
      all->Add(Rebin(h,rebin));
    }
  }
  if (sumEta) all->Add(sumEta);
  all->Draw("nostack");
  all->GetHistogram()->SetXTitle("#eta");
  all->GetHistogram()->SetYTitle("signal");
  all->GetHistogram()->GetXaxis()->SetLabelFont(132);
  all->GetHistogram()->GetXaxis()->SetTitleFont(132);
  all->GetHistogram()->GetYaxis()->SetLabelFont(132);
  all->GetHistogram()->GetYaxis()->SetTitleFont(132);
  c->SetGridx();

  TLegend* l = new TLegend(.33, .2, .53, .9);
  TLegendEntry* e = 0;
  l->SetFillColor(0);
  l->SetFillStyle(0);
  l->SetBorderSize(0);
  l->SetNColumns(1);
  l->SetTextFont(132);
  Int_t i = 0;
  if (res) { 
    TIter next(res->GetHists());
    TH1* h = 0;
    while ((h = static_cast<TH1*>(next()))) {
      e = l->AddEntry(Form("dummy%02d", i++),h->GetTitle(),"pl");
      e->SetMarkerStyle(20);
      e->SetMarkerColor(h->GetMarkerColor());
    }
    e = l->AddEntry(Form("dummy%02d", i++),res->GetTitle(),"pl");
    e->SetMarkerStyle(20);
    e->SetMarkerColor(kBlack);
  }
  if (deltas) { 
    e = l->AddEntry(Form("dummy%02d", i++), deltas->GetTitle(),"pl");
    TH1* h = static_cast<TH1*>(deltas->GetHists()->At(0));
    e->SetMarkerStyle(h->GetMarkerStyle());
    e->SetMarkerColor(kBlack);
  }
  if (nchs) { 
    e = l->AddEntry(Form("dummy%02d",i++),nchs->GetTitle(),"pl");
    TH1* h = static_cast<TH1*>(nchs->GetHists()->At(0));
    e->SetMarkerStyle(h->GetMarkerStyle());
    e->SetMarkerColor(kBlack);
  }
  if (prims) { 
    e = l->AddEntry(Form("dummy%02d", i++), prims->GetTitle(),"pl");
    TH1* h = static_cast<TH1*>(prims->GetHists()->At(0));
    e->SetMarkerStyle(h->GetMarkerStyle());
    e->SetMarkerColor(kBlack);
  }

  if (mcRes) { 
    e = l->AddEntry(Form("dummy%02d", i++), mcRes->GetTitle(), "pl");
    TH1* h = static_cast<TH1*>(mcRes->GetHists()->At(0));
    e->SetMarkerStyle(h->GetMarkerStyle());
    e->SetMarkerColor(kBlack);
  }

  if (sumEta) l->AddEntry(sumEta);
  l->Draw();


  if (!ratios) return;

  c->cd();
  TPad* p2 = new TPad("p2", "p2", 0, 0, 1, y1, 0, 0, 0); 
  p2->SetTopMargin(0);
  p2->SetFillColor(0);
  p2->SetBorderSize(0);
  p2->SetRightMargin(0.05);
  p2->Draw();
  p2->cd();

  THStack* rs = new THStack("ratios", "Ratios");
  Int_t nDN = Ratio(rs, deltas, nchs);
  Int_t nNR = Ratio(rs, nchs, res);
  Int_t nRP = Ratio(rs, res, prims);
  rs->Draw("nostack");

  TLegend* ll = new TLegend(.38, .2, .48, .9);
  ll->SetFillColor(0);
  ll->SetFillStyle(0);
  ll->SetBorderSize(0);
  ll->SetNColumns(1);
  ll->SetTextFont(132);
  if (nDN) {
    e = ll->AddEntry("d1", Form("#frac{%s}{%s}", 
					      nchs->GetTitle(), 
					      deltas->GetTitle()), "lp");
    e->SetMarkerStyle(21);
  }
  if (nNR) {
    e = ll->AddEntry("d2", Form("#frac{%s}{%s}", res->GetTitle(), 
				nchs->GetTitle()), "lp");
    e->SetMarkerStyle(20);
  }
  if (nRP) {
    e = ll->AddEntry("d3", Form("#frac{%s}{%s}", prims->GetTitle(), 
			    res->GetTitle()), "lp");
    e->SetMarkerStyle(22);
  }
  ll->Draw();
  

}
 
//
// EOF
//
 DrawMCResult.C:1
 DrawMCResult.C:2
 DrawMCResult.C:3
 DrawMCResult.C:4
 DrawMCResult.C:5
 DrawMCResult.C:6
 DrawMCResult.C:7
 DrawMCResult.C:8
 DrawMCResult.C:9
 DrawMCResult.C:10
 DrawMCResult.C:11
 DrawMCResult.C:12
 DrawMCResult.C:13
 DrawMCResult.C:14
 DrawMCResult.C:15
 DrawMCResult.C:16
 DrawMCResult.C:17
 DrawMCResult.C:18
 DrawMCResult.C:19
 DrawMCResult.C:20
 DrawMCResult.C:21
 DrawMCResult.C:22
 DrawMCResult.C:23
 DrawMCResult.C:24
 DrawMCResult.C:25
 DrawMCResult.C:26
 DrawMCResult.C:27
 DrawMCResult.C:28
 DrawMCResult.C:29
 DrawMCResult.C:30
 DrawMCResult.C:31
 DrawMCResult.C:32
 DrawMCResult.C:33
 DrawMCResult.C:34
 DrawMCResult.C:35
 DrawMCResult.C:36
 DrawMCResult.C:37
 DrawMCResult.C:38
 DrawMCResult.C:39
 DrawMCResult.C:40
 DrawMCResult.C:41
 DrawMCResult.C:42
 DrawMCResult.C:43
 DrawMCResult.C:44
 DrawMCResult.C:45
 DrawMCResult.C:46
 DrawMCResult.C:47
 DrawMCResult.C:48
 DrawMCResult.C:49
 DrawMCResult.C:50
 DrawMCResult.C:51
 DrawMCResult.C:52
 DrawMCResult.C:53
 DrawMCResult.C:54
 DrawMCResult.C:55
 DrawMCResult.C:56
 DrawMCResult.C:57
 DrawMCResult.C:58
 DrawMCResult.C:59
 DrawMCResult.C:60
 DrawMCResult.C:61
 DrawMCResult.C:62
 DrawMCResult.C:63
 DrawMCResult.C:64
 DrawMCResult.C:65
 DrawMCResult.C:66
 DrawMCResult.C:67
 DrawMCResult.C:68
 DrawMCResult.C:69
 DrawMCResult.C:70
 DrawMCResult.C:71
 DrawMCResult.C:72
 DrawMCResult.C:73
 DrawMCResult.C:74
 DrawMCResult.C:75
 DrawMCResult.C:76
 DrawMCResult.C:77
 DrawMCResult.C:78
 DrawMCResult.C:79
 DrawMCResult.C:80
 DrawMCResult.C:81
 DrawMCResult.C:82
 DrawMCResult.C:83
 DrawMCResult.C:84
 DrawMCResult.C:85
 DrawMCResult.C:86
 DrawMCResult.C:87
 DrawMCResult.C:88
 DrawMCResult.C:89
 DrawMCResult.C:90
 DrawMCResult.C:91
 DrawMCResult.C:92
 DrawMCResult.C:93
 DrawMCResult.C:94
 DrawMCResult.C:95
 DrawMCResult.C:96
 DrawMCResult.C:97
 DrawMCResult.C:98
 DrawMCResult.C:99
 DrawMCResult.C:100
 DrawMCResult.C:101
 DrawMCResult.C:102
 DrawMCResult.C:103
 DrawMCResult.C:104
 DrawMCResult.C:105
 DrawMCResult.C:106
 DrawMCResult.C:107
 DrawMCResult.C:108
 DrawMCResult.C:109
 DrawMCResult.C:110
 DrawMCResult.C:111
 DrawMCResult.C:112
 DrawMCResult.C:113
 DrawMCResult.C:114
 DrawMCResult.C:115
 DrawMCResult.C:116
 DrawMCResult.C:117
 DrawMCResult.C:118
 DrawMCResult.C:119
 DrawMCResult.C:120
 DrawMCResult.C:121
 DrawMCResult.C:122
 DrawMCResult.C:123
 DrawMCResult.C:124
 DrawMCResult.C:125
 DrawMCResult.C:126
 DrawMCResult.C:127
 DrawMCResult.C:128
 DrawMCResult.C:129
 DrawMCResult.C:130
 DrawMCResult.C:131
 DrawMCResult.C:132
 DrawMCResult.C:133
 DrawMCResult.C:134
 DrawMCResult.C:135
 DrawMCResult.C:136
 DrawMCResult.C:137
 DrawMCResult.C:138
 DrawMCResult.C:139
 DrawMCResult.C:140
 DrawMCResult.C:141
 DrawMCResult.C:142
 DrawMCResult.C:143
 DrawMCResult.C:144
 DrawMCResult.C:145
 DrawMCResult.C:146
 DrawMCResult.C:147
 DrawMCResult.C:148
 DrawMCResult.C:149
 DrawMCResult.C:150
 DrawMCResult.C:151
 DrawMCResult.C:152
 DrawMCResult.C:153
 DrawMCResult.C:154
 DrawMCResult.C:155
 DrawMCResult.C:156
 DrawMCResult.C:157
 DrawMCResult.C:158
 DrawMCResult.C:159
 DrawMCResult.C:160
 DrawMCResult.C:161
 DrawMCResult.C:162
 DrawMCResult.C:163
 DrawMCResult.C:164
 DrawMCResult.C:165
 DrawMCResult.C:166
 DrawMCResult.C:167
 DrawMCResult.C:168
 DrawMCResult.C:169
 DrawMCResult.C:170
 DrawMCResult.C:171
 DrawMCResult.C:172
 DrawMCResult.C:173
 DrawMCResult.C:174
 DrawMCResult.C:175
 DrawMCResult.C:176
 DrawMCResult.C:177
 DrawMCResult.C:178
 DrawMCResult.C:179
 DrawMCResult.C:180
 DrawMCResult.C:181
 DrawMCResult.C:182
 DrawMCResult.C:183
 DrawMCResult.C:184
 DrawMCResult.C:185
 DrawMCResult.C:186
 DrawMCResult.C:187
 DrawMCResult.C:188
 DrawMCResult.C:189
 DrawMCResult.C:190
 DrawMCResult.C:191
 DrawMCResult.C:192
 DrawMCResult.C:193
 DrawMCResult.C:194
 DrawMCResult.C:195
 DrawMCResult.C:196
 DrawMCResult.C:197
 DrawMCResult.C:198
 DrawMCResult.C:199
 DrawMCResult.C:200
 DrawMCResult.C:201
 DrawMCResult.C:202
 DrawMCResult.C:203
 DrawMCResult.C:204
 DrawMCResult.C:205
 DrawMCResult.C:206
 DrawMCResult.C:207
 DrawMCResult.C:208
 DrawMCResult.C:209
 DrawMCResult.C:210
 DrawMCResult.C:211
 DrawMCResult.C:212
 DrawMCResult.C:213
 DrawMCResult.C:214
 DrawMCResult.C:215
 DrawMCResult.C:216
 DrawMCResult.C:217
 DrawMCResult.C:218
 DrawMCResult.C:219
 DrawMCResult.C:220
 DrawMCResult.C:221
 DrawMCResult.C:222
 DrawMCResult.C:223
 DrawMCResult.C:224
 DrawMCResult.C:225
 DrawMCResult.C:226
 DrawMCResult.C:227
 DrawMCResult.C:228
 DrawMCResult.C:229
 DrawMCResult.C:230
 DrawMCResult.C:231
 DrawMCResult.C:232
 DrawMCResult.C:233
 DrawMCResult.C:234
 DrawMCResult.C:235
 DrawMCResult.C:236
 DrawMCResult.C:237
 DrawMCResult.C:238
 DrawMCResult.C:239
 DrawMCResult.C:240
 DrawMCResult.C:241
 DrawMCResult.C:242
 DrawMCResult.C:243
 DrawMCResult.C:244
 DrawMCResult.C:245
 DrawMCResult.C:246
 DrawMCResult.C:247
 DrawMCResult.C:248
 DrawMCResult.C:249
 DrawMCResult.C:250
 DrawMCResult.C:251
 DrawMCResult.C:252
 DrawMCResult.C:253
 DrawMCResult.C:254
 DrawMCResult.C:255
 DrawMCResult.C:256
 DrawMCResult.C:257
 DrawMCResult.C:258
 DrawMCResult.C:259
 DrawMCResult.C:260
 DrawMCResult.C:261
 DrawMCResult.C:262
 DrawMCResult.C:263
 DrawMCResult.C:264
 DrawMCResult.C:265
 DrawMCResult.C:266
 DrawMCResult.C:267
 DrawMCResult.C:268
 DrawMCResult.C:269
 DrawMCResult.C:270
 DrawMCResult.C:271
 DrawMCResult.C:272
 DrawMCResult.C:273
 DrawMCResult.C:274
 DrawMCResult.C:275
 DrawMCResult.C:276
 DrawMCResult.C:277
 DrawMCResult.C:278
 DrawMCResult.C:279
 DrawMCResult.C:280
 DrawMCResult.C:281
 DrawMCResult.C:282
 DrawMCResult.C:283
 DrawMCResult.C:284
 DrawMCResult.C:285
 DrawMCResult.C:286
 DrawMCResult.C:287
 DrawMCResult.C:288
 DrawMCResult.C:289
 DrawMCResult.C:290
 DrawMCResult.C:291
 DrawMCResult.C:292
 DrawMCResult.C:293
 DrawMCResult.C:294
 DrawMCResult.C:295
 DrawMCResult.C:296
 DrawMCResult.C:297
 DrawMCResult.C:298
 DrawMCResult.C:299
 DrawMCResult.C:300
 DrawMCResult.C:301
 DrawMCResult.C:302
 DrawMCResult.C:303
 DrawMCResult.C:304
 DrawMCResult.C:305
 DrawMCResult.C:306
 DrawMCResult.C:307
 DrawMCResult.C:308
 DrawMCResult.C:309
 DrawMCResult.C:310
 DrawMCResult.C:311
 DrawMCResult.C:312
 DrawMCResult.C:313
 DrawMCResult.C:314
 DrawMCResult.C:315
 DrawMCResult.C:316
 DrawMCResult.C:317
 DrawMCResult.C:318
 DrawMCResult.C:319
 DrawMCResult.C:320
 DrawMCResult.C:321
 DrawMCResult.C:322
 DrawMCResult.C:323
 DrawMCResult.C:324