ROOT logo
/* 
   // -------------------------------------------------------------------------------
   Macro to draw clusters TPC clusters 
   out of THnSparse which have been created with 

   > readClusters.C
   
   Used for the HLT-TPC cluster verification

   // -------------------------------------------------------------------------------

   Usage :
   
   aliroot -b -l -q drawClusters.C'("<FileName in results>", "<Simulation Id>", "<Simulation Version>", "<PADGROUP>",<SCALE>)'

     - PADGROUP : 
        > -1 : all pads
        >  0 : inner pad region
        >  1 : middle pad region
        >  2 : outter pad region
    
     - SCALE :
        >  0 : 
        >  1 :

   Example :	
   aliroot -b -l -q drawClusters.C'("results_recPoints_Pythia_20a.root","Pythia","20a")'

   -> Will read : 
      $CWD/results/results_friends_Pythia_20a.root

   -> Will write : 
      $CWD/results/images/xyz_Pythia_20a_all_scaled.png
      $CWD/results/images/param_Pythia_20a_all_scaled.png
      $CWD/results/rootfiles/xyz_Pythia_20a_all_scaled.root
      $CWD/results/rootfiles/param_Pythia_20a_all_scaled.root


   // -------------------------------------------------------------------------------
   
   Author : Jochen Thaeder <jochen@thaeder.de>
   
   // -------------------------------------------------------------------------------
*/

// ==================================================================================
void drawClusters( Char_t *file = "results_recPoints_20000.root",
		   Char_t *type = "Pythia", Char_t *version = "8", 
		   Int_t padGroup = -1, Bool_t bScale = kTRUE) {

  // --------------------------------------------------------
  // -- Setup
  // --------------------------------------------------------
  
  // -- Setup style
  SetupStyle();

  // -- Setup legend
  TH1F* tmp1 =  new TH1F("tmp1","",1,1,2);
  tmp1->SetLineColor(kBlack);
  TH1F* tmp2 =  new TH1F("tmp2","",1,1,2);
  tmp2->SetLineColor(kSpring);
  TH1F* tmp3 =  new TH1F("tmp3","",1,1,2);
  tmp3->SetLineColor(kRed);

  TLegend* leg = new TLegend(0.50, 0.66, 0.84, 0.89, "");
  leg->AddEntry(tmp1, "Offline Cluster","L");
  leg->AddEntry(tmp2, "HLT Cluster","L");
  leg->AddEntry(tmp3, "HLT Redux Cluster","L");
  leg->SetFillColor(kWhite);

  // -- Setup canvas
  Int_t cX = 1380;
  Int_t cY =  800;

  TH1D *hh0 = NULL;
  TH1D *hh1 = NULL;
  TH1D *hh2 = NULL;
  TH2D *hhh = NULL;

  // --------------------------------------------------------
  // -- Open file and get THnSparse
  // --------------------------------------------------------

  TFile* results = TFile::Open(Form("results/%s",file));
  
  THnSparseF* spo    = static_cast<THnSparseF*>(results->Get("spo"));
  THnSparseF* sphhw  = static_cast<THnSparseF*>(results->Get("sphhw"));
  THnSparseF* sphhwR = static_cast<THnSparseF*>(results->Get("sphhwR"));

  if (padGroup == 0) {
    spo->GetAxis(10)->SetRangeUser(-0.5,62.4);
    sphhw->GetAxis(10)->SetRangeUser(-0.5,62.4);
    sphhwR->GetAxis(10)->SetRangeUser(-0.5,62.4);
  }
  else if (padGroup == 1) {
    spo->GetAxis(10)->SetRangeUser(62.6,126.4);
    sphhw->GetAxis(10)->SetRangeUser(62.6,126.4);
    sphhwR->GetAxis(10)->SetRangeUser(62.6,126.4);
  }
  else if (padGroup == 2) {
    spo->GetAxis(10)->SetRangeUser(126.6,159.4);
    sphhw->GetAxis(10)->SetRangeUser(126.6,159.4);
    sphhwR->GetAxis(10)->SetRangeUser(126.6,159.4);
  }

  // --------------------------------------------------------
  // -- Fill Canvas 0
  // --------------------------------------------------------

  TCanvas* cs0 = new TCanvas("cs0", "all - xyz", 10, 10, cX, cY);
  cs0->Divide(3,2);

  cs0->cd(1);
  PrintHist(spo, sphhw, sphhwR, 0, "Local X", bScale);
  leg->Draw("same");

  cs0->cd(2);
  PrintHist(spo, sphhw, sphhwR, 1, "Local Y", bScale);

  cs0->cd(3);
  PrintHist(spo, sphhw, sphhwR, 2, "Local Z", bScale);

  cs0->cd(4);
  PrintHist(spo, sphhw, sphhwR, 10, "Row", bScale);

  cs0->cd(5);
  PrintHist(spo, sphhw, sphhwR, 11, "Pad", bScale);

  cs0->cd(6);
  PrintHist(spo, sphhw, sphhwR, 9, "Timebin", bScale);

  // --------------------------------------------------------
  // -- Fill Canvas 1
  // --------------------------------------------------------

  TCanvas* cs1 = new TCanvas("cs1", "all - param", 10, 10, cX, cY);
  cs1->Divide(3,2);

  cs1->cd(1);
  PrintHist(spo, sphhw, sphhwR, 12, "Sector", bScale);

  cs1->cd(2);
  gPad->SetLogy();
  PrintHist(spo, sphhw, sphhwR, 13, "Q_{tot}", bScale);

  cs1->cd(3);
  gPad->SetLogy();
  PrintHist(spo, sphhw, sphhwR, 14, "Q_{max}", bScale);
  leg->Draw("same");

  cs1->cd(4);
  gPad->SetLogy();
  PrintHist(spo, sphhw, sphhwR, 6, "#sigma Y^{2}", bScale);

  cs1->cd(5);
  gPad->SetLogy();
  PrintHist(spo, sphhw, sphhwR, 7, "#sigma Z^{2}", bScale);

  cs1->cd(6);
  gPad->SetLogy();
  PrintHist(spo, sphhw, sphhwR, 8, "Local X / Local Y", bScale);

  // --------------------------------------------------------
  // -- Write outFiles
  // --------------------------------------------------------

  gSystem->Exec("if [ ! -d ./results/image ] ; then mkdir -p results/images ; fi");
  gSystem->Exec("if [ ! -d ./results/rootfiles ] ; then mkdir -p results/rootfiles ; fi");

  TString name(Form("%s_%s",type, version));
  
  if (padGroup == -1)  
    name += "_all";
  else                 
    name += Form("_pad%d", padGroup);
  
  if (bScale == kTRUE) 
    name += "_scaled";

  cs0->SaveAs(Form("results/images/xyz_%s.png",   name.Data()));
  cs1->SaveAs(Form("results/images/param_%s.png", name.Data()));

  cs0->SaveAs(Form("results/rootfiles/xyz_%s.root",   name.Data()));
  cs1->SaveAs(Form("results/rootfiles/param_%s.root", name.Data()));

  return;
}

