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"
46 ClassImp(AliAnalysisTaskSEITSsaSpectra)
48 //________________________________________________________________________
49 AliAnalysisTaskSEITSsaSpectra::AliAnalysisTaskSEITSsaSpectra():
50 AliAnalysisTaskSE("Task CFits"),
77 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};
78 for(Int_t iBin=0; iBin<kNbins+1; iBin++) fPtBinLimits[iBin]=xbins[iBin];
79 fRandGener=new TRandom3(0);
81 DefineInput(0, TChain::Class());
82 DefineOutput(1, TList::Class());
83 Printf("end of AliAnalysisTaskSEITSsaSpectra");
86 //___________________________________________________________________________
87 AliAnalysisTaskSEITSsaSpectra::~AliAnalysisTaskSEITSsaSpectra(){
93 if(fRandGener) delete fRandGener;
96 //________________________________________________________________________
97 Double_t AliAnalysisTaskSEITSsaSpectra::CookdEdx(Double_t *s) const {
98 // truncated mean for the dEdx
100 Double_t dedx[4]={0.,0.,0.,0.};
101 for (Int_t il=0; il<4; il++) { // count good (>0) dE/dx values
107 if(nc<fMinNdEdxSamples) return -1.;
110 Int_t swap; // sort in ascending order
113 for (Int_t i=0; i<nc-1; i++) {
114 if (dedx[i]<=dedx[i+1]) continue;
122 Double_t sumamp=0,sumweight=0;
123 Double_t weight[4]={1.,1.,0.,0.};
124 if(nc==3) weight[1]=0.5;
125 else if(nc<3) weight[1]=0.;
126 for (Int_t i=0; i<nc; i++) {
127 sumamp+= dedx[i]*weight[i];
128 sumweight+=weight[i];
130 return sumamp/sumweight;
134 //________________________________________________________________________
135 Bool_t AliAnalysisTaskSEITSsaSpectra::DCAcut(Double_t impactXY, Double_t impactZ, Double_t pt, Bool_t optMC) const {
136 // cut on transverse impact parameter updaated on 20-5-2010
137 // from the study of L. Milano, F. Prino on the ITS standalone tracks
138 // using the common binning of the TPC tracks
142 xyP[0]=88.63;//SIMpass4a12
150 xyP[0]=85.28;//DATApass6
157 Double_t xySigma = xyP[0] + xyP[1]/TMath::Power(TMath::Abs(pt),xyP[2]);
158 Double_t xyMax = fNSigmaDCAxy*xySigma; //in micron
159 if((TMath::Abs(impactXY)*10000)>xyMax) return kFALSE;
161 Double_t zSigma = zP[0] + zP[1]/TMath::Power(TMath::Abs(pt),zP[2]);
162 Double_t zMax = fNSigmaDCAz*zSigma; //in micron
163 if((TMath::Abs(impactZ)*10000)>zMax) return kFALSE;
168 //________________________________________________________________________
169 Double_t AliAnalysisTaskSEITSsaSpectra::Eta2y(Double_t pt, Double_t m, Double_t eta) const {
171 Double_t mt = TMath::Sqrt(m*m + pt*pt);
172 return TMath::ASinH(pt/mt*TMath::SinH(eta));
176 //________________________________________________________________________
177 Double_t AliAnalysisTaskSEITSsaSpectra::BetheBloch(Double_t bg,Bool_t optMC) const{
178 // BB PHOBOS parametrization tuned by G. Ortona on 900 GeV pp data of 2009
180 if(optMC){//Double_t par[5]={139.1,23.36,0.06052,0.2043,-0.0004999};
187 //Double_t par[5]={5.33458e+04,1.65303e+01,2.60065e-03,3.59533e-04,7.51168e-05};}
194 Double_t beta = bg/TMath::Sqrt(1.+ bg*bg);
195 Double_t gamma=bg/beta;
197 if(bg<par[2]) eff=(bg-par[3])*(bg-par[3])+par[4];
198 else eff=(par[2]-par[3])*(par[2]-par[3])+par[4];
199 return (par[1]+2.0*TMath::Log(gamma)-beta*beta)*(par[0]/(beta*beta))*eff;
203 //________________________________________________________________________
204 void AliAnalysisTaskSEITSsaSpectra::UserCreateOutputObjects(){
205 // Create a TList with histograms and a TNtuple
208 fOutput = new TList();
210 fOutput->SetName("Spiderman");
212 fHistNEvents = new TH1F("fHistNEvents", "Number of processed events",6,0.5,6.5);
213 fHistNEvents->Sumw2();
214 fHistNEvents->SetMinimum(0);
215 fOutput->Add(fHistNEvents);
217 fHistNTracks = new TH1F("fHistNTracks", "Number of ITSsa tracks",20,0.5,20.5);
218 fHistNTracks->Sumw2();
219 fHistNTracks->SetMinimum(0);
220 fOutput->Add(fHistNTracks);
222 //binning for the histogram
223 const Int_t hnbins=400;
224 Double_t hxmin = 0.01;
226 Double_t hlogxmin = TMath::Log10(hxmin);
227 Double_t hlogxmax = TMath::Log10(hxmax);
228 Double_t hbinwidth = (hlogxmax-hlogxmin)/hnbins;
229 Double_t hxbins[hnbins+1];
231 for (Int_t i=1;i<=hnbins;i++) {
232 hxbins[i] = hxmin + TMath::Power(10,hlogxmin+i*hbinwidth);
235 fHistDEDX = new TH2F("fHistDEDX","",hnbins,hxbins,900,0,1000);
236 fOutput->Add(fHistDEDX);
238 fHistDEDXdouble = new TH2F("fHistDEDXdouble","",500,-5,5,900,0,1000);
239 fOutput->Add(fHistDEDXdouble);
242 fHistBeforeEvSel = new TH1F("fHistBeforeEvSel","fHistBeforeEvSel",kNbins,fPtBinLimits);
243 fHistAfterEvSel = new TH1F("fHistAfterEvSel","fHistAfterEvSel",kNbins,fPtBinLimits);
244 fOutput->Add(fHistBeforeEvSel);
245 fOutput->Add(fHistAfterEvSel);
249 for(Int_t j=0;j<3;j++){
250 fHistMCpos[j] = new TH1F(Form("fHistMCpos%d",j),Form("fHistMCpos%d",j),kNbins,fPtBinLimits);
251 fHistMCneg[j] = new TH1F(Form("fHistMCneg%d",j),Form("fHistMCneg%d",j),kNbins,fPtBinLimits);
252 fOutput->Add(fHistMCneg[j]);
253 fOutput->Add(fHistMCpos[j]);
257 for(Int_t j=0;j<3;j++){
258 fHistMCposBefEvSel[j] = new TH1F(Form("fHistMCposBefEvSel%d",j),Form("fHistMCposBefEvSel%d",j),kNbins,fPtBinLimits);
259 fHistMCnegBefEvSel[j] = new TH1F(Form("fHistMCnegBefEvSel%d",j),Form("fHistMCnegBefEvSel%d",j),kNbins,fPtBinLimits);
260 fOutput->Add(fHistMCnegBefEvSel[j]);
261 fOutput->Add(fHistMCposBefEvSel[j]);
264 for(Int_t i=0; i<4; i++){
265 fHistCharge[i] = new TH1F(Form("fHistChargeLay%d",i),Form("fHistChargeLay%d",i),100,0,300);
266 fOutput->Add(fHistCharge[i]);
269 for(Int_t i=0; i<kNbins; i++){
270 fHistPosPi[i] = new TH1F(Form("fHistPosPi%d",i),Form("fHistPosPi%d",i),175,-3.5,3.5);
271 fHistPosK[i] = new TH1F(Form("fHistPosK%d",i),Form("fHistPosK%d",i),175,-3.5,3.5);
272 fHistPosP[i] = new TH1F(Form("fHistPosP%d",i),Form("fHistPosP%d",i),175,-3.5,3.5);
273 fHistNegPi[i] = new TH1F(Form("fHistNegPi%d",i),Form("fHistNegPi%d",i),175,-3.5,3.5);
274 fHistNegK[i] = new TH1F(Form("fHistNegK%d",i),Form("fHistNegK%d",i),175,-3.5,3.5);
275 fHistNegP[i] = new TH1F(Form("fHistNegP%d",i),Form("fHistNegP%d",i),175,-3.5,3.5);
277 fHistDCAPosPi[i] = new TH1F(Form("fHistDCAPosPi%d",i),Form("fHistDCAPosPi%d",i),2000,-1,1); //DCA distr.
278 fHistDCAPosK[i] = new TH1F(Form("fHistDCAPosK%d",i),Form("fHistDCAPosK%d",i),2000,-1,1);
279 fHistDCAPosP[i] = new TH1F(Form("fHistDCAPosP%d",i),Form("fHistDCAPosP%d",i),2000,-1,1);
280 fHistDCANegPi[i] = new TH1F(Form("fHistDCANegPi%d",i),Form("fHistDCANegPi%d",i),2000,-1,1);
281 fHistDCANegK[i] = new TH1F(Form("fHistDCANegK%d",i),Form("fHistDCANegK%d",i),2000,-1,1);
282 fHistDCANegP[i] = new TH1F(Form("fHistDCANegP%d",i),Form("fHistDCANegP%d",i),2000,-1,1);
284 fHistMCPosPi[i] = new TH1F(Form("fHistMCPosPi%d",i),Form("fHistMCPosPi%d",i),175,-3.5,3.5); //MC truth
285 fHistMCPosK[i] = new TH1F(Form("fHistMCPosK%d",i),Form("fHistMCPosK%d",i),175,-3.5,3.5);
286 fHistMCPosP[i] = new TH1F(Form("fHistMCPosP%d",i),Form("fHistMCPosP%d",i),175,-3.5,3.5);
287 fHistMCNegPi[i] = new TH1F(Form("fHistMCNegPi%d",i),Form("fHistMCNegPi%d",i),175,-3.5,3.5);
288 fHistMCNegK[i] = new TH1F(Form("fHistMCNegK%d",i),Form("fHistMCNegK%d",i),175,-3.5,3.5);
289 fHistMCNegP[i] = new TH1F(Form("fHistMCNegP%d",i),Form("fHistMCNegP%d",i),175,-3.5,3.5);
290 fOutput->Add(fHistPosPi[i]);
291 fOutput->Add(fHistPosK[i]);
292 fOutput->Add(fHistPosP[i]);
293 fOutput->Add(fHistNegPi[i]);
294 fOutput->Add(fHistNegK[i]);
295 fOutput->Add(fHistNegP[i]);
297 fOutput->Add(fHistDCAPosPi[i]);//DCA distr.
298 fOutput->Add(fHistDCAPosK[i]);
299 fOutput->Add(fHistDCAPosP[i]);
300 fOutput->Add(fHistDCANegPi[i]);
301 fOutput->Add(fHistDCANegK[i]);
302 fOutput->Add(fHistDCANegP[i]);
304 fOutput->Add(fHistMCPosPi[i]);//MC truth
305 fOutput->Add(fHistMCPosK[i]);
306 fOutput->Add(fHistMCPosP[i]);
307 fOutput->Add(fHistMCNegPi[i]);
308 fOutput->Add(fHistMCNegK[i]);
309 fOutput->Add(fHistMCNegP[i]);
313 for(Int_t j=0;j<3;j++){
314 fHistPosNSigma[j] = new TH1F(Form("hHistPosNSigma%d",j),Form("hHistPosNSigma%d",j),kNbins,fPtBinLimits);
315 fHistNegNSigma[j] = new TH1F(Form("hHistNegNSigma%d",j),Form("hHistNegNSigma%d",j),kNbins,fPtBinLimits);
316 fHistPosNSigmaPrim[j] = new TH1F(Form("hHistPosNSigmaPrim%d",j),Form("hHistPosNSigmaPrim%d",j),kNbins,fPtBinLimits);
317 fHistNegNSigmaPrim[j] = new TH1F(Form("hHistNegNSigmaPrim%d",j),Form("hHistNegNSigmaPrim%d",j),kNbins,fPtBinLimits);
318 fHistPosNSigmaPrimMC[j] = new TH1F(Form("hHistPosNSigmaPrimMC%d",j),Form("hHistPosNSigmaPrimMC%d",j),kNbins,fPtBinLimits);
319 fHistNegNSigmaPrimMC[j] = new TH1F(Form("hHistNegNSigmaPrimMC%d",j),Form("hHistNegNSigmaPrimMC%d",j),kNbins,fPtBinLimits);
320 fOutput->Add(fHistPosNSigma[j]);
321 fOutput->Add(fHistNegNSigma[j]);
322 fOutput->Add(fHistPosNSigmaPrim[j]);
323 fOutput->Add(fHistNegNSigmaPrim[j]);
324 fOutput->Add(fHistPosNSigmaPrimMC[j]);
325 fOutput->Add(fHistNegNSigmaPrimMC[j]);
328 fNtupleNSigma = new TNtuple("fNtupleNSigma","fNtupleNSigma","p:pt:dedx:ncls:sign:run:eta:impactXY:impactZ:isph:pdgcode:mfl");
329 fOutput->Add(fNtupleNSigma);
330 fNtupleMC = new TNtuple("fNtupleMC","fNtupleMC","ptMC:pdgcode:signMC:etaMC:yMC:isph:evSel:run");
331 fOutput->Add(fNtupleMC);
333 Printf("end of CreateOutputObjects");
336 //________________________________________________________________________
337 void AliAnalysisTaskSEITSsaSpectra::UserExec(Option_t *){
339 // Called for each event
341 fESD=(AliESDEvent*)InputEvent();
343 printf("AliAnalysisTaskSDDRP::Exec(): bad ESD\n");
347 //binning for the dEdx distributions
350 Float_t pdgmass[3]={0.13957,0.493677,0.938272}; //mass for pi, K, P (Gev/c^2)
351 Int_t listcode[3]={211,321,2212};//code for pi, K, P (Gev/c^2)
353 Float_t ptMC=-999,yMC=-999,code=-999, signMC=-999,isph=-999,mfl=-999.;
354 Float_t impactXY=-999, impactZ=-999;
360 TParticlePDG *pdgPart=0;
375 /////////////////////
377 AliMCEventHandler* eventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
379 Printf("ERROR: Could not retrieve MC event handler");
382 AliMCEvent* mcEvent = eventHandler->MCEvent();
384 Printf("ERROR: Could not retrieve MC event");
387 stack = mcEvent->Stack();
389 printf("ERROR: stack not available\n");
395 if(stack) nTrackMC = stack->GetNtrack();
396 const AliESDVertex *vtx = fESD->GetPrimaryVertexSPD();
399 fHistNEvents->Fill(1);
402 fHistNEvents->Fill(2);
403 if(vtx->GetNContributors()<0) evSel=0;
405 fHistNEvents->Fill(3);
406 if(TMath::Abs(vtx->GetZv())>10) evSel=0;
408 fHistNEvents->Fill(4);
409 if(vtx->GetZRes()>0.5) evSel=0;
411 fHistNEvents->Fill(5);
412 if(vtx->IsFromVertexerZ() && vtx->GetDispersion()>0.03) evSel=0;
413 else fHistNEvents->Fill(6);
419 /////first loop on stack, before event selection, filling MC ntuple
421 for(Int_t imc=0; imc<nTrackMC; imc++){
422 part = stack->Particle(imc);
423 if(!stack->IsPhysicalPrimary(imc))continue;//no secondary in the MC sample
425 pdgPart = part->GetPDG();
426 if(pdgPart->Charge()==0) continue; //no neutral particles
427 if(TMath::Abs(part->Eta()) > 0.9) continue; //pseudorapidity-acceptance cut
428 if(part->Energy() != TMath::Abs(part->Pz())) yMC = 0.5*TMath::Log((part->Energy()+part->Pz())/(part->Energy()-part->Pz()));
429 if(TMath::Abs(yMC) > fMaxY) continue; //rapidity cut
431 if(pdgPart->Charge()>0) signMC=1;
434 code=pdgPart->PdgCode();
438 if(TMath::Abs(code)==211 || TMath::Abs(code)==321 || TMath::Abs(code)==2212){
441 xntMC[indexMC++]=(Float_t)ptMC;
442 xntMC[indexMC++]=(Float_t)code;
443 xntMC[indexMC++]=(Float_t)signMC;
444 xntMC[indexMC++]=(Float_t)part->Eta();
445 xntMC[indexMC++]=(Float_t)yMC;
446 xntMC[indexMC++]=(Float_t)isph;
447 xntMC[indexMC++]=(Float_t)evSel;
448 xntMC[indexMC++]=(Float_t)fESD->GetRunNumber();
450 if(fFillNtuple) fNtupleMC->Fill(xntMC);
453 for(Int_t j=0; j<3; j++){
454 if(TMath::Abs(code)==listcode[j]){
455 if(signMC>0) fHistMCposBefEvSel[j]->Fill(TMath::Abs(ptMC));
456 else fHistMCnegBefEvSel[j]->Fill(TMath::Abs(ptMC));
460 for(Int_t j=0; j<3; j++){
461 if(TMath::Abs(code)==listcode[j]){
462 if(signMC>0) fHistMCpos[j]->Fill(TMath::Abs(ptMC));
463 else fHistMCneg[j]->Fill(TMath::Abs(ptMC));
472 for (Int_t iTrack=0; iTrack<fESD->GetNumberOfTracks(); iTrack++) {
477 track = (AliESDtrack*)fESD->GetTrack(iTrack);
478 if (!track) continue;
481 fHistNTracks->Fill(1);
482 status=track->GetStatus();
483 if((status&AliESDtrack::kITSpureSA)==0) continue; //its standalone
484 fHistNTracks->Fill(2);
485 if((status&AliESDtrack::kITSrefit)==0) continue; //its refit
486 fHistNTracks->Fill(3);
487 if(TMath::Abs(track->GetSign())<0.0001) continue; //no neutral particles
488 fHistNTracks->Fill(4);
492 UInt_t clumap = track->GetITSClusterMap();
494 for(Int_t il=0; il<2; il++) if(TESTBIT(clumap,il)) nSPD++;
495 if(nSPD<fMinSPDPts) continue;
496 fHistNTracks->Fill(5);
498 for(Int_t j=2;j<6;j++) if(TESTBIT(clumap,j)) count++;
499 if(count<fMinNdEdxSamples) continue; //at least 3 points on SSD/SDD
500 fHistNTracks->Fill(6);
501 //chisquare/nclusters
502 Int_t nclu=nSPD+count;
503 if(track->GetITSchi2()/nclu > fMaxChi2Clu) continue;
504 fHistNTracks->Fill(7);
505 //pseudorapidity and rapidity
506 if(TMath::Abs(track->Eta()) > 0.9) continue;
507 fHistNTracks->Fill(8);
509 //if(fMC) for(Int_t j=0;j<2;j++) s[j]*=3.34/5.43;//correction for SDD miscalibration of the MCpass4
510 track->GetITSdEdxSamples(s);
511 Double_t dedx = CookdEdx(s);
513 fHistNTracks->Fill(9);
516 Float_t pt = track->Pt();
518 for(Int_t m=0; m<kNbins; m++){
519 if(TMath::Abs(pt) > fPtBinLimits[m] && TMath::Abs(pt) < fPtBinLimits[m+1]){
524 track->GetImpactParameters(impactXY, impactZ);
527 //information from the MC kinematics
529 if(track->GetLabel()<0)isph=-1.;
530 if(track->GetLabel()>=0){
531 part = (TParticle*)stack->Particle(track->GetLabel());
532 pdgPart = part->GetPDG();
533 code = pdgPart->PdgCode();
534 if(stack->IsPhysicalPrimary(track->GetLabel()))isph=1.;
537 TParticle* moth = stack->Particle(part->GetFirstMother());
538 Float_t codemoth = TMath::Abs(moth->GetPdgCode());
539 mfl = Int_t (codemoth/ TMath::Power(10, Int_t(TMath::Log10(codemoth))));
545 xnt[index++]=(Float_t)track->GetP();
546 xnt[index++]=(Float_t)track->Pt();
547 xnt[index++]=(Float_t)dedx;
548 xnt[index++]=(Float_t)count;
549 xnt[index++]=(Float_t)track->GetSign();
550 xnt[index++]=(Float_t)fESD->GetRunNumber();
551 xnt[index++]=(Float_t)track->Eta();
552 xnt[index++]=(Float_t)impactXY;
553 xnt[index++]=(Float_t)impactZ;
554 xnt[index++]=(Float_t)isph;
555 xnt[index++]=(Float_t)code;
556 xnt[index]=(Float_t)mfl;
558 if(fFillNtuple) fNtupleNSigma->Fill(xnt);
563 Double_t y[3],bbtheo[3],logdiff[3];
564 Float_t p=track->GetP();
566 dedx=fRandGener->Gaus(dedx,fSmeardEdx*dedx);
567 p=fRandGener->Gaus(p,fSmearP*p);
570 for(Int_t i=0;i<3;i++){
571 y[i] = Eta2y(pt,pdgmass[i],track->Eta());
572 bbtheo[i]=BetheBloch(p/pdgmass[i],fMC);
573 logdiff[i]=TMath::Log(dedx) - TMath::Log(bbtheo[i]);
577 Int_t resocls=(Int_t)count-1;
580 Double_t min=999999.;
582 for(Int_t isp=0; isp<3; isp++){
583 Double_t bb=bbtheo[isp];
584 nsigmas[isp]=TMath::Abs((dedx-bb)/(resodedx[resocls]*bb));
585 if(nsigmas[isp]<min){
590 Double_t yPart=y[minPos];
592 if(min<fMinNSigma && yPart<fMaxY){
593 //DCA distributions, before the DCA cuts
594 if(theBin>=0 && theBin<kNbins){
595 if(track->GetSign()>0){
596 if(minPos==0) fHistDCAPosPi[theBin]->Fill(impactXY);
597 else if(minPos==1) fHistDCAPosK[theBin]->Fill(impactXY);
598 else if(minPos==2) fHistDCAPosP[theBin]->Fill(impactXY);
600 if(minPos==0) fHistDCANegPi[theBin]->Fill(impactXY);
601 else if(minPos==1) fHistDCANegK[theBin]->Fill(impactXY);
602 else if(minPos==2) fHistDCANegP[theBin]->Fill(impactXY);
607 //DCA cut on xy and z
608 if(!DCAcut(impactXY,impactZ,pt,fMC)) continue;
609 fHistNTracks->Fill(10);
611 if(min<fMinNSigma && yPart<fMaxY){
612 if(track->GetSign()>0) fHistPosNSigma[minPos]->Fill(pt);
613 else fHistNegNSigma[minPos]->Fill(pt);
616 if(track->GetSign()>0) fHistPosNSigmaPrim[minPos]->Fill(pt);
617 else fHistNegNSigmaPrim[minPos]->Fill(pt);
618 if(TMath::Abs(code)==listcode[minPos]){
619 if(track->GetSign()>0) fHistPosNSigmaPrimMC[minPos]->Fill(pt);
620 else fHistNegNSigmaPrimMC[minPos]->Fill(pt);
626 if(theBin>=0 && theBin<kNbins){
627 if(track->GetSign()>0){
628 if(TMath::Abs(y[0]) < fMaxY)fHistPosPi[theBin]->Fill(logdiff[0]);
629 if(TMath::Abs(y[1]) < fMaxY)fHistPosK[theBin]->Fill(logdiff[1]);
630 if(TMath::Abs(y[2]) < fMaxY)fHistPosP[theBin]->Fill(logdiff[2]);
632 if((TMath::Abs(y[0])<fMaxY) && (TMath::Abs(code)==211)) fHistMCPosPi[theBin]->Fill(logdiff[0]);
633 if((TMath::Abs(y[1])<fMaxY) && (TMath::Abs(code)==321)) fHistMCPosK[theBin]->Fill(logdiff[1]);
634 if((TMath::Abs(y[2])<fMaxY) && (TMath::Abs(code)==2212)) fHistMCPosP[theBin]->Fill(logdiff[2]);
637 if(TMath::Abs(y[0]) < fMaxY)fHistNegPi[theBin]->Fill(logdiff[0]);
638 if(TMath::Abs(y[1]) < fMaxY)fHistNegK[theBin]->Fill(logdiff[1]);
639 if(TMath::Abs(y[2]) < fMaxY)fHistNegP[theBin]->Fill(logdiff[2]);
641 if((TMath::Abs(y[0])<fMaxY) && (TMath::Abs(code)==211)) fHistMCNegPi[theBin]->Fill(logdiff[0]);
642 if((TMath::Abs(y[1])<fMaxY) && (TMath::Abs(code)==321)) fHistMCNegK[theBin]->Fill(logdiff[1]);
643 if((TMath::Abs(y[2])<fMaxY) && (TMath::Abs(code)==2212)) fHistMCNegP[theBin]->Fill(logdiff[2]);
649 //fill propaganda plot with dedx
650 fHistDEDX->Fill(track->GetP(),dedx);
651 fHistDEDXdouble->Fill(track->GetP()*track->GetSign(),dedx);
653 //fill charge distribution histo to check the calibration
654 for(Int_t j=0;j<4;j++){
656 fHistCharge[j]->Fill(s[j]);
662 Printf("............. end of Exec");
665 //________________________________________________________________________
666 void AliAnalysisTaskSEITSsaSpectra::Terminate(Option_t *) {
668 // Called once at the end of the query
670 fOutput = dynamic_cast<TList*>(GetOutputData(1));
672 printf("ERROR: fOutput not available\n");
675 fHistNEvents = dynamic_cast<TH1F*>(fOutput->FindObject("fHistNEvents"));
676 fHistNTracks = dynamic_cast<TH1F*>(fOutput->FindObject("fHistNTracks"));
677 fHistDEDX = dynamic_cast<TH2F*>(fOutput->FindObject("fHistDEDX"));
678 fHistDEDXdouble = dynamic_cast<TH2F*>(fOutput->FindObject("fHistDEDXdouble"));
680 fHistBeforeEvSel = dynamic_cast<TH1F*>(fOutput->FindObject("fHistBeforeEvSel"));
681 fHistAfterEvSel = dynamic_cast<TH1F*>(fOutput->FindObject("fHistAfterEvSel"));
684 for(Int_t j=0;j<3;j++){
685 fHistMCpos[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCpos%d",j)));
686 fHistMCneg[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCneg%d",j)));
690 for(Int_t j=0;j<3;j++){
691 fHistMCposBefEvSel[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCposBefEvSel%d",j)));
692 fHistMCnegBefEvSel[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCnegBefEvSel%d",j)));
695 for(Int_t i=0; i<4; i++){
696 fHistCharge[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistChargeLay%d",i)));
699 for(Int_t i=0; i<kNbins; i++){
700 fHistPosPi[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistPosPi%d",i)));
701 fHistPosK[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistPosK%d",i)));
702 fHistPosP[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistPosP%d",i)));
703 fHistNegPi[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistNegPi%d",i)));
704 fHistNegK[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistNegK%d",i)));
705 fHistNegP[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistNegP%d",i)));
707 fHistDCAPosPi[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistDCAPosPi%d",i)));
708 fHistDCAPosK[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistDCAPosK%d",i)));
709 fHistDCAPosP[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistDCAPosP%d",i)));
710 fHistDCANegPi[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistDCANegPi%d",i)));
711 fHistDCANegK[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistDCANegK%d",i)));
712 fHistDCANegP[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistDCANegP%d",i)));
716 fHistMCPosPi[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosPi%d",i)));
717 fHistMCPosK[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosK%d",i)));
718 fHistMCPosP[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCPosP%d",i)));
719 fHistMCNegPi[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegPi%d",i)));
720 fHistMCNegK[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegK%d",i)));
721 fHistMCNegP[i] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("fHistMCNegP%d",i)));
725 for(Int_t j=0;j<3;j++){
726 fHistPosNSigma[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistPosNSigma%d",j)));
727 fHistNegNSigma[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistNegNSigma%d",j)));
728 fHistPosNSigmaPrim[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistPosNSigmaPrim%d",j)));
729 fHistNegNSigmaPrim[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistNegNSigmaPrim%d",j)));
730 fHistPosNSigmaPrimMC[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistPosNSigmaPrimMC%d",j)));
731 fHistNegNSigmaPrimMC[j] = dynamic_cast<TH1F*>(fOutput->FindObject(Form("hHistNegNSigmaPrimMC%d",j)));
734 fNtupleNSigma = dynamic_cast<TNtuple*>(fOutput->FindObject("fNtupleNSigma"));
735 fNtupleMC = dynamic_cast<TNtuple*>(fOutput->FindObject("fNtupleMC"));
737 Printf("end of Terminate");