]>
Commit | Line | Data |
---|---|---|
563113d0 | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
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 | **************************************************************************/ | |
15 | /////////////////////////////////////////////////////////////////////////// | |
16 | // The class AliCFManager is designed to handle inside the | |
17 | // task the basic components for a particle-level correction of single | |
18 | // particle analysis | |
19 | // The class provides methods to set lists of cuts and to loop over them | |
20 | // for several different selection steps to be then used for | |
21 | // efficiency calculation. | |
22 | // prototype version by S.Arcelli silvia.arcelli@cern.ch | |
23 | /////////////////////////////////////////////////////////////////////////// | |
563113d0 | 24 | #include "AliCFCutBase.h" |
25 | #include "AliCFManager.h" | |
26 | ||
27 | ClassImp(AliCFManager) | |
28 | ||
29 | //_____________________________________________________________________________ | |
30 | AliCFManager::AliCFManager() : | |
31 | TNamed(), | |
00148604 | 32 | fNStepEvt(0), |
33 | fNStepPart(0), | |
563113d0 | 34 | fEvtContainer(0x0), |
84df86a7 | 35 | fPartContainer(0x0), |
36 | fEvtCutList(0x0), | |
37 | fPartCutList(0x0) | |
563113d0 | 38 | { |
39 | // | |
40 | // ctor | |
41 | // | |
563113d0 | 42 | } |
43 | //_____________________________________________________________________________ | |
44 | AliCFManager::AliCFManager(Char_t* name, Char_t* title) : | |
45 | TNamed(name,title), | |
00148604 | 46 | fNStepEvt(0), |
47 | fNStepPart(0), | |
563113d0 | 48 | fEvtContainer(0x0), |
84df86a7 | 49 | fPartContainer(0x0), |
50 | fEvtCutList(0x0), | |
51 | fPartCutList(0x0) | |
52 | { | |
563113d0 | 53 | // |
54 | // ctor | |
55 | // | |
563113d0 | 56 | } |
57 | //_____________________________________________________________________________ | |
58 | AliCFManager::AliCFManager(const AliCFManager& c) : | |
59 | TNamed(c), | |
00148604 | 60 | fNStepEvt(c.fNStepEvt), |
61 | fNStepPart(c.fNStepPart), | |
563113d0 | 62 | fEvtContainer(c.fEvtContainer), |
84df86a7 | 63 | fPartContainer(c.fPartContainer), |
64 | fEvtCutList(c.fEvtCutList), | |
65 | fPartCutList(c.fPartCutList) | |
66 | { | |
563113d0 | 67 | // |
68 | //copy ctor | |
69 | // | |
84df86a7 | 70 | } |
563113d0 | 71 | //_____________________________________________________________________________ |
72 | AliCFManager& AliCFManager::operator=(const AliCFManager& c) | |
73 | { | |
74 | // | |
75 | // Assignment operator | |
76 | // | |
77 | if (this != &c) { | |
78 | TNamed::operator=(c) ; | |
79 | } | |
84df86a7 | 80 | |
00148604 | 81 | this->fNStepEvt=c.fNStepEvt; |
82 | this->fNStepPart=c.fNStepPart; | |
563113d0 | 83 | this->fEvtContainer=c.fEvtContainer; |
84 | this->fPartContainer=c.fPartContainer; | |
84df86a7 | 85 | this->fEvtCutList=c.fEvtCutList; |
86 | this->fPartCutList=c.fPartCutList; | |
563113d0 | 87 | return *this ; |
88 | } | |
89 | ||
90 | //_____________________________________________________________________________ | |
91 | AliCFManager::~AliCFManager() { | |
92 | // | |
93 | //dtor | |
94 | // | |
563113d0 | 95 | } |
96 | ||
97 | //_____________________________________________________________________________ | |
98 | Bool_t AliCFManager::CheckParticleCuts(Int_t isel, TObject *obj, const TString &selcuts) const { | |
99 | // | |
100 | // check whether object obj passes particle-level selection isel | |
101 | // | |
102 | ||
4b49fad2 | 103 | if(isel>=fNStepPart){ |
104 | AliWarning(Form("Selection index out of Range! isel=%i, max. number of selections= %i", isel,fNStepPart)); | |
84df86a7 | 105 | return kTRUE; |
563113d0 | 106 | } |
107 | if(!fPartCutList[isel])return kTRUE; | |
108 | TObjArrayIter iter(fPartCutList[isel]); | |
109 | AliCFCutBase *cut = 0; | |
110 | while ( (cut = (AliCFCutBase*)iter.Next()) ) { | |
111 | TString cutName=cut->GetName(); | |
112 | Bool_t checkCut=CompareStrings(cutName,selcuts); | |
113 | if(checkCut && !cut->IsSelected(obj)) return kFALSE; | |
114 | } | |
115 | return kTRUE; | |
116 | } | |
117 | ||
118 | //_____________________________________________________________________________ | |
119 | Bool_t AliCFManager::CheckEventCuts(Int_t isel, TObject *obj, const TString &selcuts) const{ | |
120 | // | |
121 | // check whether object obj passes event-level selection isel | |
122 | // | |
123 | ||
4b49fad2 | 124 | if(isel>=fNStepEvt){ |
125 | AliWarning(Form("Selection index out of Range! isel=%i, max. number of selections= %i", isel,fNStepEvt)); | |
563113d0 | 126 | return kTRUE; |
127 | } | |
128 | if(!fEvtCutList[isel])return kTRUE; | |
129 | TObjArrayIter iter(fEvtCutList[isel]); | |
130 | AliCFCutBase *cut = 0; | |
131 | while ( (cut = (AliCFCutBase*)iter.Next()) ) { | |
132 | TString cutName=cut->GetName(); | |
133 | Bool_t checkCut=CompareStrings(cutName,selcuts); | |
134 | if(checkCut && !cut->IsSelected(obj)) return kFALSE; | |
135 | } | |
136 | return kTRUE; | |
137 | } | |
138 | ||
563113d0 | 139 | //_____________________________________________________________________________ |
140 | void AliCFManager::SetEventInfo(TObject *obj) const { | |
141 | ||
142 | //Particle level cuts | |
143 | ||
4b49fad2 | 144 | if (!fPartCutList) { |
145 | AliWarning("No particle cut list found"); | |
84df86a7 | 146 | } |
147 | else { | |
4b49fad2 | 148 | for(Int_t isel=0;isel<fNStepPart; isel++){ |
84df86a7 | 149 | if(!fPartCutList[isel])continue; |
150 | TObjArrayIter iter(fPartCutList[isel]); | |
151 | AliCFCutBase *cut = 0; | |
152 | while ( (cut = (AliCFCutBase*)iter.Next()) ) { | |
153 | cut->SetEvtInfo(obj); | |
154 | } | |
155 | } | |
563113d0 | 156 | } |
157 | ||
158 | //Event level cuts | |
84df86a7 | 159 | |
4b49fad2 | 160 | if (!fEvtCutList) { |
161 | AliWarning("No event cut list found"); | |
84df86a7 | 162 | } |
163 | else { | |
4b49fad2 | 164 | for(Int_t isel=0;isel<fNStepEvt; isel++){ |
84df86a7 | 165 | if(!fEvtCutList[isel])continue; |
166 | TObjArrayIter iter(fEvtCutList[isel]); | |
167 | AliCFCutBase *cut = 0; | |
168 | while ( (cut = (AliCFCutBase*)iter.Next()) ) { | |
169 | cut->SetEvtInfo(obj); | |
170 | } | |
171 | } | |
563113d0 | 172 | } |
173 | } | |
563113d0 | 174 | |
175 | //_____________________________________________________________________________ | |
176 | Bool_t AliCFManager::CompareStrings(const TString &cutname,const TString &selcuts) const{ | |
177 | // | |
178 | // compare two strings | |
179 | // | |
180 | ||
181 | if(selcuts.Contains("all"))return kTRUE; | |
182 | if ( selcuts.CompareTo(cutname) == 0 || | |
183 | selcuts.BeginsWith(cutname+" ") || | |
184 | selcuts.EndsWith(" "+cutname) || | |
185 | selcuts.Contains(" "+cutname+" ")) return kTRUE; | |
186 | return kFALSE; | |
187 | } | |
188 | ||
189 | ||
84df86a7 | 190 | //_____________________________________________________________________________ |
191 | void AliCFManager::SetEventCutsList(Int_t isel, TObjArray* array) { | |
192 | // | |
193 | //Setter for event-level selection cut list at selection step isel | |
194 | // | |
195 | ||
196 | if (!fEvtContainer) { | |
4b49fad2 | 197 | AliWarning("No event container defined, you may need to set it first!"); |
84df86a7 | 198 | } |
199 | ||
00148604 | 200 | Int_t nstep = fNStepEvt; |
84df86a7 | 201 | |
60935290 | 202 | if (!fEvtCutList) { |
203 | fEvtCutList = new TObjArray*[nstep] ; | |
204 | for (Int_t i=0; i<nstep; ++i) fEvtCutList[i] = 0; | |
205 | } | |
84df86a7 | 206 | if (isel >= nstep) { |
207 | AliWarning(Form("Selection index out of Range! isel=%i, max. number of selections= %i", isel,nstep)); | |
208 | return; | |
209 | } | |
210 | fEvtCutList[isel] = array; | |
211 | } | |
212 | ||
213 | //_____________________________________________________________________________ | |
214 | void AliCFManager::SetParticleCutsList(Int_t isel, TObjArray* array) { | |
215 | // | |
216 | //Setter for particle-level selection cut list at selection step isel | |
217 | // | |
218 | ||
219 | if (!fPartContainer) { | |
4b49fad2 | 220 | AliWarning("No particle container defined, you may need to set it first!"); |
84df86a7 | 221 | } |
222 | ||
00148604 | 223 | Int_t nstep = fNStepPart ; |
84df86a7 | 224 | |
225 | if (!fPartCutList) fPartCutList = new TObjArray*[nstep] ; | |
226 | if (isel >= nstep) { | |
227 | AliWarning(Form("Selection index out of Range! isel=%i, max. number of selections= %i", isel,nstep)); | |
228 | return; | |
229 | } | |
230 | fPartCutList[isel] = array; | |
231 | } |