AliPhysics  608b256 (608b256)
AliPrimaryPionCuts.cxx
Go to the documentation of this file.
1 
2 /**************************************************************************
3  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * *
5  * Authors: Friederike Bock *
6  * Version 1.0 *
7  * *
8  * Permission to use, copy, modify and distribute this software and its *
9  * documentation strictly for non-commercial purposes is hereby granted *
10  * without fee, provided that the above copyright notice appears in all *
11  * copies and that both the copyright notice and this permission notice *
12  * appear in the supporting documentation. The authors make no claims *
13  * about the suitability of this software for any purpose. It is *
14  * provided "as is" without express or implied warranty. *
15  **************************************************************************/
16 
18 //---------------------------------------------
19 // Class handling all kinds of selection cuts for
20 // Gamma Conversion analysis
21 //---------------------------------------------
23 
24 
25 #include "AliPrimaryPionCuts.h"
26 #include "AliAODConversionPhoton.h"
27 #include "AliKFVertex.h"
28 #include "AliAODTrack.h"
29 #include "AliESDtrack.h"
30 #include "AliAnalysisManager.h"
31 #include "AliInputEventHandler.h"
32 #include "AliMCEventHandler.h"
33 #include "AliAODHandler.h"
34 #include "AliPIDResponse.h"
35 #include "TH1.h"
36 #include "TH2.h"
37 #include "AliMCEvent.h"
38 #include "TObjString.h"
39 #include "AliAODEvent.h"
40 #include "AliESDEvent.h"
41 #include "AliAODMCParticle.h"
42 #include "TList.h"
43 class iostream;
44 
45 using namespace std;
46 
47 ClassImp(AliPrimaryPionCuts)
48 
49 
50 const char* AliPrimaryPionCuts::fgkCutNames[AliPrimaryPionCuts::kNCuts] = {
51  "kEtaCut", // 0
52  "kClsITSCut", // 1
53  "kClsTPCCut", // 2
54  "kDCAcut", // 3
55  "kPtCut", // 4
56  "kPiDedxSigmaITSCut", // 5
57  "kPiDedxSigmaTPCCut", // 6
58  "kPiTOFSigmaCut", // 7
59  "kMassCut" // 8
60 };
61 
62 //________________________________________________________________________
63 AliPrimaryPionCuts::AliPrimaryPionCuts(const char *name,const char *title) : AliAnalysisCuts(name,title),
64  fHistograms(NULL),
65  fDoLightOutput(kFALSE),
66  fPIDResponse(NULL),
67  fEsdTrackCuts(NULL),
68  fEtaCut(0.9),
69  fEtaShift(0.0),
70  fDoEtaCut(kFALSE),
71  fPtCut(0.0),
72  fMinClsTPC(0), // minimum clusters in the TPC
73  fChi2PerClsTPC(0), // maximum Chi2 per cluster in the TPC
74  fRequireTPCRefit(kFALSE), // require a refit in the TPC
75  fMinClsTPCToF(0), // minimum clusters to findable clusters
76  fDodEdxSigmaITSCut(kFALSE),
77  fDodEdxSigmaTPCCut(kTRUE),
78  fDoTOFsigmaCut(kFALSE), // RRnewTOF
79  fPIDnSigmaAbovePionLineITS(100),
80  fPIDnSigmaBelowPionLineITS(-100),
81  fPIDnSigmaAbovePionLineTPC(100),
82  fPIDnSigmaBelowPionLineTPC(-100),
83  fPIDnSigmaAbovePionLineTOF(100), // RRnewTOF
84  fPIDnSigmaBelowPionLineTOF(-100), // RRnewTOF
85  fUseCorrectedTPCClsInfo(kFALSE),
86  fUseTOFpid(kFALSE),
87  fRequireTOF(kFALSE),
88  fDoMassCut(kFALSE),
89  fMassCut(10),
90  fDoWeights(kFALSE),
91  fMaxDCAToVertexZ(8000),
92  fCutString(NULL),
93  fCutStringRead(""),
94  fHistCutIndex(NULL),
95  fHistdEdxCuts(NULL),
96  fHistITSdEdxbefore(NULL),
97  fHistITSdEdxafter(NULL),
98  fHistTPCdEdxbefore(NULL),
99  fHistTPCdEdxafter(NULL),
100  fHistTPCdEdxSignalbefore(NULL),
101  fHistTPCdEdxSignalafter(NULL),
102  fHistTOFbefore(NULL),
103  fHistTOFafter(NULL),
104  fHistTrackDCAxyPtbefore(NULL),
105  fHistTrackDCAxyPtafter(NULL),
106  fHistTrackDCAzPtbefore(NULL),
107  fHistTrackDCAzPtafter(NULL),
108  fHistTrackNFindClsPtTPCbefore(NULL),
109  fHistTrackNFindClsPtTPCafter(NULL),
110  fStringITSClusterCut("")
111 {
112  InitPIDResponse();
113  for(Int_t jj=0;jj<kNCuts;jj++){ fCuts[jj]=0; }
114  fCutString=new TObjString((GetCutNumber()).Data());
115 
116  // Using standard function for setting Cuts
117  Bool_t selectPrimaries=kFALSE;
118  if (fEsdTrackCuts==NULL)fEsdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(selectPrimaries);
119 }
120 
121 //________________________________________________________________________
123  // Destructor
124  //Deleting fHistograms leads to seg fault it it's added to output collection of a task
125  // if(fHistograms)
126  // delete fHistograms;
127  // fHistograms = NULL;
128 
129  if(fCutString != NULL){
130  delete fCutString;
131  fCutString = NULL;
132  }
133 }
134 
135 //________________________________________________________________________
137 
138  // Initialize Cut Histograms for QA (only initialized and filled if function is called)
139 
140  TString cutName = "";
141 
142  if( cutNumber==""){
143  cutName = GetCutNumber().Data();
144  }
145  else {
146  cutName = cutNumber.Data();
147  }
148 
149  if(fHistograms != NULL){
150  delete fHistograms;
151  fHistograms=NULL;
152  }
153  if(fHistograms==NULL){
154  fHistograms=new TList();
155  if(name=="")fHistograms->SetName(Form("PionCuts_%s",cutName.Data()));
156  else fHistograms->SetName(Form("%s_%s",name.Data(),cutName.Data()));
157  }
158 
159 
160  fHistCutIndex=new TH1F(Form("IsPionSelected %s",cutName.Data()),"IsPionSelected",10,-0.5,9.5);
161  fHistCutIndex->GetXaxis()->SetBinLabel(kPionIn+1,"in");
162  fHistCutIndex->GetXaxis()->SetBinLabel(kNoTracks+1,"no tracks");
163  fHistCutIndex->GetXaxis()->SetBinLabel(kTrackCuts+1,"Track cuts");
164  fHistCutIndex->GetXaxis()->SetBinLabel(kdEdxCuts+1,"dEdx");
165  fHistCutIndex->GetXaxis()->SetBinLabel(kPionOut+1,"out");
167 
168  // dEdx Cuts
169  fHistdEdxCuts=new TH1F(Form("dEdxCuts %s",cutName.Data()),"dEdxCuts",5,-0.5,4.5);
170  fHistdEdxCuts->GetXaxis()->SetBinLabel(1,"in");
171  fHistdEdxCuts->GetXaxis()->SetBinLabel(2,"ITSpion");
172  fHistdEdxCuts->GetXaxis()->SetBinLabel(3,"TPCpion");
173  fHistdEdxCuts->GetXaxis()->SetBinLabel(4,"TOFpion");
174  fHistdEdxCuts->GetXaxis()->SetBinLabel(5,"out");
176 
177  TAxis *axisBeforeITS = NULL;
178  TAxis *axisBeforedEdx = NULL;
179  TAxis *axisBeforeTOF = NULL;
180  TAxis *axisBeforedEdxSignal = NULL;
181  if(!fDoLightOutput){
182  if(preCut){
183  fHistITSdEdxbefore=new TH2F(Form("Pion_ITS_before %s",cutName.Data()),"ITS dEdx pion before" ,150,0.05,20,400,-10,10);
185  axisBeforeITS = fHistITSdEdxbefore->GetXaxis();
186 
187  fHistTPCdEdxbefore=new TH2F(Form("Pion_dEdx_before %s",cutName.Data()),"dEdx pion before" ,150,0.05,20,400,-10,10);
189  axisBeforedEdx = fHistTPCdEdxbefore->GetXaxis();
190 
191  fHistTPCdEdxSignalbefore=new TH2F(Form("Pion_dEdxSignal_before %s",cutName.Data()),"dEdx pion signal before" ,150,0.05,20.0,800,0.0,200);
193  axisBeforedEdxSignal = fHistTPCdEdxSignalbefore->GetXaxis();
194 
195  fHistTOFbefore=new TH2F(Form("Pion_TOF_before %s",cutName.Data()),"TOF pion before" ,150,0.05,20,400,-6,10);
197  axisBeforeTOF = fHistTOFbefore->GetXaxis();
198 
199  fHistTrackDCAxyPtbefore = new TH2F(Form("hTrack_DCAxy_Pt_before %s",cutName.Data()),"DCAxy Vs Pt of tracks before",800,-4.0,4.0,400,0.,10.);
201 
202  fHistTrackDCAzPtbefore = new TH2F(Form("hTrack_DCAz_Pt_before %s",cutName.Data()), "DCAz Vs Pt of tracks before",800,-4.0,4.0,400,0.,10.);
204 
205  fHistTrackNFindClsPtTPCbefore = new TH2F(Form("hTrack_NFindCls_Pt_TPC_before %s",cutName.Data()),"Track: N Findable Cls TPC Vs Pt before",100,0,1,400,0.,10.);
207  }
208 
209  fHistITSdEdxafter=new TH2F(Form("Pion_ITS_after %s",cutName.Data()),"ITS dEdx pion after" ,150,0.05,20,400, -10,10);
211 
212  fHistTPCdEdxafter=new TH2F(Form("Pion_dEdx_after %s",cutName.Data()),"dEdx pion after" ,150,0.05,20,400, -10,10);
214 
215  fHistTPCdEdxSignalafter=new TH2F(Form("Pion_dEdxSignal_after %s",cutName.Data()),"dEdx pion signal after" ,150,0.05,20.0,800,0.0,200);
217 
218  fHistTOFafter=new TH2F(Form("Pion_TOF_after %s",cutName.Data()),"TOF pion after" ,150,0.05,20,400,-6,10);
220 
221  fHistTrackDCAxyPtafter = new TH2F(Form("hTrack_DCAxy_Pt_after %s",cutName.Data()),"DCAxy Vs Pt of tracks after",800,-4.0,4.0,400,0.,10.);
223 
224  fHistTrackDCAzPtafter = new TH2F(Form("hTrack_DCAz_Pt_after %s",cutName.Data()), "DCAz Vs Pt of tracks after",800,-4.0,4.0,400,0.,10.);
226 
227  fHistTrackNFindClsPtTPCafter = new TH2F(Form("hTrack_NFindCls_Pt_TPC_after %s",cutName.Data()),"Track: N Findable Cls TPC Vs Pt after",100,0,1,400,0.,10.);
229  }
230  if(!fDoLightOutput){
231  TAxis *AxisAfter = fHistTPCdEdxafter->GetXaxis();
232  Int_t bins = AxisAfter->GetNbins();
233  Double_t from = AxisAfter->GetXmin();
234  Double_t to = AxisAfter->GetXmax();
235  Double_t *newBins = new Double_t[bins+1];
236  newBins[0] = from;
237  Double_t factor = TMath::Power(to/from, 1./bins);
238  for(Int_t i=1; i<=bins; ++i) newBins[i] = factor * newBins[i-1];
239  AxisAfter->Set(bins, newBins);
240  AxisAfter = fHistTOFafter->GetXaxis();
241  AxisAfter->Set(bins, newBins);
242  AxisAfter = fHistITSdEdxafter->GetXaxis();
243  AxisAfter->Set(bins,newBins);
244  AxisAfter = fHistTPCdEdxSignalafter->GetXaxis();
245  AxisAfter->Set(bins,newBins);
246 
247  if(preCut){
248  axisBeforeITS->Set(bins, newBins);
249  axisBeforedEdx->Set(bins, newBins);
250  axisBeforedEdxSignal->Set(bins,newBins);
251  axisBeforeTOF->Set(bins, newBins);
252 
253  }
254 
255  delete [] newBins;
256  }
257  // Event Cuts and Info
258 }
259 
260 
261 //________________________________________________________________________
263 
264 // Set Pointer to AliPIDResponse
265 
266  AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
267 
268  if(man) {
269  AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
270  fPIDResponse = (AliPIDResponse*)inputHandler->GetPIDResponse();
271  if(fPIDResponse)return kTRUE;
272 
273  }
274 
275  return kFALSE;
276 }
278 Bool_t AliPrimaryPionCuts::PionIsSelectedMC(Int_t labelParticle,AliMCEvent *mcEvent){
279 
280  if( labelParticle < 0 || labelParticle >= mcEvent->GetNumberOfTracks() ) return kFALSE;
281 // if( mcEvent->IsPhysicalPrimary(labelParticle) == kFALSE ) return kFALSE; // moved to actual tasks
282 
283  TParticle* particle = mcEvent->Particle(labelParticle);
284 
285  if( TMath::Abs( particle->GetPdgCode() ) != 211 ) return kFALSE;
286 
287  if( fDoEtaCut ){
288  if( particle->Eta() > (fEtaCut + fEtaShift) || particle->Eta() < (-fEtaCut + fEtaShift) )
289  return kFALSE;
290  }
291 
292  return kTRUE;
293 }
294 
296 Bool_t AliPrimaryPionCuts::PionIsSelectedAODMC(Int_t labelParticle,TClonesArray *AODMCTrackArray){
297 
298  if( labelParticle < 0 || labelParticle >= AODMCTrackArray->GetSize()) return kFALSE;
299 // if( mcEvent->IsPhysicalPrimary(labelParticle) == kFALSE ) return kFALSE; // moved to actual tasks
300 
301  AliAODMCParticle* particle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(labelParticle));
302 
303  if( TMath::Abs( particle->GetPdgCode() ) != 211 ) return kFALSE;
304  if( fDoEtaCut ){
305  if( particle->Eta() > (fEtaCut + fEtaShift) || particle->Eta() < (-fEtaCut + fEtaShift) )
306  return kFALSE;
307  }
308 
309  return kTRUE;
310 }
311 
314  //Selection of Reconstructed electrons
315 
316  Float_t b[2];
317  Float_t bCov[3];
318  if (lTrack == NULL){
320  return kFALSE;
321  }
322  lTrack->GetImpactParameters(b,bCov);
323 
324  if (bCov[0]<=0 || bCov[2]<=0) {
325  AliDebug(1, "Estimated b resolution lower or equal zero!");
326  bCov[0]=0; bCov[2]=0;
327  }
328 
329  Float_t dcaToVertexXY = b[0];
330  Float_t dcaToVertexZ = b[1];
331  Double_t clsToF = GetNFindableClustersTPC(lTrack);
332 
333 
334  if (fHistCutIndex) fHistCutIndex->Fill(kPionIn);
335 
336  if (fHistTrackDCAxyPtbefore) fHistTrackDCAxyPtbefore->Fill(dcaToVertexXY,lTrack->Pt());
337  if (fHistTrackDCAzPtbefore) fHistTrackDCAzPtbefore->Fill( dcaToVertexZ, lTrack->Pt());
338  if (fHistTrackNFindClsPtTPCbefore) fHistTrackNFindClsPtTPCbefore->Fill( clsToF, lTrack->Pt());
339 
340 
341  if ( ! lTrack->GetConstrainedParam() ){
342  return kFALSE;
343  }
344  AliVTrack * track = dynamic_cast<AliVTrack*>(lTrack);
345 
346  // Track Cuts
347  if( !TrackIsSelected(lTrack) ){
349  return kFALSE;
350  }
351 
352  // dEdx Cuts
353  if( ! dEdxCuts( track ) ) {
355  return kFALSE;
356  }
357 
358  //Pion passed the cuts
360  if (fHistTrackDCAxyPtafter) fHistTrackDCAxyPtafter->Fill(dcaToVertexXY,lTrack->Pt());
361  if (fHistTrackDCAzPtafter) fHistTrackDCAzPtafter->Fill(dcaToVertexZ,lTrack->Pt());
362  if (fHistTrackNFindClsPtTPCafter) fHistTrackNFindClsPtTPCafter->Fill( clsToF, lTrack->Pt());
363 
364  return kTRUE;
365 }
366 
369  //Selection of Reconstructed electrons
370 
371  Float_t b[2];
372  Float_t bCov[3];
373  if (lTrack == NULL){
375  return kFALSE;
376  }
377 
378 
379  if (fHistCutIndex) fHistCutIndex->Fill(kPionIn);
380 
381 
382  AliVTrack * track = dynamic_cast<AliVTrack*>(lTrack);
383 
384  // Track Cuts
385  if( !TrackIsSelectedAOD(lTrack) ){
387  return kFALSE;
388  }
389 
390  // this would throw a warning for AOD tracks that are not defined at the X of vertex (mainly tracks that do
391  // not pass the track selection). The plotting of DCAxy and DCAz BEFORE has therefore been moved to after the track selection
392  // for AODs to avoid undefined x values.
393  lTrack->GetImpactParameters(b,bCov);
394 
395  if (bCov[0]<=0 || bCov[2]<=0) {
396  AliDebug(1, "Estimated b resolution lower or equal zero!");
397  bCov[0]=0; bCov[2]=0;
398  }
399 
400  Float_t dcaToVertexXY = b[0];
401  Float_t dcaToVertexZ = b[1];
402  Double_t clsToF = GetNFindableClustersTPC(lTrack);
403 
404 
405  if (fHistTrackDCAxyPtbefore) fHistTrackDCAxyPtbefore->Fill(dcaToVertexXY,lTrack->Pt());
406  if (fHistTrackDCAzPtbefore) fHistTrackDCAzPtbefore->Fill( dcaToVertexZ, lTrack->Pt());
407  if (fHistTrackNFindClsPtTPCbefore) fHistTrackNFindClsPtTPCbefore->Fill( clsToF, lTrack->Pt());
408 
409  // dEdx Cuts
410  if( ! dEdxCuts( track ) ) { // TODO: check if these still work for AODs
412  return kFALSE;
413 
414  }
415 
416 
417  //Pion passed the cuts
419  if (fHistTrackDCAxyPtafter) fHistTrackDCAxyPtafter->Fill(dcaToVertexXY,lTrack->Pt());
420  if (fHistTrackDCAzPtafter) fHistTrackDCAzPtafter->Fill(dcaToVertexZ,lTrack->Pt());
421  if (fHistTrackNFindClsPtTPCafter) fHistTrackNFindClsPtTPCafter->Fill( clsToF, lTrack->Pt());
422 
423  return kTRUE;
424 }
425 
428  // Track Selection for Photon Reconstruction
429  Double_t clsToF = GetNFindableClustersTPC(lTrack);
430 
431  if( ! fEsdTrackCuts->AcceptTrack(lTrack) ){
432  return kFALSE;
433  }
434 
435  if( fDoEtaCut ) {
436  if( lTrack->Eta() > (fEtaCut + fEtaShift) || lTrack->Eta() < (-fEtaCut + fEtaShift) ) {
437  return kFALSE;
438  }
439  }
440 
441  if( lTrack->Pt() < fPtCut ) {
442  return kFALSE;
443  }
444 
445  if( clsToF < fMinClsTPCToF){
446  return kFALSE;
447  }
448 
449  return kTRUE;
450 }
453  // Track Selection for Photon Reconstruction
454  Double_t clsToF = GetNFindableClustersTPC(lTrack);
455 
456  if( ! lTrack->IsHybridGlobalConstrainedGlobal() ){
457  return kFALSE;
458  }
459 
460  if( fDoEtaCut ) {
461  if( lTrack->Eta() > (fEtaCut + fEtaShift) || lTrack->Eta() < (-fEtaCut + fEtaShift) ) {
462  return kFALSE;
463  }
464  }
465 
466  if( lTrack->Pt() < fPtCut ) {
467  return kFALSE;
468  }
469 
470  if( clsToF < fMinClsTPCToF){
471  return kFALSE;
472  }
473 
474  return kTRUE;
475 }
476 
478 Bool_t AliPrimaryPionCuts::dEdxCuts(AliVTrack *fCurrentTrack){
479 
480  // Pion Identification Cuts for Photon reconstruction
481 
482  if(!fPIDResponse){ InitPIDResponse(); }// Try to reinitialize PID Response
483  if(!fPIDResponse){ AliError("No PID Response"); return kFALSE;}// if still missing fatal error
484 
485  Int_t cutIndex=0;
486 
487  if(fHistdEdxCuts)fHistdEdxCuts->Fill(cutIndex);
488  if(fHistITSdEdxbefore)fHistITSdEdxbefore->Fill(fCurrentTrack->P(),fPIDResponse->NumberOfSigmasITS(fCurrentTrack, AliPID::kPion));
489  if(fHistTPCdEdxbefore)fHistTPCdEdxbefore->Fill(fCurrentTrack->P(),fPIDResponse->NumberOfSigmasTPC(fCurrentTrack, AliPID::kPion));
490  if(fHistTPCdEdxSignalbefore)fHistTPCdEdxSignalbefore->Fill(fCurrentTrack->P(),TMath::Abs(fCurrentTrack->GetTPCsignal()));
491 
492  cutIndex++;
493 
494  if( fDodEdxSigmaITSCut == kTRUE ){
495  if( fPIDResponse->NumberOfSigmasITS(fCurrentTrack,AliPID::kPion)<fPIDnSigmaBelowPionLineITS ||
496  fPIDResponse->NumberOfSigmasITS(fCurrentTrack,AliPID::kPion)> fPIDnSigmaAbovePionLineITS ){
497  if(fHistdEdxCuts)fHistdEdxCuts->Fill(cutIndex);
498  return kFALSE;
499  }
500  }
501 
502  if(fHistITSdEdxafter)fHistITSdEdxafter->Fill(fCurrentTrack->P(),fPIDResponse->NumberOfSigmasITS(fCurrentTrack, AliPID::kPion));
503 
504 
505  cutIndex++;
506 
507 
508  if(fDodEdxSigmaTPCCut == kTRUE){
509  // TPC Pion Line
510  if( fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kPion)<fPIDnSigmaBelowPionLineTPC ||
511  fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kPion)>fPIDnSigmaAbovePionLineTPC){
512  if(fHistdEdxCuts)fHistdEdxCuts->Fill(cutIndex);
513  return kFALSE;
514  }
515  cutIndex++;
516  } else { cutIndex+=1; }
517 
518  if( ( fCurrentTrack->GetStatus() & AliESDtrack::kTOFpid ) && ( !( fCurrentTrack->GetStatus() & AliESDtrack::kTOFmismatch) ) ){
519  if(fHistTOFbefore) fHistTOFbefore->Fill(fCurrentTrack->P(),fPIDResponse->NumberOfSigmasTOF(fCurrentTrack, AliPID::kPion));
520  if(fUseTOFpid){
521  if( fPIDResponse->NumberOfSigmasTOF(fCurrentTrack, AliPID::kPion)>fPIDnSigmaAbovePionLineTOF ||
522  fPIDResponse->NumberOfSigmasTOF(fCurrentTrack, AliPID::kPion)<fPIDnSigmaBelowPionLineTOF ){
523  if(fHistdEdxCuts)fHistdEdxCuts->Fill(cutIndex);
524  return kFALSE;
525  }
526  }
527  if(fHistTOFafter)fHistTOFafter->Fill(fCurrentTrack->P(),fPIDResponse->NumberOfSigmasTOF(fCurrentTrack, AliPID::kPion));
528  } else if ( fRequireTOF == kTRUE ) {
529  if(fHistdEdxCuts)fHistdEdxCuts->Fill(cutIndex);
530  return kFALSE;
531  }
532  cutIndex++;
533 
534  if(fHistdEdxCuts)fHistdEdxCuts->Fill(cutIndex);
535  if(fHistTPCdEdxafter)fHistTPCdEdxafter->Fill(fCurrentTrack->P(),fPIDResponse->NumberOfSigmasTPC(fCurrentTrack, AliPID::kPion));
536  if(fHistTPCdEdxSignalafter)fHistTPCdEdxSignalafter->Fill(fCurrentTrack->P(),TMath::Abs(fCurrentTrack->GetTPCsignal()));
537 
538  return kTRUE;
539 }
540 
542 AliVTrack *AliPrimaryPionCuts::GetTrack(AliVEvent * event, Int_t label){
543  //Returns pointer to the track with given ESD label
544  //(Important for AOD implementation, since Track array in AOD data is different
545  //from ESD array, but ESD tracklabels are stored in AOD Tracks)
546 
547  AliESDEvent * esdEvent = dynamic_cast<AliESDEvent*>(event);
548  if(esdEvent) {
549  if(label > event->GetNumberOfTracks() ) return NULL;
550  AliESDtrack * track = esdEvent->GetTrack(label);
551  return track;
552  } else {
553  for(Int_t ii=0; ii<event->GetNumberOfTracks(); ii++) {
554  AliVTrack * track = dynamic_cast<AliVTrack*>(event->GetTrack(ii));
555  if(track) {
556  if(track->GetID() == label) {
557  return track;
558  }
559  }
560  }
561  }
562  cout << "track not found " << label << " " << event->GetNumberOfTracks() << endl;
563  return NULL;
564 }
565 
568 
569  Double_t clsToF=0;
570  if ( !fUseCorrectedTPCClsInfo ){
571  if(lTrack->GetTPCNclsF()!=0){
572  clsToF = (Double_t)lTrack->GetNcls(1)/(Double_t)lTrack->GetTPCNclsF();
573  }
574  } else {
575  clsToF = lTrack->GetTPCClusterInfo(2,0); //NOTE ask friederike
576  }
577  return clsToF;
578 
579 }
580 
584 
585  if(fCutString && fCutString->GetString().Length() == kNCuts) {
586  fCutString->SetString(GetCutNumber());
587  } else {
588  return kFALSE;
589  }
590  return kTRUE;
591 
592 }
593 
596  fCutStringRead = Form("%s",analysisCutSelection.Data());
597 
598  // Initialize Cuts from a given Cut string
599 
600  AliInfo(Form("Set PionCuts Number: %s",analysisCutSelection.Data()));
601 
602  if(analysisCutSelection.Length()!=kNCuts) {
603  AliError(Form("Cut selection has the wrong length! size is %d, number of cuts is %d", analysisCutSelection.Length(), kNCuts));
604  return kFALSE;
605  }
606  if(!analysisCutSelection.IsAlnum()){
607  AliError("Cut selection is not alphanumeric");
608  return kFALSE;
609  }
610 
611  TString analysisCutSelectionLowerCase = Form("%s",analysisCutSelection.Data());
612  analysisCutSelectionLowerCase.ToLower();
613  const char *cutSelection = analysisCutSelectionLowerCase.Data();
614  #define ASSIGNARRAY(i) fCuts[i] = ((int)cutSelection[i]>=(int)'a') ? cutSelection[i]-'a'+10 : cutSelection[i]-'0'
615  for(Int_t ii=0;ii<kNCuts;ii++){
616  ASSIGNARRAY(ii);
617  }
618 
619  // Set Individual Cuts
620  for(Int_t ii=0;ii<kNCuts;ii++){
621  if(!SetCut(cutIds(ii),fCuts[ii]))return kFALSE;
622  }
623 
625  return kTRUE;
626 }
630 
631  //cout << "Updating cut " << fgkCutNames[cutID] << " (" << cutID << ") to " << value << endl;
632 
633  switch (cutID) {
634  case kEtaCut:
635  if( SetEtaCut(value)) {
636  fCuts[kEtaCut] = value;
637  UpdateCutString();
638  return kTRUE;
639  } else return kFALSE;
640  case kClsITSCut:
641  if( SetITSClusterCut(value) ) {
642  fCuts[kClsITSCut] = value;
643  UpdateCutString();
644  return kTRUE;
645  } else return kFALSE;
646  case kClsTPCCut:
647  if( SetTPCClusterCut(value)) {
648  fCuts[kClsTPCCut] = value;
649  UpdateCutString();
650  return kTRUE;
651  } else return kFALSE;
652  case kDCACut:
653  if( SetDCACut(value)) {
654  fCuts[kDCACut] = value;
655  UpdateCutString();
656  return kTRUE;
657  } else return kFALSE;
658  case kPtCut:
659  if( SetPtCut(value)) {
660  fCuts[kPtCut] = value;
661  UpdateCutString();
662  return kTRUE;
663  } else return kFALSE;
664  case kPidedxSigmaITSCut:
665  if( SetITSdEdxCutPionLine(value)) {
666  fCuts[kPidedxSigmaITSCut] = value;
667  UpdateCutString();
668  return kTRUE;
669  } else return kFALSE;
670  case kPidedxSigmaTPCCut:
671  if( SetTPCdEdxCutPionLine(value)) {
672  fCuts[kPidedxSigmaTPCCut] = value;
673  UpdateCutString();
674  return kTRUE;
675  } else return kFALSE;
676  case kPiTOFSigmaPID:
677  if( SetTOFPionPIDCut(value)) {
678  fCuts[kPiTOFSigmaPID] = value;
679  UpdateCutString();
680  return kTRUE;
681  } else return kFALSE;
682  case kMassCut:
683  if( SetMassCut(value)) {
684  fCuts[kMassCut] = value;
685  UpdateCutString();
686  return kTRUE;
687  } else return kFALSE;
688  case kNCuts:
689  cout << "Error:: Cut id out of range"<< endl;
690  return kFALSE;
691  }
692 
693  cout << "Error:: Cut id " << cutID << " not recognized "<< endl;
694  return kFALSE;
695 }
696 
699  // Print out current Cut Selection
700  for(Int_t ic = 0; ic < kNCuts; ic++) {
701  printf("%-30s : %d \n", fgkCutNames[ic], fCuts[ic]);
702  }
703 }
704 
707  // Print out current Cut Selection with value
708  printf("\nCharged Pion cutnumber \n");
709  for(Int_t ic = 0; ic < kNCuts; ic++) {
710  printf("%d",fCuts[ic]);
711  }
712  printf("\n\n");
713 
714  printf("Acceptance cuts \n");
715  if (fDoEtaCut) printf("\t |eta_{pi+-}| < %3.2f \n", fEtaCut);
716  else printf("\t none \n");
717  printf("Track cuts \n");
718  printf("\t %s \n", fStringITSClusterCut.Data());
719  printf("\t min N cluster TPC > %3.2f \n", fMinClsTPC);
720  printf("\t min N cluster TPC/ findable > %3.2f \n", fMinClsTPCToF);
721 
722  printf("\t max Chi2 per cluster TPC < %3.2f \n", fChi2PerClsTPC);
723  printf("\t require TPC refit ? %d \n", fRequireTPCRefit);
724 // printf("\t dca > %3.2f \n", fMinClsTPCToF);
725 // "kDCAcut", // 3
726  printf("\t min pT > %3.2f \n", fPtCut);
727  printf("PID cuts \n");
728  if (fDodEdxSigmaITSCut)printf("\t %3.2f < ITS n_sigma pi < %3.2f \n", fPIDnSigmaBelowPionLineITS, fPIDnSigmaAbovePionLineITS );
729  if (fDodEdxSigmaTPCCut)printf("\t %3.2f < TPC n_sigma pi < %3.2f \n", fPIDnSigmaBelowPionLineTPC, fPIDnSigmaAbovePionLineTPC );
730  if (fDoTOFsigmaCut)printf("\t %3.2f < TOF n_sigma pi < %3.2f \n", fPIDnSigmaBelowPionLineTOF, fPIDnSigmaAbovePionLineTOF );
731  if (fDoMassCut) printf("two-pion mass cut < %3.2f \n", fMassCut);
732  printf("\n\n");
733 }
734 
735 
736 
739  switch(ededxSigmaCut){
740  case 0:
741  fDodEdxSigmaITSCut = kFALSE;
744  break;
745  case 1: // -10,10
746  fDodEdxSigmaITSCut = kTRUE;
749  break;
750  case 2: // -6,7
751  fDodEdxSigmaITSCut = kTRUE;
754  break;
755  case 3: // -5,5
756  fDodEdxSigmaITSCut = kTRUE;
759  break;
760  case 4: // -4,5
761  fDodEdxSigmaITSCut = kTRUE;
764  break;
765  case 5: // -3,5
766  fDodEdxSigmaITSCut = kTRUE;
769  break;
770  case 6: // -4,4
771  fDodEdxSigmaITSCut = kTRUE;
774  break;
775  case 7: // -2.5,4
776  fDodEdxSigmaITSCut = kTRUE;
779  break;
780  case 8: // -2,3.5
781  fDodEdxSigmaITSCut = kTRUE;
784  break;
785  default:
786  cout<<"Warning: ITSdEdxCutPionLine not defined"<<ededxSigmaCut<<endl;
787  return kFALSE;
788 
789  }
790  return kTRUE;
791 }
792 
795  switch(ededxSigmaCut){
796  case 0:
797  fDodEdxSigmaTPCCut = kFALSE;
800  break;
801  case 1: // -10,10
802  fDodEdxSigmaTPCCut = kTRUE;
805  break;
806  case 2: // -6,7
807  fDodEdxSigmaTPCCut = kTRUE;
810  break;
811  case 3: // -5,5
812  fDodEdxSigmaTPCCut = kTRUE;
815  break;
816  case 4: // -4,5
817  fDodEdxSigmaTPCCut = kTRUE;
820  break;
821  case 5: // -4,4
822  fDodEdxSigmaTPCCut = kTRUE;
825  break;
826  case 6: // -3,4
827  fDodEdxSigmaTPCCut = kTRUE;
830  break;
831  case 7: // -3,3
832  fDodEdxSigmaTPCCut = kTRUE;
835  break;
836  case 8: // -2,3.
837  fDodEdxSigmaTPCCut = kTRUE;
840  break;
841  default:
842  cout<<"Warning: TPCdEdxCutPionLine not defined"<<ededxSigmaCut<<endl;
843  return kFALSE;
844  }
845  return kTRUE;
846 }
847 
850  if( !fEsdTrackCuts ) {
851  cout<<"Warning: AliESDtrackCut is not initialized "<<endl;
852  return kFALSE;
853  }
854 
855  switch(clsITSCut){
856  case 0:
857  fEsdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kOff);
858  fStringITSClusterCut= "no SPD cluster requirement";
859  break;
860  case 1:
861  fEsdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kFirst);
862  fStringITSClusterCut= "first SPD cluster required";
863  break; //1 hit first layer of SPD
864  case 2:
865  fEsdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
866  fStringITSClusterCut= "first or second SPD cluster required";
867  break; //1 hit in any layer of SPD
868  case 3:
869  fEsdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kFirst);
870  fEsdTrackCuts->SetMinNClustersITS(4);
871  fStringITSClusterCut= "first SPD cluster required, min number of ITS clusters = 4";
872  // 4 hits in total in the ITS. At least 1 hit in the first layer of SPD
873  break;
874  case 4:
875  fEsdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
876  fEsdTrackCuts->SetMinNClustersITS(3);
877  fStringITSClusterCut= "first or second SPD cluster required, min number of ITS clusters = 3";
878  // 3 hits in total in the ITS. At least 1 hit in any layer of SPD
879  break;
880  case 5:
881  fEsdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
882  fEsdTrackCuts->SetMinNClustersITS(4);
883  fStringITSClusterCut= "first or second SPD cluster required, min number of ITS clusters = 4";
884  // 4 hits in total in the ITS. At least 1 hit in any layer of SPD
885  break;
886  case 6:
887  fEsdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
888  fEsdTrackCuts->SetMinNClustersITS(5);
889  fStringITSClusterCut= "first or second SPD cluster required, min number of ITS clusters = 5";
890  // 5 hits in total in the ITS. At least 1 hit in any layer of SPD
891  break;
892  default:
893  cout<<"Warning: clsITSCut not defined "<<clsITSCut<<endl;
894  return kFALSE;
895  }
896  return kTRUE;
897 }
898 
901  switch(clsTPCCut){
902  case 0: // 0
903  fMinClsTPC= 0.;
904  fEsdTrackCuts->SetMinNClustersTPC(fMinClsTPC);
905  break;
906  case 1: // 70
907  fMinClsTPC= 70.;
908  fEsdTrackCuts->SetMinNClustersTPC(fMinClsTPC);
909  break;
910  case 2: // 80
911  fMinClsTPC= 80.;
912  fEsdTrackCuts->SetMinNClustersTPC(fMinClsTPC);
913  break;
914  case 3: // 100
915  fMinClsTPC= 100.;
916  fEsdTrackCuts->SetMinNClustersTPC(fMinClsTPC);
917  break;
918  case 4: // 0% of findable clusters
919  fMinClsTPC= 70.;
920  fEsdTrackCuts->SetMinNClustersTPC(fMinClsTPC);
921  fMinClsTPCToF= 0.0;
923  break;
924  case 5: // 35% of findable clusters
925  fMinClsTPC = 70.;
926  fEsdTrackCuts->SetMinNClustersTPC(fMinClsTPC);
927  fMinClsTPCToF= 0.35;
929  break;
930  case 6: // 60% of findable clusters
931  fMinClsTPC= 70.;
932  fEsdTrackCuts->SetMinNClustersTPC(fMinClsTPC);
933  fMinClsTPCToF= 0.6;
935  break;
936  case 7: // 70% of findable clusters
937  fMinClsTPC= 70.;
938  fEsdTrackCuts->SetMinNClustersTPC(fMinClsTPC);
939  fMinClsTPCToF= 0.7;
941  break;
942  case 8: fMinClsTPC = 0.;
943  fEsdTrackCuts->SetMinNClustersTPC(fMinClsTPC);
944  fMinClsTPCToF= 0.35;
946  break;
947  case 9: // 35% of findable clusters
948  fMinClsTPC = 70.;
949  fEsdTrackCuts->SetMinNClustersTPC(fMinClsTPC);
950  fMinClsTPCToF= 0.35;
952  break;
953  case 10:
954  fMinClsTPC = 80.;
955  fChi2PerClsTPC = 4;
956  fRequireTPCRefit = kTRUE;
957  fEsdTrackCuts->SetMinNClustersTPC(fMinClsTPC);
958  // Other Cuts concerning TPC
959  fEsdTrackCuts->SetMaxChi2PerClusterTPC(fChi2PerClsTPC);
960  fEsdTrackCuts->SetRequireTPCRefit(fRequireTPCRefit);
961  break;
962  case 11: // settings as in PHOS public omega
963  fMinClsTPC = 70.;
964  fChi2PerClsTPC = 4;
965  fEsdTrackCuts->SetMinNClustersTPC(fMinClsTPC);
966  fEsdTrackCuts->SetMaxChi2PerClusterTPC(fChi2PerClsTPC);
967  break;
968  case 12: // 80 + refit
969  fMinClsTPC= 80.;
970  fRequireTPCRefit = kTRUE;
971  fEsdTrackCuts->SetMinNClustersTPC(fMinClsTPC);
972  break;
973 
974  default:
975  cout<<"Warning: clsTPCCut not defined "<<clsTPCCut<<endl;
976  return kFALSE;
977  }
978  return kTRUE;
979 }
980 
983  // Set eta Cut
984  switch(etaCut){
985  case 0:
986  fEtaCut = 100.;
987  fDoEtaCut = kFALSE;
988  break;
989  case 1: // 1.4
990  fEtaCut = 1.4;
991  fDoEtaCut = kTRUE;
992  break;
993  case 2: // 1.2
994  fEtaCut = 1.2;
995  fDoEtaCut = kTRUE;
996  break;
997  case 3: // 0.9
998  fEtaCut = 0.9;
999  fDoEtaCut = kTRUE;
1000  break;
1001  case 4: // 0.8
1002  fEtaCut = 0.8;
1003  fDoEtaCut = kTRUE;
1004  break;
1005  case 5: // 0.75
1006  fEtaCut = 0.75;
1007  fDoEtaCut = kTRUE;
1008  break;
1009  case 6: //0.6
1010  fEtaCut = 0.6; //changed from 0.4 to 0.6 2013.06.10
1011  fDoEtaCut = kTRUE;
1012  break;
1013  case 7: //0.5
1014  fEtaCut = 0.5; //changed from 0.3 to 0.5 2013.06.10
1015  fDoEtaCut = kTRUE;
1016  break;
1017  case 8:
1018  fEtaCut = 0.4;
1019  fDoEtaCut = kTRUE;
1020  break;
1021  default:
1022  cout<<"Warning: EtaCut not defined "<<etaCut<<endl;
1023  return kFALSE;
1024  }
1025  return kTRUE;
1026 }
1027 
1030  switch(ptCut){
1031  case 0:
1032  fPtCut = 0.075;
1033  break;
1034  case 1: // 0.1
1035  fPtCut = 0.1;
1036  break;
1037  case 2: // 0.125 GeV
1038  fPtCut = 0.125;
1039  break;
1040  case 3: // 0.15 GeV
1041  fPtCut = 0.15;
1042  break;
1043  case 4: // 0.40 GeV
1044  fPtCut = 0.40;
1045  break;
1046  default:
1047  cout<<"Warning: PtCut not defined "<<ptCut<<endl;
1048  return kFALSE;
1049  }
1050  return kTRUE;
1051 }
1052 
1053 
1056 {
1057  // Set DCA Cut
1058  if( !fEsdTrackCuts ) {
1059  cout<<"Warning: AliESDtrackCut is not initialized "<<endl;
1060  return kFALSE;
1061  }
1062 
1063  switch(dcaCut){
1064  case 0:
1065  //Open cuts//
1066  fEsdTrackCuts->SetMaxDCAToVertexZ(1000);
1067  fEsdTrackCuts->SetMaxDCAToVertexXY(1000);
1068  fEsdTrackCuts->SetMaxChi2TPCConstrainedGlobal(36);
1069  break;
1070  case 1:
1071  fEsdTrackCuts->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01");
1072  fEsdTrackCuts->SetMaxChi2TPCConstrainedGlobal(36);
1073  break;
1074  case 2:
1075  fEsdTrackCuts->SetMaxDCAToVertexZ(2);
1076  fEsdTrackCuts->SetMaxDCAToVertexXY(1);
1077  fEsdTrackCuts->SetMaxChi2TPCConstrainedGlobal(36);
1078  break;
1079  case 3:
1080  fMaxDCAToVertexZ = 3.0;
1081  fEsdTrackCuts->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01");
1082  fEsdTrackCuts->SetMaxChi2TPCConstrainedGlobal(36);
1083  fEsdTrackCuts->SetMaxDCAToVertexZ(fMaxDCAToVertexZ);
1084  break;
1085  case 4:
1086  fEsdTrackCuts->SetMaxDCAToVertexZ(3.);
1087  fEsdTrackCuts->SetMaxDCAToVertexXY(0.5);
1088  fEsdTrackCuts->SetMaxChi2TPCConstrainedGlobal(36);
1089  break;
1090  default:
1091  cout<<"Warning: dcaCut not defined "<<dcaCut<<endl;
1092  return kFALSE;
1093  }
1094  return kTRUE;
1095 }
1096 
1099  // Set Cut
1100  switch(TOFelectronPID){
1101  case 0: // no cut
1102  fRequireTOF = kFALSE;
1103  fUseTOFpid = kFALSE;
1106  break;
1107  case 1: // -7,7
1108  fRequireTOF = kFALSE;
1109  fUseTOFpid = kTRUE;
1112  break;
1113  case 2: // -5,5
1114  fRequireTOF = kFALSE;
1115  fUseTOFpid = kTRUE;
1118  break;
1119  case 3: // -3,5
1120  fRequireTOF = kFALSE;
1121  fUseTOFpid = kTRUE;
1124  break;
1125  case 4: // -2,3
1126  fRequireTOF = kFALSE;
1127  fUseTOFpid = kTRUE;
1130  break;
1131  case 5: // -3, 3 TOF mandatory
1132  fRequireTOF = kTRUE;
1133  fUseTOFpid = kTRUE;
1136  break;
1137  default:
1138  cout<<"Warning: TOFPionCut not defined "<<TOFelectronPID<<endl;
1139  return kFALSE;
1140  }
1141  return kTRUE;
1142 }
1143 
1146  // Set Cut
1147  switch(massCut){
1148  case 0: // no cut
1149  fDoMassCut = kFALSE;
1150  fMassCut = 10;
1151  break;
1152  case 1: // cut at 1 GeV/c^2
1153  fDoMassCut = kTRUE;
1154  fMassCut = 1;
1155  break;
1156  case 2: // cut at 0.7 GeV/c^2
1157  fDoMassCut = kTRUE;
1158  fMassCut = 0.75;
1159  break;
1160  case 3: // cut at 0.6 GeV/c^2
1161  fDoMassCut = kTRUE;
1162  fMassCut = 0.6;
1163  break;
1164  case 4: // cut at eta mass
1165  fDoMassCut = kTRUE;
1166  fMassCut = 0.547853;
1167  break;
1168  case 5: // cut at 0.5 GeV/c^2
1169  fDoMassCut = kTRUE;
1170  fMassCut = 0.5;
1171  break;
1172  case 6: // cut at 0.65 GeV/c^2
1173  fDoMassCut = kTRUE;
1174  fMassCut = 0.65;
1175  break;
1176  case 7: // cut at 0.7 GeV/c^2
1177  fDoMassCut = kTRUE;
1178  fMassCut = 0.7;
1179  break;
1180  case 8: // cut at 0.85 GeV/c^2
1181  fDoMassCut = kTRUE;
1182  fMassCut = 0.85;
1183  break;
1184  case 9: // cut at 1.5 GeV/c^2
1185  fDoMassCut = kTRUE;
1186  fMassCut = 1.5;
1187  break;
1188  default:
1189  cout<<"Warning: MassCut not defined "<<massCut<<endl;
1190  return kFALSE;
1191  }
1192  return kTRUE;
1193 }
1194 
1195 
1198  // returns TString with current cut number
1199  return fCutStringRead;
1200 }
1201 
1202 
1205  //Create and return standard 2010 PbPb cuts
1206  AliPrimaryPionCuts *cuts=new AliPrimaryPionCuts("StandardCuts2010PbPb","StandardCuts2010PbPb");
1207  if(!cuts->InitializeCutsFromCutString("000000400")){
1208  cout<<"Warning: Initialization of Standardcuts2010PbPb failed"<<endl;
1209  }
1210  return cuts;
1211 }
1212 
1215  //Create and return standard 2010 PbPb cuts
1216  AliPrimaryPionCuts *cuts=new AliPrimaryPionCuts("StandardCuts2010pp","StandardCuts2010pp");
1217 
1218  if(!cuts->InitializeCutsFromCutString("000000400")){
1219  cout<<"Warning: Initialization of Standardcuts2010pp failed"<<endl;
1220  }
1221  return cuts;
1222 }
1223 
Double_t GetNFindableClustersTPC(AliVTrack *lTrack)
Bool_t dEdxCuts(AliVTrack *track)
Cut functions.
static AliPrimaryPionCuts * GetStandardCuts2010PbPb()
double Double_t
Definition: External.C:58
Bool_t SetITSClusterCut(Int_t clsITSCut)
Definition: External.C:236
const char * title
Definition: MakeQAPdf.C:27
Bool_t TrackIsSelectedAOD(AliAODTrack *lTrack)
Bool_t SetPtCut(Int_t ptCut)
Bool_t SetTPCdEdxCutPionLine(Int_t pidedxSigmaCut)
Double_t fPIDnSigmaAbovePionLineITS
Bool_t SetDCACut(Int_t dcaCut)
Double_t fPIDnSigmaAbovePionLineTPC
AliPrimaryPionCuts(const char *name="PionCuts", const char *title="Pion Cuts")
static AliPrimaryPionCuts * GetStandardCuts2010pp()
static const char * fgkCutNames[kNCuts]
Bool_t PionIsSelectedMC(Int_t labelParticle, AliMCEvent *mcEvent)
#define ASSIGNARRAY(i)
Double_t fPIDnSigmaBelowPionLineTOF
int Int_t
Definition: External.C:63
Bool_t PionIsSelectedAODMC(Int_t labelParticle, TClonesArray *AODMCTrackArray)
float Float_t
Definition: External.C:68
Bool_t PionIsSelectedAOD(AliAODTrack *lTrack)
Bool_t SetEtaCut(Int_t etaCut)
Bool_t fDoLightOutput
switch for running light output, kFALSE -> normal mode, kTRUE -> light mode
Bool_t SetMassCut(Int_t massCut)
Bool_t SetCut(cutIds cutID, Int_t cut)
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
Double_t fPIDnSigmaAbovePionLineTOF
Double_t fPIDnSigmaBelowPionLineITS
Bool_t SetITSdEdxCutPionLine(Int_t ededxSigmaCut)
Bool_t TrackIsSelected(AliESDtrack *lTrack)
AliPIDResponse * fPIDResponse
static AliVTrack * GetTrack(AliVEvent *event, Int_t label)
Bool_t PionIsSelected(AliESDtrack *lTrack)
bool Bool_t
Definition: External.C:53
Bool_t SetTOFPionPIDCut(Int_t TOFelectronPID)
Bool_t InitializeCutsFromCutString(const TString analysisCutSelection)
Bool_t SetTPCClusterCut(Int_t clsTPCCut)
AliESDtrackCuts * fEsdTrackCuts
Double_t fPIDnSigmaBelowPionLineTPC
void InitCutHistograms(TString name="", Bool_t preCut=kTRUE, TString cutName="")