17 #include <TObjArray.h>
18 #include <TDatabasePDG.h>
20 #include <TObjString.h>
25 #include "AliVCaloCells.h"
27 #include "AliVCluster.h"
28 #include "AliVTrack.h"
29 #include "AliVEvent.h"
30 #include "AliMCEvent.h"
31 #include "AliVEventHandler.h"
32 #include "AliVParticle.h"
37 #include "AliPHOSGeoUtils.h"
38 #include "AliEMCALGeometry.h"
52 fFillAllCellTimeHisto(kTRUE),
53 fFillAllPosHisto(kFALSE), fFillAllPosHisto2(kFALSE),
55 fFillAllTMHisto(kTRUE), fFillClusterMaxCellHisto(kFALSE),
56 fFillAllPi0Histo(kTRUE), fFillInvMassOpenAngle(kFALSE),
57 fFillPi0PairDiffTime(kFALSE), fFillInvMassInEMCALWithPHOSDCalAcc(kFALSE),
58 fFillEBinAcceptanceHisto(kFALSE), fFillAllClusterHistograms(kTRUE),
59 fFillAllCellHistograms(kTRUE), fFillAllCellAbsIdHistograms(kTRUE),
60 fCorrelate(kTRUE), fStudyBadClusters(kFALSE),
63 fTimeCutMin(-10000), fTimeCutMax(10000),
65 fEMCALCellAmpMin(0), fPHOSCellAmpMin(0),
66 fEMCALClusterM02Min(0),
67 fEMCALClusterNCellMin(0), fPHOSClusterNCellMin(0),
71 fInvMassMinECut(0), fInvMassMaxECut(0),
72 fInvMassMinM02Cut(0), fInvMassMaxM02Cut(0),
73 fInvMassMaxOpenAngle(0), fInvMassMaxTimeDifference(0),
75 fClusterMomentum(), fClusterMomentum2(),
77 fConstantTimeShift(0),
82 fhEtaPhi(0), fhEtaPhiE(0),
83 fhECharged(0), fhPtCharged(0),
84 fhPhiCharged(0), fhEtaCharged(0),
85 fhEtaPhiCharged(0), fhEtaPhiECharged(0),
88 fhIM(0), fhIMSame(0), fhIMDiff(0),
89 fhIMDCAL(0), fhIMDCALSame(0), fhIMDCALDiff(0),
90 fhIMDCALPHOS(0), fhIMDCALPHOSSame(0),
91 fhIMEMCALPHOS(0), fhIMEMCALPHOSSame(0),
93 fhOpAngle(0), fhIMvsOpAngle(0),
94 fhNCellsPerCluster(0), fhNCellsPerClusterNoCut(0),
98 fhClusterTimeEnergy(0), fhCellTimeSpreadRespectToCellMax(0),
99 fhCellIdCellLargeTimeSpread(0), fhClusterPairDiffTimeE(0), fhClusterPairDiffTimeESameMod(0),
100 fhClusterMaxCellCloseCellRatio(0), fhClusterMaxCellCloseCellDiff(0),
101 fhClusterMaxCellDiff(0), fhClusterMaxCellDiffNoCut(0),
103 fhClusterMaxCellECross(0),
105 fhLambda0(0), fhLambda1(0), fhNLocMax(0),
108 fhBadClusterEnergy(0), fhBadClusterTimeEnergy(0), fhBadClusterEtaPhi(0),
109 fhBadClusterPairDiffTimeE(0), fhBadCellTimeSpreadRespectToCellMax(0),
110 fhBadClusterMaxCellCloseCellRatio(0), fhBadClusterMaxCellCloseCellDiff(0), fhBadClusterMaxCellDiff(0),
112 fhBadClusterMaxCellECross(0),
113 fhBadClusterLambda0(0), fhBadClusterLambda1(0),
116 fhRNCells(0), fhXNCells(0),
117 fhYNCells(0), fhZNCells(0),
121 fhRCellE(0), fhXCellE(0),
122 fhYCellE(0), fhZCellE(0),
124 fhDeltaCellClusterRNCells(0), fhDeltaCellClusterXNCells(0),
125 fhDeltaCellClusterYNCells(0), fhDeltaCellClusterZNCells(0),
126 fhDeltaCellClusterRE(0), fhDeltaCellClusterXE(0),
127 fhDeltaCellClusterYE(0), fhDeltaCellClusterZE(0),
130 fhNCells(0), fhNCellsCutAmpMin(0),
131 fhAmplitude(0), fhAmpId(0),
132 fhEtaPhiAmpCell(0), fhEtaPhiCell(0),
134 fhTimeId(0), fhTimeL1UnCorrId(0), fhTimeAmp(0),
135 fhAmpIdLowGain(0), fhTimeIdLowGain(0), fhTimeAmpLowGain(0),
139 fhEMCALPHOSCorrNClusters(0), fhEMCALPHOSCorrEClusters(0),
140 fhEMCALPHOSCorrNCells(0), fhEMCALPHOSCorrECells(0),
141 fhEMCALDCALCorrNClusters(0), fhEMCALDCALCorrEClusters(0),
142 fhEMCALDCALCorrNCells(0), fhEMCALDCALCorrECells(0),
143 fhDCALPHOSCorrNClusters(0), fhDCALPHOSCorrEClusters(0),
144 fhDCALPHOSCorrNCells(0), fhDCALPHOSCorrECells(0),
145 fhCaloV0SCorrNClusters(0), fhCaloV0SCorrEClusters(0),
146 fhCaloV0SCorrNCells(0), fhCaloV0SCorrECells(0),
147 fhCaloV0MCorrNClusters(0), fhCaloV0MCorrEClusters(0),
148 fhCaloV0MCorrNCells(0), fhCaloV0MCorrECells(0),
149 fhCaloTrackMCorrNClusters(0), fhCaloTrackMCorrEClusters(0),
150 fhCaloTrackMCorrNCells(0), fhCaloTrackMCorrECells(0),
151 fhCaloCenNClusters(0), fhCaloCenEClusters(0),
152 fhCaloCenNCells(0), fhCaloCenECells(0),
153 fhCaloEvPNClusters(0), fhCaloEvPEClusters(0),
154 fhCaloEvPNCells(0), fhCaloEvPECells(0),
157 fhEMod(0), fhAmpMod(0),
158 fhEWeirdMod(0), fhAmpWeirdMod(0),
160 fhNClustersMod(0), fhNCellsMod(0),
161 fhNCellsSumAmpPerMod(0), fhNClustersSumEnergyPerMod(0),
162 fhNCellsPerClusterMod(0), fhNCellsPerClusterModNoCut(0),
163 fhNCellsPerClusterWeirdMod(0), fhNCellsPerClusterWeirdModNoCut(0),
165 fhGridCells(0), fhGridCellsE(0), fhGridCellsTime(0),
166 fhGridCellsLowGain(0), fhGridCellsELowGain(0), fhGridCellsTimeLowGain(0),
167 fhTimeAmpPerRCU(0), fhIMMod(0),
170 fhRecoMCE(), fhRecoMCPhi(), fhRecoMCEta(),
171 fhRecoMCDeltaE(), fhRecoMCRatioE(),
172 fhRecoMCDeltaPhi(), fhRecoMCDeltaEta(),
175 fhGenMCE(), fhGenMCPt(), fhGenMCEtaPhi(),
176 fhGenMCAccE(), fhGenMCAccPt(), fhGenMCAccEtaPhi(),
179 fhEMVxyz(0), fhEMR(0),
180 fhHaVxyz(0), fhHaR(0),
181 fh1EOverP(0), fh2dR(0),
182 fh2EledEdx(0), fh2MatchdEdx(0),
183 fh1EOverPR02(0), fh1EleEOverP(0),
184 fhMCEle1EOverP(0), fhMCEle1dR(0), fhMCEle2MatchdEdx(0),
185 fhMCChHad1EOverP(0), fhMCChHad1dR(0), fhMCChHad2MatchdEdx(0),
186 fhMCNeutral1EOverP(0), fhMCNeutral1dR(0), fhMCNeutral2MatchdEdx(0),
187 fhMCEle1EOverPR02(0), fhMCChHad1EOverPR02(0), fhMCNeutral1EOverPR02(0),
188 fhMCEle1EleEOverP(0), fhMCChHad1EleEOverP(0), fhMCNeutral1EleEOverP(0),
189 fhTrackMatchedDEtaNeg(0), fhTrackMatchedDPhiNeg(0), fhTrackMatchedDEtaDPhiNeg(0),
190 fhTrackMatchedDEtaPos(0), fhTrackMatchedDPhiPos(0), fhTrackMatchedDEtaDPhiPos(0),
191 fhTrackMatchedDEtaNegMod(0), fhTrackMatchedDPhiNegMod(0),
192 fhTrackMatchedDEtaPosMod(0), fhTrackMatchedDPhiPosMod(0)
196 for(
Int_t i = 0; i < 7; i++)
207 for(
Int_t i = 0; i < 4; i++)
219 for(
Int_t i = 0; i < 14; i++)
264 if(phi < 0) phi += TMath::TwoPi();
275 for(
Int_t iclus2 = 0; iclus2 < caloClusters->GetEntriesFast(); iclus2++ )
277 AliVCluster* clus2 = (AliVCluster*) caloClusters->At(iclus2);
279 if(clus->GetID() == clus2->GetID())
continue;
284 if(
IsGoodCluster(absIdMax2, clus->GetM02(), clus->GetNCells(), cells) && clus2->GetM02() > 0.1 )
286 Double_t tof2 = clus2->GetTOF()*1.e9;
307 for (
Int_t ipos = 0; ipos < clus->GetNCells(); ipos++)
309 Int_t absId = clus->GetCellsAbsId()[ipos];
310 if(absId!=absIdMax && cells->GetCellAmplitude(absIdMax) > 0.01)
312 Float_t frac = cells->GetCellAmplitude(absId)/cells->GetCellAmplitude(absIdMax);
319 Double_t time = cells->GetCellTime(absId);
338 AliVCaloCells* cells,
346 for (
Int_t ipos = 0; ipos < clus->GetNCells(); ipos++)
348 Int_t id = clus->GetCellsAbsId()[ipos];
351 amp = cells->GetCellAmplitude(
id);
370 Int_t ncells = clus->GetNCells();
372 for (
Int_t ipos = 0; ipos < ncells; ipos++)
374 id = clus ->GetCellsAbsId()[ipos];
375 amp = cells->GetCellAmplitude(
id);
376 time = cells->GetCellTime(
id);
384 wTime += time*1e9 * w;
388 if(ncells > 0) aTime /= ncells;
391 if(wTot > 0) wTime /= wTot;
394 timeAverages[0] = aTime;
395 timeAverages[1] = wTime;
406 Int_t ncells = cells->GetNumberOfCells();
420 nCellsInModule[imod] = 0 ;
421 eCellsInModule[imod] = 0.;
424 Int_t icol = -1, icolAbs = -1;
425 Int_t irow = -1, irowAbs = -1;
435 for (
Int_t iCell = 0; iCell < cells->GetNumberOfCells(); iCell++)
437 if ( cells->GetCellNumber(iCell) < 0 )
continue;
439 AliDebug(2,Form(
"Cell : amp %f, absId %d", cells->GetAmplitude(iCell), cells->GetCellNumber(iCell)));
445 if ( nModule < fFirstModule || nModule >
fLastModule )
447 AliDebug(1,Form(
"Cell module out of range %d",nModule));
451 AliDebug(2,Form(
"\t module %d, column %d (%d), row %d (%d)", nModule,icolAbs,icol,irowAbs,irow));
458 if(
GetCaloUtils()->GetEMCALChannelStatus(nModule,icol,irow))
continue;
462 if(
GetCaloUtils()->GetPHOSChannelStatus(nModule,icol,irow) )
continue;
466 amp = cells->GetAmplitude(iCell)*recalF;
467 time = cells->GetTime(iCell);
468 id = cells->GetCellNumber(iCell);
469 highG = cells->GetCellHighGain(
id);
483 timeL1UnCorr *= 1.0e9;
488 AliDebug(1,Form(
"Remove cell with Time %f",time));
494 GetCaloUtils()->GetEMCALRecoUtils()->IsExoticCell(
id, cells, bc))
continue;
497 if(amp>=10)binWidthCorrection=1.0/4;
498 if(amp>=20)binWidthCorrection=1.0/10;
531 nCellsInModule[nModule]++ ;
590 if ( cellphi < 0 ) cellphi+=TMath::TwoPi();
604 Float_t rcell = TMath::Sqrt(cellpos[0]*cellpos[0]+cellpos[1]*cellpos[1]);
612 Int_t relId[4], module;
620 Float_t rcell = TMath::Sqrt(xyz.X()*xyz.X()+xyz.Y()*xyz.Y());
640 if ( imod < fFirstModule || imod >
fLastModule ) continue ;
642 AliDebug(1,Form(
"Module %d, calo %s, N cells %d, sum Amp %f", imod,
GetCalorimeterString().
Data(), nCellsInModule[imod], eCellsInModule[imod]));
651 delete [] nCellsInModule;
652 delete [] eCellsInModule;
661 Int_t nCaloCellsPerCluster = clus->GetNCells();
663 UShort_t * indexList = clus->GetCellsAbsId();
666 clus->GetPosition(pos);
671 for (
Int_t ipos = 0; ipos < nCaloCellsPerCluster; ipos++)
674 Int_t absId = indexList[ipos];
691 Float_t r = TMath::Sqrt(pos[0] *pos[0] + pos[1] * pos[1] );
692 Float_t rcell = TMath::Sqrt(cellpos[0]*cellpos[0] + cellpos[1]* cellpos[1]);
700 Int_t relId[4], module;
716 Float_t r = TMath::Sqrt(pos[0] * pos[0] + pos[1] * pos[1] );
717 Float_t rcell = TMath::Sqrt(xyz.X() * xyz.X() + xyz.Y() * xyz.Y());
755 Int_t nCaloCellsPerCluster = clus->GetNCells();
760 for(
Int_t iclus2 = 0; iclus2 < caloClusters->GetEntriesFast(); iclus2++ )
762 AliVCluster* clus2 = (AliVCluster*) caloClusters->At(iclus2);
764 if( clus->GetID() == clus2->GetID() )
continue;
766 if( clus->GetM02() > 0.01 && clus2->GetM02() > 0.01 )
770 Double_t tof2 = clus2->GetTOF()*1.e9;
776 if ( nModule2 == nModule )
782 if(nCaloCellsPerCluster > 1 &&
797 for (
Int_t ipos = 0; ipos < nCaloCellsPerCluster; ipos++)
799 Int_t absId = clus->GetCellsAbsId()[ipos];
800 if( absId == absIdMax || cells->GetCellAmplitude(absIdMax) < 0.01 )
continue;
802 Float_t frac = cells->GetCellAmplitude(absId)/cells->GetCellAmplitude(absIdMax);
812 Double_t time = cells->GetCellTime(absId);
821 TMath::Abs(TMath::Abs(diff) > 100) && clus->E() > 1 )
833 AliDebug(1,Form(
"cluster: E %2.3f, pT %2.3f, eta %2.3f, phi %2.3f",e,pt,eta,phi*TMath::RadToDeg()));
848 Int_t icol = -1, irow = -1, iRCU = -1, icolAbs = -1, irowAbs = -1;
874 clus->GetPosition(pos);
886 Float_t rxyz = TMath::Sqrt(pos[0]*pos[0]+pos[1]*pos[1]);
909 AliVCaloCells* cells)
915 Int_t nCaloClusters = caloClusters->GetEntriesFast() ;
916 Int_t nCaloClustersAccepted = 0 ;
917 Int_t nCaloCellsPerCluster = 0 ;
930 nClustersInModule[imod] = 0;
931 energyInModule [imod] = 0;
937 for(
Int_t iclus = 0; iclus < nCaloClusters; iclus++)
939 AliDebug(1,Form(
"Cluster: %d/%d, data %d",iclus+1,nCaloClusters,
GetReader()->GetDataType()));
941 AliVCluster* clus = (AliVCluster*) caloClusters->At(iclus);
945 if ( nModule < fFirstModule || nModule >
fLastModule )
947 AliDebug(1,Form(
"Cluster module out of range %d",nModule));
961 AliDebug(1,Form(
"Remove cluster with TOF %2.2f",tof));
973 AliDebug(1,Form(
"Remove cluster with phi %2.2f and eta %2.2f",
979 nLabel = clus->GetNLabels();
980 labels = clus->GetLabels();
983 nCaloCellsPerCluster = clus->GetNCells();
989 Double_t tmax = cells->GetCellTime(absIdMax);
1002 if(nModule >=0 && nModule < fNModules)
1012 Float_t ampMax = cells->GetCellAmplitude(absIdMax);
1016 Bool_t goodCluster =
IsGoodCluster(absIdMax, clus->GetM02(), nCaloCellsPerCluster, cells);
1021 AliDebug(1,Form(
"Accept cluster? %d",goodCluster));
1034 maxCellFraction, eCrossFrac, tmax);
1036 nCaloClustersAccepted++;
1041 nClustersInModule[nModule]++;
1043 energyInModule [nModule] += clus->E();
1050 Int_t mcOK = kFALSE;
1052 if(
IsDataMC() && nLabel > 0 && labels)
1064 && nCaloClusters > 1
1065 && nCaloCellsPerCluster > 1
1066 &&
GetCaloUtils()->GetNumberOfLocalMaxima(clus,cells) == 1
1082 if ( imod < fFirstModule || imod >
fLastModule ) continue ;
1084 AliDebug(1,Form(
"Module %d calo %s clusters %d, sum E %f", imod,
GetCalorimeterString().
Data(), nClustersInModule[imod], energyInModule[imod]));
1092 delete [] nClustersInModule;
1093 delete [] energyInModule;
1109 if(!labels || nLabels<=0)
1111 AliWarning(Form(
"Strange, labels array %p, n labels %d", labels,nLabels));
1115 AliDebug(1,Form(
"Primaries: nlabels %d",nLabels));
1118 Int_t label = labels[0];
1122 AliDebug(1,Form(
" *** bad label ***: label %d", label));
1126 if( label >=
GetMC()->GetNumberOfTracks())
1128 AliDebug(1,Form(
"*** large label ***: label %d, n tracks %d", label,
GetMC()->GetNumberOfTracks()));
1135 if(phi < 0) phi +=TMath::TwoPi();
1137 AliVParticle * primary = 0x0;
1150 primary =
GetMC()->GetTrack(label);
1152 pdg0 = TMath::Abs(primary->PdgCode());
1154 status = primary->MCStatusCode();
1155 vxMC = primary->Xv();
1156 vyMC = primary->Yv();
1157 iParent = primary->GetMother();
1159 AliDebug(1,
"Cluster most contributing mother:");
1160 AliDebug(1,Form(
"\t Mother label %d, pdg %d, %s, status %d, Primary? %d, Physical Primary? %d, parent %d",
1161 iMother, pdg0, primary->GetName(),status, primary->IsPrimary(), primary->IsPhysicalPrimary(), iParent));
1167 primary =
GetMC()->GetTrack(iParent);
1168 pdg = TMath::Abs(primary->PdgCode());
1170 AliDebug(2,
"Converted cluster!. Find before conversion:");
1172 while((pdg == 22 || pdg == 11) && status != 1)
1174 Int_t iMotherOrg = iMother;
1176 primary =
GetMC()->GetTrack(iMother);
1177 status = primary->MCStatusCode();
1178 pdg = TMath::Abs(primary->PdgCode());
1179 iParent = primary->GetMother();
1183 if(pdg==111 || pdg==221)
1185 primary =
GetMC()->GetTrack(iMotherOrg);
1195 AliDebug(2,Form(
"\t pdg %d, index %d, %s, status %d",pdg, iMother, primary->GetName(),status));
1198 AliDebug(1,
"Converted Cluster mother before conversion:");
1199 AliDebug(1,Form(
"\t Mother label %d, pdg %d, %s, status %d, Primary? %d, Physical Primary? %d, parent %d",
1200 iMother, pdg, primary->GetName(), status, primary->IsPrimary(), primary->IsPhysicalPrimary(), iParent));
1208 AliDebug(2,
"Overlapped Meson decay!, Find it:");
1210 while(pdg != 111 && pdg != 221)
1214 primary =
GetMC()->GetTrack(iMother);
1215 status = primary->MCStatusCode();
1216 pdg = TMath::Abs(primary->PdgCode());
1217 iParent = primary->GetMother();
1219 if( iParent < 0 )
break;
1221 AliDebug(2,Form(
"\t pdg %d, %s, index %d",pdg, primary->GetName(),iMother));
1225 AliWarning(
"Tagged as Overlapped photon but meson not found, why?");
1230 AliDebug(2,Form(
"Overlapped %s decay, label %d",primary->GetName(),iMother));
1235 phiMC = primary->Phi();
1236 etaMC = primary->Eta();
1237 pdg = TMath::Abs(primary->PdgCode());
1239 charge = primary->Charge();
1243 Float_t rVMC = TMath::Sqrt(vxMC*vxMC + vyMC*vyMC);
1244 if( ( pdg == 22 || TMath::Abs(pdg) == 11 ) && status != 1 )
1277 else if(charge == 0)
1292 if( mcIndex >= 0 && mcIndex < 7 && e > 0.5 && eMC > 0.5)
1303 if( primary )
return kTRUE ;
1319 if(phi < 0) phi +=TMath::TwoPi();
1337 Double_t dedx = track->GetTPCsignal();
1338 Int_t nITS = track->GetNcls(0);
1339 Int_t nTPC = track->GetNcls(1);
1340 Bool_t positive = kFALSE;
1341 if(track) positive = (track->Charge()>0);
1344 Float_t deta = clus->GetTrackDz();
1345 Float_t dphi = clus->GetTrackDx();
1346 Double_t dR = TMath::Sqrt(dphi*dphi + deta*deta);
1349 if( TMath::Abs(dphi) < 999 )
1386 if(dedx > 60 && dedx < 100)
1396 if(e > 0.5 && tmom > 0.5)
1402 if(dR < 0.02 && eOverP > 0.6 && eOverP < 1.2
1403 && clus->GetNCells() > 1 && nITS > 3 && nTPC > 20)
1411 Double_t charge = TDatabasePDG::Instance()->GetParticle(pdg)->Charge();
1413 if(TMath::Abs(pdg) == 11)
1437 else if(charge == 0)
1462 if(!caloClustersEMCAL || !caloClustersPHOS)
1464 AliDebug(1,Form(
"PHOS (%p) or EMCAL (%p) clusters array not available, do not correlate",caloClustersPHOS,caloClustersEMCAL));
1472 if(!cellsEMCAL || !cellsPHOS)
1474 AliDebug(1,Form(
"PHOS (%p) or EMCAL (%p) cells array ot available, do not correlate",cellsPHOS,cellsEMCAL));
1483 Float_t sumClusterEnergyEMCAL = 0;
1484 Float_t sumClusterEnergyDCAL = 0;
1485 Float_t sumClusterEnergyPHOS = 0;
1489 AliVCluster* cluster = 0;
1490 for(iclus = 0 ; iclus < caloClustersEMCAL->GetEntriesFast() ; iclus++)
1492 cluster = (AliVCluster*)caloClustersEMCAL->At(iclus);
1493 Float_t energy = cluster->E();
1495 if( energy < 0.5 )
continue;
1497 if(cluster->GetCellsAbsId()[0] < 12288)
1500 sumClusterEnergyEMCAL +=
energy;
1505 sumClusterEnergyDCAL +=
energy;
1509 for(iclus = 0 ; iclus < caloClustersPHOS ->GetEntriesFast(); iclus++)
1511 cluster = (AliVCluster*) caloClustersPHOS->At(iclus);
1513 energy = cluster->E();
1515 if( energy < 0.5 )
continue;
1518 sumClusterEnergyPHOS +=
energy;
1522 Int_t ncellsEMCAL = 0 ;
1523 Int_t ncellsDCAL = 0 ;
1524 Int_t ncellsPHOS = 0;
1526 Float_t sumCellEnergyEMCAL = 0;
1527 Float_t sumCellEnergyDCAL = 0;
1528 Float_t sumCellEnergyPHOS = 0;
1530 for(icell = 0 ; icell < cellsEMCAL->GetNumberOfCells() ; icell++)
1532 Float_t amp = cellsEMCAL->GetAmplitude(icell);
1533 Int_t cellId = cellsEMCAL->GetCellNumber(icell);
1540 sumCellEnergyEMCAL += amp;
1545 sumCellEnergyDCAL += amp;
1549 for(icell = 0 ; icell < cellsPHOS->GetNumberOfCells(); icell++)
1551 Float_t amp = cellsPHOS->GetAmplitude(icell);
1552 Int_t cellId = cellsPHOS->GetCellNumber(icell);
1554 if ( cellId < 0 ) continue ;
1559 sumCellEnergyPHOS += amp;
1585 Int_t ncl = nclPHOS;
1586 Float_t sumClusterEnergy = sumClusterEnergyPHOS;
1587 Int_t ncells = ncellsPHOS;
1588 Float_t sumCellEnergy = sumCellEnergyPHOS;
1592 ncl = nclEMCAL + nclDCAL;
1593 sumClusterEnergy = sumClusterEnergyEMCAL + sumClusterEnergyDCAL;
1594 ncells = ncellsEMCAL + ncellsDCAL;
1595 sumCellEnergy = sumCellEnergyEMCAL + sumCellEnergyDCAL;
1623 AliDebug(1,
"Correlate():");
1624 AliDebug(1,Form(
"\t EMCAL: N cells %d, N clusters %d, summed E cells %f, summed E clusters %f",
1625 ncellsEMCAL,nclEMCAL, sumCellEnergyEMCAL,sumClusterEnergyEMCAL));
1626 AliDebug(1,Form(
"\t DCAL : N cells %d, N clusters %d, summed E cells %f, summed E clusters %f",
1627 ncellsDCAL,nclDCAL, sumCellEnergyDCAL,sumClusterEnergyDCAL));
1628 AliDebug(1,Form(
"\t PHOS : N cells %d, N clusters %d, summed E cells %f, summed E clusters %f",
1629 ncellsPHOS,nclPHOS,sumCellEnergyPHOS,sumClusterEnergyPHOS));
1630 AliDebug(1,Form(
"\t V0 : Signal %d, Multiplicity %d, Track Multiplicity %d", v0S,v0M,trM));
1631 AliDebug(1,Form(
"\t centrality : %f, Event plane angle %f", cen,ep));
1640 const Int_t buffersize = 255;
1641 char onePar[buffersize] ;
1643 snprintf(onePar,buffersize,
"--- AliAnaCalorimeterQA ---:") ;
1670 return new TObjString(parList) ;
1680 outputContainer->SetName(
"QAHistos") ;
1732 Float_t rowcellmin = fNMaxRowsFullMin-1.5;
1743 fhE =
new TH1F (
"hE",
"#it{E} reconstructed clusters ", nptbins*5,ptmin,ptmax*5);
1744 fhE->SetXTitle(
"#it{E} (GeV)");
1745 outputContainer->Add(
fhE);
1747 fhPt =
new TH1F (
"hPt",
"#it{p}_{T} reconstructed clusters", nptbins,ptmin,ptmax);
1748 fhPt->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1749 outputContainer->Add(
fhPt);
1751 fhNClusters =
new TH1F (
"hNClusters",
"# clusters", nclbins,nclmin,nclmax);
1755 fhNCellsPerCluster =
new TH2F (
"hNCellsPerCluster",
"# cells per cluster vs energy",nptbins,ptmin,ptmax, nceclbins,nceclmin,nceclmax);
1761 nceclbins*2,nceclmin,nceclmax*2,totalSM,fFirstModule-0.5,
fLastModule+0.5);
1768 fhPhi =
new TH1F (
"hPhi",
"#varphi reconstructed clusters ",nphibins,phimin,phimax);
1769 fhPhi->SetXTitle(
"#varphi (rad)");
1770 outputContainer->Add(
fhPhi);
1772 fhEta =
new TH1F (
"hEta",
"#eta reconstructed clusters ",netabins,etamin,etamax);
1773 fhEta->SetXTitle(
"#eta ");
1774 outputContainer->Add(
fhEta);
1781 (Form(
"hEBin%d_Cluster_EtaPhi",ie),
1782 Form(
"#eta vs #varphi, cluster, %2.2f<#it{p}_{T}<%2.2f GeV/#it{c}",
fEBinCuts[ie],
fEBinCuts[ie+1]),
1783 netabins,etamin,etamax,nphibins,phimin,phimax);
1789 (Form(
"hEBin%d_Cluster_ColRow",ie),
1790 Form(
"column vs row, cluster max E cell, %2.2f<#it{p}_{T}<%2.2f GeV/#it{c}",
fEBinCuts[ie],
fEBinCuts[ie+1]),
1791 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
1799 (Form(
"hEBin%d_Cell_ColRow",ie),
1800 Form(
"column vs row, cell, %2.2f<#it{p}_{T}<%2.2f GeV/#it{c}",
fEBinCuts[ie],
fEBinCuts[ie+1]),
1801 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
1812 fhEtaPhiE =
new TH3F (
"hEtaPhiE",
"#eta vs #varphi vs energy, reconstructed clusters",
1813 netabins,etamin,etamax,nphibins,phimin,phimax,nptbins,ptmin,ptmax);
1821 fhEtaPhi =
new TH2F (
"hEtaPhi",
"#eta vs #varphi for #it{E} > 0.5 GeV, reconstructed clusters",
1822 netabins,etamin,etamax,nphibins,phimin,phimax);
1824 fhEtaPhi->SetYTitle(
"#varphi (rad)");
1830 nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
1838 nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
1844 nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
1858 fhLambda0 =
new TH2F (
"hLambda0",
"shower shape, #lambda^{2}_{0} vs E",
1859 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1860 fhLambda0->SetXTitle(
"#it{E}_{cluster} (GeV)");
1861 fhLambda0->SetYTitle(
"#lambda^{2}_{0}");
1864 fhLambda1 =
new TH2F (
"hLambda1",
"shower shape, #lambda^{2}_{1} vs E",
1865 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1866 fhLambda1->SetXTitle(
"#it{E}_{cluster} (GeV)");
1867 fhLambda1->SetYTitle(
"#lambda^{2}_{1}");
1871 nptbins,ptmin,ptmax,10,0,10);
1872 fhNLocMax->SetXTitle(
"#it{E}_{cluster} (GeV)");
1879 nptbins,ptmin,ptmax, 100,0,1.);
1885 nptbins,ptmin,ptmax, 500,0,100.);
1890 fhClusterMaxCellDiff =
new TH2F (
"hClusterMaxCellDiff",
"energy vs difference of cluster energy - max cell energy / cluster energy, good clusters",
1891 nptbins,ptmin,ptmax, 500,0,1.);
1896 fhClusterMaxCellECross =
new TH2F (
"hClusterMaxCellECross",
"1 - Energy in cross around max energy cell / max energy cell vs cluster energy, good clusters",
1897 nptbins,ptmin,ptmax, 400,-1,1.);
1906 nptbins,ptmin,ptmax, nceclbins,nceclmin,nceclmax);
1912 nceclbins,nceclmin,nceclmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
1917 fhBadClusterEnergy =
new TH1F (
"hBadClusterEnergy",
"Bad cluster energy", nptbins,ptmin,ptmax);
1922 netabins,etamin,etamax,nphibins,phimin,phimax);
1928 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1933 fhBadClusterLambda1 =
new TH2F (
"hBadClusterLambda1",
"Bad cluster,shower shape, #lambda^{2}_{1} vs E for bad cluster ",
1934 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1940 nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
1947 fhBadClusterPairDiffTimeE =
new TH2F(
"hBadClusterPairDiffTimeE",
"cluster pair time difference (bad - good) vs E from bad cluster",nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
1955 fhClusterMaxCellDiffNoCut =
new TH2F (
"hClusterMaxCellDiffNoCut",
"energy vs difference of cluster energy - max cell energy / cluster energy",
1956 nptbins,ptmin,ptmax, 500,0,1.);
1962 nptbins,ptmin,ptmax, 100,0,1.);
1968 nptbins,ptmin,ptmax, 500,0,100);
1973 fhBadClusterMaxCellDiff =
new TH2F (
"hBadClusterMaxCellDiff",
"energy vs difference of cluster energy - max cell energy / cluster energy for bad clusters",
1974 nptbins,ptmin,ptmax, 500,0,1.);
1979 fhBadClusterMaxCellECross =
new TH2F (
"hBadClusterMaxCellECross",
"1 - #it{E}_{+} around max energy cell / max energy cell vs cluster energy, bad clusters",
1980 nptbins,ptmin,ptmax, 400,-1,1.);
2009 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
2014 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
2019 nresetabins,resetamin,resetamax,nresphibins,resphimin,resphimax);
2024 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
2029 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
2034 nresetabins,resetamin,resetamax,nresphibins,resphimin,resphimax);
2040 nresetabins,resetamin,resetamax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2045 nresetabins,resetamin,resetamax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2050 nresetabins,resetamin,resetamax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2055 nresetabins,resetamin,resetamax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2071 fhECharged =
new TH1F (
"hECharged",
"#it{E} reconstructed clusters, matched with track", nptbins,ptmin,ptmax);
2075 fhPtCharged =
new TH1F (
"hPtCharged",
"#it{p}_{T} reconstructed clusters, matched with track", nptbins,ptmin,ptmax);
2076 fhPtCharged->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
2079 fhPhiCharged =
new TH1F (
"hPhiCharged",
"#varphi reconstructed clusters, matched with track",nphibins,phimin,phimax);
2083 fhEtaCharged =
new TH1F (
"hEtaCharged",
"#eta reconstructed clusters, matched with track",netabins,etamin,etamax);
2089 fhEtaPhiECharged =
new TH3F (
"hEtaPhiECharged",
"#eta vs #varphi, reconstructed clusters, matched with track",
2090 netabins,etamin,etamax,nphibins,phimin,phimax,nptbins,ptmin,ptmax);
2098 fhEtaPhiCharged =
new TH2F (
"hEtaPhiCharged",
"#eta vs #varphi for #it{E} > 0.5 GeV, reconstructed clusters, with matched track",
2099 netabins,etamin,etamax,nphibins,phimin,phimax);
2105 fh1EOverP =
new TH2F(
"h1EOverP",
"TRACK matches #it{E}/#it{p}",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
2107 fh1EOverP->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
2110 fh2dR =
new TH2F(
"h2dR",
"TRACK matches #Delta #it{R}",nptbins,ptmin,ptmax,ndRbins,dRmin,dRmax);
2111 fh2dR->SetYTitle(
"#Delta #it{R} (rad)");
2112 fh2dR->SetXTitle(
"#it{E} cluster (GeV)");
2113 outputContainer->Add(
fh2dR) ;
2115 fh2MatchdEdx =
new TH2F(
"h2MatchdEdx",
"#it{dE/dx} vs. #it{p} for all matches",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
2120 fh2EledEdx =
new TH2F(
"h2EledEdx",
"#it{dE/dx} vs. #it{p} for electrons",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
2125 fh1EOverPR02 =
new TH2F(
"h1EOverPR02",
"TRACK matches #it{E}/#it{p}, all",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
2130 fh1EleEOverP =
new TH2F(
"h1EleEOverP",
"Electron candidates #it{E}/#it{p} (60<#it{dE/dx}<100)",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
2139 (
"h1EOverP_PerModule",
"TRACK matches #it{E}/#it{p}, #it{E}_{cl}&#it{p}_{tr}>0.5 Gev/#it{c}",
2140 nPoverEbins,eOverPmin,eOverPmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2146 (
"h2dR_PerModule",
"TRACK matches #Delta #it{R}, #it{E}_{cl}&#it{p}_{tr}>0.5 Gev/#it{c}",
2147 ndRbins,dRmin,dRmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2148 fh2dRMod->SetXTitle(
"#Delta #it{R} (rad)");
2153 (
"h2MatchdEdx_PerModule",
"#it{dE/dx} vs. #it{p} for all matches, #it{E}_{cl}&#it{p}_{tr}>0.5 Gev/#it{c}",
2154 ndedxbins,dedxmin,dedxmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2160 (
"h2EledEdx_PerModule",
"#it{dE/dx} vs. #it{p} for electrons, #it{E}_{cl}&#it{p}_{tr}>0.5 Gev/#it{c}",
2161 ndedxbins,dedxmin,dedxmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2167 (
"h1EOverPR02_PerModule",
"TRACK matches #it{E}/#it{p}, all, #it{E}_{cl}&#it{p}_{tr}>0.5 Gev/#it{c}",
2168 nPoverEbins,eOverPmin,eOverPmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2174 (
"h1EleEOverP_PerModule",
"Electron candidates #it{E}/#it{p} (60<#it{dE/dx}<100), #it{E}_{cl}&#it{p}_{tr}>0.5 Gev/#it{c}",
2175 nPoverEbins,eOverPmin,eOverPmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2183 if ( fFirstModule < 12 )
2185 fhIM =
new TH2F (
"hIM",
"Cluster pairs (EMCAL or PHOS) Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1",
2186 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2187 fhIM->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2188 fhIM->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2189 outputContainer->Add(
fhIM);
2191 fhIMDiff =
new TH2F (
"hIMDiff",
"Cluster pairs (EMCAL or PHOS) Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1, different SM",
2192 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2193 fhIMDiff->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2194 fhIMDiff->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2197 fhIMSame =
new TH2F (
"hIMSame",
"Cluster pairs (EMCAL or PHOS) Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1, same SM",
2198 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2199 fhIMSame->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2200 fhIMSame->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2205 fhIMEMCALPHOS =
new TH2F (
"hIMEMCALPHOS",
"Cluster pairs in DCAL-PHOS Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1",
2206 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2207 fhIMEMCALPHOS->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2208 fhIMEMCALPHOS->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2211 fhIMEMCALPHOSSame =
new TH2F (
"hIMEMCALPHOSSame",
"Cluster pairs in DCAL-PHOS Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1, same #varphi sector",
2212 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2221 fhIMDCAL =
new TH2F (
"hIMDCAL",
"Cluster pairs in DCAL Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1",
2222 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2223 fhIMDCAL->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2224 fhIMDCAL->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2227 fhIMDCALDiff =
new TH2F (
"hIMDCALDiff",
"Cluster pairs in DCAL Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1, different SM",
2228 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2229 fhIMDCALDiff->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2230 fhIMDCALDiff->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2233 fhIMDCALSame =
new TH2F (
"hIMDCALSame",
"Cluster pairs in DCAL Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1, same SM",
2234 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2235 fhIMDCALSame->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2236 fhIMDCALSame->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2239 fhIMDCALPHOS =
new TH2F (
"hIMDCALPHOS",
"Cluster pairs in DCAL-PHOS Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1",
2240 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2241 fhIMDCALPHOS->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2242 fhIMDCALPHOS->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2245 fhIMDCALPHOSSame =
new TH2F (
"hIMDCALPHOSSame",
"Cluster pairs in DCAL-PHOS Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1, same #varphi sector",
2246 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2254 if ( fFirstModule < 12 )
2257 nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
2263 nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
2272 nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
2278 nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
2285 fhAsym =
new TH2F (
"hAssym",
"Cluster pairs Asymmetry vs reconstructed pair energy",nptbins,ptmin,ptmax,nasymbins,asymmin,asymmax);
2286 fhAsym->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2287 fhAsym->SetYTitle(
"#it{Asymmetry}");
2288 outputContainer->Add(
fhAsym);
2292 fhOpAngle =
new TH2F (
"hOpeningAngle",
"Cluster pairs opening angle vs reconstructed pair #it{p}_{T}, ncell > 1",
2293 nptbins,ptmin,ptmax, 180,0,TMath::Pi());
2294 fhOpAngle->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2295 fhOpAngle->SetYTitle(
"Opening angle (degrees)");
2299 fhIMvsOpAngle =
new TH2F (
"hIMvsOpAngle",
"Cluster pairs Invariant mass vs reconstructed pair opening angle, ncell > 1",
2302 fhIMvsOpAngle->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2309 fhXYZ =
new TH3F (
"hXYZ",
"Cluster: #it{x} vs #it{y} vs #it{z}",xbins,xmin,xmax,ybins,ymin,ymax,zbins,zmin,zmax);
2310 fhXYZ->SetXTitle(
"#it{x} (cm)");
2311 fhXYZ->SetYTitle(
"#it{y} (cm)");
2312 fhXYZ->SetZTitle(
"#it{z} (cm) ");
2313 outputContainer->Add(
fhXYZ);
2315 fhXE =
new TH2F (
"hXE",
"Cluster X position vs cluster energy",xbins,xmin,xmax,nptbins,ptmin,ptmax);
2316 fhXE->SetXTitle(
"#it{x} (cm)");
2317 fhXE->SetYTitle(
"#it{E} (GeV)");
2318 outputContainer->Add(
fhXE);
2320 fhYE =
new TH2F (
"hYE",
"Cluster Y position vs cluster energy",ybins,ymin,ymax,nptbins,ptmin,ptmax);
2321 fhYE->SetXTitle(
"#it{y} (cm)");
2322 fhYE->SetYTitle(
"#it{E} (GeV)");
2323 outputContainer->Add(
fhYE);
2325 fhZE =
new TH2F (
"hZE",
"Cluster Z position vs cluster energy",zbins,zmin,zmax,nptbins,ptmin,ptmax);
2326 fhZE->SetXTitle(
"#it{z} (cm)");
2327 fhZE->SetYTitle(
"#it{E} (GeV)");
2328 outputContainer->Add(
fhZE);
2330 fhRE =
new TH2F (
"hRE",
"Cluster R position vs cluster energy",rbins,rmin,rmax,nptbins,ptmin,ptmax);
2331 fhRE->SetXTitle(
"r = #sqrt{x^{2}+y^{2}} (cm)");
2332 fhRE->SetYTitle(
"#it{E} (GeV)");
2333 outputContainer->Add(
fhRE);
2335 fhXNCells =
new TH2F (
"hXNCells",
"Cluster X position vs N Cells per Cluster",xbins,xmin,xmax,nceclbins,nceclmin,nceclmax);
2337 fhXNCells->SetYTitle(
"N cells per cluster");
2340 fhYNCells =
new TH2F (
"hYNCells",
"Cluster Y position vs N Cells per Cluster",ybins,ymin,ymax,nceclbins,nceclmin,nceclmax);
2342 fhYNCells->SetYTitle(
"N cells per cluster");
2345 fhZNCells =
new TH2F (
"hZNCells",
"Cluster Z position vs N Cells per Cluster",zbins,zmin,zmax,nceclbins,nceclmin,nceclmax);
2347 fhZNCells->SetYTitle(
"N cells per cluster");
2350 fhRNCells =
new TH2F (
"hRNCells",
"Cluster R position vs N Cells per Cluster",rbins,rmin,rmax,nceclbins,nceclmin,nceclmax);
2351 fhRNCells->SetXTitle(
"r = #sqrt{x^{2}+y^{2}} (cm)");
2352 fhRNCells->SetYTitle(
"N cells per cluster");
2358 fhRCellE =
new TH2F (
"hRCellE",
"Cell R position vs cell energy",rbins,rmin,rmax,nptbins,ptmin,ptmax);
2359 fhRCellE->SetXTitle(
"r = #sqrt{x^{2}+y^{2}} (cm)");
2360 fhRCellE->SetYTitle(
"#it{E} (GeV)");
2363 fhXCellE =
new TH2F (
"hXCellE",
"Cell X position vs cell energy",xbins,xmin,xmax,nptbins,ptmin,ptmax);
2364 fhXCellE->SetXTitle(
"#it{x} (cm)");
2365 fhXCellE->SetYTitle(
"#it{E} (GeV)");
2368 fhYCellE =
new TH2F (
"hYCellE",
"Cell Y position vs cell energy",ybins,ymin,ymax,nptbins,ptmin,ptmax);
2369 fhYCellE->SetXTitle(
"#it{y} (cm)");
2370 fhYCellE->SetYTitle(
"#it{E} (GeV)");
2373 fhZCellE =
new TH2F (
"hZCellE",
"Cell Z position vs cell energy",zbins,zmin,zmax,nptbins,ptmin,ptmax);
2374 fhZCellE->SetXTitle(
"#it{z} (cm)");
2375 fhZCellE->SetYTitle(
"#it{E} (GeV)");
2378 fhXYZCell =
new TH3F (
"hXYZCell",
"Cell : #it{x} vs #it{y} vs #it{z}",xbins,xmin,xmax,ybins,ymin,ymax,zbins,zmin,zmax);
2384 Float_t dx = TMath::Abs(xmin)+TMath::Abs(xmax);
2385 Float_t dy = TMath::Abs(ymin)+TMath::Abs(ymax);
2386 Float_t dz = TMath::Abs(zmin)+TMath::Abs(zmax);
2387 Float_t dr = TMath::Abs(rmin)+TMath::Abs(rmax);
2389 fhDeltaCellClusterRNCells =
new TH2F (
"hDeltaCellClusterRNCells",
"Cluster-Cell R position vs N Cells per Cluster",rbins*2,-dr,dr,nceclbins,nceclmin,nceclmax);
2394 fhDeltaCellClusterXNCells =
new TH2F (
"hDeltaCellClusterXNCells",
"Cluster-Cell X position vs N Cells per Cluster",xbins*2,-dx,dx,nceclbins,nceclmin,nceclmax);
2399 fhDeltaCellClusterYNCells =
new TH2F (
"hDeltaCellClusterYNCells",
"Cluster-Cell Y position vs N Cells per Cluster",ybins*2,-dy,dy,nceclbins,nceclmin,nceclmax);
2404 fhDeltaCellClusterZNCells =
new TH2F (
"hDeltaCellClusterZNCells",
"Cluster-Cell Z position vs N Cells per Cluster",zbins*2,-dz,dz,nceclbins,nceclmin,nceclmax);
2409 fhDeltaCellClusterRE =
new TH2F (
"hDeltaCellClusterRE",
"Cluster-Cell R position vs cluster energy",rbins*2,-dr,dr,nptbins,ptmin,ptmax);
2410 fhDeltaCellClusterRE->SetXTitle(
"#it{r} = #sqrt{x^{2}+y^{2}}, #it{r}_{clus}-#it{r}_{cell} (cm)");
2414 fhDeltaCellClusterXE =
new TH2F (
"hDeltaCellClusterXE",
"Cluster-Cell X position vs cluster energy",xbins*2,-dx,dx,nptbins,ptmin,ptmax);
2419 fhDeltaCellClusterYE =
new TH2F (
"hDeltaCellClusterYE",
"Cluster-Cell Y position vs cluster energy",ybins*2,-dy,dy,nptbins,ptmin,ptmax);
2424 fhDeltaCellClusterZE =
new TH2F (
"hDeltaCellClusterZE",
"Cluster-Cell Z position vs cluster energy",zbins*2,-dz,dz,nptbins,ptmin,ptmax);
2432 netabins,etamin,etamax,nphibins,phimin,phimax,nptbins,ptmin,ptmax);
2440 fhEtaPhiCell =
new TH2F (
"hEtaPhiCell",
"Cell #eta vs cell #varphi vs cell energy",
2441 netabins,etamin,etamax,nphibins,phimin,phimax);
2468 fhEMod =
new TH2F (
"hE_Mod",
"Cluster reconstructed Energy in each present Module",nptbins,ptmin,ptmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2469 fhEMod->SetXTitle(
"#it{E} (GeV)");
2470 fhEMod->SetYTitle(
"Module");
2471 outputContainer->Add(
fhEMod);
2473 fhEWeirdMod =
new TH2F (
"hEWeird_Mod",
"Cluster reconstructed Energy in each present Module, ridiculously large E",200,0,10000,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2500 if(imod < fFirstModule || imod >
fLastModule)
continue;
2503 Form(
"# clusters in SM vs sum of clusters energy in Module %d",imod),
2504 nptbins,ptmin,ptmax*4, nclbins,nclmin,nclmax);
2510 Form(
"# cells per cluster vs cluster energy in Module %d",imod),
2511 nptbins,ptmin,ptmax, nceclbins,nceclmin,nceclmax);
2519 Form(
"# cells per cluster vs cluster energy in Module %d, no cut",imod),
2520 nptbins,ptmin,ptmax, nceclbins,nceclmin,nceclmax);
2529 Form(
"Cluster pairs Invariant mass vs reconstructed pair energy in Module %d, n cell > 1",imod),
2530 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2531 fhIMMod[imod]->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2532 fhIMMod[imod]->SetYTitle(
"#it{M}_{cluster pairs} (GeV/#it{c}^{2})");
2533 outputContainer->Add(
fhIMMod[imod]);
2542 fhNCells =
new TH1F (
"hNCells",
"# cells", ncebins,ncemin+0.5,ncemax);
2543 fhNCells->SetXTitle(
"#it{n}_{cells}");
2550 fhAmplitude =
new TH1F (
"hAmplitude",
"#it{E}_{cell}", nptbins,ptmin,ptmax/2);
2554 fhAmpMod =
new TH2F (
"hAmp_Mod",
"Cell energy in each present Module",nptbins,ptmin,ptmax/2,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2555 fhAmpMod->SetXTitle(
"#it{E} (GeV)");
2559 fhAmpWeirdMod =
new TH2F (
"hAmpWeird_Mod",
"Cell energy in each present Module, ridiculously large E",200,0,10000,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2566 fhTimeMod =
new TH2F (
"hTime_Mod",
"Cell time in each present Module",ntimebins,timemin,timemax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2576 Double_t binWidth=(ptfinemax-ptfinemin)/nfineptbins;
2579 xBinning.
AddStep(ptfinemax,binWidth);
2580 xBinning.
AddStep(ptfinemax*2,binWidth*4);
2581 xBinning.
AddStep(ptfinemax*4,binWidth*10);
2592 fhAmpId =
new TH2F (
"hAmpId",
"#it{E}_{cell}", xbinsArray.GetSize() - 1, xbinsArray.GetArray(), ybinsArray.GetSize() - 1, ybinsArray.GetArray());
2593 fhAmpId->SetXTitle(
"#it{E}_{cell} (GeV)");
2594 outputContainer->Add(
fhAmpId);
2603 fhTime =
new TH1F (
"hTime",
"#it{t}_{cell}",ntimebins,timemin,timemax);
2604 fhTime->SetXTitle(
"#it{t}_{cell} (ns)");
2605 outputContainer->Add(
fhTime);
2612 fhTimeAmp =
new TH2F (
"hTimeAmp",
"#it{t}_{cell} vs #it{E}_{cell}",nptbins,ptmin,ptmax/2,ntimebins,timemin,timemax);
2613 fhTimeAmp->SetYTitle(
"#it{t}_{cell} (ns)");
2614 fhTimeAmp->SetXTitle(
"#it{E}_{cell} (GeV)");
2617 fhTimeAmpLowGain =
new TH2F (
"hTimeAmpLG",
"Low gain: #it{t}_{cell} vs #it{E}_{cell}",nptbins,ptmin,ptmax/2,ntimebins,timemin,timemax);
2629 fhTimeId =
new TH2F (
"hTimeId",
"#it{t}_{cell} vs Absolute Id",
2631 fhTimeId->SetXTitle(
"#it{t}_{cell} (ns)");
2632 fhTimeId->SetYTitle(
"Cell Absolute Id");
2641 if(
GetCaloUtils()->IsL1PhaseInTimeRecalibrationOn()==1)
2651 for(
Int_t bc = 0; bc < 4; bc++)
2654 Form(
"#it{t}_{cell} vs super-module, for BC/4=%d",bc),
2655 ntimebins,timemin,timemax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2662 fhCellECross =
new TH2F (
"hCellECross",
"1 - Energy in cross around cell / cell energy",
2663 nptbins,ptmin,ptmax/2, 400,-1,1.);
2665 fhCellECross->SetYTitle(
"1- #it{E}_{cross}/#it{E}_{cell}");
2668 fhNCellsMod =
new TH2F (
"hNCells_Mod",
"# cells vs Module", ncebins,ncemin+0.5,ncemax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2678 fhGridCells =
new TH2F (
"hGridCells",Form(
"Entries in grid of cells"),
2679 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
2684 fhGridCellsE =
new TH2F (
"hGridCellsE",
"Accumulated energy in grid of cells",
2685 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
2691 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
2697 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
2705 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
2711 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
2723 if(imod < fFirstModule || imod >
fLastModule)
continue;
2726 Form(
"# cells in SM vs sum of cells energy in Module %d",imod),
2727 nptbins,ptmin,ptmax*4, ncebins,ncemin,ncemax);
2742 (imod == 10 || imod== 11 || imod == 18 || imod == 19)
2746 Form(
"#it{E}_{cell} vs #it{t}_{cell} in Module %d, RCU %d ",imod,ircu),
2747 nptbins,ptmin,ptmax/2,ntimebins,timemin,timemax);
2762 fhEMCALPHOSCorrNClusters =
new TH2F (
"hEMCALPHOSCorrNClusters",
"# clusters in EMCAL vs PHOS", nclbins,nclmin,nclmax,nclbins,nclmin,nclmax);
2767 fhEMCALPHOSCorrEClusters =
new TH2F (
"hEMCALPHOSCorrEClusters",
"summed energy of clusters in EMCAL vs PHOS", nptbins,ptmin,ptmax*2,nptbins,ptmin,ptmax*2);
2772 fhEMCALPHOSCorrNCells =
new TH2F (
"hEMCALPHOSCorrNCells",
"# Cells in EMCAL vs PHOS", ncebins,ncemin,ncemax, ncebins,ncemin,ncemax);
2777 fhEMCALPHOSCorrECells =
new TH2F (
"hEMCALPHOSCorrECells",
"summed energy of Cells in EMCAL vs PHOS", nptbins*2,ptmin,ptmax*4,nptbins*2,ptmin,ptmax*4);
2783 fhEMCALDCALCorrNClusters =
new TH2F (
"hEMCALDCALCorrNClusters",
"# clusters in EMCAL vs DCAL", nclbins,nclmin,nclmax,nclbins,nclmin,nclmax);
2788 fhEMCALDCALCorrEClusters =
new TH2F (
"hEMCALDCALCorrEClusters",
"summed energy of clusters in EMCAL vs DCAL", nptbins,ptmin,ptmax*2,nptbins,ptmin,ptmax*2);
2793 fhEMCALDCALCorrNCells =
new TH2F (
"hEMCALDCALCorrNCells",
"# Cells in EMCAL vs DCAL", ncebins,ncemin,ncemax, ncebins,ncemin,ncemax);
2798 fhEMCALDCALCorrECells =
new TH2F (
"hEMCALDCALCorrECells",
"summed energy of Cells in EMCAL vs DCAL", nptbins*2,ptmin,ptmax*4,nptbins*2,ptmin,ptmax*4);
2805 fhDCALPHOSCorrNClusters =
new TH2F (
"hDCALPHOSCorrNClusters",
"# clusters in DCAL vs PHOS", nclbins,nclmin,nclmax,nclbins,nclmin,nclmax);
2810 fhDCALPHOSCorrEClusters =
new TH2F (
"hDCALPHOSCorrEClusters",
"summed energy of clusters in DCAL vs PHOS", nptbins,ptmin,ptmax*2,nptbins,ptmin,ptmax*2);
2815 fhDCALPHOSCorrNCells =
new TH2F (
"hDCALPHOSCorrNCells",
"# Cells in DCAL vs PHOS", ncebins,ncemin,ncemax, ncebins,ncemin,ncemax);
2820 fhDCALPHOSCorrECells =
new TH2F (
"hDCALPHOSCorrECells",
"summed energy of Cells in DCAL vs PHOS", nptbins*2,ptmin,ptmax*4,nptbins*2,ptmin,ptmax*4);
2890 fhCaloCenNClusters =
new TH2F (
"hCaloCenNClusters",
"# clusters in calorimeter vs centrality",100,0,100,nclbins,nclmin,nclmax);
2895 fhCaloCenEClusters =
new TH2F (
"hCaloCenEClusters",
"summed energy of clusters in calorimeter vs centrality",100,0,100,nptbins,ptmin,ptmax*2);
2900 fhCaloCenNCells =
new TH2F (
"hCaloCenNCells",
"# Cells in calorimeter vs centrality",100,0,100,ncebins,ncemin,ncemax);
2905 fhCaloCenECells =
new TH2F (
"hCaloCenECells",
"summed energy of Cells in calorimeter vs centrality",100,0,100,nptbins*2,ptmin,ptmax*4);
2906 fhCaloCenECells->SetYTitle(
"#Sigma #it{E} of Cells in calorimeter (GeV)");
2910 fhCaloEvPNClusters =
new TH2F (
"hCaloEvPNClusters",
"# clusters in calorimeter vs event plane angle",100,0,TMath::Pi(),nclbins,nclmin,nclmax);
2915 fhCaloEvPEClusters =
new TH2F (
"hCaloEvPEClusters",
"summed energy of clusters in calorimeter vs event plane angle",100,0,TMath::Pi(),nptbins,ptmin,ptmax*2);
2920 fhCaloEvPNCells =
new TH2F (
"hCaloEvPNCells",
"# Cells in calorimeter vs event plane angle",100,0,TMath::Pi(),ncebins,ncemin,ncemax);
2925 fhCaloEvPECells =
new TH2F (
"hCaloEvPECells",
"summed energy of Cells in calorimeter vs event plane angle",100,0,TMath::Pi(),nptbins*2,ptmin,ptmax*4);
2926 fhCaloEvPECells->SetYTitle(
"#Sigma #it{E} of Cells in calorimeter (GeV)");
2936 "Photon",
"Pi0",
"Eta",
2937 "Electron",
"PhotonConv",
2938 "NeutralHadron",
"ChargedHadron" };
2942 for(
Int_t iPart = 0; iPart < 4; iPart++)
2944 fhGenMCE [iPart] =
new TH1F(Form(
"hGenMCE_%s",particleName[iPart].
Data()) ,
2945 Form(
"#it{E} of generated %s",particleName[iPart].
Data()),
2946 nptbins,ptmin,ptmax);
2948 fhGenMCPt[iPart] =
new TH1F(Form(
"hGenMCPt_%s",particleName[iPart].
Data()) ,
2949 Form(
"#it{p}_{T} of generated %s",particleName[iPart].
Data()),
2950 nptbins,ptmin,ptmax);
2953 Form(
"Y vs #varphi of generated %s",particleName[iPart].
Data()),
2954 200,-1,1,360,0,TMath::TwoPi());
2956 fhGenMCE [iPart] ->SetXTitle(
"#it{E} (GeV)");
2957 fhGenMCPt[iPart] ->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
2961 outputContainer->Add(
fhGenMCE [iPart]);
2962 outputContainer->Add(
fhGenMCPt [iPart]);
2966 fhGenMCAccE [iPart] =
new TH1F(Form(
"hGenMCAccE_%s",particleName[iPart].
Data()) ,
2967 Form(
"#it{E} of generated %s",particleName[iPart].
Data()),
2968 nptbins,ptmin,ptmax);
2969 fhGenMCAccPt[iPart] =
new TH1F(Form(
"hGenMCAccPt_%s",particleName[iPart].
Data()) ,
2970 Form(
"#it{p}_{T} of generated %s",particleName[iPart].
Data()),
2971 nptbins,ptmin,ptmax);
2973 Form(
"Y vs #varphi of generated %s",particleName[iPart].
Data()),
2974 netabins,etamin,etamax,nphibins,phimin,phimax);
2977 fhGenMCAccPt[iPart] ->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
2989 for(
Int_t iPart = 0; iPart < 7; iPart++)
2991 for(
Int_t iCh = 0; iCh < 2; iCh++)
2994 Form(
"Reconstructed/Generated E, %s, Matched %d",particleName[iPart].
Data(),iCh),
2995 nptbins, ptmin, ptmax, 200,0,2);
2996 fhRecoMCRatioE[iPart][iCh]->SetYTitle(
"#it{E}_{reconstructed}/#it{E}_{generated}");
2997 fhRecoMCRatioE[iPart][iCh]->SetXTitle(
"#it{E}_{reconstructed} (GeV)");
3002 Form(
"Generated - Reconstructed E, %s, Matched %d",particleName[iPart].
Data(),iCh),
3003 nptbins, ptmin, ptmax, nptbins*2,-ptmax,ptmax);
3005 fhRecoMCDeltaE[iPart][iCh]->SetXTitle(
"#it{E}_{reconstructed} (GeV)");
3009 Form(
"Generated - Reconstructed #varphi, %s, Matched %d",particleName[iPart].
Data(),iCh),
3010 nptbins, ptmin, ptmax, nphibins*2,-phimax,phimax);
3016 Form(
"Generated - Reconstructed #eta, %s, Matched %d",particleName[iPart].
Data(),iCh),
3017 nptbins, ptmin, ptmax,netabins*2,-etamax,etamax);
3022 fhRecoMCE[iPart][iCh] =
new TH2F (Form(
"hRecoMCE_%s_Match%d",particleName[iPart].
Data(),iCh),
3023 Form(
"#it{E} distribution, reconstructed vs generated, %s, Matched %d",particleName[iPart].
Data(),iCh),
3024 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
3025 fhRecoMCE[iPart][iCh]->SetXTitle(
"#it{E}_{rec} (GeV)");
3026 fhRecoMCE[iPart][iCh]->SetYTitle(
"#it{E}_{gen} (GeV)");
3027 outputContainer->Add(
fhRecoMCE[iPart][iCh]);
3029 fhRecoMCPhi[iPart][iCh] =
new TH2F (Form(
"hRecoMCPhi_%s_Match%d",particleName[iPart].
Data(),iCh),
3030 Form(
"#varphi distribution, reconstructed vs generated, %s, Matched %d",particleName[iPart].
Data(),iCh),
3031 nphibins,phimin,phimax, nphibins,phimin,phimax);
3032 fhRecoMCPhi[iPart][iCh]->SetXTitle(
"#varphi_{reconstructed} (rad)");
3033 fhRecoMCPhi[iPart][iCh]->SetYTitle(
"#varphi_{generated} (rad)");
3036 fhRecoMCEta[iPart][iCh] =
new TH2F (Form(
"hRecoMCEta_%s_Match%d",particleName[iPart].
Data(),iCh),
3037 Form(
"#eta distribution, reconstructed vs generated, %s, Matched %d",particleName[iPart].
Data(),iCh),
3038 netabins,etamin,etamax,netabins,etamin,etamax);
3039 fhRecoMCEta[iPart][iCh]->SetXTitle(
"#eta_{reconstructed} ");
3040 fhRecoMCEta[iPart][iCh]->SetYTitle(
"#eta_{generated} ");
3047 fhEMVxyz =
new TH2F (
"hEMVxyz",
"Production vertex of reconstructed ElectroMagnetic particles",nvdistbins,vdistmin,vdistmax,nvdistbins,vdistmin,vdistmax);
3053 fhHaVxyz =
new TH2F (
"hHaVxyz",
"Production vertex of reconstructed hadrons",nvdistbins,vdistmin,vdistmax,nvdistbins,vdistmin,vdistmax);
3059 fhEMR =
new TH2F (
"hEMR",
"Distance to production vertex of reconstructed ElectroMagnetic particles vs E rec",nptbins,ptmin,ptmax,nvdistbins,vdistmin,vdistmax);
3060 fhEMR->SetXTitle(
"#it{E} (GeV)");
3061 fhEMR->SetYTitle(
"TMath::Sqrt(v_{x}^{2}+v_{y}^{2})");
3062 outputContainer->Add(
fhEMR);
3064 fhHaR =
new TH2F (
"hHaR",
"Distance to production vertex of reconstructed Hadrons vs E rec",nptbins,ptmin,ptmax,nvdistbins,vdistmin,vdistmax);
3065 fhHaR->SetXTitle(
"#it{E} (GeV)");
3066 fhHaR->SetYTitle(
"TMath::Sqrt(v_{x}^{2}+v_{y}^{2})");
3067 outputContainer->Add(
fhHaR);
3071 fhMCEle1EOverP =
new TH2F(
"hMCEle1EOverP",
"TRACK matches #it{E}/#it{p}, MC electrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3076 fhMCEle1dR =
new TH1F(
"hMCEle1dR",
"TRACK matches dR, MC electrons",ndRbins,dRmin,dRmax);
3077 fhMCEle1dR->SetXTitle(
"#Delta #it{R} (rad)");
3080 fhMCEle2MatchdEdx =
new TH2F(
"hMCEle2MatchdEdx",
"#it{dE/dx} vs. #it{p} for all matches, MC electrons",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
3085 fhMCChHad1EOverP =
new TH2F(
"hMCChHad1EOverP",
"TRACK matches #it{E}/#it{p}, MC charged hadrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3090 fhMCChHad1dR =
new TH1F(
"hMCChHad1dR",
"TRACK matches dR, MC charged hadrons",ndRbins,dRmin,dRmax);
3094 fhMCChHad2MatchdEdx =
new TH2F(
"hMCChHad2MatchdEdx",
"#it{dE/dx} vs. #it{p} for all matches, MC charged hadrons",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
3099 fhMCNeutral1EOverP =
new TH2F(
"hMCNeutral1EOverP",
"TRACK matches #it{E}/#it{p}, MC neutrals",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3104 fhMCNeutral1dR =
new TH1F(
"hMCNeutral1dR",
"TRACK matches dR, MC neutrals",ndRbins,dRmin,dRmax);
3108 fhMCNeutral2MatchdEdx =
new TH2F(
"hMCNeutral2MatchdEdx",
"#it{dE/dx} vs. #it{p} for all matches, MC neutrals",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
3113 fhMCEle1EOverPR02 =
new TH2F(
"hMCEle1EOverPR02",
"TRACK matches #it{E}/#it{p}, MC electrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3118 fhMCChHad1EOverPR02 =
new TH2F(
"hMCChHad1EOverPR02",
"TRACK matches #it{E}/#it{p}, MC charged hadrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3123 fhMCNeutral1EOverPR02 =
new TH2F(
"hMCNeutral1EOverPR02",
"TRACK matches #it{E}/#it{p}, MC neutrals",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3128 fhMCEle1EleEOverP =
new TH2F(
"hMCEle1EleEOverP",
"Electron candidates #it{E}/#it{p} (60<dEdx<100), MC electrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3133 fhMCChHad1EleEOverP =
new TH2F(
"hMCEle1EleEOverP",
"Electron candidates #it{E}/#it{p} (60<dEdx<100), MC charged hadrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3138 fhMCNeutral1EleEOverP =
new TH2F(
"hMCNeutral1EleEOverP",
"Electron candidates #it{E}/#it{p} (60<dEdx<100), MC neutrals",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3148 return outputContainer;
3159 AliVCaloCells * cells)
3161 AliDebug(1,
"Start");
3167 Int_t nModule2 = -1;
3168 Int_t nCaloClusters = caloClusters->GetEntriesFast();
3171 if(phi1 < 0) phi1 += TMath::TwoPi();
3173 Double_t tof1 = ((AliVCluster*) caloClusters->At(iclus))->GetTOF()*1.e9;
3176 for(
Int_t jclus = iclus + 1 ; jclus < nCaloClusters ; jclus++)
3178 AliVCluster* clus2 = (AliVCluster*) caloClusters->At(jclus);
3183 Double_t tof2 = clus2->GetTOF()*1.e9;
3191 if( !
IsGoodCluster(absIdMax, clus2->GetM02(), clus2->GetNCells(), cells)
3229 if(phi2 < 0) phi2 += TMath::TwoPi();
3231 AliDebug(1,Form(
"Selected pair: pT %f, mass %f, asym %f, angle %f, diffTof %f, SM1 %d, SM2 %d\n",pairPt,mass,asym,angle,diffTof,nModule,nModule2));
3233 Bool_t inPi0Window = kFALSE;
3234 if(mass < 0.18 && mass > 0.1) inPi0Window = kTRUE ;
3236 if ( nModule < 12 && nModule2 < 12 )
3243 if ( nModule == nModule2 )
3257 nModule > 11 && nModule2 > 11 &&
fNModules > 12 )
3264 if ( nModule == nModule2 )
3280 if(nModule == nModule2 && nModule >= 0 && nModule <
fNModules)
3294 AliDebug(1,
"Check DCal-PHOS pairs\n");
3299 if(phi1 >= 260*TMath::DegToRad() && phi1 < 280) sector1 = 0;
3300 if(phi1 >= 280*TMath::DegToRad() && phi1 < 300) sector1 = 1;
3301 if(phi1 >= 300*TMath::DegToRad() && phi1 < 320) sector1 = 2;
3311 if( !
IsGoodCluster(absIdMax, clus2->GetM02(), clus2->GetNCells(), cells)
3329 if(phiPHOS < 0) phiPHOS += TMath::TwoPi();
3331 if(phiPHOS >= 260*TMath::DegToRad() && phiPHOS < 280) sector2 = 0;
3332 if(phiPHOS >= 280*TMath::DegToRad() && phiPHOS < 300) sector2 = 1;
3333 if(phiPHOS >= 300*TMath::DegToRad() && phiPHOS < 320) sector2 = 2;
3345 AliDebug(1,
"Check EMCAL(DCal)-EMCAL(PHOS) pairs\n");
3350 if(phi1 >= 80*TMath::DegToRad() && phi1 < 100) sector1 = 0;
3351 if(phi1 >= 100*TMath::DegToRad() && phi1 < 120) sector1 = 1;
3352 if(phi1 >= 120*TMath::DegToRad() && phi1 < 140) sector1 = 2;
3353 if(phi1 >= 140*TMath::DegToRad() && phi1 < 160) sector1 = 3;
3354 if(phi1 >= 160*TMath::DegToRad() && phi1 < 180) sector1 = 4;
3355 if(phi1 >= 180*TMath::DegToRad() && phi1 < 190) sector1 = 5;
3357 for(
Int_t jclus = 0 ; jclus < caloClusters->GetEntriesFast() ; jclus++)
3359 AliVCluster* clus2 = (AliVCluster*) caloClusters->At(jclus);
3364 Double_t tof2 = clus2->GetTOF()*1.e9;
3367 Double_t diffTof = TMath::Abs(tof1-tof2);
3371 if( !
IsGoodCluster(absIdMax, clus2->GetM02(), clus2->GetNCells(), cells)
3396 if(phiPHOS < 0) phiPHOS += TMath::TwoPi();
3398 if(phiPHOS >= 80*TMath::DegToRad() && phiPHOS < 100) sector2 = 0;
3399 if(phiPHOS >= 100*TMath::DegToRad() && phiPHOS < 120) sector2 = 1;
3400 if(phiPHOS >= 120*TMath::DegToRad() && phiPHOS < 140) sector2 = 2;
3401 if(phiPHOS >= 140*TMath::DegToRad() && phiPHOS < 160) sector2 = 3;
3402 if(phiPHOS >= 160*TMath::DegToRad() && phiPHOS < 180) sector2 = 4;
3403 if(phiPHOS >= 180*TMath::DegToRad() && phiPHOS < 190) sector2 = 5;
3479 Int_t nCellsPerCluster, AliVCaloCells* cells)
3489 if(!
GetCaloUtils()->GetEMCALRecoUtils()->IsRejectExoticCluster())
3502 Float_t ampMax = cells->GetCellAmplitude(absIdMax);
3505 if(ampMax < 0.01)
return kFALSE;
3509 if(1-
GetCaloUtils()->GetECross(absIdMax,cells,bc)/ampMax > 0.95)
3524 printf(
"**** Print %s %s ****\n", GetName(), GetTitle() ) ;
3546 AliDebug(1,
"Start");
3558 AliVCaloCells * cells = 0x0;
3572 AliFatal(Form(
"AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - Wrong calorimeter name <%s>, END",
GetCalorimeterString().
Data()));
3574 if( !caloClusters || !cells )
3576 AliFatal(Form(
"AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - No CaloClusters or CaloCells available"));
3580 if(caloClusters->GetEntriesFast() == 0)
return ;
3600 if ( !
GetMC() )
return;
3606 AliVParticle * primary= 0;
3609 for(
Int_t i=0 ; i < nprim; i++)
3611 if ( !
GetReader()->AcceptParticleMCLabel( i ) ) continue ;
3616 primary =
GetMC()->GetTrack(i) ;
3619 AliWarning(
"Primaries pointer not available!!");
3623 pdg = primary->PdgCode();
3624 status = primary->MCStatusCode();
3630 if ( status > 11 )
continue;
3633 if ( primary->E() == TMath::Abs(primary->Pz()) ||
3634 (primary->E() - primary->Pz()) < 1e-3 ||
3635 (primary->E() + primary->Pz()) < 0 ) continue ;
3643 if(eMC < 0.2)
continue;
3650 if (TMath::Abs(etaMC) > 1)
continue;
3654 phiMC += TMath::TwoPi();
3658 else if (pdg==111) mcIndex =
kmcPi0;
3659 else if (pdg==221) mcIndex =
kmcEta;
3660 else if (TMath::Abs(pdg)==11) mcIndex =
kmcElectron;
3668 Bool_t inacceptance = kTRUE;
3671 inacceptance = kFALSE ;
3678 if(!inacceptance)
continue;
Float_t GetHistoZMax() const
TH2F * fhCaloV0MCorrEClusters
! Calo vs V0 multiplicity, total measured cluster energy
virtual Bool_t IsFiducialCutOn() const
Float_t GetHistoPtMax() const
TH2F * fhTimeIdLowGain
! Time vs Absolute cell Id, low gain
TH2F * fhDeltaCellClusterRE
! R cluster - R cell distribution (cm) vs cluster energy
Bool_t IsGoodCluster(Int_t absIdMax, Float_t m02, Int_t nCellsPerCluster, AliVCaloCells *cells)
TH2F * fhDCALPHOSCorrNCells
! DCAL vs PHOS, number of cells
TH2F * fhNCellsPerClusterNoCut
! N cells per cluster vs cluster energy, before cuts
TH2F * fhMCNeutral1EOverPR02
! p/E for track-cluster matches, dR < 0.2, MC neutral
TH2F * fhNCellsMod
! Number of towers/crystals with signal for different module, Reco
TH3F * fhXYZ
! cluster X vs Y vs Z (cm)
TH2F * fh1EOverPMod
! p/E for track-cluster matches, per SM
TH2F * fh1EOverPR02Mod
! p/E for track-cluster matches, dR < 0.2, per SM
Int_t GetHistoNClusterCellMin() const
TH2F * fhDeltaCellClusterYNCells
! Y cluster - Y cell distribution (cm) vs N cells in cluster
TH1F * fhPt
! pT distribution, Reco
Float_t GetHistoPtMin() const
Int_t GetHistoFinePtBins() const
TH2F * fhClusterMaxCellECross
! 1 - Energy in cross around max energy cell / max energy cell vs cluster energy, good clusters ...
Bool_t IsMCParticleInCalorimeterAcceptance(Int_t calo, AliVParticle *particle)
Check that a MC AOD is in the calorimeter acceptance.
virtual Int_t GetTrackMultiplicity() const
Int_t fNMaxColsFull
Number of EMCAL/PHOS columns full detector.
Bool_t fFillPi0PairDiffTime
Fill time difference histograms of cluster pairs in pi0 mass window, only if fFillAllPi0Histo=kTRUE.
Int_t GetHistoShowerShapeBins() const
virtual Int_t GetCalorimeter() const
TH2F * fhGridCellsE
! Cells ordered in column/row for different module, weighted with energy, Reco
TH1F * fhPtCharged
! pT distribution, Reco, matched with track
Float_t GetHistodEdxMax() const
TH2F * fhClusterMaxCellDiff
! Difference between cluster energy and energy of cell with more energy, good clusters only ...
virtual void AddToHistogramsName(TString add)
virtual AliVCaloCells * GetEMCALCells() const
TH2F * fh2dR
! distance between projected track and cluster (eta-phi units)
Float_t fInvMassMinECut
Minimum energy cut value for clusters entering the invariant mass calculation.
TH2F * fh2dRMod
! distance between projected track and cluster (eta-phi units), per SM
Int_t GetHistoNCellsMin() const
TH2F * fhBadClusterEtaPhi
! Time Max cell of bad cluster
virtual Bool_t IsDataMC() const
Float_t fEMCALCellAmpMin
Amplitude Threshold on EMCal cells.
TH2F * fhIMDCALPHOS
! Cluster pairs invariant mass vs pair pT, for DCal-PHOS pairs
TH1F * fhEta
! eta distribution, Reco
TH2F * fhTimeMod
! Cell time distribution for different module, Reco
TH2F * fhMCChHad1EleEOverP
! p/E for track-cluster matches, dR < 0.2, 60 < dEdx < 100, MC charged hadrons
TH2F * fh2MatchdEdxMod
! dE/dx for all matches, per SM
TH2F * fh2EledEdx
! dE/dx vs. momentum for electron candidates
TH2F * fhTrackMatchedDPhiNeg
! Phi distance between track and cluster vs cluster E, after and before photon cuts ...
virtual 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
TH2F * fhSumCellsAmpMod
! Sum of towers/crystals signal for different module, Reco
Int_t fLastModule
Last EMCAL/PHOS module, set in CaloUtils or depending fidutial cuts.
AliEMCALRecoUtils * GetEMCALRecoUtils() const
Bool_t fFillInvMassOpenAngle
Fill opening angle histograms of cluster pairs, only if fFillAllPi0Histo=kTRUE.
Int_t GetHistoTrackMultiplicityMax() const
TH2F * fhCaloTrackMCorrNClusters
! Calo vs Track Multiplicity, number of clusters
Float_t GetECross(Int_t absId, AliVCaloCells *cells, Int_t bc)
Float_t GetPhi(Float_t phi) const
Shift phi angle in case of negative value 360 degrees. Example TLorenzVector::Phi defined in -pi to p...
TH3F * fhEtaPhiE
! eta vs phi vs E, Reco
Float_t GetHistoVertexDistMin() const
Float_t fPHOSCellAmpMin
Amplitude Threshold on PHOS cells.
TH1F * fhBadClusterEnergy
! Energy of bad cluster
virtual AliVEvent * GetInputEvent() const
TH2F * fhRecoMCRatioE[7][2]
! Reco/Gen E generated particle vs reconstructed E
TH2F * fhCaloCenECells
! Calo vs centrality, total measured cell energy
TH2F * fhIMDCALDiff
! Cluster pairs invariant mass vs pair pT, for DCal pairs
TH2F ** fhNClustersSumEnergyPerMod
! N clusters vs sum of energies in different module, Reco
TH2F * fhEMCALDCALCorrEClusters
! EMCAL vs DCAL, total measured cluster energy
TH1F * fhGenMCAccE[4]
! pt of primary particle, in acceptance
TH2F * fhXNCells
! X (cm) cluster distribution vs N cells in cluster
TH2F * fhRCellE
! R=sqrt(x^2+y^2) (cm) cell distribution vs cell energy
TH1F * fhGenMCPt[4]
! pt of primary particle
TH2F * fhClusterPairDiffTimeESameMod
! Pair of clusters time difference vs E, in same Mod
Float_t GetHistodRMax() const
Int_t fNModules
Number of EMCAL/PHOS modules to use in analysis, set in CaloUtils.
virtual Double_t GetEventPlaneAngle() const
void ClusterMatchedWithTrackHistograms(AliVCluster *clus, Bool_t mcOK, Int_t pdg)
TH2F * fhEtaPhi
! eta-phi distribution, Reco
TH2F * fhIMSame
! Cluster pairs invariant mass vs pair pT, for EMCAL or PHOS pairs
TH1F * fhGenMCAccPt[4]
! pt of primary particle, in acceptance
Float_t GetHistoXMin() const
Bool_t fFillAllCellAbsIdHistograms
Fill all cell related histograms where one axis is the cell absId.
Double_t fTimeCutMax
Remove clusters/cells with time larger than this value, in ns.
Float_t fCellAmpMin
Amplitude Threshold on calorimeter cells, set at execution time.
TH2F * fhIMEMCALPHOSSame
! Cluster pairs invariant mass vs pair pT, for EMCAL(DCal eta acceptance)-EMCAL (PHOS eta acceptance)...
TH2F * fhCaloEvPECells
! Calo vs event plane angle, total measured cell energy
virtual Int_t GetV0Multiplicity(Int_t i) const
Int_t fNMaxCols
Number of EMCAL/PHOS columns per SM.
TH1F * fhNCellsCutAmpMin
! Number of towers/crystals with signal, with min amplitude
Bool_t IsTrackMatched(AliVCluster *cluster, AliCalorimeterUtils *cu, AliVEvent *event)
void Init()
Check if the calorimeter setting is ok, if not abort.
Int_t GetHistoMassBins() const
TH2F ** fhNCellsPerClusterModNoCut
! N cells per clusters different module, Reco, No cut
Int_t GetHistoPhiBins() const
TH2F * fhClusterMaxCellCloseCellRatio
! Ratio between max cell energy and cell energy of the same cluster
void InvariantMassHistograms(Int_t iclus, Int_t nModule, const TObjArray *caloClusters, AliVCaloCells *cells)
TH2F * fhRecoMCDeltaE[7][2]
! Gen-Reco E generated particle vs reconstructed E
TH2F ** fhTimeAmpPerRCU
! Time vs Amplitude measured in towers/crystals different RCU
Class for the Calorimeter QA analysis.
Float_t fInvMassMaxECut
Maximum energy cut value for clusters entering the invariant mass calculation.
Float_t GetHistoMassMin() const
Bool_t fFillAllPosHisto
Fill all the position related histograms.
void AddStep(Double_t max, Double_t binwidth)
TH2F * fhEMCALPHOSCorrEClusters
! EMCAL vs PHOS, total measured cluster energy
Float_t fEBinCuts[15]
Energy bins cut.
TH2F * fhNCellsPerClusterWeirdModNoCut
! N cells per clusters different module, Reco, No cut, ridiculously large energy
Bool_t fFillAllTH3
Fill TH3 histograms.
Int_t GetHistoXBins() const
Int_t GetHistoV0SignalBins() const
TH2F * fhClusterTimeEnergy
! Cluster Time vs Energy
TH2F * fhDeltaCellClusterRNCells
! R cluster - R cell distribution (cm) vs N cells in cluster
Int_t GetHistoTrackMultiplicityMin() const
TH1F * fhMCChHad1dR
! distance between projected track and cluster, MC charged hadrons
TH1F * fhTime
! Time measured in towers/crystals
Int_t fFirstModule
First EMCAL/PHOS module, set in CaloUtils or depending fidutial cuts.
TH2F * fhCaloCenNClusters
! Calo vs centrality, number of clusters
Float_t GetHistoTrackResidualPhiMin() const
TH2F * fhBadClusterMaxCellDiff
! Difference between cluster energy and energy of cell with more energy
TH2F * fhBadClusterMaxCellECross
! 1 - Energy in cross around max energy cell / max energy cell vs cluster energy, bad clusters ...
virtual Int_t GetEventCentrality() const
Float_t GetHistoTrackResidualEtaMin() const
TH2F * fhTrackMatchedDEtaDPhiNeg
! Eta vs Phi distance between track and cluster, E cluster > 0.5 GeV, after and before ...
Int_t GetHistoNClusterCellBins() const
TH1F * fhPhiCharged
! phi distribution, Reco, matched with track
TH2F * fh1EOverPR02
! p/E for track-cluster matches, dR < 0.2
TH2F * fhMCEle1EleEOverP
! p/E for track-cluster matches, dR < 0.2, 60 < dEdx < 100, MC electrons
TH2F * fhBadClusterMaxCellCloseCellDiff
! Difference between max cell energy and cell energy of the same cluster for bad clusters ...
Float_t GetHistoYMax() const
Float_t GetHistoDiffTimeMin() const
void MakeAnalysisFillHistograms()
Main task method, call all the methods filling QA histograms.
TH2F * fhCellECross
! 1 - Energy in cross around cell / cell energy
TH2F * fhClusterPairDiffTimeE
! Pair of clusters time difference vs E
Int_t GetHistoPOverEBins() const
TH2F * fhClusterPairDiffTimeEPi0Mass
! EMCal/PHOS Cluster time TOF difference, for pairs in 0.1 < mass < 0.18
TH2F * fhBadClusterMaxCellCloseCellRatio
! Ratio between max cell energy and cell energy of the same cluster for bad clusters ...
Float_t GetHistoPhiMin() const
Float_t GetHistoDiffTimeMax() const
TH1F * fhCellIdCellLargeTimeSpread
! Cells with large time respect to max (diff > 100 ns)
Int_t GetHistoVertexDistBins() const
Int_t CheckOrigin(Int_t label, const AliMCEvent *mcevent)
TH2F * fhEMCALPHOSCorrNClusters
! EMCAL vs PHOS, number of clusters
TH2F * fhIMDCALSame
! Cluster pairs invariant mass vs pair pT, for DCal pairs
TH2F * fhCaloTrackMCorrEClusters
! Calo vs Track Multiplicity, total measured cluster energy
TH2F * fhZNCells
! Z (cm) cluster distribution vs N cells in cluster
Int_t GetHistoZBins() const
TH1F * fhE
! E distribution, Reco
TH2F * fhTrackMatchedDPhiPosMod
! Phi distance between positive track and cluster vs module for E > 0.5 GeV
TH2F * fhDeltaCellClusterYE
! Y cluster - Y cell distribution (cm) vs cluster energy
TH2F * fhEBinCellColRow[14]
! Column and row location of cell in different energy bins.
TH2F * fhZE
! Z (cm) cluster distribution vs cluster energy
TH2F * fhEMCALDCALCorrNClusters
! EMCAL vs DCAL, number of clusters
TH1F * fhEtaCharged
! eta-phi distribution, Reco, matched with track
Bool_t fFillAllPi0Histo
Fill invariant mass histograms.
TH2F * fhTimePerSMPerBC[4]
! Time vs SM number for BC%4=0,1,2,3
TList * GetCreateOutputObjects()
Float_t GetHistoAsymmetryMax() const
Float_t GetHistoMassMax() const
TH1F * fhPhi
! phi distribution, Reco
Base class for CaloTrackCorr analysis algorithms.
Bool_t fFillAllClusterHistograms
Fill all cluster related histograms.
virtual TString GetCalorimeterString() const
Bool_t fFillInvMassInEMCALWithPHOSDCalAcc
Fill invariant mass histograms of EMCal clusters in DCal and PHOS eta acceptance each, only if fFillAllPi0Histo=kTRUE.
TH2F * fhBadClusterPairDiffTimeE
! Pair of clusters time difference vs E, bad cluster
TLorentzVector fClusterMomentum
! Cluster momentum, temporary container
TH2F * fhEtaPhiCharged
! eta distribution, Reco, matched with track
TH2F * fhRecoMCDeltaPhi[7][2]
! Gen-Reco phi generated particle vs reconstructed E
virtual Bool_t IsRealCaloAcceptanceOn() const
Float_t GetHistodEdxMin() const
TLorentzVector fClusterMomentum2
! Cluster momentum, temporary container
virtual AliFiducialCut * GetFiducialCut()
TH2F * fhClusterMaxCellDiffNoCut
! Difference between cluster energy and energy of cell with more energy, no bad cluster rejection ...
virtual AliHistogramRanges * GetHistogramRanges()
TH2F * fhMCNeutral2MatchdEdx
! dE/dx vs. momentum for all matches, MC neutral
Float_t fEMCALClusterM02Min
Minimum M02 on EMCal clusters.
TH2F * fhCaloCenEClusters
! Calo vs centrality, total measured cluster energy
Int_t GetHistoDiffTimeBins() const
TH2F * fhNLocMax
! Cluster Number of local Maxima
TH3F * fhEtaPhiECharged
! eta vs phi vs E, Reco, matched with track
TH2F * fhBadCellTimeSpreadRespectToCellMax
! Difference of the time of cell with maximum dep energy and the rest of cells for bad clusters ...
TH2F * fhDeltaCellClusterXE
! X cluster - X cell distribution (cm) vs cluster energy
Float_t GetHistoTrackResidualPhiMax() const
TH2F * fhEMCALPHOSCorrNCells
! EMCAL vs PHOS, number of cells
TH2F * fhEtaPhiCell
! eta vs phi, cells
Int_t GetHistoAsymmetryBins() const
Float_t fInvMassMinM02Cut
Minimum M02 shower shape cut value for clusters entering the invariant mass calculation.
Double_t fTimeCutMin
Remove clusters/cells with time smaller than this value, in ns.
Float_t GetHistoRMin() const
virtual AliEMCALGeometry * GetEMCALGeometry() const
Int_t fNEBinCuts
Number of energy bin cuts.
Float_t GetHistoRMax() const
Bool_t fFillClusterMaxCellHisto
Fill cluster cell max histograms.
TH2F * fhTrackMatchedDPhiNegMod
! Phi distance between negative track and cluster vs module for E > 0.5 GeV
void InitParameters()
Initialize the parameters of the analysis.
TH2F * fhNCellsPerCluster
! N cells per cluster vs cluster energy
TH2F * fhNCellsPerClusterWeirdMod
! N cells per clusters different module, Reco, ridiculously large energy
TH2F * fhGenMCAccEtaPhi[4]
! eta vs phi of primary particle, in acceptance
Bool_t IsInFiducialCut(Float_t eta, Float_t phi, Int_t det) const
TH2F * fhAmpMod
! Cell amplitude distribution for different module, Reco
TH2F * fhCaloV0SCorrNCells
! Calo vs V0 signal, number of cells
Int_t GetHistoV0MultiplicityBins() const
TH2F ** fhIMMod
! cluster pairs invariant mass, different module,
TH2F ** fhNCellsPerClusterMod
! N cells per clusters different module, Reco
TH2F * fhTrackMatchedDEtaPos
! Eta distance between track and cluster vs cluster E, after and before photon cuts ...
Int_t GetHistoV0SignalMin() const
Helper class creating user defined custom binning.
Int_t GetHistoV0MultiplicityMin() const
Float_t GetHistoShowerShapeMin() const
TH3F * fhEtaPhiAmpCell
! eta vs phi vs amplitude, cells
TH2F * fh1EleEOverPMod
! p/E for track-cluster matches, dR < 0.2, 60 < dEdx < 100, per SM
TH2F * fhCaloEvPNCells
! Calo vs event plane angle, number of cells
TH2F * fhBadClusterLambda0
! Cluster Lambda0 vs Energy, clusters declared bad
Float_t GetHistoXMax() const
TH2F * fhClusterPairDiffTimeEPi0MassDCalSame
! DCal Cluster time TOF difference, for pairs in 0.1 < mass < 0.18, pairs in same Module ...
TH2F * fhRecoMCPhi[7][2]
! phi generated particle vs reconstructed phi
Int_t GetHistodEdxBins() const
TH2F * fhTimeId
! Time vs Absolute cell Id
virtual AliCalorimeterUtils * GetCaloUtils() const
TH2F * fh1EOverP
! p/E for track-cluster matches
Int_t fNMaxRowsFullMin
Last of EMCAL/PHOS rows full detector.
Int_t GetHistoNClusterCellMax() const
TH2F * fhIMvsOpAngle
! Cluster pairs opening angle vs mass
TH2F * fhRecoMCEta[7][2]
! eta generated particle vs reconstructed Eta
Int_t GetHistoTrackResidualEtaBins() const
TH2F * fh2EledEdxMod
! dE/dx for electron candidates, per SM
TH2F * fhBadClusterLambda1
! Cluster Lambda1 vs Energy, clusters declared bad
TH2F * fhMCEle1EOverPR02
! p/E for track-cluster matches, dR < 0.2, MC electrons
Int_t fEMCALClusterNCellMin
Minimum number of cells on EMCal clusters.
Int_t GetHistoTrackResidualPhiBins() const
TH1F * fhNClusters
! Number of clusters
virtual AliPHOSGeoUtils * GetPHOSGeometry() const
TH2F * fhMCEle1EOverP
! p/E for track-cluster matches, MC electrons
TH1F * fhMCEle1dR
! distance between projected track and cluster, MC electrons
virtual Int_t GetV0Signal(Int_t i) const
TH2F * fhOpAngle
! Cluster pairs opening angle vs pair pT
TH1F * fhGenMCE[4]
! pt of primary particle
TH2F * fhIMDiff
! Cluster pairs invariant mass vs pair pT, for EMCAL or PHOS pairs
TH2F * fhEMR
! Electromagnetic distance to vertex vs rec energy
virtual Double_t GetEventWeight() const
TH2F * fhClusterPairDiffTimeEPi0MassDCal
! DCal Cluster time TOF difference, for pairs in 0.1 < mass < 0.18
virtual AliCaloPID * GetCaloPID()
TH2F * fhCaloTrackMCorrNCells
! Calo vs V0 Track Multiplicity, number of cells
Int_t GetNumberOfLocalMaxima(AliVCluster *cluster, AliVCaloCells *cells)
Find the number of local maxima in cluster.
Int_t GetHistoTrackMultiplicityBins() const
TH2F * fhIMDCALPHOSSame
! Cluster pairs invariant mass vs pair pT, for DCal-PHOS pairs
TH2F * fhDeltaCellClusterXNCells
! X cluster - X cell distribution (cm) vs N cells in cluster
TH2F * fhTrackMatchedDEtaDPhiPos
! Eta vs Phi distance between track and cluster, E cluster > 0.5 GeV, after and before ...
TH2F * fhEBinClusterEtaPhi[14]
! Eta-Phi location of cluster in different energy bins.
TH1F * fhNCells
! Number of towers/crystals with signal
TH2F * fhIMDCAL
! Cluster pairs invariant mass vs pair pT, for DCal pairs
TH2F * fhTrackMatchedDPhiPos
! Phi distance between track and cluster vs cluster E, after and before photon cuts ...
TH2F * fhCaloEvPNClusters
! Calo vs event plane angle, number of clusters
virtual TObjArray * GetPHOSClusters() const
TH2F * fhDCALPHOSCorrNClusters
! DCAL vs PHOS, number of clusters
Int_t GetHistoRBins() const
Float_t GetHistoEtaMin() const
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
virtual AliMCEvent * GetMC() const
TH2F * fhXCellE
! X (cm) cell distribution vs cell energy
TH2F * fhIMEMCALPHOS
! Cluster pairs invariant mass vs pair pT, for EMCAL(DCal eta acceptance)-EMCAL (PHOS eta acceptance)...
TH2F * fhHaR
! Hadron distance to vertex vs rec energy
TH2F * fhAmpWeirdMod
! Cell amplitude distribution for different module, very large Amp, Reco
TH2F * fhRE
! R=sqrt(x^2+y^2) (cm) cluster distribution vs cluster energy
Int_t GetHistoNClustersMin() const
virtual Int_t GetModuleNumber(AliAODPWG4Particle *part) const
virtual void CreateBinEdges(TArrayD &edges) const
TH2F * fhIM
! Cluster pairs invariant mass vs pair pT, for EMCAL or PHOS pairs
Float_t GetHistoVertexDistMax() const
TH2F * fhTimeAmp
! Time vs Amplitude
Float_t GetHistoZMin() const
void CalculateAverageTime(AliVCluster *clus, AliVCaloCells *cells, Double_t timeAverages[2])
TH2F * fhMCEle2MatchdEdx
! dE/dx vs. momentum for all matches, MC electrons
Int_t GetHistoYBins() const
Int_t GetHistoNClustersBins() const
TH1F * fhECharged
! E distribution, Reco, matched with track
TH2F * fhNClustersMod
! Number of clusters for different module, Reco
Int_t fNRCU
Number of EMCAL/PHOS RCU.
TH2F * fhHaVxyz
! Hadron production vertex
TH2F * fhAmpId
! Amplitude measured in towers/crystals vs id of tower.
TH2F * fhCaloV0SCorrECells
! Calo vs V0 signal, total measured cell energy
Float_t GetHistoEtaMax() const
Float_t GetHistodRMin() const
TH1F * fhAmplitude
! Amplitude measured in towers/crystals
Int_t GetHistoPtBins() const
TH2F * fhEMod
! Cluster E distribution for different module, Reco
TH2F * fhRNCells
! R=sqrt(x^2+y^2) (cm) cluster distribution vs N cells in cluster
Int_t fPHOSClusterNCellMin
Minimum number of cells on PHOS clusters.
TH2F * fhTrackMatchedDEtaNeg
! Eta distance between track and cluster vs cluster E, after and before photon cuts ...
TH2F * fhZCellE
! Z (cm) cell distribution vs cell energy
TH2F * fhGridCellsTime
! Cells ordered in column/row for different module, weighted with time, Reco
AliVTrack * GetMatchedTrack(AliVCluster *cluster, AliVEvent *event, Int_t index=-1) const
TH2F * fhEBinClusterColRow[14]
! Column and row location of cluster max E cell in different energy bins.
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.
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
TH3F * fhXYZCell
! cell X vs Y vs Z (cm)
Float_t fInvMassMaxOpenAngle
Combine clusters within with a maximum opening angle between them. In radians.
TLorentzVector fPrimaryMomentum
! Primary MC momentum, temporary container
Float_t GetHistoPOverEMax() const
TH2F * fhCaloEvPEClusters
! Calo vs event plane angle, total measured cluster energy
Bool_t fCorrelate
Correlate PHOS/EMCAL cells/clusters, also with V0 and track multiplicity.
Bool_t fFillAllCellTimeHisto
Fill all cell time histo.
TH2F * fhTrackMatchedDEtaPosMod
! Eta distance between positive track and cluster vs module for E > 0.5 GeV
TH2F * fhDeltaCellClusterZNCells
! Z cluster - Z cell distribution (cm) vs N cells in cluster
void ClusterHistograms(AliVCluster *cluster, const TObjArray *caloClusters, AliVCaloCells *cells, Int_t absIdMax, Double_t maxCellFraction, Float_t eCrossFrac, Double_t tmax)
Bool_t fFillAllPosHisto2
Fill all the position related histograms 2.
TObjString * GetAnalysisCuts()
Save parameters used for analysis in a string.
void RecalibrateCellAmplitude(Float_t &, Int_t calo, Int_t absId) const
Recalculate cell energy if recalibration factor.
TH2F * fhYCellE
! Y (cm) cell distribution vs cell energy
Int_t GetHistoV0MultiplicityMax() const
virtual AliMCAnalysisUtils * GetMCAnalysisUtils()
Float_t GetHistoAsymmetryMin() const
Int_t GetHistoV0SignalMax() const
TH2F * fhCaloV0MCorrNClusters
! Calo vs V0 multiplicity , number of clusters
TH2F * fh1EleEOverP
! p/E for track-cluster matches, dR < 0.2, 60 < dEdx < 100
Int_t GetHistoNCellsMax() const
virtual void Print(const Option_t *) const
Print some relevant parameters set for the analysis.
TH2F ** fhNCellsSumAmpPerMod
! N cells vs sum of amplitude in different modules, Reco
Int_t GetHistoTimeBins() const
Float_t GetHistoPOverEMin() const
TH2F * fhDeltaCellClusterZE
! Z cluster - Z cell distribution (cm) vs cluster energy
Float_t GetHistoFinePtMin() const
TH2F * fhAmpIdLowGain
! Amplitude measured in towers/crystals vs id of tower, low gain towers
void CellInClusterPositionHistograms(AliVCluster *cluster)
Bool_t ClusterMCHistograms(Bool_t matched, const Int_t *labels, Int_t nLabels, Int_t &pdg)
TH2F * fhGridCellsELowGain
! Cells ordered in column/row for different module, weighted with energy, Reco, low gain ...
TH2F * fh2MatchdEdx
! dE/dx vs. momentum for all matches
void BadClusterHistograms(AliVCluster *clus, const TObjArray *caloClusters, AliVCaloCells *cells, Int_t absIdMax, Double_t maxCellFraction, Float_t eCrossFrac, Double_t tmax)
Float_t GetHistoTimeMax() const
Float_t GetHistoTimeMin() const
Float_t GetHistoShowerShapeMax() const
TH2F * fhMCChHad1EOverP
! p/E for track-cluster matches, MC charged hadrons
TH2F * fhRecoMCDeltaEta[7][2]
! Gen-Reco eta generated particle vs reconstructed E
TH2F * fhMCChHad2MatchdEdx
! dE/dx vs. momentum for all matches, MC charged
TH2F * fhClusterMaxCellCloseCellDiff
! Difference between max cell energy and cell energy of the same cluster
TH2F * fhXE
! X (cm) cluster distribution vs cluster energy
TH2F * fhGridCells
! Cells ordered in column/row for different module, Reco
Float_t GetHistoPhiMax() const
Int_t GetHistoNCellsBins() const
TH2F * fhGridCellsTimeLowGain
! Cells ordered in column/row for different module, weighted with time, Reco, low gain ...
TH2F * fhCaloTrackMCorrECells
! Calo vs V0 Track Multipliticy, total measured cell energy
virtual AliCaloTrackReader * GetReader() const
Float_t fInvMassMaxM02Cut
Maximum M02 shower shape cut value for clusters entering the invariant mass calculation.
Int_t fNMaxRowsFullMax
First of EMCAL/PHOS rows full detector.
TH2F * fhEMVxyz
! Electromagnetic particle production vertex
Int_t GetHistoEtaBins() const
TH2F * fhLambda0
! Cluster Lambda0 vs Energy
void CellHistograms(AliVCaloCells *cells)
TH2F * fhCaloV0MCorrECells
! Calo vs V0 multiplicity, total measured cell energy
Float_t GetHistoTrackResidualEtaMax() const
TH2F * fhEMCALDCALCorrNCells
! EMCAL vs DCAL, number of cells
TH2F * fhMCNeutral1EleEOverP
! p/E for track-cluster matches, dR < 0.2, 60 < dEdx < 100, MC neutral
virtual TObjArray * GetEMCALClusters() const
TH2F * fhClusterPairDiffTimeEPi0MassSame
! EMCal/PHOS Cluster time TOF difference, for pairs in 0.1 < mass < 0.18, pairs in same Module ...
Float_t GetHistoFinePtMax() const
TH2F * fhYE
! Y (cm) cluster distribution vs cluster energy
virtual AliVCaloCells * GetPHOSCells() const
TH1F * fhMCNeutral1dR
! Distance between projected track and cluster, MC neutral
Float_t GetHistoYMin() const
virtual void InitCaloParameters()
TH2F * fhBadClusterTimeEnergy
! Time Max cell of bad cluster
TH2F * fhCaloV0SCorrEClusters
! Calo vs V0 signal, total measured cluster energy
Bool_t fFillAllCellHistograms
Fill all cell related histograms.
TH2F * fhDCALPHOSCorrEClusters
! DCAL vs PHOS, total measured cluster energy
Bool_t fStudyBadClusters
Study bad clusters not passing selection criteria (exotic, shower shape, n cells).
TH2F * fhCaloCenNCells
! Calo vs centrality, number of cells
TH2F * fhYNCells
! Y (cm) cluster distribution vs N cells in cluster
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.
TH2F * fhCaloV0MCorrNCells
! Calo vs V0 multiplicity, number of cells
TH2F * fhMCNeutral1EOverP
! p/E for track-cluster matches, MC neutral
TH2F * fhMCChHad1EOverPR02
! p/E for track-cluster matches, dR < 0.2, MC charged hadrons
Int_t GetHistodRBins() const
TH2F * fhGridCellsLowGain
! Cells ordered in column/row for different module, Reco, low gain
TH2F * fhAsym
! Cluster pairs invariant mass vs pair pT
TH2F * fhRecoMCE[7][2]
! E generated particle vs reconstructed E
TH2F * fhTrackMatchedDEtaNegMod
! Eta distance between negative track and cluster vs module for E > 0.5 GeV
TH2F * fhEMCALPHOSCorrECells
! EMCAL vs PHOS, total measured cell energy
Int_t GetHistoNClustersMax() const
void Print(const Option_t *opt) const
Print some relevant parameters set for the analysis.
TH2F * fhTimeAmpLowGain
! Time vs Amplitude, low gain
void ClusterLoopHistograms(const TObjArray *clusters, AliVCaloCells *cells)
TH2F * fhDCALPHOSCorrECells
! DCAL vs PHOS, total measured cell energy
Bool_t fFillEBinAcceptanceHisto
Fill histograms with cluster eta-phi distribution and column-row cell, for different energy bins...
TH2F * fhEMCALDCALCorrECells
! EMCAL vs DCAL, total measured cell energy
Float_t fInvMassMaxTimeDifference
Maximum difference between the time of the 2 clusters to be considered in invariant mass...
TH2F * fhEWeirdMod
! Cluster E distribution for different module, very large E, Reco
TH2F * fhCellTimeSpreadRespectToCellMax
! Difference of the time of cell with maximum dep energy and the rest of cells
Bool_t fFillAllTMHisto
Fill track matching histograms.
TH2F * fhSumClustersEnergyMod
! Sum of clusters energy for different module, Reco
void SetMinimum(Double_t min)
TH2F * fhTimeL1UnCorrId
! Time (not corrected for L1 phase) vs Absolute cell Id
Int_t fNMaxRows
Number of EMCAL/PHOS rows per SM.
TH2F * fhCaloV0SCorrNClusters
! Calo vs V0 signal , number of clusters
TH2F * fhGenMCEtaPhi[4]
! eta vs phi of primary particle
TH2F * fhLambda1
! Cluster Lambda1 vs Energy
Float_t fConstantTimeShift
Apply a 600 ns time shift in case of simulation, shift in ns.