]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGGA/EMCALTasks/AliAnalysisTaskEMCALTriggerQA.h
Merge branch 'TPCdev' of https://git.cern.ch/reps/AliRoot into TPCdev
[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   void   SetEventTriggerL1Bit(Int_t ega, Int_t eje)
82                                          { fBitEGA   = ega ; fBitEJE = eje; }
83
84   void   AccessOADB() ;
85   
86   void   SwitchOnEMCALOADB()             { fAccessOADB        = kTRUE   ; }
87   void   SwitchOffEMCALOADB()            { fAccessOADB        = kFALSE  ; }
88
89   void   SwitchOnMCData()                { fMCData            = kTRUE   ; }
90   void   SwitchOffMCData()               { fMCData            = kFALSE  ; }
91
92   void   SwitchOnV0SignalHistograms()    { fFillV0SigHisto    = kTRUE   ; }
93   void   SwitchOffV0SignalHistograms()   { fFillV0SigHisto    = kFALSE  ; }
94   
95   void   SwitchOnClusterAcceptanceHistograms()  { fFillClusAcceptHisto = kTRUE   ; }
96   void   SwitchOffClusterAcceptanceHistograms() { fFillClusAcceptHisto = kFALSE  ; }
97   
98   void   SetOADBFilePath(TString path)   { fOADBFilePath      = path    ; }
99   
100   //Histogram setters
101
102   void   SetTRUTotalSignalHistogramsRange(Int_t nbins,  Float_t max) { fNBinsTRUSignal   = nbins; fMaxTRUSignal   = max ; }
103   void   SetSTUTotalSignalHistogramsRange(Int_t nbins,  Float_t max) { fNBinsSTUSignal   = nbins; fMaxSTUSignal   = max ; }
104   void   SetV0TotalSignalHistogramsRange (Int_t nbins,  Float_t max) { fNBinsV0Signal    = nbins; fMaxV0Signal    = max ; }
105   void   SetSTUFEERatioHistogramsRange   (Int_t nbins,  Float_t max) { fNBinsSTUFEERatio = nbins; fMaxSTUFEERatio = max ; }
106   void   SetSTUTRURatioHistogramsRange   (Int_t nbins,  Float_t max) { fNBinsSTUTRURatio = nbins; fMaxSTUFEERatio = max ; }
107   void   SetClusterEHistogramsRange      (Int_t nbins,  Float_t max) { fNBinsClusterE    = nbins; fMaxClusterE    = max ; }
108     
109 private:
110   TList            *fOutputList;      //! Output list
111   
112   AliEMCALRecoUtils *fRecoUtils;      //  RecoUtils
113
114   Bool_t            fGeoSet  ;        //  Geometry already set
115   AliEMCALGeometry *fGeometry;        //  Access to EMCAL geometry utils
116   TString           fGeoName;         //  Name of geometry used
117   
118   Bool_t            fOADBSet ;        //  AODB parameters already set
119   Bool_t            fAccessOADB ;     //  Get calibration from OADB for EMCAL
120   TString           fOADBFilePath ;   //  Default path $ALICE_ROOT/OADB/EMCAL, if needed change
121   
122   Int_t             fBitEGA;          //  fBitEGA
123   Int_t             fBitEJE;          //  fBitEJE
124   
125   Float_t           fEtaPhiEnMin;     //  Min energy for Eta/Phi histograms   
126   
127   Int_t             fSTUTotal;        // Sum of STU time sums
128   Float_t           fTRUTotal;        // Sum of TRU amplitudes
129   Float_t           fV0Trigger;       // V0 signal from trigger
130   Float_t           fV0A;             // V0 A signal
131   Float_t           fV0C;             // V0 C signal
132   
133   Bool_t            fFillV0SigHisto;  // V0 signal creation and fill
134   Bool_t            fFillClusAcceptHisto; // Fill eta/phi distributions
135   Bool_t            fMCData;          //  Simulation On/Off
136
137   // Event by event trigger recognition bit
138   Bool_t            fEventMB   ;      // Bit for MB events
139   Bool_t            fEventL0   ;      // Bit for L0 events
140   Bool_t            fEventL1G  ;      // Bit for L1 Gamma 1 events
141   Bool_t            fEventL1G2 ;      // Bit for L1 Gamma 2 events
142   Bool_t            fEventL1J  ;      // Bit for L1 Jet 1 events
143   Bool_t            fEventL1J2 ;      // Bit for L1 JEt 2 events
144   Bool_t            fEventCen  ;      // Bit for Central events
145   Bool_t            fEventSem  ;      // Bit for Semi Central events
146   
147   // Histograms
148   
149   TH1F             *fhNEvents;        //! Number of selected events
150   TH2F             *fhFORAmp;         //! FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column
151   TH2F             *fhFORAmpL1G;      //! FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column, with L1 Gamma trigger event
152   TH2F             *fhFORAmpL1G2;     //! FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column, with L1 Gamma2 trigger event
153   TH2F             *fhFORAmpL1J;      //! FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column, with L1 Jet trigger event
154   TH2F             *fhFORAmpL1J2;     //! FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column, with L1 Jet2 trigger event
155   TH2F             *fhL0Amp;          //! FALTRO signal per Row and Column for FOR involves L0 patch
156   TH2F             *fhL0AmpL1G;       //! FALTRO signal per Row and Column for FOR involves L0 patch, with L1G trigger event
157   TH2F             *fhL0AmpL1J;       //! FALTRO signal per Row and Column for FOR involves L0 patch, with L1J trigger event
158   TH2F             *fhL1Amp;          //! STU signal per Row and Column for FOR involves L0 patch
159   TH2F             *fhL1GAmp;         //! STU signal per Row and Column for FOR position of L1 Gamma patch (top-left)
160   TH2F             *fhL1G2Amp;        //! STU signal per Row and Column for FOR position of L1 Gamma2 patch (top-left)
161   TH2F             *fhL1JAmp;         //! STU signal per Row and Column for FOR position of L1 Jet patch (top-left)
162   TH2F             *fhL1J2Amp;        //! STU signal per Row and Column for FOR position of L1 Jet2 patch (top-left)
163   TH2F             *fhL1FOREnergy;    //! STU signal per Row and Column for FOR position vs FOR energy
164   
165   TH2F             *fhL0Patch;                //! FOR with L0 patch associated
166   TH2F             *fhL1GPatch;               //! FOR with L1 Gamma patch associated
167   TH2F             *fhL1G2Patch;              //! FOR with L1 Gamma patch associated
168   TH2F             *fhL1GPatchNotFake;        //! FOR with L1 Gamma patch associated but no energy in the related cells
169   TH2F             *fhL1GPatchFake;           //! FOR with L1 Gamma patch associated
170   TH2F             *fhL1GPatchNotAllFake;     //! FOR with at least 1 L1 Gamma patch associated that has energy in the related celles : not a fake event
171   TH2F             *fhL1GPatchAllFake;        //! FOR without any L1 Gamma patch associated with energy in the related cells: fake patch
172   TH2F             *fhL1GPatchNotAllFakeMax;  //! FOR with at least one L1 Gamma patch associated with energy in the related cell, maximal energy patch : not fake events
173   TH2F             *fhL1GPatchAllFakeMax;     //! FOR without any L1 Gamma patch associated with energy in the related cell, maximal energy patch : fake events
174   TH1F             *fhL1GPatchNotAllFakeMaxE; //! Energy distrib of FOR for non fake events, patch of maximal energy
175   TH1F             *fhL1GPatchAllFakeMaxE;    //! Energy distrib FOR for fake events, patch of maximal energy
176   TH1F             *fhL1GPatchNotAllFakeE;        //! Energy distrib of FOR for non fake events, all patch energy
177   TH1F             *fhL1GPatchAllFakeE;       //! Energy distrib of FOR forfake events, all patch energy
178   TH1F             *fhL1GPatchFakeE;          //! Energy distrib of FOR for fake events, all patch energy
179   TH1F             *fhL1GPatchNotFakeE;       //! Energy distrib of FOR for non fake events, all patch energy
180   TH2F             *fhNPatchFake;             //! number of fake patchs per event vs. if all were fakes or not
181   TH2F             *fhNPatchNotFake;          //! number of non fake patchs per events vs. if all were fakes or not
182   
183   TH2F             *fhL1JPatch;       //! FOR with L1 Jet patch associated
184   TH2F             *fhL1J2Patch;      //! FOR with L1 Jet patch associated
185   TH2F             *fhFEESTU;         //! Correlation FEE vs STU
186   TH2F             *fhTRUSTU;         //! Correlation TRU vs STU
187   TH2I             *fhV0STU;          //! Total signal STU vs V0C+V0S
188   
189   TH2F             *fhGPMaxVV0TT;     //! V0 signal vs maximum gamma L1 patch
190   TH2F             *fhJPMaxVV0TT;     //! V0 signal vs maximum jet L1 patch
191   TProfile2D       *fhFORMeanAmp;     //! Mean FastOR(FEE) signal per Row and Column
192   TProfile2D       *fhL0MeanAmp;      //! Mean FastOR(TRU) signal per Row and Column
193   TProfile2D       *fhL1MeanAmp;      //! Mean FastOR(STU) signal per Row and Column
194   TH2F             *fhL1GPatchMax;    //! FOR of max. amplitude patch with L1 Gamma patch associated
195   TH2F             *fhL1G2PatchMax;   //! FOR of max. amplitude patch with L1 Gamma patch associated
196   TH2F             *fhL1JPatchMax;    //! FOR of max. amplitude patch with L1 Jet patch associated  
197   TH2F             *fhL1J2PatchMax;   //! FOR of max. amplitude patch with L1 Jet patch associated
198   
199   // Cluster vs trigger histograms
200   enum triggerType{ kMBTrig                = 0,  kL0Trig            = 1,
201                     kL1GammaTrig           = 2,  kL1GammaTrig2      = 3,
202                     kL1JetTrig             = 4,  kL1JetTrig2        = 5,
203                     kL1GammaOnlyTrig       = 6,  kL1JetOnlyTrig     = 7,
204                     kL1Gamma2OnlyGammaTrig = 8,  kL1Jet2OnlyJetTrig = 9,
205                     kCentralTrig           = 10, kSemiCentralTrig   = 11 };
206   
207   TH1F             *fhClusMBPure[3];       //! Clusters E distribution for pure MB trigger
208   TH1F             *fhClusMaxMBPure[3];    //! Maximum E Cluster per event distribution for pure MB trigger
209   
210   static const int  fgkTriggerCombi = 12;   // total number of trigger combinations defined above
211   
212   TH1F             *fhClus   [fgkTriggerCombi];                     //! Clusters E distribution for a trigger
213   TH1F             *fhClusMax[fgkTriggerCombi];                     //! Maximum E Cluster per event distribution for MB trigger
214
215   TH2F             *fhClusCen   [fgkTriggerCombi];                  //! Clusters Centrality vs E distribution for a trigger
216   TH2F             *fhClusCenMax[fgkTriggerCombi];                  //! Maximum E Cluster  vs Centrality per event distribution for a trigger
217   
218   TH2F             *fhClusV0   [fgkTriggerCombi];                   //! Clusters V0 vs E distribution for a trigger
219   TH2F             *fhClusV0Max[fgkTriggerCombi];                   //! Maximum E Cluster  vs Centrality per event distribution for a trigger
220
221   TH2F             *fhClusEta   [fgkTriggerCombi];                  //! Clusters eta vs E distribution for a trigger
222   TH2F             *fhClusEtaMax[fgkTriggerCombi];                  //! Maximum E Cluster  vs Eta per event distribution for a trigger
223
224   TH2F             *fhClusPhi   [fgkTriggerCombi];                   //! Clusters Phi vs E distribution for a trigger
225   TH2F             *fhClusPhiMax[fgkTriggerCombi];                   //! Maximum E Cluster  vs Phi per event distribution for a trigger
226
227   TH2F             *fhClusEtaPhiHigh      [fgkTriggerCombi];         //! Clusters eta vs phi distribution for a trigger, energy above fEtaPhiEnMin GeV
228   TH2F             *fhClusEtaPhiHighCluMax[fgkTriggerCombi];         //! Maximum E Cluster, Phi vs Eta per event distribution for a trigger, energy above fEtaPhiEnMin GeV
229  
230   TH2F             *fhClusEtaPhiHighCellMax      [fgkTriggerCombi];  //! Clusters maximum energy cell index eta vs phi distribution for a trigger, energy above fEtaPhiEnMin GeV
231   TH2F             *fhClusEtaPhiHighCellMaxCluMax[fgkTriggerCombi];  //! Maximum E Cluster, maximum energy cell index Phi vs Eta per event distribution for MB trigger, energy above fEtaPhiEnMin GeV
232  
233   TH2F             *fhClusEtaPhiLow      [fgkTriggerCombi];          //! Clusters eta vs phi distribution for a trigger, energy below fEtaPhiEnMin GeV
234   TH2F             *fhClusEtaPhiLowCluMax[fgkTriggerCombi];          //! Maximum E Cluster, Phi vs Eta per event distribution for MB trigger, energy below fEtaPhiEnMin GeV
235  
236   TH2F             *fhClusEtaPhiLowCellMax      [fgkTriggerCombi];   //! Clusters maximum energy cell index eta vs phi distribution for a trigger, energy below fEtaPhiEnMin GeV
237   TH2F             *fhClusEtaPhiLowCellMaxCluMax[fgkTriggerCombi];   //! Maximum E Cluster, maximum energy cell index Phi vs Eta per event distribution for MB trigger, energy below fEtaPhiEnMin GeV
238
239   TH1F             *fhV0[fgkTriggerCombi];//! V0 distribution for a triggered event
240
241   // Histograms bins
242   
243   Int_t             fNBinsSTUSignal   ;     // Number of bins for STU total signal histograms
244   Float_t           fMaxSTUSignal     ;     // Maximum value for TRU total signal histograms
245   Int_t             fNBinsTRUSignal   ;     // Number of bins for TRU total signal histograms
246   Float_t           fMaxTRUSignal     ;     // Maximum value for TRU total signal histograms
247   Int_t             fNBinsV0Signal    ;     // Number of bins for V0 total signal histograms
248   Float_t           fMaxV0Signal      ;     // Maximum value for V0 total signal histograms
249   Int_t             fNBinsSTUFEERatio ;     // Number of bins for STU/FEE ratios histograms
250   Float_t           fMaxSTUFEERatio   ;     // Maximum value for STU/FEE ratios histograms
251   Int_t             fNBinsSTUTRURatio ;     // Number of bins for STU/TRU ratios histograms
252   Float_t           fMaxSTUTRURatio   ;     // Maximum value for STU/TRU ratios histograms
253   Int_t             fNBinsClusterE    ;     // Number of bins for E cluster histograms
254   Float_t           fMaxClusterE      ;     // Maximum value for E cluster histograms
255
256   //Constants needed by the class: EMCAL 
257   //static const int  fgkFALTRORows = AliEMCALGeoParams::fgkEMCALRows*(AliEMCALGeoParams::fgkEMCALModules-7)/2;   // total number
258   static const int  fgkFALTRORows = 60; //AliEMCALGeoParams::fgkEMCALSTURows-4; // total number, temporary, not considers DCal
259   // of fake altro rows    in EMCAL
260   // (ALTRO channels in one SM times 5 SM divided by 2 per FALTRO)
261   
262   static const int  fgkFALTROCols = AliEMCALGeoParams::fgkEMCALSTUCols; // total number of fake altro columns in EMCAL
263   // (ALTRO channels in one SM times 2 SM divided by 2 per FALTRO)
264   
265   // cell, patch maps
266   Double_t fMapCell     [fgkFALTRORows][fgkFALTROCols]; // Cell map
267   Double_t fMapCellL1G  [fgkFALTRORows][fgkFALTROCols]; // Cell map for L1G
268   Double_t fMapCellL1G2 [fgkFALTRORows][fgkFALTROCols]; // Cell map for L1G2
269   Double_t fMapCellL1J  [fgkFALTRORows][fgkFALTROCols]; // Cell map for L1J
270   Double_t fMapCellL1J2 [fgkFALTRORows][fgkFALTROCols]; // Cell map for L1J2
271   Double_t fMapTrigL0   [fgkFALTRORows][fgkFALTROCols]; // Patch map for L0
272   Double_t fMapTrigL1   [fgkFALTRORows][fgkFALTROCols]; // Patch map for L1
273   Double_t fMapTrigL0L1G[fgkFALTRORows][fgkFALTROCols]; // Patch map for L0L1G
274   Double_t fMapTrigL0L1J[fgkFALTRORows][fgkFALTROCols]; // Patch map for L0L1J
275   Double_t fMapTrigL1G  [fgkFALTRORows][fgkFALTROCols]; // Patch map for L1G
276   Double_t fMapTrigL1G2 [fgkFALTRORows][fgkFALTROCols]; // Patch map for L1G2
277   Double_t fMapTrigL1J  [fgkFALTRORows][fgkFALTROCols]; // Patch map for L1J
278   Double_t fMapTrigL1J2 [fgkFALTRORows][fgkFALTROCols]; // Patch map for L1J2
279
280   
281   AliAnalysisTaskEMCALTriggerQA           (const AliAnalysisTaskEMCALTriggerQA&); // not implemented
282   
283   AliAnalysisTaskEMCALTriggerQA& operator=(const AliAnalysisTaskEMCALTriggerQA&); // not implemented
284   
285   ClassDef(AliAnalysisTaskEMCALTriggerQA, 13);
286 };
287
288 #endif