ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/
///////////////////////////////////////////////////////////////////////////
// The class AliCFManager is designed to handle inside the 
// task the basic components for a particle-level correction of single 
// particle analysis
// The class provides methods to set lists of cuts and to loop over them 
// for several different selection steps to be then used for
// efficiency calculation.
// prototype version by S.Arcelli silvia.arcelli@cern.ch
///////////////////////////////////////////////////////////////////////////
#include "AliCFCutBase.h"
#include "AliCFManager.h"

ClassImp(AliCFManager)

//_____________________________________________________________________________
AliCFManager::AliCFManager() : 
  TNamed(),
  fNStepEvt(0),
  fNStepPart(0),
  fEvtContainer(0x0),
  fPartContainer(0x0),
  fEvtCutList(0x0),
  fPartCutList(0x0)
{ 
  //
  // ctor
  //
}
//_____________________________________________________________________________
AliCFManager::AliCFManager(Char_t* name, Char_t* title) : 
  TNamed(name,title),
  fNStepEvt(0),
  fNStepPart(0),
  fEvtContainer(0x0),
  fPartContainer(0x0),
  fEvtCutList(0x0),
  fPartCutList(0x0)
{ 
   //
   // ctor
   //
}
//_____________________________________________________________________________
AliCFManager::AliCFManager(const AliCFManager& c) : 
  TNamed(c),
  fNStepEvt(c.fNStepEvt),
  fNStepPart(c.fNStepPart),
  fEvtContainer(c.fEvtContainer),
  fPartContainer(c.fPartContainer),
  fEvtCutList(c.fEvtCutList),
  fPartCutList(c.fPartCutList)
{ 
   //
   //copy ctor
   //
}
//_____________________________________________________________________________
AliCFManager& AliCFManager::operator=(const AliCFManager& c)
{
  //
  // Assignment operator
  //
  if (this != &c) {
    TNamed::operator=(c) ;
  }
  
  this->fNStepEvt=c.fNStepEvt;
  this->fNStepPart=c.fNStepPart;
  this->fEvtContainer=c.fEvtContainer;
  this->fPartContainer=c.fPartContainer;
  this->fEvtCutList=c.fEvtCutList;
  this->fPartCutList=c.fPartCutList;
  return *this ;
}

//_____________________________________________________________________________
AliCFManager::~AliCFManager() {
   //
   //dtor
   //
}

//_____________________________________________________________________________
Bool_t AliCFManager::CheckParticleCuts(Int_t isel, TObject *obj, const TString  &selcuts) const {
  //
  // check whether object obj passes particle-level selection isel
  //

  if(isel>=fNStepPart){
    AliWarning(Form("Selection index out of Range! isel=%i, max. number of selections= %i", isel,fNStepPart));
    return kTRUE;
  }
  if(!fPartCutList[isel])return kTRUE;
  TObjArrayIter iter(fPartCutList[isel]);
  AliCFCutBase *cut = 0;
  while ( (cut = (AliCFCutBase*)iter.Next()) ) {
    TString cutName=cut->GetName();
    Bool_t checkCut=CompareStrings(cutName,selcuts);
    if(checkCut && !cut->IsSelected(obj)) return kFALSE;   
  }
  return kTRUE;
}

//_____________________________________________________________________________
Bool_t AliCFManager::CheckEventCuts(Int_t isel, TObject *obj, const TString  &selcuts) const{
  //
  // check whether object obj passes event-level selection isel
  //

  if(isel>=fNStepEvt){
    AliWarning(Form("Selection index out of Range! isel=%i, max. number of selections= %i", isel,fNStepEvt));
      return kTRUE;
  }
  if(!fEvtCutList[isel])return kTRUE;
  TObjArrayIter iter(fEvtCutList[isel]);
  AliCFCutBase *cut = 0;
  while ( (cut = (AliCFCutBase*)iter.Next()) ) {
    TString cutName=cut->GetName();
    Bool_t checkCut=CompareStrings(cutName,selcuts);
    if(checkCut && !cut->IsSelected(obj)) return kFALSE;   
  }
  return kTRUE;
}

