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]++ ;
532 eCellsInModule[nModule]+=amp;
591 if ( cellphi < 0 ) cellphi+=TMath::TwoPi();
605 Float_t rcell = TMath::Sqrt(cellpos[0]*cellpos[0]+cellpos[1]*cellpos[1]);
613 Int_t relId[4], module;
621 Float_t rcell = TMath::Sqrt(xyz.X()*xyz.X()+xyz.Y()*xyz.Y());
641 if ( imod < fFirstModule || imod >
fLastModule ) continue ;
643 AliDebug(1,Form(
"Module %d, calo %s, N cells %d, sum Amp %f", imod,
GetCalorimeterString().
Data(), nCellsInModule[imod], eCellsInModule[imod]));
652 delete [] nCellsInModule;
653 delete [] eCellsInModule;
662 Int_t nCaloCellsPerCluster = clus->GetNCells();
664 UShort_t * indexList = clus->GetCellsAbsId();
667 clus->GetPosition(pos);
672 for (
Int_t ipos = 0; ipos < nCaloCellsPerCluster; ipos++)
675 Int_t absId = indexList[ipos];
692 Float_t r = TMath::Sqrt(pos[0] *pos[0] + pos[1] * pos[1] );
693 Float_t rcell = TMath::Sqrt(cellpos[0]*cellpos[0] + cellpos[1]* cellpos[1]);
701 Int_t relId[4], module;
717 Float_t r = TMath::Sqrt(pos[0] * pos[0] + pos[1] * pos[1] );
718 Float_t rcell = TMath::Sqrt(xyz.X() * xyz.X() + xyz.Y() * xyz.Y());
756 Int_t nCaloCellsPerCluster = clus->GetNCells();
761 for(
Int_t iclus2 = 0; iclus2 < caloClusters->GetEntriesFast(); iclus2++ )
763 AliVCluster* clus2 = (AliVCluster*) caloClusters->At(iclus2);
765 if( clus->GetID() == clus2->GetID() )
continue;
767 if( clus->GetM02() > 0.01 && clus2->GetM02() > 0.01 )
771 Double_t tof2 = clus2->GetTOF()*1.e9;
777 if ( nModule2 == nModule )
783 if(nCaloCellsPerCluster > 1 &&
798 for (
Int_t ipos = 0; ipos < nCaloCellsPerCluster; ipos++)
800 Int_t absId = clus->GetCellsAbsId()[ipos];
801 if( absId == absIdMax || cells->GetCellAmplitude(absIdMax) < 0.01 )
continue;
803 Float_t frac = cells->GetCellAmplitude(absId)/cells->GetCellAmplitude(absIdMax);
813 Double_t time = cells->GetCellTime(absId);
822 TMath::Abs(TMath::Abs(diff) > 100) && clus->E() > 1 )
834 AliDebug(1,Form(
"cluster: E %2.3f, pT %2.3f, eta %2.3f, phi %2.3f",e,pt,eta,phi*TMath::RadToDeg()));
849 Int_t icol = -1, irow = -1, iRCU = -1, icolAbs = -1, irowAbs = -1;
875 clus->GetPosition(pos);
887 Float_t rxyz = TMath::Sqrt(pos[0]*pos[0]+pos[1]*pos[1]);
910 AliVCaloCells* cells)
916 Int_t nCaloClusters = caloClusters->GetEntriesFast() ;
917 Int_t nCaloClustersAccepted = 0 ;
918 Int_t nCaloCellsPerCluster = 0 ;
931 nClustersInModule[imod] = 0;
932 energyInModule [imod] = 0;
938 for(
Int_t iclus = 0; iclus < nCaloClusters; iclus++)
940 AliDebug(1,Form(
"Cluster: %d/%d, data %d",iclus+1,nCaloClusters,
GetReader()->GetDataType()));
942 AliVCluster* clus = (AliVCluster*) caloClusters->At(iclus);
946 if ( nModule < fFirstModule || nModule >
fLastModule )
948 AliDebug(1,Form(
"Cluster module out of range %d",nModule));
962 AliDebug(1,Form(
"Remove cluster with TOF %2.2f",tof));
974 AliDebug(1,Form(
"Remove cluster with phi %2.2f and eta %2.2f",
980 nLabel = clus->GetNLabels();
981 labels = clus->GetLabels();
984 nCaloCellsPerCluster = clus->GetNCells();
990 Double_t tmax = cells->GetCellTime(absIdMax);
1003 if(nModule >=0 && nModule < fNModules)
1013 Float_t ampMax = cells->GetCellAmplitude(absIdMax);
1017 Bool_t goodCluster =
IsGoodCluster(absIdMax, clus->GetM02(), nCaloCellsPerCluster, cells);
1022 AliDebug(1,Form(
"Accept cluster? %d",goodCluster));
1035 maxCellFraction, eCrossFrac, tmax);
1037 nCaloClustersAccepted++;
1042 nClustersInModule[nModule]++;
1044 energyInModule [nModule] += clus->E();
1051 Int_t mcOK = kFALSE;
1053 if(
IsDataMC() && nLabel > 0 && labels)
1065 && nCaloClusters > 1
1066 && nCaloCellsPerCluster > 1
1067 &&
GetCaloUtils()->GetNumberOfLocalMaxima(clus,cells) == 1
1083 if ( imod < fFirstModule || imod >
fLastModule ) continue ;
1085 AliDebug(1,Form(
"Module %d calo %s clusters %d, sum E %f", imod,
GetCalorimeterString().
Data(), nClustersInModule[imod], energyInModule[imod]));
1093 delete [] nClustersInModule;
1094 delete [] energyInModule;
1110 if(!labels || nLabels<=0)
1112 AliWarning(Form(
"Strange, labels array %p, n labels %d", labels,nLabels));
1116 AliDebug(1,Form(
"Primaries: nlabels %d",nLabels));
1119 Int_t label = labels[0];
1123 AliDebug(1,Form(
" *** bad label ***: label %d", label));
1127 if( label >=
GetMC()->GetNumberOfTracks())
1129 AliDebug(1,Form(
"*** large label ***: label %d, n tracks %d", label,
GetMC()->GetNumberOfTracks()));
1136 if(phi < 0) phi +=TMath::TwoPi();
1138 AliVParticle * primary = 0x0;
1151 primary =
GetMC()->GetTrack(label);
1153 pdg0 = TMath::Abs(primary->PdgCode());
1155 status = primary->MCStatusCode();
1156 vxMC = primary->Xv();
1157 vyMC = primary->Yv();
1158 iParent = primary->GetMother();
1160 AliDebug(1,
"Cluster most contributing mother:");
1161 AliDebug(1,Form(
"\t Mother label %d, pdg %d, %s, status %d, Primary? %d, Physical Primary? %d, parent %d",
1162 iMother, pdg0, primary->GetName(),status, primary->IsPrimary(), primary->IsPhysicalPrimary(), iParent));
1168 primary =
GetMC()->GetTrack(iParent);
1169 pdg = TMath::Abs(primary->PdgCode());
1171 AliDebug(2,
"Converted cluster!. Find before conversion:");
1173 while((pdg == 22 || pdg == 11) && status != 1)
1175 Int_t iMotherOrg = iMother;
1177 primary =
GetMC()->GetTrack(iMother);
1178 status = primary->MCStatusCode();
1179 pdg = TMath::Abs(primary->PdgCode());
1180 iParent = primary->GetMother();
1184 if(pdg==111 || pdg==221)
1186 primary =
GetMC()->GetTrack(iMotherOrg);
1196 AliDebug(2,Form(
"\t pdg %d, index %d, %s, status %d",pdg, iMother, primary->GetName(),status));
1199 AliDebug(1,
"Converted Cluster mother before conversion:");
1200 AliDebug(1,Form(
"\t Mother label %d, pdg %d, %s, status %d, Primary? %d, Physical Primary? %d, parent %d",
1201 iMother, pdg, primary->GetName(), status, primary->IsPrimary(), primary->IsPhysicalPrimary(), iParent));
1209 AliDebug(2,
"Overlapped Meson decay!, Find it:");
1211 while(pdg != 111 && pdg != 221)
1215 primary =
GetMC()->GetTrack(iMother);
1216 status = primary->MCStatusCode();
1217 pdg = TMath::Abs(primary->PdgCode());
1218 iParent = primary->GetMother();
1220 if( iParent < 0 )
break;
1222 AliDebug(2,Form(
"\t pdg %d, %s, index %d",pdg, primary->GetName(),iMother));
1226 AliWarning(
"Tagged as Overlapped photon but meson not found, why?");
1231 AliDebug(2,Form(
"Overlapped %s decay, label %d",primary->GetName(),iMother));
1236 phiMC = primary->Phi();
1237 etaMC = primary->Eta();
1238 pdg = TMath::Abs(primary->PdgCode());
1240 charge = primary->Charge();
1244 Float_t rVMC = TMath::Sqrt(vxMC*vxMC + vyMC*vyMC);
1245 if( ( pdg == 22 || TMath::Abs(pdg) == 11 ) && status != 1 )
1278 else if(charge == 0)
1293 if( mcIndex >= 0 && mcIndex < 7 && e > 0.5 && eMC > 0.5)
1304 if( primary )
return kTRUE ;
1320 if(phi < 0) phi +=TMath::TwoPi();
1338 Double_t dedx = track->GetTPCsignal();
1339 Int_t nITS = track->GetNcls(0);
1340 Int_t nTPC = track->GetNcls(1);
1341 Bool_t positive = kFALSE;
1342 if(track) positive = (track->Charge()>0);
1345 Float_t deta = clus->GetTrackDz();
1346 Float_t dphi = clus->GetTrackDx();
1347 Double_t dR = TMath::Sqrt(dphi*dphi + deta*deta);
1350 if( TMath::Abs(dphi) < 999 )
1387 if(dedx > 60 && dedx < 100)
1397 if(e > 0.5 && tmom > 0.5)
1403 if(dR < 0.02 && eOverP > 0.6 && eOverP < 1.2
1404 && clus->GetNCells() > 1 && nITS > 3 && nTPC > 20)
1412 Double_t charge = TDatabasePDG::Instance()->GetParticle(pdg)->Charge();
1414 if(TMath::Abs(pdg) == 11)
1438 else if(charge == 0)
1463 if(!caloClustersEMCAL || !caloClustersPHOS)
1465 AliDebug(1,Form(
"PHOS (%p) or EMCAL (%p) clusters array not available, do not correlate",caloClustersPHOS,caloClustersEMCAL));
1473 if(!cellsEMCAL || !cellsPHOS)
1475 AliDebug(1,Form(
"PHOS (%p) or EMCAL (%p) cells array ot available, do not correlate",cellsPHOS,cellsEMCAL));
1484 Float_t sumClusterEnergyEMCAL = 0;
1485 Float_t sumClusterEnergyDCAL = 0;
1486 Float_t sumClusterEnergyPHOS = 0;
1490 AliVCluster* cluster = 0;
1491 for(iclus = 0 ; iclus < caloClustersEMCAL->GetEntriesFast() ; iclus++)
1493 cluster = (AliVCluster*)caloClustersEMCAL->At(iclus);
1494 Float_t energy = cluster->E();
1496 if( energy < 0.5 )
continue;
1498 if(cluster->GetCellsAbsId()[0] < 12288)
1501 sumClusterEnergyEMCAL +=
energy;
1506 sumClusterEnergyDCAL +=
energy;
1510 for(iclus = 0 ; iclus < caloClustersPHOS ->GetEntriesFast(); iclus++)
1512 cluster = (AliVCluster*) caloClustersPHOS->At(iclus);
1514 energy = cluster->E();
1516 if( energy < 0.5 )
continue;
1519 sumClusterEnergyPHOS +=
energy;
1523 Int_t ncellsEMCAL = 0 ;
1524 Int_t ncellsDCAL = 0 ;
1525 Int_t ncellsPHOS = 0;
1527 Float_t sumCellEnergyEMCAL = 0;
1528 Float_t sumCellEnergyDCAL = 0;
1529 Float_t sumCellEnergyPHOS = 0;
1531 for(icell = 0 ; icell < cellsEMCAL->GetNumberOfCells() ; icell++)
1533 Float_t amp = cellsEMCAL->GetAmplitude(icell);
1534 Int_t cellId = cellsEMCAL->GetCellNumber(icell);
1541 sumCellEnergyEMCAL += amp;
1546 sumCellEnergyDCAL += amp;
1550 for(icell = 0 ; icell < cellsPHOS->GetNumberOfCells(); icell++)
1552 Float_t amp = cellsPHOS->GetAmplitude(icell);
1553 Int_t cellId = cellsPHOS->GetCellNumber(icell);
1555 if ( cellId < 0 ) continue ;
1560 sumCellEnergyPHOS += amp;
1586 Int_t ncl = nclPHOS;
1587 Float_t sumClusterEnergy = sumClusterEnergyPHOS;
1588 Int_t ncells = ncellsPHOS;
1589 Float_t sumCellEnergy = sumCellEnergyPHOS;
1593 ncl = nclEMCAL + nclDCAL;
1594 sumClusterEnergy = sumClusterEnergyEMCAL + sumClusterEnergyDCAL;
1595 ncells = ncellsEMCAL + ncellsDCAL;
1596 sumCellEnergy = sumCellEnergyEMCAL + sumCellEnergyDCAL;
1624 AliDebug(1,
"Correlate():");
1625 AliDebug(1,Form(
"\t EMCAL: N cells %d, N clusters %d, summed E cells %f, summed E clusters %f",
1626 ncellsEMCAL,nclEMCAL, sumCellEnergyEMCAL,sumClusterEnergyEMCAL));
1627 AliDebug(1,Form(
"\t DCAL : N cells %d, N clusters %d, summed E cells %f, summed E clusters %f",
1628 ncellsDCAL,nclDCAL, sumCellEnergyDCAL,sumClusterEnergyDCAL));
1629 AliDebug(1,Form(
"\t PHOS : N cells %d, N clusters %d, summed E cells %f, summed E clusters %f",
1630 ncellsPHOS,nclPHOS,sumCellEnergyPHOS,sumClusterEnergyPHOS));
1631 AliDebug(1,Form(
"\t V0 : Signal %d, Multiplicity %d, Track Multiplicity %d", v0S,v0M,trM));
1632 AliDebug(1,Form(
"\t centrality : %f, Event plane angle %f", cen,ep));
1641 const Int_t buffersize = 255;
1642 char onePar[buffersize] ;
1644 snprintf(onePar,buffersize,
"--- AliAnaCalorimeterQA ---:") ;
1671 return new TObjString(parList) ;
1681 outputContainer->SetName(
"QAHistos") ;
1733 Float_t rowcellmin = fNMaxRowsFullMin-1.5;
1744 fhE =
new TH1F (
"hE",
"#it{E} reconstructed clusters ", nptbins*5,ptmin,ptmax*5);
1745 fhE->SetXTitle(
"#it{E} (GeV)");
1746 outputContainer->Add(
fhE);
1748 fhPt =
new TH1F (
"hPt",
"#it{p}_{T} reconstructed clusters", nptbins,ptmin,ptmax);
1749 fhPt->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1750 outputContainer->Add(
fhPt);
1752 fhNClusters =
new TH1F (
"hNClusters",
"# clusters", nclbins,nclmin,nclmax);
1756 fhNCellsPerCluster =
new TH2F (
"hNCellsPerCluster",
"# cells per cluster vs energy",nptbins,ptmin,ptmax, nceclbins,nceclmin,nceclmax);
1762 nceclbins*2,nceclmin,nceclmax*2,totalSM,fFirstModule-0.5,
fLastModule+0.5);
1769 fhPhi =
new TH1F (
"hPhi",
"#varphi reconstructed clusters ",nphibins,phimin,phimax);
1770 fhPhi->SetXTitle(
"#varphi (rad)");
1771 outputContainer->Add(
fhPhi);
1773 fhEta =
new TH1F (
"hEta",
"#eta reconstructed clusters ",netabins,etamin,etamax);
1774 fhEta->SetXTitle(
"#eta ");
1775 outputContainer->Add(
fhEta);
1782 (Form(
"hEBin%d_Cluster_EtaPhi",ie),
1783 Form(
"#eta vs #varphi, cluster, %2.2f<#it{p}_{T}<%2.2f GeV/#it{c}",
fEBinCuts[ie],
fEBinCuts[ie+1]),
1784 netabins,etamin,etamax,nphibins,phimin,phimax);
1790 (Form(
"hEBin%d_Cluster_ColRow",ie),
1791 Form(
"column vs row, cluster max E cell, %2.2f<#it{p}_{T}<%2.2f GeV/#it{c}",
fEBinCuts[ie],
fEBinCuts[ie+1]),
1792 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
1800 (Form(
"hEBin%d_Cell_ColRow",ie),
1801 Form(
"column vs row, cell, %2.2f<#it{p}_{T}<%2.2f GeV/#it{c}",
fEBinCuts[ie],
fEBinCuts[ie+1]),
1802 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
1813 fhEtaPhiE =
new TH3F (
"hEtaPhiE",
"#eta vs #varphi vs energy, reconstructed clusters",
1814 netabins,etamin,etamax,nphibins,phimin,phimax,nptbins,ptmin,ptmax);
1822 fhEtaPhi =
new TH2F (
"hEtaPhi",
"#eta vs #varphi for #it{E} > 0.5 GeV, reconstructed clusters",
1823 netabins,etamin,etamax,nphibins,phimin,phimax);
1825 fhEtaPhi->SetYTitle(
"#varphi (rad)");
1831 nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
1839 nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
1845 nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
1859 fhLambda0 =
new TH2F (
"hLambda0",
"shower shape, #lambda^{2}_{0} vs E",
1860 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1861 fhLambda0->SetXTitle(
"#it{E}_{cluster} (GeV)");
1862 fhLambda0->SetYTitle(
"#lambda^{2}_{0}");
1865 fhLambda1 =
new TH2F (
"hLambda1",
"shower shape, #lambda^{2}_{1} vs E",
1866 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1867 fhLambda1->SetXTitle(
"#it{E}_{cluster} (GeV)");
1868 fhLambda1->SetYTitle(
"#lambda^{2}_{1}");
1872 nptbins,ptmin,ptmax,10,0,10);
1873 fhNLocMax->SetXTitle(
"#it{E}_{cluster} (GeV)");
1880 nptbins,ptmin,ptmax, 100,0,1.);
1886 nptbins,ptmin,ptmax, 500,0,100.);
1891 fhClusterMaxCellDiff =
new TH2F (
"hClusterMaxCellDiff",
"energy vs difference of cluster energy - max cell energy / cluster energy, good clusters",
1892 nptbins,ptmin,ptmax, 500,0,1.);
1897 fhClusterMaxCellECross =
new TH2F (
"hClusterMaxCellECross",
"1 - Energy in cross around max energy cell / max energy cell vs cluster energy, good clusters",
1898 nptbins,ptmin,ptmax, 400,-1,1.);
1907 nptbins,ptmin,ptmax, nceclbins,nceclmin,nceclmax);
1913 nceclbins,nceclmin,nceclmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
1918 fhBadClusterEnergy =
new TH1F (
"hBadClusterEnergy",
"Bad cluster energy", nptbins,ptmin,ptmax);
1923 netabins,etamin,etamax,nphibins,phimin,phimax);
1929 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1934 fhBadClusterLambda1 =
new TH2F (
"hBadClusterLambda1",
"Bad cluster,shower shape, #lambda^{2}_{1} vs E for bad cluster ",
1935 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1941 nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
1948 fhBadClusterPairDiffTimeE =
new TH2F(
"hBadClusterPairDiffTimeE",
"cluster pair time difference (bad - good) vs E from bad cluster",nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
1956 fhClusterMaxCellDiffNoCut =
new TH2F (
"hClusterMaxCellDiffNoCut",
"energy vs difference of cluster energy - max cell energy / cluster energy",
1957 nptbins,ptmin,ptmax, 500,0,1.);
1963 nptbins,ptmin,ptmax, 100,0,1.);
1969 nptbins,ptmin,ptmax, 500,0,100);
1974 fhBadClusterMaxCellDiff =
new TH2F (
"hBadClusterMaxCellDiff",
"energy vs difference of cluster energy - max cell energy / cluster energy for bad clusters",
1975 nptbins,ptmin,ptmax, 500,0,1.);
1980 fhBadClusterMaxCellECross =
new TH2F (
"hBadClusterMaxCellECross",
"1 - #it{E}_{+} around max energy cell / max energy cell vs cluster energy, bad clusters",
1981 nptbins,ptmin,ptmax, 400,-1,1.);
2010 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
2015 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
2020 nresetabins,resetamin,resetamax,nresphibins,resphimin,resphimax);
2025 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
2030 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
2035 nresetabins,resetamin,resetamax,nresphibins,resphimin,resphimax);
2041 nresetabins,resetamin,resetamax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2046 nresetabins,resetamin,resetamax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2051 nresetabins,resetamin,resetamax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2056 nresetabins,resetamin,resetamax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2072 fhECharged =
new TH1F (
"hECharged",
"#it{E} reconstructed clusters, matched with track", nptbins,ptmin,ptmax);
2076 fhPtCharged =
new TH1F (
"hPtCharged",
"#it{p}_{T} reconstructed clusters, matched with track", nptbins,ptmin,ptmax);
2077 fhPtCharged->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
2080 fhPhiCharged =
new TH1F (
"hPhiCharged",
"#varphi reconstructed clusters, matched with track",nphibins,phimin,phimax);
2084 fhEtaCharged =
new TH1F (
"hEtaCharged",
"#eta reconstructed clusters, matched with track",netabins,etamin,etamax);
2090 fhEtaPhiECharged =
new TH3F (
"hEtaPhiECharged",
"#eta vs #varphi, reconstructed clusters, matched with track",
2091 netabins,etamin,etamax,nphibins,phimin,phimax,nptbins,ptmin,ptmax);
2099 fhEtaPhiCharged =
new TH2F (
"hEtaPhiCharged",
"#eta vs #varphi for #it{E} > 0.5 GeV, reconstructed clusters, with matched track",
2100 netabins,etamin,etamax,nphibins,phimin,phimax);
2106 fh1EOverP =
new TH2F(
"h1EOverP",
"TRACK matches #it{E}/#it{p}",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
2108 fh1EOverP->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
2111 fh2dR =
new TH2F(
"h2dR",
"TRACK matches #Delta #it{R}",nptbins,ptmin,ptmax,ndRbins,dRmin,dRmax);
2112 fh2dR->SetYTitle(
"#Delta #it{R} (rad)");
2113 fh2dR->SetXTitle(
"#it{E} cluster (GeV)");
2114 outputContainer->Add(
fh2dR) ;
2116 fh2MatchdEdx =
new TH2F(
"h2MatchdEdx",
"#it{dE/dx} vs. #it{p} for all matches",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
2121 fh2EledEdx =
new TH2F(
"h2EledEdx",
"#it{dE/dx} vs. #it{p} for electrons",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
2126 fh1EOverPR02 =
new TH2F(
"h1EOverPR02",
"TRACK matches #it{E}/#it{p}, all",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
2131 fh1EleEOverP =
new TH2F(
"h1EleEOverP",
"Electron candidates #it{E}/#it{p} (60<#it{dE/dx}<100)",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
2140 (
"h1EOverP_PerModule",
"TRACK matches #it{E}/#it{p}, #it{E}_{cl}&#it{p}_{tr}>0.5 Gev/#it{c}",
2141 nPoverEbins,eOverPmin,eOverPmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2147 (
"h2dR_PerModule",
"TRACK matches #Delta #it{R}, #it{E}_{cl}&#it{p}_{tr}>0.5 Gev/#it{c}",
2148 ndRbins,dRmin,dRmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2149 fh2dRMod->SetXTitle(
"#Delta #it{R} (rad)");
2154 (
"h2MatchdEdx_PerModule",
"#it{dE/dx} vs. #it{p} for all matches, #it{E}_{cl}&#it{p}_{tr}>0.5 Gev/#it{c}",
2155 ndedxbins,dedxmin,dedxmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2161 (
"h2EledEdx_PerModule",
"#it{dE/dx} vs. #it{p} for electrons, #it{E}_{cl}&#it{p}_{tr}>0.5 Gev/#it{c}",
2162 ndedxbins,dedxmin,dedxmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2168 (
"h1EOverPR02_PerModule",
"TRACK matches #it{E}/#it{p}, all, #it{E}_{cl}&#it{p}_{tr}>0.5 Gev/#it{c}",
2169 nPoverEbins,eOverPmin,eOverPmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2175 (
"h1EleEOverP_PerModule",
"Electron candidates #it{E}/#it{p} (60<#it{dE/dx}<100), #it{E}_{cl}&#it{p}_{tr}>0.5 Gev/#it{c}",
2176 nPoverEbins,eOverPmin,eOverPmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2184 if ( fFirstModule < 12 )
2186 fhIM =
new TH2F (
"hIM",
"Cluster pairs (EMCAL or PHOS) Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1",
2187 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2188 fhIM->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2189 fhIM->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2190 outputContainer->Add(
fhIM);
2192 fhIMDiff =
new TH2F (
"hIMDiff",
"Cluster pairs (EMCAL or PHOS) Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1, different SM",
2193 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2194 fhIMDiff->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2195 fhIMDiff->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2198 fhIMSame =
new TH2F (
"hIMSame",
"Cluster pairs (EMCAL or PHOS) Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1, same SM",
2199 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2200 fhIMSame->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2201 fhIMSame->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2206 fhIMEMCALPHOS =
new TH2F (
"hIMEMCALPHOS",
"Cluster pairs in DCAL-PHOS Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1",
2207 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2208 fhIMEMCALPHOS->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2209 fhIMEMCALPHOS->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2212 fhIMEMCALPHOSSame =
new TH2F (
"hIMEMCALPHOSSame",
"Cluster pairs in DCAL-PHOS Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1, same #varphi sector",
2213 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2222 fhIMDCAL =
new TH2F (
"hIMDCAL",
"Cluster pairs in DCAL Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1",
2223 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2224 fhIMDCAL->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2225 fhIMDCAL->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2228 fhIMDCALDiff =
new TH2F (
"hIMDCALDiff",
"Cluster pairs in DCAL Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1, different SM",
2229 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2230 fhIMDCALDiff->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2231 fhIMDCALDiff->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2234 fhIMDCALSame =
new TH2F (
"hIMDCALSame",
"Cluster pairs in DCAL Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1, same SM",
2235 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2236 fhIMDCALSame->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2237 fhIMDCALSame->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2240 fhIMDCALPHOS =
new TH2F (
"hIMDCALPHOS",
"Cluster pairs in DCAL-PHOS Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1",
2241 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2242 fhIMDCALPHOS->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2243 fhIMDCALPHOS->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2246 fhIMDCALPHOSSame =
new TH2F (
"hIMDCALPHOSSame",
"Cluster pairs in DCAL-PHOS Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1, same #varphi sector",
2247 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2255 if ( fFirstModule < 12 )
2258 nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
2264 nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
2273 nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
2279 nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
2286 fhAsym =
new TH2F (
"hAssym",
"Cluster pairs Asymmetry vs reconstructed pair energy",nptbins,ptmin,ptmax,nasymbins,asymmin,asymmax);
2287 fhAsym->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2288 fhAsym->SetYTitle(
"#it{Asymmetry}");
2289 outputContainer->Add(
fhAsym);
2293 fhOpAngle =
new TH2F (
"hOpeningAngle",
"Cluster pairs opening angle vs reconstructed pair #it{p}_{T}, ncell > 1",
2294 nptbins,ptmin,ptmax, 180,0,TMath::Pi());
2295 fhOpAngle->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2296 fhOpAngle->SetYTitle(
"Opening angle (degrees)");
2300 fhIMvsOpAngle =
new TH2F (
"hIMvsOpAngle",
"Cluster pairs Invariant mass vs reconstructed pair opening angle, ncell > 1",
2303 fhIMvsOpAngle->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2310 fhXYZ =
new TH3F (
"hXYZ",
"Cluster: #it{x} vs #it{y} vs #it{z}",xbins,xmin,xmax,ybins,ymin,ymax,zbins,zmin,zmax);
2311 fhXYZ->SetXTitle(
"#it{x} (cm)");
2312 fhXYZ->SetYTitle(
"#it{y} (cm)");
2313 fhXYZ->SetZTitle(
"#it{z} (cm) ");
2314 outputContainer->Add(
fhXYZ);
2316 fhXE =
new TH2F (
"hXE",
"Cluster X position vs cluster energy",xbins,xmin,xmax,nptbins,ptmin,ptmax);
2317 fhXE->SetXTitle(
"#it{x} (cm)");
2318 fhXE->SetYTitle(
"#it{E} (GeV)");
2319 outputContainer->Add(
fhXE);
2321 fhYE =
new TH2F (
"hYE",
"Cluster Y position vs cluster energy",ybins,ymin,ymax,nptbins,ptmin,ptmax);
2322 fhYE->SetXTitle(
"#it{y} (cm)");
2323 fhYE->SetYTitle(
"#it{E} (GeV)");
2324 outputContainer->Add(
fhYE);
2326 fhZE =
new TH2F (
"hZE",
"Cluster Z position vs cluster energy",zbins,zmin,zmax,nptbins,ptmin,ptmax);
2327 fhZE->SetXTitle(
"#it{z} (cm)");
2328 fhZE->SetYTitle(
"#it{E} (GeV)");
2329 outputContainer->Add(
fhZE);
2331 fhRE =
new TH2F (
"hRE",
"Cluster R position vs cluster energy",rbins,rmin,rmax,nptbins,ptmin,ptmax);
2332 fhRE->SetXTitle(
"r = #sqrt{x^{2}+y^{2}} (cm)");
2333 fhRE->SetYTitle(
"#it{E} (GeV)");
2334 outputContainer->Add(
fhRE);
2336 fhXNCells =
new TH2F (
"hXNCells",
"Cluster X position vs N Cells per Cluster",xbins,xmin,xmax,nceclbins,nceclmin,nceclmax);
2338 fhXNCells->SetYTitle(
"N cells per cluster");
2341 fhYNCells =
new TH2F (
"hYNCells",
"Cluster Y position vs N Cells per Cluster",ybins,ymin,ymax,nceclbins,nceclmin,nceclmax);
2343 fhYNCells->SetYTitle(
"N cells per cluster");
2346 fhZNCells =
new TH2F (
"hZNCells",
"Cluster Z position vs N Cells per Cluster",zbins,zmin,zmax,nceclbins,nceclmin,nceclmax);
2348 fhZNCells->SetYTitle(
"N cells per cluster");
2351 fhRNCells =
new TH2F (
"hRNCells",
"Cluster R position vs N Cells per Cluster",rbins,rmin,rmax,nceclbins,nceclmin,nceclmax);
2352 fhRNCells->SetXTitle(
"r = #sqrt{x^{2}+y^{2}} (cm)");
2353 fhRNCells->SetYTitle(
"N cells per cluster");
2359 fhRCellE =
new TH2F (
"hRCellE",
"Cell R position vs cell energy",rbins,rmin,rmax,nptbins,ptmin,ptmax);
2360 fhRCellE->SetXTitle(
"r = #sqrt{x^{2}+y^{2}} (cm)");
2361 fhRCellE->SetYTitle(
"#it{E} (GeV)");
2364 fhXCellE =
new TH2F (
"hXCellE",
"Cell X position vs cell energy",xbins,xmin,xmax,nptbins,ptmin,ptmax);
2365 fhXCellE->SetXTitle(
"#it{x} (cm)");
2366 fhXCellE->SetYTitle(
"#it{E} (GeV)");
2369 fhYCellE =
new TH2F (
"hYCellE",
"Cell Y position vs cell energy",ybins,ymin,ymax,nptbins,ptmin,ptmax);
2370 fhYCellE->SetXTitle(
"#it{y} (cm)");
2371 fhYCellE->SetYTitle(
"#it{E} (GeV)");
2374 fhZCellE =
new TH2F (
"hZCellE",
"Cell Z position vs cell energy",zbins,zmin,zmax,nptbins,ptmin,ptmax);
2375 fhZCellE->SetXTitle(
"#it{z} (cm)");
2376 fhZCellE->SetYTitle(
"#it{E} (GeV)");
2379 fhXYZCell =
new TH3F (
"hXYZCell",
"Cell : #it{x} vs #it{y} vs #it{z}",xbins,xmin,xmax,ybins,ymin,ymax,zbins,zmin,zmax);
2385 Float_t dx = TMath::Abs(xmin)+TMath::Abs(xmax);
2386 Float_t dy = TMath::Abs(ymin)+TMath::Abs(ymax);
2387 Float_t dz = TMath::Abs(zmin)+TMath::Abs(zmax);
2388 Float_t dr = TMath::Abs(rmin)+TMath::Abs(rmax);
2390 fhDeltaCellClusterRNCells =
new TH2F (
"hDeltaCellClusterRNCells",
"Cluster-Cell R position vs N Cells per Cluster",rbins*2,-dr,dr,nceclbins,nceclmin,nceclmax);
2395 fhDeltaCellClusterXNCells =
new TH2F (
"hDeltaCellClusterXNCells",
"Cluster-Cell X position vs N Cells per Cluster",xbins*2,-dx,dx,nceclbins,nceclmin,nceclmax);
2400 fhDeltaCellClusterYNCells =
new TH2F (
"hDeltaCellClusterYNCells",
"Cluster-Cell Y position vs N Cells per Cluster",ybins*2,-dy,dy,nceclbins,nceclmin,nceclmax);
2405 fhDeltaCellClusterZNCells =
new TH2F (
"hDeltaCellClusterZNCells",
"Cluster-Cell Z position vs N Cells per Cluster",zbins*2,-dz,dz,nceclbins,nceclmin,nceclmax);
2410 fhDeltaCellClusterRE =
new TH2F (
"hDeltaCellClusterRE",
"Cluster-Cell R position vs cluster energy",rbins*2,-dr,dr,nptbins,ptmin,ptmax);
2411 fhDeltaCellClusterRE->SetXTitle(
"#it{r} = #sqrt{x^{2}+y^{2}}, #it{r}_{clus}-#it{r}_{cell} (cm)");
2415 fhDeltaCellClusterXE =
new TH2F (
"hDeltaCellClusterXE",
"Cluster-Cell X position vs cluster energy",xbins*2,-dx,dx,nptbins,ptmin,ptmax);
2420 fhDeltaCellClusterYE =
new TH2F (
"hDeltaCellClusterYE",
"Cluster-Cell Y position vs cluster energy",ybins*2,-dy,dy,nptbins,ptmin,ptmax);
2425 fhDeltaCellClusterZE =
new TH2F (
"hDeltaCellClusterZE",
"Cluster-Cell Z position vs cluster energy",zbins*2,-dz,dz,nptbins,ptmin,ptmax);
2433 netabins,etamin,etamax,nphibins,phimin,phimax,nptbins,ptmin,ptmax);
2441 fhEtaPhiCell =
new TH2F (
"hEtaPhiCell",
"Cell #eta vs cell #varphi vs cell energy",
2442 netabins,etamin,etamax,nphibins,phimin,phimax);
2469 fhEMod =
new TH2F (
"hE_Mod",
"Cluster reconstructed Energy in each present Module",nptbins,ptmin,ptmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2470 fhEMod->SetXTitle(
"#it{E} (GeV)");
2471 fhEMod->SetYTitle(
"Module");
2472 outputContainer->Add(
fhEMod);
2474 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);
2501 if(imod < fFirstModule || imod >
fLastModule)
continue;
2504 Form(
"# clusters in SM vs sum of clusters energy in Module %d",imod),
2505 nptbins,ptmin,ptmax*4, nclbins,nclmin,nclmax);
2511 Form(
"# cells per cluster vs cluster energy in Module %d",imod),
2512 nptbins,ptmin,ptmax, nceclbins,nceclmin,nceclmax);
2520 Form(
"# cells per cluster vs cluster energy in Module %d, no cut",imod),
2521 nptbins,ptmin,ptmax, nceclbins,nceclmin,nceclmax);
2530 Form(
"Cluster pairs Invariant mass vs reconstructed pair energy in Module %d, n cell > 1",imod),
2531 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2532 fhIMMod[imod]->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2533 fhIMMod[imod]->SetYTitle(
"#it{M}_{cluster pairs} (GeV/#it{c}^{2})");
2534 outputContainer->Add(
fhIMMod[imod]);
2543 fhNCells =
new TH1F (
"hNCells",
"# cells", ncebins,ncemin+0.5,ncemax);
2544 fhNCells->SetXTitle(
"#it{n}_{cells}");
2551 fhAmplitude =
new TH1F (
"hAmplitude",
"#it{E}_{cell}", nptbins,ptmin,ptmax/2);
2555 fhAmpMod =
new TH2F (
"hAmp_Mod",
"Cell energy in each present Module",nptbins,ptmin,ptmax/2,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2556 fhAmpMod->SetXTitle(
"#it{E} (GeV)");
2560 fhAmpWeirdMod =
new TH2F (
"hAmpWeird_Mod",
"Cell energy in each present Module, ridiculously large E",200,0,10000,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2567 fhTimeMod =
new TH2F (
"hTime_Mod",
"Cell time in each present Module",ntimebins,timemin,timemax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2577 Double_t binWidth=(ptfinemax-ptfinemin)/nfineptbins;
2580 xBinning.
AddStep(ptfinemax,binWidth);
2581 xBinning.
AddStep(ptfinemax*2,binWidth*4);
2582 xBinning.
AddStep(ptfinemax*4,binWidth*10);
2593 fhAmpId =
new TH2F (
"hAmpId",
"#it{E}_{cell}", xbinsArray.GetSize() - 1, xbinsArray.GetArray(), ybinsArray.GetSize() - 1, ybinsArray.GetArray());
2594 fhAmpId->SetXTitle(
"#it{E}_{cell} (GeV)");
2595 outputContainer->Add(
fhAmpId);
2604 fhTime =
new TH1F (
"hTime",
"#it{t}_{cell}",ntimebins,timemin,timemax);
2605 fhTime->SetXTitle(
"#it{t}_{cell} (ns)");
2606 outputContainer->Add(
fhTime);
2613 fhTimeAmp =
new TH2F (
"hTimeAmp",
"#it{t}_{cell} vs #it{E}_{cell}",nptbins,ptmin,ptmax/2,ntimebins,timemin,timemax);
2614 fhTimeAmp->SetYTitle(
"#it{t}_{cell} (ns)");
2615 fhTimeAmp->SetXTitle(
"#it{E}_{cell} (GeV)");
2618 fhTimeAmpLowGain =
new TH2F (
"hTimeAmpLG",
"Low gain: #it{t}_{cell} vs #it{E}_{cell}",nptbins,ptmin,ptmax/2,ntimebins,timemin,timemax);
2630 fhTimeId =
new TH2F (
"hTimeId",
"#it{t}_{cell} vs Absolute Id",
2632 fhTimeId->SetXTitle(
"#it{t}_{cell} (ns)");
2633 fhTimeId->SetYTitle(
"Cell Absolute Id");
2642 if(
GetCaloUtils()->IsL1PhaseInTimeRecalibrationOn()==1)
2652 for(
Int_t bc = 0; bc < 4; bc++)
2655 Form(
"#it{t}_{cell} vs super-module, for BC/4=%d",bc),
2656 ntimebins,timemin,timemax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2663 fhCellECross =
new TH2F (
"hCellECross",
"1 - Energy in cross around cell / cell energy",
2664 nptbins,ptmin,ptmax/2, 400,-1,1.);
2666 fhCellECross->SetYTitle(
"1- #it{E}_{cross}/#it{E}_{cell}");
2669 fhNCellsMod =
new TH2F (
"hNCells_Mod",
"# cells vs Module", ncebins,ncemin+0.5,ncemax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2679 fhGridCells =
new TH2F (
"hGridCells",Form(
"Entries in grid of cells"),
2680 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
2685 fhGridCellsE =
new TH2F (
"hGridCellsE",
"Accumulated energy in grid of cells",
2686 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
2692 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
2698 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
2706 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
2712 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
2724 if(imod < fFirstModule || imod >
fLastModule)
continue;
2727 Form(
"# cells in SM vs sum of cells energy in Module %d",imod),
2728 nptbins,ptmin,ptmax*4, ncebins,ncemin,ncemax);
2743 (imod == 10 || imod== 11 || imod == 18 || imod == 19)
2747 Form(
"#it{E}_{cell} vs #it{t}_{cell} in Module %d, RCU %d ",imod,ircu),
2748 nptbins,ptmin,ptmax/2,ntimebins,timemin,timemax);
2763 fhEMCALPHOSCorrNClusters =
new TH2F (
"hEMCALPHOSCorrNClusters",
"# clusters in EMCAL vs PHOS", nclbins,nclmin,nclmax,nclbins,nclmin,nclmax);
2768 fhEMCALPHOSCorrEClusters =
new TH2F (
"hEMCALPHOSCorrEClusters",
"summed energy of clusters in EMCAL vs PHOS", nptbins,ptmin,ptmax*2,nptbins,ptmin,ptmax*2);
2773 fhEMCALPHOSCorrNCells =
new TH2F (
"hEMCALPHOSCorrNCells",
"# Cells in EMCAL vs PHOS", ncebins,ncemin,ncemax, ncebins,ncemin,ncemax);
2778 fhEMCALPHOSCorrECells =
new TH2F (
"hEMCALPHOSCorrECells",
"summed energy of Cells in EMCAL vs PHOS", nptbins*2,ptmin,ptmax*4,nptbins*2,ptmin,ptmax*4);
2784 fhEMCALDCALCorrNClusters =
new TH2F (
"hEMCALDCALCorrNClusters",
"# clusters in EMCAL vs DCAL", nclbins,nclmin,nclmax,nclbins,nclmin,nclmax);
2789 fhEMCALDCALCorrEClusters =
new TH2F (
"hEMCALDCALCorrEClusters",
"summed energy of clusters in EMCAL vs DCAL", nptbins,ptmin,ptmax*2,nptbins,ptmin,ptmax*2);
2794 fhEMCALDCALCorrNCells =
new TH2F (
"hEMCALDCALCorrNCells",
"# Cells in EMCAL vs DCAL", ncebins,ncemin,ncemax, ncebins,ncemin,ncemax);
2799 fhEMCALDCALCorrECells =
new TH2F (
"hEMCALDCALCorrECells",
"summed energy of Cells in EMCAL vs DCAL", nptbins*2,ptmin,ptmax*4,nptbins*2,ptmin,ptmax*4);
2806 fhDCALPHOSCorrNClusters =
new TH2F (
"hDCALPHOSCorrNClusters",
"# clusters in DCAL vs PHOS", nclbins,nclmin,nclmax,nclbins,nclmin,nclmax);
2811 fhDCALPHOSCorrEClusters =
new TH2F (
"hDCALPHOSCorrEClusters",
"summed energy of clusters in DCAL vs PHOS", nptbins,ptmin,ptmax*2,nptbins,ptmin,ptmax*2);
2816 fhDCALPHOSCorrNCells =
new TH2F (
"hDCALPHOSCorrNCells",
"# Cells in DCAL vs PHOS", ncebins,ncemin,ncemax, ncebins,ncemin,ncemax);
2821 fhDCALPHOSCorrECells =
new TH2F (
"hDCALPHOSCorrECells",
"summed energy of Cells in DCAL vs PHOS", nptbins*2,ptmin,ptmax*4,nptbins*2,ptmin,ptmax*4);
2891 fhCaloCenNClusters =
new TH2F (
"hCaloCenNClusters",
"# clusters in calorimeter vs centrality",100,0,100,nclbins,nclmin,nclmax);
2896 fhCaloCenEClusters =
new TH2F (
"hCaloCenEClusters",
"summed energy of clusters in calorimeter vs centrality",100,0,100,nptbins,ptmin,ptmax*2);
2901 fhCaloCenNCells =
new TH2F (
"hCaloCenNCells",
"# Cells in calorimeter vs centrality",100,0,100,ncebins,ncemin,ncemax);
2906 fhCaloCenECells =
new TH2F (
"hCaloCenECells",
"summed energy of Cells in calorimeter vs centrality",100,0,100,nptbins*2,ptmin,ptmax*4);
2907 fhCaloCenECells->SetYTitle(
"#Sigma #it{E} of Cells in calorimeter (GeV)");
2911 fhCaloEvPNClusters =
new TH2F (
"hCaloEvPNClusters",
"# clusters in calorimeter vs event plane angle",100,0,TMath::Pi(),nclbins,nclmin,nclmax);
2916 fhCaloEvPEClusters =
new TH2F (
"hCaloEvPEClusters",
"summed energy of clusters in calorimeter vs event plane angle",100,0,TMath::Pi(),nptbins,ptmin,ptmax*2);
2921 fhCaloEvPNCells =
new TH2F (
"hCaloEvPNCells",
"# Cells in calorimeter vs event plane angle",100,0,TMath::Pi(),ncebins,ncemin,ncemax);
2926 fhCaloEvPECells =
new TH2F (
"hCaloEvPECells",
"summed energy of Cells in calorimeter vs event plane angle",100,0,TMath::Pi(),nptbins*2,ptmin,ptmax*4);
2927 fhCaloEvPECells->SetYTitle(
"#Sigma #it{E} of Cells in calorimeter (GeV)");
2937 "Photon",
"Pi0",
"Eta",
2938 "Electron",
"PhotonConv",
2939 "NeutralHadron",
"ChargedHadron" };
2943 for(
Int_t iPart = 0; iPart < 4; iPart++)
2945 fhGenMCE [iPart] =
new TH1F(Form(
"hGenMCE_%s",particleName[iPart].
Data()) ,
2946 Form(
"#it{E} of generated %s",particleName[iPart].
Data()),
2947 nptbins,ptmin,ptmax);
2949 fhGenMCPt[iPart] =
new TH1F(Form(
"hGenMCPt_%s",particleName[iPart].
Data()) ,
2950 Form(
"#it{p}_{T} of generated %s",particleName[iPart].
Data()),
2951 nptbins,ptmin,ptmax);
2954 Form(
"Y vs #varphi of generated %s",particleName[iPart].
Data()),
2955 200,-1,1,360,0,TMath::TwoPi());
2957 fhGenMCE [iPart] ->SetXTitle(
"#it{E} (GeV)");
2958 fhGenMCPt[iPart] ->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
2962 outputContainer->Add(
fhGenMCE [iPart]);
2963 outputContainer->Add(
fhGenMCPt [iPart]);
2967 fhGenMCAccE [iPart] =
new TH1F(Form(
"hGenMCAccE_%s",particleName[iPart].
Data()) ,
2968 Form(
"#it{E} of generated %s",particleName[iPart].
Data()),
2969 nptbins,ptmin,ptmax);
2970 fhGenMCAccPt[iPart] =
new TH1F(Form(
"hGenMCAccPt_%s",particleName[iPart].
Data()) ,
2971 Form(
"#it{p}_{T} of generated %s",particleName[iPart].
Data()),
2972 nptbins,ptmin,ptmax);
2974 Form(
"Y vs #varphi of generated %s",particleName[iPart].
Data()),
2975 netabins,etamin,etamax,nphibins,phimin,phimax);
2978 fhGenMCAccPt[iPart] ->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
2990 for(
Int_t iPart = 0; iPart < 7; iPart++)
2992 for(
Int_t iCh = 0; iCh < 2; iCh++)
2995 Form(
"Reconstructed/Generated E, %s, Matched %d",particleName[iPart].
Data(),iCh),
2996 nptbins, ptmin, ptmax, 200,0,2);
2997 fhRecoMCRatioE[iPart][iCh]->SetYTitle(
"#it{E}_{reconstructed}/#it{E}_{generated}");
2998 fhRecoMCRatioE[iPart][iCh]->SetXTitle(
"#it{E}_{reconstructed} (GeV)");
3003 Form(
"Generated - Reconstructed E, %s, Matched %d",particleName[iPart].
Data(),iCh),
3004 nptbins, ptmin, ptmax, nptbins*2,-ptmax,ptmax);
3006 fhRecoMCDeltaE[iPart][iCh]->SetXTitle(
"#it{E}_{reconstructed} (GeV)");
3010 Form(
"Generated - Reconstructed #varphi, %s, Matched %d",particleName[iPart].
Data(),iCh),
3011 nptbins, ptmin, ptmax, nphibins*2,-phimax,phimax);
3017 Form(
"Generated - Reconstructed #eta, %s, Matched %d",particleName[iPart].
Data(),iCh),
3018 nptbins, ptmin, ptmax,netabins*2,-etamax,etamax);
3023 fhRecoMCE[iPart][iCh] =
new TH2F (Form(
"hRecoMCE_%s_Match%d",particleName[iPart].
Data(),iCh),
3024 Form(
"#it{E} distribution, reconstructed vs generated, %s, Matched %d",particleName[iPart].
Data(),iCh),
3025 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
3026 fhRecoMCE[iPart][iCh]->SetXTitle(
"#it{E}_{rec} (GeV)");
3027 fhRecoMCE[iPart][iCh]->SetYTitle(
"#it{E}_{gen} (GeV)");
3028 outputContainer->Add(
fhRecoMCE[iPart][iCh]);
3030 fhRecoMCPhi[iPart][iCh] =
new TH2F (Form(
"hRecoMCPhi_%s_Match%d",particleName[iPart].
Data(),iCh),
3031 Form(
"#varphi distribution, reconstructed vs generated, %s, Matched %d",particleName[iPart].
Data(),iCh),
3032 nphibins,phimin,phimax, nphibins,phimin,phimax);
3033 fhRecoMCPhi[iPart][iCh]->SetXTitle(
"#varphi_{reconstructed} (rad)");
3034 fhRecoMCPhi[iPart][iCh]->SetYTitle(
"#varphi_{generated} (rad)");
3037 fhRecoMCEta[iPart][iCh] =
new TH2F (Form(
"hRecoMCEta_%s_Match%d",particleName[iPart].
Data(),iCh),
3038 Form(
"#eta distribution, reconstructed vs generated, %s, Matched %d",particleName[iPart].
Data(),iCh),
3039 netabins,etamin,etamax,netabins,etamin,etamax);
3040 fhRecoMCEta[iPart][iCh]->SetXTitle(
"#eta_{reconstructed} ");
3041 fhRecoMCEta[iPart][iCh]->SetYTitle(
"#eta_{generated} ");
3048 fhEMVxyz =
new TH2F (
"hEMVxyz",
"Production vertex of reconstructed ElectroMagnetic particles",nvdistbins,vdistmin,vdistmax,nvdistbins,vdistmin,vdistmax);
3054 fhHaVxyz =
new TH2F (
"hHaVxyz",
"Production vertex of reconstructed hadrons",nvdistbins,vdistmin,vdistmax,nvdistbins,vdistmin,vdistmax);
3060 fhEMR =
new TH2F (
"hEMR",
"Distance to production vertex of reconstructed ElectroMagnetic particles vs E rec",nptbins,ptmin,ptmax,nvdistbins,vdistmin,vdistmax);
3061 fhEMR->SetXTitle(
"#it{E} (GeV)");
3062 fhEMR->SetYTitle(
"TMath::Sqrt(v_{x}^{2}+v_{y}^{2})");
3063 outputContainer->Add(
fhEMR);
3065 fhHaR =
new TH2F (
"hHaR",
"Distance to production vertex of reconstructed Hadrons vs E rec",nptbins,ptmin,ptmax,nvdistbins,vdistmin,vdistmax);
3066 fhHaR->SetXTitle(
"#it{E} (GeV)");
3067 fhHaR->SetYTitle(
"TMath::Sqrt(v_{x}^{2}+v_{y}^{2})");
3068 outputContainer->Add(
fhHaR);
3072 fhMCEle1EOverP =
new TH2F(
"hMCEle1EOverP",
"TRACK matches #it{E}/#it{p}, MC electrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3077 fhMCEle1dR =
new TH1F(
"hMCEle1dR",
"TRACK matches dR, MC electrons",ndRbins,dRmin,dRmax);
3078 fhMCEle1dR->SetXTitle(
"#Delta #it{R} (rad)");
3081 fhMCEle2MatchdEdx =
new TH2F(
"hMCEle2MatchdEdx",
"#it{dE/dx} vs. #it{p} for all matches, MC electrons",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
3086 fhMCChHad1EOverP =
new TH2F(
"hMCChHad1EOverP",
"TRACK matches #it{E}/#it{p}, MC charged hadrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3091 fhMCChHad1dR =
new TH1F(
"hMCChHad1dR",
"TRACK matches dR, MC charged hadrons",ndRbins,dRmin,dRmax);
3095 fhMCChHad2MatchdEdx =
new TH2F(
"hMCChHad2MatchdEdx",
"#it{dE/dx} vs. #it{p} for all matches, MC charged hadrons",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
3100 fhMCNeutral1EOverP =
new TH2F(
"hMCNeutral1EOverP",
"TRACK matches #it{E}/#it{p}, MC neutrals",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3105 fhMCNeutral1dR =
new TH1F(
"hMCNeutral1dR",
"TRACK matches dR, MC neutrals",ndRbins,dRmin,dRmax);
3109 fhMCNeutral2MatchdEdx =
new TH2F(
"hMCNeutral2MatchdEdx",
"#it{dE/dx} vs. #it{p} for all matches, MC neutrals",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
3114 fhMCEle1EOverPR02 =
new TH2F(
"hMCEle1EOverPR02",
"TRACK matches #it{E}/#it{p}, MC electrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3119 fhMCChHad1EOverPR02 =
new TH2F(
"hMCChHad1EOverPR02",
"TRACK matches #it{E}/#it{p}, MC charged hadrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3124 fhMCNeutral1EOverPR02 =
new TH2F(
"hMCNeutral1EOverPR02",
"TRACK matches #it{E}/#it{p}, MC neutrals",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3129 fhMCEle1EleEOverP =
new TH2F(
"hMCEle1EleEOverP",
"Electron candidates #it{E}/#it{p} (60<dEdx<100), MC electrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3134 fhMCChHad1EleEOverP =
new TH2F(
"hMCEle1EleEOverP",
"Electron candidates #it{E}/#it{p} (60<dEdx<100), MC charged hadrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3139 fhMCNeutral1EleEOverP =
new TH2F(
"hMCNeutral1EleEOverP",
"Electron candidates #it{E}/#it{p} (60<dEdx<100), MC neutrals",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3149 return outputContainer;
3160 AliVCaloCells * cells)
3162 AliDebug(1,
"Start");
3168 Int_t nModule2 = -1;
3169 Int_t nCaloClusters = caloClusters->GetEntriesFast();
3172 if(phi1 < 0) phi1 += TMath::TwoPi();
3174 Double_t tof1 = ((AliVCluster*) caloClusters->At(iclus))->GetTOF()*1.e9;
3177 for(
Int_t jclus = iclus + 1 ; jclus < nCaloClusters ; jclus++)
3179 AliVCluster* clus2 = (AliVCluster*) caloClusters->At(jclus);
3184 Double_t tof2 = clus2->GetTOF()*1.e9;
3192 if( !
IsGoodCluster(absIdMax, clus2->GetM02(), clus2->GetNCells(), cells)
3230 if(phi2 < 0) phi2 += TMath::TwoPi();
3232 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));
3234 Bool_t inPi0Window = kFALSE;
3235 if(mass < 0.18 && mass > 0.1) inPi0Window = kTRUE ;
3237 if ( nModule < 12 && nModule2 < 12 )
3244 if ( nModule == nModule2 )
3258 nModule > 11 && nModule2 > 11 &&
fNModules > 12 )
3265 if ( nModule == nModule2 )
3281 if(nModule == nModule2 && nModule >= 0 && nModule <
fNModules)
3295 AliDebug(1,
"Check DCal-PHOS pairs\n");
3300 if(phi1 >= 260*TMath::DegToRad() && phi1 < 280) sector1 = 0;
3301 if(phi1 >= 280*TMath::DegToRad() && phi1 < 300) sector1 = 1;
3302 if(phi1 >= 300*TMath::DegToRad() && phi1 < 320) sector1 = 2;
3312 if( !
IsGoodCluster(absIdMax, clus2->GetM02(), clus2->GetNCells(), cells)
3330 if(phiPHOS < 0) phiPHOS += TMath::TwoPi();
3332 if(phiPHOS >= 260*TMath::DegToRad() && phiPHOS < 280) sector2 = 0;
3333 if(phiPHOS >= 280*TMath::DegToRad() && phiPHOS < 300) sector2 = 1;
3334 if(phiPHOS >= 300*TMath::DegToRad() && phiPHOS < 320) sector2 = 2;
3346 AliDebug(1,
"Check EMCAL(DCal)-EMCAL(PHOS) pairs\n");
3351 if(phi1 >= 80*TMath::DegToRad() && phi1 < 100) sector1 = 0;
3352 if(phi1 >= 100*TMath::DegToRad() && phi1 < 120) sector1 = 1;
3353 if(phi1 >= 120*TMath::DegToRad() && phi1 < 140) sector1 = 2;
3354 if(phi1 >= 140*TMath::DegToRad() && phi1 < 160) sector1 = 3;
3355 if(phi1 >= 160*TMath::DegToRad() && phi1 < 180) sector1 = 4;
3356 if(phi1 >= 180*TMath::DegToRad() && phi1 < 190) sector1 = 5;
3358 for(
Int_t jclus = 0 ; jclus < caloClusters->GetEntriesFast() ; jclus++)
3360 AliVCluster* clus2 = (AliVCluster*) caloClusters->At(jclus);
3365 Double_t tof2 = clus2->GetTOF()*1.e9;
3368 Double_t diffTof = TMath::Abs(tof1-tof2);
3372 if( !
IsGoodCluster(absIdMax, clus2->GetM02(), clus2->GetNCells(), cells)
3397 if(phiPHOS < 0) phiPHOS += TMath::TwoPi();
3399 if(phiPHOS >= 80*TMath::DegToRad() && phiPHOS < 100) sector2 = 0;
3400 if(phiPHOS >= 100*TMath::DegToRad() && phiPHOS < 120) sector2 = 1;
3401 if(phiPHOS >= 120*TMath::DegToRad() && phiPHOS < 140) sector2 = 2;
3402 if(phiPHOS >= 140*TMath::DegToRad() && phiPHOS < 160) sector2 = 3;
3403 if(phiPHOS >= 160*TMath::DegToRad() && phiPHOS < 180) sector2 = 4;
3404 if(phiPHOS >= 180*TMath::DegToRad() && phiPHOS < 190) sector2 = 5;
3480 Int_t nCellsPerCluster, AliVCaloCells* cells)
3490 if(!
GetCaloUtils()->GetEMCALRecoUtils()->IsRejectExoticCluster())
3503 Float_t ampMax = cells->GetCellAmplitude(absIdMax);
3506 if(ampMax < 0.01)
return kFALSE;
3510 if(1-
GetCaloUtils()->GetECross(absIdMax,cells,bc)/ampMax > 0.95)
3525 printf(
"**** Print %s %s ****\n", GetName(), GetTitle() ) ;
3547 AliDebug(1,
"Start");
3559 AliVCaloCells * cells = 0x0;
3573 AliFatal(Form(
"AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - Wrong calorimeter name <%s>, END",
GetCalorimeterString().
Data()));
3575 if( !caloClusters || !cells )
3577 AliFatal(Form(
"AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - No CaloClusters or CaloCells available"));
3581 if(caloClusters->GetEntriesFast() == 0)
return ;
3601 if ( !
GetMC() )
return;
3607 AliVParticle * primary= 0;
3610 for(
Int_t i=0 ; i < nprim; i++)
3612 if ( !
GetReader()->AcceptParticleMCLabel( i ) ) continue ;
3617 primary =
GetMC()->GetTrack(i) ;
3620 AliWarning(
"Primaries pointer not available!!");
3624 pdg = primary->PdgCode();
3625 status = primary->MCStatusCode();
3631 if ( status > 11 )
continue;
3634 if ( primary->E() == TMath::Abs(primary->Pz()) ||
3635 (primary->E() - primary->Pz()) < 1e-3 ||
3636 (primary->E() + primary->Pz()) < 0 ) continue ;
3644 if(eMC < 0.2)
continue;
3651 if (TMath::Abs(etaMC) > 1)
continue;
3655 phiMC += TMath::TwoPi();
3659 else if (pdg==111) mcIndex =
kmcPi0;
3660 else if (pdg==221) mcIndex =
kmcEta;
3661 else if (TMath::Abs(pdg)==11) mcIndex =
kmcElectron;
3669 Bool_t inacceptance = kTRUE;
3672 inacceptance = kFALSE ;
3679 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
ClassImp(AliAnalysisTaskDeltaPt) AliAnalysisTaskDeltaPt
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.
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.