1 #ifndef ALIDIELECTRONCF_H
2 #define ALIDIELECTRONCF_H
3 /* Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
6 //#############################################################
8 //# Class AliDielectronCF #
9 //# Dielectron Correction Framework Manager #
12 //# Anton Andronic, GSI / A.Andronic@gsi.de #
13 //# Ionut C. Arsene, GSI / I.C.Arsene@gsi.de #
14 //# Julian Book, Uni Ffm / Julian.Book@cern.ch #
15 //# Frederick Kramer, Uni Ffm, / Frederick.Kramer@cern.ch #
16 //# Magnus Mager, CERN / Magnus.Mager@cern.ch #
17 //# WooJin J. Park, GSI / W.J.Park@gsi.de #
18 //# Jens Wiechula, Uni HD / Jens.Wiechula@cern.ch #
20 //#############################################################
25 #include <TVectorDfwd.h>
26 #include "AliDielectronVarManager.h"
28 class AliAnalysisCuts;
29 class AliAnalysisFilter;
31 class AliDielectronPair;
34 class AliDielectronCF : public TNamed {
36 enum {kNmaxAddSteps=50};
39 AliDielectronCF(const char* name, const char* title);
40 virtual ~AliDielectronCF();
42 void SetStepForMCtruth(Bool_t steps=kTRUE) { fStepForMCtruth=steps; }
43 Bool_t GetStepForMCtruth() const { return fStepForMCtruth; }
44 void SetStepForNoCutsMCmotherPid(Bool_t steps=kTRUE) { fStepForNoCutsMCmotherPid=steps; }
45 void SetStepForAfterAllCuts(Bool_t steps=kTRUE) { fStepForAfterAllCuts=steps; }
46 void SetStepForPreFilter(Bool_t steps=kTRUE) { fStepForPreFilter=steps; }
47 void SetStepsForEachCut(Bool_t steps=kTRUE) { fStepsForEachCut=steps; }
48 void SetStepsForCutsIncreasing(Bool_t steps=kTRUE) { fStepsForCutsIncreasing=steps; }
49 void SetStepsForSignal(Bool_t steps=kTRUE) { fStepsForSignal=steps; }
50 void SetStepsForBackground(Bool_t steps=kTRUE) { fStepsForBackground=steps; }
51 void SetStepsForMCtruthOnly(Bool_t steps=kTRUE) { fStepsForMCtruthOnly=steps; }
53 void SetPdgMother(Int_t pdg) { fPdgMother=pdg; }
54 void SetSignalsMC(TObjArray* array) {fSignalsMC = array;}
56 void AddStepMask(UInt_t mask) { fStepMasks[fNStepMasks++]=mask; }
58 void AddVariable(AliDielectronVarManager::ValueTypes type, Int_t nbins,
59 Double_t min, Double_t max, Bool_t leg=kFALSE, Bool_t log=kFALSE);
60 void AddVariable(AliDielectronVarManager::ValueTypes type, const char* binLimitStr, Bool_t leg=kFALSE);
61 void AddVariable(AliDielectronVarManager::ValueTypes type, TVectorD *binLimits, Bool_t leg=kFALSE);
63 void InitialiseContainer(const AliAnalysisFilter& filter);
65 Int_t GetNvarsPair() const {return fNVars;}
66 Int_t GetNvarsLeg() const {return fNVarsLeg;}
68 UInt_t GetVariablePair(UInt_t var) const {return (var>(UInt_t)AliDielectronVarManager::kNMaxValues)? (UInt_t)AliDielectronVarManager::kNMaxValues+1:fVariables[var];}
69 UInt_t GetVariableLeg(UInt_t var) const {return (var>(UInt_t)AliDielectronVarManager::kNMaxValues)? (UInt_t)AliDielectronVarManager::kNMaxValues+1:fVariablesLeg[var];}
71 // void Fill(UInt_t mask, const TObject *particle);
72 void Fill(UInt_t mask, const AliDielectronPair *particle);
73 void FillMC(const TObject *particle);
74 void FillMC(Int_t label1, Int_t label2, Int_t nSignal);
76 AliCFContainer* GetContainer() const { return fCfContainer; }
79 UInt_t fVariables[AliDielectronVarManager::kNMaxValues]; //configured variables
80 UInt_t fVariablesLeg[AliDielectronVarManager::kNMaxValues]; //configured variables for the legs
82 Int_t fNSteps; // number of selection steps
84 Int_t fNVars; // number of variables
85 TObjArray *fVarBinLimits; // array of bin limits
87 Int_t fNVarsLeg; // number of variables for the legs
88 TObjArray *fVarBinLimitsLeg; // array of bin limits of the legs
90 Int_t fNCuts; // Number of cuts in the filter concerned
92 Double_t *fValues; //! Value array for filling the container
94 Bool_t fStepForMCtruth; //create a step for the MC truth
95 Bool_t fStepForNoCutsMCmotherPid; //create a step for before cuts, but with MC truth of the mother
96 Bool_t fStepForAfterAllCuts; //create a step for before cuts, but with MC truth of the mother
97 Bool_t fStepForPreFilter; //create a step after PreFilter application
98 Bool_t fStepsForEachCut; //create steps for each cut?
99 Bool_t fStepsForCutsIncreasing; //create steps for increasing cut combinatons?
100 //e.g. cut1&cut2, cut1&cut2&cut3 ...
101 Bool_t fStepsForSignal; //steps for pure signal
102 Bool_t fStepsForBackground; //steps for pure background
103 Bool_t fStepsForMCtruthOnly; //Switch off all pair steps, allow only MC truth Class
105 UInt_t fStepMasks[kNmaxAddSteps]; //steps for additional cut combinatons
106 UInt_t fNStepMasks; //number of configured step masks
108 Int_t fPdgMother; //Pdg code of MCtruth validation
109 TObjArray* fSignalsMC; //! array of MC signals to be studied
110 AliCFContainer* fCfContainer; //the CF container
112 Bool_t fHasMC; //if MC info is available
113 Int_t fNAddSteps; //number of additional MC related steps per cut step
115 TVectorD* MakeLogBinning(Int_t nbinsX, Double_t xmin, Double_t xmax) const;
116 TVectorD* MakeLinBinning(Int_t nbinsX, Double_t xmin, Double_t xmax) const;
118 AliDielectronCF(const AliDielectronCF &c);
119 AliDielectronCF &operator=(const AliDielectronCF &c);
121 ClassDef(AliDielectronCF,4) //Dielectron Correction Framework handler