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,status))
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)
1057 clus->GetClusterMCEdepFraction(),
1069 && nCaloClusters > 1
1070 && nCaloCellsPerCluster > 1
1071 &&
GetCaloUtils()->GetNumberOfLocalMaxima(clus,cells) == 1
1087 if ( imod < fFirstModule || imod >
fLastModule ) continue ;
1089 AliDebug(1,Form(
"Module %d calo %s clusters %d, sum E %f", imod,
GetCalorimeterString().
Data(), nClustersInModule[imod], energyInModule[imod]));
1097 delete [] nClustersInModule;
1098 delete [] energyInModule;
1112 const Int_t * labels,
1116 if(!labels || nLabels<=0)
1118 AliWarning(Form(
"Strange, labels array %p, n labels %d", labels,nLabels));
1122 AliDebug(1,Form(
"Primaries: nlabels %d",nLabels));
1125 Int_t label = labels[0];
1129 AliDebug(1,Form(
" *** bad label ***: label %d", label));
1133 if( label >=
GetMC()->GetNumberOfTracks())
1135 AliDebug(1,Form(
"*** large label ***: label %d, n tracks %d", label,
GetMC()->GetNumberOfTracks()));
1142 if(phi < 0) phi +=TMath::TwoPi();
1144 AliVParticle * primary = 0x0;
1154 GetReader()->GetNameOfMCEventHederGeneratorToAccept(),e);
1158 primary =
GetMC()->GetTrack(label);
1160 pdg0 = TMath::Abs(primary->PdgCode());
1162 status = primary->MCStatusCode();
1163 vxMC = primary->Xv();
1164 vyMC = primary->Yv();
1165 iParent = primary->GetMother();
1167 AliDebug(1,
"Cluster most contributing mother:");
1168 AliDebug(1,Form(
"\t Mother label %d, pdg %d, %s, status %d, Primary? %d, Physical Primary? %d, parent %d",
1169 iMother, pdg0, primary->GetName(),status, primary->IsPrimary(), primary->IsPhysicalPrimary(), iParent));
1175 primary =
GetMC()->GetTrack(iParent);
1176 pdg = TMath::Abs(primary->PdgCode());
1178 AliDebug(2,
"Converted cluster!. Find before conversion:");
1180 while((pdg == 22 || pdg == 11) && status != 1)
1182 Int_t iMotherOrg = iMother;
1184 primary =
GetMC()->GetTrack(iMother);
1185 status = primary->MCStatusCode();
1186 pdg = TMath::Abs(primary->PdgCode());
1187 iParent = primary->GetMother();
1191 if(pdg==111 || pdg==221)
1193 primary =
GetMC()->GetTrack(iMotherOrg);
1203 AliDebug(2,Form(
"\t pdg %d, index %d, %s, status %d",pdg, iMother, primary->GetName(),status));
1206 AliDebug(1,
"Converted Cluster mother before conversion:");
1207 AliDebug(1,Form(
"\t Mother label %d, pdg %d, %s, status %d, Primary? %d, Physical Primary? %d, parent %d",
1208 iMother, pdg, primary->GetName(), status, primary->IsPrimary(), primary->IsPhysicalPrimary(), iParent));
1216 AliDebug(2,
"Overlapped Meson decay!, Find it:");
1218 while(pdg != 111 && pdg != 221)
1222 primary =
GetMC()->GetTrack(iMother);
1223 status = primary->MCStatusCode();
1224 pdg = TMath::Abs(primary->PdgCode());
1225 iParent = primary->GetMother();
1227 if( iParent < 0 )
break;
1229 AliDebug(2,Form(
"\t pdg %d, %s, index %d",pdg, primary->GetName(),iMother));
1233 AliWarning(
"Tagged as Overlapped photon but meson not found, why?");
1238 AliDebug(2,Form(
"Overlapped %s decay, label %d",primary->GetName(),iMother));
1243 phiMC = primary->Phi();
1244 etaMC = primary->Eta();
1245 pdg = TMath::Abs(primary->PdgCode());
1247 charge = primary->Charge();
1251 Float_t rVMC = TMath::Sqrt(vxMC*vxMC + vyMC*vyMC);
1252 if( ( pdg == 22 || TMath::Abs(pdg) == 11 ) && status != 1 )
1285 else if(charge == 0)
1300 if( mcIndex >= 0 && mcIndex < 7 && e > 0.5 && eMC > 0.5)
1311 if( primary )
return kTRUE ;
1327 if(phi < 0) phi +=TMath::TwoPi();
1345 Double_t dedx = track->GetTPCsignal();
1346 Int_t nITS = track->GetNcls(0);
1347 Int_t nTPC = track->GetNcls(1);
1348 Bool_t positive = kFALSE;
1349 if(track) positive = (track->Charge()>0);
1352 Float_t deta = clus->GetTrackDz();
1353 Float_t dphi = clus->GetTrackDx();
1354 Double_t dR = TMath::Sqrt(dphi*dphi + deta*deta);
1357 if( TMath::Abs(dphi) < 999 )
1394 if(dedx > 60 && dedx < 100)
1404 if(e > 0.5 && tmom > 0.5)
1410 if(dR < 0.02 && eOverP > 0.6 && eOverP < 1.2
1411 && clus->GetNCells() > 1 && nITS > 3 && nTPC > 20)
1419 Double_t charge = TDatabasePDG::Instance()->GetParticle(pdg)->Charge();
1421 if(TMath::Abs(pdg) == 11)
1445 else if(charge == 0)
1470 if(!caloClustersEMCAL || !caloClustersPHOS)
1472 AliDebug(1,Form(
"PHOS (%p) or EMCAL (%p) clusters array not available, do not correlate",caloClustersPHOS,caloClustersEMCAL));
1480 if(!cellsEMCAL || !cellsPHOS)
1482 AliDebug(1,Form(
"PHOS (%p) or EMCAL (%p) cells array ot available, do not correlate",cellsPHOS,cellsEMCAL));
1491 Float_t sumClusterEnergyEMCAL = 0;
1492 Float_t sumClusterEnergyDCAL = 0;
1493 Float_t sumClusterEnergyPHOS = 0;
1497 AliVCluster* cluster = 0;
1498 for(iclus = 0 ; iclus < caloClustersEMCAL->GetEntriesFast() ; iclus++)
1500 cluster = (AliVCluster*)caloClustersEMCAL->At(iclus);
1501 Float_t energy = cluster->E();
1503 if( energy < 0.5 )
continue;
1505 if(cluster->GetCellsAbsId()[0] < 12288)
1508 sumClusterEnergyEMCAL +=
energy;
1513 sumClusterEnergyDCAL +=
energy;
1517 for(iclus = 0 ; iclus < caloClustersPHOS ->GetEntriesFast(); iclus++)
1519 cluster = (AliVCluster*) caloClustersPHOS->At(iclus);
1521 energy = cluster->E();
1523 if( energy < 0.5 )
continue;
1526 sumClusterEnergyPHOS +=
energy;
1530 Int_t ncellsEMCAL = 0 ;
1531 Int_t ncellsDCAL = 0 ;
1532 Int_t ncellsPHOS = 0;
1534 Float_t sumCellEnergyEMCAL = 0;
1535 Float_t sumCellEnergyDCAL = 0;
1536 Float_t sumCellEnergyPHOS = 0;
1538 for(icell = 0 ; icell < cellsEMCAL->GetNumberOfCells() ; icell++)
1540 Float_t amp = cellsEMCAL->GetAmplitude(icell);
1541 Int_t cellId = cellsEMCAL->GetCellNumber(icell);
1548 sumCellEnergyEMCAL += amp;
1553 sumCellEnergyDCAL += amp;
1557 for(icell = 0 ; icell < cellsPHOS->GetNumberOfCells(); icell++)
1559 Float_t amp = cellsPHOS->GetAmplitude(icell);
1560 Int_t cellId = cellsPHOS->GetCellNumber(icell);
1562 if ( cellId < 0 ) continue ;
1567 sumCellEnergyPHOS += amp;
1593 Int_t ncl = nclPHOS;
1594 Float_t sumClusterEnergy = sumClusterEnergyPHOS;
1595 Int_t ncells = ncellsPHOS;
1596 Float_t sumCellEnergy = sumCellEnergyPHOS;
1600 ncl = nclEMCAL + nclDCAL;
1601 sumClusterEnergy = sumClusterEnergyEMCAL + sumClusterEnergyDCAL;
1602 ncells = ncellsEMCAL + ncellsDCAL;
1603 sumCellEnergy = sumCellEnergyEMCAL + sumCellEnergyDCAL;
1631 AliDebug(1,
"Correlate():");
1632 AliDebug(1,Form(
"\t EMCAL: N cells %d, N clusters %d, summed E cells %f, summed E clusters %f",
1633 ncellsEMCAL,nclEMCAL, sumCellEnergyEMCAL,sumClusterEnergyEMCAL));
1634 AliDebug(1,Form(
"\t DCAL : N cells %d, N clusters %d, summed E cells %f, summed E clusters %f",
1635 ncellsDCAL,nclDCAL, sumCellEnergyDCAL,sumClusterEnergyDCAL));
1636 AliDebug(1,Form(
"\t PHOS : N cells %d, N clusters %d, summed E cells %f, summed E clusters %f",
1637 ncellsPHOS,nclPHOS,sumCellEnergyPHOS,sumClusterEnergyPHOS));
1638 AliDebug(1,Form(
"\t V0 : Signal %d, Multiplicity %d, Track Multiplicity %d", v0S,v0M,trM));
1639 AliDebug(1,Form(
"\t centrality : %f, Event plane angle %f", cen,ep));
1648 const Int_t buffersize = 255;
1649 char onePar[buffersize] ;
1651 snprintf(onePar,buffersize,
"--- AliAnaCalorimeterQA ---:") ;
1678 return new TObjString(parList) ;
1688 outputContainer->SetName(
"QAHistos") ;
1740 Float_t rowcellmin = fNMaxRowsFullMin-1.5;
1751 fhE =
new TH1F (
"hE",
"#it{E} reconstructed clusters ", nptbins*5,ptmin,ptmax*5);
1752 fhE->SetXTitle(
"#it{E} (GeV)");
1753 outputContainer->Add(
fhE);
1755 fhPt =
new TH1F (
"hPt",
"#it{p}_{T} reconstructed clusters", nptbins,ptmin,ptmax);
1756 fhPt->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
1757 outputContainer->Add(
fhPt);
1759 fhNClusters =
new TH1F (
"hNClusters",
"# clusters", nclbins,nclmin,nclmax);
1763 fhNCellsPerCluster =
new TH2F (
"hNCellsPerCluster",
"# cells per cluster vs energy",nptbins,ptmin,ptmax, nceclbins,nceclmin,nceclmax);
1769 nceclbins*2,nceclmin,nceclmax*2,totalSM,fFirstModule-0.5,
fLastModule+0.5);
1776 fhPhi =
new TH1F (
"hPhi",
"#varphi reconstructed clusters ",nphibins,phimin,phimax);
1777 fhPhi->SetXTitle(
"#varphi (rad)");
1778 outputContainer->Add(
fhPhi);
1780 fhEta =
new TH1F (
"hEta",
"#eta reconstructed clusters ",netabins,etamin,etamax);
1781 fhEta->SetXTitle(
"#eta ");
1782 outputContainer->Add(
fhEta);
1789 (Form(
"hEBin%d_Cluster_EtaPhi",ie),
1790 Form(
"#eta vs #varphi, cluster, %2.2f<#it{p}_{T}<%2.2f GeV/#it{c}",
fEBinCuts[ie],
fEBinCuts[ie+1]),
1791 netabins,etamin,etamax,nphibins,phimin,phimax);
1797 (Form(
"hEBin%d_Cluster_ColRow",ie),
1798 Form(
"column vs row, cluster max E cell, %2.2f<#it{p}_{T}<%2.2f GeV/#it{c}",
fEBinCuts[ie],
fEBinCuts[ie+1]),
1799 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
1807 (Form(
"hEBin%d_Cell_ColRow",ie),
1808 Form(
"column vs row, cell, %2.2f<#it{p}_{T}<%2.2f GeV/#it{c}",
fEBinCuts[ie],
fEBinCuts[ie+1]),
1809 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
1820 fhEtaPhiE =
new TH3F (
"hEtaPhiE",
"#eta vs #varphi vs energy, reconstructed clusters",
1821 netabins,etamin,etamax,nphibins,phimin,phimax,nptbins,ptmin,ptmax);
1829 fhEtaPhi =
new TH2F (
"hEtaPhi",
"#eta vs #varphi for #it{E} > 0.5 GeV, reconstructed clusters",
1830 netabins,etamin,etamax,nphibins,phimin,phimax);
1832 fhEtaPhi->SetYTitle(
"#varphi (rad)");
1838 nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
1846 nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
1852 nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
1866 fhLambda0 =
new TH2F (
"hLambda0",
"shower shape, #lambda^{2}_{0} vs E",
1867 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1868 fhLambda0->SetXTitle(
"#it{E}_{cluster} (GeV)");
1869 fhLambda0->SetYTitle(
"#lambda^{2}_{0}");
1872 fhLambda1 =
new TH2F (
"hLambda1",
"shower shape, #lambda^{2}_{1} vs E",
1873 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1874 fhLambda1->SetXTitle(
"#it{E}_{cluster} (GeV)");
1875 fhLambda1->SetYTitle(
"#lambda^{2}_{1}");
1879 nptbins,ptmin,ptmax,10,0,10);
1880 fhNLocMax->SetXTitle(
"#it{E}_{cluster} (GeV)");
1885 nptbins,ptmin,ptmax,10,0,10);
1893 nptbins,ptmin,ptmax, 100,0,1.);
1899 nptbins,ptmin,ptmax, 500,0,100.);
1904 fhClusterMaxCellDiff =
new TH2F (
"hClusterMaxCellDiff",
"energy vs difference of cluster energy - max cell energy / cluster energy, good clusters",
1905 nptbins,ptmin,ptmax, 500,0,1.);
1910 fhClusterMaxCellECross =
new TH2F (
"hClusterMaxCellECross",
"1 - Energy in cross around max energy cell / max energy cell vs cluster energy, good clusters",
1911 nptbins,ptmin,ptmax, 400,-1,1.);
1920 nptbins,ptmin,ptmax, nceclbins,nceclmin,nceclmax);
1926 nceclbins,nceclmin,nceclmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
1931 fhBadClusterEnergy =
new TH1F (
"hBadClusterEnergy",
"Bad cluster energy", nptbins,ptmin,ptmax);
1936 netabins,etamin,etamax,nphibins,phimin,phimax);
1942 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1947 fhBadClusterLambda1 =
new TH2F (
"hBadClusterLambda1",
"Bad cluster,shower shape, #lambda^{2}_{1} vs E for bad cluster ",
1948 nptbins,ptmin,ptmax,ssbins,ssmin,ssmax);
1954 nptbins,ptmin,ptmax, ntimebins,timemin,timemax);
1961 fhBadClusterPairDiffTimeE =
new TH2F(
"hBadClusterPairDiffTimeE",
"cluster pair time difference (bad - good) vs E from bad cluster",nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
1969 fhClusterMaxCellDiffNoCut =
new TH2F (
"hClusterMaxCellDiffNoCut",
"energy vs difference of cluster energy - max cell energy / cluster energy",
1970 nptbins,ptmin,ptmax, 500,0,1.);
1976 nptbins,ptmin,ptmax, 100,0,1.);
1982 nptbins,ptmin,ptmax, 500,0,100);
1987 fhBadClusterMaxCellDiff =
new TH2F (
"hBadClusterMaxCellDiff",
"energy vs difference of cluster energy - max cell energy / cluster energy for bad clusters",
1988 nptbins,ptmin,ptmax, 500,0,1.);
1993 fhBadClusterMaxCellECross =
new TH2F (
"hBadClusterMaxCellECross",
"1 - #it{E}_{+} around max energy cell / max energy cell vs cluster energy, bad clusters",
1994 nptbins,ptmin,ptmax, 400,-1,1.);
2023 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
2028 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
2033 nresetabins,resetamin,resetamax,nresphibins,resphimin,resphimax);
2038 nptbins,ptmin,ptmax,nresetabins,resetamin,resetamax);
2043 nptbins,ptmin,ptmax,nresphibins,resphimin,resphimax);
2048 nresetabins,resetamin,resetamax,nresphibins,resphimin,resphimax);
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);
2069 nresetabins,resetamin,resetamax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2085 fhECharged =
new TH1F (
"hECharged",
"#it{E} reconstructed clusters, matched with track", nptbins,ptmin,ptmax);
2089 fhPtCharged =
new TH1F (
"hPtCharged",
"#it{p}_{T} reconstructed clusters, matched with track", nptbins,ptmin,ptmax);
2090 fhPtCharged->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
2093 fhPhiCharged =
new TH1F (
"hPhiCharged",
"#varphi reconstructed clusters, matched with track",nphibins,phimin,phimax);
2097 fhEtaCharged =
new TH1F (
"hEtaCharged",
"#eta reconstructed clusters, matched with track",netabins,etamin,etamax);
2103 fhEtaPhiECharged =
new TH3F (
"hEtaPhiECharged",
"#eta vs #varphi, reconstructed clusters, matched with track",
2104 netabins,etamin,etamax,nphibins,phimin,phimax,nptbins,ptmin,ptmax);
2112 fhEtaPhiCharged =
new TH2F (
"hEtaPhiCharged",
"#eta vs #varphi for #it{E} > 0.5 GeV, reconstructed clusters, with matched track",
2113 netabins,etamin,etamax,nphibins,phimin,phimax);
2119 fh1EOverP =
new TH2F(
"h1EOverP",
"TRACK matches #it{E}/#it{p}",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
2121 fh1EOverP->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
2124 fh2dR =
new TH2F(
"h2dR",
"TRACK matches #Delta #it{R}",nptbins,ptmin,ptmax,ndRbins,dRmin,dRmax);
2125 fh2dR->SetYTitle(
"#Delta #it{R} (rad)");
2126 fh2dR->SetXTitle(
"#it{E} cluster (GeV)");
2127 outputContainer->Add(
fh2dR) ;
2129 fh2MatchdEdx =
new TH2F(
"h2MatchdEdx",
"#it{dE/dx} vs. #it{p} for all matches",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
2134 fh2EledEdx =
new TH2F(
"h2EledEdx",
"#it{dE/dx} vs. #it{p} for electrons",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
2139 fh1EOverPR02 =
new TH2F(
"h1EOverPR02",
"TRACK matches #it{E}/#it{p}, all",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
2144 fh1EleEOverP =
new TH2F(
"h1EleEOverP",
"Electron candidates #it{E}/#it{p} (60<#it{dE/dx}<100)",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
2153 (
"h1EOverP_PerModule",
"TRACK matches #it{E}/#it{p}, #it{E}_{cl}&#it{p}_{tr}>0.5 Gev/#it{c}",
2154 nPoverEbins,eOverPmin,eOverPmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2160 (
"h2dR_PerModule",
"TRACK matches #Delta #it{R}, #it{E}_{cl}&#it{p}_{tr}>0.5 Gev/#it{c}",
2161 ndRbins,dRmin,dRmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2162 fh2dRMod->SetXTitle(
"#Delta #it{R} (rad)");
2167 (
"h2MatchdEdx_PerModule",
"#it{dE/dx} vs. #it{p} for all matches, #it{E}_{cl}&#it{p}_{tr}>0.5 Gev/#it{c}",
2168 ndedxbins,dedxmin,dedxmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2174 (
"h2EledEdx_PerModule",
"#it{dE/dx} vs. #it{p} for electrons, #it{E}_{cl}&#it{p}_{tr}>0.5 Gev/#it{c}",
2175 ndedxbins,dedxmin,dedxmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2181 (
"h1EOverPR02_PerModule",
"TRACK matches #it{E}/#it{p}, all, #it{E}_{cl}&#it{p}_{tr}>0.5 Gev/#it{c}",
2182 nPoverEbins,eOverPmin,eOverPmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2188 (
"h1EleEOverP_PerModule",
"Electron candidates #it{E}/#it{p} (60<#it{dE/dx}<100), #it{E}_{cl}&#it{p}_{tr}>0.5 Gev/#it{c}",
2189 nPoverEbins,eOverPmin,eOverPmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2197 if ( fFirstModule < 12 )
2199 fhIM =
new TH2F (
"hIM",
"Cluster pairs (EMCAL or PHOS) Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1",
2200 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2201 fhIM->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2202 fhIM->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2203 outputContainer->Add(
fhIM);
2205 fhIMDiff =
new TH2F (
"hIMDiff",
"Cluster pairs (EMCAL or PHOS) Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1, different SM",
2206 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2207 fhIMDiff->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2208 fhIMDiff->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2211 fhIMSame =
new TH2F (
"hIMSame",
"Cluster pairs (EMCAL or PHOS) Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1, same SM",
2212 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2213 fhIMSame->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2214 fhIMSame->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2219 fhIMEMCALPHOS =
new TH2F (
"hIMEMCALPHOS",
"Cluster pairs in DCAL-PHOS Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1",
2220 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2221 fhIMEMCALPHOS->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2222 fhIMEMCALPHOS->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2225 fhIMEMCALPHOSSame =
new TH2F (
"hIMEMCALPHOSSame",
"Cluster pairs in DCAL-PHOS Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1, same #varphi sector",
2226 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2235 fhIMDCAL =
new TH2F (
"hIMDCAL",
"Cluster pairs in DCAL Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1",
2236 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2237 fhIMDCAL->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2238 fhIMDCAL->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2241 fhIMDCALDiff =
new TH2F (
"hIMDCALDiff",
"Cluster pairs in DCAL Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1, different SM",
2242 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2243 fhIMDCALDiff->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2244 fhIMDCALDiff->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2247 fhIMDCALSame =
new TH2F (
"hIMDCALSame",
"Cluster pairs in DCAL Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1, same SM",
2248 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2249 fhIMDCALSame->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2250 fhIMDCALSame->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2253 fhIMDCALPHOS =
new TH2F (
"hIMDCALPHOS",
"Cluster pairs in DCAL-PHOS Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1",
2254 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2255 fhIMDCALPHOS->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2256 fhIMDCALPHOS->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2259 fhIMDCALPHOSSame =
new TH2F (
"hIMDCALPHOSSame",
"Cluster pairs in DCAL-PHOS Invariant mass vs reconstructed pair #it{p}_{T}, ncell > 1, same #varphi sector",
2260 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2268 if ( fFirstModule < 12 )
2271 nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
2277 nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
2286 nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
2292 nptbins,ptmin,ptmax, tdbins,tdmin,tdmax);
2299 fhAsym =
new TH2F (
"hAssym",
"Cluster pairs Asymmetry vs reconstructed pair energy",nptbins,ptmin,ptmax,nasymbins,asymmin,asymmax);
2300 fhAsym->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2301 fhAsym->SetYTitle(
"#it{Asymmetry}");
2302 outputContainer->Add(
fhAsym);
2306 fhOpAngle =
new TH2F (
"hOpeningAngle",
"Cluster pairs opening angle vs reconstructed pair #it{p}_{T}, ncell > 1",
2307 nptbins,ptmin,ptmax, 180,0,TMath::Pi());
2308 fhOpAngle->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2309 fhOpAngle->SetYTitle(
"Opening angle (degrees)");
2313 fhIMvsOpAngle =
new TH2F (
"hIMvsOpAngle",
"Cluster pairs Invariant mass vs reconstructed pair opening angle, ncell > 1",
2316 fhIMvsOpAngle->SetYTitle(
"M_{cluster pairs} (GeV/#it{c}^{2})");
2323 fhXYZ =
new TH3F (
"hXYZ",
"Cluster: #it{x} vs #it{y} vs #it{z}",xbins,xmin,xmax,ybins,ymin,ymax,zbins,zmin,zmax);
2324 fhXYZ->SetXTitle(
"#it{x} (cm)");
2325 fhXYZ->SetYTitle(
"#it{y} (cm)");
2326 fhXYZ->SetZTitle(
"#it{z} (cm) ");
2327 outputContainer->Add(
fhXYZ);
2329 fhXE =
new TH2F (
"hXE",
"Cluster X position vs cluster energy",xbins,xmin,xmax,nptbins,ptmin,ptmax);
2330 fhXE->SetXTitle(
"#it{x} (cm)");
2331 fhXE->SetYTitle(
"#it{E} (GeV)");
2332 outputContainer->Add(
fhXE);
2334 fhYE =
new TH2F (
"hYE",
"Cluster Y position vs cluster energy",ybins,ymin,ymax,nptbins,ptmin,ptmax);
2335 fhYE->SetXTitle(
"#it{y} (cm)");
2336 fhYE->SetYTitle(
"#it{E} (GeV)");
2337 outputContainer->Add(
fhYE);
2339 fhZE =
new TH2F (
"hZE",
"Cluster Z position vs cluster energy",zbins,zmin,zmax,nptbins,ptmin,ptmax);
2340 fhZE->SetXTitle(
"#it{z} (cm)");
2341 fhZE->SetYTitle(
"#it{E} (GeV)");
2342 outputContainer->Add(
fhZE);
2344 fhRE =
new TH2F (
"hRE",
"Cluster R position vs cluster energy",rbins,rmin,rmax,nptbins,ptmin,ptmax);
2345 fhRE->SetXTitle(
"r = #sqrt{x^{2}+y^{2}} (cm)");
2346 fhRE->SetYTitle(
"#it{E} (GeV)");
2347 outputContainer->Add(
fhRE);
2349 fhXNCells =
new TH2F (
"hXNCells",
"Cluster X position vs N Cells per Cluster",xbins,xmin,xmax,nceclbins,nceclmin,nceclmax);
2351 fhXNCells->SetYTitle(
"N cells per cluster");
2354 fhYNCells =
new TH2F (
"hYNCells",
"Cluster Y position vs N Cells per Cluster",ybins,ymin,ymax,nceclbins,nceclmin,nceclmax);
2356 fhYNCells->SetYTitle(
"N cells per cluster");
2359 fhZNCells =
new TH2F (
"hZNCells",
"Cluster Z position vs N Cells per Cluster",zbins,zmin,zmax,nceclbins,nceclmin,nceclmax);
2361 fhZNCells->SetYTitle(
"N cells per cluster");
2364 fhRNCells =
new TH2F (
"hRNCells",
"Cluster R position vs N Cells per Cluster",rbins,rmin,rmax,nceclbins,nceclmin,nceclmax);
2365 fhRNCells->SetXTitle(
"r = #sqrt{x^{2}+y^{2}} (cm)");
2366 fhRNCells->SetYTitle(
"N cells per cluster");
2372 fhRCellE =
new TH2F (
"hRCellE",
"Cell R position vs cell energy",rbins,rmin,rmax,nptbins,ptmin,ptmax);
2373 fhRCellE->SetXTitle(
"r = #sqrt{x^{2}+y^{2}} (cm)");
2374 fhRCellE->SetYTitle(
"#it{E} (GeV)");
2377 fhXCellE =
new TH2F (
"hXCellE",
"Cell X position vs cell energy",xbins,xmin,xmax,nptbins,ptmin,ptmax);
2378 fhXCellE->SetXTitle(
"#it{x} (cm)");
2379 fhXCellE->SetYTitle(
"#it{E} (GeV)");
2382 fhYCellE =
new TH2F (
"hYCellE",
"Cell Y position vs cell energy",ybins,ymin,ymax,nptbins,ptmin,ptmax);
2383 fhYCellE->SetXTitle(
"#it{y} (cm)");
2384 fhYCellE->SetYTitle(
"#it{E} (GeV)");
2387 fhZCellE =
new TH2F (
"hZCellE",
"Cell Z position vs cell energy",zbins,zmin,zmax,nptbins,ptmin,ptmax);
2388 fhZCellE->SetXTitle(
"#it{z} (cm)");
2389 fhZCellE->SetYTitle(
"#it{E} (GeV)");
2392 fhXYZCell =
new TH3F (
"hXYZCell",
"Cell : #it{x} vs #it{y} vs #it{z}",xbins,xmin,xmax,ybins,ymin,ymax,zbins,zmin,zmax);
2398 Float_t dx = TMath::Abs(xmin)+TMath::Abs(xmax);
2399 Float_t dy = TMath::Abs(ymin)+TMath::Abs(ymax);
2400 Float_t dz = TMath::Abs(zmin)+TMath::Abs(zmax);
2401 Float_t dr = TMath::Abs(rmin)+TMath::Abs(rmax);
2403 fhDeltaCellClusterRNCells =
new TH2F (
"hDeltaCellClusterRNCells",
"Cluster-Cell R position vs N Cells per Cluster",rbins*2,-dr,dr,nceclbins,nceclmin,nceclmax);
2408 fhDeltaCellClusterXNCells =
new TH2F (
"hDeltaCellClusterXNCells",
"Cluster-Cell X position vs N Cells per Cluster",xbins*2,-dx,dx,nceclbins,nceclmin,nceclmax);
2413 fhDeltaCellClusterYNCells =
new TH2F (
"hDeltaCellClusterYNCells",
"Cluster-Cell Y position vs N Cells per Cluster",ybins*2,-dy,dy,nceclbins,nceclmin,nceclmax);
2418 fhDeltaCellClusterZNCells =
new TH2F (
"hDeltaCellClusterZNCells",
"Cluster-Cell Z position vs N Cells per Cluster",zbins*2,-dz,dz,nceclbins,nceclmin,nceclmax);
2423 fhDeltaCellClusterRE =
new TH2F (
"hDeltaCellClusterRE",
"Cluster-Cell R position vs cluster energy",rbins*2,-dr,dr,nptbins,ptmin,ptmax);
2424 fhDeltaCellClusterRE->SetXTitle(
"#it{r} = #sqrt{x^{2}+y^{2}}, #it{r}_{clus}-#it{r}_{cell} (cm)");
2428 fhDeltaCellClusterXE =
new TH2F (
"hDeltaCellClusterXE",
"Cluster-Cell X position vs cluster energy",xbins*2,-dx,dx,nptbins,ptmin,ptmax);
2433 fhDeltaCellClusterYE =
new TH2F (
"hDeltaCellClusterYE",
"Cluster-Cell Y position vs cluster energy",ybins*2,-dy,dy,nptbins,ptmin,ptmax);
2438 fhDeltaCellClusterZE =
new TH2F (
"hDeltaCellClusterZE",
"Cluster-Cell Z position vs cluster energy",zbins*2,-dz,dz,nptbins,ptmin,ptmax);
2446 netabins,etamin,etamax,nphibins,phimin,phimax,nptbins,ptmin,ptmax);
2454 fhEtaPhiCell =
new TH2F (
"hEtaPhiCell",
"Cell #eta vs cell #varphi vs cell energy",
2455 netabins,etamin,etamax,nphibins,phimin,phimax);
2482 fhEMod =
new TH2F (
"hE_Mod",
"Cluster reconstructed Energy in each present Module",nptbins,ptmin,ptmax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2483 fhEMod->SetXTitle(
"#it{E} (GeV)");
2484 fhEMod->SetYTitle(
"Module");
2485 outputContainer->Add(
fhEMod);
2487 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);
2514 if(imod < fFirstModule || imod >
fLastModule)
continue;
2517 Form(
"# clusters in SM vs sum of clusters energy in Module %d",imod),
2518 nptbins,ptmin,ptmax*4, nclbins,nclmin,nclmax);
2524 Form(
"# cells per cluster vs cluster energy in Module %d",imod),
2525 nptbins,ptmin,ptmax, nceclbins,nceclmin,nceclmax);
2533 Form(
"# cells per cluster vs cluster energy in Module %d, no cut",imod),
2534 nptbins,ptmin,ptmax, nceclbins,nceclmin,nceclmax);
2543 Form(
"Cluster pairs Invariant mass vs reconstructed pair energy in Module %d, n cell > 1",imod),
2544 nptbins,ptmin,ptmax,nmassbins,massmin,massmax);
2545 fhIMMod[imod]->SetXTitle(
"#it{p}_{T, cluster pairs} (GeV) ");
2546 fhIMMod[imod]->SetYTitle(
"#it{M}_{cluster pairs} (GeV/#it{c}^{2})");
2547 outputContainer->Add(
fhIMMod[imod]);
2556 fhNCells =
new TH1F (
"hNCells",
"# cells", ncebins,ncemin+0.5,ncemax);
2557 fhNCells->SetXTitle(
"#it{n}_{cells}");
2564 fhAmplitude =
new TH1F (
"hAmplitude",
"#it{E}_{cell}", nptbins,ptmin,ptmax/2);
2568 fhAmpMod =
new TH2F (
"hAmp_Mod",
"Cell energy in each present Module",nptbins,ptmin,ptmax/2,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2569 fhAmpMod->SetXTitle(
"#it{E} (GeV)");
2573 fhAmpWeirdMod =
new TH2F (
"hAmpWeird_Mod",
"Cell energy in each present Module, ridiculously large E",200,0,10000,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2580 fhTimeMod =
new TH2F (
"hTime_Mod",
"Cell time in each present Module",ntimebins,timemin,timemax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2590 Double_t binWidth=(ptfinemax-ptfinemin)/nfineptbins;
2593 xBinning.
AddStep(ptfinemax,binWidth);
2594 xBinning.
AddStep(ptfinemax*2,binWidth*4);
2595 xBinning.
AddStep(ptfinemax*4,binWidth*10);
2606 fhAmpId =
new TH2F (
"hAmpId",
"#it{E}_{cell}", xbinsArray.GetSize() - 1, xbinsArray.GetArray(), ybinsArray.GetSize() - 1, ybinsArray.GetArray());
2607 fhAmpId->SetXTitle(
"#it{E}_{cell} (GeV)");
2608 outputContainer->Add(
fhAmpId);
2617 fhTime =
new TH1F (
"hTime",
"#it{t}_{cell}",ntimebins,timemin,timemax);
2618 fhTime->SetXTitle(
"#it{t}_{cell} (ns)");
2619 outputContainer->Add(
fhTime);
2626 fhTimeAmp =
new TH2F (
"hTimeAmp",
"#it{t}_{cell} vs #it{E}_{cell}",nptbins,ptmin,ptmax/2,ntimebins,timemin,timemax);
2627 fhTimeAmp->SetYTitle(
"#it{t}_{cell} (ns)");
2628 fhTimeAmp->SetXTitle(
"#it{E}_{cell} (GeV)");
2631 fhTimeAmpLowGain =
new TH2F (
"hTimeAmpLG",
"Low gain: #it{t}_{cell} vs #it{E}_{cell}",nptbins,ptmin,ptmax/2,ntimebins,timemin,timemax);
2643 fhTimeId =
new TH2F (
"hTimeId",
"#it{t}_{cell} vs Absolute Id",
2645 fhTimeId->SetXTitle(
"#it{t}_{cell} (ns)");
2646 fhTimeId->SetYTitle(
"Cell Absolute Id");
2655 if(
GetCaloUtils()->IsL1PhaseInTimeRecalibrationOn()==1)
2665 for(
Int_t bc = 0; bc < 4; bc++)
2668 Form(
"#it{t}_{cell} vs super-module, for BC/4=%d",bc),
2669 ntimebins,timemin,timemax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2676 fhCellECross =
new TH2F (
"hCellECross",
"1 - Energy in cross around cell / cell energy",
2677 nptbins,ptmin,ptmax/2, 400,-1,1.);
2679 fhCellECross->SetYTitle(
"1- #it{E}_{cross}/#it{E}_{cell}");
2682 fhNCellsMod =
new TH2F (
"hNCells_Mod",
"# cells vs Module", ncebins,ncemin+0.5,ncemax,totalSM,fFirstModule-0.5,
fLastModule+0.5);
2692 fhGridCells =
new TH2F (
"hGridCells",Form(
"Entries in grid of cells"),
2693 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
2698 fhGridCellsE =
new TH2F (
"hGridCellsE",
"Accumulated energy in grid of cells",
2699 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
2705 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
2711 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
2719 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
2725 ncolcell,colcellmin,colcellmax,nrowcell,rowcellmin,rowcellmax);
2737 if(imod < fFirstModule || imod >
fLastModule)
continue;
2740 Form(
"# cells in SM vs sum of cells energy in Module %d",imod),
2741 nptbins,ptmin,ptmax*4, ncebins,ncemin,ncemax);
2756 (imod == 10 || imod== 11 || imod == 18 || imod == 19)
2760 Form(
"#it{E}_{cell} vs #it{t}_{cell} in Module %d, RCU %d ",imod,ircu),
2761 nptbins,ptmin,ptmax/2,ntimebins,timemin,timemax);
2776 fhEMCALPHOSCorrNClusters =
new TH2F (
"hEMCALPHOSCorrNClusters",
"# clusters in EMCAL vs PHOS", nclbins,nclmin,nclmax,nclbins,nclmin,nclmax);
2781 fhEMCALPHOSCorrEClusters =
new TH2F (
"hEMCALPHOSCorrEClusters",
"summed energy of clusters in EMCAL vs PHOS", nptbins,ptmin,ptmax*2,nptbins,ptmin,ptmax*2);
2786 fhEMCALPHOSCorrNCells =
new TH2F (
"hEMCALPHOSCorrNCells",
"# Cells in EMCAL vs PHOS", ncebins,ncemin,ncemax, ncebins,ncemin,ncemax);
2791 fhEMCALPHOSCorrECells =
new TH2F (
"hEMCALPHOSCorrECells",
"summed energy of Cells in EMCAL vs PHOS", nptbins*2,ptmin,ptmax*4,nptbins*2,ptmin,ptmax*4);
2797 fhEMCALDCALCorrNClusters =
new TH2F (
"hEMCALDCALCorrNClusters",
"# clusters in EMCAL vs DCAL", nclbins,nclmin,nclmax,nclbins,nclmin,nclmax);
2802 fhEMCALDCALCorrEClusters =
new TH2F (
"hEMCALDCALCorrEClusters",
"summed energy of clusters in EMCAL vs DCAL", nptbins,ptmin,ptmax*2,nptbins,ptmin,ptmax*2);
2807 fhEMCALDCALCorrNCells =
new TH2F (
"hEMCALDCALCorrNCells",
"# Cells in EMCAL vs DCAL", ncebins,ncemin,ncemax, ncebins,ncemin,ncemax);
2812 fhEMCALDCALCorrECells =
new TH2F (
"hEMCALDCALCorrECells",
"summed energy of Cells in EMCAL vs DCAL", nptbins*2,ptmin,ptmax*4,nptbins*2,ptmin,ptmax*4);
2819 fhDCALPHOSCorrNClusters =
new TH2F (
"hDCALPHOSCorrNClusters",
"# clusters in DCAL vs PHOS", nclbins,nclmin,nclmax,nclbins,nclmin,nclmax);
2824 fhDCALPHOSCorrEClusters =
new TH2F (
"hDCALPHOSCorrEClusters",
"summed energy of clusters in DCAL vs PHOS", nptbins,ptmin,ptmax*2,nptbins,ptmin,ptmax*2);
2829 fhDCALPHOSCorrNCells =
new TH2F (
"hDCALPHOSCorrNCells",
"# Cells in DCAL vs PHOS", ncebins,ncemin,ncemax, ncebins,ncemin,ncemax);
2834 fhDCALPHOSCorrECells =
new TH2F (
"hDCALPHOSCorrECells",
"summed energy of Cells in DCAL vs PHOS", nptbins*2,ptmin,ptmax*4,nptbins*2,ptmin,ptmax*4);
2904 fhCaloCenNClusters =
new TH2F (
"hCaloCenNClusters",
"# clusters in calorimeter vs centrality",100,0,100,nclbins,nclmin,nclmax);
2909 fhCaloCenEClusters =
new TH2F (
"hCaloCenEClusters",
"summed energy of clusters in calorimeter vs centrality",100,0,100,nptbins,ptmin,ptmax*2);
2914 fhCaloCenNCells =
new TH2F (
"hCaloCenNCells",
"# Cells in calorimeter vs centrality",100,0,100,ncebins,ncemin,ncemax);
2919 fhCaloCenECells =
new TH2F (
"hCaloCenECells",
"summed energy of Cells in calorimeter vs centrality",100,0,100,nptbins*2,ptmin,ptmax*4);
2920 fhCaloCenECells->SetYTitle(
"#Sigma #it{E} of Cells in calorimeter (GeV)");
2924 fhCaloEvPNClusters =
new TH2F (
"hCaloEvPNClusters",
"# clusters in calorimeter vs event plane angle",100,0,TMath::Pi(),nclbins,nclmin,nclmax);
2929 fhCaloEvPEClusters =
new TH2F (
"hCaloEvPEClusters",
"summed energy of clusters in calorimeter vs event plane angle",100,0,TMath::Pi(),nptbins,ptmin,ptmax*2);
2934 fhCaloEvPNCells =
new TH2F (
"hCaloEvPNCells",
"# Cells in calorimeter vs event plane angle",100,0,TMath::Pi(),ncebins,ncemin,ncemax);
2939 fhCaloEvPECells =
new TH2F (
"hCaloEvPECells",
"summed energy of Cells in calorimeter vs event plane angle",100,0,TMath::Pi(),nptbins*2,ptmin,ptmax*4);
2940 fhCaloEvPECells->SetYTitle(
"#Sigma #it{E} of Cells in calorimeter (GeV)");
2950 "Photon",
"Pi0",
"Eta",
2951 "Electron",
"PhotonConv",
2952 "NeutralHadron",
"ChargedHadron" };
2956 for(
Int_t iPart = 0; iPart < 4; iPart++)
2958 fhGenMCE [iPart] =
new TH1F(Form(
"hGenMCE_%s",particleName[iPart].
Data()) ,
2959 Form(
"#it{E} of generated %s",particleName[iPart].
Data()),
2960 nptbins,ptmin,ptmax);
2962 fhGenMCPt[iPart] =
new TH1F(Form(
"hGenMCPt_%s",particleName[iPart].
Data()) ,
2963 Form(
"#it{p}_{T} of generated %s",particleName[iPart].
Data()),
2964 nptbins,ptmin,ptmax);
2967 Form(
"Y vs #varphi of generated %s",particleName[iPart].
Data()),
2968 200,-1,1,360,0,TMath::TwoPi());
2970 fhGenMCE [iPart] ->SetXTitle(
"#it{E} (GeV)");
2971 fhGenMCPt[iPart] ->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
2975 outputContainer->Add(
fhGenMCE [iPart]);
2976 outputContainer->Add(
fhGenMCPt [iPart]);
2980 fhGenMCAccE [iPart] =
new TH1F(Form(
"hGenMCAccE_%s",particleName[iPart].
Data()) ,
2981 Form(
"#it{E} of generated %s",particleName[iPart].
Data()),
2982 nptbins,ptmin,ptmax);
2983 fhGenMCAccPt[iPart] =
new TH1F(Form(
"hGenMCAccPt_%s",particleName[iPart].
Data()) ,
2984 Form(
"#it{p}_{T} of generated %s",particleName[iPart].
Data()),
2985 nptbins,ptmin,ptmax);
2987 Form(
"Y vs #varphi of generated %s",particleName[iPart].
Data()),
2988 netabins,etamin,etamax,nphibins,phimin,phimax);
2991 fhGenMCAccPt[iPart] ->SetXTitle(
"#it{p}_{T} (GeV/#it{c})");
3003 for(
Int_t iPart = 0; iPart < 7; iPart++)
3005 for(
Int_t iCh = 0; iCh < 2; iCh++)
3008 Form(
"Reconstructed/Generated E, %s, Matched %d",particleName[iPart].
Data(),iCh),
3009 nptbins, ptmin, ptmax, 200,0,2);
3010 fhRecoMCRatioE[iPart][iCh]->SetYTitle(
"#it{E}_{reconstructed}/#it{E}_{generated}");
3011 fhRecoMCRatioE[iPart][iCh]->SetXTitle(
"#it{E}_{reconstructed} (GeV)");
3016 Form(
"Generated - Reconstructed E, %s, Matched %d",particleName[iPart].
Data(),iCh),
3017 nptbins, ptmin, ptmax, nptbins*2,-ptmax,ptmax);
3019 fhRecoMCDeltaE[iPart][iCh]->SetXTitle(
"#it{E}_{reconstructed} (GeV)");
3023 Form(
"Generated - Reconstructed #varphi, %s, Matched %d",particleName[iPart].
Data(),iCh),
3024 nptbins, ptmin, ptmax, nphibins*2,-phimax,phimax);
3030 Form(
"Generated - Reconstructed #eta, %s, Matched %d",particleName[iPart].
Data(),iCh),
3031 nptbins, ptmin, ptmax,netabins*2,-etamax,etamax);
3036 fhRecoMCE[iPart][iCh] =
new TH2F (Form(
"hRecoMCE_%s_Match%d",particleName[iPart].
Data(),iCh),
3037 Form(
"#it{E} distribution, reconstructed vs generated, %s, Matched %d",particleName[iPart].
Data(),iCh),
3038 nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
3039 fhRecoMCE[iPart][iCh]->SetXTitle(
"#it{E}_{rec} (GeV)");
3040 fhRecoMCE[iPart][iCh]->SetYTitle(
"#it{E}_{gen} (GeV)");
3041 outputContainer->Add(
fhRecoMCE[iPart][iCh]);
3043 fhRecoMCPhi[iPart][iCh] =
new TH2F (Form(
"hRecoMCPhi_%s_Match%d",particleName[iPart].
Data(),iCh),
3044 Form(
"#varphi distribution, reconstructed vs generated, %s, Matched %d",particleName[iPart].
Data(),iCh),
3045 nphibins,phimin,phimax, nphibins,phimin,phimax);
3046 fhRecoMCPhi[iPart][iCh]->SetXTitle(
"#varphi_{reconstructed} (rad)");
3047 fhRecoMCPhi[iPart][iCh]->SetYTitle(
"#varphi_{generated} (rad)");
3050 fhRecoMCEta[iPart][iCh] =
new TH2F (Form(
"hRecoMCEta_%s_Match%d",particleName[iPart].
Data(),iCh),
3051 Form(
"#eta distribution, reconstructed vs generated, %s, Matched %d",particleName[iPart].
Data(),iCh),
3052 netabins,etamin,etamax,netabins,etamin,etamax);
3053 fhRecoMCEta[iPart][iCh]->SetXTitle(
"#eta_{reconstructed} ");
3054 fhRecoMCEta[iPart][iCh]->SetYTitle(
"#eta_{generated} ");
3061 fhEMVxyz =
new TH2F (
"hEMVxyz",
"Production vertex of reconstructed ElectroMagnetic particles",nvdistbins,vdistmin,vdistmax,nvdistbins,vdistmin,vdistmax);
3067 fhHaVxyz =
new TH2F (
"hHaVxyz",
"Production vertex of reconstructed hadrons",nvdistbins,vdistmin,vdistmax,nvdistbins,vdistmin,vdistmax);
3073 fhEMR =
new TH2F (
"hEMR",
"Distance to production vertex of reconstructed ElectroMagnetic particles vs E rec",nptbins,ptmin,ptmax,nvdistbins,vdistmin,vdistmax);
3074 fhEMR->SetXTitle(
"#it{E} (GeV)");
3075 fhEMR->SetYTitle(
"TMath::Sqrt(v_{x}^{2}+v_{y}^{2})");
3076 outputContainer->Add(
fhEMR);
3078 fhHaR =
new TH2F (
"hHaR",
"Distance to production vertex of reconstructed Hadrons vs E rec",nptbins,ptmin,ptmax,nvdistbins,vdistmin,vdistmax);
3079 fhHaR->SetXTitle(
"#it{E} (GeV)");
3080 fhHaR->SetYTitle(
"TMath::Sqrt(v_{x}^{2}+v_{y}^{2})");
3081 outputContainer->Add(
fhHaR);
3085 fhMCEle1EOverP =
new TH2F(
"hMCEle1EOverP",
"TRACK matches #it{E}/#it{p}, MC electrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3090 fhMCEle1dR =
new TH1F(
"hMCEle1dR",
"TRACK matches dR, MC electrons",ndRbins,dRmin,dRmax);
3091 fhMCEle1dR->SetXTitle(
"#Delta #it{R} (rad)");
3094 fhMCEle2MatchdEdx =
new TH2F(
"hMCEle2MatchdEdx",
"#it{dE/dx} vs. #it{p} for all matches, MC electrons",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
3099 fhMCChHad1EOverP =
new TH2F(
"hMCChHad1EOverP",
"TRACK matches #it{E}/#it{p}, MC charged hadrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3104 fhMCChHad1dR =
new TH1F(
"hMCChHad1dR",
"TRACK matches dR, MC charged hadrons",ndRbins,dRmin,dRmax);
3108 fhMCChHad2MatchdEdx =
new TH2F(
"hMCChHad2MatchdEdx",
"#it{dE/dx} vs. #it{p} for all matches, MC charged hadrons",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
3113 fhMCNeutral1EOverP =
new TH2F(
"hMCNeutral1EOverP",
"TRACK matches #it{E}/#it{p}, MC neutrals",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3118 fhMCNeutral1dR =
new TH1F(
"hMCNeutral1dR",
"TRACK matches dR, MC neutrals",ndRbins,dRmin,dRmax);
3122 fhMCNeutral2MatchdEdx =
new TH2F(
"hMCNeutral2MatchdEdx",
"#it{dE/dx} vs. #it{p} for all matches, MC neutrals",nptbins,ptmin,ptmax,ndedxbins,dedxmin,dedxmax);
3127 fhMCEle1EOverPR02 =
new TH2F(
"hMCEle1EOverPR02",
"TRACK matches #it{E}/#it{p}, MC electrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3132 fhMCChHad1EOverPR02 =
new TH2F(
"hMCChHad1EOverPR02",
"TRACK matches #it{E}/#it{p}, MC charged hadrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3137 fhMCNeutral1EOverPR02 =
new TH2F(
"hMCNeutral1EOverPR02",
"TRACK matches #it{E}/#it{p}, MC neutrals",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3142 fhMCEle1EleEOverP =
new TH2F(
"hMCEle1EleEOverP",
"Electron candidates #it{E}/#it{p} (60<dEdx<100), MC electrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3147 fhMCChHad1EleEOverP =
new TH2F(
"hMCEle1EleEOverP",
"Electron candidates #it{E}/#it{p} (60<dEdx<100), MC charged hadrons",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3152 fhMCNeutral1EleEOverP =
new TH2F(
"hMCNeutral1EleEOverP",
"Electron candidates #it{E}/#it{p} (60<dEdx<100), MC neutrals",nptbins,ptmin,ptmax, nPoverEbins,eOverPmin,eOverPmax);
3162 return outputContainer;
3173 AliVCaloCells * cells)
3175 AliDebug(1,
"Start");
3181 Int_t nModule2 = -1;
3182 Int_t nCaloClusters = caloClusters->GetEntriesFast();
3185 if(phi1 < 0) phi1 += TMath::TwoPi();
3187 Double_t tof1 = ((AliVCluster*) caloClusters->At(iclus))->GetTOF()*1.e9;
3190 for(
Int_t jclus = iclus + 1 ; jclus < nCaloClusters ; jclus++)
3192 AliVCluster* clus2 = (AliVCluster*) caloClusters->At(jclus);
3197 Double_t tof2 = clus2->GetTOF()*1.e9;
3205 if( !
IsGoodCluster(absIdMax, clus2->GetM02(), clus2->GetNCells(), cells)
3243 if(phi2 < 0) phi2 += TMath::TwoPi();
3245 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));
3247 Bool_t inPi0Window = kFALSE;
3248 if(mass < 0.18 && mass > 0.1) inPi0Window = kTRUE ;
3250 if ( nModule < 12 && nModule2 < 12 )
3257 if ( nModule == nModule2 )
3271 nModule > 11 && nModule2 > 11 &&
fNModules > 12 )
3278 if ( nModule == nModule2 )
3294 if(nModule == nModule2 && nModule >= 0 && nModule <
fNModules)
3308 AliDebug(1,
"Check DCal-PHOS pairs\n");
3313 if(phi1 >= 260*TMath::DegToRad() && phi1 < 280) sector1 = 0;
3314 if(phi1 >= 280*TMath::DegToRad() && phi1 < 300) sector1 = 1;
3315 if(phi1 >= 300*TMath::DegToRad() && phi1 < 320) sector1 = 2;
3325 if( !
IsGoodCluster(absIdMax, clus2->GetM02(), clus2->GetNCells(), cells)
3343 if(phiPHOS < 0) phiPHOS += TMath::TwoPi();
3345 if(phiPHOS >= 260*TMath::DegToRad() && phiPHOS < 280) sector2 = 0;
3346 if(phiPHOS >= 280*TMath::DegToRad() && phiPHOS < 300) sector2 = 1;
3347 if(phiPHOS >= 300*TMath::DegToRad() && phiPHOS < 320) sector2 = 2;
3359 AliDebug(1,
"Check EMCAL(DCal)-EMCAL(PHOS) pairs\n");
3364 if(phi1 >= 80*TMath::DegToRad() && phi1 < 100) sector1 = 0;
3365 if(phi1 >= 100*TMath::DegToRad() && phi1 < 120) sector1 = 1;
3366 if(phi1 >= 120*TMath::DegToRad() && phi1 < 140) sector1 = 2;
3367 if(phi1 >= 140*TMath::DegToRad() && phi1 < 160) sector1 = 3;
3368 if(phi1 >= 160*TMath::DegToRad() && phi1 < 180) sector1 = 4;
3369 if(phi1 >= 180*TMath::DegToRad() && phi1 < 190) sector1 = 5;
3371 for(
Int_t jclus = 0 ; jclus < caloClusters->GetEntriesFast() ; jclus++)
3373 AliVCluster* clus2 = (AliVCluster*) caloClusters->At(jclus);
3378 Double_t tof2 = clus2->GetTOF()*1.e9;
3381 Double_t diffTof = TMath::Abs(tof1-tof2);
3385 if( !
IsGoodCluster(absIdMax, clus2->GetM02(), clus2->GetNCells(), cells)
3410 if(phiPHOS < 0) phiPHOS += TMath::TwoPi();
3412 if(phiPHOS >= 80*TMath::DegToRad() && phiPHOS < 100) sector2 = 0;
3413 if(phiPHOS >= 100*TMath::DegToRad() && phiPHOS < 120) sector2 = 1;
3414 if(phiPHOS >= 120*TMath::DegToRad() && phiPHOS < 140) sector2 = 2;
3415 if(phiPHOS >= 140*TMath::DegToRad() && phiPHOS < 160) sector2 = 3;
3416 if(phiPHOS >= 160*TMath::DegToRad() && phiPHOS < 180) sector2 = 4;
3417 if(phiPHOS >= 180*TMath::DegToRad() && phiPHOS < 190) sector2 = 5;
3493 Int_t nCellsPerCluster, AliVCaloCells* cells)
3503 if(!
GetCaloUtils()->GetEMCALRecoUtils()->IsRejectExoticCluster())
3516 Float_t ampMax = cells->GetCellAmplitude(absIdMax);
3519 if(ampMax < 0.01)
return kFALSE;
3523 if(1-
GetCaloUtils()->GetECross(absIdMax,cells,bc)/ampMax > 0.95)
3538 printf(
"**** Print %s %s ****\n", GetName(), GetTitle() ) ;
3560 AliDebug(1,
"Start");
3572 AliVCaloCells * cells = 0x0;
3586 AliFatal(Form(
"AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - Wrong calorimeter name <%s>, END",
GetCalorimeterString().
Data()));
3588 if( !caloClusters || !cells )
3590 AliWarning(Form(
"AliAnaCalorimeterQA::MakeAnalysisFillHistograms() - No CaloClusters or CaloCells available"));
3594 if(caloClusters->GetEntriesFast() == 0)
return ;
3614 if ( !
GetMC() )
return;
3620 AliVParticle * primary= 0;
3623 for(
Int_t i=0 ; i < nprim; i++)
3625 if ( !
GetReader()->AcceptParticleMCLabel( i ) ) continue ;
3630 primary =
GetMC()->GetTrack(i) ;
3633 AliWarning(
"Primaries pointer not available!!");
3637 pdg = primary->PdgCode();
3638 status = primary->MCStatusCode();
3644 if ( status > 11 )
continue;
3647 if ( primary->E() == TMath::Abs(primary->Pz()) ||
3648 (primary->E() - primary->Pz()) < 1e-3 ||
3649 (primary->E() + primary->Pz()) < 0 ) continue ;
3657 if(eMC < 0.2)
continue;
3664 if (TMath::Abs(etaMC) > 1)
continue;
3668 phiMC += TMath::TwoPi();
3672 else if (pdg==111) mcIndex =
kmcPi0;
3673 else if (pdg==221) mcIndex =
kmcEta;
3674 else if (TMath::Abs(pdg)==11) mcIndex =
kmcElectron;
3682 Bool_t inacceptance = kTRUE;
3685 inacceptance = kFALSE ;
3692 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 GetHistoEOverPMin() const
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
Int_t CheckOrigin(Int_t label, AliMCEvent *mcevent, TString selectHeaderName, Float_t clusE)
TH2F * fhClusterPairDiffTimeE
! Pair of clusters time difference vs E
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
Bool_t ClusterMCHistograms(Bool_t matched, const Int_t *labels, const UShort_t *edepFrac, Int_t nLabels, Int_t &pdg)
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.
Float_t GetHistoEOverPMax() const
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
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
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)
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.
Int_t GetHistoEOverPBins() const
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.