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 **************************************************************************/
15 ///////////////////////////////////////////////////////////////////////////
16 // The class AliCFManager is designed to handle inside the
17 // task the basic components for a particle-level correction of single
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 ///////////////////////////////////////////////////////////////////////////
24 #include "AliCFCutBase.h"
25 #include "AliCFManager.h"
27 ClassImp(AliCFManager)
29 //_____________________________________________________________________________
30 AliCFManager::AliCFManager() :
43 //_____________________________________________________________________________
44 AliCFManager::AliCFManager(Char_t* name, Char_t* title) :
57 //_____________________________________________________________________________
58 AliCFManager::AliCFManager(const AliCFManager& c) :
60 fNStepEvt(c.fNStepEvt),
61 fNStepPart(c.fNStepPart),
62 fEvtContainer(c.fEvtContainer),
63 fPartContainer(c.fPartContainer),
64 fEvtCutList(c.fEvtCutList),
65 fPartCutList(c.fPartCutList)
71 //_____________________________________________________________________________
72 AliCFManager& AliCFManager::operator=(const AliCFManager& c)
75 // Assignment operator
78 TNamed::operator=(c) ;
81 this->fNStepEvt=c.fNStepEvt;
82 this->fNStepPart=c.fNStepPart;
83 this->fEvtContainer=c.fEvtContainer;
84 this->fPartContainer=c.fPartContainer;
85 this->fEvtCutList=c.fEvtCutList;
86 this->fPartCutList=c.fPartCutList;
90 //_____________________________________________________________________________
91 AliCFManager::~AliCFManager() {
97 //_____________________________________________________________________________
98 Bool_t AliCFManager::CheckParticleCuts(Int_t isel, TObject *obj, const TString &selcuts) const {
100 // check whether object obj passes particle-level selection isel
103 if(isel>=fNStepPart){
104 AliWarning(Form("Selection index out of Range! isel=%i, max. number of selections= %i", isel,fNStepPart));
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;
118 //_____________________________________________________________________________
119 Bool_t AliCFManager::CheckEventCuts(Int_t isel, TObject *obj, const TString &selcuts) const{
121 // check whether object obj passes event-level selection isel
125 AliWarning(Form("Selection index out of Range! isel=%i, max. number of selections= %i", isel,fNStepEvt));
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;
139 //_____________________________________________________________________________
140 void AliCFManager::SetEventInfo(TObject *obj) const {
142 //Particle level cuts
145 AliWarning("No particle cut list found");
148 for(Int_t isel=0;isel<fNStepPart; isel++){
149 if(!fPartCutList[isel])continue;
150 TObjArrayIter iter(fPartCutList[isel]);
151 AliCFCutBase *cut = 0;
152 while ( (cut = (AliCFCutBase*)iter.Next()) ) {
153 cut->SetEvtInfo(obj);
161 AliWarning("No event cut list found");
164 for(Int_t isel=0;isel<fNStepEvt; isel++){
165 if(!fEvtCutList[isel])continue;
166 TObjArrayIter iter(fEvtCutList[isel]);
167 AliCFCutBase *cut = 0;
168 while ( (cut = (AliCFCutBase*)iter.Next()) ) {
169 cut->SetEvtInfo(obj);
175 //_____________________________________________________________________________
176 Bool_t AliCFManager::CompareStrings(const TString &cutname,const TString &selcuts) const{
178 // compare two strings
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;
190 //_____________________________________________________________________________
191 void AliCFManager::SetEventCutsList(Int_t isel, TObjArray* array) {
193 //Setter for event-level selection cut list at selection step isel
196 if (!fEvtContainer) {
197 AliWarning("No event container defined, you may need to set it first!");
200 Int_t nstep = fNStepEvt;
202 if (!fEvtCutList) fEvtCutList = new TObjArray*[nstep] ;
204 AliWarning(Form("Selection index out of Range! isel=%i, max. number of selections= %i", isel,nstep));
207 fEvtCutList[isel] = array;
210 //_____________________________________________________________________________
211 void AliCFManager::SetParticleCutsList(Int_t isel, TObjArray* array) {
213 //Setter for particle-level selection cut list at selection step isel
216 if (!fPartContainer) {
217 AliWarning("No particle container defined, you may need to set it first!");
220 Int_t nstep = fNStepPart ;
222 if (!fPartCutList) fPartCutList = new TObjArray*[nstep] ;
224 AliWarning(Form("Selection index out of Range! isel=%i, max. number of selections= %i", isel,nstep));
227 fPartCutList[isel] = array;