ROOT logo
const Double_t ptmin = 0.2;
const Double_t ptmax = 5.;

void DefineTPChisto(TH2 *h2, const char *yname);
void ALICEWorkInProgress(TCanvas *c, TString date = "today");
void PerformanceSpectrumUncorr(const Char_t *fname = "HFEtask.root"){

  gROOT->SetStyle("Plain");
  gStyle->SetTitleFillColor(0);
  gStyle->SetTitleBorderSize(0);
  gStyle->SetTitleX(0.1);
  gStyle->SetTitleY(0.96);

  TFile *in = TFile::Open(fname);
  TList *res = (TList *)in->Get("HFE_Results");
  TList *qa = (TList *)in->Get("HFE_QA");
  gROOT->cd();
  AliHFEcontainer *tcont = dynamic_cast<AliHFEcontainer *>(res->FindObject("trackContainer"));
  AliCFContainer *c = tcont->GetCFContainer("recTrackContReco");
  AliCFContainer *cb = tcont->GetCFContainer("hadronicBackground");

  TH1 *spec = c->Project(c->GetNStep() - 1, 0);
  spec->GetXaxis()->SetTitle("p_{T} / GeV/c");
  spec->GetYaxis()->SetTitle("#frac{dN}{dp_{T}} / (GeV/c)^{-1}");
  spec->GetXaxis()->SetRangeUser(ptmin, ptmax);
  spec->GetYaxis()->SetTitleOffset(1.1);
  spec->SetTitle();
  spec->SetStats(kFALSE);

  spec->SetLineColor(kBlue);
  spec->SetLineWidth(1);
  spec->SetMarkerColor(kBlue);
  spec->SetMarkerStyle(22);

  // Produce background subtracted spectrum
  AliCFDataGrid tracks("tracks", "track grid", *c, c->GetNStep() - 1);
  AliCFDataGrid background("background", "background grid", *cb, 1);
  tracks.ApplyBGCorrection(background);
  TH1 *spec_subtracted = tracks.Project(0);
  spec_subtracted->GetXaxis()->SetTitle("p_{T} / GeV/c");
  spec_subtracted->GetYaxis()->SetTitle("#frac{dN}{dp_{T}} / (GeV/c)^{-1}");
  spec_subtracted->GetXaxis()->SetRangeUser(ptmin, ptmax);
  spec_subtracted->GetYaxis()->SetTitleOffset(1.1);
  spec_subtracted->SetTitle();
  spec_subtracted->SetStats(kFALSE);
  spec_subtracted->SetLineColor(kRed);
  spec_subtracted->SetLineWidth(1);
  spec_subtracted->SetMarkerColor(kRed);
  spec_subtracted->SetMarkerStyle(22);

  TLegend *leg = new TLegend(0.2, 0.25, 0.4, 0.35);
  leg->SetBorderSize(0);
  leg->SetFillStyle(0);
  leg->AddEntry(spec, "Raw Spectrum", "p");
  leg->AddEntry(spec_subtracted, "Spectrum after background subtraction", "p");
 
  TCanvas *c1 = new TCanvas("cspec", "Single-inclusive electron spectrum", 1200, 750);
  c1->cd();
  c1->SetLogy();
  c1->SetGridx(kFALSE);
  c1->SetGridy(kFALSE);
  spec->Draw("ep");
  spec_subtracted->Draw("epsame");
  leg->Draw();
  ALICEWorkInProgress(c1, "today");

  // PID
  TList *pidqa = (TList *)qa->FindObject("HFEpidQA");
  AliHFEtpcPIDqa *tpcqa = (AliHFEtpcPIDqa *)pidqa->FindObject("TPCQA");
  AliHFEtofPIDqa *tofqa = (AliHFEtofPIDqa *)pidqa->FindObject("TOFQA");

  // Make Plots for TPC
  // Create histograms by projecting the THnSparse
  TH2 *hTPCall = tpcqa->MakeSpectrumdEdx(AliHFEdetPIDqa::kBeforePID);
  TH2 *hTPCselected = tpcqa->MakeSpectrumdEdx(AliHFEdetPIDqa::kAfterPID);
  TH2 *hTPCsigmaAll = tpcqa->MakeSpectrumNSigma(AliHFEdetPIDqa::kBeforePID);
  TH2* hTPCsigmaSelected = tpcqa->MakeSpectrumNSigma(AliHFEdetPIDqa::kAfterPID);
  // Make Plots for TOF
  TH2 *hTOFsigmaAll = tofqa->MakeSpectrumNSigma(AliHFEdetPIDqa::kBeforePID);
  TH2 *hTOFsigmaSelected = tofqa->MakeSpectrumNSigma(AliHFEdetPIDqa::kAfterPID);

  hTPCsigmaAll->SetTitle("TPC n#sigma around the electron line");
  hTPCsigmaSelected->SetTitle("TPC n#sigma around the electron line for selected tracks");
  hTOFsigmaAll->SetTitle("TOF n#sigma around the electron line");
  hTOFsigmaSelected->SetTitle("TOF n#sigma around the electron line for selected tracks");
  DefineTPChisto(hTPCall, "TPC Signal / a.u");
  DefineTPChisto(hTPCselected, "TPC Signal / a.u.");
  DefineTPChisto(hTPCsigmaAll, "TPC Sigma");
  DefineTPChisto(hTPCsigmaSelected, "TPC Sigma");

  // Also make nice histograms for TOF
  DefineTPChisto(hTOFsigmaAll, "TOF Sigma");
  DefineTPChisto(hTOFsigmaSelected, "TOF Sigma");

  // Plot them
  TCanvas *c2 = new TCanvas("cTPCall", "TPC Signal for all tracks", 640, 480);
  c2->cd();
  c2->SetGridx(kFALSE);
  c2->SetGridy(kFALSE);
  c2->SetLogx();
  c2->SetLogz();
  hTPCall->GetYaxis()->SetRangeUser(40., 100.);
  hTPCall->Draw("colz");
  ALICEWorkInProgress(c2, "today");

  TCanvas *c3 = new TCanvas("cTPCsel", "TPC Signal for selected tracks", 640, 480);
  c3->cd();
  c3->SetGridx(kFALSE);
  c3->SetGridy(kFALSE);
  c3->SetLogx();
  c3->SetLogz();
  hTPCselected->GetYaxis()->SetRangeUser(40., 100.);
  hTPCselected->Draw("colz");
  ALICEWorkInProgress(c3, "today");

  TCanvas *c4 = new TCanvas("cTPCsigAll", "TPC Sigma for all tracks", 640, 480);
  c4->cd();
  c4->SetGridx(kFALSE);
  c4->SetGridy(kFALSE);
  c4->SetLogx();
  c4->SetLogz();
  //hTPCsigmaAll->GetYaxis()->SetRangeUser(-3.5, 5.);
  hTPCsigmaAll->Draw("colz");
  ALICEWorkInProgress(c4, "today");

  TCanvas *c5 = new TCanvas("cTPCsigSel", "TPC Sigma for selected tracks", 640, 480);
  c5->cd();
  c5->SetGridx(kFALSE);
  c5->SetGridy(kFALSE);
  c5->SetLogx();
  c5->SetLogz();
  hTPCsigmaSelected->GetYaxis()->SetRangeUser(-3.5, 5.);
  hTPCsigmaSelected->Draw("colz");
  ALICEWorkInProgress(c5, "today");

  TCanvas *c6 = new TCanvas("cTOFsigAll", "TOF Sigma for all tracks", 640, 480);
  c6->cd();
  c6->SetGridx(kFALSE);
  c6->SetGridy(kFALSE);
  c6->SetLogx();
  c6->SetLogz();
  hTOFsigmaAll->Draw("colz");
  ALICEWorkInProgress(c6, "today");

  TCanvas *c7 = new TCanvas("cTOFsigSel", "TOF Sigma for selected tracks", 640, 480);
  c7->cd();
  c7->SetGridx(kFALSE);
  c7->SetGridy(kFALSE);
  c7->SetLogx();
  c7->SetLogz();
  //hTOFsigmaSelected->GetYaxis()->SetRangeUser(-3, 3);
  hTOFsigmaSelected->Draw("colz");
  ALICEWorkInProgress(c7, "today");

  TFile *output = new TFile("Performance.root", "RECREATE");
  output->cd();
  spec->Write();
  hTPCall->Write();
  hTPCselected->Write();
  hTPCsigmaAll->Write();
  hTPCsigmaSelected->Write();
  c1->Write();
  c2->Write();
  c3->Write();
  c4->Write();
  c5->Write();
  c6->Write();
  c7->Write();
  output->Close();
  delete output;
}

