17 #include <TGeoManager.h>
23 #include <TParticle.h>
27 #include "AliESDEvent.h"
28 #include "AliMCEvent.h"
30 #include "AliAODPWG4Particle.h"
31 #include "AliVCluster.h"
32 #include "AliVCaloCells.h"
33 #include "AliAODCaloCluster.h"
34 #include "AliOADBContainer.h"
35 #include "AliAnalysisManager.h"
36 #include "AliAODMCParticle.h"
40 #include "AliEMCALGeometry.h"
41 #include "AliPHOSGeoUtils.h"
57 fEMCALGeo(0x0), fPHOSGeo(0x0),
58 fEMCALGeoMatrixSet(kFALSE), fPHOSGeoMatrixSet(kFALSE),
59 fLoadEMCALMatrices(kFALSE), fLoadPHOSMatrices(kFALSE),
60 fRemoveBadChannels(kFALSE), fPHOSBadChannelMap(0x0),
61 fNCellsFromPHOSBorder(0),
62 fNMaskCellColumns(0), fMaskCellColumns(0x0),
63 fRecalibration(kFALSE), fRunDependentCorrection(kFALSE),
64 fPHOSRecalibrationFactors(), fEMCALRecoUtils(new AliEMCALRecoUtils),
65 fRecalculatePosition(kFALSE), fCorrectELinearity(kFALSE),
66 fRecalculateMatching(kFALSE),
68 fCutEta(20), fCutPhi(20),
69 fLocMaxCutE(0), fLocMaxCutEDiff(0),
70 fPlotCluster(0), fOADBSet(kFALSE),
71 fOADBForEMCAL(kFALSE), fOADBForPHOS(kFALSE),
72 fOADBFilePathEMCAL(
""), fOADBFilePathPHOS(
""),
73 fImportGeometryFromFile(0), fImportGeometryFilePath(
""),
74 fNSuperModulesUsed(0), fRunNumber(0),
75 fMCECellClusFracCorrOn(0), fMCECellClusFracCorrParam()
123 Int_t nSM =
fEMCALGeo->GetNumberOfSuperModules();
128 AliOADBContainer *contBC=
new AliOADBContainer(
"");
129 contBC->InitFromFile(Form(
"%s/EMCALBadChannels.root",
fOADBFilePathEMCAL.Data()),
"AliEMCALBadChannels");
131 TObjArray *arrayBC=(TObjArray*)contBC->GetObject(
fRunNumber);
136 AliInfo(
"Remove EMCAL bad cells");
138 for (Int_t i=0; i<nSM; ++i)
145 hbm=(TH2I*)arrayBC->FindObject(Form(
"EMCALBadChannelMap_Mod%d",i));
149 AliError(Form(
"Can not get EMCALBadChannelMap_Mod%d",i));
153 hbm->SetDirectory(0);
157 }
else AliInfo(
"Do NOT remove EMCAL bad channels\n");
165 AliOADBContainer *contRF=
new AliOADBContainer(
"");
167 contRF->InitFromFile(Form(
"%s/EMCALRecalib.root",
fOADBFilePathEMCAL.Data()),
"AliEMCALRecalib");
169 TObjArray *recal=(TObjArray*)contRF->GetObject(
fRunNumber);
173 TObjArray *recalpass=(TObjArray*)recal->FindObject(pass);
177 TObjArray *recalib=(TObjArray*)recalpass->FindObject(
"Recalib");
181 AliInfo(
"Recalibrate EMCAL");
182 for (Int_t i=0; i < nSM; ++i)
189 h = (TH2F*)recalib->FindObject(Form(
"EMCALRecalFactors_SM%d",i));
193 AliError(Form(
"Could not load EMCALRecalFactors_SM%d",i));
201 }
else AliInfo(
"Do NOT recalibrate EMCAL, no params object array");
202 }
else AliInfo(
"Do NOT recalibrate EMCAL, no params for pass");
203 }
else AliInfo(
"Do NOT recalibrate EMCAL, no params for run");
214 AliOADBContainer *contRFTD=
new AliOADBContainer(
"");
216 contRFTD->InitFromFile(Form(
"%s/EMCALTemperatureCorrCalib.root",
fOADBFilePathEMCAL.Data()),
"AliEMCALRunDepTempCalibCorrections");
218 TH1S *htd=(TH1S*)contRFTD->GetObject(
fRunNumber);
223 AliWarning(Form(
"No TemperatureCorrCalib Objects for run: %d",
fRunNumber));
227 Int_t maxEntry = contRFTD->GetNumberOfEntries();
229 while ( (ic < maxEntry) && (contRFTD->UpperLimit(ic) <
fRunNumber) )
235 Int_t closest = lower;
236 if ( (ic<maxEntry) &&
242 AliWarning(Form(
"TemperatureCorrCalib Objects found closest id %d from run: %d", closest, contRFTD->LowerLimit(closest)));
243 htd = (TH1S*) contRFTD->GetObjectByIndex(closest);
248 AliInfo(
"Recalibrate (Temperature) EMCAL");
250 for (Int_t ism=0; ism<nSM; ++ism)
252 for (Int_t icol=0; icol<48; ++icol)
254 for (Int_t irow=0; irow<24; ++irow)
258 Int_t absID =
fEMCALGeo->GetAbsCellIdFromCellIndexes(ism, irow, icol);
259 factor *= htd->GetBinContent(absID) / 10000. ;
268 }
else AliInfo(
"Do NOT recalibrate EMCAL with T variations, no params TH1");
276 AliOADBContainer *contTRF=
new AliOADBContainer(
"");
278 contTRF->InitFromFile(Form(
"%s/EMCALTimeCalib.root",
fOADBFilePathEMCAL.Data()),
"AliEMCALTimeCalib");
280 TObjArray *trecal=(TObjArray*)contTRF->GetObject(
fRunNumber);
284 TString passM = pass;
285 if(pass==
"spc_calo") passM =
"pass3";
286 TObjArray *trecalpass=(TObjArray*)trecal->FindObject(passM);
290 AliInfo(
"Time Recalibrate EMCAL");
291 for (Int_t ibc = 0; ibc < 4; ++ibc)
298 h = (TH1F*)trecalpass->FindObject(Form(
"hAllTimeAvBC%d",ibc));
302 AliError(Form(
"Could not load hAllTimeAvBC%d",ibc));
310 }
else AliInfo(
"Do NOT recalibrate time EMCAL, no params for pass");
311 }
else AliInfo(
"Do NOT recalibrate time EMCAL, no params for run");
318 Bool_t useDefault=kFALSE;
319 AliOADBContainer *contTRF=
new AliOADBContainer(
"");
320 contTRF->InitFromFile(Form(
"%s/EMCALTimeL1PhaseCalib.root",
fOADBFilePathEMCAL.Data()),
"AliEMCALTimeL1PhaseCalib");
321 TObjArray *trecal=(TObjArray*)contTRF->GetObject(
fRunNumber);
323 AliError(Form(
"Do NOT recalibrate time EMCAL. No params for run %d. Default used.",
fRunNumber));
324 trecal=(TObjArray*)contTRF->GetObject(0);
326 AliFatal(Form(
"No params for run %d. No default params.",
fRunNumber));
332 TString passM = pass;
333 if(useDefault) passM =
"pass1";
334 else if(pass==
"muon_calo_pass1") passM =
"muon_calo_pass1";
335 else if(pass==
"muon_calo_pass2") passM =
"muon_calo_pass2";
337 TObjArray *trecalpass=(TObjArray*)trecal->FindObject(passM);
340 AliFatal(
"No defaults params pass1.");
343 AliInfo(
"Do NOT recalibrate time EMCAL, no params for pass");
346 trecal=(TObjArray*)contTRF->GetObject(0);
348 AliFatal(Form(
"No params for run %d. No default params.",
fRunNumber));
352 trecalpass=(TObjArray*)trecal->FindObject(
"pass1");
354 AliFatal(
"No defaults params pass1.");
359 AliInfo(
"Time L1 phase Recalibrate EMCAL");
362 h = (TH1C*)trecalpass->FindObject(Form(
"h%d",
fRunNumber));
363 if (!h) AliError(Form(
"Could not load h%d",
fRunNumber));
380 AliOADBContainer badmapContainer(Form(
"phosBadMap"));
381 TString
fileName=
"$ALICE_PHYSICS/OADB/PHOS/PHOSBadMaps.root";
382 badmapContainer.InitFromFile(Form(
"%s/PHOSBadMaps.root",
fOADBFilePathPHOS.Data()),
"phosBadMap");
385 TObjArray *maps = (TObjArray*)badmapContainer.GetObject(139000,
"phosBadMap");
388 AliInfo(Form(
"Can not read PHOS bad map for run %d",
fRunNumber)) ;
392 AliInfo(Form(
"Setting PHOS bad map with name %s",maps->GetName())) ;
394 for(Int_t mod = 1; mod < 5; mod++)
401 hbmPH = (TH2I*)maps->At(mod);
403 if(hbmPH) hbmPH->SetDirectory(0);
433 AliInfo(
"Load user defined EMCAL geometry matrices");
436 AliOADBContainer emcGeoMat(
"AliEMCALgeo");
437 emcGeoMat.InitFromFile(Form(
"%s/EMCALlocal2master.root",
fOADBFilePathEMCAL.Data()),
"AliEMCALgeo");
438 TObjArray *matEMCAL=(TObjArray*)emcGeoMat.GetObject(
fRunNumber,
"EmcalMatrices");
440 for(Int_t mod=0; mod < (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules(); mod++)
444 AliDebug(1,Form(
"EMCAL matrices SM %d, %p", mod,((TGeoHMatrix*) matEMCAL->At(mod))));
459 AliWarning(Form(
"Set matrix for SM %d from gGeoManager",mod));
460 fEMCALGeo->SetMisalMatrix(
fEMCALGeo->GetMatrixForSuperModuleFromGeoManager(mod),mod) ;
464 AliError(Form(
"Alignment atrix for SM %d is not available",mod));
471 else if (!gGeoManager)
473 AliDebug(1,
"Load EMCAL misalignment matrices");
474 if(!strcmp(inputEvent->GetName(),
"AliESDEvent"))
476 for(Int_t mod = 0; mod < (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules(); mod++)
479 if(((AliESDEvent*)inputEvent)->GetEMCALMatrix(mod))
481 fEMCALGeo->SetMisalMatrix(((AliESDEvent*)inputEvent)->GetEMCALMatrix(mod),mod) ;
490 AliDebug(1,
"Setting of EMCAL transformation matrixes for AODs not implemented yet. \n Import geometry.root file");
504 AliInfo(
"Load user defined PHOS geometry matrices");
507 AliOADBContainer geomContainer(
"phosGeo");
508 geomContainer.InitFromFile(Form(
"%s/PHOSGeometry.root",
fOADBFilePathPHOS.Data()),
"PHOSRotationMatrixes");
509 TObjArray *matPHOS = (TObjArray*)geomContainer.GetObject(139000,
"PHOSRotationMatrixes");
511 for(Int_t mod = 0 ; mod < 5 ; mod++)
515 AliDebug(1,Form(
"PHOS matrices module %d, %p",mod,((TGeoHMatrix*) matPHOS->At(mod))));
518 fPHOSMatrix[mod] = (TGeoHMatrix*) matPHOS->At(mod) ;
534 else if (!gGeoManager)
536 AliDebug(1,
"Load PHOS misalignment matrices.");
537 if(!strcmp(inputEvent->GetName(),
"AliESDEvent"))
539 for(Int_t mod = 0; mod < 5; mod++)
541 if( ((AliESDEvent*)inputEvent)->GetPHOSMatrix(mod))
544 fPHOSGeo->SetMisalMatrix( ((AliESDEvent*)inputEvent)->GetPHOSMatrix(mod),mod) ;
552 AliDebug(1,
"Setting of EMCAL transformation matrixes for AODs not implemented yet. \n Import geometry.root file");
568 Bool_t areNeighbours = kFALSE ;
570 Int_t iRCU1 = -1, irow1 = -1, icol1 = -1;
571 Int_t iRCU2 = -1, irow2 = -1, icol2 = -1;
573 Int_t rowdiff = 0, coldiff = 0;
582 if(nSupMod1%2) icol1+=AliEMCALGeoParams::fgkEMCALCols;
583 else icol2+=AliEMCALGeoParams::fgkEMCALCols;
586 rowdiff = TMath::Abs( irow1 - irow2 ) ;
587 coldiff = TMath::Abs( icol1 - icol2 ) ;
590 if ((coldiff + rowdiff == 1 ))
591 areNeighbours = kTRUE ;
593 return areNeighbours;
601 AliVCluster* cluster)
611 for(Int_t iDigit = 0; iDigit < cluster->GetNCells(); iDigit++)
614 geom->GetCellIndex(cluster->GetCellAbsId(iDigit),iSupMod,iTower,iIphi,iIeta);
615 geom->GetCellPhiEtaIndexInSModule(iSupMod,iTower,iIphi,iIeta, iphi,ieta);
618 if (iDigit == 0 ) iSM0 = iSupMod;
619 else if(iSupMod != iSM0)
621 if(iSupMod > 11 && iSupMod < 18)
622 AliWarning(Form(
"Cluster shared in 2 DCal: SM%d, SM%d??",iSupMod,iSM0));
636 AliVCaloCells* cells)
const
640 if ( cells->GetType()==AliVCaloCells::kEMCALCell &&
fEMCALRecoUtils->GetNumberOfCellsFromEMCALBorder() <= 0 )
return kTRUE;
647 for(Int_t i = 0; i < cluster->GetNCells() ; i++)
649 Int_t absId = cluster->GetCellAbsId(i) ;
650 Float_t amp = cells->GetCellAmplitude(absId);
659 AliDebug(1,Form(
"Cluster Max AbsId %d, Cell Energy %2.2f, Cluster Energy %2.2f",
660 absIdMax, ampMax, cluster->E()));
662 if ( absIdMax == -1 )
return kFALSE;
665 Bool_t okrow = kFALSE;
666 Bool_t okcol = kFALSE;
668 if ( cells->GetType() == AliVCaloCells::kEMCALCell )
673 Int_t iTower = -1, iIphi = -1, iIeta = -1, iphi = -1, ieta = -1, iSM = -1;
675 fEMCALGeo->GetCellIndex(absIdMax,iSM,iTower,iIphi,iIeta);
677 fEMCALGeo->GetCellPhiEtaIndexInSModule(iSM,iTower,iIphi, iIeta,iphi,ieta);
679 if(iSM < 0 || iphi < 0 || ieta < 0 )
681 AliFatal(Form(
"Negative value for super module: %d, or cell ieta: %d, or cell iphi: %d, check EMCAL geometry name",iSM,ieta,iphi));
687 if ( iSM < 10 || (iSM > 11 && iSM < 18) )
689 if(iphi >= nborder && iphi < 24-nborder) okrow = kTRUE;
693 if(iphi >= nborder && iphi < 8-nborder) okrow = kTRUE;
699 if(!
fEMCALRecoUtils->IsEMCALNoBorderAtEta0() || (iSM > 11 && iSM < 18))
701 if(ieta > nborder && ieta < 48-nborder) okcol =kTRUE;
707 if(ieta >= nborder) okcol = kTRUE;
711 if(ieta < 48-nborder) okcol = kTRUE;
715 AliDebug(1,Form(
"EMCAL Cluster in %d cells fiducial volume: ieta %d, iphi %d, SM %d ? ok row %d, ok column %d",
716 nborder, ieta, iphi, iSM,okrow,okcol));
719 else if ( cells->GetType() == AliVCaloCells::kPHOSCell )
722 Int_t irow = -1, icol = -1;
723 fPHOSGeo->AbsToRelNumbering(absIdMax,relId);
725 if (relId[1] != 0 )
return kFALSE;
731 if(irow >= fNCellsFromPHOSBorder && irow < 64-fNCellsFromPHOSBorder) okrow =kTRUE;
732 if(icol >= fNCellsFromPHOSBorder && icol < 56-fNCellsFromPHOSBorder) okcol =kTRUE;
734 AliDebug(1,Form(
"PHOS Cluster in %d cells fiducial volume: ieta %d, iphi %d, SM %d ? ok row %d, ok column %d",
735 fNCellsFromPHOSBorder, icol, irow, relId[0]-1,okrow,okcol));
738 if (okcol && okrow)
return kTRUE;
757 for(Int_t iCell = 0; iCell<nCells; iCell++)
767 fPHOSGeo->AbsToRelNumbering(cellList[iCell],relId);
769 if (relId[1] != 0 )
return kTRUE;
804 Int_t & regEta, Int_t & regPhi)
const
806 regEta = regPhi = -1 ;
808 if(!clus->IsEMCAL())
return ;
810 Int_t icol = -1, irow = -1, iRCU = -1;
811 Float_t clusterFraction = 0;
818 if( sm%2 == 1) icol+=AliEMCALGeoParams::fgkEMCALCols;
821 if(icol < 2 || icol > 93 || irow < 2 || irow > 21)
return;
828 if ( icol > 9 && icol < 34 ) regEta = 0;
829 else if ( icol > 62 && icol < 87 ) regEta = 0;
833 else if ( icol <= 9 && icol >= 5 ) regEta = 3;
834 else if ( icol <= 38 && icol >= 34 ) regEta = 3;
835 else if ( icol <= 62 && icol >= 58 ) regEta = 3;
836 else if ( icol <= 91 && icol >= 87 ) regEta = 3;
840 else if ( icol < 58 && icol > 38 ) regEta = 1 ;
850 if ( irow >= 2 && irow <= 5 ) regPhi = 0;
851 else if ( irow >= 18 && irow <= 21 ) regPhi = 0;
852 else if ( irow >= 6 && irow <= 9 ) regPhi = 1;
853 else if ( irow >= 14 && irow <= 17 ) regPhi = 1;
863 Float_t & clusterFraction)
const
867 AliInfo(
"Cluster or cells pointer is null!");
874 Float_t fraction = 1.;
875 Float_t recalFactor = 1.;
876 Int_t cellAbsId =-1 , absId =-1 ;
877 Int_t iSupMod =-1 , ieta =-1 , iphi = -1, iRCU = -1;
882 for (Int_t iDig=0; iDig< clu->GetNCells(); iDig++)
884 cellAbsId = clu->GetCellAbsId(iDig);
886 fraction = clu->GetCellAmplitudeFraction(iDig);
887 if(fraction < 1e-4) fraction = 1.;
899 eCell = cells->GetCellAmplitude(cellAbsId)*fraction*recalFactor;
912 clusterFraction = (eTot-eMax)/eTot;
925 AliVEvent* event, Int_t index)
const
927 AliVTrack *track = 0x0;
934 Int_t trackIndex =
fEMCALRecoUtils->GetMatchedTrackIndex(cluster->GetID());
938 AliInfo(Form(
"Wrong track index %d, from recalculation", trackIndex));
940 track =
dynamic_cast<AliVTrack*
> (
event->GetTrack(trackIndex));
950 if( cluster->GetNTracksMatched() < 1 )
return 0x0;
956 if(!strcmp(
"AliESDCaloCluster",Form(
"%s",cluster->ClassName())))
958 if( index >= 0 ) iTrack = index;
959 else iTrack = ((AliESDCaloCluster*)cluster)->GetTracksMatched()->At(0);
961 track =
dynamic_cast<AliVTrack*
> (
event->GetTrack(iTrack) );
965 if( index > 0 ) iTrack = index;
967 track =
dynamic_cast<AliVTrack*
>( cluster->GetTrackMatched(iTrack) );
979 if( eCluster <= 0 || eCluster < eCell )
981 AliWarning(Form(
"Bad values eCell=%f, eCluster %f",eCell,eCluster));
985 Float_t frac = eCell / eCluster;
1007 fEMCALGeo->GetAbsCellIdFromEtaPhi(particle->Eta(),particle->Phi(), absId);
1009 AliDebug(2,Form(
"EMCAL: cluster eta %f, phi %f, absid %d, SuperModule %d",
1010 particle->Eta(), particle->Phi()*TMath::RadToDeg(),absId,
fEMCALGeo->GetSuperModuleNumber(absId)));
1012 return fEMCALGeo->GetSuperModuleNumber(absId) ;
1018 if(strcmp(inputEvent->ClassName(),
"AliMCEvent") == 0 )
1021 Double_t z = 0., x=0.;
1022 TParticle* primary = 0x0;
1023 AliStack * stack = ((AliMCEvent*)inputEvent)->Stack();
1027 primary = stack->Particle(particle->GetCaloLabel(0));
1031 AliFatal(
"Stack not available, stop!");
1036 fPHOSGeo->ImpactOnEmc(primary,mod,z,x) ;
1040 AliFatal(
"Primary not available, stop!");
1065 AliDebug(1,
"AliCalorimeterUtils::GetModuleNumber() - NUL Cluster, please check!!!");
1070 if ( cluster->GetNCells() <= 0 )
return -1;
1072 Int_t absId = cluster->GetCellAbsId(0);
1074 if ( absId < 0 )
return -1;
1076 if( cluster->IsEMCAL() )
1078 AliDebug(2,Form(
"EMCAL absid %d, SuperModule %d",absId,
fEMCALGeo->GetSuperModuleNumber(absId)));
1080 return fEMCALGeo->GetSuperModuleNumber(absId) ;
1082 else if ( cluster->IsPHOS() )
1085 fPHOSGeo->AbsToRelNumbering(absId,relId);
1087 if (relId[1] != 0 )
return -1;
1089 AliDebug(2,Form(
"PHOS absid %d Module %d",absId, relId[0]-1));
1101 Int_t & icol, Int_t & irow, Int_t & iRCU)
const
1105 if ( absId < 0 )
return -1 ;
1109 Int_t iTower = -1, iIphi = -1, iIeta = -1;
1110 fEMCALGeo->GetCellIndex(absId,imod,iTower,iIphi,iIeta);
1111 fEMCALGeo->GetCellPhiEtaIndexInSModule(imod,iTower,iIphi, iIeta,irow,icol);
1113 if(imod < 0 || irow < 0 || icol < 0 )
1115 AliFatal(Form(
"Negative value for super module: %d, or cell icol: %d, or cell irow: %d, check EMCAL geometry name",imod,icol,irow));
1122 if ( imod == 13 || imod == 15 || imod == 17 ) ico2 += 16;
1125 if(imod < 10 || (imod > 11 && imod < 18))
1128 if ( 0 <= irow && irow < 8 ) iRCU = 0;
1129 else if ( 8 <= irow && irow < 16 &&
1130 0 <= ico2 && ico2 < 24 ) iRCU = 0;
1134 else if ( 8 <= irow && irow < 16 &&
1135 24 <= ico2 && ico2 < 48 ) iRCU = 1;
1137 else if ( 16 <= irow && irow < 24 ) iRCU = 1;
1139 if ( imod%2 == 1 ) iRCU = 1 - iRCU;
1148 AliFatal(Form(
"Wrong EMCAL RCU number = %d", iRCU));
1155 fPHOSGeo->AbsToRelNumbering(absId,relId);
1157 if (relId[1] != 0 )
return -1;
1162 iRCU= (Int_t)(relId[2]-1)/16 ;
1167 AliFatal(Form(
"Wrong PHOS RCU number = %d", iRCU));
1180 Int_t & icol , Int_t & irow , Int_t & iRCU,
1181 Int_t & icolAbs, Int_t & irowAbs)
const
1193 irowAbs = irow + 64 * imod;
1204 Int_t shiftEta = 48;
1207 if ( imod > 11 && imod < 18) shiftEta+=48/3;
1209 icolAbs = (imod % 2) ? icol + shiftEta : icol;
1213 irowAbs = irow + 24 * Int_t(imod / 2);
1216 if ( imod > 11 && imod < 20) irowAbs -= (2*24 / 3);
1228 const Int_t nc = cluster->GetNCells();
1230 Int_t absIdList[nc];
1231 Float_t maxEList[nc];
1242 Int_t *absIdList, Float_t *maxEList)
1248 const Int_t nCells = cluster->GetNCells();
1252 Float_t simuTotWeight = 0;
1256 simuTotWeight/= eCluster;
1266 for(iDigit = 0; iDigit < nCells ; iDigit++)
1268 absIdList[iDigit] = cluster->GetCellsAbsId()[iDigit] ;
1269 Float_t en = cells->GetCellAmplitude(absIdList[iDigit]);
1278 idmax = absIdList[iDigit] ;
1285 for(iDigit = 0 ; iDigit < nCells; iDigit++)
1287 if( absIdList[iDigit] >= 0 )
1289 absId1 = cluster->GetCellsAbsId()[iDigit];
1291 Float_t en1 = cells->GetCellAmplitude(absId1);
1299 for(iDigitN = 0; iDigitN < nCells; iDigitN++)
1301 absId2 = cluster->GetCellsAbsId()[iDigitN] ;
1303 if(absId2==-1 || absId2==absId1)
continue;
1307 Float_t en2 = cells->GetCellAmplitude(absId2);
1320 absIdList[iDigitN] = -1 ;
1325 absIdList[iDigit] = -1 ;
1330 absIdList[iDigit] = -1 ;
1335 absIdList[iDigitN] = -1 ;
1346 for(iDigit = 0; iDigit < nCells; iDigit++)
1348 if( absIdList[iDigit] >= 0 )
1350 absIdList[iDigitN] = absIdList[iDigit] ;
1352 Float_t en = cells->GetCellAmplitude(absIdList[iDigit]);
1360 maxEList[iDigitN] = en ;
1369 AliDebug(1,Form(
"No local maxima found, assign highest energy cell as maxima, id %d, en cell %2.2f, en cluster %2.2f",
1370 idmax,emax,cluster->E()));
1372 maxEList[0] = emax ;
1373 absIdList[0] = idmax ;
1377 AliDebug(1,Form(
"In cluster E %2.2f (wth non lin. %2.2f), M02 %2.2f, M20 %2.2f, N maxima %d",
1378 cluster->E(),eCluster, cluster->GetM02(),cluster->GetM20(), iDigitN));
1393 if (!AliAnalysisManager::GetAnalysisManager()->GetTree())
1395 AliError(
"AliCalorimeterUtils::GetPass() - Pointer to tree = 0, returning null");
1399 if (!AliAnalysisManager::GetAnalysisManager()->GetTree()->GetCurrentFile())
1401 AliError(
"AliCalorimeterUtils::GetPass() - Null pointer input file, returning null");
1405 TString pass(AliAnalysisManager::GetAnalysisManager()->GetTree()->GetCurrentFile()->GetName());
1406 if (pass.Contains(
"ass1"))
return TString(
"pass1");
1407 else if (pass.Contains(
"ass2"))
return TString(
"pass2");
1408 else if (pass.Contains(
"ass3"))
return TString(
"pass3");
1409 else if (pass.Contains(
"ass4"))
return TString(
"pass4");
1410 else if (pass.Contains(
"ass5"))
return TString(
"pass5");
1411 else if (pass.Contains(
"LHC11c") && pass.Contains(
"spc_calo") )
return TString(
"spc_calo");
1412 else if (pass.Contains(
"calo") || pass.Contains(
"high_lumi"))
1414 AliInfo(
"Path contains <calo> or <high-lumi>, set as <pass1>");
1415 return TString(
"pass1");
1417 else if (pass.Contains(
"LHC14a1a"))
1419 AliInfo(
"Check that Energy calibration was enabled for this MC production in the tender, clusterizer or here!!");
1421 return TString(
"LHC14a1a");
1425 AliInfo(
"Pass number string not found");
1477 AliDebug(1,
"Init bad channel map");
1480 Bool_t oldStatus = TH1::AddDirectoryStatus();
1481 TH1::AddDirectory(kFALSE);
1484 for (
int i = 0; i < 5; i++)
fPHOSBadChannelMap->Add(
new TH2I(Form(
"PHOS_BadMap_mod%d",i),
1485 Form(
"PHOS_BadMap_mod%d",i),
1486 64, 0, 64, 56, 0, 56));
1492 TH1::AddDirectory(oldStatus);
1500 AliDebug(1,
"Init recalibration map");
1503 Bool_t oldStatus = TH1::AddDirectoryStatus();
1504 TH1::AddDirectory(kFALSE);
1507 for (
int i = 0; i < 5; i++)
1510 Form(
"PHOSRecalFactors_Mod%d",i),
1511 64, 0, 64, 56, 0, 56));
1515 for (Int_t m = 0; m < 5; m++)
1517 for (Int_t i = 0; i < 56; i++)
1519 for (Int_t j = 0; j < 64; j++)
1530 TH1::AddDirectory(oldStatus);
1545 AliInfo(Form(
"Get EMCAL geometry name to <%s> for run %d",
fEMCALGeo->GetName(),
fRunNumber));
1550 AliInfo(Form(
"Set EMCAL geometry name to <%s>",
fEMCALGeoName.Data()));
1569 else if (!gGeoManager) AliInfo(
"Careful!, gGeoManager not loaded, load misalign matrices");
1598 AliFatal(Form(
"Careful Geo Matrix for calo <%d> is not set, use AliFidutialCut instead",calo));
1605 Double_t x = 0, z = 0 ;
1611 Bool_t ok =
GetEMCALGeometry()->GetAbsCellIdFromEtaPhi(particle->Eta(),particle->Phi(),absID);
1614 Int_t icol = -1, irow = -1, iRCU = -1;
1617 if(status > 0) ok = kFALSE;
1636 AliFatal(Form(
"Careful Geo Matrix for calo <%d> is not set, use AliFidutialCut instead",calo));
1640 Float_t phi = particle->Phi();
1641 if(phi < 0) phi+=TMath::TwoPi();
1646 Double_t x = 0, z = 0 ;
1647 Double_t vtx[]={ particle->Xv(), particle->Yv(), particle->Zv() } ;
1648 return GetPHOSGeometry()->ImpactOnEmc(vtx, particle->Theta(), phi, mod, z, x) ;
1653 Bool_t ok =
GetEMCALGeometry()->GetAbsCellIdFromEtaPhi(particle->Eta(),phi,absID);
1656 Int_t icol = -1, irow = -1, iRCU = -1;
1659 if(status > 0) ok = kFALSE;
1672 Float_t phiOrg, Int_t & absID)
1679 AliFatal(Form(
"Careful Geo Matrix for calo <%d> is not set, use AliFidutialCut instead",calo));
1683 Float_t phi = phiOrg;
1684 if(phi < 0) phi+=TMath::TwoPi();
1689 Double_t x = 0, z = 0 ;
1690 Double_t vtx[]={0,0,0} ;
1698 Int_t icol = -1, irow = -1, iRCU = -1;
1701 if(status > 0) ok = kFALSE;
1717 if ( iSM%2 ) icol+=48;
1738 printf(
"***** Print: %s %s ******\n", GetName(), GetTitle() ) ;
1740 printf(
"Remove Clusters with max cell at less than %d cells from EMCAL border and %d cells from PHOS border\n",
1742 if(
fEMCALRecoUtils->IsEMCALNoBorderAtEta0()) printf(
"Do not remove EMCAL clusters at Eta = 0\n");
1746 printf(
"Matching criteria: dR < %2.2f[cm], dZ < %2.2f[cm]\n",
fCutR,
fCutZ);
1761 Int_t icol = -1; Int_t irow = -1; Int_t iRCU = -1;
1805 AliVCaloCells * cells)
1808 Float_t frac = 0.,
energy = 0.;
1814 UShort_t * index = cluster->GetCellsAbsId() ;
1815 Double_t * fraction = cluster->GetCellsAmplitudeFraction() ;
1817 Int_t ncells = cluster->GetNCells();
1823 for(Int_t icell = 0; icell < ncells; icell++)
1825 Int_t absId = index[icell];
1827 frac = fraction[icell];
1828 if(frac < 1e-3) frac = 1;
1830 Float_t amp = cells->GetCellAmplitude(absId);
1833 AliDebug(2,Form(
"Recalibrate cell: calo <%d>, cell fraction %f, cell energy: before cal %f; after cal %f",
1834 calo,frac,cells->GetCellAmplitude(absId),amp));
1839 AliDebug(1,Form(
"Energy before %f, after %f",cluster->E(),
energy));
1844 AliFatal(
"Cells pointer does not exist!");
1855 AliVCaloCells * cells, Float_t energyOrg)
1858 Float_t frac = 0.,
energy = 0.;
1864 UShort_t * index = cluster->GetCellsAbsId() ;
1865 Double_t * fraction = cluster->GetCellsAmplitudeFraction() ;
1867 Int_t ncells = cluster->GetNCells();
1873 for(Int_t icell = 0; icell < ncells; icell++)
1875 Int_t absId = index[icell];
1877 frac = fraction[icell];
1878 if(frac < 1e-3) frac = 1;
1880 Float_t amp = cells->GetCellAmplitude(absId);
1885 AliDebug(2,Form(
"Recalibrate cell: calo <%d>, cell fraction %f, cell energy %f",
1886 calo,frac,cells->GetCellAmplitude(absId)));
1891 AliDebug(1,Form(
"Energy before %f, after %f",cluster->E(),
energy));
1895 AliFatal(
"Cells pointer does not exist!");
1918 TObjArray* clusterArray)
1927 Int_t nClusters =
event->GetNumberOfCaloClusters();
1928 if(clusterArray) nClusters = clusterArray->GetEntriesFast();
1930 AliVCluster * clus = 0;
1932 for (Int_t iclus = 0; iclus < nClusters ; iclus++)
1934 if ( clusterArray ) clus = (AliVCluster*) clusterArray->At(iclus) ;
1935 else clus =
event->GetCaloCluster(iclus) ;
1937 if (!clus->IsEMCAL())
continue ;
1944 if ( TMath::Abs(clus->GetTrackDx()) < 500 )
1945 AliDebug(2,Form(
"Residuals (Old, New): z (%2.4f,%2.4f), x (%2.4f,%2.4f)\n",
1946 clus->GetTrackDz(),dZ,clus->GetTrackDx(),dR));
1948 clus->SetTrackDistance(dR,dZ);
1953 if(clus->GetNTracksMatched() > 0)
1955 if(!strcmp(
"AliESDCaloCluster",Form(
"%s",clus->ClassName())))
1957 TArrayI arrayTrackMatched(0);
1958 ((AliESDCaloCluster*)clus)->AddTracksMatched(arrayTrackMatched);
1962 for(Int_t iTrack = 0; iTrack < clus->GetNTracksMatched(); iTrack++)
1964 ((AliAODCaloCluster*)clus)->RemoveTrackMatched((TObject*)((AliAODCaloCluster*)clus)->GetTrackMatched(iTrack));
1973 if ( trackIndex >= 0 )
1975 if(!strcmp(
"AliESDCaloCluster",Form(
"%s",clus->ClassName())))
1977 TArrayI arrayTrackMatched(1);
1978 arrayTrackMatched[0] = trackIndex;
1979 ((AliESDCaloCluster*)clus)->AddTracksMatched(arrayTrackMatched);
1983 ((AliAODCaloCluster*)clus)->AddTrackMatched((TObject*)event->GetTrack(trackIndex));
2005 AliVCluster* cluster,
2006 AliVCaloCells* cells,
2008 AliAODCaloCluster* cluster1,
2009 AliAODCaloCluster* cluster2,
2010 Int_t nMax, Int_t eventNumber)
2012 TH2F* hClusterMap = 0 ;
2013 TH2F* hClusterLocMax = 0 ;
2014 TH2F* hCluster1 = 0 ;
2015 TH2F* hCluster2 = 0 ;
2019 hClusterMap =
new TH2F(
"hClusterMap",
"Cluster Map",48,0,48,24,0,24);
2020 hClusterLocMax =
new TH2F(
"hClusterLocMax",
"Cluster 2 highest local maxima",48,0,48,24,0,24);
2021 hCluster1 =
new TH2F(
"hCluster1",
"Cluster 1",48,0,48,24,0,24);
2022 hCluster2 =
new TH2F(
"hCluster2",
"Cluster 2",48,0,48,24,0,24);
2023 hClusterMap ->SetXTitle(
"column");
2024 hClusterMap ->SetYTitle(
"row");
2025 hClusterLocMax ->SetXTitle(
"column");
2026 hClusterLocMax ->SetYTitle(
"row");
2027 hCluster1 ->SetXTitle(
"column");
2028 hCluster1 ->SetYTitle(
"row");
2029 hCluster2 ->SetXTitle(
"column");
2030 hCluster2 ->SetYTitle(
"row");
2034 if(cluster->IsPHOS())
2037 AliWarning(
"Not supported for PHOS yet");
2041 const Int_t ncells = cluster->GetNCells();
2042 Int_t absIdList[ncells];
2044 Float_t e1 = 0, e2 = 0 ;
2045 Int_t icol = -1, irow = -1, iRCU = -1, sm = -1;
2046 Float_t eCluster = 0;
2047 Float_t minCol = 100, minRow = 100, maxCol = -1, maxRow = -1;
2048 for(Int_t iDigit = 0; iDigit < ncells; iDigit++ )
2050 absIdList[iDigit] = cluster->GetCellsAbsId()[iDigit];
2052 Float_t ec = cells->GetCellAmplitude(absIdList[iDigit]);
2060 if(sm > -1 && sm < 12)
2062 if(icol > maxCol) maxCol = icol;
2063 if(icol < minCol) minCol = icol;
2064 if(irow > maxRow) maxRow = irow;
2065 if(irow < minRow) minRow = irow;
2066 hClusterMap->Fill(icol,irow,ec);
2073 UShort_t absIdList1[9] ;
2074 Double_t fracList1 [9] ;
2075 absIdList1[0] = absId1 ;
2076 fracList1 [0] = 1. ;
2078 Float_t ecell1 = cells->GetCellAmplitude(absId1);
2083 UShort_t absIdList2[9] ;
2084 Double_t fracList2 [9] ;
2085 absIdList2[0] = absId2 ;
2086 fracList2 [0] = 1. ;
2088 Float_t ecell2 = cells->GetCellAmplitude(absId2);
2094 Int_t icol1 = -1, irow1 = -1, icol2 = -1, irow2 = -1;
2096 hClusterLocMax->Fill(icol1,irow1,ecell1);
2098 hClusterLocMax->Fill(icol2,irow2,ecell2);
2102 Float_t eRemain = (eCluster-ecell1-ecell2)/2;
2103 Float_t shareFraction1 = ecell1/eCluster+eRemain/eCluster;
2104 Float_t shareFraction2 = ecell2/eCluster+eRemain/eCluster;
2106 for(Int_t iDigit = 0; iDigit < ncells; iDigit++)
2108 Int_t absId = absIdList[iDigit];
2110 if ( absId==absId1 || absId==absId2 || absId < 0 )
continue;
2112 Float_t ecell = cells->GetCellAmplitude(absId);
2117 absIdList1[ncells1]= absId;
2121 fracList1[ncells1] = shareFraction1;
2122 e1 += ecell*shareFraction1;
2126 fracList1[ncells1] = 1.;
2136 absIdList2[ncells2]= absId;
2140 fracList2[ncells2] = shareFraction2;
2141 e2 += ecell*shareFraction2;
2145 fracList2[ncells2] = 1.;
2154 AliDebug(1,Form(
"N Local Max %d, Cluster energy = %f, Ecell1 = %f, Ecell2 = %f, Enew1 = %f, Enew2 = %f, Remain %f, \n ncells %d, ncells1 %d, ncells2 %d, f1 %f, f2 %f, sum f12 = %f",
2155 nMax, eCluster,ecell1,ecell2,e1,e2,eCluster-e1-e2,ncells,ncells1,ncells2,shareFraction1,shareFraction2,shareFraction1+shareFraction2));
2160 cluster1->SetNCells(ncells1);
2161 cluster2->SetNCells(ncells2);
2163 cluster1->SetCellsAbsId(absIdList1);
2164 cluster2->SetCellsAbsId(absIdList2);
2166 cluster1->SetCellsAmplitudeFraction(fracList1);
2167 cluster2->SetCellsAmplitudeFraction(fracList2);
2182 for(Int_t iDigit = 0; iDigit < ncells1; iDigit++ )
2188 Float_t ecell = cells->GetCellAmplitude(absIdList1[iDigit]);
2191 if(
AreNeighbours(calorimeter, absId2,absIdList1[iDigit]) && absId1!=absIdList1[iDigit])
2192 hCluster1->Fill(icol,irow,ecell*shareFraction1);
2194 hCluster1->Fill(icol,irow,ecell);
2200 for(Int_t iDigit = 0; iDigit < ncells2; iDigit++ )
2206 Float_t ecell = cells->GetCellAmplitude(absIdList2[iDigit]);
2209 if(
AreNeighbours(calorimeter, absId1,absIdList2[iDigit]) && absId2!=absIdList2[iDigit])
2210 hCluster2->Fill(icol,irow,ecell*shareFraction2);
2212 hCluster2->Fill(icol,irow,ecell);
2216 gStyle->SetPadRightMargin(0.1);
2217 gStyle->SetPadLeftMargin(0.1);
2218 gStyle->SetOptStat(0);
2219 gStyle->SetOptFit(000000);
2221 if(maxCol-minCol > maxRow-minRow)
2223 maxRow+= maxCol-minCol;
2227 maxCol+= maxRow-minRow;
2230 TCanvas * c=
new TCanvas(
"canvas",
"canvas", 4000, 4000) ;
2236 hClusterMap ->SetAxisRange(minCol, maxCol,
"X");
2237 hClusterMap ->SetAxisRange(minRow, maxRow,
"Y");
2238 hClusterMap ->Draw(
"colz TEXT");
2243 hClusterLocMax ->SetAxisRange(minCol, maxCol,
"X");
2244 hClusterLocMax ->SetAxisRange(minRow, maxRow,
"Y");
2245 hClusterLocMax ->Draw(
"colz TEXT");
2250 hCluster1 ->SetAxisRange(minCol, maxCol,
"X");
2251 hCluster1 ->SetAxisRange(minRow, maxRow,
"Y");
2252 hCluster1 ->Draw(
"colz TEXT");
2257 hCluster2 ->SetAxisRange(minCol, maxCol,
"X");
2258 hCluster2 ->SetAxisRange(minRow, maxRow,
"Y");
2259 hCluster2 ->Draw(
"colz TEXT");
2261 if(eCluster > 6 )c->Print(Form(
"clusterFigures/Event%d_E%1.0f_nMax%d_NCell1_%d_NCell2_%d.eps",
2262 eventNumber,cluster->E(),nMax,ncells1,ncells2));
2266 delete hClusterLocMax;
Bool_t fRecalculatePosition
Recalculate cluster position.
AliEMCALGeometry * fEMCALGeo
! EMCAL geometry pointer.
void InitPHOSRecalibrationFactors()
Init PHOS recalibration factors.
Bool_t IsRecalculationOfClusterTrackMatchingOn() const
TGeoHMatrix * fEMCALMatrix[22]
Geometry matrices with alignments.
Int_t GetPHOSChannelStatus(Int_t imod, Int_t iCol, Int_t iRow) const
Float_t fLocMaxCutEDiff
Local maxima cut, when aggregating cells, next can be a bit higher.
TGeoHMatrix * fPHOSMatrix[5]
Geometry matrices with alignments.
Bool_t ClusterContainsBadChannel(Int_t calo, UShort_t *cellList, Int_t nCells)
AliPHOSGeoUtils * fPHOSGeo
! PHOS geometry pointer.
AliEMCALRecoUtils * GetEMCALRecoUtils() const
void SetEMCALL1PhaseInTimeRecalibrationForAllSM(TObjArray *map)
void SwitchOnDistToBadChannelRecalculation()
AliPHOSGeoUtils * GetPHOSGeometry() const
Bool_t fOADBForEMCAL
Get calibration from OADB for EMCAL.
Float_t GetPHOSChannelRecalibrationFactor(Int_t imod, Int_t iCol, Int_t iRow) const
void RecalculateClusterTrackMatching(AliVEvent *event, TObjArray *clusterArray=0x0)
Float_t fLocMaxCutE
Local maxima cut must have more than this energy.
Float_t GetMCECellClusFracCorrection(Float_t eCell, Float_t eCluster) const
void SetEMCALChannelStatusMap(Int_t iSM, TH2I *h)
Bool_t fRunDependentCorrection
Switch on or off the recalibration dependent on T.
TObjArray * fPHOSRecalibrationFactors
Array of histograms with map of recalibration factors, PHOS.
TString fEMCALGeoName
Name of geometry to use for EMCAL.
TH2F * GetEMCALChannelRecalibrationFactors(Int_t iSM) const
Bool_t fRecalibration
Switch on or off the recalibration.
Float_t GetEMCALChannelRecalibrationFactor(Int_t iSM, Int_t iCol, Int_t iRow) const
TH1F * GetEMCALChannelTimeRecalibrationFactors(Int_t bc) const
const TString calorimeter
Int_t fDebug
Debugging level.
TH1C * GetEMCALL1PhaseInTimeRecalibrationForAllSM() const
Bool_t IsRecalibrationOn() const
Bool_t IsMCParticleInCalorimeterAcceptance(Int_t calo, TParticle *particle)
virtual void Print(const Option_t *opt) const
Print some relevant parameters set for the analysis.
Int_t GetModuleNumber(AliAODPWG4Particle *particle, AliVEvent *inputEvent) const
Get the EMCAL/PHOS module number that corresponds to this particle.
Bool_t fLoadEMCALMatrices
Matrices set from configuration, not get from geometry.root or from ESDs/AODs.
AliEMCALGeometry * GetEMCALGeometry() const
Bool_t IsL1PhaseInTimeRecalibrationOn() const
Bool_t fRecalculateMatching
Recalculate cluster position.
Bool_t MaskFrameCluster(Int_t iSM, Int_t ieta) const
Bool_t fOADBForPHOS
Get calibration from OADB for PHOS.
Int_t * fMaskCellColumns
List of masked cells collumn index.
Bool_t fRemoveBadChannels
Check the channel status provided and remove clusters with bad channels.
void InitPHOSBadChannelStatusMap()
Init PHOS bad channels map.
virtual ~AliCalorimeterUtils()
AliCalorimeterUtils()
Constructor. Initialize parameters.
virtual void InitParameters()
Initialize the parameters of the analysis.
Int_t fNMaskCellColumns
Number of masked columns.
Bool_t IsClusterSharedByTwoSuperModules(const AliEMCALGeometry *geom, AliVCluster *cluster)
Int_t GetNumberOfLocalMaxima(AliVCluster *cluster, AliVCaloCells *cells)
Find the number of local maxima in cluster.
Float_t fMCECellClusFracCorrParam[4]
Parameters for the function correcting the weight of the cells in the cluster.
Bool_t fEMCALGeoMatrixSet
Check if the transformation matrix is set for EMCAL.
TH2I * GetPHOSChannelStatusMap(Int_t imod) const
void SetEMCALChannelRecalibrationFactor(Int_t iSM, Int_t iCol, Int_t iRow, Double_t c=1)
TString GetPass()
Get passx from filename.
void RecalculateClusterPosition(AliVCaloCells *cells, AliVCluster *clu)
Bool_t fImportGeometryFromFile
Import geometry settings in geometry.root file.
Bool_t fCorrectELinearity
Correct cluster energy linearity.
Bool_t fPHOSGeoMatrixSet
Check if the transformation matrix is set for PHOS.
TString fOADBFilePathPHOS
Default path $ALICE_PHYSICS/OADB/PHOS, if needed change.
void CorrectClusterEnergy(AliVCluster *cl)
Correct cluster energy non linearity.
Float_t fCutZ
dZ cut on matching (EMCAL/PHOS).
Bool_t fLoadPHOSMatrices
Matrices set from configuration, not get from geometry.root or from ESDs/AODs.
void SetPHOSChannelStatusMap(Int_t imod, TH2I *h)
Int_t fNCellsFromPHOSBorder
Number of cells from PHOS border the cell with maximum amplitude has to be.
AliVTrack * GetMatchedTrack(AliVCluster *cluster, AliVEvent *event, Int_t index=-1) const
void RecalibrateCellTimeL1Phase(Double_t &time, Int_t calo, Int_t iSM, Int_t bunchCrossNumber) const
Recalculate time L1 phase shift if time recalibration available for EMCAL.
Bool_t fMCECellClusFracCorrOn
Correct or not the weight of cells in cluster.
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
Int_t fNSuperModulesUsed
Number of supermodules to be used in analysis, can be different than the real geo, to be used at initialization of histograms.
TString fImportGeometryFilePath
Path fo geometry.root file.
Bool_t fPlotCluster
Plot cluster in splitting method.
Int_t fRunNumber
Run number of the data, take it from data itself unless set by user.
void RecalibrateCellAmplitude(Float_t &, Int_t calo, Int_t absId) const
Recalculate cell energy if recalibration factor.
void SetEMCALChannelTimeRecalibrationFactors(TObjArray *map)
Bool_t IsPHOSGeoMatrixSet() const
Bool_t IsTimeRecalibrationOn() const
Bool_t fOADBSet
AODB parameters already set.
TObjArray * fPHOSBadChannelMap
Array of histograms with map of bad channels, PHOS.
TString fPHOSGeoName
Name of geometry to use for PHOS.
Bool_t AreNeighbours(Int_t calo, Int_t absId1, Int_t absId2) const
Int_t GetEMCALChannelStatus(Int_t iSM, Int_t iCol, Int_t iRow) const
Bool_t IsEMCALGeoMatrixSet() const
Class with utils specific to calorimeter clusters/cells.
void AccessGeometry(AliVEvent *inputEvent)
AliEMCALRecoUtils * fEMCALRecoUtils
EMCAL utils for cluster rereconstruction.
void SetEMCALChannelRecalibrationFactors(Int_t iSM, TH2F *h)
void AccessOADB(AliVEvent *event)
TString fOADBFilePathEMCAL
Default path $ALICE_PHYSICS/OADB/EMCAL, if needed change.
void RecalibrateCellTime(Double_t &time, Int_t calo, Int_t absId, Int_t bunchCrossNumber) const
Recalculate time if time recalibration available for EMCAL not ready for PHOS.
Int_t GetMaxEnergyCell(AliVCaloCells *cells, AliVCluster *clu, Float_t &fraction) const
For a given CaloCluster, it gets the absId of the cell with maximum energy deposit.
Float_t fCutR
dR cut on matching (PHOS).
Float_t RecalibrateClusterEnergyWeightCell(AliVCluster *cluster, AliVCaloCells *cells, Float_t energyOrg)
void SplitEnergy(Int_t absId1, Int_t absId2, AliVCluster *cluster, AliVCaloCells *cells, AliAODCaloCluster *cluster1, AliAODCaloCluster *cluster2, Int_t nMax, Int_t eventNumber=0)
Int_t GetModuleNumberCellIndexes(Int_t absId, Int_t calo, Int_t &icol, Int_t &irow, Int_t &iRCU) const
Get the EMCAL/PHOS module, columns, row and RCU/DDL number that corresponds to this absId...
TH2I * GetEMCALChannelStatusMap(Int_t iSM) const
void SetPHOSChannelRecalibrationFactor(Int_t imod, Int_t iCol, Int_t iRow, Double_t c=1)
Float_t RecalibrateClusterEnergy(AliVCluster *cluster, AliVCaloCells *cells)
Recalibrate the cluster energy, considering the recalibration map and the energy of the cells that co...
void GetEMCALSubregion(AliVCluster *clus, AliVCaloCells *cells, Int_t ®Eta, Int_t ®Phi) const
Bool_t CheckCellFiducialRegion(AliVCluster *cluster, AliVCaloCells *cells) const
Int_t GetModuleNumberCellIndexesAbsCaloMap(Int_t absId, Int_t calo, Int_t &icol, Int_t &irow, Int_t &iRCU, Int_t &icolAbs, Int_t &irowAbs) const