//_____________________________________________________________________________
void  AliCFManager::SetMCEventInfo(const TObject *obj) const {

  //Particle level cuts

  if (!fPartCutList) {
    AliWarning("No particle cut list found");
  }
  else {
    for(Int_t isel=0;isel<fNStepPart; isel++){
      if(!fPartCutList[isel])continue;  
      TObjArrayIter iter(fPartCutList[isel]);
      AliCFCutBase *cut = 0;
      while ( (cut = (AliCFCutBase*)iter.Next()) ) {
	cut->SetMCEventInfo(obj);
      }    
    }
  }
  
  //Event level cuts 
  
  if (!fEvtCutList) {
    AliWarning("No event cut list found");
  }
  else {
    for(Int_t isel=0;isel<fNStepEvt; isel++){
      if(!fEvtCutList[isel])continue;  
      TObjArrayIter iter(fEvtCutList[isel]);
      AliCFCutBase *cut = 0;
      while ( (cut = (AliCFCutBase*)iter.Next()) ) {
	cut->SetMCEventInfo(obj);
      }   
    }
  }
}
//_____________________________________________________________________________
void  AliCFManager::SetRecEventInfo(const TObject *obj) const {

  //Particle level cuts

  if (!fPartCutList) {
    AliWarning("No particle cut list found");
  }
  else {
    for(Int_t isel=0;isel<fNStepPart; isel++){
      if(!fPartCutList[isel])continue;  
      TObjArrayIter iter(fPartCutList[isel]);
      AliCFCutBase *cut = 0;
      while ( (cut = (AliCFCutBase*)iter.Next()) ) {
	cut->SetRecEventInfo(obj);
      }    
    }
  }
  
  //Event level cuts 
  
  if (!fEvtCutList) {
    AliWarning("No event cut list found");
  }
  else {
    for(Int_t isel=0;isel<fNStepEvt; isel++){
      if(!fEvtCutList[isel])continue;  
      TObjArrayIter iter(fEvtCutList[isel]);
      AliCFCutBase *cut = 0;
      while ( (cut = (AliCFCutBase*)iter.Next()) ) {
	cut->SetRecEventInfo(obj);
      }   
    }
  }
}

//_____________________________________________________________________________
Bool_t AliCFManager::CompareStrings(const TString  &cutname,const TString  &selcuts) const{
  //
  // compare two strings
  //

  if(selcuts.Contains("all"))return kTRUE;
  if ( selcuts.CompareTo(cutname) == 0 ||
       selcuts.BeginsWith(cutname+" ") ||
       selcuts.EndsWith(" "+cutname) ||
       selcuts.Contains(" "+cutname+" "))  return kTRUE; 
  return kFALSE;
}


//_____________________________________________________________________________
void AliCFManager::SetEventCutsList(Int_t isel, TObjArray* array) {
  //
  //Setter for event-level selection cut list at selection step isel
  //

  if (!fEvtContainer) {
    AliWarning("No event container defined, you may need to set it first!"); 
  }

  Int_t nstep = fNStepEvt;

  if (!fEvtCutList) {
    fEvtCutList = new TObjArray*[nstep] ;
    for (Int_t i=0; i<nstep; ++i) fEvtCutList[i] = 0;
  }
  if (isel >= nstep) {
    AliWarning(Form("Selection index out of Range! isel=%i, max. number of selections= %i", isel,nstep));
    return;
  }
  fEvtCutList[isel] = array;
}

