// Author: Gustavo Conesa Balbastre (INFN - Frascati)
//////////////////////////////////////////////////////////
-#include "AliAnalysisTaskCaloFilter.h"
+//Root
+#include "TGeoManager.h"
+
+//STEER
#include "AliESDEvent.h"
#include "AliAODEvent.h"
#include "AliLog.h"
#include "AliVCluster.h"
#include "AliVCaloCells.h"
-#include "AliEMCALRecoUtils.h"
-#include "AliEMCALGeometry.h"
#include "AliVEventHandler.h"
#include "AliAnalysisManager.h"
#include "AliInputEventHandler.h"
#include "AliESDtrackCuts.h"
-#include "TGeoManager.h"
+#include "AliTriggerAnalysis.h"
+
+//EMCAL
+#include "AliEMCALRecoUtils.h"
+#include "AliEMCALGeometry.h"
+
+#include "AliAnalysisTaskCaloFilter.h"
ClassImp(AliAnalysisTaskCaloFilter)
fCaloFilter(0), fCorrect(kFALSE),
fEMCALGeo(0x0),fEMCALGeoName("EMCAL_FIRSTYEARV1"),
fEMCALRecoUtils(new AliEMCALRecoUtils),
- fESDtrackCuts(0), fTrackMultEtaCut(0.8),
+ fESDtrackCuts(0), fTriggerAnalysis (new AliTriggerAnalysis), fTrackMultEtaCut(0.8),
fLoadEMCALMatrices(kFALSE), //fLoadPHOSMatrices(kFALSE),
fGeoMatrixSet(kFALSE)
{
fCaloFilter(0), fCorrect(kFALSE),
fEMCALGeo(0x0),fEMCALGeoName("EMCAL_FIRSTYEARV1"),
fEMCALRecoUtils(new AliEMCALRecoUtils),
- fESDtrackCuts(0), fTrackMultEtaCut(0.8),
+ fESDtrackCuts(0), fTriggerAnalysis (new AliTriggerAnalysis), fTrackMultEtaCut(0.8),
fLoadEMCALMatrices(kFALSE), //fLoadPHOSMatrices(kFALSE),
fGeoMatrixSet(kFALSE)
{
{
//Destructor.
- if(fEMCALGeo) delete fEMCALGeo;
- if(fEMCALRecoUtils) delete fEMCALRecoUtils;
- if(fESDtrackCuts) delete fESDtrackCuts;
+ if(fEMCALGeo) delete fEMCALGeo;
+ if(fEMCALRecoUtils) delete fEMCALRecoUtils;
+ if(fESDtrackCuts) delete fESDtrackCuts;
+ if(fTriggerAnalysis) delete fTriggerAnalysis;
}
void AliAnalysisTaskCaloFilter::UserExec(Option_t */*option*/)
{
// Execute analysis for current event
- //
-
+ // Copy input ESD or AOD header, vertex, CaloClusters and CaloCells to output AOD
+
if (fDebug > 0)
printf("CaloFilter: Analysing event # %d\n", (Int_t)Entry());
- // Copy input ESD or AOD header, vertex, CaloClusters and CaloCells to output AOD
AliVEvent* event = InputEvent();
if(!event) {
- printf("AliAnalysisTaskCaloFilter::CreateAODFromESD() - This event does not contain Input?");
+ printf("AliAnalysisTaskCaloFilter::UserExec - This event does not contain Input?");
return;
}
Bool_t bESD = kFALSE;
if(!strcmp(event->GetName(),"AliESDEvent")) bESD=kTRUE;
- //Get track multiplicity
- Int_t trackMult = 0;
+ //-------------------------------------------
+ //Event selection parameters
+ //-------------------------------------------
+ //Is it a pileup event?
+ Bool_t bPileup = event->IsPileupFromSPD(3, 0.8, 3., 2., 5.); //Default values, if not it does not compile
+ //Bool_t bPileup = event->IsPileupFromSPD();
+ //if(bPileup) return kFALSE;
+ Int_t trackMult = 0;
+ Bool_t bV0AND = kFALSE;
+ Bool_t bGoodVertex = kFALSE;
if(bESD){
+ //Get track multiplicity
Int_t nTracks = InputEvent()->GetNumberOfTracks() ;
for (Int_t itrack = 0; itrack < nTracks; itrack++) {////////////// track loop
AliVTrack * track = (AliVTrack*)InputEvent()->GetTrack(itrack) ; // retrieve track from esd
if(!fESDtrackCuts->AcceptTrack((AliESDtrack*)track)) continue;
//Count the tracks in eta < 0.8
if(TMath::Abs(track->Eta())< fTrackMultEtaCut) trackMult++;
- }
- }
+ }
+ //V0AND?
+
+ bV0AND = fTriggerAnalysis->IsOfflineTriggerFired(dynamic_cast<AliESDEvent*> (event), AliTriggerAnalysis::kV0AND);
+ //if(!bV0AND) return kFALSE;
+ //Well reconstructed vertex
+ bGoodVertex = CheckForPrimaryVertex();
+ //if(!bGoodVertex) return kFALSE;
+
+ }//ESDs
+
+ if(fDebug > 0)
+ printf("AliAnalysisTaskCaloFilter::UserExec() - PileUp %d, Good Vertex %d, v0AND %d, Track Mult in |eta| < %2.1f = %d\n",
+ bPileup,bGoodVertex,bV0AND, fTrackMultEtaCut, trackMult);
+ //Put bools with event selection parameters in an array, as a patch, put it later in the MC labels list
+ Int_t eventBools[] = {bPileup,bGoodVertex,bV0AND};
+
+ //----------------------------------------------------
+ //Set in AOD General Event Parameters, vertex, runnumber etc
+ //----------------------------------------------------
// set arrays and pointers
Float_t posF[3];
TClonesArray &caloClusters = *(AODEvent()->GetCaloClusters());
Int_t jClusters=0;
+ //-------------------------------------------
//Do Corrections in EMCAL
+ //-------------------------------------------
//If EMCAL, and requested, correct energy, position ...
//Need to do this in a separate loop before filling the ESDs because of the track matching recalculations
if(fCorrect && (fCaloFilter==kEMCAL || fCaloFilter==kBoth) ) {
fGeoMatrixSet=kTRUE;
}//ESD
}//Load matrices from Data
+
+ //Recover time dependent corrections, put then in recalibration histograms. Do it once
+ fEMCALRecoUtils->SetTimeDependentCorrections(InputEvent()->GetRunNumber());
+
}//first event
} // corrections in EMCAL
- //Now loop on clusters to fill AODs
+ //-------------------------------------------
+ // Now loop on clusters to fill AODs
+ //-------------------------------------------
for (Int_t iClust=0; iClust<nCaloClus; ++iClust) {
AliVCluster * cluster = event->GetCaloCluster(iClust);
// }
fEMCALRecoUtils->GetMatchedResiduals(cluster->GetID(),dR,dZ);
- if(DebugLevel() > 2)
- printf("Corrected Residuals : dZ %f, dR %f\n ",dZ, dR);
-
+ if(DebugLevel() > 2){
+ if(cluster->IsEMCAL()) printf("EMCAL Corrected Residuals : dZ %f, dR %f\n ",dZ, dR);
+ if(cluster->IsPHOS()) printf("PHOS Corrected Residuals : dZ %f, dR %f\n ",dZ, dR);
+ }
}
//--------------------------------------------------------------
AliAODCaloCluster *caloCluster = new(caloClusters[jClusters++])
AliAODCaloCluster(id,
- 0,
- 0x0,
+ 3,
+ eventBools,
energy,
posF,
NULL,
return;
}
+//____________________________________________________________________________
+Bool_t AliAnalysisTaskCaloFilter::CheckForPrimaryVertex(){
+ //Check if the vertex was well reconstructed, copy from V0Reader of conversion group
+ //It only works for ESDs
+
+ AliESDEvent * event = dynamic_cast<AliESDEvent*> (InputEvent());
+ if(event->GetPrimaryVertexTracks()->GetNContributors() > 0) {
+ return 1;
+ }
+
+ if(event->GetPrimaryVertexTracks()->GetNContributors() < 1) {
+ // SPD vertex
+ if(event->GetPrimaryVertexSPD()->GetNContributors() > 0) {
+ //cout<<"spd vertex type::"<< fESDEvent->GetPrimaryVertex()->GetName() << endl;
+ return 1;
+
+ }
+ if(event->GetPrimaryVertexSPD()->GetNContributors() < 1) {
+ // cout<<"bad vertex type::"<< fESDEvent->GetPrimaryVertex()->GetName() << endl;
+ return 0;
+ }
+ }
+ return 0;
+ //return fInputEvent->GetPrimaryVertex()->GetNContributors()>0;
+}
+
+
//_____________________________________________________
void AliAnalysisTaskCaloFilter::PrintInfo(){
printf("\t Calorimeter Filtering Option ? %d\n",fCaloFilter);
//printf("\t Use handmade geo matrices? EMCAL %d, PHOS %d\n",fLoadEMCALMatrices, fLoadPHOSMatrices);
printf("\t Use handmade geo matrices? EMCAL %d, PHOS 0\n",fLoadEMCALMatrices);
-
}
//_____________________________________________________
class AliEMCALRecoUtils;
class AliEMCALGeometry;
class AliESDtrackCuts;
+class AliTriggerAnalysis;
class AliAnalysisTaskCaloFilter : public AliAnalysisTaskSE
{
AliAnalysisTaskCaloFilter& operator=(const AliAnalysisTaskCaloFilter&);
public:
+ //General analysis frame methods
virtual void UserCreateOutputObjects();
//virtual void Init();
//virtual void LocalInit() ;
virtual void UserExec(Option_t *option);
virtual void Terminate(Option_t *option);
- enum caloFilter {kBoth = 0, kEMCAL = 1, kPHOS=2};
- void SetCaloFilter(Int_t calo) {fCaloFilter = calo;}
- TString GetCaloFilter() const {return fCaloFilter;}
-
- void SetEMCALGeometryName(TString name) { fEMCALGeoName = name ; }
- TString EMCALGeometryName() const { return fEMCALGeoName ; }
-
+ //Geometry methods
+ void SetEMCALGeometryName(TString name) { fEMCALGeoName = name ; }
+ TString EMCALGeometryName() const { return fEMCALGeoName ; }
void SwitchOnLoadOwnEMCALGeometryMatrices() { fLoadEMCALMatrices = kTRUE ; }
void SwitchOffLoadOwnEMCALGeometryMatrices() { fLoadEMCALMatrices = kFALSE ; }
void SetEMCALGeometryMatrixInSM(TGeoHMatrix* m, Int_t i) { fEMCALMatrix[i] = m ; }
-
//void SwitchOnLoadOwnPHOSGeometryMatrices() { fLoadPHOSMatrices = kTRUE ; }
//void SwitchOffLoadOwnPHOSGeometryMatrices() { fLoadPHOSMatrices = kFALSE ; }
//void SetPHOSGeometryMatrixInSM(TGeoHMatrix* m, Int_t i) { fPHOSMatrix[i] = m ; }
- void SetEMCALRecoUtils(AliEMCALRecoUtils * ru) {fEMCALRecoUtils = ru;}
- AliEMCALRecoUtils* GetEMCALRecoUtils() const {return fEMCALRecoUtils;}
-
- void SwitchOnClusterCorrection() {fCorrect = kTRUE ;}
- void SwitchOffClusterCorrection() {fCorrect = kFALSE;}
+ //Task settings
+ enum caloFilter {kBoth = 0, kEMCAL = 1, kPHOS=2};
+ void SetCaloFilter(Int_t calo) { fCaloFilter = calo;}
+ TString GetCaloFilter() const { return fCaloFilter;}
+
+ void SetEMCALRecoUtils(AliEMCALRecoUtils * ru) { fEMCALRecoUtils = ru ;}
+ AliEMCALRecoUtils* GetEMCALRecoUtils() const { return fEMCALRecoUtils;}
+ void SwitchOnClusterCorrection() { fCorrect = kTRUE ;}
+ void SwitchOffClusterCorrection() { fCorrect = kFALSE;}
+
+ //Event selection
AliESDtrackCuts* GetTrackCuts() const { return fESDtrackCuts ; }
void SetTrackCuts(AliESDtrackCuts * cuts) { fESDtrackCuts = cuts ; }
Float_t GetTrackMultiplicityEtaCut() const { return fTrackMultEtaCut ; }
void SetTrackMultiplicityEtaCut(Float_t eta) { fTrackMultEtaCut = eta ; }
-
- void PrintInfo();
+ virtual Bool_t CheckForPrimaryVertex();
+
+ void PrintInfo();
private:
//TList* fCuts ; //! List with analysis cuts
- Int_t fCaloFilter; // Calorimeter to filter
- Int_t fCorrect; // Recalibrate or recalculate different cluster parameters
+ Int_t fCaloFilter; // Calorimeter to filter
+ Int_t fCorrect; // Recalibrate or recalculate different cluster parameters
//EMCAL specific
AliEMCALGeometry * fEMCALGeo; //! EMCAL geometry
TString fEMCALGeoName; // Name of geometry to use.
AliEMCALRecoUtils * fEMCALRecoUtils; // Pointer to EMCAL utilities for clusterization
- AliESDtrackCuts *fESDtrackCuts ; // Track cut
- Float_t fTrackMultEtaCut ; // Track multiplicity eta cut
+ AliESDtrackCuts * fESDtrackCuts ; // Track cut
+ AliTriggerAnalysis* fTriggerAnalysis; // Access to trigger selection algorithm for V0AND calculation
+ Float_t fTrackMultEtaCut ; // Track multiplicity eta cut
- Bool_t fLoadEMCALMatrices; // Matrices set from configuration, not get from geometry.root or from ESDs/AODs
- TGeoHMatrix * fEMCALMatrix[10]; // Geometry matrices with alignments
- //Bool_t fLoadPHOSMatrices; // Matrices set from configuration, not get from geometry.root or from ESDs/AODs
- //TGeoHMatrix * fPHOSMatrix[5]; // Geometry matrices with alignments
- Bool_t fGeoMatrixSet; // Set geometry matrices only once, for the first event.
+ //Geometry
+ Bool_t fLoadEMCALMatrices; // Matrices set from configuration, not get from geometry.root or from ESDs/AODs
+ TGeoHMatrix * fEMCALMatrix[10]; // Geometry matrices with alignments
+ //Bool_t fLoadPHOSMatrices; // Matrices set from configuration, not get from geometry.root or from ESDs/AODs
+ //TGeoHMatrix * fPHOSMatrix[5]; // Geometry matrices with alignments
+ Bool_t fGeoMatrixSet; // Set geometry matrices only once, for the first event.
+
- ClassDef(AliAnalysisTaskCaloFilter, 4); // Analysis task for standard ESD filtering
+ ClassDef(AliAnalysisTaskCaloFilter, 5); // Analysis task for standard ESD filtering
};
#endif
* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
* *
* Author: Boris Polishchuk *
- * Adapted to AOD reading by Gustavo Conesa *
+ * Adapted to AOD reading by Gustavo Conesa *
* *
* Permission to use, copy, modify and distribute this software and its *
* documentation strictly for non-commercial purposes is hereby granted *
{
//Named constructor which should be used.
- for(Int_t iMod=0; iMod < 12; iMod++) {
+ for(Int_t iMod=0; iMod < AliEMCALGeoParams::fgkEMCALModules; iMod++) {
for(Int_t iX=0; iX<24; iX++) {
for(Int_t iZ=0; iZ<48; iZ++) {
fHmpi0[iMod][iZ][iX]=0;
}
}
- for(Int_t iSM=0; iSM<4; iSM++) {
- fHmggSM[iSM] =0;
- fHmggPairSM[iSM] =0;
- fHOpeningAngleSM[iSM] =0;
- fHOpeningAnglePairSM[iSM] =0;
- fHAsymmetrySM[iSM] =0;
- fHAsymmetryPairSM[iSM] =0;
- fHIncidentAngleSM[iSM] =0;
- fHIncidentAnglePairSM[iSM]=0;
- fhTowerDecayPhotonHit[iSM] =0;
- fhTowerDecayPhotonEnergy[iSM]=0;
- fhTowerDecayPhotonAsymmetry[iSM]=0;
- fMatrix[iSM] = 0x0;
+ for(Int_t iSM = 0; iSM < AliEMCALGeoParams::fgkEMCALModules; iSM++) {
+ fHmggSM[iSM] = 0;
+ fHmggPairSM[iSM] = 0;
+ fHOpeningAngleSM[iSM] = 0;
+ fHOpeningAnglePairSM[iSM] = 0;
+ fHAsymmetrySM[iSM] = 0;
+ fHAsymmetryPairSM[iSM] = 0;
+ fHIncidentAngleSM[iSM] = 0;
+ fHIncidentAnglePairSM[iSM] = 0;
+ fhTowerDecayPhotonHit[iSM] = 0;
+ fhTowerDecayPhotonEnergy[iSM] = 0;
+ fhTowerDecayPhotonAsymmetry[iSM] = 0;
+ fMatrix[iSM] = 0x0;
}
DefineOutput(1, TList::Class());
//Create output container, init geometry
fEMCALGeo = AliEMCALGeometry::GetInstance(fEMCALGeoName) ;
+ Int_t nSM = (fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules();
fOutputContainer = new TList();
const Int_t buffersize = 255;
char hname[buffersize], htitl[buffersize];
- for(Int_t iMod=0; iMod < (fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules(); iMod++) {
- for(Int_t iRow=0; iRow<AliEMCALGeoParams::fgkEMCALRows; iRow++) {
- for(Int_t iCol=0; iCol<AliEMCALGeoParams::fgkEMCALCols; iCol++) {
+ for(Int_t iMod=0; iMod < nSM; iMod++) {
+ for(Int_t iRow=0; iRow < AliEMCALGeoParams::fgkEMCALRows; iRow++) {
+ for(Int_t iCol=0; iCol < AliEMCALGeoParams::fgkEMCALCols; iCol++) {
snprintf(hname,buffersize, "%d_%d_%d",iMod,iCol,iRow);
snprintf(htitl,buffersize, "Two-gamma inv. mass for super mod %d, cell(col,row)=(%d,%d)",iMod,iCol,iRow);
fHmpi0[iMod][iCol][iRow] = new TH1F(hname,htitl,fNbins,fMinBin,fMaxBin);
TString pairname[] = {"A side (0-2)", "C side (1-3)","Row 0 (0-1)", "Row 1 (2-3)"};
- for(Int_t iSM=0; iSM<4; iSM++) {
+ for(Int_t iSM = 0; iSM < nSM; iSM++) {
snprintf(hname, buffersize, "hmgg_SM%d",iSM);
snprintf(htitl, buffersize, "Two-gamma inv. mass for super mod %d",iSM);
printf("Switchs:\n \t Remove Bad Channels? %d; Use filtered input? %d; Correct Clusters? %d, \n \t Analyze Old AODs? %d, Mass per channel same SM clusters? %d\n",
fRecoUtils->IsBadChannelsRemovalSwitchedOn(),fFilteredInput,fCorrectClusters, fOldAOD, fSameSM) ;
printf("EMCAL Geometry name: < %s >, Load Matrices %d\n",fEMCALGeoName.Data(), fLoadMatrices) ;
- if(fLoadMatrices) {for(Int_t ism = 0; ism < 4; ism++) fMatrix[ism]->Print();}
+ if(fLoadMatrices) {for(Int_t ism = 0; ism < AliEMCALGeoParams::fgkEMCALModules; ism++) fMatrix[ism]->Print();}
}
TList* fOutputContainer; //!histogram container
TH1F* fHmpi0[AliEMCALGeoParams::fgkEMCALModules][AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows];//! two-cluster inv. mass assigned to each cell.
- TH2F* fHmgg; //! two-cluster inv.mass vs pt of pair
- TH2F* fHmggDifferentSM; //! two-cluster inv.mass vs pt of pair, each cluster in different SM
- TH2F* fHmggSM[4]; //! two-cluster inv.mass per SM
- TH2F* fHmggPairSM[4]; //! two-cluster inv.mass per Pair
-
- TH2F* fHOpeningAngle; //! two-cluster opening angle vs pt of pair, with mass close to pi0
- TH2F* fHOpeningAngleDifferentSM; //! two-cluster opening angle vs pt of pair, each cluster in different SM, with mass close to pi0
- TH2F* fHOpeningAngleSM[4]; //! two-cluster opening angle vs pt per SM,with mass close to pi0
- TH2F* fHOpeningAnglePairSM[4]; //! two-cluster opening angle vs pt per Pair,with mass close to pi0
-
- TH2F* fHIncidentAngle; //! cluster incident angle vs pt of pair, with mass close to pi0
- TH2F* fHIncidentAngleDifferentSM; //! cluster incident angle vs pt of pair, each cluster in different SM, with mass close to pi0
- TH2F* fHIncidentAngleSM[4]; //! cluster incident angle vs pt per SM,with mass close to pi0
- TH2F* fHIncidentAnglePairSM[4]; //! cluster incident angle vs pt per Pair,with mass close to pi0
-
- TH2F* fHAsymmetry; //! two-cluster asymmetry vs pt of pair, with mass close to pi0
- TH2F* fHAsymmetryDifferentSM; //! two-cluster asymmetry vs pt of pair, each cluster in different SM, with mass close to pi0
- TH2F* fHAsymmetrySM[4]; //! two-cluster asymmetry vs pt per SM,with mass close to pi0
- TH2F* fHAsymmetryPairSM[4]; //! two-cluster asymmetry vs pt per Pair,with mass close to pi0
-
- TH2F* fhTowerDecayPhotonHit[4] ; //! Cells ordered in column/row for different module, number of times a decay photon hits
- TH2F* fhTowerDecayPhotonEnergy[4] ; //! Cells ordered in column/row for different module, accumulated energy in the tower by decay photons.
- TH2F* fhTowerDecayPhotonAsymmetry[4] ; //! Cells ordered in column/row for different module, accumulated asymmetry in the tower by decay photons.
-
- TH1I* fhNEvents; //! Number of events counter histogram
- TList * fCuts ; //! List with analysis cuts
+ TH2F* fHmgg; //! two-cluster inv.mass vs pt of pair
+ TH2F* fHmggDifferentSM; //! two-cluster inv.mass vs pt of pair, each cluster in different SM
+ TH2F* fHmggSM[AliEMCALGeoParams::fgkEMCALModules]; //! two-cluster inv.mass per SM
+ TH2F* fHmggPairSM[AliEMCALGeoParams::fgkEMCALModules]; //! two-cluster inv.mass per Pair
+
+ TH2F* fHOpeningAngle; //! two-cluster opening angle vs pt of pair, with mass close to pi0
+ TH2F* fHOpeningAngleDifferentSM; //! two-cluster opening angle vs pt of pair, each cluster in different SM, with mass close to pi0
+ TH2F* fHOpeningAngleSM[AliEMCALGeoParams::fgkEMCALModules]; //! two-cluster opening angle vs pt per SM,with mass close to pi0
+ TH2F* fHOpeningAnglePairSM[AliEMCALGeoParams::fgkEMCALModules]; //! two-cluster opening angle vs pt per Pair,with mass close to pi0
+
+ TH2F* fHIncidentAngle; //! cluster incident angle vs pt of pair, with mass close to pi0
+ TH2F* fHIncidentAngleDifferentSM; //! cluster incident angle vs pt of pair, each cluster in different SM, with mass close to pi0
+ TH2F* fHIncidentAngleSM[AliEMCALGeoParams::fgkEMCALModules]; //! cluster incident angle vs pt per SM,with mass close to pi0
+ TH2F* fHIncidentAnglePairSM[AliEMCALGeoParams::fgkEMCALModules]; //! cluster incident angle vs pt per Pair,with mass close to pi0
+
+ TH2F* fHAsymmetry; //! two-cluster asymmetry vs pt of pair, with mass close to pi0
+ TH2F* fHAsymmetryDifferentSM; //! two-cluster asymmetry vs pt of pair, each cluster in different SM, with mass close to pi0
+ TH2F* fHAsymmetrySM[AliEMCALGeoParams::fgkEMCALModules]; //! two-cluster asymmetry vs pt per SM,with mass close to pi0
+ TH2F* fHAsymmetryPairSM[AliEMCALGeoParams::fgkEMCALModules]; //! two-cluster asymmetry vs pt per Pair,with mass close to pi0
+
+ TH2F* fhTowerDecayPhotonHit[AliEMCALGeoParams::fgkEMCALModules] ; //! Cells ordered in column/row for different module, number of times a decay photon hits
+ TH2F* fhTowerDecayPhotonEnergy[AliEMCALGeoParams::fgkEMCALModules] ; //! Cells ordered in column/row for different module, accumulated energy in the tower by decay photons.
+ TH2F* fhTowerDecayPhotonAsymmetry[AliEMCALGeoParams::fgkEMCALModules] ; //! Cells ordered in column/row for different module, accumulated asymmetry in the tower by decay photons.
+
+ TH1I* fhNEvents; //! Number of events counter histogram
+ TList * fCuts ; //! List with analysis cuts
Bool_t fLoadMatrices; // Matrices set from configuration, not get from geometry.root or from ESDs/AODs
- TGeoHMatrix * fMatrix[4]; // Geometry matrices with alignments
+ TGeoHMatrix * fMatrix[AliEMCALGeoParams::fgkEMCALModules]; // Geometry matrices with alignments
- ClassDef(AliAnalysisTaskEMCALPi0CalibSelection,11);
+ ClassDef(AliAnalysisTaskEMCALPi0CalibSelection,12);
};