]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGGA/EMCALTasks/AliAnalysisTaskEMCALTriggerQA.h
add switches to reduce number of histograms, specially for simulations; add switch...
[u/mrichter/AliRoot.git] / PWGGA / EMCALTasks / AliAnalysisTaskEMCALTriggerQA.h
1 #ifndef ALIANALYSISTASKEMCALTRIGGERQA_H
2 #define ALIANALYSISTASKEMCALTRIGGERQA_H
3
4 //------------------------------------------------------------------------//
5 //  Fill histograms with basic QA information for EMCAL offline trigger   //
6 //  Author: Nicolas Arbor (LPSC-Grenoble), Rachid Guernane (LPSC-Grenoble)//
7 //          Gustavo Conesa Balbastre  (LPSC-Grenoble)                     //
8 //                                                                        //
9 //  $Id$ //
10 //------------------------------------------------------------------------//
11
12 //--- Root ---
13 class TList;
14 class TH1F;
15 class TH2I;
16 class TH2F;
17 class AliEMCALGeometry;
18 class TProfile2D;
19
20 //--- AliRoot ---
21 class AliEMCALRecoUtils;
22 #include "AliEMCALGeoParams.h"
23 #include "AliAnalysisTaskSE.h"
24
25 class AliAnalysisTaskEMCALTriggerQA : public AliAnalysisTaskSE 
26 {
27 public:
28   AliAnalysisTaskEMCALTriggerQA();                   // default constructor
29   
30   AliAnalysisTaskEMCALTriggerQA(const char *name);   // named constructor
31   
32   virtual ~AliAnalysisTaskEMCALTriggerQA() { ; }     // destructor
33   
34   void   ClusterAnalysis();
35   
36   void   FillCellMaps();
37   
38   void   FillTriggerPatchMaps(TString triggerclasses);
39   
40   void   FillClusterHistograms(Int_t triggerNumber, Bool_t maxCluster,
41                                Float_t e,Float_t eta,Float_t phi,
42                                Float_t ietamax,Float_t iphimax,
43                                Float_t centrality, Float_t v0AC);
44   
45   void   FillCorrelationHistograms();
46   
47   void   FillEventCounterHistogram();
48   
49   void   FillL1GammaPatchHistograms();
50   
51   void   FillL1JetPatchHistograms();
52   
53   void   FillMapHistograms();
54   
55   void   FillV0Histograms();
56   
57   void   Init() ;
58
59   void   InitHistogramArrays() ;
60
61   void   InitCellPatchMaps();
62   
63   void   LocalInit()                     { Init()                       ; }
64
65   void   UserCreateOutputObjects();    
66   
67   void   UserExec(Option_t *option);   
68   
69   AliEMCALRecoUtils* GetRecoUtils()      { if(!fRecoUtils) fRecoUtils = new AliEMCALRecoUtils ;
70                                            return fRecoUtils            ; }
71   
72   void   SetEtaPhiEnMin(Float_t en)      { fEtaPhiEnMin       = en      ; }
73
74   void   SetTriggerEventBit(TString list) ;
75   
76   // OADB and geometry settings
77   
78   void   InitGeometry();
79   
80   void   SetGeometryName(TString name)   { fGeoName           = name    ; }   
81   
82   void   AccessOADB() ;
83   
84   void   SwitchOnEMCALOADB()             { fAccessOADB        = kTRUE   ; }
85   void   SwitchOffEMCALOADB()            { fAccessOADB        = kFALSE  ; }
86
87   void   SwitchOnMCData()                { fMCData            = kTRUE   ; }
88   void   SwitchOffMCData()               { fMCData            = kFALSE  ; }
89
90   void   SwitchOnV0SignalHistograms()    { fFillV0SigHisto    = kTRUE   ; }
91   void   SwitchOffV0SignalHistograms()   { fFillV0SigHisto    = kFALSE  ; }
92   
93   void   SwitchOnClusterAcceptanceHistograms()  { fFillClusAcceptHisto = kTRUE   ; }
94   void   SwitchOffClusterAcceptanceHistograms() { fFillClusAcceptHisto = kFALSE  ; }
95   
96   void   SetOADBFilePath(TString path)   { fOADBFilePath      = path    ; }
97   
98   //Histogram setters
99
100   void   SetTRUTotalSignalHistogramsRange(Int_t nbins,  Float_t max) { fNBinsTRUSignal   = nbins; fMaxTRUSignal   = max ; }
101   void   SetSTUTotalSignalHistogramsRange(Int_t nbins,  Float_t max) { fNBinsSTUSignal   = nbins; fMaxSTUSignal   = max ; }
102   void   SetV0TotalSignalHistogramsRange (Int_t nbins,  Float_t max) { fNBinsV0Signal    = nbins; fMaxV0Signal    = max ; }
103   void   SetSTUFEERatioHistogramsRange   (Int_t nbins,  Float_t max) { fNBinsSTUFEERatio = nbins; fMaxSTUFEERatio = max ; }
104   void   SetSTUTRURatioHistogramsRange   (Int_t nbins,  Float_t max) { fNBinsSTUTRURatio = nbins; fMaxSTUFEERatio = max ; }
105   void   SetClusterEHistogramsRange      (Int_t nbins,  Float_t max) { fNBinsClusterE    = nbins; fMaxClusterE    = max ; }
106     
107 private:
108   TList            *fOutputList;      //! Output list
109   
110   AliEMCALRecoUtils *fRecoUtils;      //  RecoUtils
111
112   Bool_t            fGeoSet  ;        //  Geometry already set
113   AliEMCALGeometry *fGeometry;        //  Access to EMCAL geometry utils
114   TString           fGeoName;         //  Name of geometry used
115   
116   Bool_t            fOADBSet ;        //  AODB parameters already set
117   Bool_t            fAccessOADB ;     //  Get calibration from OADB for EMCAL
118   TString           fOADBFilePath ;   //  Default path $ALICE_ROOT/OADB/EMCAL, if needed change
119   
120   Int_t             fBitEGA;          //  fBitEGA
121   Int_t             fBitEJE;          //  fBitEJE
122   
123   Float_t           fEtaPhiEnMin;     //  Min energy for Eta/Phi histograms   
124   
125   Int_t             fSTUTotal;        // Sum of STU time sums
126   Float_t           fTRUTotal;        // Sum of TRU amplitudes
127   Float_t           fV0Trigger;       // V0 signal from trigger
128   Float_t           fV0A;             // V0 A signal
129   Float_t           fV0C;             // V0 C signal
130   
131   Bool_t            fFillV0SigHisto;  // V0 signal creation and fill
132   Bool_t            fFillClusAcceptHisto; // Fill eta/phi distributions
133   Bool_t            fMCData;          //  Simulation On/Off
134
135   // Event by event trigger recognition bit
136   Bool_t            fEventMB   ;      // Bit for MB events
137   Bool_t            fEventL0   ;      // Bit for L0 events
138   Bool_t            fEventL1G  ;      // Bit for L1 Gamma 1 events
139   Bool_t            fEventL1G2 ;      // Bit for L1 Gamma 2 events
140   Bool_t            fEventL1J  ;      // Bit for L1 Jet 1 events
141   Bool_t            fEventL1J2 ;      // Bit for L1 JEt 2 events
142   Bool_t            fEventCen  ;      // Bit for Central events
143   Bool_t            fEventSem  ;      // Bit for Semi Central events
144   
145   // Histograms
146   
147   TH1F             *fhNEvents;        //! Number of selected events
148   TH2F             *fhFORAmp;         //! FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column
149   TH2F             *fhFORAmpL1G;      //! FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column, with L1 Gamma trigger event
150   TH2F             *fhFORAmpL1G2;     //! FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column, with L1 Gamma2 trigger event
151   TH2F             *fhFORAmpL1J;      //! FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column, with L1 Jet trigger event
152   TH2F             *fhFORAmpL1J2;     //! FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column, with L1 Jet2 trigger event
153   TH2F             *fhL0Amp;          //! FALTRO signal per Row and Column for FOR involves L0 patch
154   TH2F             *fhL0AmpL1G;       //! FALTRO signal per Row and Column for FOR involves L0 patch, with L1G trigger event
155   TH2F             *fhL0AmpL1J;       //! FALTRO signal per Row and Column for FOR involves L0 patch, with L1J trigger event
156   TH2F             *fhL1Amp;          //! STU signal per Row and Column for FOR involves L0 patch
157   TH2F             *fhL1GAmp;         //! STU signal per Row and Column for FOR position of L1 Gamma patch (top-left)
158   TH2F             *fhL1G2Amp;        //! STU signal per Row and Column for FOR position of L1 Gamma2 patch (top-left)
159   TH2F             *fhL1JAmp;         //! STU signal per Row and Column for FOR position of L1 Jet patch (top-left)
160   TH2F             *fhL1J2Amp;        //! STU signal per Row and Column for FOR position of L1 Jet2 patch (top-left)
161   TH2F             *fhL1FOREnergy;    //! STU signal per Row and Column for FOR position vs FOR energy
162   
163   TH2F             *fhL0Patch;                //! FOR with L0 patch associated
164   TH2F             *fhL1GPatch;               //! FOR with L1 Gamma patch associated
165   TH2F             *fhL1G2Patch;              //! FOR with L1 Gamma patch associated
166   TH2F             *fhL1GPatchNotFake;        //! FOR with L1 Gamma patch associated but no energy in the related cells
167   TH2F             *fhL1GPatchFake;           //! FOR with L1 Gamma patch associated
168   TH2F             *fhL1GPatchNotAllFake;     //! FOR with at least 1 L1 Gamma patch associated that has energy in the related celles : not a fake event
169   TH2F             *fhL1GPatchAllFake;        //! FOR without any L1 Gamma patch associated with energy in the related cells: fake patch
170   TH2F             *fhL1GPatchNotAllFakeMax;  //! FOR with at least one L1 Gamma patch associated with energy in the related cell, maximal energy patch : not fake events
171   TH2F             *fhL1GPatchAllFakeMax;     //! FOR without any L1 Gamma patch associated with energy in the related cell, maximal energy patch : fake events
172   TH1F             *fhL1GPatchNotAllFakeMaxE; //! Energy distrib of FOR for non fake events, patch of maximal energy
173   TH1F             *fhL1GPatchAllFakeMaxE;    //! Energy distrib FOR for fake events, patch of maximal energy
174   TH1F             *fhL1GPatchNotAllFakeE;        //! Energy distrib of FOR for non fake events, all patch energy
175   TH1F             *fhL1GPatchAllFakeE;       //! Energy distrib of FOR forfake events, all patch energy
176   TH1F             *fhL1GPatchFakeE;          //! Energy distrib of FOR for fake events, all patch energy
177   TH1F             *fhL1GPatchNotFakeE;       //! Energy distrib of FOR for non fake events, all patch energy
178   TH2F             *fhNPatchFake;             //! number of fake patchs per event vs. if all were fakes or not
179   TH2F             *fhNPatchNotFake;          //! number of non fake patchs per events vs. if all were fakes or not
180   
181   TH2F             *fhL1JPatch;       //! FOR with L1 Jet patch associated
182   TH2F             *fhL1J2Patch;      //! FOR with L1 Jet patch associated
183   TH2F             *fhFEESTU;         //! Correlation FEE vs STU
184   TH2F             *fhTRUSTU;         //! Correlation TRU vs STU
185   TH2I             *fhV0STU;          //! Total signal STU vs V0C+V0S
186   
187   TH2F             *fhGPMaxVV0TT;     //! V0 signal vs maximum gamma L1 patch
188   TH2F             *fhJPMaxVV0TT;     //! V0 signal vs maximum jet L1 patch
189   TProfile2D       *fhFORMeanAmp;     //! Mean FastOR(FEE) signal per Row and Column
190   TProfile2D       *fhL0MeanAmp;      //! Mean FastOR(TRU) signal per Row and Column
191   TProfile2D       *fhL1MeanAmp;      //! Mean FastOR(STU) signal per Row and Column
192   TH2F             *fhL1GPatchMax;    //! FOR of max. amplitude patch with L1 Gamma patch associated
193   TH2F             *fhL1G2PatchMax;   //! FOR of max. amplitude patch with L1 Gamma patch associated
194   TH2F             *fhL1JPatchMax;    //! FOR of max. amplitude patch with L1 Jet patch associated  
195   TH2F             *fhL1J2PatchMax;   //! FOR of max. amplitude patch with L1 Jet patch associated
196   
197   // Cluster vs trigger histograms
198   enum triggerType{ kMBTrig                = 0,  kL0Trig            = 1,
199                     kL1GammaTrig           = 2,  kL1GammaTrig2      = 3,
200                     kL1JetTrig             = 4,  kL1JetTrig2        = 5,
201                     kL1GammaOnlyTrig       = 6,  kL1JetOnlyTrig     = 7,
202                     kL1Gamma2OnlyGammaTrig = 8,  kL1Jet2OnlyJetTrig = 9,
203                     kCentralTrig           = 10, kSemiCentralTrig   = 11 };
204   
205   TH1F             *fhClusMBPure[3];       //! Clusters E distribution for pure MB trigger
206   TH1F             *fhClusMaxMBPure[3];    //! Maximum E Cluster per event distribution for pure MB trigger
207   
208   static const int  fgkTriggerCombi = 12;   // total number of trigger combinations defined above
209   
210   TH1F             *fhClus   [fgkTriggerCombi];                     //! Clusters E distribution for a trigger
211   TH1F             *fhClusMax[fgkTriggerCombi];                     //! Maximum E Cluster per event distribution for MB trigger
212
213   TH2F             *fhClusCen   [fgkTriggerCombi];                  //! Clusters Centrality vs E distribution for a trigger
214   TH2F             *fhClusCenMax[fgkTriggerCombi];                  //! Maximum E Cluster  vs Centrality per event distribution for a trigger
215   
216   TH2F             *fhClusV0   [fgkTriggerCombi];                   //! Clusters V0 vs E distribution for a trigger
217   TH2F             *fhClusV0Max[fgkTriggerCombi];                   //! Maximum E Cluster  vs Centrality per event distribution for a trigger
218
219   TH2F             *fhClusEta   [fgkTriggerCombi];                  //! Clusters eta vs E distribution for a trigger
220   TH2F             *fhClusEtaMax[fgkTriggerCombi];                  //! Maximum E Cluster  vs Eta per event distribution for a trigger
221
222   TH2F             *fhClusPhi   [fgkTriggerCombi];                   //! Clusters Phi vs E distribution for a trigger
223   TH2F             *fhClusPhiMax[fgkTriggerCombi];                   //! Maximum E Cluster  vs Phi per event distribution for a trigger
224
225   TH2F             *fhClusEtaPhiHigh      [fgkTriggerCombi];         //! Clusters eta vs phi distribution for a trigger, energy above fEtaPhiEnMin GeV
226   TH2F             *fhClusEtaPhiHighCluMax[fgkTriggerCombi];         //! Maximum E Cluster, Phi vs Eta per event distribution for a trigger, energy above fEtaPhiEnMin GeV
227  
228   TH2F             *fhClusEtaPhiHighCellMax      [fgkTriggerCombi];  //! Clusters maximum energy cell index eta vs phi distribution for a trigger, energy above fEtaPhiEnMin GeV
229   TH2F             *fhClusEtaPhiHighCellMaxCluMax[fgkTriggerCombi];  //! Maximum E Cluster, maximum energy cell index Phi vs Eta per event distribution for MB trigger, energy above fEtaPhiEnMin GeV
230  
231   TH2F             *fhClusEtaPhiLow      [fgkTriggerCombi];          //! Clusters eta vs phi distribution for a trigger, energy below fEtaPhiEnMin GeV
232   TH2F             *fhClusEtaPhiLowCluMax[fgkTriggerCombi];          //! Maximum E Cluster, Phi vs Eta per event distribution for MB trigger, energy below fEtaPhiEnMin GeV
233  
234   TH2F             *fhClusEtaPhiLowCellMax      [fgkTriggerCombi];   //! Clusters maximum energy cell index eta vs phi distribution for a trigger, energy below fEtaPhiEnMin GeV
235   TH2F             *fhClusEtaPhiLowCellMaxCluMax[fgkTriggerCombi];   //! Maximum E Cluster, maximum energy cell index Phi vs Eta per event distribution for MB trigger, energy below fEtaPhiEnMin GeV
236
237   TH1F             *fhV0[fgkTriggerCombi];//! V0 distribution for a triggered event
238
239   // Histograms bins
240   
241   Int_t             fNBinsSTUSignal   ;     // Number of bins for STU total signal histograms
242   Float_t           fMaxSTUSignal     ;     // Maximum value for TRU total signal histograms
243   Int_t             fNBinsTRUSignal   ;     // Number of bins for TRU total signal histograms
244   Float_t           fMaxTRUSignal     ;     // Maximum value for TRU total signal histograms
245   Int_t             fNBinsV0Signal    ;     // Number of bins for V0 total signal histograms
246   Float_t           fMaxV0Signal      ;     // Maximum value for V0 total signal histograms
247   Int_t             fNBinsSTUFEERatio ;     // Number of bins for STU/FEE ratios histograms
248   Float_t           fMaxSTUFEERatio   ;     // Maximum value for STU/FEE ratios histograms
249   Int_t             fNBinsSTUTRURatio ;     // Number of bins for STU/TRU ratios histograms
250   Float_t           fMaxSTUTRURatio   ;     // Maximum value for STU/TRU ratios histograms
251   Int_t             fNBinsClusterE    ;     // Number of bins for E cluster histograms
252   Float_t           fMaxClusterE      ;     // Maximum value for E cluster histograms
253
254   //Constants needed by the class: EMCAL 
255   static const int  fgkFALTRORows = AliEMCALGeoParams::fgkEMCALRows*(AliEMCALGeoParams::fgkEMCALModules-7)/2;   // total number 
256   // of fake altro rows    in EMCAL
257   // (ALTRO channels in one SM times 5 SM divided by 2 per FALTRO)
258   
259   static const int  fgkFALTROCols = AliEMCALGeoParams::fgkEMCALCols; // total number of fake altro columns in EMCAL 
260   // (ALTRO channels in one SM times 2 SM divided by 2 per FALTRO)
261   
262   // cell, patch maps
263   Double_t fMapCell     [fgkFALTRORows][fgkFALTROCols]; // Cell map
264   Double_t fMapCellL1G  [fgkFALTRORows][fgkFALTROCols]; // Cell map for L1G
265   Double_t fMapCellL1G2 [fgkFALTRORows][fgkFALTROCols]; // Cell map for L1G2
266   Double_t fMapCellL1J  [fgkFALTRORows][fgkFALTROCols]; // Cell map for L1J
267   Double_t fMapCellL1J2 [fgkFALTRORows][fgkFALTROCols]; // Cell map for L1J2
268   Double_t fMapTrigL0   [fgkFALTRORows][fgkFALTROCols]; // Patch map for L0
269   Double_t fMapTrigL1   [fgkFALTRORows][fgkFALTROCols]; // Patch map for L1
270   Double_t fMapTrigL0L1G[fgkFALTRORows][fgkFALTROCols]; // Patch map for L0L1G
271   Double_t fMapTrigL0L1J[fgkFALTRORows][fgkFALTROCols]; // Patch map for L0L1J
272   Double_t fMapTrigL1G  [fgkFALTRORows][fgkFALTROCols]; // Patch map for L1G
273   Double_t fMapTrigL1G2 [fgkFALTRORows][fgkFALTROCols]; // Patch map for L1G2
274   Double_t fMapTrigL1J  [fgkFALTRORows][fgkFALTROCols]; // Patch map for L1J
275   Double_t fMapTrigL1J2 [fgkFALTRORows][fgkFALTROCols]; // Patch map for L1J2
276
277   
278   AliAnalysisTaskEMCALTriggerQA           (const AliAnalysisTaskEMCALTriggerQA&); // not implemented
279   
280   AliAnalysisTaskEMCALTriggerQA& operator=(const AliAnalysisTaskEMCALTriggerQA&); // not implemented
281   
282   ClassDef(AliAnalysisTaskEMCALTriggerQA, 13);
283 };
284
285 #endif