// -----------------------------------------------
void PrintHist(THnSparseF* spo, THnSparseF* sphhw, THnSparseF* sphhwR,
	       Int_t proj, const Char_t *title, Bool_t bScale) {
  
  TH1D *hh1 = sphhw->Projection(proj);
  if (hh1) {
    if (bScale) hh1->Scale(1./hh1->Integral());
    hh1->SetTitle(title);
    hh1->SetLineColor(kSpring);
    hh1->DrawCopy(); // drawBase
  }

  TH1D *hh0 = spo->Projection(proj);
  if (hh0) {
    if (bScale) hh0->Scale(1./hh0->Integral());
    hh0->SetTitle(title);
    hh0->SetLineColor(kBlack);
    hh0->DrawCopy("same");
  }
  
  if (hh1)
    hh1->DrawCopy("same");

  TH1D *hh2 = sphhwR->Projection(proj);
  if (hh2) {
    if (bScale) hh2->Scale(1./hh2->Integral());
    hh2->SetTitle(title);
    hh2->SetLineColor(kRed);
    hh2->DrawCopy("same");
  }
}


/*
  hhh = spo->Projection(4,3);
  hhh->SetTitle("Global X vs Global Z");
  hhh->DrawCopy();
  hhh = sphhw->Projection(4,3);
  hhh->SetLineColor(kSpring);
  hhh->DrawCopy("same");
  hhh = sphhwR->Projection(4,3);
  hhh->SetLineColor(kRed);
  hhh->DrawCopy("same");
  
  hhh = spo->Projection(5,3);
  hhh->SetTitle("Global X vs Global Y");
  hhh->DrawCopy();
  hhh = sphhw->Projection(5,3);
  hhh->SetLineColor(kSpring);
  hhh->DrawCopy("same");
  hhh = sphhwR->Projection(5,3);
  hhh->SetLineColor(kRed);
  hhh->DrawCopy("same");
  
  hhh = spo->Projection(5,4);
  hhh->SetTitle("Global Y vs Global Z");
  hhh->DrawCopy();
  hhh = sphhw->Projection(5,4);
  hhh->SetLineColor(kSpring);
  hhh->DrawCopy("same");
  hhh = sphhwR->Projection(5,4);
  hhh->SetLineColor(kRed);
  hhh->DrawCopy("same");
*/


// ==================================================================================
void SetupStyle() {
  // -- setup style
  
  gROOT->SetStyle("Plain");

  gStyle->SetHatchesSpacing(0.8);
  gStyle->SetHatchesLineWidth(1);

  gStyle->SetCanvasBorderMode(0);  
  gStyle->SetCanvasColor(10);

  gStyle->SetPadBorderMode(0);
  gStyle->SetPadColor(10);
  gStyle->SetFillStyle(1001);

  gStyle->SetFrameBorderMode(0);
  gStyle->SetFrameFillColor(10);

  gStyle->SetTitleFillColor(10);
  gStyle->SetTitleBorderSize(0);

  gStyle->SetStatColor(10);
  gStyle->SetStatBorderSize(1);

  gStyle->SetLegendBorderSize(0);

  Int_t font = 42;

  gStyle->SetDrawBorder(0);
  gStyle->SetTextFont(font);

  gStyle->SetStatFont(font);
  gStyle->SetStatFontSize(0.05);
  gStyle->SetStatX(0.97);
  gStyle->SetStatY(0.98);
  gStyle->SetStatH(0.03);
  gStyle->SetStatW(0.3);

  gStyle->SetTickLength(0.02,"xy");
  gStyle->SetEndErrorSize(3);

  gStyle->SetLabelSize(0.04,"xyz");
  gStyle->SetLabelFont(font,"xyz"); 
  gStyle->SetLabelOffset(0.01,"xyz");

  gStyle->SetTitleFont(font,"xyz");  
  gStyle->SetTitleOffset(1.3,"xyz");  
  gStyle->SetTitleSize(0.04,"xyz");  
  gStyle->SetTitleSize(0.04);  

  gStyle->SetMarkerSize(1.2); 
  gStyle->SetPalette(1,0); 

  gStyle->SetOptStat(0);
  gStyle->SetPalette(1);
  
  gStyle->SetPadTickX(1);
  gStyle->SetPadTickY(1);
  
  gStyle->SetLineWidth(1);

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