1 /**************************************************************************
2 * Copyright(c) 1998-1999, 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 // class to benchmark the V0 pid capabilties
17 // runs over reconstructed V0 candidates and uses MC information for
18 // further analysis [purity, PID perfortmance]
21 // Matus Kalisky <matus.kalisky@cern.ch>
24 #include "TIterator.h"
26 #include "AliVParticle.h"
27 #include "AliESDtrack.h"
28 #include "AliMCParticle.h"
29 #include "AliMCEvent.h"
31 #include "AliHFEcollection.h"
33 #include "AliHFEV0pidMC.h"
34 ClassImp(AliHFEV0pidMC)
36 //____________________________________________________________
37 AliHFEV0pidMC::AliHFEV0pidMC():
43 // default constructor
47 //____________________________________________________________
48 AliHFEV0pidMC::~AliHFEV0pidMC(){
52 if (fColl) delete fColl;
54 //____________________________________________________________
55 void AliHFEV0pidMC::Init(){
60 memset(&fDestBits, 0, sizeof(UInt_t));
63 fColl = new AliHFEcollection("V0pidMC", "MC based V0 benchmarking");
65 fColl->CreateTH1F("h_QA_nParticles", "QA on track processing", 10, -0.5, 9.5);
67 const Int_t nBins = 20;
68 const Float_t pMin = 0.1;
69 const Float_t pMax = 10.;
72 fColl->CreateTH1F("h_Electron", "all electron candidates (no MC); p (GeV/c); counts", nBins, pMin, pMax, 0);
73 fColl->CreateTH1F("h_PionK0", "all K0 pion candidates (no MC); p (GeV/c); counts", nBins, pMin, pMax, 0);
74 fColl->CreateTH1F("h_PionL", "all Lambda pion candidates (no MC); p (GeV/c); counts", nBins, pMin, pMax, 0);
75 fColl->CreateTH1F("h_Kaon", "all Kaon candidates (no MC); p (GeV/c); counts", nBins, pMin, pMax, 0);
76 fColl->CreateTH1F("h_Proton", "all Lambda proton candidates (no MC); p (GeV/c); counts", nBins, pMin, pMax, 0);
78 fColl->CreateTH1F("h_mis_Electron", "all NON electron candidates MC tagged; p (GeV/c); counts", nBins, pMin, pMax, 0);
79 fColl->CreateTH1F("h_mis_PionK0", "all NON K0 pion candidates MC tagged; p (GeV/c); counts", nBins, pMin, pMax, 0);
80 fColl->CreateTH1F("h_mis_PionL", "all NON Lambda pion candidates MC tagged ; p (GeV/c); counts", nBins, pMin, pMax, 0);
81 fColl->CreateTH1F("h_mis_Kaon", "all NON Kaon candidates MC tagged; p (GeV/c); counts", nBins, pMin, pMax, 0);
82 fColl->CreateTH1F("h_mis_Proton", "all NON Lambda proton candidates MC tagged; p (GeV/c); counts", nBins, pMin, pMax, 0);
84 fColl->CreateTH1Fvector1(5, "h_tag_Electron", "electron candidate MC tagged; p (GeV/c); counts", nBins, pMin, pMax, 0);
85 fColl->CreateTH1Fvector1(5, "h_tag_PionK0", "K0 pion candidate MC tagged; p (GeV/c); counts", nBins, pMin, pMax, 0);
86 fColl->CreateTH1Fvector1(5, "h_tag_PionL", "Lambda pion candidate MC tagged; p (GeV/c); counts", nBins, pMin, pMax, 0);
87 fColl->CreateTH1Fvector1(5, "h_tag_Kaon", "kaon candidate MC tagged; p (GeV/c); counts", nBins, pMin, pMax, 0);
88 fColl->CreateTH1Fvector1(5, "h_tag_Proton", "Lambda proton candidate MC tagged; p (GeV/c); counts", nBins, pMin, pMax, 0);
91 //____________________________________________________________
92 Bool_t AliHFEV0pidMC::Process(TObjArray * const particles, Int_t type){
94 // process the selected V0 daughter tracks
98 const TString typeName[5] = {"Electron", "PionK0", "PionL", "Kaon", "Proton"};
99 const Int_t typePID[5] = {0, 2, 2, 3, 4};
101 if(!fMC) return kFALSE;
102 if(!particles) return kFALSE;
104 AliVParticle *recTrack = NULL;
105 TIterator *trackIter = particles->MakeIterator();
106 while((recTrack = dynamic_cast<AliVParticle *>(trackIter->Next()))){
107 fColl->Fill("h_QA_nParticles", 0);
109 AliESDtrack *track = dynamic_cast<AliESDtrack *>(recTrack);
111 const AliExternalTrackParam *ext = track->GetOuterParam();
114 Int_t label = track->GetLabel();
116 fColl->Fill("h_QA_nParticles", 1);
119 AliMCParticle *mcpD = dynamic_cast<AliMCParticle*>(fMC->GetTrack(label));
121 fColl->Fill("h_QA_nParticles", 2);
125 Float_t p = ext->P();
126 //Short_t charge = ext->Charge();
127 Int_t pdgD = mcpD->PdgCode();
128 AliMCParticle *mcpM = dynamic_cast<AliMCParticle*>(fMC->GetTrack(mcpD->GetMother()));
130 fColl->Fill("h_QA_nParticles", 3);
133 //Int_t pdgM = mcpM->PdgCode();
136 hname = "h_" + typeName[type];
137 fColl->Fill(hname, p);
138 Int_t pidD = PDGtoPIDdaughter(pdgD);
140 // all misidentified candidates
141 hname = "h_mis_" + typeName[type];
142 if(typePID[type] != pidD){
143 fColl->Fill(hname, p);
146 // for every particle fill detailed information about the missidentified particles
147 hname = "h_tag_" + typeName[type];
148 Int_t aliPID = PDGtoAliPID(pdgD);
149 fColl->Fill(hname, aliPID, p);
151 }// .. loop over array
156 //____________________________________________________________
157 Int_t AliHFEV0pidMC::PDGtoPIDdaughter(Int_t pdg) const {
159 // convert PDG to local pid
161 switch (TMath::Abs(pdg)){
163 return 0; // electron gamma
165 return 2; // pion K0 or pion Lambda
169 return 4; // proton Lambda
176 //____________________________________________________________
177 Int_t AliHFEV0pidMC::PDGtoPIDmother(Int_t pdg) const {
179 // convert PDG to local pid
181 switch (TMath::Abs(pdg)){
196 //____________________________________________________________
197 Int_t AliHFEV0pidMC::PDGtoAliPID(Int_t pdg) const {
199 // convert PDG to AliPID
202 switch (TMath::Abs(pdg)){
204 return 0; // electron
218 //____________________________________________________________
219 TList *AliHFEV0pidMC::GetListOfQAhistograms(){
224 CLRBIT(fDestBits, 1);
226 return fColl->GetList();