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),
106 fhNLocMax(0), fhNLocMaxStd(0),
109 fhBadClusterEnergy(0), fhBadClusterTimeEnergy(0), fhBadClusterEtaPhi(0),
110 fhBadClusterPairDiffTimeE(0), fhBadCellTimeSpreadRespectToCellMax(0),
111 fhBadClusterMaxCellCloseCellRatio(0), fhBadClusterMaxCellCloseCellDiff(0), fhBadClusterMaxCellDiff(0),
113 fhBadClusterMaxCellECross(0),
114 fhBadClusterLambda0(0), fhBadClusterLambda1(0),
117 fhRNCells(0), fhXNCells(0),
118 fhYNCells(0), fhZNCells(0),
122 fhRCellE(0), fhXCellE(0),
123 fhYCellE(0), fhZCellE(0),
125 fhDeltaCellClusterRNCells(0), fhDeltaCellClusterXNCells(0),
126 fhDeltaCellClusterYNCells(0), fhDeltaCellClusterZNCells(0),
127 fhDeltaCellClusterRE(0), fhDeltaCellClusterXE(0),
128 fhDeltaCellClusterYE(0), fhDeltaCellClusterZE(0),
131 fhNCells(0), fhNCellsCutAmpMin(0),
132 fhAmplitude(0), fhAmpId(0),
133 fhEtaPhiAmpCell(0), fhEtaPhiCell(0),
135 fhTimeId(0), fhTimeL1UnCorrId(0), fhTimeAmp(0),
136 fhAmpIdLowGain(0), fhTimeIdLowGain(0), fhTimeAmpLowGain(0),
140 fhEMCALPHOSCorrNClusters(0), fhEMCALPHOSCorrEClusters(0),
141 fhEMCALPHOSCorrNCells(0), fhEMCALPHOSCorrECells(0),
142 fhEMCALDCALCorrNClusters(0), fhEMCALDCALCorrEClusters(0),
143 fhEMCALDCALCorrNCells(0), fhEMCALDCALCorrECells(0),
144 fhDCALPHOSCorrNClusters(0), fhDCALPHOSCorrEClusters(0),
145 fhDCALPHOSCorrNCells(0), fhDCALPHOSCorrECells(0),
146 fhCaloV0SCorrNClusters(0), fhCaloV0SCorrEClusters(0),
147 fhCaloV0SCorrNCells(0), fhCaloV0SCorrECells(0),
148 fhCaloV0MCorrNClusters(0), fhCaloV0MCorrEClusters(0),
149 fhCaloV0MCorrNCells(0), fhCaloV0MCorrECells(0),
150 fhCaloTrackMCorrNClusters(0), fhCaloTrackMCorrEClusters(0),
151 fhCaloTrackMCorrNCells(0), fhCaloTrackMCorrECells(0),
152 fhCaloCenNClusters(0), fhCaloCenEClusters(0),
153 fhCaloCenNCells(0), fhCaloCenECells(0),
154 fhCaloEvPNClusters(0), fhCaloEvPEClusters(0),
155 fhCaloEvPNCells(0), fhCaloEvPECells(0),
158 fhEMod(0), fhAmpMod(0),
159 fhEWeirdMod(0), fhAmpWeirdMod(0),
161 fhNClustersMod(0), fhNCellsMod(0),
162 fhNCellsSumAmpPerMod(0), fhNClustersSumEnergyPerMod(0),
163 fhNCellsPerClusterMod(0), fhNCellsPerClusterModNoCut(0),
164 fhNCellsPerClusterWeirdMod(0), fhNCellsPerClusterWeirdModNoCut(0),
166 fhGridCells(0), fhGridCellsE(0), fhGridCellsTime(0),
167 fhGridCellsLowGain(0), fhGridCellsELowGain(0), fhGridCellsTimeLowGain(0),
168 fhTimeAmpPerRCU(0), fhIMMod(0),
171 fhRecoMCE(), fhRecoMCPhi(), fhRecoMCEta(),
172 fhRecoMCDeltaE(), fhRecoMCRatioE(),
173 fhRecoMCDeltaPhi(), fhRecoMCDeltaEta(),
176 fhGenMCE(), fhGenMCPt(), fhGenMCEtaPhi(),
177 fhGenMCAccE(), fhGenMCAccPt(), fhGenMCAccEtaPhi(),
180 fhEMVxyz(0), fhEMR(0),
181 fhHaVxyz(0), fhHaR(0),
182 fh1EOverP(0), fh2dR(0),
183 fh2EledEdx(0), fh2MatchdEdx(0),
184 fh1EOverPR02(0), fh1EleEOverP(0),
185 fhMCEle1EOverP(0), fhMCEle1dR(0), fhMCEle2MatchdEdx(0),
186 fhMCChHad1EOverP(0), fhMCChHad1dR(0), fhMCChHad2MatchdEdx(0),
187 fhMCNeutral1EOverP(0), fhMCNeutral1dR(0), fhMCNeutral2MatchdEdx(0),
188 fhMCEle1EOverPR02(0), fhMCChHad1EOverPR02(0), fhMCNeutral1EOverPR02(0),
189 fhMCEle1EleEOverP(0), fhMCChHad1EleEOverP(0), fhMCNeutral1EleEOverP(0),
190 fhTrackMatchedDEtaNeg(0), fhTrackMatchedDPhiNeg(0), fhTrackMatchedDEtaDPhiNeg(0),
191 fhTrackMatchedDEtaPos(0), fhTrackMatchedDPhiPos(0), fhTrackMatchedDEtaDPhiPos(0),
192 fhTrackMatchedDEtaNegMod(0), fhTrackMatchedDPhiNegMod(0),
193 fhTrackMatchedDEtaPosMod(0), fhTrackMatchedDPhiPosMod(0)
197 for(
Int_t i = 0; i < 7; i++)
208 for(
Int_t i = 0; i < 4; i++)
220 for(
Int_t i = 0; i < 14; i++)
265 if(phi < 0) phi += TMath::TwoPi();
276 for(
Int_t iclus2 = 0; iclus2 < caloClusters->GetEntriesFast(); iclus2++ )
278 AliVCluster* clus2 = (AliVCluster*) caloClusters->At(iclus2);
280 if(clus->GetID() == clus2->GetID())
continue;
285 if(
IsGoodCluster(absIdMax2, clus->GetM02(), clus->GetNCells(), cells) && clus2->GetM02() > 0.1 )
287 Double_t tof2 = clus2->GetTOF()*1.e9;
308 for (
Int_t ipos = 0; ipos < clus->GetNCells(); ipos++)
310 Int_t absId = clus->GetCellsAbsId()[ipos];
311 if(absId!=absIdMax && cells->GetCellAmplitude(absIdMax) > 0.01)
313 Float_t frac = cells->GetCellAmplitude(absId)/cells->GetCellAmplitude(absIdMax);
320 Double_t time = cells->GetCellTime(absId);
339 AliVCaloCells* cells,
347 for (
Int_t ipos = 0; ipos < clus->GetNCells(); ipos++)
349 Int_t id = clus->GetCellsAbsId()[ipos];
352 amp = cells->GetCellAmplitude(
id);
371 Int_t ncells = clus->GetNCells();
373 for (
Int_t ipos = 0; ipos < ncells; ipos++)
375 id = clus ->GetCellsAbsId()[ipos];
376 amp = cells->GetCellAmplitude(
id);
377 time = cells->GetCellTime(
id);
385 wTime += time*1e9 * w;
389 if(ncells > 0) aTime /= ncells;
392 if(wTot > 0) wTime /= wTot;
395 timeAverages[0] = aTime;
396 timeAverages[1] = wTime;
407 Int_t ncells = cells->GetNumberOfCells();
421 nCellsInModule[imod] = 0 ;
422 eCellsInModule[imod] = 0.;
425 Int_t icol = -1, icolAbs = -1;
426 Int_t irow = -1, irowAbs = -1;
436 for (
Int_t iCell = 0; iCell < cells->GetNumberOfCells(); iCell++)
438 if ( cells->GetCellNumber(iCell) < 0 )
continue;
440 AliDebug(2,Form(
"Cell : amp %f, absId %d", cells->GetAmplitude(iCell), cells->GetCellNumber(iCell)));
446 if ( nModule < fFirstModule || nModule >
fLastModule )
448 AliDebug(1,Form(
"Cell module out of range %d",nModule));
452 AliDebug(2,Form(
"\t module %d, column %d (%d), row %d (%d)", nModule,icolAbs,icol,irowAbs,irow));
459 if(
GetCaloUtils()->GetEMCALChannelStatus(nModule,icol,irow))
continue;
463 if(
GetCaloUtils()->GetPHOSChannelStatus(nModule,icol,irow) )
continue;
467 amp = cells->GetAmplitude(iCell)*recalF;
468 time = cells->GetTime(iCell);
469 id = cells->GetCellNumber(iCell);
470 highG = cells->GetCellHighGain(
id);
484 timeL1UnCorr *= 1.0e9;
489 AliDebug(1,Form(
"Remove cell with Time %f",time));
495 GetCaloUtils()->GetEMCALRecoUtils()->IsExoticCell(
id, cells, bc))
continue;
498 if(amp>=10)binWidthCorrection=1.0/4;
499 if(amp>=20)binWidthCorrection=1.0/10;
532 nCellsInModule[nModule]++ ;
533 eCellsInModule[nModule]+=amp;
592 if ( cellphi < 0 ) cellphi+=TMath::TwoPi();
606 Float_t rcell = TMath::Sqrt(cellpos[0]*cellpos[0]+cellpos[1]*cellpos[1]);
614 Int_t relId[4], module;
622 Float_t rcell = TMath::Sqrt(xyz.X()*xyz.X()+xyz.Y()*xyz.Y());
642 if ( imod < fFirstModule || imod >
fLastModule ) continue ;
644 AliDebug(1,Form(
"Module %d, calo %s, N cells %d, sum Amp %f", imod,
GetCalorimeterString().
Data(), nCellsInModule[imod], eCellsInModule[imod]));
653 delete [] nCellsInModule;
654 delete [] eCellsInModule;
663 Int_t nCaloCellsPerCluster = clus->GetNCells();
665 UShort_t * indexList = clus->GetCellsAbsId();
668 clus->GetPosition(pos);
673 for (
Int_t ipos = 0; ipos < nCaloCellsPerCluster; ipos++)
676 Int_t absId = indexList[ipos];
693 Float_t r = TMath::Sqrt(pos[0] *pos[0] + pos[1] * pos[1] );
694 Float_t rcell = TMath::Sqrt(cellpos[0]*cellpos[0] + cellpos[1]* cellpos[1]);
702 Int_t relId[4], module;
718 Float_t r = TMath::Sqrt(pos[0] * pos[0] + pos[1] * pos[1] );
719 Float_t rcell = TMath::Sqrt(xyz.X() * xyz.X() + xyz.Y() * xyz.Y());
758 Int_t nCaloCellsPerCluster = clus->GetNCells();
763 for(
Int_t iclus2 = 0; iclus2 < caloClusters->GetEntriesFast(); iclus2++ )
765 AliVCluster* clus2 = (AliVCluster*) caloClusters->At(iclus2);
767 if( clus->GetID() == clus2->GetID() )
continue;
769 if( clus->GetM02() > 0.01 && clus2->GetM02() > 0.01 )
773 Double_t tof2 = clus2->GetTOF()*1.e9;
779 if ( nModule2 == nModule )
785 if(nCaloCellsPerCluster > 1 &&
800 for (
Int_t ipos = 0; ipos < nCaloCellsPerCluster; ipos++)
802 Int_t absId = clus->GetCellsAbsId()[ipos];
803 if( absId == absIdMax || cells->GetCellAmplitude(absIdMax) < 0.01 )
continue;
805 Float_t frac = cells->GetCellAmplitude(absId)/cells->GetCellAmplitude(absIdMax);
815 Double_t time = cells->GetCellTime(absId);
824 TMath::Abs(TMath::Abs(diff) > 100) && clus->E() > 1 )
836 AliDebug(1,Form(
"cluster: E %2.3f, pT %2.3f, eta %2.3f, phi %2.3f",e,pt,eta,phi*TMath::RadToDeg()));
851 Int_t icol = -1, irow = -1, iRCU = -1, icolAbs = -1, irowAbs = -1;
877 clus->GetPosition(pos);
889 Float_t rxyz = TMath::Sqrt(pos[0]*pos[0]+pos[1]*pos[1]);
912 AliVCaloCells* cells)
918 Int_t nCaloClusters = caloClusters->GetEntriesFast() ;
919 Int_t nCaloClustersAccepted = 0 ;
920 Int_t nCaloCellsPerCluster = 0 ;
933 nClustersInModule[imod] = 0;
934 energyInModule [imod] = 0;
940 for(
Int_t iclus = 0; iclus < nCaloClusters; iclus++)
942 AliDebug(1,Form(
"Cluster: %d/%d, data %d",iclus+1,nCaloClusters,
GetReader()->GetDataType()));
944 AliVCluster* clus = (AliVCluster*) caloClusters->At(iclus);
948 if ( nModule < fFirstModule || nModule >
fLastModule )
950 AliDebug(1,Form(
"Cluster module out of range %d",nModule));
964 AliDebug(1,Form(
"Remove cluster with TOF %2.2f",tof));
976 AliDebug(1,Form(
"Remove cluster with phi %2.2f and eta %2.2f",
982 nLabel = clus->GetNLabels();
983 labels = clus->GetLabels();
986 nCaloCellsPerCluster = clus->GetNCells();
992 Double_t tmax = cells->GetCellTime(absIdMax);
1005 if(nModule >=0 && nModule < fNModules)
1015 Float_t ampMax = cells->GetCellAmplitude(absIdMax);
1019 Bool_t goodCluster =
IsGoodCluster(absIdMax, clus->GetM02(), nCaloCellsPerCluster, cells);
1024 AliDebug(1,Form(
"Accept cluster? %d",goodCluster));
1037 maxCellFraction, eCrossFrac, tmax);
1039 nCaloClustersAccepted++;
1044 nClustersInModule[nModule]++;
1046 energyInModule [nModule] += clus->E();
1053 Int_t mcOK = kFALSE;
1055 if(
IsDataMC() && nLabel > 0 && labels)
1067 && nCaloClusters > 1
1068 && nCaloCellsPerCluster > 1
1069 &&
GetCaloUtils()->GetNumberOfLocalMaxima(clus,cells) == 1
1085 if ( imod < fFirstModule || imod >
fLastModule ) continue ;
1087 AliDebug(1,Form(
"Module %d calo %s clusters %d, sum E %f", imod,
GetCalorimeterString().
Data(), nClustersInModule[imod], energyInModule[imod]));
1095 delete [] nClustersInModule;
1096 delete [] energyInModule;
1112 if(!labels || nLabels<=0)
1114 AliWarning(Form(
"Strange, labels array %p, n labels %d", labels,nLabels));
1118 AliDebug(1,Form(
"Primaries: nlabels %d",nLabels));
1121 Int_t label = labels[0];
1125 AliDebug(1,Form(
" *** bad label ***: label %d", label));
1129 if( label >=
GetMC()->GetNumberOfTracks())
1131 AliDebug(1,Form(
"*** large label ***: label %d, n tracks %d", label,
GetMC()->GetNumberOfTracks()));
1138 if(phi < 0) phi +=TMath::TwoPi();
1140 AliVParticle * primary = 0x0;
1153 primary =
GetMC()->GetTrack(label);
1155 pdg0 = TMath::Abs(primary->PdgCode());
1157 status = primary->MCStatusCode();
1158 vxMC = primary->Xv();
1159 vyMC = primary->Yv();
1160 iParent = primary->GetMother();
1162 AliDebug(1,
"Cluster most contributing mother:");
1163 AliDebug(1,Form(
"\t Mother label %d, pdg %d, %s, status %d, Primary? %d, Physical Primary? %d, parent %d",
1164 iMother, pdg0, primary->GetName(),status, primary->IsPrimary(), primary->IsPhysicalPrimary(), iParent));
1170 primary =
GetMC()->GetTrack(iParent);
1171 pdg = TMath::Abs(primary->PdgCode());
1173 AliDebug(2,
"Converted cluster!. Find before conversion:");
1175 while((pdg == 22 || pdg == 11) && status != 1)
1177 Int_t iMotherOrg = iMother;
1179 primary =
GetMC()->GetTrack(iMother);
1180 status = primary->MCStatusCode();
1181 pdg = TMath::Abs(primary->PdgCode());
1182 iParent = primary->GetMother();
1186 if(pdg==111 || pdg==221)
1188 primary =
GetMC()->GetTrack(iMotherOrg);
1198 AliDebug(2,Form(
"\t pdg %d, index %d, %s, status %d",pdg, iMother, primary->GetName(),status));
1201 AliDebug(1,
"Converted Cluster mother before conversion:");
1202 AliDebug(1,Form(
"\t Mother label %d, pdg %d, %s, status %d, Primary? %d, Physical Primary? %d, parent %d",
1203 iMother, pdg, primary->GetName(), status, primary->IsPrimary(), primary->IsPhysicalPrimary(), iParent));
1211 AliDebug(2,
"Overlapped Meson decay!, Find it:");
1213 while(pdg != 111 && pdg != 221)
1217 primary =
GetMC()->GetTrack(iMother);
1218 status = primary->MCStatusCode();
1219 pdg = TMath::Abs(primary->PdgCode());
1220 iParent = primary->GetMother();
1222 if( iParent < 0 )
break;
1224 AliDebug(2,Form(
"\t pdg %d, %s, index %d",pdg, primary->GetName(),iMother));
1228 AliWarning(
"Tagged as Overlapped photon but meson not found, why?");
1233 AliDebug(2,Form(
"Overlapped %s decay, label %d",primary->GetName(),iMother));
1238 phiMC = primary->Phi();
1239 etaMC = primary->Eta();
1240 pdg = TMath::Abs(primary->PdgCode());
1242 charge = primary->Charge();
1246 Float_t rVMC = TMath::Sqrt(vxMC*vxMC + vyMC*vyMC);
1247 if( ( pdg == 22 || TMath::Abs(pdg) == 11 ) && status != 1 )
1280 else if(charge == 0)
1295 if( mcIndex >= 0 && mcIndex < 7 && e > 0.5 && eMC > 0.5)
1306 if( primary )
return kTRUE ;
1322 if(phi < 0) phi +=TMath::TwoPi();
1340 Double_t dedx = track->GetTPCsignal();
1341 Int_t nITS = track->GetNcls(0);
1342 Int_t nTPC = track->GetNcls(1);
1343 Bool_t positive = kFALSE;
1344 if(track) positive = (track->Charge()>0);
1347 Float_t deta = clus->GetTrackDz();
1348 Float_t dphi = clus->GetTrackDx();
1349 Double_t dR = TMath::Sqrt(dphi*dphi + deta*deta);
1352 if( TMath::Abs(dphi) < 999 )
1389 if(dedx > 60 && dedx < 100)
1399 if(e > 0.5 && tmom > 0.5)
1405 if(dR < 0.02 && eOverP > 0.6 && eOverP < 1.2
1406 && clus->GetNCells() > 1 && nITS > 3 && nTPC > 20)
1414 Double_t charge = TDatabasePDG::Instance()->GetParticle(pdg)->Charge();
1416 if(TMath::Abs(pdg) == 11)
1440 else if(charge == 0)
1465 if(!caloClustersEMCAL || !caloClustersPHOS)
1467 AliDebug(1,Form(
"PHOS (%p) or EMCAL (%p) clusters array not available, do not correlate",caloClustersPHOS,caloClustersEMCAL));
1475 if(!cellsEMCAL || !cellsPHOS)
1477 AliDebug(1,Form(
"PHOS (%p) or EMCAL (%p) cells array ot available, do not correlate",cellsPHOS,cellsEMCAL));
1486 Float_t sumClusterEnergyEMCAL = 0;
1487 Float_t sumClusterEnergyDCAL = 0;
1488 Float_t sumClusterEnergyPHOS = 0;
1492 AliVCluster* cluster = 0;
1493 for(iclus = 0 ; iclus < caloClustersEMCAL->GetEntriesFast() ; iclus++)
1495 cluster = (AliVCluster*)caloClustersEMCAL->At(iclus);
1496 Float_t energy = cluster->E();
1498 if( energy < 0.5 )
continue;
1500 if(cluster->GetCellsAbsId()[0] < 12288)
1503 sumClusterEnergyEMCAL +=
energy;
1508 sumClusterEnergyDCAL +=
energy;
1512 for(iclus = 0 ; iclus < caloClustersPHOS ->GetEntriesFast(); iclus++)
1514 cluster = (AliVCluster*) caloClustersPHOS->At(iclus);
1516 energy = cluster->E();
1518 if( energy < 0.5 )
continue;
1521 sumClusterEnergyPHOS +=
energy;
1525 Int_t ncellsEMCAL = 0 ;
1526 Int_t ncellsDCAL = 0 ;
1527 Int_t ncellsPHOS = 0;
1529 Float_t sumCellEnergyEMCAL = 0;
1530 Float_t sumCellEnergyDCAL = 0;
1531 Float_t sumCellEnergyPHOS = 0;
1533 for(icell = 0 ; icell < cellsEMCAL->GetNumberOfCells() ; icell++)
1535 Float_t amp = cellsEMCAL->GetAmplitude(icell);
1536 Int_t cellId = cellsEMCAL->GetCellNumber(icell);
1543 sumCellEnergyEMCAL += amp;
1548 sumCellEnergyDCAL += amp;
1552 for(icell = 0 ; icell < cellsPHOS->GetNumberOfCells(); icell++)
1554 Float_t amp = cellsPHOS->GetAmplitude(icell);
1555 Int_t cellId = cellsPHOS->GetCellNumber(icell);
1557 if ( cellId < 0 ) continue ;
1562 sumCellEnergyPHOS += amp;
1588 Int_t ncl = nclPHOS;
1589 Float_t sumClusterEnergy = sumClusterEnergyPHOS;
1590 Int_t ncells = ncellsPHOS;
1591 Float_t sumCellEnergy = sumCellEnergyPHOS;
1595 ncl = nclEMCAL + nclDCAL;
1596 sumClusterEnergy = sumClusterEnergyEMCAL + sumClusterEnergyDCAL;
1597 ncells = ncellsEMCAL + ncellsDCAL;
1598 sumCellEnergy = sumCellEnergyEMCAL + sumCellEnergyDCAL;
1626 AliDebug(1,
"Correlate():");
1627 AliDebug(1,Form(
"\t EMCAL: N cells %d, N clusters %d, summed E cells %f, summed E clusters %f",
1628 ncellsEMCAL,nclEMCAL, sumCellEnergyEMCAL,sumClusterEnergyEMCAL));
1629 AliDebug(1,Form(
"\t DCAL : N cells %d, N clusters %d, summed E cells %f, summed E clusters %f",
1630 ncellsDCAL,nclDCAL, sumCellEnergyDCAL,sumClusterEnergyDCAL));
1631 AliDebug(1,Form(
"\t PHOS : N cells %d, N clusters %d, summed E cells %f, summed E clusters %f",
1632 ncellsPHOS,nclPHOS,sumCellEnergyPHOS,sumClusterEnergyPHOS));
1633 AliDebug(1,Form(
"\t V0 : Signal %d, Multiplicity %d, Track Multiplicity %d", v0S,v0M,trM));
1634 AliDebug(1,Form(
"\t centrality : %f, Event plane angle %f", cen,ep));
1643 const Int_t buffersize = 255;
1644 char onePar[buffersize] ;
1646 snprintf(onePar,buffersize,
"--- AliAnaCalorimeterQA ---:") ;
1673 return new TObjString(parList) ;
1683 outputContainer->SetName(
"QAHistos") ;
1735 Float_t rowcellmin = fNMaxRowsFullMin-1.5;
1746 fhE =
new TH1F (
"hE",
"#it{E} reconstructed clusters ", nptbins*5,ptmin,ptmax*5);
1747 fhE->SetXTitle(
"#it{E} (GeV)");
1748 outputContainer->Add(
fhE);
1750 fhPt =
new TH1F (
"hPt",
"#it{p}_{T} reconstructed clusters", nptbins,ptmin,ptmax);
1751 fhPt->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1752 outputContainer->Add(
fhPt);
1754 fhNClusters =
new TH1F (
"hNClusters",
"# clusters", nclbins,nclmin,nclmax);
1758 fhNCellsPerCluster =
new TH2F (
"hNCellsPerCluster",
"# cells per cluster vs energy",nptbins,ptmin,ptmax, nceclbins,nceclmin,nceclmax);
1764 nceclbins*2,nceclmin,nceclmax*2,totalSM,fFirstModule-0.5,
fLastModule+0.5);
1771 fhPhi =
new TH1F (
"hPhi",
"#varphi reconstructed clusters ",nphibins,phimin,phimax);
1772 fhPhi->SetXTitle(
"#varphi (rad)");
1773 outputContainer->Add(
fhPhi);
1775 fhEta =
new TH1F (
"hEta",
"#eta reconstructed clusters ",netabins,etamin,etamax);
1776 fhEta->SetXTitle(
"#eta ");
1777 outputContainer->Add(
fhEta);
1784 (Form(
"hEBin%d_Cluster_EtaPhi",ie),
1785 Form(
"#eta vs #varphi, cluster, %2.2f<#it{p}_{T}<%2.2f GeV/#it{c}",
fEBinCuts[ie],
fEBinCuts[ie+1]),
1786 netabins,etamin,etamax,nphibins,phimin,phimax);
1792 (Form(
"hEBin%d_Cluster_ColRow",ie),
1793 Form(
"column vs row, cluster max E cell, %2.2f<#it{p}_{T}<%2.2f GeV/#it{c}",
fEBinCuts[ie],
fEBinCuts[ie+1]),
1794 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
1802 (Form(
"hEBin%d_Cell_ColRow",ie),
1803 Form(
"column vs row, cell, %2.2f<#it{p}_{T}<%2.2f GeV/#it{c}",
fEBinCuts[ie],
fEBinCuts[ie+1]),
1804 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
1815 fhEtaPhiE =
new TH3F (
"hEtaPhiE",
"#eta vs #varphi vs energy, reconstructed clusters",
1816 netabins,etamin,etamax,nphibins,phimin,phimax,nptbins,ptmin,ptmax);
1824 fhEtaPhi =
new TH2F (
"hEtaPhi",
"#eta vs #varphi for #it{E} > 0.5 GeV, reconstructed clusters",
1825 netabins,etamin,etamax,nphibins,phimin,phimax);
1827 fhEtaPhi->SetYTitle(
"#varphi (rad)");
1833 nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
1841 nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
1847 nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
1861 fhLambda0 =
new TH2F (
"hLambda0",
"shower shape, #lambda^{2}_{0} vs E",
1862 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1863 fhLambda0->SetXTitle(
"#it{E}_{cluster} (GeV)");
1864 fhLambda0->SetYTitle(
"#lambda^{2}_{0}");
1867 fhLambda1 =
new TH2F (
"hLambda1",
"shower shape, #lambda^{2}_{1} vs E",
1868 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1869 fhLambda1->SetXTitle(
"#it{E}_{cluster} (GeV)");
1870 fhLambda1->SetYTitle(
"#lambda^{2}_{1}");
1874 nptbins,ptmin,ptmax,10,0,10);
1875 fhNLocMax->SetXTitle(
"#it{E}_{cluster} (GeV)");
1880 nptbins,ptmin,ptmax,10,0,10);
1888 nptbins,ptmin,ptmax, 100,0,1.);
1894 nptbins,ptmin,ptmax, 500,0,100.);
1899 fhClusterMaxCellDiff =
new TH2F (
"hClusterMaxCellDiff",
"energy vs difference of cluster energy - max cell energy / cluster energy, good clusters",
1900 nptbins,ptmin,ptmax, 500,0,1.);
1905 fhClusterMaxCellECross =
new TH2F (
"hClusterMaxCellECross",
"1 - Energy in cross around max energy cell / max energy cell vs cluster energy, good clusters",
1906 nptbins,ptmin,ptmax, 400,-1,1.);
1915 nptbins,ptmin,ptmax, nceclbins,nceclmin,nceclmax);
1921 nceclbins,nceclmin,nceclmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
1926 fhBadClusterEnergy =
new TH1F (
"hBadClusterEnergy",
"Bad cluster energy", nptbins,ptmin,ptmax);
1931 netabins,etamin,etamax,nphibins,phimin,phimax);
1937 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1942 fhBadClusterLambda1 =
new TH2F (
"hBadClusterLambda1",
"Bad cluster,shower shape, #lambda^{2}_{1} vs E for bad cluster ",
1943 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1949 nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
1956 fhBadClusterPairDiffTimeE =
new TH2F(
"hBadClusterPairDiffTimeE",
"cluster pair time difference (bad - good) vs E from bad cluster",nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
1964 fhClusterMaxCellDiffNoCut =
new TH2F (
"hClusterMaxCellDiffNoCut",
"energy vs difference of cluster energy - max cell energy / cluster energy",
1965 nptbins,ptmin,ptmax, 500,0,1.);
1971 nptbins,ptmin,ptmax, 100,0,1.);
1977 nptbins,ptmin,ptmax, 500,0,100);
1982 fhBadClusterMaxCellDiff =
new TH2F (
"hBadClusterMaxCellDiff",
"energy vs difference of cluster energy - max cell energy / cluster energy for bad clusters",
1983 nptbins,ptmin,ptmax, 500,0,1.);
1988 fhBadClusterMaxCellECross =
new TH2F (
"hBadClusterMaxCellECross",
"1 - #it{E}_{+} around max energy cell / max energy cell vs cluster energy, bad clusters",
1989 nptbins,ptmin,ptmax, 400,-1,1.);
2018 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
2023 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
2028 nresetabins,resetamin,resetamax,nresphibins,resphimin,resphimax);
2033 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
2038 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
2043 nresetabins,resetamin,resetamax,nresphibins,resphimin,resphimax);
2049 nresetabins,resetamin,resetamax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2054 nresetabins,resetamin,resetamax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2059 nresetabins,resetamin,resetamax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2064 nresetabins,resetamin,resetamax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2080 fhECharged =
new TH1F (
"hECharged",
"#it{E} reconstructed clusters, matched with track", nptbins,ptmin,ptmax);
2084 fhPtCharged =
new TH1F (
"hPtCharged",
"#it{p}_{T} reconstructed clusters, matched with track", nptbins,ptmin,ptmax);
2085 fhPtCharged->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
2088 fhPhiCharged =
new TH1F (
"hPhiCharged",
"#varphi reconstructed clusters, matched with track",nphibins,phimin,phimax);
2092 fhEtaCharged =
new TH1F (
"hEtaCharged",
"#eta reconstructed clusters, matched with track",netabins,etamin,etamax);
2098 fhEtaPhiECharged =
new TH3F (
"hEtaPhiECharged",
"#eta vs #varphi, reconstructed clusters, matched with track",
2099 netabins,etamin,etamax,nphibins,phimin,phimax,nptbins,ptmin,ptmax);
2107 fhEtaPhiCharged =
new TH2F (
"hEtaPhiCharged",
"#eta vs #varphi for #it{E} > 0.5 GeV, reconstructed clusters, with matched track",
2108 netabins,etamin,etamax,nphibins,phimin,phimax);
2114 fh1EOverP =
new TH2F(
"h1EOverP",
"TRACK matches #it{E}/#it{p}",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
2116 fh1EOverP->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
2119 fh2dR =
new TH2F(
"h2dR",
"TRACK matches #Delta #it{R}",nptbins,ptmin,ptmax,ndRbins,dRmin,dRmax);
2120 fh2dR->SetYTitle(
"#Delta #it{R} (rad)");
2121 fh2dR->SetXTitle(
"#it{E} cluster (GeV)");
2122 outputContainer->Add(
fh2dR) ;
2124 fh2MatchdEdx =
new TH2F(
"h2MatchdEdx",
"#it{dE/dx} vs. #it{p} for all matches",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
2129 fh2EledEdx =
new TH2F(
"h2EledEdx",
"#it{dE/dx} vs. #it{p} for electrons",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
2134 fh1EOverPR02 =
new TH2F(
"h1EOverPR02",
"TRACK matches #it{E}/#it{p}, all",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
2139 fh1EleEOverP =
new TH2F(
"h1EleEOverP",
"Electron candidates #it{E}/#it{p} (60<#it{dE/dx}<100)",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
2148 (
"h1EOverP_PerModule",
"TRACK matches #it{E}/#it{p}, #it{E}_{cl}&#it{p}_{tr}>0.5 Gev/#it{c}",
2149 nPoverEbins,eOverPmin,eOverPmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2155 (
"h2dR_PerModule",
"TRACK matches #Delta #it{R}, #it{E}_{cl}&#it{p}_{tr}>0.5 Gev/#it{c}",
2156 ndRbins,dRmin,dRmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2157 fh2dRMod->SetXTitle(
"#Delta #it{R} (rad)");
2162 (
"h2MatchdEdx_PerModule",
"#it{dE/dx} vs. #it{p} for all matches, #it{E}_{cl}&#it{p}_{tr}>0.5 Gev/#it{c}",
2163 ndedxbins,dedxmin,dedxmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2169 (
"h2EledEdx_PerModule",
"#it{dE/dx} vs. #it{p} for electrons, #it{E}_{cl}&#it{p}_{tr}>0.5 Gev/#it{c}",
2170 ndedxbins,dedxmin,dedxmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2176 (
"h1EOverPR02_PerModule",
"TRACK matches #it{E}/#it{p}, all, #it{E}_{cl}&#it{p}_{tr}>0.5 Gev/#it{c}",
2177 nPoverEbins,eOverPmin,eOverPmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2183 (
"h1EleEOverP_PerModule",
"Electron candidates #it{E}/#it{p} (60<#it{dE/dx}<100), #it{E}_{cl}&#it{p}_{tr}>0.5 Gev/#it{c}",
2184 nPoverEbins,eOverPmin,eOverPmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2192 if ( fFirstModule < 12 )
2194 fhIM =
new TH2F (
"hIM",
"Cluster pairs (EMCAL or PHOS) Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1",
2195 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2196 fhIM->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2197 fhIM->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2198 outputContainer->Add(
fhIM);
2200 fhIMDiff =
new TH2F (
"hIMDiff",
"Cluster pairs (EMCAL or PHOS) Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1, different SM",
2201 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2202 fhIMDiff->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2203 fhIMDiff->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2206 fhIMSame =
new TH2F (
"hIMSame",
"Cluster pairs (EMCAL or PHOS) Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1, same SM",
2207 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2208 fhIMSame->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2209 fhIMSame->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2214 fhIMEMCALPHOS =
new TH2F (
"hIMEMCALPHOS",
"Cluster pairs in DCAL-PHOS Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1",
2215 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2216 fhIMEMCALPHOS->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2217 fhIMEMCALPHOS->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2220 fhIMEMCALPHOSSame =
new TH2F (
"hIMEMCALPHOSSame",
"Cluster pairs in DCAL-PHOS Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1, same #varphi sector",
2221 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2230 fhIMDCAL =
new TH2F (
"hIMDCAL",
"Cluster pairs in DCAL Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1",
2231 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2232 fhIMDCAL->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2233 fhIMDCAL->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2236 fhIMDCALDiff =
new TH2F (
"hIMDCALDiff",
"Cluster pairs in DCAL Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1, different SM",
2237 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2238 fhIMDCALDiff->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2239 fhIMDCALDiff->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2242 fhIMDCALSame =
new TH2F (
"hIMDCALSame",
"Cluster pairs in DCAL Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1, same SM",
2243 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2244 fhIMDCALSame->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2245 fhIMDCALSame->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2248 fhIMDCALPHOS =
new TH2F (
"hIMDCALPHOS",
"Cluster pairs in DCAL-PHOS Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1",
2249 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2250 fhIMDCALPHOS->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2251 fhIMDCALPHOS->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2254 fhIMDCALPHOSSame =
new TH2F (
"hIMDCALPHOSSame",
"Cluster pairs in DCAL-PHOS Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1, same #varphi sector",
2255 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2263 if ( fFirstModule < 12 )
2266 nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
2272 nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
2281 nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
2287 nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
2294 fhAsym =
new TH2F (
"hAssym",
"Cluster pairs Asymmetry vs reconstructed pair energy",nptbins,ptmin,ptmax,nasymbins,asymmin,asymmax);
2295 fhAsym->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2296 fhAsym->SetYTitle(
"#it{Asymmetry}");
2297 outputContainer->Add(
fhAsym);
2301 fhOpAngle =
new TH2F (
"hOpeningAngle",
"Cluster pairs opening angle vs reconstructed pair #it{p}_{T}, ncell > 1",
2302 nptbins,ptmin,ptmax, 180,0,TMath::Pi());
2303 fhOpAngle->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2304 fhOpAngle->SetYTitle(
"Opening angle (degrees)");
2308 fhIMvsOpAngle =
new TH2F (
"hIMvsOpAngle",
"Cluster pairs Invariant mass vs reconstructed pair opening angle, ncell > 1",
2311 fhIMvsOpAngle->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2318 fhXYZ =
new TH3F (
"hXYZ",
"Cluster: #it{x} vs #it{y} vs #it{z}",xbins,xmin,xmax,ybins,ymin,ymax,zbins,zmin,zmax);
2319 fhXYZ->SetXTitle(
"#it{x} (cm)");
2320 fhXYZ->SetYTitle(
"#it{y} (cm)");
2321 fhXYZ->SetZTitle(
"#it{z} (cm) ");
2322 outputContainer->Add(
fhXYZ);
2324 fhXE =
new TH2F (
"hXE",
"Cluster X position vs cluster energy",xbins,xmin,xmax,nptbins,ptmin,ptmax);
2325 fhXE->SetXTitle(
"#it{x} (cm)");
2326 fhXE->SetYTitle(
"#it{E} (GeV)");
2327 outputContainer->Add(
fhXE);
2329 fhYE =
new TH2F (
"hYE",
"Cluster Y position vs cluster energy",ybins,ymin,ymax,nptbins,ptmin,ptmax);
2330 fhYE->SetXTitle(
"#it{y} (cm)");
2331 fhYE->SetYTitle(
"#it{E} (GeV)");
2332 outputContainer->Add(
fhYE);
2334 fhZE =
new TH2F (
"hZE",
"Cluster Z position vs cluster energy",zbins,zmin,zmax,nptbins,ptmin,ptmax);
2335 fhZE->SetXTitle(
"#it{z} (cm)");
2336 fhZE->SetYTitle(
"#it{E} (GeV)");
2337 outputContainer->Add(
fhZE);
2339 fhRE =
new TH2F (
"hRE",
"Cluster R position vs cluster energy",rbins,rmin,rmax,nptbins,ptmin,ptmax);
2340 fhRE->SetXTitle(
"r = #sqrt{x^{2}+y^{2}} (cm)");
2341 fhRE->SetYTitle(
"#it{E} (GeV)");
2342 outputContainer->Add(
fhRE);
2344 fhXNCells =
new TH2F (
"hXNCells",
"Cluster X position vs N Cells per Cluster",xbins,xmin,xmax,nceclbins,nceclmin,nceclmax);
2346 fhXNCells->SetYTitle(
"N cells per cluster");
2349 fhYNCells =
new TH2F (
"hYNCells",
"Cluster Y position vs N Cells per Cluster",ybins,ymin,ymax,nceclbins,nceclmin,nceclmax);
2351 fhYNCells->SetYTitle(
"N cells per cluster");
2354 fhZNCells =
new TH2F (
"hZNCells",
"Cluster Z position vs N Cells per Cluster",zbins,zmin,zmax,nceclbins,nceclmin,nceclmax);
2356 fhZNCells->SetYTitle(
"N cells per cluster");
2359 fhRNCells =
new TH2F (
"hRNCells",
"Cluster R position vs N Cells per Cluster",rbins,rmin,rmax,nceclbins,nceclmin,nceclmax);
2360 fhRNCells->SetXTitle(
"r = #sqrt{x^{2}+y^{2}} (cm)");
2361 fhRNCells->SetYTitle(
"N cells per cluster");
2367 fhRCellE =
new TH2F (
"hRCellE",
"Cell R position vs cell energy",rbins,rmin,rmax,nptbins,ptmin,ptmax);
2368 fhRCellE->SetXTitle(
"r = #sqrt{x^{2}+y^{2}} (cm)");
2369 fhRCellE->SetYTitle(
"#it{E} (GeV)");
2372 fhXCellE =
new TH2F (
"hXCellE",
"Cell X position vs cell energy",xbins,xmin,xmax,nptbins,ptmin,ptmax);
2373 fhXCellE->SetXTitle(
"#it{x} (cm)");
2374 fhXCellE->SetYTitle(
"#it{E} (GeV)");
2377 fhYCellE =
new TH2F (
"hYCellE",
"Cell Y position vs cell energy",ybins,ymin,ymax,nptbins,ptmin,ptmax);
2378 fhYCellE->SetXTitle(
"#it{y} (cm)");
2379 fhYCellE->SetYTitle(
"#it{E} (GeV)");
2382 fhZCellE =
new TH2F (
"hZCellE",
"Cell Z position vs cell energy",zbins,zmin,zmax,nptbins,ptmin,ptmax);
2383 fhZCellE->SetXTitle(
"#it{z} (cm)");
2384 fhZCellE->SetYTitle(
"#it{E} (GeV)");
2387 fhXYZCell =
new TH3F (
"hXYZCell",
"Cell : #it{x} vs #it{y} vs #it{z}",xbins,xmin,xmax,ybins,ymin,ymax,zbins,zmin,zmax);
2393 Float_t dx = TMath::Abs(xmin)+TMath::Abs(xmax);
2394 Float_t dy = TMath::Abs(ymin)+TMath::Abs(ymax);
2395 Float_t dz = TMath::Abs(zmin)+TMath::Abs(zmax);
2396 Float_t dr = TMath::Abs(rmin)+TMath::Abs(rmax);
2398 fhDeltaCellClusterRNCells =
new TH2F (
"hDeltaCellClusterRNCells",
"Cluster-Cell R position vs N Cells per Cluster",rbins*2,-dr,dr,nceclbins,nceclmin,nceclmax);
2403 fhDeltaCellClusterXNCells =
new TH2F (
"hDeltaCellClusterXNCells",
"Cluster-Cell X position vs N Cells per Cluster",xbins*2,-dx,dx,nceclbins,nceclmin,nceclmax);
2408 fhDeltaCellClusterYNCells =
new TH2F (
"hDeltaCellClusterYNCells",
"Cluster-Cell Y position vs N Cells per Cluster",ybins*2,-dy,dy,nceclbins,nceclmin,nceclmax);
2413 fhDeltaCellClusterZNCells =
new TH2F (
"hDeltaCellClusterZNCells",
"Cluster-Cell Z position vs N Cells per Cluster",zbins*2,-dz,dz,nceclbins,nceclmin,nceclmax);
2418 fhDeltaCellClusterRE =
new TH2F (
"hDeltaCellClusterRE",
"Cluster-Cell R position vs cluster energy",rbins*2,-dr,dr,nptbins,ptmin,ptmax);
2419 fhDeltaCellClusterRE->SetXTitle(
"#it{r} = #sqrt{x^{2}+y^{2}}, #it{r}_{clus}-#it{r}_{cell} (cm)");
2423 fhDeltaCellClusterXE =
new TH2F (
"hDeltaCellClusterXE",
"Cluster-Cell X position vs cluster energy",xbins*2,-dx,dx,nptbins,ptmin,ptmax);
2428 fhDeltaCellClusterYE =
new TH2F (
"hDeltaCellClusterYE",
"Cluster-Cell Y position vs cluster energy",ybins*2,-dy,dy,nptbins,ptmin,ptmax);
2433 fhDeltaCellClusterZE =
new TH2F (
"hDeltaCellClusterZE",
"Cluster-Cell Z position vs cluster energy",zbins*2,-dz,dz,nptbins,ptmin,ptmax);
2441 netabins,etamin,etamax,nphibins,phimin,phimax,nptbins,ptmin,ptmax);
2449 fhEtaPhiCell =
new TH2F (
"hEtaPhiCell",
"Cell #eta vs cell #varphi vs cell energy",
2450 netabins,etamin,etamax,nphibins,phimin,phimax);
2477 fhEMod =
new TH2F (
"hE_Mod",
"Cluster reconstructed Energy in each present Module",nptbins,ptmin,ptmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2478 fhEMod->SetXTitle(
"#it{E} (GeV)");
2479 fhEMod->SetYTitle(
"Module");
2480 outputContainer->Add(
fhEMod);
2482 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);
2509 if(imod < fFirstModule || imod >
fLastModule)
continue;
2512 Form(
"# clusters in SM vs sum of clusters energy in Module %d",imod),
2513 nptbins,ptmin,ptmax*4, nclbins,nclmin,nclmax);
2519 Form(
"# cells per cluster vs cluster energy in Module %d",imod),
2520 nptbins,ptmin,ptmax, nceclbins,nceclmin,nceclmax);
2528 Form(
"# cells per cluster vs cluster energy in Module %d, no cut",imod),
2529 nptbins,ptmin,ptmax, nceclbins,nceclmin,nceclmax);
2538 Form(
"Cluster pairs Invariant mass vs reconstructed pair energy in Module %d, n cell > 1",imod),
2539 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2540 fhIMMod[imod]->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2541 fhIMMod[imod]->SetYTitle(
"#it{M}_{cluster pairs} (GeV/#it{c}^{2})");
2542 outputContainer->Add(
fhIMMod[imod]);
2551 fhNCells =
new TH1F (
"hNCells",
"# cells", ncebins,ncemin+0.5,ncemax);
2552 fhNCells->SetXTitle(
"#it{n}_{cells}");
2559 fhAmplitude =
new TH1F (
"hAmplitude",
"#it{E}_{cell}", nptbins,ptmin,ptmax/2);
2563 fhAmpMod =
new TH2F (
"hAmp_Mod",
"Cell energy in each present Module",nptbins,ptmin,ptmax/2,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2564 fhAmpMod->SetXTitle(
"#it{E} (GeV)");
2568 fhAmpWeirdMod =
new TH2F (
"hAmpWeird_Mod",
"Cell energy in each present Module, ridiculously large E",200,0,10000,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2575 fhTimeMod =
new TH2F (
"hTime_Mod",
"Cell time in each present Module",ntimebins,timemin,timemax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2585 Double_t binWidth=(ptfinemax-ptfinemin)/nfineptbins;
2588 xBinning.
AddStep(ptfinemax,binWidth);
2589 xBinning.
AddStep(ptfinemax*2,binWidth*4);
2590 xBinning.
AddStep(ptfinemax*4,binWidth*10);
2601 fhAmpId =
new TH2F (
"hAmpId",
"#it{E}_{cell}", xbinsArray.GetSize() - 1, xbinsArray.GetArray(), ybinsArray.GetSize() - 1, ybinsArray.GetArray());
2602 fhAmpId->SetXTitle(
"#it{E}_{cell} (GeV)");
2603 outputContainer->Add(
fhAmpId);
2612 fhTime =
new TH1F (
"hTime",
"#it{t}_{cell}",ntimebins,timemin,timemax);
2613 fhTime->SetXTitle(
"#it{t}_{cell} (ns)");
2614 outputContainer->Add(
fhTime);
2621 fhTimeAmp =
new TH2F (
"hTimeAmp",
"#it{t}_{cell} vs #it{E}_{cell}",nptbins,ptmin,ptmax/2,ntimebins,timemin,timemax);
2622 fhTimeAmp->SetYTitle(
"#it{t}_{cell} (ns)");
2623 fhTimeAmp->SetXTitle(
"#it{E}_{cell} (GeV)");
2626 fhTimeAmpLowGain =
new TH2F (
"hTimeAmpLG",
"Low gain: #it{t}_{cell} vs #it{E}_{cell}",nptbins,ptmin,ptmax/2,ntimebins,timemin,timemax);
2638 fhTimeId =
new TH2F (
"hTimeId",
"#it{t}_{cell} vs Absolute Id",
2640 fhTimeId->SetXTitle(
"#it{t}_{cell} (ns)");
2641 fhTimeId->SetYTitle(
"Cell Absolute Id");
2650 if(
GetCaloUtils()->IsL1PhaseInTimeRecalibrationOn()==1)
2660 for(
Int_t bc = 0; bc < 4; bc++)
2663 Form(
"#it{t}_{cell} vs super-module, for BC/4=%d",bc),
2664 ntimebins,timemin,timemax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2671 fhCellECross =
new TH2F (
"hCellECross",
"1 - Energy in cross around cell / cell energy",
2672 nptbins,ptmin,ptmax/2, 400,-1,1.);
2674 fhCellECross->SetYTitle(
"1- #it{E}_{cross}/#it{E}_{cell}");
2677 fhNCellsMod =
new TH2F (
"hNCells_Mod",
"# cells vs Module", ncebins,ncemin+0.5,ncemax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2687 fhGridCells =
new TH2F (
"hGridCells",Form(
"Entries in grid of cells"),
2688 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
2693 fhGridCellsE =
new TH2F (
"hGridCellsE",
"Accumulated energy in grid of cells",
2694 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
2700 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
2706 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
2714 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
2720 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
2732 if(imod < fFirstModule || imod >
fLastModule)
continue;
2735 Form(
"# cells in SM vs sum of cells energy in Module %d",imod),
2736 nptbins,ptmin,ptmax*4, ncebins,ncemin,ncemax);
2751 (imod == 10 || imod== 11 || imod == 18 || imod == 19)
2755 Form(
"#it{E}_{cell} vs #it{t}_{cell} in Module %d, RCU %d ",imod,ircu),
2756 nptbins,ptmin,ptmax/2,ntimebins,timemin,timemax);
2771 fhEMCALPHOSCorrNClusters =
new TH2F (
"hEMCALPHOSCorrNClusters",
"# clusters in EMCAL vs PHOS", nclbins,nclmin,nclmax,nclbins,nclmin,nclmax);
2776 fhEMCALPHOSCorrEClusters =
new TH2F (
"hEMCALPHOSCorrEClusters",
"summed energy of clusters in EMCAL vs PHOS", nptbins,ptmin,ptmax*2,nptbins,ptmin,ptmax*2);
2781 fhEMCALPHOSCorrNCells =
new TH2F (
"hEMCALPHOSCorrNCells",
"# Cells in EMCAL vs PHOS", ncebins,ncemin,ncemax, ncebins,ncemin,ncemax);
2786 fhEMCALPHOSCorrECells =
new TH2F (
"hEMCALPHOSCorrECells",
"summed energy of Cells in EMCAL vs PHOS", nptbins*2,ptmin,ptmax*4,nptbins*2,ptmin,ptmax*4);
2792 fhEMCALDCALCorrNClusters =
new TH2F (
"hEMCALDCALCorrNClusters",
"# clusters in EMCAL vs DCAL", nclbins,nclmin,nclmax,nclbins,nclmin,nclmax);
2797 fhEMCALDCALCorrEClusters =
new TH2F (
"hEMCALDCALCorrEClusters",
"summed energy of clusters in EMCAL vs DCAL", nptbins,ptmin,ptmax*2,nptbins,ptmin,ptmax*2);
2802 fhEMCALDCALCorrNCells =
new TH2F (
"hEMCALDCALCorrNCells",
"# Cells in EMCAL vs DCAL", ncebins,ncemin,ncemax, ncebins,ncemin,ncemax);
2807 fhEMCALDCALCorrECells =
new TH2F (
"hEMCALDCALCorrECells",
"summed energy of Cells in EMCAL vs DCAL", nptbins*2,ptmin,ptmax*4,nptbins*2,ptmin,ptmax*4);
2814 fhDCALPHOSCorrNClusters =
new TH2F (
"hDCALPHOSCorrNClusters",
"# clusters in DCAL vs PHOS", nclbins,nclmin,nclmax,nclbins,nclmin,nclmax);
2819 fhDCALPHOSCorrEClusters =
new TH2F (
"hDCALPHOSCorrEClusters",
"summed energy of clusters in DCAL vs PHOS", nptbins,ptmin,ptmax*2,nptbins,ptmin,ptmax*2);
2824 fhDCALPHOSCorrNCells =
new TH2F (
"hDCALPHOSCorrNCells",
"# Cells in DCAL vs PHOS", ncebins,ncemin,ncemax, ncebins,ncemin,ncemax);
2829 fhDCALPHOSCorrECells =
new TH2F (
"hDCALPHOSCorrECells",
"summed energy of Cells in DCAL vs PHOS", nptbins*2,ptmin,ptmax*4,nptbins*2,ptmin,ptmax*4);
2899 fhCaloCenNClusters =
new TH2F (
"hCaloCenNClusters",
"# clusters in calorimeter vs centrality",100,0,100,nclbins,nclmin,nclmax);
2904 fhCaloCenEClusters =
new TH2F (
"hCaloCenEClusters",
"summed energy of clusters in calorimeter vs centrality",100,0,100,nptbins,ptmin,ptmax*2);
2909 fhCaloCenNCells =
new TH2F (
"hCaloCenNCells",
"# Cells in calorimeter vs centrality",100,0,100,ncebins,ncemin,ncemax);
2914 fhCaloCenECells =
new TH2F (
"hCaloCenECells",
"summed energy of Cells in calorimeter vs centrality",100,0,100,nptbins*2,ptmin,ptmax*4);
2915 fhCaloCenECells->SetYTitle(
"#Sigma #it{E} of Cells in calorimeter (GeV)");
2919 fhCaloEvPNClusters =
new TH2F (
"hCaloEvPNClusters",
"# clusters in calorimeter vs event plane angle",100,0,TMath::Pi(),nclbins,nclmin,nclmax);
2924 fhCaloEvPEClusters =
new TH2F (
"hCaloEvPEClusters",
"summed energy of clusters in calorimeter vs event plane angle",100,0,TMath::Pi(),nptbins,ptmin,ptmax*2);
2929 fhCaloEvPNCells =
new TH2F (
"hCaloEvPNCells",
"# Cells in calorimeter vs event plane angle",100,0,TMath::Pi(),ncebins,ncemin,ncemax);
2934 fhCaloEvPECells =
new TH2F (
"hCaloEvPECells",
"summed energy of Cells in calorimeter vs event plane angle",100,0,TMath::Pi(),nptbins*2,ptmin,ptmax*4);
2935 fhCaloEvPECells->SetYTitle(
"#Sigma #it{E} of Cells in calorimeter (GeV)");
2945 "Photon",
"Pi0",
"Eta",
2946 "Electron",
"PhotonConv",
2947 "NeutralHadron",
"ChargedHadron" };
2951 for(
Int_t iPart = 0; iPart < 4; iPart++)
2953 fhGenMCE [iPart] =
new TH1F(Form(
"hGenMCE_%s",particleName[iPart].
Data()) ,
2954 Form(
"#it{E} of generated %s",particleName[iPart].
Data()),
2955 nptbins,ptmin,ptmax);
2957 fhGenMCPt[iPart] =
new TH1F(Form(
"hGenMCPt_%s",particleName[iPart].
Data()) ,
2958 Form(
"#it{p}_{T} of generated %s",particleName[iPart].
Data()),
2959 nptbins,ptmin,ptmax);
2962 Form(
"Y vs #varphi of generated %s",particleName[iPart].
Data()),
2963 200,-1,1,360,0,TMath::TwoPi());
2965 fhGenMCE [iPart] ->SetXTitle(
"#it{E} (GeV)");
2966 fhGenMCPt[iPart] ->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
2970 outputContainer->Add(
fhGenMCE [iPart]);
2971 outputContainer->Add(
fhGenMCPt [iPart]);
2975 fhGenMCAccE [iPart] =
new TH1F(Form(
"hGenMCAccE_%s",particleName[iPart].
Data()) ,
2976 Form(
"#it{E} of generated %s",particleName[iPart].
Data()),
2977 nptbins,ptmin,ptmax);
2978 fhGenMCAccPt[iPart] =
new TH1F(Form(
"hGenMCAccPt_%s",particleName[iPart].
Data()) ,
2979 Form(
"#it{p}_{T} of generated %s",particleName[iPart].
Data()),
2980 nptbins,ptmin,ptmax);
2982 Form(
"Y vs #varphi of generated %s",particleName[iPart].
Data()),
2983 netabins,etamin,etamax,nphibins,phimin,phimax);
2986 fhGenMCAccPt[iPart] ->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
2998 for(
Int_t iPart = 0; iPart < 7; iPart++)
3000 for(
Int_t iCh = 0; iCh < 2; iCh++)
3003 Form(
"Reconstructed/Generated E, %s, Matched %d",particleName[iPart].
Data(),iCh),
3004 nptbins, ptmin, ptmax, 200,0,2);
3005 fhRecoMCRatioE[iPart][iCh]->SetYTitle(
"#it{E}_{reconstructed}/#it{E}_{generated}");
3006 fhRecoMCRatioE[iPart][iCh]->SetXTitle(
"#it{E}_{reconstructed} (GeV)");
3011 Form(
"Generated - Reconstructed E, %s, Matched %d",particleName[iPart].
Data(),iCh),
3012 nptbins, ptmin, ptmax, nptbins*2,-ptmax,ptmax);
3014 fhRecoMCDeltaE[iPart][iCh]->SetXTitle(
"#it{E}_{reconstructed} (GeV)");
3018 Form(
"Generated - Reconstructed #varphi, %s, Matched %d",particleName[iPart].
Data(),iCh),
3019 nptbins, ptmin, ptmax, nphibins*2,-phimax,phimax);
3025 Form(
"Generated - Reconstructed #eta, %s, Matched %d",particleName[iPart].
Data(),iCh),
3026 nptbins, ptmin, ptmax,netabins*2,-etamax,etamax);
3031 fhRecoMCE[iPart][iCh] =
new TH2F (Form(
"hRecoMCE_%s_Match%d",particleName[iPart].
Data(),iCh),
3032 Form(
"#it{E} distribution, reconstructed vs generated, %s, Matched %d",particleName[iPart].
Data(),iCh),
3033 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
3034 fhRecoMCE[iPart][iCh]->SetXTitle(
"#it{E}_{rec} (GeV)");
3035 fhRecoMCE[iPart][iCh]->SetYTitle(
"#it{E}_{gen} (GeV)");
3036 outputContainer->Add(
fhRecoMCE[iPart][iCh]);
3038 fhRecoMCPhi[iPart][iCh] =
new TH2F (Form(
"hRecoMCPhi_%s_Match%d",particleName[iPart].
Data(),iCh),
3039 Form(
"#varphi distribution, reconstructed vs generated, %s, Matched %d",particleName[iPart].
Data(),iCh),
3040 nphibins,phimin,phimax, nphibins,phimin,phimax);
3041 fhRecoMCPhi[iPart][iCh]->SetXTitle(
"#varphi_{reconstructed} (rad)");
3042 fhRecoMCPhi[iPart][iCh]->SetYTitle(
"#varphi_{generated} (rad)");
3045 fhRecoMCEta[iPart][iCh] =
new TH2F (Form(
"hRecoMCEta_%s_Match%d",particleName[iPart].
Data(),iCh),
3046 Form(
"#eta distribution, reconstructed vs generated, %s, Matched %d",particleName[iPart].
Data(),iCh),
3047 netabins,etamin,etamax,netabins,etamin,etamax);
3048 fhRecoMCEta[iPart][iCh]->SetXTitle(
"#eta_{reconstructed} ");
3049 fhRecoMCEta[iPart][iCh]->SetYTitle(
"#eta_{generated} ");
3056 fhEMVxyz =
new TH2F (
"hEMVxyz",
"Production vertex of reconstructed ElectroMagnetic particles",nvdistbins,vdistmin,vdistmax,nvdistbins,vdistmin,vdistmax);
3062 fhHaVxyz =
new TH2F (
"hHaVxyz",
"Production vertex of reconstructed hadrons",nvdistbins,vdistmin,vdistmax,nvdistbins,vdistmin,vdistmax);
3068 fhEMR =
new TH2F (
"hEMR",
"Distance to production vertex of reconstructed ElectroMagnetic particles vs E rec",nptbins,ptmin,ptmax,nvdistbins,vdistmin,vdistmax);
3069 fhEMR->SetXTitle(
"#it{E} (GeV)");
3070 fhEMR->SetYTitle(
"TMath::Sqrt(v_{x}^{2}+v_{y}^{2})");
3071 outputContainer->Add(
fhEMR);
3073 fhHaR =
new TH2F (
"hHaR",
"Distance to production vertex of reconstructed Hadrons vs E rec",nptbins,ptmin,ptmax,nvdistbins,vdistmin,vdistmax);
3074 fhHaR->SetXTitle(
"#it{E} (GeV)");
3075 fhHaR->SetYTitle(
"TMath::Sqrt(v_{x}^{2}+v_{y}^{2})");
3076 outputContainer->Add(
fhHaR);
3080 fhMCEle1EOverP =
new TH2F(
"hMCEle1EOverP",
"TRACK matches #it{E}/#it{p}, MC electrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3085 fhMCEle1dR =
new TH1F(
"hMCEle1dR",
"TRACK matches dR, MC electrons",ndRbins,dRmin,dRmax);
3086 fhMCEle1dR->SetXTitle(
"#Delta #it{R} (rad)");
3089 fhMCEle2MatchdEdx =
new TH2F(
"hMCEle2MatchdEdx",
"#it{dE/dx} vs. #it{p} for all matches, MC electrons",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
3094 fhMCChHad1EOverP =
new TH2F(
"hMCChHad1EOverP",
"TRACK matches #it{E}/#it{p}, MC charged hadrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3099 fhMCChHad1dR =
new TH1F(
"hMCChHad1dR",
"TRACK matches dR, MC charged hadrons",ndRbins,dRmin,dRmax);
3103 fhMCChHad2MatchdEdx =
new TH2F(
"hMCChHad2MatchdEdx",
"#it{dE/dx} vs. #it{p} for all matches, MC charged hadrons",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
3108 fhMCNeutral1EOverP =
new TH2F(
"hMCNeutral1EOverP",
"TRACK matches #it{E}/#it{p}, MC neutrals",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3113 fhMCNeutral1dR =
new TH1F(
"hMCNeutral1dR",
"TRACK matches dR, MC neutrals",ndRbins,dRmin,dRmax);
3117 fhMCNeutral2MatchdEdx =
new TH2F(
"hMCNeutral2MatchdEdx",
"#it{dE/dx} vs. #it{p} for all matches, MC neutrals",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
3122 fhMCEle1EOverPR02 =
new TH2F(
"hMCEle1EOverPR02",
"TRACK matches #it{E}/#it{p}, MC electrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3127 fhMCChHad1EOverPR02 =
new TH2F(
"hMCChHad1EOverPR02",
"TRACK matches #it{E}/#it{p}, MC charged hadrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3132 fhMCNeutral1EOverPR02 =
new TH2F(
"hMCNeutral1EOverPR02",
"TRACK matches #it{E}/#it{p}, MC neutrals",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3137 fhMCEle1EleEOverP =
new TH2F(
"hMCEle1EleEOverP",
"Electron candidates #it{E}/#it{p} (60<dEdx<100), MC electrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3142 fhMCChHad1EleEOverP =
new TH2F(
"hMCEle1EleEOverP",
"Electron candidates #it{E}/#it{p} (60<dEdx<100), MC charged hadrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3147 fhMCNeutral1EleEOverP =
new TH2F(
"hMCNeutral1EleEOverP",
"Electron candidates #it{E}/#it{p} (60<dEdx<100), MC neutrals",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3157 return outputContainer;
3168 AliVCaloCells * cells)
3170 AliDebug(1,
"Start");
3176 Int_t nModule2 = -1;
3177 Int_t nCaloClusters = caloClusters->GetEntriesFast();
3180 if(phi1 < 0) phi1 += TMath::TwoPi();
3182 Double_t tof1 = ((AliVCluster*) caloClusters->At(iclus))->GetTOF()*1.e9;
3185 for(
Int_t jclus = iclus + 1 ; jclus < nCaloClusters ; jclus++)
3187 AliVCluster* clus2 = (AliVCluster*) caloClusters->At(jclus);
3192 Double_t tof2 = clus2->GetTOF()*1.e9;
3200 if( !
IsGoodCluster(absIdMax, clus2->GetM02(), clus2->GetNCells(), cells)
3238 if(phi2 < 0) phi2 += TMath::TwoPi();
3240 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));
3242 Bool_t inPi0Window = kFALSE;
3243 if(mass < 0.18 && mass > 0.1) inPi0Window = kTRUE ;
3245 if ( nModule < 12 && nModule2 < 12 )
3252 if ( nModule == nModule2 )
3266 nModule > 11 && nModule2 > 11 &&
fNModules > 12 )
3273 if ( nModule == nModule2 )
3289 if(nModule == nModule2 && nModule >= 0 && nModule <
fNModules)
3303 AliDebug(1,
"Check DCal-PHOS pairs\n");
3308 if(phi1 >= 260*TMath::DegToRad() && phi1 < 280) sector1 = 0;
3309 if(phi1 >= 280*TMath::DegToRad() && phi1 < 300) sector1 = 1;
3310 if(phi1 >= 300*TMath::DegToRad() && phi1 < 320) sector1 = 2;
3320 if( !
IsGoodCluster(absIdMax, clus2->GetM02(), clus2->GetNCells(), cells)
3338 if(phiPHOS < 0) phiPHOS += TMath::TwoPi();
3340 if(phiPHOS >= 260*TMath::DegToRad() && phiPHOS < 280) sector2 = 0;
3341 if(phiPHOS >= 280*TMath::DegToRad() && phiPHOS < 300) sector2 = 1;
3342 if(phiPHOS >= 300*TMath::DegToRad() && phiPHOS < 320) sector2 = 2;
3354 AliDebug(1,
"Check EMCAL(DCal)-EMCAL(PHOS) pairs\n");
3359 if(phi1 >= 80*TMath::DegToRad() && phi1 < 100) sector1 = 0;
3360 if(phi1 >= 100*TMath::DegToRad() && phi1 < 120) sector1 = 1;
3361 if(phi1 >= 120*TMath::DegToRad() && phi1 < 140) sector1 = 2;
3362 if(phi1 >= 140*TMath::DegToRad() && phi1 < 160) sector1 = 3;
3363 if(phi1 >= 160*TMath::DegToRad() && phi1 < 180) sector1 = 4;
3364 if(phi1 >= 180*TMath::DegToRad() && phi1 < 190) sector1 = 5;
3366 for(
Int_t jclus = 0 ; jclus < caloClusters->GetEntriesFast() ; jclus++)
3368 AliVCluster* clus2 = (AliVCluster*) caloClusters->At(jclus);
3373 Double_t tof2 = clus2->GetTOF()*1.e9;
3376 Double_t diffTof = TMath::Abs(tof1-tof2);
3380 if( !
IsGoodCluster(absIdMax, clus2->GetM02(), clus2->GetNCells(), cells)
3405 if(phiPHOS < 0) phiPHOS += TMath::TwoPi();
3407 if(phiPHOS >= 80*TMath::DegToRad() && phiPHOS < 100) sector2 = 0;
3408 if(phiPHOS >= 100*TMath::DegToRad() && phiPHOS < 120) sector2 = 1;
3409 if(phiPHOS >= 120*TMath::DegToRad() && phiPHOS < 140) sector2 = 2;
3410 if(phiPHOS >= 140*TMath::DegToRad() && phiPHOS < 160) sector2 = 3;
3411 if(phiPHOS >= 160*TMath::DegToRad() && phiPHOS < 180) sector2 = 4;
3412 if(phiPHOS >= 180*TMath::DegToRad() && phiPHOS < 190) sector2 = 5;
3488 Int_t nCellsPerCluster, AliVCaloCells* cells)
3498 if(!
GetCaloUtils()->GetEMCALRecoUtils()->IsRejectExoticCluster())
3511 Float_t ampMax = cells->GetCellAmplitude(absIdMax);
3514 if(ampMax < 0.01)
return kFALSE;
3518 if(1-
GetCaloUtils()->GetECross(absIdMax,cells,bc)/ampMax > 0.95)
3533 printf(
"**** Print %s %s ****\n", GetName(), GetTitle() ) ;
3555 AliDebug(1,
"Start");
3567 AliVCaloCells * cells = 0x0;
3581 AliFatal(Form(
"AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - Wrong calorimeter name <%s>, END",
GetCalorimeterString().
Data()));
3583 if( !caloClusters || !cells )
3585 AliFatal(Form(
"AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - No CaloClusters or CaloCells available"));
3589 if(caloClusters->GetEntriesFast() == 0)
return ;
3609 if ( !
GetMC() )
return;
3615 AliVParticle * primary= 0;
3618 for(
Int_t i=0 ; i < nprim; i++)
3620 if ( !
GetReader()->AcceptParticleMCLabel( i ) ) continue ;
3625 primary =
GetMC()->GetTrack(i) ;
3628 AliWarning(
"Primaries pointer not available!!");
3632 pdg = primary->PdgCode();
3633 status = primary->MCStatusCode();
3639 if ( status > 11 )
continue;
3642 if ( primary->E() == TMath::Abs(primary->Pz()) ||
3643 (primary->E() - primary->Pz()) < 1e-3 ||
3644 (primary->E() + primary->Pz()) < 0 ) continue ;
3652 if(eMC < 0.2)
continue;
3659 if (TMath::Abs(etaMC) > 1)
continue;
3663 phiMC += TMath::TwoPi();
3667 else if (pdg==111) mcIndex =
kmcPi0;
3668 else if (pdg==221) mcIndex =
kmcEta;
3669 else if (TMath::Abs(pdg)==11) mcIndex =
kmcElectron;
3677 Bool_t inacceptance = kTRUE;
3680 inacceptance = kFALSE ;
3687 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.
TH2F * fhNLocMaxStd
! Cluster Number of local Maxima, stored
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, from CaloUtils
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 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.
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
virtual Int_t GetModuleNumber(AliCaloTrackParticle *part) const
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.