]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG2/SPECTRA/AliAnalysisTaskSEITSsaSpectra.cxx
Added a value for computin absolute resolution instead of relative one
[u/mrichter/AliRoot.git] / PWG2 / SPECTRA / AliAnalysisTaskSEITSsaSpectra.cxx
CommitLineData
36be14b3 1/**************************************************************************
2 * Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16///////////////////////////////////////////////////////////////////////////
17// AliAnalysisTaskSE for the extraction of the various histograms to
18// study the pt spectra of identified hadrons:
19// - log(dEdx)-log(dEdxBB) distributions for pions, kaons and protons in pt bins
20// - Pt distributions of pions, kaons and protons with nSigma PID
21// Authors:
22// E. Biolcati, biolcati@to.infn.it
23// L. Milano, milano@to.infn.it
24// F. Prino, prino@to.infn.it
25///////////////////////////////////////////////////////////////////////////
26
36be14b3 27#include <TH1F.h>
28#include <TRandom3.h>
29#include <TH2F.h>
30#include <TChain.h>
31#include <TNtuple.h>
32#include <TParticle.h>
33#include <Rtypes.h>
34#include "AliAnalysisTaskSE.h"
35#include "AliAnalysisManager.h"
36#include "AliAnalysisDataContainer.h"
37#include "AliESDEvent.h"
38#include "AliESDInputHandler.h"
39#include "AliESDtrack.h"
40#include "AliStack.h"
41#include "AliMCEventHandler.h"
42#include "AliMCEvent.h"
43#include "AliPhysicsSelection.h"
44#include "AliAnalysisTaskSEITSsaSpectra.h"
c841b89f 45#include "AliESDtrackCuts.h"
1f75ac7d 46#include "AliCentrality.h"
47#include "AliMultiplicity.h"
48#include "AliESDUtils.h"
98bb3219 49#include "AliITSPIDResponse.h"
36be14b3 50
51ClassImp(AliAnalysisTaskSEITSsaSpectra)
6b77d2c0 52/* $Id$ */
36be14b3 53
54//________________________________________________________________________
55AliAnalysisTaskSEITSsaSpectra::AliAnalysisTaskSEITSsaSpectra():
1f75ac7d 56AliAnalysisTaskSE("Task CFit"),
36be14b3 57 fESD(0),
7f8f788e 58 fesdTrackCutsMult(0),
36be14b3 59 fOutput(0),
60 fHistNEvents(0),
c841b89f 61 fHistMult(0),
1f75ac7d 62 fHistCen(0),
36be14b3 63 fHistNTracks(0),
c841b89f 64 fHistNTracksPos(0),
65 fHistNTracksNeg(0),
36be14b3 66 fHistDEDX(0),
67 fHistDEDXdouble(0),
68 fHistBeforeEvSel(0),
69 fHistAfterEvSel(0),
98bb3219 70 fITSPIDResponse(0),
36be14b3 71 fMinSPDPts(1),
72 fMinNdEdxSamples(3),
73 fMindEdx(0.),
c841b89f 74 fMinNSigma(1.5),
36be14b3 75 fMaxY(0.5),
c841b89f 76 fMaxChi2Clu(2.5),
36be14b3 77 fNSigmaDCAxy(7.),
78 fNSigmaDCAz(7.),
dac69cb0 79 fEtaRange(0.8),
1f75ac7d 80 fLowMult(-1),
81 fUpMult(-1),
82 fLowCentrality(-1.0),
83 fUpCentrality(-1.0),
84 fSPD(0),
85 fHImode(0),
6b77d2c0 86 fYear(2010),
36be14b3 87 fMC(kFALSE),
88 fSmearMC(kFALSE),
89 fSmearP(0.),
90 fSmeardEdx(0.),
91 fRandGener(0),
92 fFillNtuple(kFALSE),
146d18ee 93 fLowEnergypp(kFALSE),
36be14b3 94 fNtupleNSigma(0),
95 fNtupleMC(0)
96{
97 // Constructor
98 Double_t xbins[kNbins+1]={0.08,0.10,0.12,0.14,0.16,0.18,0.20,0.25,0.30,0.35,0.40,0.45,0.50,0.55,0.60,0.65,0.70,0.75,0.80,0.85,0.90,0.95,1.0};
99 for(Int_t iBin=0; iBin<kNbins+1; iBin++) fPtBinLimits[iBin]=xbins[iBin];
100 fRandGener=new TRandom3(0);
7f8f788e 101 fesdTrackCutsMult = new AliESDtrackCuts;
98bb3219 102
7f8f788e 103 // TPC
104 fesdTrackCutsMult->SetMinNClustersTPC(70);
105 fesdTrackCutsMult->SetMaxChi2PerClusterTPC(4);
106 fesdTrackCutsMult->SetAcceptKinkDaughters(kFALSE);
107 fesdTrackCutsMult->SetRequireTPCRefit(kTRUE);
108 // ITS
109 fesdTrackCutsMult->SetRequireITSRefit(kTRUE);
110 fesdTrackCutsMult->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
111 AliESDtrackCuts::kAny);
112 fesdTrackCutsMult->SetDCAToVertex2D(kFALSE);
113 fesdTrackCutsMult->SetRequireSigmaToVertex(kFALSE);
114 fesdTrackCutsMult->SetEtaRange(-0.8,+0.8);
115 fesdTrackCutsMult->SetPtRange(0.15, 1e10);
116 SetYear(2010);
36be14b3 117
118 DefineInput(0, TChain::Class());
119 DefineOutput(1, TList::Class());
120 Printf("end of AliAnalysisTaskSEITSsaSpectra");
121}
122
123//___________________________________________________________________________
124AliAnalysisTaskSEITSsaSpectra::~AliAnalysisTaskSEITSsaSpectra(){
125 // Destructor
126 if (fOutput) {
127 delete fOutput;
128 fOutput = 0;
129 }
130 if(fRandGener) delete fRandGener;
98bb3219 131 if(fITSPIDResponse) delete fITSPIDResponse;
36be14b3 132}
133
134//________________________________________________________________________
4d668cf7 135Double_t AliAnalysisTaskSEITSsaSpectra::CookdEdx(Double_t *s) const {
36be14b3 136 // truncated mean for the dEdx
137 Int_t nc=0;
138 Double_t dedx[4]={0.,0.,0.,0.};
139 for (Int_t il=0; il<4; il++) { // count good (>0) dE/dx values
140 if(s[il]>fMindEdx){
141 dedx[nc]= s[il];
142 nc++;
143 }
144 }
145 if(nc<fMinNdEdxSamples) return -1.;
146
147 Double_t tmp;
148 Int_t swap; // sort in ascending order
149 do {
150 swap=0;
151 for (Int_t i=0; i<nc-1; i++) {
152 if (dedx[i]<=dedx[i+1]) continue;
153 tmp=dedx[i];
154 dedx[i]=dedx[i+1];
155 dedx[i+1]=tmp;
156 swap++;
157 }
158 } while (swap);
159
160 Double_t sumamp=0,sumweight=0;
161 Double_t weight[4]={1.,1.,0.,0.};
162 if(nc==3) weight[1]=0.5;
163 else if(nc<3) weight[1]=0.;
164 for (Int_t i=0; i<nc; i++) {
165 sumamp+= dedx[i]*weight[i];
166 sumweight+=weight[i];
167 }
168 return sumamp/sumweight;
169}
170
171
7f8f788e 172//________________________________________________________________________
173void AliAnalysisTaskSEITSsaSpectra::SetYear(Int_t year){
174 // Set year dependent quantities
175 fYear=year;
176 if(fYear==2009){
177 fesdTrackCutsMult->SetMaxDCAToVertexXYPtDep("0.0350+0.0420/TMath::Power(pt,0.9)"); //2009 standard cut
178 fesdTrackCutsMult->SetMaxDCAToVertexZ(20); //2009 standard cut
179 }else{
180 fesdTrackCutsMult->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01"); //2010 standard cut
181 fesdTrackCutsMult->SetMaxDCAToVertexZ(2); //2010 standard cut
182 }
183}
184
36be14b3 185//________________________________________________________________________
4d668cf7 186Bool_t AliAnalysisTaskSEITSsaSpectra::DCAcut(Double_t impactXY, Double_t impactZ, Double_t pt, Bool_t optMC) const {
36be14b3 187 // cut on transverse impact parameter updaated on 20-5-2010
188 // from the study of L. Milano, F. Prino on the ITS standalone tracks
189 // using the common binning of the TPC tracks
190 Double_t xyP[3];
191 Double_t zP[3];
192 if(optMC){
6b77d2c0 193 if(fYear==2009){
194 xyP[0]=88.63; //MC LHC10a12
195 xyP[1]=19.57;
196 xyP[2]=1.65;
197 zP[0]=140.98;
198 zP[1]=62.33;
199 zP[2]=1.15;
200 }else{
201 xyP[0]=36.; //MC LHC10d1
202 xyP[1]=43.9;
203 xyP[2]=1.3;
204 zP[0]=111.9;
205 zP[1]=59.8;
206 zP[2]=1.2;
207 }
36be14b3 208 }
209 else{
6b77d2c0 210 if(fYear==2009){
211 xyP[0]=85.28;//DATA 900 GeV pass6
212 xyP[1]=25.78;
213 xyP[2]=1.55;
214 zP[0]=146.80;
215 zP[1]=70.07;
216 zP[2]=1.11;
217 }else{
218 xyP[0]=32.7;//DATA 7 TeV pass2
219 xyP[1]=44.8;
220 xyP[2]=1.3;
221 zP[0]=117.3;
222 zP[1]=66.8;
223 zP[2]=1.2;
224 }
36be14b3 225 }
226 Double_t xySigma = xyP[0] + xyP[1]/TMath::Power(TMath::Abs(pt),xyP[2]);
227 Double_t xyMax = fNSigmaDCAxy*xySigma; //in micron
228 if((TMath::Abs(impactXY)*10000)>xyMax) return kFALSE;
229
230 Double_t zSigma = zP[0] + zP[1]/TMath::Power(TMath::Abs(pt),zP[2]);
231 Double_t zMax = fNSigmaDCAz*zSigma; //in micron
232 if((TMath::Abs(impactZ)*10000)>zMax) return kFALSE;
233
234 return kTRUE;
235}
236
237//________________________________________________________________________
4d668cf7 238Double_t AliAnalysisTaskSEITSsaSpectra::Eta2y(Double_t pt, Double_t m, Double_t eta) const {
239 // convert eta to y
36be14b3 240 Double_t mt = TMath::Sqrt(m*m + pt*pt);
241 return TMath::ASinH(pt/mt*TMath::SinH(eta));
242}
243
244
36be14b3 245//________________________________________________________________________
246void AliAnalysisTaskSEITSsaSpectra::UserCreateOutputObjects(){
4d668cf7 247 // Create a TList with histograms and a TNtuple
248 // Called once
029e1796 249
36be14b3 250 fOutput = new TList();
251 fOutput->SetOwner();
252 fOutput->SetName("Spiderman");
253
146d18ee 254 fHistNEvents = new TH1F("fHistNEvents", "Number of processed events",8,-1.5,6.5);
36be14b3 255 fHistNEvents->Sumw2();
256 fHistNEvents->SetMinimum(0);
257 fOutput->Add(fHistNEvents);
258
1f75ac7d 259 fHistMult = new TH1F("fHistMult", "Event Multiplicity",3000,-0.5,2999.5);
c841b89f 260 fHistMult->Sumw2();
261 fHistMult->SetMinimum(0);
262 fOutput->Add(fHistMult);
263
1f75ac7d 264 fHistCen = new TH1F("fHistCen", "Event Centrality",101,-0.5,100.5);
265 fHistCen->Sumw2();
266 fHistCen->SetMinimum(0);
267 fOutput->Add(fHistCen);
268
36be14b3 269 fHistNTracks = new TH1F("fHistNTracks", "Number of ITSsa tracks",20,0.5,20.5);
270 fHistNTracks->Sumw2();
271 fHistNTracks->SetMinimum(0);
272 fOutput->Add(fHistNTracks);
273
c841b89f 274 fHistNTracksPos = new TH1F("fHistNTracksPos", "Number of positive ITSsa tracks",20,0.5,20.5);
275 fHistNTracksPos->Sumw2();
276 fHistNTracksPos->SetMinimum(0);
277 fOutput->Add(fHistNTracksPos);
278
279 fHistNTracksNeg = new TH1F("fHistNTracksNeg", "Number of negative ITSsa tracks",20,0.5,20.5);
280 fHistNTracksNeg->Sumw2();
281 fHistNTracksNeg->SetMinimum(0);
282 fOutput->Add(fHistNTracksNeg);
283
36be14b3 284 //binning for the histogram
285 const Int_t hnbins=400;
286 Double_t hxmin = 0.01;
287 Double_t hxmax = 10;
288 Double_t hlogxmin = TMath::Log10(hxmin);
289 Double_t hlogxmax = TMath::Log10(hxmax);
290 Double_t hbinwidth = (hlogxmax-hlogxmin)/hnbins;
291 Double_t hxbins[hnbins+1];
292 hxbins[0] = 0.01;
293 for (Int_t i=1;i<=hnbins;i++) {
294 hxbins[i] = hxmin + TMath::Power(10,hlogxmin+i*hbinwidth);
295 }
296
297 fHistDEDX = new TH2F("fHistDEDX","",hnbins,hxbins,900,0,1000);
298 fOutput->Add(fHistDEDX);
299
300 fHistDEDXdouble = new TH2F("fHistDEDXdouble","",500,-5,5,900,0,1000);
301 fOutput->Add(fHistDEDXdouble);
302
36be14b3 303 fHistBeforeEvSel = new TH1F("fHistBeforeEvSel","fHistBeforeEvSel",kNbins,fPtBinLimits);
304 fHistAfterEvSel = new TH1F("fHistAfterEvSel","fHistAfterEvSel",kNbins,fPtBinLimits);
305 fOutput->Add(fHistBeforeEvSel);
306 fOutput->Add(fHistAfterEvSel);
307
308
309
310 for(Int_t j=0;j<3;j++){
98bb3219 311
312 fHistPosNSigmaSep[j] = new TH2F(Form("fHistPosNSigmaSep%d",j),"",hnbins,hxbins,1000,-10,10);
313 fOutput->Add(fHistPosNSigmaSep[j]);
314 fHistNegNSigmaSep[j] = new TH2F(Form("fHistNegNSigmaSep%d",j),"",hnbins,hxbins,1000,-10,10);
315 fOutput->Add(fHistNegNSigmaSep[j]);
316
10ba520e 317 fHistPrimMCpos[j] = new TH1F(Form("fHistPrimMCpos%d",j),Form("fHistPrimMCpos%d",j),kNbins,fPtBinLimits);
318 fHistPrimMCneg[j] = new TH1F(Form("fHistPrimMCneg%d",j),Form("fHistPrimMCneg%d",j),kNbins,fPtBinLimits);
319 fOutput->Add(fHistPrimMCneg[j]);
320 fOutput->Add(fHistPrimMCpos[j]);
321 fHistSecStrMCpos[j] = new TH1F(Form("fHistSecStrMCpos%d",j),Form("fHistSecStrMCpos%d",j),kNbins,fPtBinLimits);
322 fHistSecStrMCneg[j] = new TH1F(Form("fHistSecStrMCneg%d",j),Form("fHistSecStrMCneg%d",j),kNbins,fPtBinLimits);
323 fOutput->Add(fHistSecStrMCneg[j]);
324 fOutput->Add(fHistSecStrMCpos[j]);
325 fHistSecMatMCpos[j] = new TH1F(Form("fHistSecMatMCpos%d",j),Form("fHistSecMatMCpos%d",j),kNbins,fPtBinLimits);
326 fHistSecMatMCneg[j] = new TH1F(Form("fHistSecMatMCneg%d",j),Form("fHistSecMatMCneg%d",j),kNbins,fPtBinLimits);
327 fOutput->Add(fHistSecMatMCneg[j]);
328 fOutput->Add(fHistSecMatMCpos[j]);
329 //
330 fHistPrimMCposBefEvSel[j] = new TH1F(Form("fHistPrimMCposBefEvSel%d",j),Form("fHistPrimMCposBefEvSel%d",j),kNbins,fPtBinLimits);
331 fHistPrimMCnegBefEvSel[j] = new TH1F(Form("fHistPrimMCnegBefEvSel%d",j),Form("fHistPrimMCnegBefEvSel%d",j),kNbins,fPtBinLimits);
332 fOutput->Add(fHistPrimMCnegBefEvSel[j]);
333 fOutput->Add(fHistPrimMCposBefEvSel[j]);
334 fHistSecStrMCposBefEvSel[j] = new TH1F(Form("fHistSecStrMCposBefEvSel%d",j),Form("fHistSecStrMCposBefEvSel%d",j),kNbins,fPtBinLimits);
335 fHistSecStrMCnegBefEvSel[j] = new TH1F(Form("fHistSecStrMCnegBefEvSel%d",j),Form("fHistSecStrMCnegBefEvSel%d",j),kNbins,fPtBinLimits);
336 fOutput->Add(fHistSecStrMCnegBefEvSel[j]);
337 fOutput->Add(fHistSecStrMCposBefEvSel[j]);
338 fHistSecMatMCposBefEvSel[j] = new TH1F(Form("fHistSecMatMCposBefEvSel%d",j),Form("fHistSecMatMCposBefEvSel%d",j),kNbins,fPtBinLimits);
339 fHistSecMatMCnegBefEvSel[j] = new TH1F(Form("fHistSecMatMCnegBefEvSel%d",j),Form("fHistSecMatMCnegBefEvSel%d",j),kNbins,fPtBinLimits);
340 fOutput->Add(fHistSecMatMCnegBefEvSel[j]);
341 fOutput->Add(fHistSecMatMCposBefEvSel[j]);
342 //
343 fHistPrimMCposReco[j] = new TH1F(Form("fHistPrimMCposReco%d",j),Form("fHistPrimMCposReco%d",j),kNbins,fPtBinLimits);
344 fHistPrimMCnegReco[j] = new TH1F(Form("fHistPrimMCnegReco%d",j),Form("fHistPrimMCnegReco%d",j),kNbins,fPtBinLimits);
345 fOutput->Add(fHistPrimMCnegReco[j]);
346 fOutput->Add(fHistPrimMCposReco[j]);
347 fHistSecStrMCposReco[j] = new TH1F(Form("fHistSecStrMCposReco%d",j),Form("fHistSecStrMCposReco%d",j),kNbins,fPtBinLimits);
348 fHistSecStrMCnegReco[j] = new TH1F(Form("fHistSecStrMCnegReco%d",j),Form("fHistSecStrMCnegReco%d",j),kNbins,fPtBinLimits);
349 fOutput->Add(fHistSecStrMCnegReco[j]);
350 fOutput->Add(fHistSecStrMCposReco[j]);
351 fHistSecMatMCposReco[j] = new TH1F(Form("fHistSecMatMCposReco%d",j),Form("fHistSecMatMCposReco%d",j),kNbins,fPtBinLimits);
352 fHistSecMatMCnegReco[j] = new TH1F(Form("fHistSecMatMCnegReco%d",j),Form("fHistSecMatMCnegReco%d",j),kNbins,fPtBinLimits);
353 fOutput->Add(fHistSecMatMCnegReco[j]);
354 fOutput->Add(fHistSecMatMCposReco[j]);
36be14b3 355
36be14b3 356 }
357
358 for(Int_t i=0; i<4; i++){
359 fHistCharge[i] = new TH1F(Form("fHistChargeLay%d",i),Form("fHistChargeLay%d",i),100,0,300);
360 fOutput->Add(fHistCharge[i]);
361 }
362
363 for(Int_t i=0; i<kNbins; i++){
364 fHistPosPi[i] = new TH1F(Form("fHistPosPi%d",i),Form("fHistPosPi%d",i),175,-3.5,3.5);
365 fHistPosK[i] = new TH1F(Form("fHistPosK%d",i),Form("fHistPosK%d",i),175,-3.5,3.5);
366 fHistPosP[i] = new TH1F(Form("fHistPosP%d",i),Form("fHistPosP%d",i),175,-3.5,3.5);
367 fHistNegPi[i] = new TH1F(Form("fHistNegPi%d",i),Form("fHistNegPi%d",i),175,-3.5,3.5);
368 fHistNegK[i] = new TH1F(Form("fHistNegK%d",i),Form("fHistNegK%d",i),175,-3.5,3.5);
369 fHistNegP[i] = new TH1F(Form("fHistNegP%d",i),Form("fHistNegP%d",i),175,-3.5,3.5);
370
10ba520e 371 fHistDCAPosPi[i] = new TH1F(Form("fHistDCAPosPi%d",i),Form("fHistDCAPosPi%d",i),2000,-1,1); //DCA distr. with NSigma PID
36be14b3 372 fHistDCAPosK[i] = new TH1F(Form("fHistDCAPosK%d",i),Form("fHistDCAPosK%d",i),2000,-1,1);
373 fHistDCAPosP[i] = new TH1F(Form("fHistDCAPosP%d",i),Form("fHistDCAPosP%d",i),2000,-1,1);
374 fHistDCANegPi[i] = new TH1F(Form("fHistDCANegPi%d",i),Form("fHistDCANegPi%d",i),2000,-1,1);
375 fHistDCANegK[i] = new TH1F(Form("fHistDCANegK%d",i),Form("fHistDCANegK%d",i),2000,-1,1);
376 fHistDCANegP[i] = new TH1F(Form("fHistDCANegP%d",i),Form("fHistDCANegP%d",i),2000,-1,1);
377
10ba520e 378 fHistMCPrimDCAPosPi[i] = new TH1F(Form("fHistMCPrimDCAPosPi%d",i),Form("fHistMCPrimDCAPosPi%d",i),2000,-1,1); //DCA distr. with MC truth
379 fHistMCPrimDCAPosK[i] = new TH1F(Form("fHistMCPrimDCAPosK%d",i),Form("fHistMCPrimDCAPosK%d",i),2000,-1,1);
380 fHistMCPrimDCAPosP[i] = new TH1F(Form("fHistMCPrimDCAPosP%d",i),Form("fHistMCPrimDCAPosP%d",i),2000,-1,1);
381 fHistMCPrimDCANegPi[i] = new TH1F(Form("fHistMCPrimDCANegPi%d",i),Form("fHistMCPrimDCANegPi%d",i),2000,-1,1);
382 fHistMCPrimDCANegK[i] = new TH1F(Form("fHistMCPrimDCANegK%d",i),Form("fHistMCPrimDCANegK%d",i),2000,-1,1);
383 fHistMCPrimDCANegP[i] = new TH1F(Form("fHistMCPrimDCANegP%d",i),Form("fHistMCPrimDCANegP%d",i),2000,-1,1);
384
385 fHistMCSecStDCAPosPi[i] = new TH1F(Form("fHistMCSecStDCAPosPi%d",i),Form("fHistMCSecStDCAPosPi%d",i),2000,-1,1); //DCA distr. with MC truth
386 fHistMCSecStDCAPosK[i] = new TH1F(Form("fHistMCSecStDCAPosK%d",i),Form("fHistMCSecStDCAPosK%d",i),2000,-1,1);
387 fHistMCSecStDCAPosP[i] = new TH1F(Form("fHistMCSecStDCAPosP%d",i),Form("fHistMCSecStDCAPosP%d",i),2000,-1,1);
388 fHistMCSecStDCANegPi[i] = new TH1F(Form("fHistMCSecStDCANegPi%d",i),Form("fHistMCSecStDCANegPi%d",i),2000,-1,1);
389 fHistMCSecStDCANegK[i] = new TH1F(Form("fHistMCSecStDCANegK%d",i),Form("fHistMCSecStDCANegK%d",i),2000,-1,1);
390 fHistMCSecStDCANegP[i] = new TH1F(Form("fHistMCSecStDCANegP%d",i),Form("fHistMCSecStDCANegP%d",i),2000,-1,1);
391
392 fHistMCSecMatDCAPosPi[i] = new TH1F(Form("fHistMCSecMatDCAPosPi%d",i),Form("fHistMCSecMatDCAPosPi%d",i),2000,-1,1); //DCA distr. with MC truth
393 fHistMCSecMatDCAPosK[i] = new TH1F(Form("fHistMCSecMatDCAPosK%d",i),Form("fHistMCSecMatDCAPosK%d",i),2000,-1,1);
394 fHistMCSecMatDCAPosP[i] = new TH1F(Form("fHistMCSecMatDCAPosP%d",i),Form("fHistMCSecMatDCAPosP%d",i),2000,-1,1);
395 fHistMCSecMatDCANegPi[i] = new TH1F(Form("fHistMCSecMatDCANegPi%d",i),Form("fHistMCSecMatDCANegPi%d",i),2000,-1,1);
396 fHistMCSecMatDCANegK[i] = new TH1F(Form("fHistMCSecMatDCANegK%d",i),Form("fHistMCSecMatDCANegK%d",i),2000,-1,1);
397 fHistMCSecMatDCANegP[i] = new TH1F(Form("fHistMCSecMatDCANegP%d",i),Form("fHistMCSecMatDCANegP%d",i),2000,-1,1);
398
16c730d4 399 fHistMCPosOtherHypPion[i] = new TH1F(Form("fHistMCPosOtherHypPion%d",i),Form("fHistMCPosOtherHypPion%d",i),175,-3.5,3.5); //MC truth
400 fHistMCPosOtherHypKaon[i] = new TH1F(Form("fHistMCPosOtherHypKaon%d",i),Form("fHistMCPosOtherHypKaon%d",i),175,-3.5,3.5);
401 fHistMCPosOtherHypProton[i] = new TH1F(Form("fHistMCPosOtherHypProton%d",i),Form("fHistMCPosOtherHypProton%d",i),175,-3.5,3.5);
402 fHistMCPosElHypPion[i] = new TH1F(Form("fHistMCPosElHypPion%d",i),Form("fHistMCPosElHypPion%d",i),175,-3.5,3.5);
403 fHistMCPosElHypKaon[i] = new TH1F(Form("fHistMCPosElHypKaon%d",i),Form("fHistMCPosElHypKaon%d",i),175,-3.5,3.5);
404 fHistMCPosElHypProton[i] = new TH1F(Form("fHistMCPosElHypProton%d",i),Form("fHistMCPosElHypProton%d",i),175,-3.5,3.5);
405 fHistMCPosPiHypPion[i] = new TH1F(Form("fHistMCPosPiHypPion%d",i),Form("fHistMCPosPiHypPion%d",i),175,-3.5,3.5);
e6076bb8 406 fHistMCPosPiHypKaon[i] = new TH1F(Form("fHistMCPosPiHypKaon%d",i),Form("fHistMCPosPiHypKaon%d",i),175,-3.5,3.5);
407 fHistMCPosPiHypProton[i] = new TH1F(Form("fHistMCPosPiHypProton%d",i),Form("fHistMCPosPiHypProton%d",i),175,-3.5,3.5);
408 fHistMCPosKHypPion[i] = new TH1F(Form("fHistMCPosKHypPion%d",i),Form("fHistMCPosKHypPion%d",i),175,-3.5,3.5);
409 fHistMCPosKHypKaon[i] = new TH1F(Form("fHistMCPosKHypKaon%d",i),Form("fHistMCPosKHypKaon%d",i),175,-3.5,3.5);
410 fHistMCPosKHypProton[i] = new TH1F(Form("fHistMCPosKHypProton%d",i),Form("fHistMCPosKHypProton%d",i),175,-3.5,3.5);
411 fHistMCPosPHypPion[i] = new TH1F(Form("fHistMCPosPHypPion%d",i),Form("fHistMCPosPHypPion%d",i),175,-3.5,3.5);
412 fHistMCPosPHypKaon[i] = new TH1F(Form("fHistMCPosPHypKaon%d",i),Form("fHistMCPosPHypKaon%d",i),175,-3.5,3.5);
413 fHistMCPosPHypProton[i] = new TH1F(Form("fHistMCPosPHypProton%d",i),Form("fHistMCPosPHypProton%d",i),175,-3.5,3.5);
414
16c730d4 415 fHistMCNegOtherHypPion[i] = new TH1F(Form("fHistMCNegOtherHypPion%d",i),Form("fHistMCNegOtherHypPion%d",i),175,-3.5,3.5); //MC truth
416 fHistMCNegOtherHypKaon[i] = new TH1F(Form("fHistMCNegOtherHypKaon%d",i),Form("fHistMCNegOtherHypKaon%d",i),175,-3.5,3.5);
417 fHistMCNegOtherHypProton[i] = new TH1F(Form("fHistMCNegOtherHypProton%d",i),Form("fHistMCNegOtherHypProton%d",i),175,-3.5,3.5);
418 fHistMCNegElHypPion[i] = new TH1F(Form("fHistMCNegElHypPion%d",i),Form("fHistMCNegElHypPion%d",i),175,-3.5,3.5);
419 fHistMCNegElHypKaon[i] = new TH1F(Form("fHistMCNegElHypKaon%d",i),Form("fHistMCNegElHypKaon%d",i),175,-3.5,3.5);
420 fHistMCNegElHypProton[i] = new TH1F(Form("fHistMCNegElHypProton%d",i),Form("fHistMCNegElHypProton%d",i),175,-3.5,3.5);
421 fHistMCNegPiHypPion[i] = new TH1F(Form("fHistMCNegPiHypPion%d",i),Form("fHistMCNegPiHypPion%d",i),175,-3.5,3.5);
e6076bb8 422 fHistMCNegPiHypKaon[i] = new TH1F(Form("fHistMCNegPiHypKaon%d",i),Form("fHistMCNegPiHypKaon%d",i),175,-3.5,3.5);
423 fHistMCNegPiHypProton[i] = new TH1F(Form("fHistMCNegPiHypProton%d",i),Form("fHistMCNegPiHypProton%d",i),175,-3.5,3.5);
424 fHistMCNegKHypPion[i] = new TH1F(Form("fHistMCNegKHypPion%d",i),Form("fHistMCNegKHypPion%d",i),175,-3.5,3.5);
425 fHistMCNegKHypKaon[i] = new TH1F(Form("fHistMCNegKHypKaon%d",i),Form("fHistMCNegKHypKaon%d",i),175,-3.5,3.5);
426 fHistMCNegKHypProton[i] = new TH1F(Form("fHistMCNegKHypProton%d",i),Form("fHistMCNegKHypProton%d",i),175,-3.5,3.5);
427 fHistMCNegPHypPion[i] = new TH1F(Form("fHistMCNegPHypPion%d",i),Form("fHistMCNegPHypPion%d",i),175,-3.5,3.5);
428 fHistMCNegPHypKaon[i] = new TH1F(Form("fHistMCNegPHypKaon%d",i),Form("fHistMCNegPHypKaon%d",i),175,-3.5,3.5);
429 fHistMCNegPHypProton[i] = new TH1F(Form("fHistMCNegPHypProton%d",i),Form("fHistMCNegPHypProton%d",i),175,-3.5,3.5);
430
431
36be14b3 432 fOutput->Add(fHistPosPi[i]);
433 fOutput->Add(fHistPosK[i]);
434 fOutput->Add(fHistPosP[i]);
435 fOutput->Add(fHistNegPi[i]);
436 fOutput->Add(fHistNegK[i]);
437 fOutput->Add(fHistNegP[i]);
438
6b77d2c0 439 fOutput->Add(fHistDCAPosPi[i]); //DCA distr
36be14b3 440 fOutput->Add(fHistDCAPosK[i]);
441 fOutput->Add(fHistDCAPosP[i]);
442 fOutput->Add(fHistDCANegPi[i]);
443 fOutput->Add(fHistDCANegK[i]);
444 fOutput->Add(fHistDCANegP[i]);
445
10ba520e 446 fOutput->Add(fHistMCPrimDCAPosPi[i]);//DCA distr.
447 fOutput->Add(fHistMCPrimDCAPosK[i]);
448 fOutput->Add(fHistMCPrimDCAPosP[i]);
449 fOutput->Add(fHistMCPrimDCANegPi[i]);
450 fOutput->Add(fHistMCPrimDCANegK[i]);
451 fOutput->Add(fHistMCPrimDCANegP[i]);
452
453 fOutput->Add(fHistMCSecStDCAPosPi[i]);//DCA distr.
454 fOutput->Add(fHistMCSecStDCAPosK[i]);
455 fOutput->Add(fHistMCSecStDCAPosP[i]);
456 fOutput->Add(fHistMCSecStDCANegPi[i]);
457 fOutput->Add(fHistMCSecStDCANegK[i]);
458 fOutput->Add(fHistMCSecStDCANegP[i]);
459
460 fOutput->Add(fHistMCSecMatDCAPosPi[i]);//DCA distr.
461 fOutput->Add(fHistMCSecMatDCAPosK[i]);
462 fOutput->Add(fHistMCSecMatDCAPosP[i]);
463 fOutput->Add(fHistMCSecMatDCANegPi[i]);
464 fOutput->Add(fHistMCSecMatDCANegK[i]);
465 fOutput->Add(fHistMCSecMatDCANegP[i]);
466
16c730d4 467 fOutput->Add(fHistMCPosOtherHypPion[i]);//MC truth
468 fOutput->Add(fHistMCPosOtherHypKaon[i]);
469 fOutput->Add(fHistMCPosOtherHypProton[i]);
470 fOutput->Add(fHistMCPosElHypPion[i]);
471 fOutput->Add(fHistMCPosElHypKaon[i]);
472 fOutput->Add(fHistMCPosElHypProton[i]);
473 fOutput->Add(fHistMCPosPiHypPion[i]);
e6076bb8 474 fOutput->Add(fHistMCPosPiHypKaon[i]);
475 fOutput->Add(fHistMCPosPiHypProton[i]);
476 fOutput->Add(fHistMCPosKHypPion[i]);
477 fOutput->Add(fHistMCPosKHypKaon[i]);
478 fOutput->Add(fHistMCPosKHypProton[i]);
479 fOutput->Add(fHistMCPosPHypPion[i]);
480 fOutput->Add(fHistMCPosPHypKaon[i]);
481 fOutput->Add(fHistMCPosPHypProton[i]);
482
16c730d4 483 fOutput->Add(fHistMCNegOtherHypPion[i]);//MC truth
484 fOutput->Add(fHistMCNegOtherHypKaon[i]);
485 fOutput->Add(fHistMCNegOtherHypProton[i]);
486 fOutput->Add(fHistMCNegElHypPion[i]);
487 fOutput->Add(fHistMCNegElHypKaon[i]);
488 fOutput->Add(fHistMCNegElHypProton[i]);
489 fOutput->Add(fHistMCNegPiHypPion[i]);
e6076bb8 490 fOutput->Add(fHistMCNegPiHypKaon[i]);
491 fOutput->Add(fHistMCNegPiHypProton[i]);
492 fOutput->Add(fHistMCNegKHypPion[i]);
493 fOutput->Add(fHistMCNegKHypKaon[i]);
494 fOutput->Add(fHistMCNegKHypProton[i]);
495 fOutput->Add(fHistMCNegPHypPion[i]);
496 fOutput->Add(fHistMCNegPHypKaon[i]);
497 fOutput->Add(fHistMCNegPHypProton[i]);
498
36be14b3 499 }
500
501 //NSigma Histos
502 for(Int_t j=0;j<3;j++){
10ba520e 503
504 fHistPosNSigmaMean[j] = new TH1F(Form("hHistPosNSigmaMean%d",j),Form("hHistPosNSigmaMean%d",j),kNbins,fPtBinLimits);
505 fHistNegNSigmaMean[j] = new TH1F(Form("hHistNegNSigmaMean%d",j),Form("hHistNegNSigmaMean%d",j),kNbins,fPtBinLimits);
506 fHistPosNSigmaMCMean[j] = new TH1F(Form("hHistPosNSigmaMCMean%d",j),Form("hHistPosNSigmaMCMean%d",j),kNbins,fPtBinLimits);
507 fHistNegNSigmaMCMean[j] = new TH1F(Form("hHistNegNSigmaMCMean%d",j),Form("hHistNegNSigmaMCMean%d",j),kNbins,fPtBinLimits);
508 fHistPosNSigmaPrimMean[j] = new TH1F(Form("hHistPosNSigmaPrimMean%d",j),Form("hHistPosNSigmaPrimMean%d",j),kNbins,fPtBinLimits);
509 fHistNegNSigmaPrimMean[j] = new TH1F(Form("hHistNegNSigmaPrimMean%d",j),Form("hHistNegNSigmaPrimMean%d",j),kNbins,fPtBinLimits);
510 fHistPosNSigmaPrimMCMean[j] = new TH1F(Form("hHistPosNSigmaPrimMCMean%d",j),Form("hHistPosNSigmaPrimMCMean%d",j),kNbins,fPtBinLimits);
511 fHistNegNSigmaPrimMCMean[j] = new TH1F(Form("hHistNegNSigmaPrimMCMean%d",j),Form("hHistNegNSigmaPrimMCMean%d",j),kNbins,fPtBinLimits);
512 fOutput->Add(fHistPosNSigmaMean[j]);
513 fOutput->Add(fHistNegNSigmaMean[j]);
514 fOutput->Add(fHistPosNSigmaMCMean[j]);
515 fOutput->Add(fHistNegNSigmaMCMean[j]);
516 fOutput->Add(fHistPosNSigmaPrimMean[j]);
517 fOutput->Add(fHistNegNSigmaPrimMean[j]);
518 fOutput->Add(fHistPosNSigmaPrimMCMean[j]);
519 fOutput->Add(fHistNegNSigmaPrimMCMean[j]);
520
36be14b3 521 fHistPosNSigma[j] = new TH1F(Form("hHistPosNSigma%d",j),Form("hHistPosNSigma%d",j),kNbins,fPtBinLimits);
522 fHistNegNSigma[j] = new TH1F(Form("hHistNegNSigma%d",j),Form("hHistNegNSigma%d",j),kNbins,fPtBinLimits);
10ba520e 523 fHistPosNSigmaMC[j] = new TH1F(Form("hHistPosNSigmaMC%d",j),Form("hHistPosNSigmaMC%d",j),kNbins,fPtBinLimits);
524 fHistNegNSigmaMC[j] = new TH1F(Form("hHistNegNSigmaMC%d",j),Form("hHistNegNSigmaMC%d",j),kNbins,fPtBinLimits);
36be14b3 525 fHistPosNSigmaPrim[j] = new TH1F(Form("hHistPosNSigmaPrim%d",j),Form("hHistPosNSigmaPrim%d",j),kNbins,fPtBinLimits);
526 fHistNegNSigmaPrim[j] = new TH1F(Form("hHistNegNSigmaPrim%d",j),Form("hHistNegNSigmaPrim%d",j),kNbins,fPtBinLimits);
527 fHistPosNSigmaPrimMC[j] = new TH1F(Form("hHistPosNSigmaPrimMC%d",j),Form("hHistPosNSigmaPrimMC%d",j),kNbins,fPtBinLimits);
528 fHistNegNSigmaPrimMC[j] = new TH1F(Form("hHistNegNSigmaPrimMC%d",j),Form("hHistNegNSigmaPrimMC%d",j),kNbins,fPtBinLimits);
529 fOutput->Add(fHistPosNSigma[j]);
530 fOutput->Add(fHistNegNSigma[j]);
10ba520e 531 fOutput->Add(fHistPosNSigmaMC[j]);
532 fOutput->Add(fHistNegNSigmaMC[j]);
36be14b3 533 fOutput->Add(fHistPosNSigmaPrim[j]);
534 fOutput->Add(fHistNegNSigmaPrim[j]);
535 fOutput->Add(fHistPosNSigmaPrimMC[j]);
536 fOutput->Add(fHistNegNSigmaPrimMC[j]);
10ba520e 537
36be14b3 538 }
539
146d18ee 540 fNtupleNSigma = new TNtuple("fNtupleNSigma","fNtupleNSigma","p:pt:dedx:dedx3:dedx4:dedx5:dedx6:ncls:nclspid:sign:run:eta:impactXY:impactZ:isph:pdgcode:mfl:chi2ncls");
36be14b3 541 fOutput->Add(fNtupleNSigma);
542 fNtupleMC = new TNtuple("fNtupleMC","fNtupleMC","ptMC:pdgcode:signMC:etaMC:yMC:isph:evSel:run");
543 fOutput->Add(fNtupleMC);
7f8f788e 544
545 // Post output data.
546 PostData(1,fOutput);
547
36be14b3 548 Printf("end of CreateOutputObjects");
549}
550
551//________________________________________________________________________
552void AliAnalysisTaskSEITSsaSpectra::UserExec(Option_t *){
4d668cf7 553 // Main loop
554 // Called for each event
36be14b3 555
1f75ac7d 556 ///////////////////////////////////////
36be14b3 557 //variables
10ba520e 558 Float_t pdgmass[4]={0.13957,0.493677,0.938272,1.8756}; //mass for pi, K, P (Gev/c^2)
36be14b3 559 Int_t listcode[3]={211,321,2212};//code for pi, K, P (Gev/c^2)
146d18ee 560 Double_t dedxLay[4];
5c112001 561 Float_t ptMC=-999;
10ba520e 562 Int_t code=-999, signMC=-999,isph=-999,mfl=-999;
36be14b3 563 Float_t impactXY=-999, impactZ=-999;
564 Int_t evSel=1;
565 AliESDtrack* track;
566 UInt_t status;
567 AliStack* stack=0;
568 TParticle *part=0;
569 TParticlePDG *pdgPart=0;
570
36be14b3 571 /////////////////////
146d18ee 572
573 fESD=(AliESDEvent*)InputEvent();
574 if(!fESD) {
575 printf("AliAnalysisTaskSDDRP::Exec(): bad ESD\n");
576 return;
577 }
578 fHistNEvents->Fill(-1);
579
580 if(fLowEnergypp){ // remove events without SDD in pp 2.6 TeV
581 Bool_t hasSDD=kFALSE;
582 for (Int_t iTrack=0; iTrack<fESD->GetNumberOfTracks(); iTrack++) {
583 track = (AliESDtrack*)fESD->GetTrack(iTrack);
584 if (!track) continue;
585 UInt_t clumap = track->GetITSClusterMap();
586 if(clumap&4) hasSDD=kTRUE;
587 if(clumap&8) hasSDD=kTRUE;
588 if(hasSDD) break;
589 }
590 if(!hasSDD) return;
591 }
592 fHistNEvents->Fill(0);
593
594
36be14b3 595 if(fMC){
596 AliMCEventHandler* eventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
597 if (!eventHandler) {
598 Printf("ERROR: Could not retrieve MC event handler");
599 return;
600 }
601 AliMCEvent* mcEvent = eventHandler->MCEvent();
602 if (!mcEvent) {
603 Printf("ERROR: Could not retrieve MC event");
604 return;
605 }
606 stack = mcEvent->Stack();
607 if (!stack) {
608 printf("ERROR: stack not available\n");
609 return;
610 }
611 }
98bb3219 612 if(!fITSPIDResponse){
613 fITSPIDResponse=new AliITSPIDResponse(fMC);
614 }
615
146d18ee 616 //flags for MC
36be14b3 617 Int_t nTrackMC=0;
618 if(stack) nTrackMC = stack->GetNtrack();
619 const AliESDVertex *vtx = fESD->GetPrimaryVertexSPD();
1f75ac7d 620
621///////////selection of the centrality or multiplicity bin
622
623 //selection on the event centrality
624 if(fHImode){
625 if(!(fLowCentrality<0.0)&&fUpCentrality>0.0)
626 {
627 AliCentrality *centrality = fESD->GetCentrality();
628 if(!centrality->IsEventInCentralityClass(fLowCentrality,fUpCentrality,"V0M"))
629 return;
630 Printf("Centrality of the event: %.1f",centrality->GetCentralityPercentile("V0M"));
631 Printf("Centrality cut: %.1f to %.1f",fLowCentrality,fUpCentrality);
632 fHistCen->Fill(centrality->GetCentralityPercentile("V0M"));
633 }
634 }
635
636 //selection on the event multiplicity based on global tracks
637 Int_t multiplicity = fesdTrackCutsMult->CountAcceptedTracks(fESD);
638 if(!fSPD){
639 if(fLowMult>-1)
640 {
641 if(multiplicity<fLowMult)
642 return;
643 }
644 if(fUpMult>-1)
645 {
646 if(multiplicity>fUpMult)
647 return;
648 }
649
650 Printf("Multiplicity of the event (global tracks) : %i",multiplicity);
651 Printf("Multiplicity cut (global tracks) : %i to %i",fLowMult,fUpMult);
652 fHistMult->Fill(multiplicity);
653 }
654
655 //multipicity selection based on SPD
656 if(fSPD){
657 Float_t spdCorr=-1.0;
658 const AliMultiplicity *mult = fESD->GetMultiplicity();
659 Float_t nClusters[6]={0.0,0.0,0.0,0.0,0.0,0.0};
660 for(Int_t ilay=0; ilay<6; ilay++)
661 {
662 nClusters[ilay] = (Float_t)mult->GetNumberOfITSClusters(ilay);
663 }
664 spdCorr = AliESDUtils::GetCorrSPD2(nClusters[1],vtx->GetZ());
665 {
666 if(fLowMult>-1)
667 {
668 if(((Int_t)spdCorr)<fLowMult)
669 {
670 return;
671 }
672 }
673 if(fUpMult>-1)
674 {
675 if(((Int_t)spdCorr)>fUpMult)
676 {
677 return;
678 }
679 }
680 }
681
682 Printf("Multiplicity of the event (SPD) : %i",(Int_t)spdCorr);
683 Printf("Multiplicity cut (SPD) : %i to %i",fLowMult,fUpMult);
684 fHistMult->Fill(spdCorr);
685 }
686
687
36be14b3 688
689 //event selection
690 fHistNEvents->Fill(1);
691 if(!vtx)evSel=0;
692 else{
693 fHistNEvents->Fill(2);
694 if(vtx->GetNContributors()<0) evSel=0;
695 else{
696 fHistNEvents->Fill(3);
697 if(TMath::Abs(vtx->GetZv())>10) evSel=0;
698 else{
699 fHistNEvents->Fill(4);
700 if(vtx->GetZRes()>0.5) evSel=0;
701 else{
702 fHistNEvents->Fill(5);
703 if(vtx->IsFromVertexerZ() && vtx->GetDispersion()>0.03) evSel=0;
704 else fHistNEvents->Fill(6);
705 }
706 }
707 }
708 }
146d18ee 709
710
1f75ac7d 711/////first loop on stack, before event selection, filling MC ntuple
36be14b3 712
713 for(Int_t imc=0; imc<nTrackMC; imc++){
714 part = stack->Particle(imc);
10ba520e 715 isph=1;
716 if(!stack->IsPhysicalPrimary(imc)) isph=0;
36be14b3 717 pdgPart = part->GetPDG();
10ba520e 718 if(!pdgPart)continue;
36be14b3 719 if(pdgPart->Charge()==0) continue; //no neutral particles
5c112001 720 Float_t yMC=-999.;
36be14b3 721 if(part->Energy() != TMath::Abs(part->Pz())) yMC = 0.5*TMath::Log((part->Energy()+part->Pz())/(part->Energy()-part->Pz()));
722 if(TMath::Abs(yMC) > fMaxY) continue; //rapidity cut
36be14b3 723 if(pdgPart->Charge()>0) signMC=1;
724 else signMC=-1;
725 ptMC=part->Pt();
726 code=pdgPart->PdgCode();
10ba520e 727 Int_t jpart=-1;
728 for(Int_t j=0; j<3; j++){
729 if(TMath::Abs(code)==listcode[j]){
730 jpart=j;
731 break;
732 }
733 }
734 Int_t indexMoth=part->GetFirstMother();
735 if(indexMoth>=0){
736 TParticle* moth = stack->Particle(indexMoth);
737 Float_t codemoth = TMath::Abs(moth->GetPdgCode());
738 mfl = Int_t (codemoth/ TMath::Power(10, Int_t(TMath::Log10(codemoth))));
739 }
36be14b3 740
36be14b3 741 //filling MC ntuple
742 if(TMath::Abs(code)==211 || TMath::Abs(code)==321 || TMath::Abs(code)==2212){
743 Float_t xntMC[8];
744 Int_t indexMC=0;
745 xntMC[indexMC++]=(Float_t)ptMC;
746 xntMC[indexMC++]=(Float_t)code;
747 xntMC[indexMC++]=(Float_t)signMC;
748 xntMC[indexMC++]=(Float_t)part->Eta();
749 xntMC[indexMC++]=(Float_t)yMC;
750 xntMC[indexMC++]=(Float_t)isph;
751 xntMC[indexMC++]=(Float_t)evSel;
752 xntMC[indexMC++]=(Float_t)fESD->GetRunNumber();
10ba520e 753
36be14b3 754 if(fFillNtuple) fNtupleMC->Fill(xntMC);
755 }
756
10ba520e 757 if(jpart>=0){
758 if(stack->IsPhysicalPrimary(imc)){
759 if(signMC>0) fHistPrimMCposBefEvSel[jpart]->Fill(TMath::Abs(ptMC));
760 else fHistPrimMCnegBefEvSel[jpart]->Fill(TMath::Abs(ptMC));
761 if(evSel==1){
762 if(signMC>0) fHistPrimMCpos[jpart]->Fill(TMath::Abs(ptMC));
763 else fHistPrimMCneg[jpart]->Fill(TMath::Abs(ptMC));
764 }
765 }else{
766 if(mfl==3){ // strangeness
767 if(signMC>0) fHistSecStrMCposBefEvSel[jpart]->Fill(TMath::Abs(ptMC));
768 else fHistSecStrMCnegBefEvSel[jpart]->Fill(TMath::Abs(ptMC));
769 if(evSel==1){
770 if(signMC>0) fHistSecStrMCpos[jpart]->Fill(TMath::Abs(ptMC));
771 else fHistSecStrMCneg[jpart]->Fill(TMath::Abs(ptMC));
772 }
773 }else{
774 if(signMC>0) fHistSecMatMCposBefEvSel[jpart]->Fill(TMath::Abs(ptMC));
775 else fHistSecMatMCnegBefEvSel[jpart]->Fill(TMath::Abs(ptMC));
776 if(evSel==1){
777 if(signMC>0) fHistSecMatMCpos[jpart]->Fill(TMath::Abs(ptMC));
778 else fHistSecMatMCneg[jpart]->Fill(TMath::Abs(ptMC));
779 }
36be14b3 780 }
781 }
10ba520e 782 }
783 }
784
36be14b3 785
10ba520e 786 if(evSel==0)return; //event selection
1f75ac7d 787
788
36be14b3 789 //loop on tracks
790 for (Int_t iTrack=0; iTrack<fESD->GetNumberOfTracks(); iTrack++) {
10ba520e 791 isph=-999;
36be14b3 792 code=-999;
793 mfl=-999;
10ba520e 794
36be14b3 795 track = (AliESDtrack*)fESD->GetTrack(iTrack);
796 if (!track) continue;
797
798 //track selection
c841b89f 799 Int_t countBinTrk=1;
800 TString label;
801
802 label="no selection";
803 fHistNTracks->Fill(countBinTrk);
804 if(track->GetSign()>0)fHistNTracksPos->Fill(countBinTrk);
805 if(track->GetSign()<0)fHistNTracksNeg->Fill(countBinTrk);
806 fHistNTracks->GetXaxis()->SetBinLabel(fHistNTracks->FindBin(countBinTrk),label.Data());
807 fHistNTracksPos->GetXaxis()->SetBinLabel(fHistNTracksPos->FindBin(countBinTrk),label.Data());
808 fHistNTracksNeg->GetXaxis()->SetBinLabel(fHistNTracksNeg->FindBin(countBinTrk),label.Data());
809 countBinTrk++;
810
36be14b3 811 status=track->GetStatus();
812 if((status&AliESDtrack::kITSpureSA)==0) continue; //its standalone
c841b89f 813
814 label="ITSsa";
815 fHistNTracks->Fill(countBinTrk);
816 if(track->GetSign()>0)fHistNTracksPos->Fill(countBinTrk);
817 if(track->GetSign()<0)fHistNTracksNeg->Fill(countBinTrk);
818 fHistNTracks->GetXaxis()->SetBinLabel(fHistNTracks->FindBin(countBinTrk),label.Data());
819 fHistNTracksPos->GetXaxis()->SetBinLabel(fHistNTracksPos->FindBin(countBinTrk),label.Data());
820 fHistNTracksNeg->GetXaxis()->SetBinLabel(fHistNTracksNeg->FindBin(countBinTrk),label.Data());
821 countBinTrk++;
822
36be14b3 823 if((status&AliESDtrack::kITSrefit)==0) continue; //its refit
c841b89f 824
825 label="ITSrefit";
826 fHistNTracks->Fill(countBinTrk);
827 if(track->GetSign()>0)fHistNTracksPos->Fill(countBinTrk);
828 if(track->GetSign()<0)fHistNTracksNeg->Fill(countBinTrk);
829 fHistNTracks->GetXaxis()->SetBinLabel(fHistNTracks->FindBin(countBinTrk),label.Data());
830 fHistNTracksPos->GetXaxis()->SetBinLabel(fHistNTracksPos->FindBin(countBinTrk),label.Data());
831 fHistNTracksNeg->GetXaxis()->SetBinLabel(fHistNTracksNeg->FindBin(countBinTrk),label.Data());
832 countBinTrk++;
833
029e1796 834 if(TMath::Abs(track->GetSign())<0.0001) continue; //no neutral particles
c841b89f 835
836 label="neutral particle";
837 fHistNTracks->Fill(countBinTrk);
838 if(track->GetSign()>0)fHistNTracksPos->Fill(countBinTrk);
839 if(track->GetSign()<0)fHistNTracksNeg->Fill(countBinTrk);
840 fHistNTracks->GetXaxis()->SetBinLabel(fHistNTracks->FindBin(countBinTrk),label.Data());
841 fHistNTracksPos->GetXaxis()->SetBinLabel(fHistNTracksPos->FindBin(countBinTrk),label.Data());
842 fHistNTracksNeg->GetXaxis()->SetBinLabel(fHistNTracksNeg->FindBin(countBinTrk),label.Data());
843 countBinTrk++;
10ba520e 844
36be14b3 845 //cluster in ITS
846 UInt_t clumap = track->GetITSClusterMap();
847 Int_t nSPD=0;
848 for(Int_t il=0; il<2; il++) if(TESTBIT(clumap,il)) nSPD++;
849 if(nSPD<fMinSPDPts) continue;
c841b89f 850
851 label="SPDcls";
852 fHistNTracks->Fill(countBinTrk);
853 if(track->GetSign()>0)fHistNTracksPos->Fill(countBinTrk);
854 if(track->GetSign()<0)fHistNTracksNeg->Fill(countBinTrk);
855 fHistNTracks->GetXaxis()->SetBinLabel(fHistNTracks->FindBin(countBinTrk),label.Data());
856 fHistNTracksPos->GetXaxis()->SetBinLabel(fHistNTracksPos->FindBin(countBinTrk),label.Data());
857 fHistNTracksNeg->GetXaxis()->SetBinLabel(fHistNTracksNeg->FindBin(countBinTrk),label.Data());
858 countBinTrk++;
859
146d18ee 860 Int_t nPtsForPid=0;
861 for(Int_t j=2;j<6;j++) if(TESTBIT(clumap,j)) nPtsForPid++;
862 if(nPtsForPid<fMinNdEdxSamples) continue; //at least 3 points on SSD/SDD
c841b89f 863
864 label="SDD+SSD cls";
865 fHistNTracks->Fill(countBinTrk);
866 if(track->GetSign()>0)fHistNTracksPos->Fill(countBinTrk);
867 if(track->GetSign()<0)fHistNTracksNeg->Fill(countBinTrk);
868 fHistNTracks->GetXaxis()->SetBinLabel(fHistNTracks->FindBin(countBinTrk),label.Data());
869 fHistNTracksPos->GetXaxis()->SetBinLabel(fHistNTracksPos->FindBin(countBinTrk),label.Data());
870 fHistNTracksNeg->GetXaxis()->SetBinLabel(fHistNTracksNeg->FindBin(countBinTrk),label.Data());
871 countBinTrk++;
872
36be14b3 873 //chisquare/nclusters
146d18ee 874 Int_t nclu=nSPD+nPtsForPid;
36be14b3 875 if(track->GetITSchi2()/nclu > fMaxChi2Clu) continue;
c841b89f 876
877 label="chi2/ncls";
878 fHistNTracks->Fill(countBinTrk);
879 if(track->GetSign()>0)fHistNTracksPos->Fill(countBinTrk);
880 if(track->GetSign()<0)fHistNTracksNeg->Fill(countBinTrk);
881 fHistNTracks->GetXaxis()->SetBinLabel(fHistNTracks->FindBin(countBinTrk),label.Data());
882 fHistNTracksPos->GetXaxis()->SetBinLabel(fHistNTracksPos->FindBin(countBinTrk),label.Data());
883 fHistNTracksNeg->GetXaxis()->SetBinLabel(fHistNTracksNeg->FindBin(countBinTrk),label.Data());
884 countBinTrk++;
885
36be14b3 886 //pseudorapidity and rapidity
dac69cb0 887 if(TMath::Abs(track->Eta()) > fEtaRange) continue;
c841b89f 888
889 label="eta";
890 fHistNTracks->Fill(countBinTrk);
891 if(track->GetSign()>0)fHistNTracksPos->Fill(countBinTrk);
892 if(track->GetSign()<0)fHistNTracksNeg->Fill(countBinTrk);
893 fHistNTracks->GetXaxis()->SetBinLabel(fHistNTracks->FindBin(countBinTrk),label.Data());
894 fHistNTracksPos->GetXaxis()->SetBinLabel(fHistNTracksPos->FindBin(countBinTrk),label.Data());
895 fHistNTracksNeg->GetXaxis()->SetBinLabel(fHistNTracksNeg->FindBin(countBinTrk),label.Data());
896 countBinTrk++;
897
36be14b3 898 //truncated mean
146d18ee 899 track->GetITSdEdxSamples(dedxLay);
900 Double_t dedx = CookdEdx(dedxLay);
36be14b3 901 if(dedx<0) continue;
36be14b3 902
c841b89f 903 label="de/dx<0";
904 fHistNTracks->Fill(countBinTrk);
905 if(track->GetSign()>0)fHistNTracksPos->Fill(countBinTrk);
906 if(track->GetSign()<0)fHistNTracksNeg->Fill(countBinTrk);
907 fHistNTracks->GetXaxis()->SetBinLabel(fHistNTracks->FindBin(countBinTrk),label.Data());
908 fHistNTracksPos->GetXaxis()->SetBinLabel(fHistNTracksPos->FindBin(countBinTrk),label.Data());
909 fHistNTracksNeg->GetXaxis()->SetBinLabel(fHistNTracksNeg->FindBin(countBinTrk),label.Data());
910 countBinTrk++;
911
36be14b3 912 Float_t pt = track->Pt();
913 Int_t theBin=-1;
914 for(Int_t m=0; m<kNbins; m++){
915 if(TMath::Abs(pt) > fPtBinLimits[m] && TMath::Abs(pt) < fPtBinLimits[m+1]){
916 theBin=m;
917 break;
918 }
919 }
920 track->GetImpactParameters(impactXY, impactZ);
10ba520e 921
36be14b3 922 //Filling Ntuple
923 //information from the MC kinematics
924 if(fMC){
10ba520e 925 if(track->GetLabel()<0)isph=-1;
36be14b3 926 if(track->GetLabel()>=0){
927 part = (TParticle*)stack->Particle(track->GetLabel());
928 pdgPart = part->GetPDG();
929 code = pdgPart->PdgCode();
10ba520e 930 if(stack->IsPhysicalPrimary(track->GetLabel())) isph=1;
36be14b3 931 else{
10ba520e 932 isph=0;
933 Int_t indexMoth=part->GetFirstMother();
934 if(indexMoth>=0){
935 TParticle* moth = stack->Particle(indexMoth);
936 Float_t codemoth = TMath::Abs(moth->GetPdgCode());
937 mfl = Int_t (codemoth/ TMath::Power(10, Int_t(TMath::Log10(codemoth))));
938 }
939 }
940
941 //Filling DCA distribution with MC truth
942
943 if(theBin>=0 && theBin<kNbins){
944 if(isph==1){//primaries in MC
945 if(track->GetSign()>0){
946 if(TMath::Abs(code)==listcode[0]) fHistMCPrimDCAPosPi[theBin]->Fill(impactXY);
947 if(TMath::Abs(code)==listcode[1]) fHistMCPrimDCAPosK[theBin]->Fill(impactXY);
948 if(TMath::Abs(code)==listcode[2]) fHistMCPrimDCAPosP[theBin]->Fill(impactXY);
949 }else{
950 if(TMath::Abs(code)==listcode[0]) fHistMCPrimDCANegPi[theBin]->Fill(impactXY);
951 if(TMath::Abs(code)==listcode[1]) fHistMCPrimDCANegK[theBin]->Fill(impactXY);
952 if(TMath::Abs(code)==listcode[2]) fHistMCPrimDCANegP[theBin]->Fill(impactXY);
953 }
954 }
955
956 if(isph==0){//primaries in MC
957 if(mfl==3){
958 if(track->GetSign()>0){
959 if(TMath::Abs(code)==listcode[0]) fHistMCSecStDCAPosPi[theBin]->Fill(impactXY);
960 if(TMath::Abs(code)==listcode[1]) fHistMCSecStDCAPosK[theBin]->Fill(impactXY);
961 if(TMath::Abs(code)==listcode[2]) fHistMCSecStDCAPosP[theBin]->Fill(impactXY);
962 }else{
963 if(TMath::Abs(code)==listcode[0]) fHistMCSecStDCANegPi[theBin]->Fill(impactXY);
964 if(TMath::Abs(code)==listcode[1]) fHistMCSecStDCANegK[theBin]->Fill(impactXY);
965 if(TMath::Abs(code)==listcode[2]) fHistMCSecStDCANegP[theBin]->Fill(impactXY);
966 }
967 }else{
968 if(track->GetSign()>0){
969 if(TMath::Abs(code)==listcode[0]) fHistMCSecMatDCAPosPi[theBin]->Fill(impactXY);
970 if(TMath::Abs(code)==listcode[1]) fHistMCSecMatDCAPosK[theBin]->Fill(impactXY);
971 if(TMath::Abs(code)==listcode[2]) fHistMCSecMatDCAPosP[theBin]->Fill(impactXY);
972 }else{
973 if(TMath::Abs(code)==listcode[0]) fHistMCSecMatDCANegPi[theBin]->Fill(impactXY);
974 if(TMath::Abs(code)==listcode[1]) fHistMCSecMatDCANegK[theBin]->Fill(impactXY);
975 if(TMath::Abs(code)==listcode[2]) fHistMCSecMatDCANegP[theBin]->Fill(impactXY);
976 }
977 }
978 }
36be14b3 979 }
980 }
981 }
146d18ee 982 Float_t xnt[18];
36be14b3 983 Int_t index=0;
984 xnt[index++]=(Float_t)track->GetP();
985 xnt[index++]=(Float_t)track->Pt();
986 xnt[index++]=(Float_t)dedx;
146d18ee 987 xnt[index++]=(Float_t)dedxLay[0];
988 xnt[index++]=(Float_t)dedxLay[1];
989 xnt[index++]=(Float_t)dedxLay[2];
990 xnt[index++]=(Float_t)dedxLay[3];
991 xnt[index++]=(Float_t)nclu;
992 xnt[index++]=(Float_t)nPtsForPid;
36be14b3 993 xnt[index++]=(Float_t)track->GetSign();
994 xnt[index++]=(Float_t)fESD->GetRunNumber();
995 xnt[index++]=(Float_t)track->Eta();
996 xnt[index++]=(Float_t)impactXY;
997 xnt[index++]=(Float_t)impactZ;
998 xnt[index++]=(Float_t)isph;
999 xnt[index++]=(Float_t)code;
c841b89f 1000 xnt[index++]=(Float_t)mfl;
1001 xnt[index]=(Float_t)track->GetITSchi2()/nclu;
36be14b3 1002
1003 if(fFillNtuple) fNtupleNSigma->Fill(xnt);
1004
1005
1006
1007 //Compute y and bb
10ba520e 1008 Double_t y[4],bbtheo[4],logdiff[4];
36be14b3 1009 Float_t p=track->GetP();
1010 if(fMC && fSmearMC){
1011 dedx=fRandGener->Gaus(dedx,fSmeardEdx*dedx);
1012 p=fRandGener->Gaus(p,fSmearP*p);
1013 }
98bb3219 1014
1015 //Nsigma Method
1016 Float_t resodedx[4];
1017 for(Int_t ires=0;ires<4;ires++){
1018 resodedx[ires]=fITSPIDResponse->GetResolution(1,ires+1,kTRUE);
1019 }
1020
10ba520e 1021 for(Int_t i=0;i<4;i++){
36be14b3 1022 y[i] = Eta2y(pt,pdgmass[i],track->Eta());
98bb3219 1023 bbtheo[i]=fITSPIDResponse->Bethe(p,pdgmass[i],kTRUE);
36be14b3 1024 logdiff[i]=TMath::Log(dedx) - TMath::Log(bbtheo[i]);
1025 }
98bb3219 1026
146d18ee 1027 Int_t resocls=(Int_t)nPtsForPid-1;
10ba520e 1028
1029 //NSigma Method, with asymmetric bands
10ba520e 1030 Int_t minPosMean=-1;
1031 for(Int_t isp=0; isp<3; isp++){
1032 if(dedx<bbtheo[0])continue;
1033 Double_t bb=bbtheo[isp];
1034 if(dedx<bb){
1035 Double_t bbdistance=TMath::Abs((bbtheo[isp]-bbtheo[isp-1])/2);
1036 Double_t nsigma=TMath::Abs((dedx-bb)/bbdistance);
1037 if(nsigma<1.)minPosMean=isp;
1038 }
1039 else{
1040 Double_t bbdistance=TMath::Abs((bbtheo[isp]-bbtheo[isp+1])/2);
1041 Double_t nsigma=TMath::Abs((dedx-bb)/bbdistance);
1042 if(nsigma<1.)minPosMean=isp;
1043 }
1044 }
1045 if(dedx<bbtheo[0] && TMath::Abs((dedx-bbtheo[0])/(resodedx[resocls]*bbtheo[0]))<2)minPosMean=0;
1046
1047 //NSigma method with simmetric bands
98bb3219 1048
36be14b3 1049 Double_t nsigmas[3];
1050 Double_t min=999999.;
1051 Int_t minPos=-1;
1052 for(Int_t isp=0; isp<3; isp++){
1053 Double_t bb=bbtheo[isp];
1054 nsigmas[isp]=TMath::Abs((dedx-bb)/(resodedx[resocls]*bb));
1055 if(nsigmas[isp]<min){
1056 min=nsigmas[isp];
1057 minPos=isp;
1058 }
98bb3219 1059 //Filling histos with nsigma separation
1060 if(track->GetSign()>0)fHistPosNSigmaSep[isp]->Fill(track->GetP(),((dedx-bb)/(resodedx[resocls]*bb)));
1061 else fHistNegNSigmaSep[isp]->Fill(track->GetP(),((dedx-bb)/(resodedx[resocls]*bb)));
36be14b3 1062 }
10ba520e 1063
1064 // y calculation
1065 Double_t yPartMean=y[minPosMean];
36be14b3 1066 Double_t yPart=y[minPos];
1067
10ba520e 1068 if(yPartMean<fMaxY){
1069 //DCA distributions, before the DCA cuts, based on asymmetrinc nsigma approach
36be14b3 1070 if(theBin>=0 && theBin<kNbins){
1071 if(track->GetSign()>0){
10ba520e 1072 if(minPosMean==0) fHistDCAPosPi[theBin]->Fill(impactXY);
1073 else if(minPosMean==1) fHistDCAPosK[theBin]->Fill(impactXY);
1074 else if(minPosMean==2) fHistDCAPosP[theBin]->Fill(impactXY);
36be14b3 1075 }else{
10ba520e 1076 if(minPosMean==0) fHistDCANegPi[theBin]->Fill(impactXY);
1077 else if(minPosMean==1) fHistDCANegK[theBin]->Fill(impactXY);
1078 else if(minPosMean==2) fHistDCANegP[theBin]->Fill(impactXY);
36be14b3 1079 }
1080 }
1081 }
1082
1083 //DCA cut on xy and z
1084 if(!DCAcut(impactXY,impactZ,pt,fMC)) continue;
c841b89f 1085
1086 label="DCA";
1087 fHistNTracks->Fill(countBinTrk);
1088 if(track->GetSign()>0)fHistNTracksPos->Fill(countBinTrk);
1089 if(track->GetSign()<0)fHistNTracksNeg->Fill(countBinTrk);
1090 fHistNTracks->GetXaxis()->SetBinLabel(fHistNTracks->FindBin(countBinTrk),label.Data());
1091 fHistNTracksPos->GetXaxis()->SetBinLabel(fHistNTracksPos->FindBin(countBinTrk),label.Data());
1092 fHistNTracksNeg->GetXaxis()->SetBinLabel(fHistNTracksNeg->FindBin(countBinTrk),label.Data());
1093 countBinTrk++;
16c730d4 1094
1095
1096 Int_t jpart=-1;
10ba520e 1097
1098 //Filling Histos for Reco Efficiency
1099 //information from the MC kinematics
1100 if(fMC){
1101 if(track->GetLabel()<0)isph=-1;
1102 if(track->GetLabel()>=0){
1103 part = (TParticle*)stack->Particle(track->GetLabel());
1104 pdgPart = part->GetPDG();
1105 code = pdgPart->PdgCode();
10ba520e 1106 for(Int_t j=0; j<3; j++){
1107 if(TMath::Abs(code)==listcode[j]){
1108 jpart=j;
1109 break;
1110 }
1111 }
16c730d4 1112 if(jpart>=0){
1113 if(pdgPart->Charge()>0) signMC=1;
1114 else signMC=-1;
1115 ptMC=part->Pt();
1116 if(stack->IsPhysicalPrimary(track->GetLabel())){
1117 if(signMC>0) fHistPrimMCposReco[jpart]->Fill(TMath::Abs(ptMC));
1118 else fHistPrimMCnegReco[jpart]->Fill(TMath::Abs(ptMC));
1119 }else{
1120 Int_t indexMoth=part->GetFirstMother();
1121 if(indexMoth>=0){
1122 TParticle* moth = stack->Particle(indexMoth);
1123 Float_t codemoth = TMath::Abs(moth->GetPdgCode());
1124 mfl = Int_t (codemoth/ TMath::Power(10, Int_t(TMath::Log10(codemoth))));
1125 }
1126 if(mfl==3){ // strangeness
1127 if(signMC>0) fHistSecStrMCposReco[jpart]->Fill(TMath::Abs(ptMC));
1128 else fHistSecStrMCnegReco[jpart]->Fill(TMath::Abs(ptMC));
1129 }else{
1130 if(signMC>0) fHistSecMatMCposReco[jpart]->Fill(TMath::Abs(ptMC));
1131 else fHistSecMatMCnegReco[jpart]->Fill(TMath::Abs(ptMC));
1132 }
10ba520e 1133 }
1134 }
1135 }
1136 }
1137
1138 //Nsigma histos with MC truth
1139
1140 //asymmetric approach
1141 if(yPartMean<fMaxY){
1142 //nsigma histos
1143 if(track->GetSign()>0) fHistPosNSigmaMean[minPosMean]->Fill(pt);
1144 else fHistNegNSigmaMean[minPosMean]->Fill(pt);
1145 if(fMC){
1146 //nsigma histos with MC truth on PID
1147 if(TMath::Abs(code)==listcode[minPosMean]){
1148 if(track->GetSign()>0) fHistPosNSigmaMCMean[minPosMean]->Fill(pt);
1149 else fHistNegNSigmaMCMean[minPosMean]->Fill(pt);
1150 }
1151 //nsigma histos with MC truth on IsPhysicalPrimary
1152 if(isph==1){
1153 if(track->GetSign()>0) fHistPosNSigmaPrimMean[minPosMean]->Fill(pt);
1154 else fHistNegNSigmaPrimMean[minPosMean]->Fill(pt);
1155 //nsigma histos with MC truth on IsPhysicalPrimary and PID
1156 if(TMath::Abs(code)==listcode[minPosMean]){
1157 if(track->GetSign()>0) fHistPosNSigmaPrimMCMean[minPosMean]->Fill(pt);
1158 else fHistNegNSigmaPrimMCMean[minPosMean]->Fill(pt);
1159 }
1160 }
1161 }
1162 }
36be14b3 1163
10ba520e 1164 //symmetric bands
36be14b3 1165 if(min<fMinNSigma && yPart<fMaxY){
10ba520e 1166 //nsigma histos
36be14b3 1167 if(track->GetSign()>0) fHistPosNSigma[minPos]->Fill(pt);
1168 else fHistNegNSigma[minPos]->Fill(pt);
1169 if(fMC){
10ba520e 1170 //nsigma histos with MC truth on PID
1171 if(TMath::Abs(code)==listcode[minPos]){
1172 if(track->GetSign()>0) fHistPosNSigmaMC[minPos]->Fill(pt);
1173 else fHistNegNSigmaMC[minPos]->Fill(pt);
1174 }
1175 //nsigma histos with MC truth on IsPhysicalPrimary
36be14b3 1176 if(isph==1){
1177 if(track->GetSign()>0) fHistPosNSigmaPrim[minPos]->Fill(pt);
1178 else fHistNegNSigmaPrim[minPos]->Fill(pt);
16c730d4 1179 //nsigma histos with MC truth on IsPhysicalPrimary and PID
36be14b3 1180 if(TMath::Abs(code)==listcode[minPos]){
1181 if(track->GetSign()>0) fHistPosNSigmaPrimMC[minPos]->Fill(pt);
1182 else fHistNegNSigmaPrimMC[minPos]->Fill(pt);
1183 }
1184 }
1185 }
1186 }
1187
10ba520e 1188
1189 //integral approach histograms
36be14b3 1190 if(theBin>=0 && theBin<kNbins){
1191 if(track->GetSign()>0){
1192 if(TMath::Abs(y[0]) < fMaxY)fHistPosPi[theBin]->Fill(logdiff[0]);
1193 if(TMath::Abs(y[1]) < fMaxY)fHistPosK[theBin]->Fill(logdiff[1]);
1194 if(TMath::Abs(y[2]) < fMaxY)fHistPosP[theBin]->Fill(logdiff[2]);
1195 if(fMC){
e6076bb8 1196 if(TMath::Abs(y[0])<fMaxY){
16c730d4 1197 if(TMath::Abs(code)!=11 && jpart<0)fHistMCPosOtherHypPion[theBin]->Fill(logdiff[0]);
1198 if(TMath::Abs(code)==11)fHistMCPosElHypPion[theBin]->Fill(logdiff[0]);
e6076bb8 1199 if(TMath::Abs(code)==211)fHistMCPosPiHypPion[theBin]->Fill(logdiff[0]);
98bb3219 1200 if(TMath::Abs(code)==321)fHistMCPosKHypPion[theBin]->Fill(logdiff[0]);
e6076bb8 1201 if(TMath::Abs(code)==2212)fHistMCPosPHypPion[theBin]->Fill(logdiff[0]);
1202 }
1203 if(TMath::Abs(y[1])<fMaxY){
16c730d4 1204 if(TMath::Abs(code)!=11 && jpart<0)fHistMCPosOtherHypKaon[theBin]->Fill(logdiff[1]);
1205 if(TMath::Abs(code)==11)fHistMCPosElHypKaon[theBin]->Fill(logdiff[1]);
e6076bb8 1206 if(TMath::Abs(code)==211)fHistMCPosPiHypKaon[theBin]->Fill(logdiff[1]);
98bb3219 1207 if(TMath::Abs(code)==321)fHistMCPosKHypKaon[theBin]->Fill(logdiff[1]);
e6076bb8 1208 if(TMath::Abs(code)==2212)fHistMCPosPHypKaon[theBin]->Fill(logdiff[1]);
1209 }
1210 if(TMath::Abs(y[2])<fMaxY){
16c730d4 1211 if(TMath::Abs(code)!=11 && jpart<0)fHistMCPosOtherHypProton[theBin]->Fill(logdiff[2]);
1212 if(TMath::Abs(code)==11)fHistMCPosElHypProton[theBin]->Fill(logdiff[2]);
1213 if(TMath::Abs(code)==211)fHistMCPosPiHypProton[theBin]->Fill(logdiff[2]);
1214 if(TMath::Abs(code)==321)fHistMCPosKHypProton[theBin]->Fill(logdiff[2]);
1215 if(TMath::Abs(code)==2212)fHistMCPosPHypProton[theBin]->Fill(logdiff[2]);
e6076bb8 1216 }
36be14b3 1217 }
1218 }else{
1219 if(TMath::Abs(y[0]) < fMaxY)fHistNegPi[theBin]->Fill(logdiff[0]);
1220 if(TMath::Abs(y[1]) < fMaxY)fHistNegK[theBin]->Fill(logdiff[1]);
1221 if(TMath::Abs(y[2]) < fMaxY)fHistNegP[theBin]->Fill(logdiff[2]);
1222 if(fMC){
e6076bb8 1223 if(TMath::Abs(y[0])<fMaxY){
16c730d4 1224 if(TMath::Abs(code)!=11 && jpart<0)fHistMCNegOtherHypPion[theBin]->Fill(logdiff[0]);
1225 if(TMath::Abs(code)==11)fHistMCNegElHypPion[theBin]->Fill(logdiff[0]);
98bb3219 1226 if(TMath::Abs(code)==211)fHistMCNegPiHypPion[theBin]->Fill(logdiff[0]);
1227 if(TMath::Abs(code)==321)fHistMCNegKHypPion[theBin]->Fill(logdiff[0]);
1228 if(TMath::Abs(code)==2212)fHistMCNegPHypPion[theBin]->Fill(logdiff[0]);
e6076bb8 1229 }
1230 if(TMath::Abs(y[1])<fMaxY){
16c730d4 1231 if(TMath::Abs(code)!=11 && jpart<0)fHistMCNegOtherHypKaon[theBin]->Fill(logdiff[1]);
1232 if(TMath::Abs(code)==11)fHistMCNegElHypKaon[theBin]->Fill(logdiff[1]);
98bb3219 1233 if(TMath::Abs(code)==211)fHistMCNegPiHypKaon[theBin]->Fill(logdiff[1]);
1234 if(TMath::Abs(code)==321)fHistMCNegKHypKaon[theBin]->Fill(logdiff[1]);
1235 if(TMath::Abs(code)==2212)fHistMCNegPHypKaon[theBin]->Fill(logdiff[1]);
e6076bb8 1236 }
1237 if(TMath::Abs(y[2])<fMaxY){
16c730d4 1238 if(TMath::Abs(code)!=11 && jpart<0)fHistMCNegOtherHypProton[theBin]->Fill(logdiff[2]);
1239 if(TMath::Abs(code)==11)fHistMCNegElHypProton[theBin]->Fill(logdiff[2]);
98bb3219 1240 if(TMath::Abs(code)==211)fHistMCNegPiHypProton[theBin]->Fill(logdiff[2]);
1241 if(TMath::Abs(code)==321)fHistMCNegKHypProton[theBin]->Fill(logdiff[2]);
1242 if(TMath::Abs(code)==2212)fHistMCNegPHypProton[theBin]->Fill(logdiff[2]);
e6076bb8 1243 }
36be14b3 1244 }
1245 }
1246 }
1247
1248
1249 //fill propaganda plot with dedx
1250 fHistDEDX->Fill(track->GetP(),dedx);
1251 fHistDEDXdouble->Fill(track->GetP()*track->GetSign(),dedx);
1252
1253 //fill charge distribution histo to check the calibration
1254 for(Int_t j=0;j<4;j++){
146d18ee 1255 if(dedxLay[j]<5) continue;
1256 fHistCharge[j]->Fill(dedxLay[j]);
36be14b3 1257 }
1258 }
1259
1260 // Post output data.
1261 PostData(1,fOutput);
1262 Printf("............. end of Exec");
1263}
1264
1265//________________________________________________________________________
1266void AliAnalysisTaskSEITSsaSpectra::Terminate(Option_t *) {
4d668cf7 1267 // Merge output
1268 // Called once at the end of the query
36be14b3 1269
1270 fOutput = dynamic_cast<TList*>(GetOutputData(1));
1271 if (!fOutput) {
1272 printf("ERROR: fOutput not available\n");
1273 return;
1274 }
1275 fHistNEvents = dynamic_cast<TH1F*>(fOutput->FindObject("fHistNEvents"));
c841b89f 1276 fHistMult = dynamic_cast<TH1F*>(fOutput->FindObject("fHistMult"));
1f75ac7d 1277 fHistCen = dynamic_cast<TH1F*>(fOutput->FindObject("fHistCen"));
36be14b3 1278 fHistNTracks = dynamic_cast<TH1F*>(fOutput->FindObject("fHistNTracks"));
c841b89f 1279 fHistNTracksPos = dynamic_cast<TH1F*>(fOutput->FindObject("fHistNTracksPos"));
1280 fHistNTracksNeg = dynamic_cast<TH1F*>(fOutput->FindObject("fHistNTracksNeg"));
36be14b3 1281 fHistDEDX = dynamic_cast<TH2F*>(fOutput->FindObject("fHistDEDX"));
1282 fHistDEDXdouble = dynamic_cast<TH2F*>(fOutput->FindObject("fHistDEDXdouble"));
1283
98bb3219 1284
36be14b3 1285 fHistBeforeEvSel = dynamic_cast<TH1F*>(fOutput->FindObject("fHistBeforeEvSel"));
1286 fHistAfterEvSel = dynamic_cast<TH1F*>(fOutput->FindObject("fHistAfterEvSel"));
1287
1288
1289 for(Int_t j=0;j<3;j++){
98bb3219 1290 fHistPosNSigmaSep[j] = dynamic_cast<TH2F*>(fOutput->FindObject(Form("fHistPosNSigmaSep%d",j)));
1291 fHistNegNSigmaSep[j] = dynamic_cast<TH2F*>(fOutput->FindObject(Form("fHistNegNSigmaSep%d",j)));
10ba520e 1292 if(fMC){
1293 fHistPrimMCpos[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistPrimMCpos%d",j)));
1294 fHistPrimMCneg[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistPrimMCneg%d",j)));
1295 fHistSecStrMCpos[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistSecStrMCpos%d",j)));
1296 fHistSecStrMCneg[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistSecStrMCneg%d",j)));
1297 fHistSecMatMCpos[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistSecMatMCpos%d",j)));
1298 fHistSecMatMCneg[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistSecMatMCneg%d",j)));
1299 //
1300 fHistPrimMCposBefEvSel[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistPrimMCposBefEvSel%d",j)));
1301 fHistPrimMCnegBefEvSel[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistPrimMCnegBefEvSel%d",j)));
1302 fHistSecStrMCposBefEvSel[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistSecStrMCposBefEvSel%d",j)));
1303 fHistSecStrMCnegBefEvSel[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistSecStrMCnegBefEvSel%d",j)));
1304 fHistSecMatMCposBefEvSel[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistSecMatMCposBefEvSel%d",j)));
1305 fHistSecMatMCnegBefEvSel[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistSecMatMCnegBefEvSel%d",j)));
1306 //
1307 fHistPrimMCposReco[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistPrimMCposReco%d",j)));
1308 fHistPrimMCnegReco[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistPrimMCnegReco%d",j)));
1309 fHistSecStrMCposReco[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistSecStrMCposReco%d",j)));
1310 fHistSecStrMCnegReco[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistSecStrMCnegReco%d",j)));
1311 fHistSecMatMCposReco[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistSecMatMCposReco%d",j)));
1312 fHistSecMatMCnegReco[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistSecMatMCnegReco%d",j)));
1313 }
36be14b3 1314 }
36be14b3 1315
36be14b3 1316 for(Int_t i=0; i<4; i++){
1317 fHistCharge[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistChargeLay%d",i)));
1318 }
1319
1320 for(Int_t i=0; i<kNbins; i++){
1321 fHistPosPi[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistPosPi%d",i)));
1322 fHistPosK[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistPosK%d",i)));
1323 fHistPosP[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistPosP%d",i)));
1324 fHistNegPi[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistNegPi%d",i)));
1325 fHistNegK[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistNegK%d",i)));
1326 fHistNegP[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistNegP%d",i)));
1327
1328 fHistDCAPosPi[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistDCAPosPi%d",i)));
1329 fHistDCAPosK[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistDCAPosK%d",i)));
1330 fHistDCAPosP[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistDCAPosP%d",i)));
1331 fHistDCANegPi[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistDCANegPi%d",i)));
1332 fHistDCANegK[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistDCANegK%d",i)));
1333 fHistDCANegP[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistDCANegP%d",i)));
1334
1335
1336 if(fMC){
10ba520e 1337
1338 fHistMCPrimDCAPosPi[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPrimDCAPosPi%d",i)));
1339 fHistMCPrimDCAPosK[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPrimDCAPosK%d",i)));
1340 fHistMCPrimDCAPosP[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPrimDCAPosP%d",i)));
1341 fHistMCPrimDCANegPi[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPrimDCANegPi%d",i)));
1342 fHistMCPrimDCANegK[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPrimDCANegK%d",i)));
1343 fHistMCPrimDCANegP[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPrimDCANegP%d",i)));
1344
1345 fHistMCSecStDCAPosPi[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCSecStDCAPosPi%d",i)));
1346 fHistMCSecStDCAPosK[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCSecStDCAPosK%d",i)));
1347 fHistMCSecStDCAPosP[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCSecStDCAPosP%d",i)));
1348 fHistMCSecStDCANegPi[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCSecStDCANegPi%d",i)));
1349 fHistMCSecStDCANegK[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCSecStDCANegK%d",i)));
1350 fHistMCSecStDCANegP[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCSecStDCANegP%d",i)));
1351
1352 fHistMCSecMatDCAPosPi[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCSecMatDCAPosPi%d",i)));
1353 fHistMCSecMatDCAPosK[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCSecMatDCAPosK%d",i)));
1354 fHistMCSecMatDCAPosP[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCSecMatDCAPosP%d",i)));
1355 fHistMCSecMatDCANegPi[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCSecMatDCANegPi%d",i)));
1356 fHistMCSecMatDCANegK[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCSecMatDCANegK%d",i)));
1357 fHistMCSecMatDCANegP[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCSecMatDCANegP%d",i)));
1358
16c730d4 1359 fHistMCPosOtherHypPion[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosOtherHypPion%d",i)));
1360 fHistMCPosOtherHypKaon[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosOtherHypKaon%d",i)));
1361 fHistMCPosOtherHypProton[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosOtherHypProton%d",i)));
1362 fHistMCPosElHypPion[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosElHypPion%d",i)));
1363 fHistMCPosElHypKaon[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosElHypKaon%d",i)));
1364 fHistMCPosElHypProton[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosElHypProton%d",i)));
e6076bb8 1365 fHistMCPosPiHypPion[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosPiHypPion%d",i)));
1366 fHistMCPosPiHypKaon[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosPiHypKaon%d",i)));
1367 fHistMCPosPiHypProton[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosPiHypProton%d",i)));
1368 fHistMCPosKHypPion[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosKHypPion%d",i)));
1369 fHistMCPosKHypKaon[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosKHypKaon%d",i)));
1370 fHistMCPosKHypProton[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosKHypProton%d",i)));
1371 fHistMCPosPHypPion[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosPHypPion%d",i)));
1372 fHistMCPosPHypKaon[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosPHypKaon%d",i)));
1373 fHistMCPosPHypProton[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosPHypProton%d",i)));
1374
16c730d4 1375 fHistMCNegOtherHypPion[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegOtherHypPion%d",i)));
1376 fHistMCNegOtherHypKaon[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegOtherHypKaon%d",i)));
1377 fHistMCNegOtherHypProton[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegOtherHypProton%d",i)));
1378 fHistMCNegElHypPion[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegElHypPion%d",i)));
1379 fHistMCNegElHypKaon[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegElHypKaon%d",i)));
1380 fHistMCNegElHypProton[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegElHypProton%d",i)));
e6076bb8 1381 fHistMCNegPiHypPion[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegPiHypPion%d",i)));
1382 fHistMCNegPiHypKaon[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegPiHypKaon%d",i)));
1383 fHistMCNegPiHypProton[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegPiHypProton%d",i)));
1384 fHistMCNegKHypPion[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegKHypPion%d",i)));
1385 fHistMCNegKHypKaon[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegKHypKaon%d",i)));
1386 fHistMCNegKHypProton[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegKHypProton%d",i)));
1387 fHistMCNegPHypPion[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegPHypPion%d",i)));
1388 fHistMCNegPHypKaon[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegPHypKaon%d",i)));
1389 fHistMCNegPHypProton[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegPHypProton%d",i)));
1390
36be14b3 1391 }
1392 }
10ba520e 1393
36be14b3 1394 for(Int_t j=0;j<3;j++){
10ba520e 1395 fHistPosNSigmaMean[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistPosNSigmaMean%d",j)));
1396 fHistNegNSigmaMean[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistNegNSigmaMean%d",j)));
1397 fHistPosNSigmaMCMean[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistPosNSigmaMCMean%d",j)));
1398 fHistNegNSigmaMCMean[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistNegNSigmaMCMean%d",j)));
1399 fHistPosNSigmaPrimMean[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistPosNSigmaPrimMean%d",j)));
1400 fHistNegNSigmaPrimMean[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistNegNSigmaPrimMean%d",j)));
1401 fHistPosNSigmaPrimMCMean[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistPosNSigmaPrimMCMean%d",j)));
1402 fHistNegNSigmaPrimMCMean[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistNegNSigmaPrimMCMean%d",j)));
1403
36be14b3 1404 fHistPosNSigma[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistPosNSigma%d",j)));
1405 fHistNegNSigma[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistNegNSigma%d",j)));
10ba520e 1406 fHistPosNSigmaMC[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistPosNSigmaMC%d",j)));
1407 fHistNegNSigmaMC[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistNegNSigmaMC%d",j)));
36be14b3 1408 fHistPosNSigmaPrim[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistPosNSigmaPrim%d",j)));
1409 fHistNegNSigmaPrim[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistNegNSigmaPrim%d",j)));
1410 fHistPosNSigmaPrimMC[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistPosNSigmaPrimMC%d",j)));
1411 fHistNegNSigmaPrimMC[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistNegNSigmaPrimMC%d",j)));
10ba520e 1412
36be14b3 1413 }
1414
1415 fNtupleNSigma = dynamic_cast<TNtuple*>(fOutput->FindObject("fNtupleNSigma"));
1416 fNtupleMC = dynamic_cast<TNtuple*>(fOutput->FindObject("fNtupleMC"));
1417
1418 Printf("end of Terminate");
1419 return;
1420}