ROOT logo
#ifndef ALICFMANAGER_H
#define ALICFMANAGER_H
/**************************************************************************
 * 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.                  *
 **************************************************************************/
// Prototype class helping the user to handle event & particle-level 
// selections/correction containers inside the Analysis job
// Author:S.Arcelli. Silvia.Arcelli@cern.ch 

//
// updated by renaud.vernet@cern.ch (2008/10/08) :
// removed predefined maximum number of steps
// now the number of steps are fixed by the particle/event containers themselves.
//

#include "TNamed.h"
#include "AliCFContainer.h"
#include "AliLog.h"

//____________________________________________________________________________
class AliCFManager : public TNamed 
{
 public :
  AliCFManager() ;
  AliCFManager(Char_t* name, Char_t* title) ;
  AliCFManager(const AliCFManager& c) ;
  AliCFManager& operator=(const AliCFManager& c) ;
  virtual ~AliCFManager();

  //
  //Currently foreseen selection steps for event-level cuts:
  //generator, trigger, reconstruction
  //
  enum{
    kEvtGenCuts=0,
    kEvtTrigCuts,
    kEvtRecCuts
  };

  //
  //Currently foreseen selection steps for particle-level cuts:
  //generator, acceptance, reconstruction, user selection
  //
  enum{
    kPartGenCuts=0,
    kPartAccCuts,
    kPartRecCuts,
    kPartSelCuts
  };

  //
  // Setters:
  //

  //pass the pointer to the correction container
  virtual void SetEventContainer(AliCFContainer* c) {
    fEvtContainer=c; 
    SetNStepEvent(c->GetNStep());
    AliWarning(Form("Please dont forget to set the cut list (event empty) for the %d event-selection step requested",fNStepEvt));
  }
  
  //pass the pointer to the correction container
  virtual void SetParticleContainer(AliCFContainer* c) {
    fPartContainer=c; 
    SetNStepParticle(c->GetNStep());
    AliWarning(Form("Please dont forget to set the cut list (even empty) for the %d particle-selection step requested",fNStepPart));
  }
  
  //Set the number of steps (already done if you have defined your containers)
  virtual void SetNStepEvent   (Int_t nstep) {fNStepEvt  = nstep;}
  virtual void SetNStepParticle(Int_t nstep) {fNStepPart = nstep;}

  //Setter for event-level selection cut list at selection step isel
  virtual void SetEventCutsList(Int_t isel, TObjArray* array) ;
  
  //Setter for particle-level selection cut list at selection step isel
  virtual void SetParticleCutsList(Int_t isel, TObjArray* array) ;

  //
  //Getters
  //
  // pointer to the Event-level correction container
  virtual AliCFContainer* GetEventContainer() const {return fEvtContainer;} ; 

  // pointer to the Particle-level correction container
  virtual AliCFContainer* GetParticleContainer() const {return fPartContainer;} ; 

  //pointer to the event-level cut list for event selection step isel
  virtual TObjArray* GetEventCutsList(Int_t isel) const {return fEvtCutList[isel];};

//pointer to the particle-level cut list for particle selection step isel
  virtual TObjArray* GetParticleCutsList(Int_t isel) const {return fPartCutList[isel];};
  

  //Pass the pointer to obj to the selections (used to access MC/rec global
  //event info when requested
  virtual void  SetMCEventInfo(const TObject *obj) const;
  virtual void SetRecEventInfo(const TObject *obj) const;
  virtual void SetEventInfo(TObject*) const {AliError("DEPRECATED !! -> use SetMCEventInfo or SetRecEventInfo instead");}

  //Cut Checkers: by default *all* the cuts of a given input list is checked 
  //(.and. of all cuts), but the user can select a subsample of cuts in the 
  //list via the string argument selcuts
 
  virtual Bool_t CheckEventCuts(Int_t isel, TObject *obj, const TString &selcuts="all") const;
  virtual Bool_t CheckParticleCuts(Int_t isel, TObject *obj, const TString &selcuts="all") const;

 private:
  
  //number of steps
  Int_t fNStepEvt;  // number of steps in event selection
  Int_t fNStepPart; // number of steps in particle selection
  //the correction grid
  AliCFContainer *fEvtContainer; //ptr to Evt-Level correction container
  //the correction grid
  AliCFContainer *fPartContainer; //ptr to Particle-level correction container
  //Evt-Level Selections
  TObjArray **fEvtCutList;   //[fNStepEvt] arrays of cuts for each event-selection level
  //Particle-level selections
  TObjArray **fPartCutList ; //[fNStepPart] arrays of cuts for each particle-selection level

