--- /dev/null
+#ifndef ALIANALYSISTASKEMCALTRIGGERQA_H
+#define ALIANALYSISTASKEMCALTRIGGERQA_H
+
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice */
+
+//-------------------------------------------------------------------------//
+// Fill histograms with basic QA information for EMCAL offline trigger //
+// Author: Nicolas Arbor (LPSC-Grenoble), Rachid Guernane (LPSC-Grenoble) //
+// Gustavo Conesa Balbastre (LPSC-Grenoble) //
+// //
+//-------------------------------------------------------------------------//
+
+//--- Root ---
+class TList;
+class TH1F;
+class TH2I;
+class TH2F;
+class AliEMCALGeometry;
+class TProfile2D;
+
+//--- AliRoot ---
+class AliEMCALRecoUtils;
+#include "AliEMCALGeoParams.h"
+#include "AliAnalysisTaskSE.h"
+
+class AliAnalysisTaskEMCALTriggerQA : public AliAnalysisTaskSE
+{
+public:
+ AliAnalysisTaskEMCALTriggerQA(); // default constructor
+
+ AliAnalysisTaskEMCALTriggerQA(const char *name); // named constructor
+
+ virtual ~AliAnalysisTaskEMCALTriggerQA() { ; } // destructor
+
+
+ void UserCreateOutputObjects(); // you should create your output objects in that function if possible
+
+ void UserExec(Option_t *option); // function called for each event
+
+ void SetGeometryName(TString name) { fGeoName = name ; }
+
+ AliEMCALRecoUtils* GetRecoUtils() { return fRecoUtils ; }
+
+ //Histogram setters
+
+ void SetTRUTotalSignalHistogramsRange(Int_t nbins, Float_t max) { fNBinsTRUSignal = nbins; fMaxTRUSignal = max ; }
+ void SetSTUTotalSignalHistogramsRange(Int_t nbins, Float_t max) { fNBinsSTUSignal = nbins; fMaxSTUSignal = max ; }
+ void SetV0TotalSignalHistogramsRange (Int_t nbins, Float_t max) { fNBinsV0Signal = nbins; fMaxV0Signal = max ; }
+ void SetSTUFEERatioHistogramsRange (Int_t nbins, Float_t max) { fNBinsSTUFEERatio = nbins; fMaxSTUFEERatio = max ; }
+ void SetSTUTRURatioHistogramsRange (Int_t nbins, Float_t max) { fNBinsSTUTRURatio = nbins; fMaxSTUFEERatio = max ; }
+ void SetClusterEHistogramsRange (Int_t nbins, Float_t max) { fNBinsClusterE = nbins; fMaxClusterE = max ; }
+
+private:
+ TList *fOutputList; //! Output list
+
+ AliEMCALRecoUtils *fRecoUtils; // RecoUtils
+
+ AliEMCALGeometry *fGeometry; // Access to EMCAL geometry utils
+ TString fGeoName; // Name of geometry used
+
+ TH1F *fhNEvents; //! Number of selected events
+ TH2F *fhFORAmp; //! FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column
+ TH2F *fhFORAmpL1G; //! FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column, with L1 Gamma trigger event
+ TH2F *fhFORAmpL1J; //! FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column, with L1 Jet trigger event
+ TH2F *fhL0Amp; //! FALTRO signal per Row and Column for FOR involves L0 patch
+ TH2F *fhL0AmpL1G; //! FALTRO signal per Row and Column for FOR involves L0 patch, with L1G trigger event
+ TH2F *fhL0AmpL1J; //! FALTRO signal per Row and Column for FOR involves L0 patch, with L1J trigger event
+ TH2F *fhL1Amp; //! STU signal per Row and Column for FOR involves L0 patch
+ TH2F *fhL1GAmp; //! STU signal per Row and Column for FOR position of L1 Gamma patch (top-left)
+ TH2F *fhL1JAmp; //! STU signal per Row and Column for FOR position of L1 Jet patch (top-left)
+ TH2F *fhL0Patch; //! FOR with L0 patch associated
+ TH2F *fhL1GPatch; //! FOR with L1 Gamma patch associated
+ TH2F *fhL1JPatch; //! FOR with L1 Jet patch associated
+ TH2F *fhFEESTU; //! Correlation FEE vs STU
+ TH2F *fhTRUSTU; //! Correlation TRU vs STU
+ TH2I *fhV0STU; //! Total signal STU vs V0C+V0S
+
+ TH2F *fhGPMaxVV0TT; //! V0 signal vs maximum gamma L1 patch
+ TH2F *fhJPMaxVV0TT; //! V0 signal vs maximum jet L1 patch
+ TProfile2D *fhFORMeanAmp; //! Mean FastOR(FEE) signal per Row and Column
+ TProfile2D *fhL0MeanAmp; //! Mean FastOR(TRU) signal per Row and Column
+ TProfile2D *fhL1MeanAmp; //! Mean FastOR(STU) signal per Row and Column
+ TH1F *fhV0MB; //! V0 distribution for MB triggered event
+ TH1F *fhV0L1G; //! V0 distribution for L1G triggered event
+ TH1F *fhV0L1J; //! V0 distribution for L1J triggered event
+ TH2F *fhL1GPatchMax; //! FOR of max. amplitude patch with L1 Gamma patch associated
+ TH2F *fhL1JPatchMax; //! FOR of max. amplitude patch with L1 Jet patch associated
+
+ // Cluster vs trigger histograms
+
+ TH1F *fhClusMB; //! Clusters distribution for MB trigger
+ TH1F *fhClusMBPure; //! Clusters distribution for MB trigger
+ TH1F *fhClusL0; //! Clusters distribution for L0 trigger
+ TH1F *fhClusL1G; //! Clusters distribution for L1G trigger
+ TH1F *fhClusL1J; //! Clusters distribution for L1J trigger
+ TH1F *fhClusL1GOnly; //! Clusters distribution for L1G trigger and not L1J
+ TH1F *fhClusL1JOnly; //! Clusters distribution for L1J trigger and not L1G
+ TH1F *fhClusMaxMB; //! Maximum E Cluster per event distribution for MB trigger
+ TH1F *fhClusMaxMBPure; //! Maximum E Cluster per event distribution for MB trigger
+ TH1F *fhClusMaxL0; //! Maximum E Cluster per event distribution for L0 trigger
+ TH1F *fhClusMaxL1G; //! Maximum E Cluster per event distribution for L1G trigger
+ TH1F *fhClusMaxL1J; //! Maximum E Cluster per event distribution for L1J trigger
+ TH1F *fhClusMaxL1GOnly; //! Maximum E Cluster per event distribution for L1G trigger and not L1J
+ TH1F *fhClusMaxL1JOnly; //! Maximum E Cluster per event distribution for L1J trigger and not L1G
+
+ TH2F *fhClusCenMB; //! Clusters Centrality vs E distribution for MB trigger
+ TH2F *fhClusCenL0; //! Clusters Centrality vs E distribution for L0 trigger
+ TH2F *fhClusCenL1G; //! Clusters Centrality vs E distribution for L1G trigger
+ TH2F *fhClusCenL1J; //! Clusters Centrality vs E distribution for L1J trigger
+ TH2F *fhClusCenL1GOnly; //! Clusters Centrality vs E distribution for L1G trigger and not L1J
+ TH2F *fhClusCenL1JOnly; //! Clusters Centrality vs E distribution for L1J trigger and not L1G
+ TH2F *fhClusCenMaxMB; //! Maximum E Cluster vs Centrality per event distribution for MB trigger
+ TH2F *fhClusCenMaxL0; //! Maximum E Cluster vs Centrality per event distribution for L0 trigger
+ TH2F *fhClusCenMaxL1G; //! Maximum E Cluster vs Centrality per event distribution for L1G trigger
+ TH2F *fhClusCenMaxL1J; //! Maximum E Cluster vs Centrality per event distribution for L1J trigger
+ TH2F *fhClusCenMaxL1GOnly; //! Maximum E Cluster vs Centrality per event distribution for L1G trigger and not L1J
+ TH2F *fhClusCenMaxL1JOnly; //! Maximum E Cluster vs Centrality per event distribution for L1J trigger and not L1G
+
+ TH2F *fhClusV0MB; //! Clusters Centrality vs E distribution for MB trigger
+ TH2F *fhClusV0L0; //! Clusters Centrality vs E distribution for L0 trigger
+ TH2F *fhClusV0L1G; //! Clusters Centrality vs E distribution for L1G trigger
+ TH2F *fhClusV0L1J; //! Clusters Centrality vs E distribution for L1J trigger
+ TH2F *fhClusV0L1GOnly; //! Clusters Centrality vs E distribution for L1G trigger and not L1J
+ TH2F *fhClusV0L1JOnly; //! Clusters Centrality vs E distribution for L1J trigger and not L1G
+ TH2F *fhClusV0MaxMB; //! Maximum E Cluster vs Centrality per event distribution for MB trigger
+ TH2F *fhClusV0MaxL0; //! Maximum E Cluster vs Centrality per event distribution for L0 trigger
+ TH2F *fhClusV0MaxL1G; //! Maximum E Cluster vs Centrality per event distribution for L1G trigger
+ TH2F *fhClusV0MaxL1J; //! Maximum E Cluster vs Centrality per event distribution for L1J trigger
+ TH2F *fhClusV0MaxL1GOnly; //! Maximum E Cluster vs Centrality per event distribution for L1G trigger and not L1J
+ TH2F *fhClusV0MaxL1JOnly; //! Maximum E Cluster vs Centrality per event distribution for L1J trigger and not L1G
+
+ TH2F *fhClusEtaMB; //! Clusters eta vs E distribution for MB trigger
+ TH2F *fhClusEtaL0; //! Clusters eta vs E distribution for L0 trigger
+ TH2F *fhClusEtaL1G; //! Clusters eta vs E distribution for L1G trigger
+ TH2F *fhClusEtaL1J; //! Clusters eta vs E distribution for L1J trigger
+ TH2F *fhClusEtaL1GOnly; //! Clusters eta vs E distribution for L1G trigger and not L1J
+ TH2F *fhClusEtaL1JOnly; //! Clusters eta vs E distribution for L1J trigger and not L1G
+ TH2F *fhClusEtaMaxMB; //! Maximum E Cluster vs Eta per event distribution for MB trigger
+ TH2F *fhClusEtaMaxL0; //! Maximum E Cluster vs Eta per event distribution for L0 trigger
+ TH2F *fhClusEtaMaxL1G; //! Maximum E Cluster vs Eta per event distribution for L1G trigger
+ TH2F *fhClusEtaMaxL1J; //! Maximum E Cluster vs Eta per event distribution for L1J trigger
+ TH2F *fhClusEtaMaxL1GOnly; //! Maximum E Cluster vs Eta per event distribution for L1G trigger and not L1J
+ TH2F *fhClusEtaMaxL1JOnly; //! Maximum E Cluster vs Eta per event distribution for L1J trigger and not L1G
+
+ TH2F *fhClusPhiMB; //! Clusters Phi vs E distribution for MB trigger
+ TH2F *fhClusPhiL0; //! Clusters Phi vs E distribution for L0 trigger
+ TH2F *fhClusPhiL1G; //! Clusters Phi vs E distribution for L1G trigger
+ TH2F *fhClusPhiL1J; //! Clusters Phi vs E distribution for L1J trigger
+ TH2F *fhClusPhiL1GOnly; //! Clusters Phi vs E distribution for L1G trigger and not L1J
+ TH2F *fhClusPhiL1JOnly; //! Clusters Phi vs E distribution for L1J trigger and not L1G
+ TH2F *fhClusPhiMaxMB; //! Maximum E Cluster vs Phi per event distribution for MB trigger
+ TH2F *fhClusPhiMaxL0; //! Maximum E Cluster vs Phi per event distribution for L0 trigger
+ TH2F *fhClusPhiMaxL1G; //! Maximum E Cluster vs Phi per event distribution for L1G trigger
+ TH2F *fhClusPhiMaxL1J; //! Maximum E Cluster vs Phi per event distribution for L1J trigger
+ TH2F *fhClusPhiMaxL1GOnly; //! Maximum E Cluster vs Phi per event distribution for L1G trigger and not L1J
+ TH2F *fhClusPhiMaxL1JOnly; //! Maximum E Cluster vs Phi per event distribution for L1J trigger and not L1G
+
+ TH2F *fhClusEtaPhiHighMB; //! Clusters eta vs phi distribution for MB trigger, energy above 10 GeV
+ TH2F *fhClusEtaPhiHighL0; //! Clusters eta vs phi distribution for L0 trigger, energy above 10 GeV
+ TH2F *fhClusEtaPhiHighL1G; //! Clusters eta vs phi distribution for L1G trigger, energy above 10 GeV
+ TH2F *fhClusEtaPhiHighL1J; //! Clusters eta vs phi distribution for L1J trigger, energy above 10 GeV
+ TH2F *fhClusEtaPhiHighL1GOnly; //! Clusters eta vs phi distribution for L1G trigger and not L1J, energy above 10 GeV
+ TH2F *fhClusEtaPhiHighL1JOnly; //! Clusters eta vs phi distribution for L1J trigger and not L1G, energy above 10 GeV
+ TH2F *fhClusEtaPhiHighCluMaxMB; //! Maximum E Cluster, Phi vs Eta per event distribution for MB trigger, energy above 10 GeV
+ TH2F *fhClusEtaPhiHighCluMaxL0; //! Maximum E Cluster, Phi vs Eta per event distribution for L0 trigger, energy above 10 GeV
+ TH2F *fhClusEtaPhiHighCluMaxL1G; //! Maximum E Cluster, Phi vs Eta per event distribution for L1G trigger, energy above 10 GeV
+ TH2F *fhClusEtaPhiHighCluMaxL1J; //! Maximum E Cluster, Phi vs Eta per event distribution for L1J trigger, energy above 10 GeV
+ TH2F *fhClusEtaPhiHighCluMaxL1GOnly; //! Maximum E Cluster, Phi vs Eta per event distribution for L1G trigger and not L1J, energy above 10 GeV
+ TH2F *fhClusEtaPhiHighCluMaxL1JOnly; //! Maximum E Cluster, Phi vs Eta per event distribution for L1J trigger and not L1G, energy above 10 GeV
+
+ TH2F *fhClusEtaPhiHighCellMaxMB; //! Clusters maximum energy cell index eta vs phi distribution for MB trigger, energy above 10 GeV
+ TH2F *fhClusEtaPhiHighCellMaxL0; //! Clusters maximum energy cell index eta vs phi distribution for L0 trigger, energy above 10 GeV
+ TH2F *fhClusEtaPhiHighCellMaxL1G; //! Clusters maximum energy cell index eta vs phi distribution for L1G trigger, energy above 10 GeV
+ TH2F *fhClusEtaPhiHighCellMaxL1J; //! Clusters maximum energy cell index eta vs phi distribution for L1J trigger, energy above 10 GeV
+ TH2F *fhClusEtaPhiHighCellMaxL1GOnly; //! Clusters maximum energy cell index eta vs phi distribution for L1G trigger and not L1J, energy above 10 GeV
+ TH2F *fhClusEtaPhiHighCellMaxL1JOnly; //! Clusters maximum energy cell index eta vs phi distribution for L1J trigger and not L1G, energy above 10 GeV
+ TH2F *fhClusEtaPhiHighCellMaxCluMaxMB; //! Maximum E Cluster, maximum energy cell index Phi vs Eta per event distribution for MB trigger, energy above 10 GeV
+ TH2F *fhClusEtaPhiHighCellMaxCluMaxL0; //! Maximum E Cluster, maximum energy cell index Phi vs Eta per event distribution for L0 trigger, energy above 10 GeV
+ TH2F *fhClusEtaPhiHighCellMaxCluMaxL1G; //! Maximum E Cluster, maximum energy cell index Phi vs Eta per event distribution for L1G trigger, energy above 10 GeV
+ TH2F *fhClusEtaPhiHighCellMaxCluMaxL1J; //! Maximum E Cluster, maximum energy cell index Phi vs Eta per event distribution for L1J trigger, energy above 10 GeV
+ TH2F *fhClusEtaPhiHighCellMaxCluMaxL1GOnly; //! Maximum E Cluster, maximum energy cell index Phi vs Eta per event distribution for L1G trigger and not L1J, energy above 10 GeV
+ TH2F *fhClusEtaPhiHighCellMaxCluMaxL1JOnly; //! Maximum E Cluster, maximum energy cell index Phi vs Eta per event distribution for L1J trigger and not L1G, energy above 10 GeV
+
+ TH2F *fhClusEtaPhiLowMB; //! Clusters eta vs phi distribution for MB trigger, energy below 10 GeV
+ TH2F *fhClusEtaPhiLowL0; //! Clusters eta vs phi distribution for L0 trigger, energy below 10 GeV
+ TH2F *fhClusEtaPhiLowL1G; //! Clusters eta vs phi distribution for L1G trigger, energy below 10 GeV
+ TH2F *fhClusEtaPhiLowL1J; //! Clusters eta vs phi distribution for L1J trigger, energy below 10 GeV
+ TH2F *fhClusEtaPhiLowL1GOnly; //! Clusters eta vs phi distribution for L1G trigger and not L1J, energy below 10 GeV
+ TH2F *fhClusEtaPhiLowL1JOnly; //! Clusters eta vs phi distribution for L1J trigger and not L1G, energy below 10 GeV
+ TH2F *fhClusEtaPhiLowCluMaxMB; //! Maximum E Cluster, Phi vs Eta per event distribution for MB trigger, energy below 10 GeV
+ TH2F *fhClusEtaPhiLowCluMaxL0; //! Maximum E Cluster, Phi vs Eta per event distribution for L0 trigger, energy below 10 GeV
+ TH2F *fhClusEtaPhiLowCluMaxL1G; //! Maximum E Cluster, Phi vs Eta per event distribution for L1G trigger, energy below 10 GeV
+ TH2F *fhClusEtaPhiLowCluMaxL1J; //! Maximum E Cluster, Phi vs Eta per event distribution for L1J trigger, energy below 10 GeV
+ TH2F *fhClusEtaPhiLowCluMaxL1GOnly; //! Maximum E Cluster, Phi vs Eta per event distribution for L1G trigger and not L1J, energy below 10 GeV
+ TH2F *fhClusEtaPhiLowCluMaxL1JOnly; //! Maximum E Cluster, Phi vs Eta per event distribution for L1J trigger and not L1G, energy below 10 GeV
+
+ TH2F *fhClusEtaPhiLowCellMaxMB; //! Clusters maximum energy cell index eta vs phi distribution for MB trigger, energy below 10 GeV
+ TH2F *fhClusEtaPhiLowCellMaxL0; //! Clusters maximum energy cell index eta vs phi distribution for L0 trigger, energy below 10 GeV
+ TH2F *fhClusEtaPhiLowCellMaxL1G; //! Clusters maximum energy cell index eta vs phi distribution for L1G trigger, energy below 10 GeV
+ TH2F *fhClusEtaPhiLowCellMaxL1J; //! Clusters maximum energy cell index eta vs phi distribution for L1J trigger, energy below 10 GeV
+ TH2F *fhClusEtaPhiLowCellMaxL1GOnly; //! Clusters maximum energy cell index eta vs phi distribution for L1G trigger and not L1J, energy below 10 GeV
+ TH2F *fhClusEtaPhiLowCellMaxL1JOnly; //! Clusters maximum energy cell index eta vs phi distribution for L1J trigger and not L1G, energy below 10 GeV
+ TH2F *fhClusEtaPhiLowCellMaxCluMaxMB; //! Maximum E Cluster, maximum energy cell index Phi vs Eta per event distribution for MB trigger, energy below 10 GeV
+ TH2F *fhClusEtaPhiLowCellMaxCluMaxL0; //! Maximum E Cluster, maximum energy cell index Phi vs Eta per event distribution for L0 trigger, energy below 10 GeV
+ TH2F *fhClusEtaPhiLowCellMaxCluMaxL1G; //! Maximum E Cluster, maximum energy cell index Phi vs Eta per event distribution for L1G trigger, energy below 10 GeV
+ TH2F *fhClusEtaPhiLowCellMaxCluMaxL1J; //! Maximum E Cluster, maximum energy cell index Phi vs Eta per event distribution for L1J trigger, energy below 10 GeV
+ TH2F *fhClusEtaPhiLowCellMaxCluMaxL1GOnly; //! Maximum E Cluster, maximum energy cell index Phi vs Eta per event distribution for L1G trigger and not L1J, energy below 10 GeV
+ TH2F *fhClusEtaPhiLowCellMaxCluMaxL1JOnly; //! Maximum E Cluster, maximum energy cell index Phi vs Eta per event distribution for L1J trigger and not L1G, energy below 10 GeV
+
+
+
+ // Histograms bins
+
+ Int_t fNBinsSTUSignal ; // Number of bins for STU total signal histograms
+ Float_t fMaxSTUSignal ; // Maximum value for TRU total signal histograms
+ Int_t fNBinsTRUSignal ; // Number of bins for TRU total signal histograms
+ Float_t fMaxTRUSignal ; // Maximum value for TRU total signal histograms
+ Int_t fNBinsV0Signal ; // Number of bins for V0 total signal histograms
+ Float_t fMaxV0Signal ; // Maximum value for V0 total signal histograms
+ Int_t fNBinsSTUFEERatio ; // Number of bins for STU/FEE ratios histograms
+ Float_t fMaxSTUFEERatio ; // Maximum value for STU/FEE ratios histograms
+ Int_t fNBinsSTUTRURatio ; // Number of bins for STU/TRU ratios histograms
+ Float_t fMaxSTUTRURatio ; // Maximum value for STU/TRU ratios histograms
+ Int_t fNBinsClusterE ; // Number of bins for E cluster histograms
+ Float_t fMaxClusterE ; // Maximum value for E cluster histograms
+
+ //Constants needed by the class: EMCAL
+ static const int fgkFALTRORows = AliEMCALGeoParams::fgkEMCALRows*(AliEMCALGeoParams::fgkEMCALModules-7)/2; // total number
+ // of fake altro rows in EMCAL
+ // (ALTRO channels in one SM times 5 SM divided by 2 per FALTRO)
+
+ static const int fgkFALTROCols = AliEMCALGeoParams::fgkEMCALCols; // total number of fake altro columns in EMCAL
+ // (ALTRO channels in one SM times 2 SM divided by 2 per FALTRO)
+
+
+ AliAnalysisTaskEMCALTriggerQA(const AliAnalysisTaskEMCALTriggerQA&); //not implemented
+
+ AliAnalysisTaskEMCALTriggerQA& operator=(const AliAnalysisTaskEMCALTriggerQA&); //not implemented
+
+ ClassDef(AliAnalysisTaskEMCALTriggerQA, 9);
+};
+
+#endif