1 #include "CommonDefs.C"
3 /**************************************************************/
4 Char_t *partChargeName[AliPID::kSPECIES][2] = {
5 "", "", "", "", "#pi^{+}", "#pi^{-}", "K^{+}", "K^{-}", "p", "#bar{p}"
7 /**************************************************************/
12 doFinalSpectra(1., "TOF_rawSpectra.root", "TOF_matchingEfficiency.root", "TOF_trackingEfficiency.root", "TOF_primaryFraction.root", "TOF_electronCorrection.root", "TOF_finalSpectra.root");
13 doFinalSpectra(1., "TOF_rawSpectra.root", "TOF_matchingEfficiency.root", "TOF_trackingEfficiency.root", "TOF_primaryFraction.root", "TOF_electronCorrection.root", "TOF_finalSpectra_centCorr.root", kFALSE);
15 doFinalRatios("TOF_finalSpectra.root", "TOF_finalRatios.root");
17 FinalSpectra_mismatchCorrected();
20 FinalSpectra_mismatchCorrected()
22 doFinalSpectra(1., "TOF_rawSpectra_mismatchCorrected.root", "TOF_matchingEfficiency_mismatchCorrected.root", "TOF_trackingEfficiency.root", "TOF_primaryFraction.root", "TOF_electronCorrection.root", "TOF_finalSpectra_mismatchCorrected.root");
23 doFinalSpectra(1., "TOF_rawSpectra_mismatchCorrected.root", "TOF_matchingEfficiency_mismatchCorrected.root", "TOF_trackingEfficiency.root", "TOF_primaryFraction.root", "TOF_electronCorrection.root", "TOF_finalSpectra_mismatchCorrected_centCorr.root", kFALSE);
25 doFinalRatios("TOF_finalSpectra_mismatchCorrected.root", "TOF_finalRatios_mismatchCorrected.root");
28 doFinalSpectra(Double_t scaleFact = 1., const Char_t *rawfilename = "TOF_rawSpectra.root", const Char_t *matchfilename = "TOF_matchingEfficiency.root", const Char_t *trackfilename = "TOF_trackingEfficiency.root", const Char_t *primaryfilename = "TOF_primaryFraction.root", const Char_t *electronfilename = "TOF_electronCorrection.root", const Char_t *outputfilename = "TOF_finalSpectra.root", Bool_t useMB = kTRUE)
31 Int_t marker[2] = {20, 25};
32 Int_t color[AliPID::kSPECIES] = {1, 1, 4, 8, 2};
34 TFile *rawfile = TFile::Open(rawfilename);
35 TFile *matchfile = TFile::Open(matchfilename);
36 TFile *trackfile = TFile::Open(trackfilename);
37 TFile *primaryfile = TFile::Open(primaryfilename);
38 TFile *electronfile = TFile::Open(electronfilename);
40 TFile *fileout = TFile::Open(outputfilename, "RECREATE");
41 TH1D *hRaw, *hMatch, *hTrack, *hPrim, *hElectron;
42 TH1D *hSpectrum[NcentralityBins+1][5][2];
44 for (Int_t icent = -1; icent < NcentralityBins; icent++)
45 for (Int_t icharge = 0; icharge < kNCharges; icharge++)
46 for (Int_t ipart = 2; ipart < AliPID::kSPECIES; ipart++) {
48 hRaw = (TH1D *)rawfile->Get(Form("hRaw_MB_%s_%s", AliPID::ParticleName(ipart), chargeName[icharge]));
50 hRaw = (TH1D *)rawfile->Get(Form("hRaw_cent%d_%s_%s", icent, AliPID::ParticleName(ipart), chargeName[icharge]));
52 printf("cannot find %s in %s\n", Form("hRaw_cent%d_%s_%s", icent, AliPID::ParticleName(ipart), chargeName[icharge]), rawfilename);
56 hMatch = (TH1D *)matchfile->Get(Form("hMatchEff_cent%d_%s_%s", icent, AliPID::ParticleName(ipart), chargeName[icharge]));
58 hMatch = (TH1D *)matchfile->Get(Form("hMatchEff_MB_%s_%s", AliPID::ParticleName(ipart), chargeName[icharge]));
60 printf("cannot find %s in %s\n", Form("hMatchEff_cent%d_%s_%s", icent, AliPID::ParticleName(ipart), chargeName[icharge]), matchfilename);
64 hTrack = (TH1D *)trackfile->Get(Form("hTrackingEff_cent%d_%s_%s", icent, AliPID::ParticleName(ipart), chargeName[icharge]));
66 hTrack = (TH1D *)trackfile->Get(Form("hTrackingEff_MB_%s_%s", AliPID::ParticleName(ipart), chargeName[icharge]));
68 printf("cannot find %s in %s\n", Form("hTrackingEff_cent%d_%s_%s", icent, AliPID::ParticleName(ipart), chargeName[icharge]), trackfilename);
71 if (useMB || icent == -1) {
72 hPrim = (TH1D *)primaryfile->Get(Form("hPrimaryFrac_MB_%s_%s", AliPID::ParticleName(ipart), chargeName[icharge]));
73 if (ipart != 3 && !hPrim) {
74 printf("cannot find %s in %s\n", Form("hPrimaryFrac_MB_%s_%s", icent, AliPID::ParticleName(ipart), chargeName[icharge]), primaryfilename);
79 hPrim = (TH1D *)primaryfile->Get(Form("hPrimaryFrac_cent%d_%s_%s", icent, AliPID::ParticleName(ipart), chargeName[icharge]));
80 if (ipart != 3 && !hPrim) {
81 printf("cannot find %s in %s\n", Form("hPrimaryFrac_cent%d_%s_%s", icent, AliPID::ParticleName(ipart), chargeName[icharge]), primaryfilename);
85 hElectron = (TH1D *)electronfile->Get("hElectronCorr_average");
87 printf("cannot find hElectronCorr_average in %s\n", electronfilename);
92 if (hPrim) hRaw->Multiply(hPrim);
93 if (ipart == 2) hRaw->Multiply(hElectron);
95 sprintf(title, "%s (MB);p_{T} (GeV/c);#frac{d^{2}N}{dy dp_{T}} (c/GeV);", partChargeName[ipart][icharge]);
97 sprintf(title, "%s (%d-%d%%);p_{T} (GeV/c);#frac{d^{2}N}{dy dp_{T}} (c/GeV);", partChargeName[ipart][icharge], centralityBin[icent], centralityBin[icent + 1]);
99 hRaw->SetName(Form("hFinal_MB_%s_%s", AliPID::ParticleName(ipart), chargeName[icharge]));
101 hRaw->SetName(Form("hFinal_cent%d_%s_%s", icent, AliPID::ParticleName(ipart), chargeName[icharge]));
102 hRaw->SetTitle(title);
103 hRaw->SetMarkerStyle(marker[icharge]);
104 hRaw->SetMarkerColor(color[ipart]);
106 hRaw->Scale(scaleFact);
109 hSpectrum[NcentralityBins][ipart][icharge] = hRaw;
111 hSpectrum[icent][ipart][icharge] = hRaw;
115 for (Int_t icent = 0; icent < NcentralityBins; icent++)
116 for (Int_t icharge = 0; icharge < kNCharges; icharge++)
117 for (Int_t ipart = 2; ipart < AliPID::kSPECIES; ipart++) {
118 hRatioMB = (TH1 *)hSpectrum[icent][ipart][icharge]->Clone(Form("hRatioMB_cent%d_%s_%s", icent, AliPID::ParticleName(ipart), chargeName[icharge]));
119 hRatioMB->Divide(hRatioMB, hSpectrum[NcentralityBins][ipart][icharge], 1., 1., "");
129 /**************************************************************/
131 doFinalRatios(const Char_t *filename = "TOF_finalSpectra.root", const Char_t *outputfilename = "TOF_finalRatios.root")
134 // printf("WARNING: skipping ratios\n");
137 Int_t marker[2] = {20, 25};
138 Int_t color[AliPID::kSPECIES] = {1, 1, 4, 8, 2};
141 TFile *filein = TFile::Open(filename);
143 TH1D *hSpectrum[NcentralityBins+1][AliPID::kSPECIES][kNCharges];
144 for (Int_t icent = 0; icent < NcentralityBins+1; icent++) {
145 for (Int_t ipart = 2; ipart < AliPID::kSPECIES; ipart++) {
146 for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
147 if (icent == NcentralityBins)
148 hSpectrum[icent][ipart][icharge] = (TH1D *)filein->Get(Form("hFinal_MB_%s_%s", AliPID::ParticleName(ipart), chargeName[icharge]));
150 hSpectrum[icent][ipart][icharge] = (TH1D *)filein->Get(Form("hFinal_cent%d_%s_%s", icent, AliPID::ParticleName(ipart), chargeName[icharge]));
156 TFile *fileout = TFile::Open(outputfilename, "RECREATE");
158 /* particle/anti-particle ratios */
160 TH1D *hPosNegRatio[NcentralityBins+1][5];
161 for (Int_t icent = 0; icent < NcentralityBins+1; icent++) {
162 for (Int_t ipart = 2; ipart < AliPID::kSPECIES; ipart++) {
163 if (!hSpectrum[icent][ipart][kNegative] ||
164 !hSpectrum[icent][ipart][kPositive]) continue;
165 hRatio = new TH1D(*hSpectrum[icent][ipart][kNegative]);
166 hRatio->Divide(hSpectrum[icent][ipart][kPositive]);
167 if (icent == NcentralityBins) {
168 hRatio->SetName(Form("hRatio_MB_%s_negative_%s_positive", AliPID::ParticleName(ipart), AliPID::ParticleName(ipart)));
169 hRatio->SetTitle(Form("%s/%s (MB);p_{T} (GeV/c);%s/%s;", partChargeName[ipart][kNegative], partChargeName[ipart][kPositive], partChargeName[ipart][kNegative], partChargeName[ipart][kPositive]));
172 hRatio->SetName(Form("hRatio_cent%d_%s_negative_%s_positive", icent, AliPID::ParticleName(ipart), AliPID::ParticleName(ipart)));
173 hRatio->SetTitle(Form("%s/%s (%d-%d%%);p_{T} (GeV/c);%s/%s;", partChargeName[ipart][kNegative], partChargeName[ipart][kPositive], (Int_t)centralityBin[icent], (Int_t)centralityBin[icent + 1], partChargeName[ipart][kNegative], partChargeName[ipart][kPositive]));
175 hRatio->SetMarkerStyle(20);
176 hRatio->SetMarkerColor(color[ipart]);
179 hPosNegRatio[icent][ipart] = hRatio;
184 for (Int_t icent = 0; icent < NcentralityBins; icent++)
185 for (Int_t ipart = 2; ipart < AliPID::kSPECIES; ipart++) {
186 hRatioMB = (TH1 *)hPosNegRatio[icent][ipart]->Clone(Form("hDoubleRatioMB_cent%d_%s_negative_%s_positive", icent, AliPID::ParticleName(ipart), AliPID::ParticleName(ipart)));
187 hRatioMB->Divide(hRatioMB, hPosNegRatio[NcentralityBins][ipart], 1., 1., "");
192 /* kaon/pion ratios */
194 TH1D *hKaToPi[NcentralityBins+1][3];
195 for (Int_t icent = 0; icent < NcentralityBins+1; icent++) {
196 for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
197 if (!hSpectrum[icent][AliPID::kKaon][icharge] ||
198 !hSpectrum[icent][AliPID::kPion][icharge]) continue;
199 hRatio = new TH1D(*hSpectrum[icent][AliPID::kKaon][icharge]);
200 hRatio->Divide(hSpectrum[icent][AliPID::kPion][icharge]);
201 if (icent == NcentralityBins) {
202 hRatio->SetName(Form("hRatio_MB_kaon_%s_pion_%s", chargeName[icharge], chargeName[icharge]));
203 hRatio->SetTitle(Form("%s/%s (MB);p_{T} (GeV/c);%s/%s;", partChargeName[AliPID::kKaon][icharge], partChargeName[AliPID::kPion][icharge], partChargeName[AliPID::kKaon][icharge], partChargeName[AliPID::kPion][icharge]));
206 hRatio->SetName(Form("hRatio_cent%d_kaon_%s_pion_%s", icent, chargeName[icharge], chargeName[icharge]));
207 hRatio->SetTitle(Form("%s/%s (%d-%d%%);p_{T} (GeV/c);%s/%s;", partChargeName[AliPID::kKaon][icharge], partChargeName[AliPID::kPion][icharge], (Int_t)centralityBin[icent], (Int_t)centralityBin[icent + 1], partChargeName[AliPID::kKaon][icharge], partChargeName[AliPID::kPion][icharge]));
209 hRatio->SetMarkerStyle(marker[icharge]);
210 hRatio->SetMarkerColor(color[AliPID::kKaon]);
213 hKaToPi[icent][icharge] = hRatio;
215 if (!hSpectrum[icent][AliPID::kKaon][kPositive] ||
216 !hSpectrum[icent][AliPID::kKaon][kNegative] ||
217 !hSpectrum[icent][AliPID::kPion][kPositive] ||
218 !hSpectrum[icent][AliPID::kPion][kNegative]) continue;
219 hSum1 = new TH1D(*hSpectrum[icent][AliPID::kKaon][kPositive]);
220 hSum1->Add(hSpectrum[icent][AliPID::kKaon][kNegative]);
221 hSum2 = new TH1D(*hSpectrum[icent][AliPID::kPion][kPositive]);
222 hSum2->Add(hSpectrum[icent][AliPID::kPion][kNegative]);
223 hRatio = new TH1D(*hSum1);
224 hRatio->Divide(hSum2);
225 if (icent == NcentralityBins) {
226 hRatio->SetName(Form("hRatio_MB_kaon_pion"));
227 hRatio->SetTitle(Form("(%s+%s)/(%s+%s) (MB);p_{T} (GeV/c);(%s+%s)/(%s+%s);", partChargeName[AliPID::kKaon][kPositive], partChargeName[AliPID::kKaon][kNegative], partChargeName[AliPID::kPion][kPositive], partChargeName[AliPID::kPion][kNegative], partChargeName[AliPID::kKaon][kPositive], partChargeName[AliPID::kKaon][kNegative], partChargeName[AliPID::kPion][kPositive], partChargeName[AliPID::kPion][kNegative]));
230 hRatio->SetName(Form("hRatio_cent%d_kaon_pion", icent));
231 hRatio->SetTitle(Form("(%s+%s)/(%s+%s) (%d-%d%%);p_{T} (GeV/c);(%s+%s)/(%s+%s);", partChargeName[AliPID::kKaon][kPositive], partChargeName[AliPID::kKaon][kNegative], partChargeName[AliPID::kPion][kPositive], partChargeName[AliPID::kPion][kNegative], (Int_t)centralityBin[icent], (Int_t)centralityBin[icent + 1], partChargeName[AliPID::kKaon][kPositive], partChargeName[AliPID::kKaon][kNegative], partChargeName[AliPID::kPion][kPositive], partChargeName[AliPID::kPion][kNegative]));
233 hRatio->SetMarkerStyle(20);
234 hRatio->SetMarkerColor(color[AliPID::kKaon]);
237 hKaToPi[icent][2] = hRatio;
240 for (Int_t icent = 0; icent < NcentralityBins; icent++) {
241 for (Int_t icharge = 0; icharge < 2; icharge++) {
242 hRatioMB = (TH1 *)hKaToPi[icent][icharge]->Clone(Form("hDoubleRatioMB_cent%d_kaon_%s_pion_%s", icent, chargeName[icharge], chargeName[icharge]));
243 hRatioMB->Divide(hRatioMB, hKaToPi[NcentralityBins][icharge], 1., 1., "");
247 hRatioMB = (TH1 *)hKaToPi[icent][2]->Clone(Form("hDoubleRatioMB_cent%d_kaon_pion", icent));
248 hRatioMB->Divide(hRatioMB, hKaToPi[NcentralityBins][2], 1., 1., "");
254 /* proton/pion ratios */
256 TH1D *hPrToPi[NcentralityBins+1][3];
257 for (Int_t icent = 0; icent < NcentralityBins+1; icent++) {
258 for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
259 if (!hSpectrum[icent][AliPID::kProton][icharge] ||
260 !hSpectrum[icent][AliPID::kPion][icharge]) continue;
261 hRatio = new TH1D(*hSpectrum[icent][AliPID::kProton][icharge]);
262 hRatio->Divide(hSpectrum[icent][AliPID::kPion][icharge]);
263 if (icent == NcentralityBins) {
264 hRatio->SetName(Form("hRatio_MB_proton_%s_pion_%s", chargeName[icharge], chargeName[icharge]));
265 hRatio->SetTitle(Form("%s/%s (MB);p_{T} (GeV/c);%s/%s;", partChargeName[AliPID::kProton][icharge], partChargeName[AliPID::kPion][icharge], partChargeName[AliPID::kProton][icharge], partChargeName[AliPID::kPion][icharge]));
268 hRatio->SetName(Form("hRatio_cent%d_proton_%s_pion_%s", icent, chargeName[icharge], chargeName[icharge]));
269 hRatio->SetTitle(Form("%s/%s (%d-%d%%);p_{T} (GeV/c);%s/%s;", partChargeName[AliPID::kProton][icharge], partChargeName[AliPID::kPion][icharge], (Int_t)centralityBin[icent], (Int_t)centralityBin[icent + 1], partChargeName[AliPID::kProton][icharge], partChargeName[AliPID::kPion][icharge]));
271 hRatio->SetMarkerStyle(marker[icharge]);
272 hRatio->SetMarkerColor(color[AliPID::kProton]);
275 hPrToPi[icent][icharge] = hRatio;
277 if (!hSpectrum[icent][AliPID::kProton][kPositive] ||
278 !hSpectrum[icent][AliPID::kProton][kNegative] ||
279 !hSpectrum[icent][AliPID::kPion][kPositive] ||
280 !hSpectrum[icent][AliPID::kPion][kNegative]) continue;
281 hSum1 = new TH1D(*hSpectrum[icent][AliPID::kProton][kPositive]);
282 hSum1->Add(hSpectrum[icent][AliPID::kProton][kNegative]);
283 hSum2 = new TH1D(*hSpectrum[icent][AliPID::kPion][kPositive]);
284 hSum2->Add(hSpectrum[icent][AliPID::kPion][kNegative]);
285 hRatio = new TH1D(*hSum1);
286 hRatio->Divide(hSum2);
287 if (icent == NcentralityBins) {
288 hRatio->SetName(Form("hRatio_MB_proton_pion"));
289 hRatio->SetTitle(Form("(%s+%s)/(%s+%s) (MB);p_{T} (GeV/c);(%s+%s)/(%s+%s);", partChargeName[AliPID::kProton][kPositive], partChargeName[AliPID::kProton][kNegative], partChargeName[AliPID::kPion][kPositive], partChargeName[AliPID::kPion][kNegative], partChargeName[AliPID::kProton][kPositive], partChargeName[AliPID::kProton][kNegative], partChargeName[AliPID::kPion][kPositive], partChargeName[AliPID::kPion][kNegative]));
292 hRatio->SetName(Form("hRatio_cent%d_proton_pion", icent));
293 hRatio->SetTitle(Form("(%s+%s)/(%s+%s) (%d-%d%%);p_{T} (GeV/c);(%s+%s)/(%s+%s);", partChargeName[AliPID::kProton][kPositive], partChargeName[AliPID::kProton][kNegative], partChargeName[AliPID::kPion][kPositive], partChargeName[AliPID::kPion][kNegative], (Int_t)centralityBin[icent], (Int_t)centralityBin[icent + 1], partChargeName[AliPID::kProton][kPositive], partChargeName[AliPID::kProton][kNegative], partChargeName[AliPID::kPion][kPositive], partChargeName[AliPID::kPion][kNegative]));
295 hRatio->SetMarkerStyle(20);
296 hRatio->SetMarkerColor(color[AliPID::kProton]);
299 hPrToPi[icent][2] = hRatio;
302 for (Int_t icent = 0; icent < NcentralityBins; icent++) {
303 for (Int_t icharge = 0; icharge < 2; icharge++) {
304 hRatioMB = (TH1 *)hPrToPi[icent][icharge]->Clone(Form("hDoubleRatioMB_cent%d_proton_%s_pion_%s", icent, chargeName[icharge], chargeName[icharge]));
305 hRatioMB->Divide(hRatioMB, hPrToPi[NcentralityBins][icharge], 1., 1., "");
309 hRatioMB = (TH1 *)hPrToPi[icent][2]->Clone(Form("hDoubleRatioMB_cent%d_proton_pion", icent));
310 hRatioMB->Divide(hRatioMB, hPrToPi[NcentralityBins][2], 1., 1., "");