  Bool_t CompareStrings(const TString  &cutname,const TString  &selcuts) const;

  ClassDef(AliCFManager,2);
};


#endif
 AliCFManager.h:1
 AliCFManager.h:2
 AliCFManager.h:3
 AliCFManager.h:4
 AliCFManager.h:5
 AliCFManager.h:6
 AliCFManager.h:7
 AliCFManager.h:8
 AliCFManager.h:9
 AliCFManager.h:10
 AliCFManager.h:11
 AliCFManager.h:12
 AliCFManager.h:13
 AliCFManager.h:14
 AliCFManager.h:15
 AliCFManager.h:16
 AliCFManager.h:17
 AliCFManager.h:18
 AliCFManager.h:19
 AliCFManager.h:20
 AliCFManager.h:21
 AliCFManager.h:22
 AliCFManager.h:23
 AliCFManager.h:24
 AliCFManager.h:25
 AliCFManager.h:26
 AliCFManager.h:27
 AliCFManager.h:28
 AliCFManager.h:29
 AliCFManager.h:30
 AliCFManager.h:31
 AliCFManager.h:32
 AliCFManager.h:33
 AliCFManager.h:34
 AliCFManager.h:35
 AliCFManager.h:36
 AliCFManager.h:37
 AliCFManager.h:38
 AliCFManager.h:39
 AliCFManager.h:40
 AliCFManager.h:41
 AliCFManager.h:42
 AliCFManager.h:43
 AliCFManager.h:44
 AliCFManager.h:45
 AliCFManager.h:46
 AliCFManager.h:47
 AliCFManager.h:48
 AliCFManager.h:49
 AliCFManager.h:50
 AliCFManager.h:51
 AliCFManager.h:52
 AliCFManager.h:53
 AliCFManager.h:54
 AliCFManager.h:55
 AliCFManager.h:56
 AliCFManager.h:57
 AliCFManager.h:58
 AliCFManager.h:59
 AliCFManager.h:60
 AliCFManager.h:61
 AliCFManager.h:62
 AliCFManager.h:63
 AliCFManager.h:64
 AliCFManager.h:65
 AliCFManager.h:66
 AliCFManager.h:67
 AliCFManager.h:68
 AliCFManager.h:69
 AliCFManager.h:70
 AliCFManager.h:71
 AliCFManager.h:72
 AliCFManager.h:73
 AliCFManager.h:74
 AliCFManager.h:75
 AliCFManager.h:76
 AliCFManager.h:77
 AliCFManager.h:78
 AliCFManager.h:79
 AliCFManager.h:80
 AliCFManager.h:81
 AliCFManager.h:82
 AliCFManager.h:83
 AliCFManager.h:84
 AliCFManager.h:85
 AliCFManager.h:86
 AliCFManager.h:87
 AliCFManager.h:88
 AliCFManager.h:89
 AliCFManager.h:90
 AliCFManager.h:91
 AliCFManager.h:92
 AliCFManager.h:93
 AliCFManager.h:94
 AliCFManager.h:95
 AliCFManager.h:96
 AliCFManager.h:97
 AliCFManager.h:98
 AliCFManager.h:99
 AliCFManager.h:100
 AliCFManager.h:101
 AliCFManager.h:102
 AliCFManager.h:103
 AliCFManager.h:104
 AliCFManager.h:105
 AliCFManager.h:106
 AliCFManager.h:107
 AliCFManager.h:108
 AliCFManager.h:109
 AliCFManager.h:110
 AliCFManager.h:111
 AliCFManager.h:112
 AliCFManager.h:113
 AliCFManager.h:114
 AliCFManager.h:115
 AliCFManager.h:116
 AliCFManager.h:117
 AliCFManager.h:118
 AliCFManager.h:119
 AliCFManager.h:120
 AliCFManager.h:121
 AliCFManager.h:122
 AliCFManager.h:123
 AliCFManager.h:124
 AliCFManager.h:125
 AliCFManager.h:126
 AliCFManager.h:127
 AliCFManager.h:128
 AliCFManager.h:129
 AliCFManager.h:130
 AliCFManager.h:131
 AliCFManager.h:132
 AliCFManager.h:133
 AliCFManager.h:134
 AliCFManager.h:135
 AliCFManager.h:136
 AliCFManager.h:137
 AliCFManager.h:138
 AliCFManager.h:139