//_____________________________________________________________________________
void AliCFManager::SetParticleCutsList(Int_t isel, TObjArray* array) {
  //
  //Setter for particle-level selection cut list at selection step isel
  //

  if (!fPartContainer) {
    AliWarning("No particle container defined, you may need to set it first!"); 
  }
  
  Int_t nstep = fNStepPart ;
  
  if (!fPartCutList) {
    fPartCutList = new TObjArray*[nstep] ;
    for (Int_t istep = 0; istep < nstep; istep++)  fPartCutList[istep] = 0; 
  }
  
  if (isel >= nstep) {
    AliWarning(Form("Selection index out of Range! isel=%i, max. number of selections= %i", isel,nstep));
    return;
  }
  fPartCutList[isel] = array;
}
 AliCFManager.cxx:1
 AliCFManager.cxx:2
 AliCFManager.cxx:3
 AliCFManager.cxx:4
 AliCFManager.cxx:5
 AliCFManager.cxx:6
 AliCFManager.cxx:7
 AliCFManager.cxx:8
 AliCFManager.cxx:9
 AliCFManager.cxx:10
 AliCFManager.cxx:11
 AliCFManager.cxx:12
 AliCFManager.cxx:13
 AliCFManager.cxx:14
 AliCFManager.cxx:15
 AliCFManager.cxx:16
 AliCFManager.cxx:17
 AliCFManager.cxx:18
 AliCFManager.cxx:19
 AliCFManager.cxx:20
 AliCFManager.cxx:21
 AliCFManager.cxx:22
 AliCFManager.cxx:23
 AliCFManager.cxx:24
 AliCFManager.cxx:25
 AliCFManager.cxx:26
 AliCFManager.cxx:27
 AliCFManager.cxx:28
 AliCFManager.cxx:29
 AliCFManager.cxx:30
 AliCFManager.cxx:31
 AliCFManager.cxx:32
 AliCFManager.cxx:33
 AliCFManager.cxx:34
 AliCFManager.cxx:35
 AliCFManager.cxx:36
 AliCFManager.cxx:37
 AliCFManager.cxx:38
 AliCFManager.cxx:39
 AliCFManager.cxx:40
 AliCFManager.cxx:41
 AliCFManager.cxx:42
 AliCFManager.cxx:43
 AliCFManager.cxx:44
 AliCFManager.cxx:45
 AliCFManager.cxx:46
 AliCFManager.cxx:47
 AliCFManager.cxx:48
 AliCFManager.cxx:49
 AliCFManager.cxx:50
 AliCFManager.cxx:51
 AliCFManager.cxx:52
 AliCFManager.cxx:53
 AliCFManager.cxx:54
 AliCFManager.cxx:55
 AliCFManager.cxx:56
 AliCFManager.cxx:57
 AliCFManager.cxx:58
 AliCFManager.cxx:59
 AliCFManager.cxx:60
 AliCFManager.cxx:61
 AliCFManager.cxx:62
 AliCFManager.cxx:63
 AliCFManager.cxx:64
 AliCFManager.cxx:65
 AliCFManager.cxx:66
 AliCFManager.cxx:67
 AliCFManager.cxx:68
 AliCFManager.cxx:69
 AliCFManager.cxx:70
 AliCFManager.cxx:71
 AliCFManager.cxx:72
 AliCFManager.cxx:73
 AliCFManager.cxx:74
 AliCFManager.cxx:75
 AliCFManager.cxx:76
 AliCFManager.cxx:77
 AliCFManager.cxx:78
 AliCFManager.cxx:79
 AliCFManager.cxx:80
 AliCFManager.cxx:81
 AliCFManager.cxx:82
 AliCFManager.cxx:83
 AliCFManager.cxx:84
 AliCFManager.cxx:85
 AliCFManager.cxx:86
 AliCFManager.cxx:87
 AliCFManager.cxx:88
 AliCFManager.cxx:89
 AliCFManager.cxx:90
 AliCFManager.cxx:91
 AliCFManager.cxx:92
 AliCFManager.cxx:93
 AliCFManager.cxx:94
 AliCFManager.cxx:95
 AliCFManager.cxx:96
 AliCFManager.cxx:97
 AliCFManager.cxx:98
 AliCFManager.cxx:99
 AliCFManager.cxx:100
 AliCFManager.cxx:101
 AliCFManager.cxx:102
 AliCFManager.cxx:103
 AliCFManager.cxx:104
 AliCFManager.cxx:105
 AliCFManager.cxx:106
 AliCFManager.cxx:107
 AliCFManager.cxx:108
 AliCFManager.cxx:109
 AliCFManager.cxx:110
 AliCFManager.cxx:111
 AliCFManager.cxx:112
 AliCFManager.cxx:113
 AliCFManager.cxx:114
 AliCFManager.cxx:115
 AliCFManager.cxx:116
 AliCFManager.cxx:117
 AliCFManager.cxx:118
 AliCFManager.cxx:119
 AliCFManager.cxx:120
 AliCFManager.cxx:121
 AliCFManager.cxx:122
 AliCFManager.cxx:123
 AliCFManager.cxx:124
 AliCFManager.cxx:125
 AliCFManager.cxx:126
 AliCFManager.cxx:127
 AliCFManager.cxx:128
 AliCFManager.cxx:129
 AliCFManager.cxx:130
 AliCFManager.cxx:131
 AliCFManager.cxx:132
 AliCFManager.cxx:133
 AliCFManager.cxx:134
 AliCFManager.cxx:135
 AliCFManager.cxx:136
 AliCFManager.cxx:137
 AliCFManager.cxx:138
 AliCFManager.cxx:139
 AliCFManager.cxx:140
 AliCFManager.cxx:141
 AliCFManager.cxx:142
 AliCFManager.cxx:143
 AliCFManager.cxx:144
 AliCFManager.cxx:145
 AliCFManager.cxx:146
 AliCFManager.cxx:147
 AliCFManager.cxx:148
 AliCFManager.cxx:149
 AliCFManager.cxx:150
 AliCFManager.cxx:151
 AliCFManager.cxx:152
 AliCFManager.cxx:153
 AliCFManager.cxx:154
 AliCFManager.cxx:155
 AliCFManager.cxx:156
 AliCFManager.cxx:157
 AliCFManager.cxx:158
 AliCFManager.cxx:159
 AliCFManager.cxx:160
 AliCFManager.cxx:161
 AliCFManager.cxx:162
 AliCFManager.cxx:163
 AliCFManager.cxx:164
 AliCFManager.cxx:165
 AliCFManager.cxx:166
 AliCFManager.cxx:167
 AliCFManager.cxx:168
 AliCFManager.cxx:169
 AliCFManager.cxx:170
 AliCFManager.cxx:171
 AliCFManager.cxx:172
 AliCFManager.cxx:173
 AliCFManager.cxx:174
 AliCFManager.cxx:175
 AliCFManager.cxx:176
 AliCFManager.cxx:177
 AliCFManager.cxx:178
 AliCFManager.cxx:179
 AliCFManager.cxx:180
 AliCFManager.cxx:181
 AliCFManager.cxx:182
 AliCFManager.cxx:183
 AliCFManager.cxx:184
 AliCFManager.cxx:185
 AliCFManager.cxx:186
 AliCFManager.cxx:187
 AliCFManager.cxx:188
 AliCFManager.cxx:189
 AliCFManager.cxx:190
 AliCFManager.cxx:191
 AliCFManager.cxx:192
 AliCFManager.cxx:193
 AliCFManager.cxx:194
 AliCFManager.cxx:195
 AliCFManager.cxx:196
 AliCFManager.cxx:197
 AliCFManager.cxx:198
 AliCFManager.cxx:199
 AliCFManager.cxx:200
 AliCFManager.cxx:201
 AliCFManager.cxx:202
 AliCFManager.cxx:203
 AliCFManager.cxx:204
 AliCFManager.cxx:205
 AliCFManager.cxx:206
 AliCFManager.cxx:207
 AliCFManager.cxx:208
 AliCFManager.cxx:209
 AliCFManager.cxx:210
 AliCFManager.cxx:211
 AliCFManager.cxx:212
 AliCFManager.cxx:213
 AliCFManager.cxx:214
 AliCFManager.cxx:215
 AliCFManager.cxx:216
 AliCFManager.cxx:217
 AliCFManager.cxx:218
 AliCFManager.cxx:219
 AliCFManager.cxx:220
 AliCFManager.cxx:221
 AliCFManager.cxx:222
 AliCFManager.cxx:223
 AliCFManager.cxx:224
 AliCFManager.cxx:225
 AliCFManager.cxx:226
 AliCFManager.cxx:227
 AliCFManager.cxx:228
 AliCFManager.cxx:229
 AliCFManager.cxx:230
 AliCFManager.cxx:231
 AliCFManager.cxx:232
 AliCFManager.cxx:233
 AliCFManager.cxx:234
 AliCFManager.cxx:235
 AliCFManager.cxx:236
 AliCFManager.cxx:237
 AliCFManager.cxx:238
 AliCFManager.cxx:239
 AliCFManager.cxx:240
 AliCFManager.cxx:241
 AliCFManager.cxx:242
 AliCFManager.cxx:243
 AliCFManager.cxx:244
 AliCFManager.cxx:245
 AliCFManager.cxx:246
 AliCFManager.cxx:247
 AliCFManager.cxx:248
 AliCFManager.cxx:249
 AliCFManager.cxx:250
 AliCFManager.cxx:251
 AliCFManager.cxx:252
 AliCFManager.cxx:253
 AliCFManager.cxx:254
 AliCFManager.cxx:255
 AliCFManager.cxx:256
 AliCFManager.cxx:257
 AliCFManager.cxx:258
 AliCFManager.cxx:259
 AliCFManager.cxx:260
 AliCFManager.cxx:261
 AliCFManager.cxx:262
 AliCFManager.cxx:263
 AliCFManager.cxx:264
 AliCFManager.cxx:265
 AliCFManager.cxx:266
 AliCFManager.cxx:267
 AliCFManager.cxx:268
 AliCFManager.cxx:269
 AliCFManager.cxx:270