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;
1150 GetReader()->GetNameOfMCEventHederGeneratorToAccept());
1154 primary =
GetMC()->GetTrack(label);
1156 pdg0 = TMath::Abs(primary->PdgCode());
1158 status = primary->MCStatusCode();
1159 vxMC = primary->Xv();
1160 vyMC = primary->Yv();
1161 iParent = primary->GetMother();
1163 AliDebug(1,
"Cluster most contributing mother:");
1164 AliDebug(1,Form(
"\t Mother label %d, pdg %d, %s, status %d, Primary? %d, Physical Primary? %d, parent %d",
1165 iMother, pdg0, primary->GetName(),status, primary->IsPrimary(), primary->IsPhysicalPrimary(), iParent));
1171 primary =
GetMC()->GetTrack(iParent);
1172 pdg = TMath::Abs(primary->PdgCode());
1174 AliDebug(2,
"Converted cluster!. Find before conversion:");
1176 while((pdg == 22 || pdg == 11) && status != 1)
1178 Int_t iMotherOrg = iMother;
1180 primary =
GetMC()->GetTrack(iMother);
1181 status = primary->MCStatusCode();
1182 pdg = TMath::Abs(primary->PdgCode());
1183 iParent = primary->GetMother();
1187 if(pdg==111 || pdg==221)
1189 primary =
GetMC()->GetTrack(iMotherOrg);
1199 AliDebug(2,Form(
"\t pdg %d, index %d, %s, status %d",pdg, iMother, primary->GetName(),status));
1202 AliDebug(1,
"Converted Cluster mother before conversion:");
1203 AliDebug(1,Form(
"\t Mother label %d, pdg %d, %s, status %d, Primary? %d, Physical Primary? %d, parent %d",
1204 iMother, pdg, primary->GetName(), status, primary->IsPrimary(), primary->IsPhysicalPrimary(), iParent));
1212 AliDebug(2,
"Overlapped Meson decay!, Find it:");
1214 while(pdg != 111 && pdg != 221)
1218 primary =
GetMC()->GetTrack(iMother);
1219 status = primary->MCStatusCode();
1220 pdg = TMath::Abs(primary->PdgCode());
1221 iParent = primary->GetMother();
1223 if( iParent < 0 )
break;
1225 AliDebug(2,Form(
"\t pdg %d, %s, index %d",pdg, primary->GetName(),iMother));
1229 AliWarning(
"Tagged as Overlapped photon but meson not found, why?");
1234 AliDebug(2,Form(
"Overlapped %s decay, label %d",primary->GetName(),iMother));
1239 phiMC = primary->Phi();
1240 etaMC = primary->Eta();
1241 pdg = TMath::Abs(primary->PdgCode());
1243 charge = primary->Charge();
1247 Float_t rVMC = TMath::Sqrt(vxMC*vxMC + vyMC*vyMC);
1248 if( ( pdg == 22 || TMath::Abs(pdg) == 11 ) && status != 1 )
1281 else if(charge == 0)
1296 if( mcIndex >= 0 && mcIndex < 7 && e > 0.5 && eMC > 0.5)
1307 if( primary )
return kTRUE ;
1323 if(phi < 0) phi +=TMath::TwoPi();
1341 Double_t dedx = track->GetTPCsignal();
1342 Int_t nITS = track->GetNcls(0);
1343 Int_t nTPC = track->GetNcls(1);
1344 Bool_t positive = kFALSE;
1345 if(track) positive = (track->Charge()>0);
1348 Float_t deta = clus->GetTrackDz();
1349 Float_t dphi = clus->GetTrackDx();
1350 Double_t dR = TMath::Sqrt(dphi*dphi + deta*deta);
1353 if( TMath::Abs(dphi) < 999 )
1390 if(dedx > 60 && dedx < 100)
1400 if(e > 0.5 && tmom > 0.5)
1406 if(dR < 0.02 && eOverP > 0.6 && eOverP < 1.2
1407 && clus->GetNCells() > 1 && nITS > 3 && nTPC > 20)
1415 Double_t charge = TDatabasePDG::Instance()->GetParticle(pdg)->Charge();
1417 if(TMath::Abs(pdg) == 11)
1441 else if(charge == 0)
1466 if(!caloClustersEMCAL || !caloClustersPHOS)
1468 AliDebug(1,Form(
"PHOS (%p) or EMCAL (%p) clusters array not available, do not correlate",caloClustersPHOS,caloClustersEMCAL));
1476 if(!cellsEMCAL || !cellsPHOS)
1478 AliDebug(1,Form(
"PHOS (%p) or EMCAL (%p) cells array ot available, do not correlate",cellsPHOS,cellsEMCAL));
1487 Float_t sumClusterEnergyEMCAL = 0;
1488 Float_t sumClusterEnergyDCAL = 0;
1489 Float_t sumClusterEnergyPHOS = 0;
1493 AliVCluster* cluster = 0;
1494 for(iclus = 0 ; iclus < caloClustersEMCAL->GetEntriesFast() ; iclus++)
1496 cluster = (AliVCluster*)caloClustersEMCAL->At(iclus);
1497 Float_t energy = cluster->E();
1499 if( energy < 0.5 )
continue;
1501 if(cluster->GetCellsAbsId()[0] < 12288)
1504 sumClusterEnergyEMCAL +=
energy;
1509 sumClusterEnergyDCAL +=
energy;
1513 for(iclus = 0 ; iclus < caloClustersPHOS ->GetEntriesFast(); iclus++)
1515 cluster = (AliVCluster*) caloClustersPHOS->At(iclus);
1517 energy = cluster->E();
1519 if( energy < 0.5 )
continue;
1522 sumClusterEnergyPHOS +=
energy;
1526 Int_t ncellsEMCAL = 0 ;
1527 Int_t ncellsDCAL = 0 ;
1528 Int_t ncellsPHOS = 0;
1530 Float_t sumCellEnergyEMCAL = 0;
1531 Float_t sumCellEnergyDCAL = 0;
1532 Float_t sumCellEnergyPHOS = 0;
1534 for(icell = 0 ; icell < cellsEMCAL->GetNumberOfCells() ; icell++)
1536 Float_t amp = cellsEMCAL->GetAmplitude(icell);
1537 Int_t cellId = cellsEMCAL->GetCellNumber(icell);
1544 sumCellEnergyEMCAL += amp;
1549 sumCellEnergyDCAL += amp;
1553 for(icell = 0 ; icell < cellsPHOS->GetNumberOfCells(); icell++)
1555 Float_t amp = cellsPHOS->GetAmplitude(icell);
1556 Int_t cellId = cellsPHOS->GetCellNumber(icell);
1558 if ( cellId < 0 ) continue ;
1563 sumCellEnergyPHOS += amp;
1589 Int_t ncl = nclPHOS;
1590 Float_t sumClusterEnergy = sumClusterEnergyPHOS;
1591 Int_t ncells = ncellsPHOS;
1592 Float_t sumCellEnergy = sumCellEnergyPHOS;
1596 ncl = nclEMCAL + nclDCAL;
1597 sumClusterEnergy = sumClusterEnergyEMCAL + sumClusterEnergyDCAL;
1598 ncells = ncellsEMCAL + ncellsDCAL;
1599 sumCellEnergy = sumCellEnergyEMCAL + sumCellEnergyDCAL;
1627 AliDebug(1,
"Correlate():");
1628 AliDebug(1,Form(
"\t EMCAL: N cells %d, N clusters %d, summed E cells %f, summed E clusters %f",
1629 ncellsEMCAL,nclEMCAL, sumCellEnergyEMCAL,sumClusterEnergyEMCAL));
1630 AliDebug(1,Form(
"\t DCAL : N cells %d, N clusters %d, summed E cells %f, summed E clusters %f",
1631 ncellsDCAL,nclDCAL, sumCellEnergyDCAL,sumClusterEnergyDCAL));
1632 AliDebug(1,Form(
"\t PHOS : N cells %d, N clusters %d, summed E cells %f, summed E clusters %f",
1633 ncellsPHOS,nclPHOS,sumCellEnergyPHOS,sumClusterEnergyPHOS));
1634 AliDebug(1,Form(
"\t V0 : Signal %d, Multiplicity %d, Track Multiplicity %d", v0S,v0M,trM));
1635 AliDebug(1,Form(
"\t centrality : %f, Event plane angle %f", cen,ep));
1644 const Int_t buffersize = 255;
1645 char onePar[buffersize] ;
1647 snprintf(onePar,buffersize,
"--- AliAnaCalorimeterQA ---:") ;
1674 return new TObjString(parList) ;
1684 outputContainer->SetName(
"QAHistos") ;
1736 Float_t rowcellmin = fNMaxRowsFullMin-1.5;
1747 fhE =
new TH1F (
"hE",
"#it{E} reconstructed clusters ", nptbins*5,ptmin,ptmax*5);
1748 fhE->SetXTitle(
"#it{E} (GeV)");
1749 outputContainer->Add(
fhE);
1751 fhPt =
new TH1F (
"hPt",
"#it{p}_{T} reconstructed clusters", nptbins,ptmin,ptmax);
1752 fhPt->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1753 outputContainer->Add(
fhPt);
1755 fhNClusters =
new TH1F (
"hNClusters",
"# clusters", nclbins,nclmin,nclmax);
1759 fhNCellsPerCluster =
new TH2F (
"hNCellsPerCluster",
"# cells per cluster vs energy",nptbins,ptmin,ptmax, nceclbins,nceclmin,nceclmax);
1765 nceclbins*2,nceclmin,nceclmax*2,totalSM,fFirstModule-0.5,
fLastModule+0.5);
1772 fhPhi =
new TH1F (
"hPhi",
"#varphi reconstructed clusters ",nphibins,phimin,phimax);
1773 fhPhi->SetXTitle(
"#varphi (rad)");
1774 outputContainer->Add(
fhPhi);
1776 fhEta =
new TH1F (
"hEta",
"#eta reconstructed clusters ",netabins,etamin,etamax);
1777 fhEta->SetXTitle(
"#eta ");
1778 outputContainer->Add(
fhEta);
1785 (Form(
"hEBin%d_Cluster_EtaPhi",ie),
1786 Form(
"#eta vs #varphi, cluster, %2.2f<#it{p}_{T}<%2.2f GeV/#it{c}",
fEBinCuts[ie],
fEBinCuts[ie+1]),
1787 netabins,etamin,etamax,nphibins,phimin,phimax);
1793 (Form(
"hEBin%d_Cluster_ColRow",ie),
1794 Form(
"column vs row, cluster max E cell, %2.2f<#it{p}_{T}<%2.2f GeV/#it{c}",
fEBinCuts[ie],
fEBinCuts[ie+1]),
1795 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
1803 (Form(
"hEBin%d_Cell_ColRow",ie),
1804 Form(
"column vs row, cell, %2.2f<#it{p}_{T}<%2.2f GeV/#it{c}",
fEBinCuts[ie],
fEBinCuts[ie+1]),
1805 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
1816 fhEtaPhiE =
new TH3F (
"hEtaPhiE",
"#eta vs #varphi vs energy, reconstructed clusters",
1817 netabins,etamin,etamax,nphibins,phimin,phimax,nptbins,ptmin,ptmax);
1825 fhEtaPhi =
new TH2F (
"hEtaPhi",
"#eta vs #varphi for #it{E} > 0.5 GeV, reconstructed clusters",
1826 netabins,etamin,etamax,nphibins,phimin,phimax);
1828 fhEtaPhi->SetYTitle(
"#varphi (rad)");
1834 nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
1842 nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
1848 nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
1862 fhLambda0 =
new TH2F (
"hLambda0",
"shower shape, #lambda^{2}_{0} vs E",
1863 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1864 fhLambda0->SetXTitle(
"#it{E}_{cluster} (GeV)");
1865 fhLambda0->SetYTitle(
"#lambda^{2}_{0}");
1868 fhLambda1 =
new TH2F (
"hLambda1",
"shower shape, #lambda^{2}_{1} vs E",
1869 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1870 fhLambda1->SetXTitle(
"#it{E}_{cluster} (GeV)");
1871 fhLambda1->SetYTitle(
"#lambda^{2}_{1}");
1875 nptbins,ptmin,ptmax,10,0,10);
1876 fhNLocMax->SetXTitle(
"#it{E}_{cluster} (GeV)");
1881 nptbins,ptmin,ptmax,10,0,10);
1889 nptbins,ptmin,ptmax, 100,0,1.);
1895 nptbins,ptmin,ptmax, 500,0,100.);
1900 fhClusterMaxCellDiff =
new TH2F (
"hClusterMaxCellDiff",
"energy vs difference of cluster energy - max cell energy / cluster energy, good clusters",
1901 nptbins,ptmin,ptmax, 500,0,1.);
1906 fhClusterMaxCellECross =
new TH2F (
"hClusterMaxCellECross",
"1 - Energy in cross around max energy cell / max energy cell vs cluster energy, good clusters",
1907 nptbins,ptmin,ptmax, 400,-1,1.);
1916 nptbins,ptmin,ptmax, nceclbins,nceclmin,nceclmax);
1922 nceclbins,nceclmin,nceclmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
1927 fhBadClusterEnergy =
new TH1F (
"hBadClusterEnergy",
"Bad cluster energy", nptbins,ptmin,ptmax);
1932 netabins,etamin,etamax,nphibins,phimin,phimax);
1938 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1943 fhBadClusterLambda1 =
new TH2F (
"hBadClusterLambda1",
"Bad cluster,shower shape, #lambda^{2}_{1} vs E for bad cluster ",
1944 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1950 nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
1957 fhBadClusterPairDiffTimeE =
new TH2F(
"hBadClusterPairDiffTimeE",
"cluster pair time difference (bad - good) vs E from bad cluster",nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
1965 fhClusterMaxCellDiffNoCut =
new TH2F (
"hClusterMaxCellDiffNoCut",
"energy vs difference of cluster energy - max cell energy / cluster energy",
1966 nptbins,ptmin,ptmax, 500,0,1.);
1972 nptbins,ptmin,ptmax, 100,0,1.);
1978 nptbins,ptmin,ptmax, 500,0,100);
1983 fhBadClusterMaxCellDiff =
new TH2F (
"hBadClusterMaxCellDiff",
"energy vs difference of cluster energy - max cell energy / cluster energy for bad clusters",
1984 nptbins,ptmin,ptmax, 500,0,1.);
1989 fhBadClusterMaxCellECross =
new TH2F (
"hBadClusterMaxCellECross",
"1 - #it{E}_{+} around max energy cell / max energy cell vs cluster energy, bad clusters",
1990 nptbins,ptmin,ptmax, 400,-1,1.);
2019 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
2024 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
2029 nresetabins,resetamin,resetamax,nresphibins,resphimin,resphimax);
2034 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
2039 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
2044 nresetabins,resetamin,resetamax,nresphibins,resphimin,resphimax);
2050 nresetabins,resetamin,resetamax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2055 nresetabins,resetamin,resetamax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2060 nresetabins,resetamin,resetamax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2065 nresetabins,resetamin,resetamax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2081 fhECharged =
new TH1F (
"hECharged",
"#it{E} reconstructed clusters, matched with track", nptbins,ptmin,ptmax);
2085 fhPtCharged =
new TH1F (
"hPtCharged",
"#it{p}_{T} reconstructed clusters, matched with track", nptbins,ptmin,ptmax);
2086 fhPtCharged->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
2089 fhPhiCharged =
new TH1F (
"hPhiCharged",
"#varphi reconstructed clusters, matched with track",nphibins,phimin,phimax);
2093 fhEtaCharged =
new TH1F (
"hEtaCharged",
"#eta reconstructed clusters, matched with track",netabins,etamin,etamax);
2099 fhEtaPhiECharged =
new TH3F (
"hEtaPhiECharged",
"#eta vs #varphi, reconstructed clusters, matched with track",
2100 netabins,etamin,etamax,nphibins,phimin,phimax,nptbins,ptmin,ptmax);
2108 fhEtaPhiCharged =
new TH2F (
"hEtaPhiCharged",
"#eta vs #varphi for #it{E} > 0.5 GeV, reconstructed clusters, with matched track",
2109 netabins,etamin,etamax,nphibins,phimin,phimax);
2115 fh1EOverP =
new TH2F(
"h1EOverP",
"TRACK matches #it{E}/#it{p}",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
2117 fh1EOverP->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
2120 fh2dR =
new TH2F(
"h2dR",
"TRACK matches #Delta #it{R}",nptbins,ptmin,ptmax,ndRbins,dRmin,dRmax);
2121 fh2dR->SetYTitle(
"#Delta #it{R} (rad)");
2122 fh2dR->SetXTitle(
"#it{E} cluster (GeV)");
2123 outputContainer->Add(
fh2dR) ;
2125 fh2MatchdEdx =
new TH2F(
"h2MatchdEdx",
"#it{dE/dx} vs. #it{p} for all matches",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
2130 fh2EledEdx =
new TH2F(
"h2EledEdx",
"#it{dE/dx} vs. #it{p} for electrons",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
2135 fh1EOverPR02 =
new TH2F(
"h1EOverPR02",
"TRACK matches #it{E}/#it{p}, all",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
2140 fh1EleEOverP =
new TH2F(
"h1EleEOverP",
"Electron candidates #it{E}/#it{p} (60<#it{dE/dx}<100)",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
2149 (
"h1EOverP_PerModule",
"TRACK matches #it{E}/#it{p}, #it{E}_{cl}&#it{p}_{tr}>0.5 Gev/#it{c}",
2150 nPoverEbins,eOverPmin,eOverPmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2156 (
"h2dR_PerModule",
"TRACK matches #Delta #it{R}, #it{E}_{cl}&#it{p}_{tr}>0.5 Gev/#it{c}",
2157 ndRbins,dRmin,dRmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2158 fh2dRMod->SetXTitle(
"#Delta #it{R} (rad)");
2163 (
"h2MatchdEdx_PerModule",
"#it{dE/dx} vs. #it{p} for all matches, #it{E}_{cl}&#it{p}_{tr}>0.5 Gev/#it{c}",
2164 ndedxbins,dedxmin,dedxmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2170 (
"h2EledEdx_PerModule",
"#it{dE/dx} vs. #it{p} for electrons, #it{E}_{cl}&#it{p}_{tr}>0.5 Gev/#it{c}",
2171 ndedxbins,dedxmin,dedxmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2177 (
"h1EOverPR02_PerModule",
"TRACK matches #it{E}/#it{p}, all, #it{E}_{cl}&#it{p}_{tr}>0.5 Gev/#it{c}",
2178 nPoverEbins,eOverPmin,eOverPmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2184 (
"h1EleEOverP_PerModule",
"Electron candidates #it{E}/#it{p} (60<#it{dE/dx}<100), #it{E}_{cl}&#it{p}_{tr}>0.5 Gev/#it{c}",
2185 nPoverEbins,eOverPmin,eOverPmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2193 if ( fFirstModule < 12 )
2195 fhIM =
new TH2F (
"hIM",
"Cluster pairs (EMCAL or PHOS) Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1",
2196 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2197 fhIM->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2198 fhIM->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2199 outputContainer->Add(
fhIM);
2201 fhIMDiff =
new TH2F (
"hIMDiff",
"Cluster pairs (EMCAL or PHOS) Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1, different SM",
2202 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2203 fhIMDiff->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2204 fhIMDiff->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2207 fhIMSame =
new TH2F (
"hIMSame",
"Cluster pairs (EMCAL or PHOS) Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1, same SM",
2208 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2209 fhIMSame->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2210 fhIMSame->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2215 fhIMEMCALPHOS =
new TH2F (
"hIMEMCALPHOS",
"Cluster pairs in DCAL-PHOS Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1",
2216 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2217 fhIMEMCALPHOS->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2218 fhIMEMCALPHOS->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2221 fhIMEMCALPHOSSame =
new TH2F (
"hIMEMCALPHOSSame",
"Cluster pairs in DCAL-PHOS Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1, same #varphi sector",
2222 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2231 fhIMDCAL =
new TH2F (
"hIMDCAL",
"Cluster pairs in DCAL Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1",
2232 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2233 fhIMDCAL->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2234 fhIMDCAL->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2237 fhIMDCALDiff =
new TH2F (
"hIMDCALDiff",
"Cluster pairs in DCAL Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1, different SM",
2238 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2239 fhIMDCALDiff->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2240 fhIMDCALDiff->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2243 fhIMDCALSame =
new TH2F (
"hIMDCALSame",
"Cluster pairs in DCAL Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1, same SM",
2244 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2245 fhIMDCALSame->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2246 fhIMDCALSame->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2249 fhIMDCALPHOS =
new TH2F (
"hIMDCALPHOS",
"Cluster pairs in DCAL-PHOS Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1",
2250 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2251 fhIMDCALPHOS->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2252 fhIMDCALPHOS->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2255 fhIMDCALPHOSSame =
new TH2F (
"hIMDCALPHOSSame",
"Cluster pairs in DCAL-PHOS Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1, same #varphi sector",
2256 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2264 if ( fFirstModule < 12 )
2267 nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
2273 nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
2282 nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
2288 nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
2295 fhAsym =
new TH2F (
"hAssym",
"Cluster pairs Asymmetry vs reconstructed pair energy",nptbins,ptmin,ptmax,nasymbins,asymmin,asymmax);
2296 fhAsym->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2297 fhAsym->SetYTitle(
"#it{Asymmetry}");
2298 outputContainer->Add(
fhAsym);
2302 fhOpAngle =
new TH2F (
"hOpeningAngle",
"Cluster pairs opening angle vs reconstructed pair #it{p}_{T}, ncell > 1",
2303 nptbins,ptmin,ptmax, 180,0,TMath::Pi());
2304 fhOpAngle->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2305 fhOpAngle->SetYTitle(
"Opening angle (degrees)");
2309 fhIMvsOpAngle =
new TH2F (
"hIMvsOpAngle",
"Cluster pairs Invariant mass vs reconstructed pair opening angle, ncell > 1",
2312 fhIMvsOpAngle->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2319 fhXYZ =
new TH3F (
"hXYZ",
"Cluster: #it{x} vs #it{y} vs #it{z}",xbins,xmin,xmax,ybins,ymin,ymax,zbins,zmin,zmax);
2320 fhXYZ->SetXTitle(
"#it{x} (cm)");
2321 fhXYZ->SetYTitle(
"#it{y} (cm)");
2322 fhXYZ->SetZTitle(
"#it{z} (cm) ");
2323 outputContainer->Add(
fhXYZ);
2325 fhXE =
new TH2F (
"hXE",
"Cluster X position vs cluster energy",xbins,xmin,xmax,nptbins,ptmin,ptmax);
2326 fhXE->SetXTitle(
"#it{x} (cm)");
2327 fhXE->SetYTitle(
"#it{E} (GeV)");
2328 outputContainer->Add(
fhXE);
2330 fhYE =
new TH2F (
"hYE",
"Cluster Y position vs cluster energy",ybins,ymin,ymax,nptbins,ptmin,ptmax);
2331 fhYE->SetXTitle(
"#it{y} (cm)");
2332 fhYE->SetYTitle(
"#it{E} (GeV)");
2333 outputContainer->Add(
fhYE);
2335 fhZE =
new TH2F (
"hZE",
"Cluster Z position vs cluster energy",zbins,zmin,zmax,nptbins,ptmin,ptmax);
2336 fhZE->SetXTitle(
"#it{z} (cm)");
2337 fhZE->SetYTitle(
"#it{E} (GeV)");
2338 outputContainer->Add(
fhZE);
2340 fhRE =
new TH2F (
"hRE",
"Cluster R position vs cluster energy",rbins,rmin,rmax,nptbins,ptmin,ptmax);
2341 fhRE->SetXTitle(
"r = #sqrt{x^{2}+y^{2}} (cm)");
2342 fhRE->SetYTitle(
"#it{E} (GeV)");
2343 outputContainer->Add(
fhRE);
2345 fhXNCells =
new TH2F (
"hXNCells",
"Cluster X position vs N Cells per Cluster",xbins,xmin,xmax,nceclbins,nceclmin,nceclmax);
2347 fhXNCells->SetYTitle(
"N cells per cluster");
2350 fhYNCells =
new TH2F (
"hYNCells",
"Cluster Y position vs N Cells per Cluster",ybins,ymin,ymax,nceclbins,nceclmin,nceclmax);
2352 fhYNCells->SetYTitle(
"N cells per cluster");
2355 fhZNCells =
new TH2F (
"hZNCells",
"Cluster Z position vs N Cells per Cluster",zbins,zmin,zmax,nceclbins,nceclmin,nceclmax);
2357 fhZNCells->SetYTitle(
"N cells per cluster");
2360 fhRNCells =
new TH2F (
"hRNCells",
"Cluster R position vs N Cells per Cluster",rbins,rmin,rmax,nceclbins,nceclmin,nceclmax);
2361 fhRNCells->SetXTitle(
"r = #sqrt{x^{2}+y^{2}} (cm)");
2362 fhRNCells->SetYTitle(
"N cells per cluster");
2368 fhRCellE =
new TH2F (
"hRCellE",
"Cell R position vs cell energy",rbins,rmin,rmax,nptbins,ptmin,ptmax);
2369 fhRCellE->SetXTitle(
"r = #sqrt{x^{2}+y^{2}} (cm)");
2370 fhRCellE->SetYTitle(
"#it{E} (GeV)");
2373 fhXCellE =
new TH2F (
"hXCellE",
"Cell X position vs cell energy",xbins,xmin,xmax,nptbins,ptmin,ptmax);
2374 fhXCellE->SetXTitle(
"#it{x} (cm)");
2375 fhXCellE->SetYTitle(
"#it{E} (GeV)");
2378 fhYCellE =
new TH2F (
"hYCellE",
"Cell Y position vs cell energy",ybins,ymin,ymax,nptbins,ptmin,ptmax);
2379 fhYCellE->SetXTitle(
"#it{y} (cm)");
2380 fhYCellE->SetYTitle(
"#it{E} (GeV)");
2383 fhZCellE =
new TH2F (
"hZCellE",
"Cell Z position vs cell energy",zbins,zmin,zmax,nptbins,ptmin,ptmax);
2384 fhZCellE->SetXTitle(
"#it{z} (cm)");
2385 fhZCellE->SetYTitle(
"#it{E} (GeV)");
2388 fhXYZCell =
new TH3F (
"hXYZCell",
"Cell : #it{x} vs #it{y} vs #it{z}",xbins,xmin,xmax,ybins,ymin,ymax,zbins,zmin,zmax);
2394 Float_t dx = TMath::Abs(xmin)+TMath::Abs(xmax);
2395 Float_t dy = TMath::Abs(ymin)+TMath::Abs(ymax);
2396 Float_t dz = TMath::Abs(zmin)+TMath::Abs(zmax);
2397 Float_t dr = TMath::Abs(rmin)+TMath::Abs(rmax);
2399 fhDeltaCellClusterRNCells =
new TH2F (
"hDeltaCellClusterRNCells",
"Cluster-Cell R position vs N Cells per Cluster",rbins*2,-dr,dr,nceclbins,nceclmin,nceclmax);
2404 fhDeltaCellClusterXNCells =
new TH2F (
"hDeltaCellClusterXNCells",
"Cluster-Cell X position vs N Cells per Cluster",xbins*2,-dx,dx,nceclbins,nceclmin,nceclmax);
2409 fhDeltaCellClusterYNCells =
new TH2F (
"hDeltaCellClusterYNCells",
"Cluster-Cell Y position vs N Cells per Cluster",ybins*2,-dy,dy,nceclbins,nceclmin,nceclmax);
2414 fhDeltaCellClusterZNCells =
new TH2F (
"hDeltaCellClusterZNCells",
"Cluster-Cell Z position vs N Cells per Cluster",zbins*2,-dz,dz,nceclbins,nceclmin,nceclmax);
2419 fhDeltaCellClusterRE =
new TH2F (
"hDeltaCellClusterRE",
"Cluster-Cell R position vs cluster energy",rbins*2,-dr,dr,nptbins,ptmin,ptmax);
2420 fhDeltaCellClusterRE->SetXTitle(
"#it{r} = #sqrt{x^{2}+y^{2}}, #it{r}_{clus}-#it{r}_{cell} (cm)");
2424 fhDeltaCellClusterXE =
new TH2F (
"hDeltaCellClusterXE",
"Cluster-Cell X position vs cluster energy",xbins*2,-dx,dx,nptbins,ptmin,ptmax);
2429 fhDeltaCellClusterYE =
new TH2F (
"hDeltaCellClusterYE",
"Cluster-Cell Y position vs cluster energy",ybins*2,-dy,dy,nptbins,ptmin,ptmax);
2434 fhDeltaCellClusterZE =
new TH2F (
"hDeltaCellClusterZE",
"Cluster-Cell Z position vs cluster energy",zbins*2,-dz,dz,nptbins,ptmin,ptmax);
2442 netabins,etamin,etamax,nphibins,phimin,phimax,nptbins,ptmin,ptmax);
2450 fhEtaPhiCell =
new TH2F (
"hEtaPhiCell",
"Cell #eta vs cell #varphi vs cell energy",
2451 netabins,etamin,etamax,nphibins,phimin,phimax);
2478 fhEMod =
new TH2F (
"hE_Mod",
"Cluster reconstructed Energy in each present Module",nptbins,ptmin,ptmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2479 fhEMod->SetXTitle(
"#it{E} (GeV)");
2480 fhEMod->SetYTitle(
"Module");
2481 outputContainer->Add(
fhEMod);
2483 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);
2510 if(imod < fFirstModule || imod >
fLastModule)
continue;
2513 Form(
"# clusters in SM vs sum of clusters energy in Module %d",imod),
2514 nptbins,ptmin,ptmax*4, nclbins,nclmin,nclmax);
2520 Form(
"# cells per cluster vs cluster energy in Module %d",imod),
2521 nptbins,ptmin,ptmax, nceclbins,nceclmin,nceclmax);
2529 Form(
"# cells per cluster vs cluster energy in Module %d, no cut",imod),
2530 nptbins,ptmin,ptmax, nceclbins,nceclmin,nceclmax);
2539 Form(
"Cluster pairs Invariant mass vs reconstructed pair energy in Module %d, n cell > 1",imod),
2540 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2541 fhIMMod[imod]->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2542 fhIMMod[imod]->SetYTitle(
"#it{M}_{cluster pairs} (GeV/#it{c}^{2})");
2543 outputContainer->Add(
fhIMMod[imod]);
2552 fhNCells =
new TH1F (
"hNCells",
"# cells", ncebins,ncemin+0.5,ncemax);
2553 fhNCells->SetXTitle(
"#it{n}_{cells}");
2560 fhAmplitude =
new TH1F (
"hAmplitude",
"#it{E}_{cell}", nptbins,ptmin,ptmax/2);
2564 fhAmpMod =
new TH2F (
"hAmp_Mod",
"Cell energy in each present Module",nptbins,ptmin,ptmax/2,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2565 fhAmpMod->SetXTitle(
"#it{E} (GeV)");
2569 fhAmpWeirdMod =
new TH2F (
"hAmpWeird_Mod",
"Cell energy in each present Module, ridiculously large E",200,0,10000,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2576 fhTimeMod =
new TH2F (
"hTime_Mod",
"Cell time in each present Module",ntimebins,timemin,timemax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2586 Double_t binWidth=(ptfinemax-ptfinemin)/nfineptbins;
2589 xBinning.
AddStep(ptfinemax,binWidth);
2590 xBinning.
AddStep(ptfinemax*2,binWidth*4);
2591 xBinning.
AddStep(ptfinemax*4,binWidth*10);
2602 fhAmpId =
new TH2F (
"hAmpId",
"#it{E}_{cell}", xbinsArray.GetSize() - 1, xbinsArray.GetArray(), ybinsArray.GetSize() - 1, ybinsArray.GetArray());
2603 fhAmpId->SetXTitle(
"#it{E}_{cell} (GeV)");
2604 outputContainer->Add(
fhAmpId);
2613 fhTime =
new TH1F (
"hTime",
"#it{t}_{cell}",ntimebins,timemin,timemax);
2614 fhTime->SetXTitle(
"#it{t}_{cell} (ns)");
2615 outputContainer->Add(
fhTime);
2622 fhTimeAmp =
new TH2F (
"hTimeAmp",
"#it{t}_{cell} vs #it{E}_{cell}",nptbins,ptmin,ptmax/2,ntimebins,timemin,timemax);
2623 fhTimeAmp->SetYTitle(
"#it{t}_{cell} (ns)");
2624 fhTimeAmp->SetXTitle(
"#it{E}_{cell} (GeV)");
2627 fhTimeAmpLowGain =
new TH2F (
"hTimeAmpLG",
"Low gain: #it{t}_{cell} vs #it{E}_{cell}",nptbins,ptmin,ptmax/2,ntimebins,timemin,timemax);
2639 fhTimeId =
new TH2F (
"hTimeId",
"#it{t}_{cell} vs Absolute Id",
2641 fhTimeId->SetXTitle(
"#it{t}_{cell} (ns)");
2642 fhTimeId->SetYTitle(
"Cell Absolute Id");
2651 if(
GetCaloUtils()->IsL1PhaseInTimeRecalibrationOn()==1)
2661 for(
Int_t bc = 0; bc < 4; bc++)
2664 Form(
"#it{t}_{cell} vs super-module, for BC/4=%d",bc),
2665 ntimebins,timemin,timemax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2672 fhCellECross =
new TH2F (
"hCellECross",
"1 - Energy in cross around cell / cell energy",
2673 nptbins,ptmin,ptmax/2, 400,-1,1.);
2675 fhCellECross->SetYTitle(
"1- #it{E}_{cross}/#it{E}_{cell}");
2678 fhNCellsMod =
new TH2F (
"hNCells_Mod",
"# cells vs Module", ncebins,ncemin+0.5,ncemax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2688 fhGridCells =
new TH2F (
"hGridCells",Form(
"Entries in grid of cells"),
2689 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
2694 fhGridCellsE =
new TH2F (
"hGridCellsE",
"Accumulated energy in grid of cells",
2695 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
2701 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
2707 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
2715 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
2721 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
2733 if(imod < fFirstModule || imod >
fLastModule)
continue;
2736 Form(
"# cells in SM vs sum of cells energy in Module %d",imod),
2737 nptbins,ptmin,ptmax*4, ncebins,ncemin,ncemax);
2752 (imod == 10 || imod== 11 || imod == 18 || imod == 19)
2756 Form(
"#it{E}_{cell} vs #it{t}_{cell} in Module %d, RCU %d ",imod,ircu),
2757 nptbins,ptmin,ptmax/2,ntimebins,timemin,timemax);
2772 fhEMCALPHOSCorrNClusters =
new TH2F (
"hEMCALPHOSCorrNClusters",
"# clusters in EMCAL vs PHOS", nclbins,nclmin,nclmax,nclbins,nclmin,nclmax);
2777 fhEMCALPHOSCorrEClusters =
new TH2F (
"hEMCALPHOSCorrEClusters",
"summed energy of clusters in EMCAL vs PHOS", nptbins,ptmin,ptmax*2,nptbins,ptmin,ptmax*2);
2782 fhEMCALPHOSCorrNCells =
new TH2F (
"hEMCALPHOSCorrNCells",
"# Cells in EMCAL vs PHOS", ncebins,ncemin,ncemax, ncebins,ncemin,ncemax);
2787 fhEMCALPHOSCorrECells =
new TH2F (
"hEMCALPHOSCorrECells",
"summed energy of Cells in EMCAL vs PHOS", nptbins*2,ptmin,ptmax*4,nptbins*2,ptmin,ptmax*4);
2793 fhEMCALDCALCorrNClusters =
new TH2F (
"hEMCALDCALCorrNClusters",
"# clusters in EMCAL vs DCAL", nclbins,nclmin,nclmax,nclbins,nclmin,nclmax);
2798 fhEMCALDCALCorrEClusters =
new TH2F (
"hEMCALDCALCorrEClusters",
"summed energy of clusters in EMCAL vs DCAL", nptbins,ptmin,ptmax*2,nptbins,ptmin,ptmax*2);
2803 fhEMCALDCALCorrNCells =
new TH2F (
"hEMCALDCALCorrNCells",
"# Cells in EMCAL vs DCAL", ncebins,ncemin,ncemax, ncebins,ncemin,ncemax);
2808 fhEMCALDCALCorrECells =
new TH2F (
"hEMCALDCALCorrECells",
"summed energy of Cells in EMCAL vs DCAL", nptbins*2,ptmin,ptmax*4,nptbins*2,ptmin,ptmax*4);
2815 fhDCALPHOSCorrNClusters =
new TH2F (
"hDCALPHOSCorrNClusters",
"# clusters in DCAL vs PHOS", nclbins,nclmin,nclmax,nclbins,nclmin,nclmax);
2820 fhDCALPHOSCorrEClusters =
new TH2F (
"hDCALPHOSCorrEClusters",
"summed energy of clusters in DCAL vs PHOS", nptbins,ptmin,ptmax*2,nptbins,ptmin,ptmax*2);
2825 fhDCALPHOSCorrNCells =
new TH2F (
"hDCALPHOSCorrNCells",
"# Cells in DCAL vs PHOS", ncebins,ncemin,ncemax, ncebins,ncemin,ncemax);
2830 fhDCALPHOSCorrECells =
new TH2F (
"hDCALPHOSCorrECells",
"summed energy of Cells in DCAL vs PHOS", nptbins*2,ptmin,ptmax*4,nptbins*2,ptmin,ptmax*4);
2900 fhCaloCenNClusters =
new TH2F (
"hCaloCenNClusters",
"# clusters in calorimeter vs centrality",100,0,100,nclbins,nclmin,nclmax);
2905 fhCaloCenEClusters =
new TH2F (
"hCaloCenEClusters",
"summed energy of clusters in calorimeter vs centrality",100,0,100,nptbins,ptmin,ptmax*2);
2910 fhCaloCenNCells =
new TH2F (
"hCaloCenNCells",
"# Cells in calorimeter vs centrality",100,0,100,ncebins,ncemin,ncemax);
2915 fhCaloCenECells =
new TH2F (
"hCaloCenECells",
"summed energy of Cells in calorimeter vs centrality",100,0,100,nptbins*2,ptmin,ptmax*4);
2916 fhCaloCenECells->SetYTitle(
"#Sigma #it{E} of Cells in calorimeter (GeV)");
2920 fhCaloEvPNClusters =
new TH2F (
"hCaloEvPNClusters",
"# clusters in calorimeter vs event plane angle",100,0,TMath::Pi(),nclbins,nclmin,nclmax);
2925 fhCaloEvPEClusters =
new TH2F (
"hCaloEvPEClusters",
"summed energy of clusters in calorimeter vs event plane angle",100,0,TMath::Pi(),nptbins,ptmin,ptmax*2);
2930 fhCaloEvPNCells =
new TH2F (
"hCaloEvPNCells",
"# Cells in calorimeter vs event plane angle",100,0,TMath::Pi(),ncebins,ncemin,ncemax);
2935 fhCaloEvPECells =
new TH2F (
"hCaloEvPECells",
"summed energy of Cells in calorimeter vs event plane angle",100,0,TMath::Pi(),nptbins*2,ptmin,ptmax*4);
2936 fhCaloEvPECells->SetYTitle(
"#Sigma #it{E} of Cells in calorimeter (GeV)");
2946 "Photon",
"Pi0",
"Eta",
2947 "Electron",
"PhotonConv",
2948 "NeutralHadron",
"ChargedHadron" };
2952 for(
Int_t iPart = 0; iPart < 4; iPart++)
2954 fhGenMCE [iPart] =
new TH1F(Form(
"hGenMCE_%s",particleName[iPart].
Data()) ,
2955 Form(
"#it{E} of generated %s",particleName[iPart].
Data()),
2956 nptbins,ptmin,ptmax);
2958 fhGenMCPt[iPart] =
new TH1F(Form(
"hGenMCPt_%s",particleName[iPart].
Data()) ,
2959 Form(
"#it{p}_{T} of generated %s",particleName[iPart].
Data()),
2960 nptbins,ptmin,ptmax);
2963 Form(
"Y vs #varphi of generated %s",particleName[iPart].
Data()),
2964 200,-1,1,360,0,TMath::TwoPi());
2966 fhGenMCE [iPart] ->SetXTitle(
"#it{E} (GeV)");
2967 fhGenMCPt[iPart] ->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
2971 outputContainer->Add(
fhGenMCE [iPart]);
2972 outputContainer->Add(
fhGenMCPt [iPart]);
2976 fhGenMCAccE [iPart] =
new TH1F(Form(
"hGenMCAccE_%s",particleName[iPart].
Data()) ,
2977 Form(
"#it{E} of generated %s",particleName[iPart].
Data()),
2978 nptbins,ptmin,ptmax);
2979 fhGenMCAccPt[iPart] =
new TH1F(Form(
"hGenMCAccPt_%s",particleName[iPart].
Data()) ,
2980 Form(
"#it{p}_{T} of generated %s",particleName[iPart].
Data()),
2981 nptbins,ptmin,ptmax);
2983 Form(
"Y vs #varphi of generated %s",particleName[iPart].
Data()),
2984 netabins,etamin,etamax,nphibins,phimin,phimax);
2987 fhGenMCAccPt[iPart] ->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
2999 for(
Int_t iPart = 0; iPart < 7; iPart++)
3001 for(
Int_t iCh = 0; iCh < 2; iCh++)
3004 Form(
"Reconstructed/Generated E, %s, Matched %d",particleName[iPart].
Data(),iCh),
3005 nptbins, ptmin, ptmax, 200,0,2);
3006 fhRecoMCRatioE[iPart][iCh]->SetYTitle(
"#it{E}_{reconstructed}/#it{E}_{generated}");
3007 fhRecoMCRatioE[iPart][iCh]->SetXTitle(
"#it{E}_{reconstructed} (GeV)");
3012 Form(
"Generated - Reconstructed E, %s, Matched %d",particleName[iPart].
Data(),iCh),
3013 nptbins, ptmin, ptmax, nptbins*2,-ptmax,ptmax);
3015 fhRecoMCDeltaE[iPart][iCh]->SetXTitle(
"#it{E}_{reconstructed} (GeV)");
3019 Form(
"Generated - Reconstructed #varphi, %s, Matched %d",particleName[iPart].
Data(),iCh),
3020 nptbins, ptmin, ptmax, nphibins*2,-phimax,phimax);
3026 Form(
"Generated - Reconstructed #eta, %s, Matched %d",particleName[iPart].
Data(),iCh),
3027 nptbins, ptmin, ptmax,netabins*2,-etamax,etamax);
3032 fhRecoMCE[iPart][iCh] =
new TH2F (Form(
"hRecoMCE_%s_Match%d",particleName[iPart].
Data(),iCh),
3033 Form(
"#it{E} distribution, reconstructed vs generated, %s, Matched %d",particleName[iPart].
Data(),iCh),
3034 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
3035 fhRecoMCE[iPart][iCh]->SetXTitle(
"#it{E}_{rec} (GeV)");
3036 fhRecoMCE[iPart][iCh]->SetYTitle(
"#it{E}_{gen} (GeV)");
3037 outputContainer->Add(
fhRecoMCE[iPart][iCh]);
3039 fhRecoMCPhi[iPart][iCh] =
new TH2F (Form(
"hRecoMCPhi_%s_Match%d",particleName[iPart].
Data(),iCh),
3040 Form(
"#varphi distribution, reconstructed vs generated, %s, Matched %d",particleName[iPart].
Data(),iCh),
3041 nphibins,phimin,phimax, nphibins,phimin,phimax);
3042 fhRecoMCPhi[iPart][iCh]->SetXTitle(
"#varphi_{reconstructed} (rad)");
3043 fhRecoMCPhi[iPart][iCh]->SetYTitle(
"#varphi_{generated} (rad)");
3046 fhRecoMCEta[iPart][iCh] =
new TH2F (Form(
"hRecoMCEta_%s_Match%d",particleName[iPart].
Data(),iCh),
3047 Form(
"#eta distribution, reconstructed vs generated, %s, Matched %d",particleName[iPart].
Data(),iCh),
3048 netabins,etamin,etamax,netabins,etamin,etamax);
3049 fhRecoMCEta[iPart][iCh]->SetXTitle(
"#eta_{reconstructed} ");
3050 fhRecoMCEta[iPart][iCh]->SetYTitle(
"#eta_{generated} ");
3057 fhEMVxyz =
new TH2F (
"hEMVxyz",
"Production vertex of reconstructed ElectroMagnetic particles",nvdistbins,vdistmin,vdistmax,nvdistbins,vdistmin,vdistmax);
3063 fhHaVxyz =
new TH2F (
"hHaVxyz",
"Production vertex of reconstructed hadrons",nvdistbins,vdistmin,vdistmax,nvdistbins,vdistmin,vdistmax);
3069 fhEMR =
new TH2F (
"hEMR",
"Distance to production vertex of reconstructed ElectroMagnetic particles vs E rec",nptbins,ptmin,ptmax,nvdistbins,vdistmin,vdistmax);
3070 fhEMR->SetXTitle(
"#it{E} (GeV)");
3071 fhEMR->SetYTitle(
"TMath::Sqrt(v_{x}^{2}+v_{y}^{2})");
3072 outputContainer->Add(
fhEMR);
3074 fhHaR =
new TH2F (
"hHaR",
"Distance to production vertex of reconstructed Hadrons vs E rec",nptbins,ptmin,ptmax,nvdistbins,vdistmin,vdistmax);
3075 fhHaR->SetXTitle(
"#it{E} (GeV)");
3076 fhHaR->SetYTitle(
"TMath::Sqrt(v_{x}^{2}+v_{y}^{2})");
3077 outputContainer->Add(
fhHaR);
3081 fhMCEle1EOverP =
new TH2F(
"hMCEle1EOverP",
"TRACK matches #it{E}/#it{p}, MC electrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3086 fhMCEle1dR =
new TH1F(
"hMCEle1dR",
"TRACK matches dR, MC electrons",ndRbins,dRmin,dRmax);
3087 fhMCEle1dR->SetXTitle(
"#Delta #it{R} (rad)");
3090 fhMCEle2MatchdEdx =
new TH2F(
"hMCEle2MatchdEdx",
"#it{dE/dx} vs. #it{p} for all matches, MC electrons",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
3095 fhMCChHad1EOverP =
new TH2F(
"hMCChHad1EOverP",
"TRACK matches #it{E}/#it{p}, MC charged hadrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3100 fhMCChHad1dR =
new TH1F(
"hMCChHad1dR",
"TRACK matches dR, MC charged hadrons",ndRbins,dRmin,dRmax);
3104 fhMCChHad2MatchdEdx =
new TH2F(
"hMCChHad2MatchdEdx",
"#it{dE/dx} vs. #it{p} for all matches, MC charged hadrons",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
3109 fhMCNeutral1EOverP =
new TH2F(
"hMCNeutral1EOverP",
"TRACK matches #it{E}/#it{p}, MC neutrals",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3114 fhMCNeutral1dR =
new TH1F(
"hMCNeutral1dR",
"TRACK matches dR, MC neutrals",ndRbins,dRmin,dRmax);
3118 fhMCNeutral2MatchdEdx =
new TH2F(
"hMCNeutral2MatchdEdx",
"#it{dE/dx} vs. #it{p} for all matches, MC neutrals",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
3123 fhMCEle1EOverPR02 =
new TH2F(
"hMCEle1EOverPR02",
"TRACK matches #it{E}/#it{p}, MC electrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3128 fhMCChHad1EOverPR02 =
new TH2F(
"hMCChHad1EOverPR02",
"TRACK matches #it{E}/#it{p}, MC charged hadrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3133 fhMCNeutral1EOverPR02 =
new TH2F(
"hMCNeutral1EOverPR02",
"TRACK matches #it{E}/#it{p}, MC neutrals",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3138 fhMCEle1EleEOverP =
new TH2F(
"hMCEle1EleEOverP",
"Electron candidates #it{E}/#it{p} (60<dEdx<100), MC electrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3143 fhMCChHad1EleEOverP =
new TH2F(
"hMCEle1EleEOverP",
"Electron candidates #it{E}/#it{p} (60<dEdx<100), MC charged hadrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3148 fhMCNeutral1EleEOverP =
new TH2F(
"hMCNeutral1EleEOverP",
"Electron candidates #it{E}/#it{p} (60<dEdx<100), MC neutrals",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3158 return outputContainer;
3169 AliVCaloCells * cells)
3171 AliDebug(1,
"Start");
3177 Int_t nModule2 = -1;
3178 Int_t nCaloClusters = caloClusters->GetEntriesFast();
3181 if(phi1 < 0) phi1 += TMath::TwoPi();
3183 Double_t tof1 = ((AliVCluster*) caloClusters->At(iclus))->GetTOF()*1.e9;
3186 for(
Int_t jclus = iclus + 1 ; jclus < nCaloClusters ; jclus++)
3188 AliVCluster* clus2 = (AliVCluster*) caloClusters->At(jclus);
3193 Double_t tof2 = clus2->GetTOF()*1.e9;
3201 if( !
IsGoodCluster(absIdMax, clus2->GetM02(), clus2->GetNCells(), cells)
3239 if(phi2 < 0) phi2 += TMath::TwoPi();
3241 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));
3243 Bool_t inPi0Window = kFALSE;
3244 if(mass < 0.18 && mass > 0.1) inPi0Window = kTRUE ;
3246 if ( nModule < 12 && nModule2 < 12 )
3253 if ( nModule == nModule2 )
3267 nModule > 11 && nModule2 > 11 &&
fNModules > 12 )
3274 if ( nModule == nModule2 )
3290 if(nModule == nModule2 && nModule >= 0 && nModule <
fNModules)
3304 AliDebug(1,
"Check DCal-PHOS pairs\n");
3309 if(phi1 >= 260*TMath::DegToRad() && phi1 < 280) sector1 = 0;
3310 if(phi1 >= 280*TMath::DegToRad() && phi1 < 300) sector1 = 1;
3311 if(phi1 >= 300*TMath::DegToRad() && phi1 < 320) sector1 = 2;
3321 if( !
IsGoodCluster(absIdMax, clus2->GetM02(), clus2->GetNCells(), cells)
3339 if(phiPHOS < 0) phiPHOS += TMath::TwoPi();
3341 if(phiPHOS >= 260*TMath::DegToRad() && phiPHOS < 280) sector2 = 0;
3342 if(phiPHOS >= 280*TMath::DegToRad() && phiPHOS < 300) sector2 = 1;
3343 if(phiPHOS >= 300*TMath::DegToRad() && phiPHOS < 320) sector2 = 2;
3355 AliDebug(1,
"Check EMCAL(DCal)-EMCAL(PHOS) pairs\n");
3360 if(phi1 >= 80*TMath::DegToRad() && phi1 < 100) sector1 = 0;
3361 if(phi1 >= 100*TMath::DegToRad() && phi1 < 120) sector1 = 1;
3362 if(phi1 >= 120*TMath::DegToRad() && phi1 < 140) sector1 = 2;
3363 if(phi1 >= 140*TMath::DegToRad() && phi1 < 160) sector1 = 3;
3364 if(phi1 >= 160*TMath::DegToRad() && phi1 < 180) sector1 = 4;
3365 if(phi1 >= 180*TMath::DegToRad() && phi1 < 190) sector1 = 5;
3367 for(
Int_t jclus = 0 ; jclus < caloClusters->GetEntriesFast() ; jclus++)
3369 AliVCluster* clus2 = (AliVCluster*) caloClusters->At(jclus);
3374 Double_t tof2 = clus2->GetTOF()*1.e9;
3377 Double_t diffTof = TMath::Abs(tof1-tof2);
3381 if( !
IsGoodCluster(absIdMax, clus2->GetM02(), clus2->GetNCells(), cells)
3406 if(phiPHOS < 0) phiPHOS += TMath::TwoPi();
3408 if(phiPHOS >= 80*TMath::DegToRad() && phiPHOS < 100) sector2 = 0;
3409 if(phiPHOS >= 100*TMath::DegToRad() && phiPHOS < 120) sector2 = 1;
3410 if(phiPHOS >= 120*TMath::DegToRad() && phiPHOS < 140) sector2 = 2;
3411 if(phiPHOS >= 140*TMath::DegToRad() && phiPHOS < 160) sector2 = 3;
3412 if(phiPHOS >= 160*TMath::DegToRad() && phiPHOS < 180) sector2 = 4;
3413 if(phiPHOS >= 180*TMath::DegToRad() && phiPHOS < 190) sector2 = 5;
3489 Int_t nCellsPerCluster, AliVCaloCells* cells)
3499 if(!
GetCaloUtils()->GetEMCALRecoUtils()->IsRejectExoticCluster())
3512 Float_t ampMax = cells->GetCellAmplitude(absIdMax);
3515 if(ampMax < 0.01)
return kFALSE;
3519 if(1-
GetCaloUtils()->GetECross(absIdMax,cells,bc)/ampMax > 0.95)
3534 printf(
"**** Print %s %s ****\n", GetName(), GetTitle() ) ;
3556 AliDebug(1,
"Start");
3568 AliVCaloCells * cells = 0x0;
3582 AliFatal(Form(
"AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - Wrong calorimeter name <%s>, END",
GetCalorimeterString().
Data()));
3584 if( !caloClusters || !cells )
3586 AliFatal(Form(
"AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - No CaloClusters or CaloCells available"));
3590 if(caloClusters->GetEntriesFast() == 0)
return ;
3610 if ( !
GetMC() )
return;
3616 AliVParticle * primary= 0;
3619 for(
Int_t i=0 ; i < nprim; i++)
3621 if ( !
GetReader()->AcceptParticleMCLabel( i ) ) continue ;
3626 primary =
GetMC()->GetTrack(i) ;
3629 AliWarning(
"Primaries pointer not available!!");
3633 pdg = primary->PdgCode();
3634 status = primary->MCStatusCode();
3640 if ( status > 11 )
continue;
3643 if ( primary->E() == TMath::Abs(primary->Pz()) ||
3644 (primary->E() - primary->Pz()) < 1e-3 ||
3645 (primary->E() + primary->Pz()) < 0 ) continue ;
3653 if(eMC < 0.2)
continue;
3660 if (TMath::Abs(etaMC) > 1)
continue;
3664 phiMC += TMath::TwoPi();
3668 else if (pdg==111) mcIndex =
kmcPi0;
3669 else if (pdg==221) mcIndex =
kmcEta;
3670 else if (TMath::Abs(pdg)==11) mcIndex =
kmcElectron;
3678 Bool_t inacceptance = kTRUE;
3681 inacceptance = kFALSE ;
3688 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
Bool_t IsExoticCell(Int_t absId, AliVCaloCells *cells, Int_t bc=-1)
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
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
Float_t GetCellWeight(Float_t eCell, Float_t eCluster) const
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
Int_t CheckOrigin(Int_t label, AliMCEvent *mcevent, TString selectHeaderName)
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.