1 /**************************************************************************
2 * Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
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
22 // E. Biolcati, biolcati@to.infn.it
23 // L. Milano, milano@to.infn.it
24 // F. Prino, prino@to.infn.it
25 ///////////////////////////////////////////////////////////////////////////
32 #include <TParticle.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"
41 #include "AliMCEventHandler.h"
42 #include "AliMCEvent.h"
43 #include "AliPhysicsSelection.h"
44 #include "AliAnalysisTaskSEITSsaSpectra.h"
45 #include "AliESDtrackCuts.h"
46 #include "AliCentrality.h"
47 #include "AliMultiplicity.h"
48 #include "AliESDUtils.h"
49 #include "AliITSPIDResponse.h"
51 ClassImp(AliAnalysisTaskSEITSsaSpectra)
54 //________________________________________________________________________
55 AliAnalysisTaskSEITSsaSpectra::AliAnalysisTaskSEITSsaSpectra():
56 AliAnalysisTaskSE("Task CFit"),
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);
101 fesdTrackCutsMult = new AliESDtrackCuts;
104 fesdTrackCutsMult->SetMinNClustersTPC(70);
105 fesdTrackCutsMult->SetMaxChi2PerClusterTPC(4);
106 fesdTrackCutsMult->SetAcceptKinkDaughters(kFALSE);
107 fesdTrackCutsMult->SetRequireTPCRefit(kTRUE);
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);
118 DefineInput(0, TChain::Class());
119 DefineOutput(1, TList::Class());
120 Printf("end of AliAnalysisTaskSEITSsaSpectra");
123 //___________________________________________________________________________
124 AliAnalysisTaskSEITSsaSpectra::~AliAnalysisTaskSEITSsaSpectra(){
130 if(fRandGener) delete fRandGener;
131 if(fITSPIDResponse) delete fITSPIDResponse;
134 //________________________________________________________________________
135 Double_t AliAnalysisTaskSEITSsaSpectra::CookdEdx(Double_t *s) const {
136 // truncated mean for the dEdx
138 Double_t dedx[4]={0.,0.,0.,0.};
139 for (Int_t il=0; il<4; il++) { // count good (>0) dE/dx values
145 if(nc<fMinNdEdxSamples) return -1.;
148 Int_t swap; // sort in ascending order
151 for (Int_t i=0; i<nc-1; i++) {
152 if (dedx[i]<=dedx[i+1]) continue;
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];
168 return sumamp/sumweight;
172 //________________________________________________________________________
173 void AliAnalysisTaskSEITSsaSpectra::SetYear(Int_t year){
174 // Set year dependent quantities
177 fesdTrackCutsMult->SetMaxDCAToVertexXYPtDep("0.0350+0.0420/TMath::Power(pt,0.9)"); //2009 standard cut
178 fesdTrackCutsMult->SetMaxDCAToVertexZ(20); //2009 standard cut
180 fesdTrackCutsMult->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01"); //2010 standard cut
181 fesdTrackCutsMult->SetMaxDCAToVertexZ(2); //2010 standard cut
185 //________________________________________________________________________
186 Bool_t AliAnalysisTaskSEITSsaSpectra::DCAcut(Double_t impactXY, Double_t impactZ, Double_t pt, Bool_t optMC) const {
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
194 xyP[0]=88.63; //MC LHC10a12
201 xyP[0]=36.; //MC LHC10d1
211 xyP[0]=85.28;//DATA 900 GeV pass6
218 xyP[0]=32.7;//DATA 7 TeV pass2
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;
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;
237 //________________________________________________________________________
238 Double_t AliAnalysisTaskSEITSsaSpectra::Eta2y(Double_t pt, Double_t m, Double_t eta) const {
240 Double_t mt = TMath::Sqrt(m*m + pt*pt);
241 return TMath::ASinH(pt/mt*TMath::SinH(eta));
245 //________________________________________________________________________
246 void AliAnalysisTaskSEITSsaSpectra::UserCreateOutputObjects(){
247 // Create a TList with histograms and a TNtuple
250 fOutput = new TList();
252 fOutput->SetName("Spiderman");
254 fHistNEvents = new TH1F("fHistNEvents", "Number of processed events",8,-1.5,6.5);
255 fHistNEvents->Sumw2();
256 fHistNEvents->SetMinimum(0);
257 fOutput->Add(fHistNEvents);
259 fHistMult = new TH1F("fHistMult", "Event Multiplicity",3000,-0.5,2999.5);
261 fHistMult->SetMinimum(0);
262 fOutput->Add(fHistMult);
264 fHistCen = new TH1F("fHistCen", "Event Centrality",101,-0.5,100.5);
266 fHistCen->SetMinimum(0);
267 fOutput->Add(fHistCen);
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);
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);
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);
284 //binning for the histogram
285 const Int_t hnbins=400;
286 Double_t hxmin = 0.01;
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];
293 for (Int_t i=1;i<=hnbins;i++) {
294 hxbins[i] = hxmin + TMath::Power(10,hlogxmin+i*hbinwidth);
297 fHistDEDX = new TH2F("fHistDEDX","",hnbins,hxbins,900,0,1000);
298 fOutput->Add(fHistDEDX);
300 fHistDEDXdouble = new TH2F("fHistDEDXdouble","",500,-5,5,900,0,1000);
301 fOutput->Add(fHistDEDXdouble);
303 fHistBeforeEvSel = new TH1F("fHistBeforeEvSel","fHistBeforeEvSel",kNbins,fPtBinLimits);
304 fHistAfterEvSel = new TH1F("fHistAfterEvSel","fHistAfterEvSel",kNbins,fPtBinLimits);
305 fOutput->Add(fHistBeforeEvSel);
306 fOutput->Add(fHistAfterEvSel);
310 for(Int_t j=0;j<3;j++){
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]);
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]);
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]);
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]);
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]);
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);
371 fHistDCAPosPi[i] = new TH1F(Form("fHistDCAPosPi%d",i),Form("fHistDCAPosPi%d",i),2000,-1,1); //DCA distr. with NSigma PID
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);
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);
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);
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);
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);
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);
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);
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);
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]);
439 fOutput->Add(fHistDCAPosPi[i]); //DCA distr
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]);
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]);
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]);
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]);
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]);
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]);
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]);
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]);
502 for(Int_t j=0;j<3;j++){
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]);
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);
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);
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]);
531 fOutput->Add(fHistPosNSigmaMC[j]);
532 fOutput->Add(fHistNegNSigmaMC[j]);
533 fOutput->Add(fHistPosNSigmaPrim[j]);
534 fOutput->Add(fHistNegNSigmaPrim[j]);
535 fOutput->Add(fHistPosNSigmaPrimMC[j]);
536 fOutput->Add(fHistNegNSigmaPrimMC[j]);
540 fNtupleNSigma = new TNtuple("fNtupleNSigma","fNtupleNSigma","p:pt:dedx:dedx3:dedx4:dedx5:dedx6:ncls:nclspid:sign:run:eta:impactXY:impactZ:isph:pdgcode:mfl:uniqueID:chi2ncls");
541 fOutput->Add(fNtupleNSigma);
542 fNtupleMC = new TNtuple("fNtupleMC","fNtupleMC","ptMC:pdgcode:signMC:etaMC:yMC:isph:evSel:run");
543 fOutput->Add(fNtupleMC);
548 Printf("end of CreateOutputObjects");
551 //________________________________________________________________________
552 void AliAnalysisTaskSEITSsaSpectra::UserExec(Option_t *){
554 // Called for each event
556 ///////////////////////////////////////
558 Float_t pdgmass[4]={0.13957,0.493677,0.938272,1.8756}; //mass for pi, K, P (Gev/c^2)
559 Int_t listcode[3]={211,321,2212};//code for pi, K, P (Gev/c^2)
562 Int_t code=-999, signMC=-999,isph=-999,mfl=-999,uniqueID=-999;
563 Float_t impactXY=-999, impactZ=-999;
569 TParticlePDG *pdgPart=0;
571 /////////////////////
573 fESD=(AliESDEvent*)InputEvent();
575 printf("AliAnalysisTaskSDDRP::Exec(): bad ESD\n");
578 fHistNEvents->Fill(-1);
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;
592 fHistNEvents->Fill(0);
596 AliMCEventHandler* eventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
598 Printf("ERROR: Could not retrieve MC event handler");
601 AliMCEvent* mcEvent = eventHandler->MCEvent();
603 Printf("ERROR: Could not retrieve MC event");
606 stack = mcEvent->Stack();
608 printf("ERROR: stack not available\n");
612 if(!fITSPIDResponse){
613 fITSPIDResponse=new AliITSPIDResponse(fMC);
618 if(stack) nTrackMC = stack->GetNtrack();
619 const AliESDVertex *vtx = fESD->GetPrimaryVertexSPD();
621 ///////////selection of the centrality or multiplicity bin
623 //selection on the event centrality
625 if(!(fLowCentrality<0.0)&&fUpCentrality>0.0)
627 AliCentrality *centrality = fESD->GetCentrality();
628 if(!centrality->IsEventInCentralityClass(fLowCentrality,fUpCentrality,"V0M"))
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"));
636 //selection on the event multiplicity based on global tracks
637 Int_t multiplicity = fesdTrackCutsMult->CountAcceptedTracks(fESD);
641 if(multiplicity<fLowMult)
646 if(multiplicity>fUpMult)
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);
655 //multipicity selection based on SPD
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++)
662 nClusters[ilay] = (Float_t)mult->GetNumberOfITSClusters(ilay);
664 spdCorr = AliESDUtils::GetCorrSPD2(nClusters[1],vtx->GetZ());
668 if(((Int_t)spdCorr)<fLowMult)
675 if(((Int_t)spdCorr)>fUpMult)
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);
690 fHistNEvents->Fill(1);
693 fHistNEvents->Fill(2);
694 if(vtx->GetNContributors()<0) evSel=0;
696 fHistNEvents->Fill(3);
697 if(TMath::Abs(vtx->GetZv())>10) evSel=0;
699 fHistNEvents->Fill(4);
700 if(vtx->GetZRes()>0.5) evSel=0;
702 fHistNEvents->Fill(5);
703 if(vtx->IsFromVertexerZ() && vtx->GetDispersion()>0.03) evSel=0;
704 else fHistNEvents->Fill(6);
711 /////first loop on stack, before event selection, filling MC ntuple
713 for(Int_t imc=0; imc<nTrackMC; imc++){
714 part = stack->Particle(imc);
716 if(!stack->IsPhysicalPrimary(imc)) isph=0;
717 pdgPart = part->GetPDG();
718 if(!pdgPart)continue;
719 if(pdgPart->Charge()==0) continue; //no neutral particles
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
723 if(pdgPart->Charge()>0) signMC=1;
726 code=pdgPart->PdgCode();
728 for(Int_t j=0; j<3; j++){
729 if(TMath::Abs(code)==listcode[j]){
734 Int_t indexMoth=part->GetFirstMother();
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))));
740 uniqueID = part->GetUniqueID();
743 if(TMath::Abs(code)==211 || TMath::Abs(code)==321 || TMath::Abs(code)==2212){
746 xntMC[indexMC++]=(Float_t)ptMC;
747 xntMC[indexMC++]=(Float_t)code;
748 xntMC[indexMC++]=(Float_t)signMC;
749 xntMC[indexMC++]=(Float_t)part->Eta();
750 xntMC[indexMC++]=(Float_t)yMC;
751 xntMC[indexMC++]=(Float_t)isph;
752 xntMC[indexMC++]=(Float_t)evSel;
753 xntMC[indexMC++]=(Float_t)fESD->GetRunNumber();
755 if(fFillNtuple) fNtupleMC->Fill(xntMC);
759 if(stack->IsPhysicalPrimary(imc)){
760 if(signMC>0) fHistPrimMCposBefEvSel[jpart]->Fill(TMath::Abs(ptMC));
761 else fHistPrimMCnegBefEvSel[jpart]->Fill(TMath::Abs(ptMC));
763 if(signMC>0) fHistPrimMCpos[jpart]->Fill(TMath::Abs(ptMC));
764 else fHistPrimMCneg[jpart]->Fill(TMath::Abs(ptMC));
767 if(mfl==3 && uniqueID == kPDecay){ // If a particle is not a physical primary, check if it comes from weak decay
768 if(signMC>0) fHistSecStrMCposBefEvSel[jpart]->Fill(TMath::Abs(ptMC));
769 else fHistSecStrMCnegBefEvSel[jpart]->Fill(TMath::Abs(ptMC));
771 if(signMC>0) fHistSecStrMCpos[jpart]->Fill(TMath::Abs(ptMC));
772 else fHistSecStrMCneg[jpart]->Fill(TMath::Abs(ptMC));
775 if(signMC>0) fHistSecMatMCposBefEvSel[jpart]->Fill(TMath::Abs(ptMC));
776 else fHistSecMatMCnegBefEvSel[jpart]->Fill(TMath::Abs(ptMC));
778 if(signMC>0) fHistSecMatMCpos[jpart]->Fill(TMath::Abs(ptMC));
779 else fHistSecMatMCneg[jpart]->Fill(TMath::Abs(ptMC));
787 if(evSel==0)return; //event selection
791 for (Int_t iTrack=0; iTrack<fESD->GetNumberOfTracks(); iTrack++) {
797 track = (AliESDtrack*)fESD->GetTrack(iTrack);
798 if (!track) continue;
804 label="no selection";
805 fHistNTracks->Fill(countBinTrk);
806 if(track->GetSign()>0)fHistNTracksPos->Fill(countBinTrk);
807 if(track->GetSign()<0)fHistNTracksNeg->Fill(countBinTrk);
808 fHistNTracks->GetXaxis()->SetBinLabel(fHistNTracks->FindBin(countBinTrk),label.Data());
809 fHistNTracksPos->GetXaxis()->SetBinLabel(fHistNTracksPos->FindBin(countBinTrk),label.Data());
810 fHistNTracksNeg->GetXaxis()->SetBinLabel(fHistNTracksNeg->FindBin(countBinTrk),label.Data());
813 status=track->GetStatus();
814 if((status&AliESDtrack::kITSpureSA)==0) continue; //its standalone
817 fHistNTracks->Fill(countBinTrk);
818 if(track->GetSign()>0)fHistNTracksPos->Fill(countBinTrk);
819 if(track->GetSign()<0)fHistNTracksNeg->Fill(countBinTrk);
820 fHistNTracks->GetXaxis()->SetBinLabel(fHistNTracks->FindBin(countBinTrk),label.Data());
821 fHistNTracksPos->GetXaxis()->SetBinLabel(fHistNTracksPos->FindBin(countBinTrk),label.Data());
822 fHistNTracksNeg->GetXaxis()->SetBinLabel(fHistNTracksNeg->FindBin(countBinTrk),label.Data());
825 if((status&AliESDtrack::kITSrefit)==0) continue; //its refit
828 fHistNTracks->Fill(countBinTrk);
829 if(track->GetSign()>0)fHistNTracksPos->Fill(countBinTrk);
830 if(track->GetSign()<0)fHistNTracksNeg->Fill(countBinTrk);
831 fHistNTracks->GetXaxis()->SetBinLabel(fHistNTracks->FindBin(countBinTrk),label.Data());
832 fHistNTracksPos->GetXaxis()->SetBinLabel(fHistNTracksPos->FindBin(countBinTrk),label.Data());
833 fHistNTracksNeg->GetXaxis()->SetBinLabel(fHistNTracksNeg->FindBin(countBinTrk),label.Data());
836 if(TMath::Abs(track->GetSign())<0.0001) continue; //no neutral particles
838 label="neutral particle";
839 fHistNTracks->Fill(countBinTrk);
840 if(track->GetSign()>0)fHistNTracksPos->Fill(countBinTrk);
841 if(track->GetSign()<0)fHistNTracksNeg->Fill(countBinTrk);
842 fHistNTracks->GetXaxis()->SetBinLabel(fHistNTracks->FindBin(countBinTrk),label.Data());
843 fHistNTracksPos->GetXaxis()->SetBinLabel(fHistNTracksPos->FindBin(countBinTrk),label.Data());
844 fHistNTracksNeg->GetXaxis()->SetBinLabel(fHistNTracksNeg->FindBin(countBinTrk),label.Data());
848 UInt_t clumap = track->GetITSClusterMap();
850 for(Int_t il=0; il<2; il++) if(TESTBIT(clumap,il)) nSPD++;
851 if(nSPD<fMinSPDPts) continue;
854 fHistNTracks->Fill(countBinTrk);
855 if(track->GetSign()>0)fHistNTracksPos->Fill(countBinTrk);
856 if(track->GetSign()<0)fHistNTracksNeg->Fill(countBinTrk);
857 fHistNTracks->GetXaxis()->SetBinLabel(fHistNTracks->FindBin(countBinTrk),label.Data());
858 fHistNTracksPos->GetXaxis()->SetBinLabel(fHistNTracksPos->FindBin(countBinTrk),label.Data());
859 fHistNTracksNeg->GetXaxis()->SetBinLabel(fHistNTracksNeg->FindBin(countBinTrk),label.Data());
863 for(Int_t j=2;j<6;j++) if(TESTBIT(clumap,j)) nPtsForPid++;
864 if(nPtsForPid<fMinNdEdxSamples) continue; //at least 3 points on SSD/SDD
867 fHistNTracks->Fill(countBinTrk);
868 if(track->GetSign()>0)fHistNTracksPos->Fill(countBinTrk);
869 if(track->GetSign()<0)fHistNTracksNeg->Fill(countBinTrk);
870 fHistNTracks->GetXaxis()->SetBinLabel(fHistNTracks->FindBin(countBinTrk),label.Data());
871 fHistNTracksPos->GetXaxis()->SetBinLabel(fHistNTracksPos->FindBin(countBinTrk),label.Data());
872 fHistNTracksNeg->GetXaxis()->SetBinLabel(fHistNTracksNeg->FindBin(countBinTrk),label.Data());
875 //chisquare/nclusters
876 Int_t nclu=nSPD+nPtsForPid;
877 if(track->GetITSchi2()/nclu > fMaxChi2Clu) continue;
880 fHistNTracks->Fill(countBinTrk);
881 if(track->GetSign()>0)fHistNTracksPos->Fill(countBinTrk);
882 if(track->GetSign()<0)fHistNTracksNeg->Fill(countBinTrk);
883 fHistNTracks->GetXaxis()->SetBinLabel(fHistNTracks->FindBin(countBinTrk),label.Data());
884 fHistNTracksPos->GetXaxis()->SetBinLabel(fHistNTracksPos->FindBin(countBinTrk),label.Data());
885 fHistNTracksNeg->GetXaxis()->SetBinLabel(fHistNTracksNeg->FindBin(countBinTrk),label.Data());
888 //pseudorapidity and rapidity
889 if(TMath::Abs(track->Eta()) > fEtaRange) continue;
892 fHistNTracks->Fill(countBinTrk);
893 if(track->GetSign()>0)fHistNTracksPos->Fill(countBinTrk);
894 if(track->GetSign()<0)fHistNTracksNeg->Fill(countBinTrk);
895 fHistNTracks->GetXaxis()->SetBinLabel(fHistNTracks->FindBin(countBinTrk),label.Data());
896 fHistNTracksPos->GetXaxis()->SetBinLabel(fHistNTracksPos->FindBin(countBinTrk),label.Data());
897 fHistNTracksNeg->GetXaxis()->SetBinLabel(fHistNTracksNeg->FindBin(countBinTrk),label.Data());
901 track->GetITSdEdxSamples(dedxLay);
902 Double_t dedx = CookdEdx(dedxLay);
906 fHistNTracks->Fill(countBinTrk);
907 if(track->GetSign()>0)fHistNTracksPos->Fill(countBinTrk);
908 if(track->GetSign()<0)fHistNTracksNeg->Fill(countBinTrk);
909 fHistNTracks->GetXaxis()->SetBinLabel(fHistNTracks->FindBin(countBinTrk),label.Data());
910 fHistNTracksPos->GetXaxis()->SetBinLabel(fHistNTracksPos->FindBin(countBinTrk),label.Data());
911 fHistNTracksNeg->GetXaxis()->SetBinLabel(fHistNTracksNeg->FindBin(countBinTrk),label.Data());
914 Float_t pt = track->Pt();
916 for(Int_t m=0; m<kNbins; m++){
917 if(TMath::Abs(pt) > fPtBinLimits[m] && TMath::Abs(pt) < fPtBinLimits[m+1]){
922 track->GetImpactParameters(impactXY, impactZ);
925 //information from the MC kinematics
927 if(track->GetLabel()<0)isph=-1;
928 if(track->GetLabel()>=0){
929 part = (TParticle*)stack->Particle(track->GetLabel());
930 pdgPart = part->GetPDG();
931 code = pdgPart->PdgCode();
932 if(stack->IsPhysicalPrimary(track->GetLabel())) isph=1;
935 Int_t indexMoth=part->GetFirstMother();
937 TParticle* moth = stack->Particle(indexMoth);
938 Float_t codemoth = TMath::Abs(moth->GetPdgCode());
939 mfl = Int_t (codemoth/ TMath::Power(10, Int_t(TMath::Log10(codemoth))));
941 uniqueID = part->GetUniqueID();
944 //Filling DCA distribution with MC truth
946 if(theBin>=0 && theBin<kNbins){
947 if(isph==1){//primaries in MC
948 if(track->GetSign()>0){
949 if(TMath::Abs(code)==listcode[0]) fHistMCPrimDCAPosPi[theBin]->Fill(impactXY);
950 if(TMath::Abs(code)==listcode[1]) fHistMCPrimDCAPosK[theBin]->Fill(impactXY);
951 if(TMath::Abs(code)==listcode[2]) fHistMCPrimDCAPosP[theBin]->Fill(impactXY);
953 if(TMath::Abs(code)==listcode[0]) fHistMCPrimDCANegPi[theBin]->Fill(impactXY);
954 if(TMath::Abs(code)==listcode[1]) fHistMCPrimDCANegK[theBin]->Fill(impactXY);
955 if(TMath::Abs(code)==listcode[2]) fHistMCPrimDCANegP[theBin]->Fill(impactXY);
959 if(isph==0){//primaries in MC
960 if(mfl==3 && uniqueID == kPDecay){
961 if(track->GetSign()>0){
962 if(TMath::Abs(code)==listcode[0]) fHistMCSecStDCAPosPi[theBin]->Fill(impactXY);
963 if(TMath::Abs(code)==listcode[1]) fHistMCSecStDCAPosK[theBin]->Fill(impactXY);
964 if(TMath::Abs(code)==listcode[2]) fHistMCSecStDCAPosP[theBin]->Fill(impactXY);
966 if(TMath::Abs(code)==listcode[0]) fHistMCSecStDCANegPi[theBin]->Fill(impactXY);
967 if(TMath::Abs(code)==listcode[1]) fHistMCSecStDCANegK[theBin]->Fill(impactXY);
968 if(TMath::Abs(code)==listcode[2]) fHistMCSecStDCANegP[theBin]->Fill(impactXY);
971 if(track->GetSign()>0){
972 if(TMath::Abs(code)==listcode[0]) fHistMCSecMatDCAPosPi[theBin]->Fill(impactXY);
973 if(TMath::Abs(code)==listcode[1]) fHistMCSecMatDCAPosK[theBin]->Fill(impactXY);
974 if(TMath::Abs(code)==listcode[2]) fHistMCSecMatDCAPosP[theBin]->Fill(impactXY);
976 if(TMath::Abs(code)==listcode[0]) fHistMCSecMatDCANegPi[theBin]->Fill(impactXY);
977 if(TMath::Abs(code)==listcode[1]) fHistMCSecMatDCANegK[theBin]->Fill(impactXY);
978 if(TMath::Abs(code)==listcode[2]) fHistMCSecMatDCANegP[theBin]->Fill(impactXY);
987 xnt[index++]=(Float_t)track->GetP();
988 xnt[index++]=(Float_t)track->Pt();
989 xnt[index++]=(Float_t)dedx;
990 xnt[index++]=(Float_t)dedxLay[0];
991 xnt[index++]=(Float_t)dedxLay[1];
992 xnt[index++]=(Float_t)dedxLay[2];
993 xnt[index++]=(Float_t)dedxLay[3];
994 xnt[index++]=(Float_t)nclu;
995 xnt[index++]=(Float_t)nPtsForPid;
996 xnt[index++]=(Float_t)track->GetSign();
997 xnt[index++]=(Float_t)fESD->GetRunNumber();
998 xnt[index++]=(Float_t)track->Eta();
999 xnt[index++]=(Float_t)impactXY;
1000 xnt[index++]=(Float_t)impactZ;
1001 xnt[index++]=(Float_t)isph;
1002 xnt[index++]=(Float_t)code;
1003 xnt[index++]=(Float_t)mfl;
1004 xnt[index++]=(Float_t)uniqueID;
1005 xnt[index]=(Float_t)track->GetITSchi2()/nclu;
1007 if(fFillNtuple) fNtupleNSigma->Fill(xnt);
1012 Double_t y[4],bbtheo[4],logdiff[4];
1013 Float_t p=track->GetP();
1014 if(fMC && fSmearMC){
1015 dedx=fRandGener->Gaus(dedx,fSmeardEdx*dedx);
1016 p=fRandGener->Gaus(p,fSmearP*p);
1020 Float_t resodedx[4];
1021 for(Int_t ires=0;ires<4;ires++){
1022 resodedx[ires]=fITSPIDResponse->GetResolution(1,ires+1,kTRUE);
1025 for(Int_t i=0;i<4;i++){
1026 y[i] = Eta2y(pt,pdgmass[i],track->Eta());
1027 bbtheo[i]=fITSPIDResponse->Bethe(p,pdgmass[i],kTRUE);
1028 logdiff[i]=TMath::Log(dedx) - TMath::Log(bbtheo[i]);
1031 Int_t resocls=(Int_t)nPtsForPid-1;
1033 //NSigma Method, with asymmetric bands
1034 Int_t minPosMean=-1;
1035 for(Int_t isp=0; isp<3; isp++){
1036 if(dedx<bbtheo[0])continue;
1037 Double_t bb=bbtheo[isp];
1039 Double_t bbdistance=TMath::Abs((bbtheo[isp]-bbtheo[isp-1])/2);
1040 Double_t nsigma=TMath::Abs((dedx-bb)/bbdistance);
1041 if(nsigma<1.)minPosMean=isp;
1044 Double_t bbdistance=TMath::Abs((bbtheo[isp]-bbtheo[isp+1])/2);
1045 Double_t nsigma=TMath::Abs((dedx-bb)/bbdistance);
1046 if(nsigma<1.)minPosMean=isp;
1049 if(dedx<bbtheo[0] && TMath::Abs((dedx-bbtheo[0])/(resodedx[resocls]*bbtheo[0]))<2)minPosMean=0;
1051 //NSigma method with simmetric bands
1053 Double_t nsigmas[3];
1054 Double_t min=999999.;
1056 for(Int_t isp=0; isp<3; isp++){
1057 Double_t bb=bbtheo[isp];
1058 nsigmas[isp]=TMath::Abs((dedx-bb)/(resodedx[resocls]*bb));
1059 if(nsigmas[isp]<min){
1063 //Filling histos with nsigma separation
1064 if(track->GetSign()>0)fHistPosNSigmaSep[isp]->Fill(track->GetP(),((dedx-bb)/(resodedx[resocls]*bb)));
1065 else fHistNegNSigmaSep[isp]->Fill(track->GetP(),((dedx-bb)/(resodedx[resocls]*bb)));
1069 Double_t yPartMean=y[minPosMean];
1070 Double_t yPart=y[minPos];
1072 if(yPartMean<fMaxY){
1073 //DCA distributions, before the DCA cuts, based on asymmetrinc nsigma approach
1074 if(theBin>=0 && theBin<kNbins){
1075 if(track->GetSign()>0){
1076 if(minPosMean==0) fHistDCAPosPi[theBin]->Fill(impactXY);
1077 else if(minPosMean==1) fHistDCAPosK[theBin]->Fill(impactXY);
1078 else if(minPosMean==2) fHistDCAPosP[theBin]->Fill(impactXY);
1080 if(minPosMean==0) fHistDCANegPi[theBin]->Fill(impactXY);
1081 else if(minPosMean==1) fHistDCANegK[theBin]->Fill(impactXY);
1082 else if(minPosMean==2) fHistDCANegP[theBin]->Fill(impactXY);
1087 //DCA cut on xy and z
1088 if(!DCAcut(impactXY,impactZ,pt,fMC)) continue;
1091 fHistNTracks->Fill(countBinTrk);
1092 if(track->GetSign()>0)fHistNTracksPos->Fill(countBinTrk);
1093 if(track->GetSign()<0)fHistNTracksNeg->Fill(countBinTrk);
1094 fHistNTracks->GetXaxis()->SetBinLabel(fHistNTracks->FindBin(countBinTrk),label.Data());
1095 fHistNTracksPos->GetXaxis()->SetBinLabel(fHistNTracksPos->FindBin(countBinTrk),label.Data());
1096 fHistNTracksNeg->GetXaxis()->SetBinLabel(fHistNTracksNeg->FindBin(countBinTrk),label.Data());
1102 //Filling Histos for Reco Efficiency
1103 //information from the MC kinematics
1105 if(track->GetLabel()<0)isph=-1;
1106 if(track->GetLabel()>=0){
1107 part = (TParticle*)stack->Particle(track->GetLabel());
1108 pdgPart = part->GetPDG();
1109 code = pdgPart->PdgCode();
1110 for(Int_t j=0; j<3; j++){
1111 if(TMath::Abs(code)==listcode[j]){
1117 if(pdgPart->Charge()>0) signMC=1;
1120 if(stack->IsPhysicalPrimary(track->GetLabel())){
1121 if(signMC>0) fHistPrimMCposReco[jpart]->Fill(TMath::Abs(ptMC));
1122 else fHistPrimMCnegReco[jpart]->Fill(TMath::Abs(ptMC));
1124 Int_t indexMoth=part->GetFirstMother();
1126 TParticle* moth = stack->Particle(indexMoth);
1127 Float_t codemoth = TMath::Abs(moth->GetPdgCode());
1128 mfl = Int_t (codemoth/ TMath::Power(10, Int_t(TMath::Log10(codemoth))));
1130 uniqueID = part->GetUniqueID();
1131 if(mfl==3 && uniqueID == kPDecay){ // strangeness
1132 if(signMC>0) fHistSecStrMCposReco[jpart]->Fill(TMath::Abs(ptMC));
1133 else fHistSecStrMCnegReco[jpart]->Fill(TMath::Abs(ptMC));
1135 if(signMC>0) fHistSecMatMCposReco[jpart]->Fill(TMath::Abs(ptMC));
1136 else fHistSecMatMCnegReco[jpart]->Fill(TMath::Abs(ptMC));
1143 //Nsigma histos with MC truth
1145 //asymmetric approach
1146 if(yPartMean<fMaxY){
1148 if(track->GetSign()>0) fHistPosNSigmaMean[minPosMean]->Fill(pt);
1149 else fHistNegNSigmaMean[minPosMean]->Fill(pt);
1151 //nsigma histos with MC truth on PID
1152 if(TMath::Abs(code)==listcode[minPosMean]){
1153 if(track->GetSign()>0) fHistPosNSigmaMCMean[minPosMean]->Fill(pt);
1154 else fHistNegNSigmaMCMean[minPosMean]->Fill(pt);
1156 //nsigma histos with MC truth on IsPhysicalPrimary
1158 if(track->GetSign()>0) fHistPosNSigmaPrimMean[minPosMean]->Fill(pt);
1159 else fHistNegNSigmaPrimMean[minPosMean]->Fill(pt);
1160 //nsigma histos with MC truth on IsPhysicalPrimary and PID
1161 if(TMath::Abs(code)==listcode[minPosMean]){
1162 if(track->GetSign()>0) fHistPosNSigmaPrimMCMean[minPosMean]->Fill(pt);
1163 else fHistNegNSigmaPrimMCMean[minPosMean]->Fill(pt);
1170 if(min<fMinNSigma && yPart<fMaxY){
1172 if(track->GetSign()>0) fHistPosNSigma[minPos]->Fill(pt);
1173 else fHistNegNSigma[minPos]->Fill(pt);
1175 //nsigma histos with MC truth on PID
1176 if(TMath::Abs(code)==listcode[minPos]){
1177 if(track->GetSign()>0) fHistPosNSigmaMC[minPos]->Fill(pt);
1178 else fHistNegNSigmaMC[minPos]->Fill(pt);
1180 //nsigma histos with MC truth on IsPhysicalPrimary
1182 if(track->GetSign()>0) fHistPosNSigmaPrim[minPos]->Fill(pt);
1183 else fHistNegNSigmaPrim[minPos]->Fill(pt);
1184 //nsigma histos with MC truth on IsPhysicalPrimary and PID
1185 if(TMath::Abs(code)==listcode[minPos]){
1186 if(track->GetSign()>0) fHistPosNSigmaPrimMC[minPos]->Fill(pt);
1187 else fHistNegNSigmaPrimMC[minPos]->Fill(pt);
1194 //integral approach histograms
1195 if(theBin>=0 && theBin<kNbins){
1196 if(track->GetSign()>0){
1197 if(TMath::Abs(y[0]) < fMaxY)fHistPosPi[theBin]->Fill(logdiff[0]);
1198 if(TMath::Abs(y[1]) < fMaxY)fHistPosK[theBin]->Fill(logdiff[1]);
1199 if(TMath::Abs(y[2]) < fMaxY)fHistPosP[theBin]->Fill(logdiff[2]);
1201 if(TMath::Abs(y[0])<fMaxY){
1202 if(TMath::Abs(code)!=11 && jpart<0)fHistMCPosOtherHypPion[theBin]->Fill(logdiff[0]);
1203 if(TMath::Abs(code)==11)fHistMCPosElHypPion[theBin]->Fill(logdiff[0]);
1204 if(TMath::Abs(code)==211)fHistMCPosPiHypPion[theBin]->Fill(logdiff[0]);
1205 if(TMath::Abs(code)==321)fHistMCPosKHypPion[theBin]->Fill(logdiff[0]);
1206 if(TMath::Abs(code)==2212)fHistMCPosPHypPion[theBin]->Fill(logdiff[0]);
1208 if(TMath::Abs(y[1])<fMaxY){
1209 if(TMath::Abs(code)!=11 && jpart<0)fHistMCPosOtherHypKaon[theBin]->Fill(logdiff[1]);
1210 if(TMath::Abs(code)==11)fHistMCPosElHypKaon[theBin]->Fill(logdiff[1]);
1211 if(TMath::Abs(code)==211)fHistMCPosPiHypKaon[theBin]->Fill(logdiff[1]);
1212 if(TMath::Abs(code)==321)fHistMCPosKHypKaon[theBin]->Fill(logdiff[1]);
1213 if(TMath::Abs(code)==2212)fHistMCPosPHypKaon[theBin]->Fill(logdiff[1]);
1215 if(TMath::Abs(y[2])<fMaxY){
1216 if(TMath::Abs(code)!=11 && jpart<0)fHistMCPosOtherHypProton[theBin]->Fill(logdiff[2]);
1217 if(TMath::Abs(code)==11)fHistMCPosElHypProton[theBin]->Fill(logdiff[2]);
1218 if(TMath::Abs(code)==211)fHistMCPosPiHypProton[theBin]->Fill(logdiff[2]);
1219 if(TMath::Abs(code)==321)fHistMCPosKHypProton[theBin]->Fill(logdiff[2]);
1220 if(TMath::Abs(code)==2212)fHistMCPosPHypProton[theBin]->Fill(logdiff[2]);
1224 if(TMath::Abs(y[0]) < fMaxY)fHistNegPi[theBin]->Fill(logdiff[0]);
1225 if(TMath::Abs(y[1]) < fMaxY)fHistNegK[theBin]->Fill(logdiff[1]);
1226 if(TMath::Abs(y[2]) < fMaxY)fHistNegP[theBin]->Fill(logdiff[2]);
1228 if(TMath::Abs(y[0])<fMaxY){
1229 if(TMath::Abs(code)!=11 && jpart<0)fHistMCNegOtherHypPion[theBin]->Fill(logdiff[0]);
1230 if(TMath::Abs(code)==11)fHistMCNegElHypPion[theBin]->Fill(logdiff[0]);
1231 if(TMath::Abs(code)==211)fHistMCNegPiHypPion[theBin]->Fill(logdiff[0]);
1232 if(TMath::Abs(code)==321)fHistMCNegKHypPion[theBin]->Fill(logdiff[0]);
1233 if(TMath::Abs(code)==2212)fHistMCNegPHypPion[theBin]->Fill(logdiff[0]);
1235 if(TMath::Abs(y[1])<fMaxY){
1236 if(TMath::Abs(code)!=11 && jpart<0)fHistMCNegOtherHypKaon[theBin]->Fill(logdiff[1]);
1237 if(TMath::Abs(code)==11)fHistMCNegElHypKaon[theBin]->Fill(logdiff[1]);
1238 if(TMath::Abs(code)==211)fHistMCNegPiHypKaon[theBin]->Fill(logdiff[1]);
1239 if(TMath::Abs(code)==321)fHistMCNegKHypKaon[theBin]->Fill(logdiff[1]);
1240 if(TMath::Abs(code)==2212)fHistMCNegPHypKaon[theBin]->Fill(logdiff[1]);
1242 if(TMath::Abs(y[2])<fMaxY){
1243 if(TMath::Abs(code)!=11 && jpart<0)fHistMCNegOtherHypProton[theBin]->Fill(logdiff[2]);
1244 if(TMath::Abs(code)==11)fHistMCNegElHypProton[theBin]->Fill(logdiff[2]);
1245 if(TMath::Abs(code)==211)fHistMCNegPiHypProton[theBin]->Fill(logdiff[2]);
1246 if(TMath::Abs(code)==321)fHistMCNegKHypProton[theBin]->Fill(logdiff[2]);
1247 if(TMath::Abs(code)==2212)fHistMCNegPHypProton[theBin]->Fill(logdiff[2]);
1254 //fill propaganda plot with dedx
1255 fHistDEDX->Fill(track->GetP(),dedx);
1256 fHistDEDXdouble->Fill(track->GetP()*track->GetSign(),dedx);
1258 //fill charge distribution histo to check the calibration
1259 for(Int_t j=0;j<4;j++){
1260 if(dedxLay[j]<5) continue;
1261 fHistCharge[j]->Fill(dedxLay[j]);
1265 // Post output data.
1266 PostData(1,fOutput);
1267 Printf("............. end of Exec");
1270 //________________________________________________________________________
1271 void AliAnalysisTaskSEITSsaSpectra::Terminate(Option_t *) {
1273 // Called once at the end of the query
1275 fOutput = dynamic_cast<TList*>(GetOutputData(1));
1277 printf("ERROR: fOutput not available\n");
1280 fHistNEvents = dynamic_cast<TH1F*>(fOutput->FindObject("fHistNEvents"));
1281 fHistMult = dynamic_cast<TH1F*>(fOutput->FindObject("fHistMult"));
1282 fHistCen = dynamic_cast<TH1F*>(fOutput->FindObject("fHistCen"));
1283 fHistNTracks = dynamic_cast<TH1F*>(fOutput->FindObject("fHistNTracks"));
1284 fHistNTracksPos = dynamic_cast<TH1F*>(fOutput->FindObject("fHistNTracksPos"));
1285 fHistNTracksNeg = dynamic_cast<TH1F*>(fOutput->FindObject("fHistNTracksNeg"));
1286 fHistDEDX = dynamic_cast<TH2F*>(fOutput->FindObject("fHistDEDX"));
1287 fHistDEDXdouble = dynamic_cast<TH2F*>(fOutput->FindObject("fHistDEDXdouble"));
1290 fHistBeforeEvSel = dynamic_cast<TH1F*>(fOutput->FindObject("fHistBeforeEvSel"));
1291 fHistAfterEvSel = dynamic_cast<TH1F*>(fOutput->FindObject("fHistAfterEvSel"));
1294 for(Int_t j=0;j<3;j++){
1295 fHistPosNSigmaSep[j] = dynamic_cast<TH2F*>(fOutput->FindObject(Form("fHistPosNSigmaSep%d",j)));
1296 fHistNegNSigmaSep[j] = dynamic_cast<TH2F*>(fOutput->FindObject(Form("fHistNegNSigmaSep%d",j)));
1298 fHistPrimMCpos[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistPrimMCpos%d",j)));
1299 fHistPrimMCneg[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistPrimMCneg%d",j)));
1300 fHistSecStrMCpos[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistSecStrMCpos%d",j)));
1301 fHistSecStrMCneg[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistSecStrMCneg%d",j)));
1302 fHistSecMatMCpos[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistSecMatMCpos%d",j)));
1303 fHistSecMatMCneg[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistSecMatMCneg%d",j)));
1305 fHistPrimMCposBefEvSel[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistPrimMCposBefEvSel%d",j)));
1306 fHistPrimMCnegBefEvSel[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistPrimMCnegBefEvSel%d",j)));
1307 fHistSecStrMCposBefEvSel[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistSecStrMCposBefEvSel%d",j)));
1308 fHistSecStrMCnegBefEvSel[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistSecStrMCnegBefEvSel%d",j)));
1309 fHistSecMatMCposBefEvSel[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistSecMatMCposBefEvSel%d",j)));
1310 fHistSecMatMCnegBefEvSel[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistSecMatMCnegBefEvSel%d",j)));
1312 fHistPrimMCposReco[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistPrimMCposReco%d",j)));
1313 fHistPrimMCnegReco[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistPrimMCnegReco%d",j)));
1314 fHistSecStrMCposReco[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistSecStrMCposReco%d",j)));
1315 fHistSecStrMCnegReco[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistSecStrMCnegReco%d",j)));
1316 fHistSecMatMCposReco[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistSecMatMCposReco%d",j)));
1317 fHistSecMatMCnegReco[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistSecMatMCnegReco%d",j)));
1321 for(Int_t i=0; i<4; i++){
1322 fHistCharge[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistChargeLay%d",i)));
1325 for(Int_t i=0; i<kNbins; i++){
1326 fHistPosPi[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistPosPi%d",i)));
1327 fHistPosK[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistPosK%d",i)));
1328 fHistPosP[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistPosP%d",i)));
1329 fHistNegPi[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistNegPi%d",i)));
1330 fHistNegK[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistNegK%d",i)));
1331 fHistNegP[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistNegP%d",i)));
1333 fHistDCAPosPi[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistDCAPosPi%d",i)));
1334 fHistDCAPosK[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistDCAPosK%d",i)));
1335 fHistDCAPosP[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistDCAPosP%d",i)));
1336 fHistDCANegPi[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistDCANegPi%d",i)));
1337 fHistDCANegK[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistDCANegK%d",i)));
1338 fHistDCANegP[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistDCANegP%d",i)));
1343 fHistMCPrimDCAPosPi[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPrimDCAPosPi%d",i)));
1344 fHistMCPrimDCAPosK[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPrimDCAPosK%d",i)));
1345 fHistMCPrimDCAPosP[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPrimDCAPosP%d",i)));
1346 fHistMCPrimDCANegPi[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPrimDCANegPi%d",i)));
1347 fHistMCPrimDCANegK[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPrimDCANegK%d",i)));
1348 fHistMCPrimDCANegP[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPrimDCANegP%d",i)));
1350 fHistMCSecStDCAPosPi[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCSecStDCAPosPi%d",i)));
1351 fHistMCSecStDCAPosK[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCSecStDCAPosK%d",i)));
1352 fHistMCSecStDCAPosP[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCSecStDCAPosP%d",i)));
1353 fHistMCSecStDCANegPi[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCSecStDCANegPi%d",i)));
1354 fHistMCSecStDCANegK[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCSecStDCANegK%d",i)));
1355 fHistMCSecStDCANegP[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCSecStDCANegP%d",i)));
1357 fHistMCSecMatDCAPosPi[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCSecMatDCAPosPi%d",i)));
1358 fHistMCSecMatDCAPosK[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCSecMatDCAPosK%d",i)));
1359 fHistMCSecMatDCAPosP[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCSecMatDCAPosP%d",i)));
1360 fHistMCSecMatDCANegPi[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCSecMatDCANegPi%d",i)));
1361 fHistMCSecMatDCANegK[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCSecMatDCANegK%d",i)));
1362 fHistMCSecMatDCANegP[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCSecMatDCANegP%d",i)));
1364 fHistMCPosOtherHypPion[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosOtherHypPion%d",i)));
1365 fHistMCPosOtherHypKaon[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosOtherHypKaon%d",i)));
1366 fHistMCPosOtherHypProton[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosOtherHypProton%d",i)));
1367 fHistMCPosElHypPion[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosElHypPion%d",i)));
1368 fHistMCPosElHypKaon[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosElHypKaon%d",i)));
1369 fHistMCPosElHypProton[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosElHypProton%d",i)));
1370 fHistMCPosPiHypPion[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosPiHypPion%d",i)));
1371 fHistMCPosPiHypKaon[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosPiHypKaon%d",i)));
1372 fHistMCPosPiHypProton[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosPiHypProton%d",i)));
1373 fHistMCPosKHypPion[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosKHypPion%d",i)));
1374 fHistMCPosKHypKaon[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosKHypKaon%d",i)));
1375 fHistMCPosKHypProton[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosKHypProton%d",i)));
1376 fHistMCPosPHypPion[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosPHypPion%d",i)));
1377 fHistMCPosPHypKaon[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosPHypKaon%d",i)));
1378 fHistMCPosPHypProton[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosPHypProton%d",i)));
1380 fHistMCNegOtherHypPion[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegOtherHypPion%d",i)));
1381 fHistMCNegOtherHypKaon[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegOtherHypKaon%d",i)));
1382 fHistMCNegOtherHypProton[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegOtherHypProton%d",i)));
1383 fHistMCNegElHypPion[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegElHypPion%d",i)));
1384 fHistMCNegElHypKaon[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegElHypKaon%d",i)));
1385 fHistMCNegElHypProton[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegElHypProton%d",i)));
1386 fHistMCNegPiHypPion[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegPiHypPion%d",i)));
1387 fHistMCNegPiHypKaon[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegPiHypKaon%d",i)));
1388 fHistMCNegPiHypProton[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegPiHypProton%d",i)));
1389 fHistMCNegKHypPion[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegKHypPion%d",i)));
1390 fHistMCNegKHypKaon[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegKHypKaon%d",i)));
1391 fHistMCNegKHypProton[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegKHypProton%d",i)));
1392 fHistMCNegPHypPion[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegPHypPion%d",i)));
1393 fHistMCNegPHypKaon[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegPHypKaon%d",i)));
1394 fHistMCNegPHypProton[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegPHypProton%d",i)));
1399 for(Int_t j=0;j<3;j++){
1400 fHistPosNSigmaMean[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistPosNSigmaMean%d",j)));
1401 fHistNegNSigmaMean[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistNegNSigmaMean%d",j)));
1402 fHistPosNSigmaMCMean[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistPosNSigmaMCMean%d",j)));
1403 fHistNegNSigmaMCMean[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistNegNSigmaMCMean%d",j)));
1404 fHistPosNSigmaPrimMean[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistPosNSigmaPrimMean%d",j)));
1405 fHistNegNSigmaPrimMean[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistNegNSigmaPrimMean%d",j)));
1406 fHistPosNSigmaPrimMCMean[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistPosNSigmaPrimMCMean%d",j)));
1407 fHistNegNSigmaPrimMCMean[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistNegNSigmaPrimMCMean%d",j)));
1409 fHistPosNSigma[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistPosNSigma%d",j)));
1410 fHistNegNSigma[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistNegNSigma%d",j)));
1411 fHistPosNSigmaMC[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistPosNSigmaMC%d",j)));
1412 fHistNegNSigmaMC[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistNegNSigmaMC%d",j)));
1413 fHistPosNSigmaPrim[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistPosNSigmaPrim%d",j)));
1414 fHistNegNSigmaPrim[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistNegNSigmaPrim%d",j)));
1415 fHistPosNSigmaPrimMC[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistPosNSigmaPrimMC%d",j)));
1416 fHistNegNSigmaPrimMC[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistNegNSigmaPrimMC%d",j)));
1420 fNtupleNSigma = dynamic_cast<TNtuple*>(fOutput->FindObject("fNtupleNSigma"));
1421 fNtupleMC = dynamic_cast<TNtuple*>(fOutput->FindObject("fNtupleMC"));
1423 Printf("end of Terminate");