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 AliHFEtaggedTrackAnalysis
17 // Analyses tracks with an apriori PID information (i.e. using the daugther
18 // tracks from well-identified decays of neutral charged particles). Tracks
19 // are processed in the Process function, where given tracks are filtered
20 // via the track cuts and used for PID later. The plugin fills Correction
21 // Framework containers and additional PID QA containers
24 // Markus Fasel <M.Fasel@gsi.de>
26 #include "AliCFCutBase.h"
27 #include "AliCFContainer.h"
28 #include "AliCFManager.h"
32 #include "AliHFEcontainer.h"
33 #include "AliHFEcuts.h"
34 #include "AliHFEpid.h"
35 #include "AliHFEpidQAmanager.h"
36 #include "AliHFEtaggedTrackAnalysis.h"
37 #include "AliHFEvarManager.h"
39 ClassImp(AliHFEtaggedTrackAnalysis)
41 //____________________________________________________________
42 AliHFEtaggedTrackAnalysis::AliHFEtaggedTrackAnalysis():
52 // Default constructor
54 fVarManager = new AliHFEvarManager("taggedTrackVarManager");
55 fVarManager->AddVariable("pt");
56 fVarManager->AddVariable("eta");
57 fVarManager->AddVariable("phi");
58 fVarManager->AddVariable("charge");
59 fVarManager->AddVariable("species");
60 fPIDqa = new AliHFEpidQAmanager;
61 fCFM = new AliCFManager;
62 SetBit(kIsOwner, kTRUE);
65 //____________________________________________________________
66 AliHFEtaggedTrackAnalysis::AliHFEtaggedTrackAnalysis(const AliHFEtaggedTrackAnalysis &ref):
68 , fVarManager(ref.fVarManager)
81 SetBit(kIsOwner, kFALSE);
84 //____________________________________________________________
85 AliHFEtaggedTrackAnalysis &AliHFEtaggedTrackAnalysis::operator=(const AliHFEtaggedTrackAnalysis &ref){
87 // Assignment operator
90 fVarManager = ref.fVarManager;
96 if(ref.fContainer) InitContainer();
98 SetBit(kIsOwner, kFALSE);
99 SetBit(kIsOwnerCuts, kFALSE);
104 //____________________________________________________________
105 AliHFEtaggedTrackAnalysis::~AliHFEtaggedTrackAnalysis(){
109 if(TestBit(kIsOwner)){
110 if(fVarManager) delete fVarManager;
111 if(fPIDqa) delete fPIDqa;
113 if(TestBit(kIsOwnerCuts)) delete fCuts;
114 if(fContainer) delete fContainer;
117 //____________________________________________________________
118 void AliHFEtaggedTrackAnalysis::InitContainer(){
120 // Initialize output container
122 if(fContainer) return;
125 AliError("No PID set - defining container without PID steps");
127 nStepPID = fPID->GetNumberOfPIDdetectors();
129 fContainer = new AliHFEcontainer("containerV0");
130 fVarManager->DefineVariables(fContainer);
131 fContainer->CreateContainer("taggedTrackContainerReco", "Container for Tagged Tracks", AliHFEcuts::kNcutStepsRecTrack + nStepPID);
133 // Set the step titles
134 for(Int_t istep = 0; istep < AliHFEcuts::kNcutStepsRecTrack; istep++)
135 fContainer->SetStepTitle("taggedTrackContainerReco", AliHFEcuts::RecoCutName(istep), istep);
136 for(Int_t ipid = 0; ipid < nStepPID; ipid++){
137 fContainer->SetStepTitle("taggedTrackContainerReco", fPID->SortedDetectorName(ipid), ipid + AliHFEcuts::kNcutStepsRecTrack);
139 fCFM->SetParticleContainer(fContainer->GetCFContainer("taggedTrackContainerReco"));
142 //____________________________________________________________
143 void AliHFEtaggedTrackAnalysis::ProcessTrack(AliVParticle *track, Int_t abinitioPID){
145 // Filter tracks tagged by V0 PID class
147 fVarManager->NewTrack(track, NULL, 0., abinitioPID, kTRUE);
148 Int_t offset = AliHFEcuts::kStepRecKineITSTPC;
149 fVarManager->FillContainer(fCFM->GetParticleContainer(), 0); // Fill Container without filtering
151 Bool_t survived = kTRUE;
152 for(Int_t icut = AliHFEcuts::kStepRecKineITSTPC; icut <= AliHFEcuts::kStepHFEcutsTRD; icut++){
153 AliDebug(2, Form("Checking cut %d for species %s", icut + AliHFEcuts::kNcutStepsMCTrack, AliPID::ParticleName(abinitioPID)));
155 TObjArray *cutlist = fCFM->GetParticleCutsList(icut + AliHFEcuts::kNcutStepsMCTrack);
157 AliDebug(2, Form("No cuts for step %d set", icut + AliHFEcuts::kNcutStepsMCTrack));
159 AliDebug(2, Form("Cut Collection %s", cutlist->GetName()));
160 TIter cutiter(cutlist);
162 while((cut = dynamic_cast<AliCFCutBase *>(cutiter()))){
163 AliDebug(2, Form("Cut object %s, QA on? %s", cut->GetName(), cut->IsQAOn() ? "yes" : "no"));
167 //if(!fCFM->CheckParticleCuts(icut + AliHFEcuts::kNcutStepsMCTrack, (TObject *)track)){
168 if(!fCuts->CheckParticleCuts(icut + AliHFEcuts::kNcutStepsMCTrack, (TObject *)track)){
169 AliDebug(2, Form("Track didn' survive cut %d", icut + AliHFEcuts::kNcutStepsMCTrack));
173 AliDebug(2, Form("Cut passed, filling container %d", icut - offset + 1));
174 fVarManager->FillContainer(fCFM->GetParticleContainer(), icut - offset + 1);
177 AliDebug(2, "Use track in the PID");
179 AliHFEpidObject hfetrack;
180 hfetrack.SetAnalysisType(AliHFEpidObject::kESDanalysis);
181 hfetrack.SetRecTrack(track);
182 hfetrack.SetAbInitioPID(abinitioPID);
183 fPID->SetVarManager(fVarManager);
184 fPID->IsSelected(&hfetrack, fContainer, "taggedTrackContainer", fPIDqa);
188 //____________________________________________________________
189 void AliHFEtaggedTrackAnalysis::SetCuts(AliHFEcuts *cuts){
191 // Set HFE cuts to be used to filter the tagged tracks
194 AliWarning("Nob cuts provided - Using standard cuts");
195 fCuts = new AliHFEcuts("cutsTagged", "HFE Cuts for the V0 tagged tracks");
196 fCuts->CreateStandardCuts();
198 SetBit(kIsOwnerCuts);
200 AliDebug(1, "Setting single track cuts");
202 const Int_t kNcutSteps = AliHFEcuts::kNcutStepsMCTrack + AliHFEcuts::kNcutStepsRecTrack + AliHFEcuts::kNcutStepsDETrack;
203 printf("Setting Number of cut steps %d\n", kNcutSteps);
204 fCFM->SetNStepParticle(kNcutSteps);
205 for(Int_t istep = 0; istep < kNcutSteps; istep++)
206 fCFM->SetParticleCutsList(istep, NULL);
208 fCuts->Initialize(fCFM);
211 //____________________________________________________________
212 void AliHFEtaggedTrackAnalysis::SetPID(AliHFEpid *pid){
214 // Set the PID and initialize the the QA manager
217 fPIDqa->Initialize(fPID);
220 //____________________________________________________________
221 TList *AliHFEtaggedTrackAnalysis::GetPIDQA() const {
225 return fPIDqa->MakeList("PIDqa_taggedTracks");
228 //____________________________________________________________
229 TList *AliHFEtaggedTrackAnalysis::GetCutQA() const {
233 return fCuts->GetQAhistograms();