void DefineTPChisto(TH2 *h, const char *yaxis){
  h->SetStats(kFALSE);
  h->GetXaxis()->SetRangeUser(ptmin, ptmax);
  h->GetXaxis()->SetMoreLogLabels();
  h->GetXaxis()->SetNoExponent();
  h->GetXaxis()->SetTitle("p / GeV/c");
  h->GetYaxis()->SetTitle(yaxis);
}

void ALICEWorkInProgress(TCanvas *c,TString today){
 //date must be in the form: 04/05/2010
 if(today=="today"){
   TDatime startt;                                                                                                                                                        
   int date=startt.GetDate();

   int y=date/10000;
   int m=(date%10000)/100;
   int d=date%100;


   today="";
   today+=d;
   if(m<10)
     today.Append("/0");
   else today.Append("/");
   today+=m;
   today.Append("/");
   today+=y;  

 }
 TPad *myPadLogo = new TPad("myPadLogo", "Pad for ALICE Logo",0.67,0.65,0.82,0.89);
 //  myPadLogo->SetFillColor(2); 
 myPadLogo->SetBorderMode(0);
 myPadLogo->SetBorderSize(2);
 myPadLogo->SetFrameBorderMode(0);
 myPadLogo->SetLeftMargin(0.0);
 myPadLogo->SetTopMargin(0.0);
 myPadLogo->SetBottomMargin(0.0);
 myPadLogo->SetRightMargin(0.0);
 myPadLogo->Draw();
 myPadLogo->cd();
 TASImage *myAliceLogo = new TASImage("/u/mfasel/work/electron/Spectrum/alice_logo.png");
 myAliceLogo->Draw();
 c->cd();
 TPaveText* t1=new TPaveText(0.59,0.59,0.89,0.66,"NDC");
 t1->SetFillStyle(0);
 t1->SetBorderSize(0);
 t1->AddText(0.,0.,"ALICE Performance");
 t1->SetTextColor(kRed);
 t1->SetTextFont(42);
 t1->Draw();
 TPaveText* t2=new TPaveText(0.59,0.54,0.89,0.60,"NDC");
 t2->SetFillStyle(0);
 t2->SetBorderSize(0);
 t2->SetTextColor(kRed);
 t2->SetTextFont(52);
 t2->AddText(0.,0.,today.Data());
 t2->Draw();
}

 PerformanceSpectrumUncorr.C:1
 PerformanceSpectrumUncorr.C:2
 PerformanceSpectrumUncorr.C:3
 PerformanceSpectrumUncorr.C:4
 PerformanceSpectrumUncorr.C:5
 PerformanceSpectrumUncorr.C:6
 PerformanceSpectrumUncorr.C:7
 PerformanceSpectrumUncorr.C:8
 PerformanceSpectrumUncorr.C:9
 PerformanceSpectrumUncorr.C:10
 PerformanceSpectrumUncorr.C:11
 PerformanceSpectrumUncorr.C:12
 PerformanceSpectrumUncorr.C:13
 PerformanceSpectrumUncorr.C:14
 PerformanceSpectrumUncorr.C:15
 PerformanceSpectrumUncorr.C:16
 PerformanceSpectrumUncorr.C:17
 PerformanceSpectrumUncorr.C:18
 PerformanceSpectrumUncorr.C:19
 PerformanceSpectrumUncorr.C:20
 PerformanceSpectrumUncorr.C:21
 PerformanceSpectrumUncorr.C:22
 PerformanceSpectrumUncorr.C:23
 PerformanceSpectrumUncorr.C:24
 PerformanceSpectrumUncorr.C:25
 PerformanceSpectrumUncorr.C:26
 PerformanceSpectrumUncorr.C:27
 PerformanceSpectrumUncorr.C:28
 PerformanceSpectrumUncorr.C:29
 PerformanceSpectrumUncorr.C:30
 PerformanceSpectrumUncorr.C:31
 PerformanceSpectrumUncorr.C:32
 PerformanceSpectrumUncorr.C:33
 PerformanceSpectrumUncorr.C:34
 PerformanceSpectrumUncorr.C:35
 PerformanceSpectrumUncorr.C:36
 PerformanceSpectrumUncorr.C:37
 PerformanceSpectrumUncorr.C:38
 PerformanceSpectrumUncorr.C:39
 PerformanceSpectrumUncorr.C:40
 PerformanceSpectrumUncorr.C:41
 PerformanceSpectrumUncorr.C:42
 PerformanceSpectrumUncorr.C:43
 PerformanceSpectrumUncorr.C:44
 PerformanceSpectrumUncorr.C:45
 PerformanceSpectrumUncorr.C:46
 PerformanceSpectrumUncorr.C:47
 PerformanceSpectrumUncorr.C:48
 PerformanceSpectrumUncorr.C:49
 PerformanceSpectrumUncorr.C:50
 PerformanceSpectrumUncorr.C:51
 PerformanceSpectrumUncorr.C:52
 PerformanceSpectrumUncorr.C:53
 PerformanceSpectrumUncorr.C:54
 PerformanceSpectrumUncorr.C:55
 PerformanceSpectrumUncorr.C:56
 PerformanceSpectrumUncorr.C:57
 PerformanceSpectrumUncorr.C:58
 PerformanceSpectrumUncorr.C:59
 PerformanceSpectrumUncorr.C:60
 PerformanceSpectrumUncorr.C:61
 PerformanceSpectrumUncorr.C:62
 PerformanceSpectrumUncorr.C:63
 PerformanceSpectrumUncorr.C:64
 PerformanceSpectrumUncorr.C:65
 PerformanceSpectrumUncorr.C:66
 PerformanceSpectrumUncorr.C:67
 PerformanceSpectrumUncorr.C:68
 PerformanceSpectrumUncorr.C:69
 PerformanceSpectrumUncorr.C:70
 PerformanceSpectrumUncorr.C:71
 PerformanceSpectrumUncorr.C:72
 PerformanceSpectrumUncorr.C:73
 PerformanceSpectrumUncorr.C:74
 PerformanceSpectrumUncorr.C:75
 PerformanceSpectrumUncorr.C:76
 PerformanceSpectrumUncorr.C:77
 PerformanceSpectrumUncorr.C:78
 PerformanceSpectrumUncorr.C:79
 PerformanceSpectrumUncorr.C:80
 PerformanceSpectrumUncorr.C:81
 PerformanceSpectrumUncorr.C:82
 PerformanceSpectrumUncorr.C:83
 PerformanceSpectrumUncorr.C:84
 PerformanceSpectrumUncorr.C:85
 PerformanceSpectrumUncorr.C:86
 PerformanceSpectrumUncorr.C:87
 PerformanceSpectrumUncorr.C:88
 PerformanceSpectrumUncorr.C:89
 PerformanceSpectrumUncorr.C:90
 PerformanceSpectrumUncorr.C:91
 PerformanceSpectrumUncorr.C:92
 PerformanceSpectrumUncorr.C:93
 PerformanceSpectrumUncorr.C:94
 PerformanceSpectrumUncorr.C:95
 PerformanceSpectrumUncorr.C:96
 PerformanceSpectrumUncorr.C:97
 PerformanceSpectrumUncorr.C:98
 PerformanceSpectrumUncorr.C:99
 PerformanceSpectrumUncorr.C:100
 PerformanceSpectrumUncorr.C:101
 PerformanceSpectrumUncorr.C:102
 PerformanceSpectrumUncorr.C:103
 PerformanceSpectrumUncorr.C:104
 PerformanceSpectrumUncorr.C:105
 PerformanceSpectrumUncorr.C:106
 PerformanceSpectrumUncorr.C:107
 PerformanceSpectrumUncorr.C:108
 PerformanceSpectrumUncorr.C:109
 PerformanceSpectrumUncorr.C:110
 PerformanceSpectrumUncorr.C:111
 PerformanceSpectrumUncorr.C:112
 PerformanceSpectrumUncorr.C:113
 PerformanceSpectrumUncorr.C:114
 PerformanceSpectrumUncorr.C:115
 PerformanceSpectrumUncorr.C:116
 PerformanceSpectrumUncorr.C:117
 PerformanceSpectrumUncorr.C:118
 PerformanceSpectrumUncorr.C:119
 PerformanceSpectrumUncorr.C:120
 PerformanceSpectrumUncorr.C:121
 PerformanceSpectrumUncorr.C:122
 PerformanceSpectrumUncorr.C:123
 PerformanceSpectrumUncorr.C:124
 PerformanceSpectrumUncorr.C:125
 PerformanceSpectrumUncorr.C:126
 PerformanceSpectrumUncorr.C:127
 PerformanceSpectrumUncorr.C:128
 PerformanceSpectrumUncorr.C:129
 PerformanceSpectrumUncorr.C:130
 PerformanceSpectrumUncorr.C:131
 PerformanceSpectrumUncorr.C:132
 PerformanceSpectrumUncorr.C:133
 PerformanceSpectrumUncorr.C:134
 PerformanceSpectrumUncorr.C:135
 PerformanceSpectrumUncorr.C:136
 PerformanceSpectrumUncorr.C:137
 PerformanceSpectrumUncorr.C:138
 PerformanceSpectrumUncorr.C:139
 PerformanceSpectrumUncorr.C:140
 PerformanceSpectrumUncorr.C:141
 PerformanceSpectrumUncorr.C:142
 PerformanceSpectrumUncorr.C:143
 PerformanceSpectrumUncorr.C:144
 PerformanceSpectrumUncorr.C:145
 PerformanceSpectrumUncorr.C:146
 PerformanceSpectrumUncorr.C:147
 PerformanceSpectrumUncorr.C:148
 PerformanceSpectrumUncorr.C:149
 PerformanceSpectrumUncorr.C:150
 PerformanceSpectrumUncorr.C:151
 PerformanceSpectrumUncorr.C:152
 PerformanceSpectrumUncorr.C:153
 PerformanceSpectrumUncorr.C:154
 PerformanceSpectrumUncorr.C:155
 PerformanceSpectrumUncorr.C:156
 PerformanceSpectrumUncorr.C:157
 PerformanceSpectrumUncorr.C:158
 PerformanceSpectrumUncorr.C:159
 PerformanceSpectrumUncorr.C:160
 PerformanceSpectrumUncorr.C:161
 PerformanceSpectrumUncorr.C:162
 PerformanceSpectrumUncorr.C:163
 PerformanceSpectrumUncorr.C:164
 PerformanceSpectrumUncorr.C:165
 PerformanceSpectrumUncorr.C:166
 PerformanceSpectrumUncorr.C:167
 PerformanceSpectrumUncorr.C:168
 PerformanceSpectrumUncorr.C:169
 PerformanceSpectrumUncorr.C:170
 PerformanceSpectrumUncorr.C:171
 PerformanceSpectrumUncorr.C:172
 PerformanceSpectrumUncorr.C:173
 PerformanceSpectrumUncorr.C:174
 PerformanceSpectrumUncorr.C:175
 PerformanceSpectrumUncorr.C:176
 PerformanceSpectrumUncorr.C:177
 PerformanceSpectrumUncorr.C:178
 PerformanceSpectrumUncorr.C:179
 PerformanceSpectrumUncorr.C:180
 PerformanceSpectrumUncorr.C:181
 PerformanceSpectrumUncorr.C:182
 PerformanceSpectrumUncorr.C:183
 PerformanceSpectrumUncorr.C:184
 PerformanceSpectrumUncorr.C:185
 PerformanceSpectrumUncorr.C:186
 PerformanceSpectrumUncorr.C:187
 PerformanceSpectrumUncorr.C:188
 PerformanceSpectrumUncorr.C:189
 PerformanceSpectrumUncorr.C:190
 PerformanceSpectrumUncorr.C:191
 PerformanceSpectrumUncorr.C:192
 PerformanceSpectrumUncorr.C:193
 PerformanceSpectrumUncorr.C:194
 PerformanceSpectrumUncorr.C:195
 PerformanceSpectrumUncorr.C:196
 PerformanceSpectrumUncorr.C:197
 PerformanceSpectrumUncorr.C:198
 PerformanceSpectrumUncorr.C:199
 PerformanceSpectrumUncorr.C:200
 PerformanceSpectrumUncorr.C:201
 PerformanceSpectrumUncorr.C:202
 PerformanceSpectrumUncorr.C:203
 PerformanceSpectrumUncorr.C:204
 PerformanceSpectrumUncorr.C:205
 PerformanceSpectrumUncorr.C:206
 PerformanceSpectrumUncorr.C:207
 PerformanceSpectrumUncorr.C:208
 PerformanceSpectrumUncorr.C:209
 PerformanceSpectrumUncorr.C:210
 PerformanceSpectrumUncorr.C:211
 PerformanceSpectrumUncorr.C:212
 PerformanceSpectrumUncorr.C:213
 PerformanceSpectrumUncorr.C:214
 PerformanceSpectrumUncorr.C:215
 PerformanceSpectrumUncorr.C:216
 PerformanceSpectrumUncorr.C:217
 PerformanceSpectrumUncorr.C:218
 PerformanceSpectrumUncorr.C:219
 PerformanceSpectrumUncorr.C:220
 PerformanceSpectrumUncorr.C:221
 PerformanceSpectrumUncorr.C:222
 PerformanceSpectrumUncorr.C:223
 PerformanceSpectrumUncorr.C:224
 PerformanceSpectrumUncorr.C:225
 PerformanceSpectrumUncorr.C:226
 PerformanceSpectrumUncorr.C:227
 PerformanceSpectrumUncorr.C:228
 PerformanceSpectrumUncorr.C:229
 PerformanceSpectrumUncorr.C:230
 PerformanceSpectrumUncorr.C:231
 PerformanceSpectrumUncorr.C:232
 PerformanceSpectrumUncorr.C:233