14 #include <TRefArray.h>
17 #include <TGeoManager.h>
22 #include "AliAODEvent.h"
23 #include "AliESDEvent.h"
24 #include "AliEMCALGeometry.h"
25 #include "AliVCluster.h"
26 #include "AliVCaloCells.h"
27 #include "AliEMCALRecoUtils.h"
28 #include "AliOADBContainer.h"
39 fEMCALGeo(0x0), fLoadMatrices(0),
40 fEMCALGeoName(
"EMCAL_COMPLETE12SMV1_DCAL_8SM"),
42 fRecoUtils(new AliEMCALRecoUtils),
43 fOADBFilePath(
""), fCalibFilePath(
""),
44 fCorrectClusters(kFALSE), fRecalPosition(kTRUE),
45 fCaloClustersArr(0x0), fEMCALCells(0x0),
47 fOutputContainer(0x0),
48 fVertex(), fFilteredInput(kFALSE),
49 fImportGeometryFromFile(1), fImportGeometryFilePath(
""),
50 fEmin(0.5), fEmax(15.),
51 fEBkgmin(0.5), fEBkgmax(15.),
52 fL0min(0.01), fL0max(0.5),
53 fL0Bkgmin(1.0), fL0Bkgmax(3.0),
54 fOpAnglemin(0.), fOpAnglemax(3.0),
55 fDTimeCut(100.), fTimeMax(1000000), fTimeMin(-1000000),
56 fAsyCut(1.), fMinNCells(2), fGroupNCells(0),
57 fLogWeight(4.5), fSameSM(kFALSE),
58 fNMaskCellColumns(11), fMaskCellColumns(0x0),
59 fSelectOnlyCellSignalOutOfCollision(0),
60 fCellEnergyHiso(0), fClusterTopology(0),
61 fSelectOnlyPhotonsInDifferentSM(0),
63 fInvMassCutMin(110.), fInvMassCutMax(160.),
66 fMinBin(0.), fMaxBin(300.),
68 fMinEnergyBin(0.), fMaxEnergyBin(100.),
69 fNTimeBins(1000), fMinTimeBin(0.), fMaxTimeBin(1000.),
71 fMomentum1(), fMomentum2(), fMomentum12(),
73 fHmgg(0x0), fHmggDifferentSM(0x0),
74 fHmggMaskFrame(0x0), fHmggDifferentSMMaskFrame(0x0),
75 fHOpeningAngle(0x0), fHOpeningAngleDifferentSM(0x0),
76 fHAsymmetry(0x0), fHAsymmetryDifferentSM(0x0),
78 fhClusterTime(0x0), fhClusterPairDiffTime(0x0)
80 for(
Int_t iMod=0; iMod < AliEMCALGeoParams::fgkEMCALModules; iMod++)
82 for(
Int_t iX=0; iX<24; iX++)
84 for(
Int_t iZ=0; iZ<48; iZ++)
106 for(
Int_t iSMPair = 0; iSMPair < AliEMCALGeoParams::fgkEMCALModules/2; iSMPair++)
113 for(
Int_t iSMPair = 0; iSMPair < AliEMCALGeoParams::fgkEMCALModules-2; iSMPair++)
120 for(
Int_t iSM = 0; iSM < AliEMCALGeoParams::fgkEMCALModules; iSM++)
165 fEMCALGeo(0x0), fLoadMatrices(0),
166 fEMCALGeoName(
"EMCAL_COMPLETE12SMV1_DCAL_8SM"),
168 fRecoUtils(new AliEMCALRecoUtils),
169 fOADBFilePath(
""), fCalibFilePath(
""),
170 fCorrectClusters(kFALSE), fRecalPosition(kTRUE),
171 fCaloClustersArr(0x0), fEMCALCells(0x0),
173 fOutputContainer(0x0),
174 fVertex(), fFilteredInput(kFALSE),
175 fImportGeometryFromFile(1), fImportGeometryFilePath(
""),
176 fEmin(0.5), fEmax(15.),
177 fEBkgmin(0.5), fEBkgmax(15.),
178 fL0min(0.01), fL0max(0.5),
179 fL0Bkgmin(1.0), fL0Bkgmax(3.0),
180 fOpAnglemin(0.), fOpAnglemax(3.0),
181 fDTimeCut(100.), fTimeMax(1000000), fTimeMin(-1000000),
182 fAsyCut(1.), fMinNCells(2), fGroupNCells(0),
183 fLogWeight(4.5), fSameSM(kFALSE),
184 fNMaskCellColumns(11), fMaskCellColumns(0x0),
185 fSelectOnlyCellSignalOutOfCollision(0),
186 fCellEnergyHiso(0), fClusterTopology(0),
187 fSelectOnlyPhotonsInDifferentSM(0),
189 fInvMassCutMin(110.), fInvMassCutMax(160.),
192 fMinBin(0.), fMaxBin(300.),
194 fMinEnergyBin(0.), fMaxEnergyBin(100.),
195 fNTimeBins(1000), fMinTimeBin(0.), fMaxTimeBin(1000.),
197 fMomentum1(), fMomentum2(), fMomentum12(),
199 fHmgg(0x0), fHmggDifferentSM(0x0),
200 fHmggMaskFrame(0x0), fHmggDifferentSMMaskFrame(0x0),
201 fHOpeningAngle(0x0), fHOpeningAngleDifferentSM(0x0),
202 fHAsymmetry(0x0), fHAsymmetryDifferentSM(0x0),
204 fhClusterTime(0x0), fhClusterPairDiffTime(0x0)
206 for(
Int_t iMod=0; iMod < AliEMCALGeoParams::fgkEMCALModules; iMod++)
208 for(
Int_t iX=0; iX<24; iX++)
210 for(
Int_t iZ=0; iZ<48; iZ++)
212 fHmpi0[iMod][iZ][iX] = 0 ;
232 for(
Int_t iSMPair = 0; iSMPair < AliEMCALGeoParams::fgkEMCALModules/2; iSMPair++)
239 for(
Int_t iSMPair = 0; iSMPair < AliEMCALGeoParams::fgkEMCALModules-2; iSMPair++)
246 for(
Int_t iSM = 0; iSM < AliEMCALGeoParams::fgkEMCALModules; iSM++)
282 DefineOutput(1, TList::Class());
308 if(
fRecoUtils->GetParticleType()!=AliEMCALRecoUtils::kPhoton)
309 AliFatal(Form(
"Wrong particle type for cluster position recalculation! = %d\n",
fRecoUtils->GetParticleType()));
311 AliDebug(1,Form(
"It will use fLogWeight %.3f",
fLogWeight));
323 else if (e1i >
fEmax)
continue;
325 else if (c1->GetNCells() <
fMinNCells)
continue;
331 if(
fRecoUtils->ClusterContainsBadChannel(
fEMCALGeo, c1->GetCellsAbsId(), c1->GetNCells()))
continue;
335 AliInfo(Form(
"Std : i %d, E %f, dispersion %f, m02 %f, m20 %f\n",c1->GetID(),c1->E(),c1->GetDispersion(),c1->GetM02(),c1->GetM20()));
336 c1->GetPosition(pos);
337 AliInfo(Form(
"Std : i %d, x %f, y %f, z %f\n",c1->GetID(), pos[0], pos[1], pos[2]));
348 AliDebug(2,Form(
"Energy: after recalibration %f",c1->E()));
354 c1->SetE(
fRecoUtils->CorrectClusterEnergyLinearity(c1));
356 AliDebug(2,Form(
"after linearity correction %f",c1->E()));
361 AliDebug(2,Form(
"after smearing %f\n",c1->E()));
365 AliInfo(Form(
"Cor : i %d, E %f, dispersion %f, m02 %f, m20 %f\n",c1->GetID(),c1->E(),c1->GetDispersion(),c1->GetM02(),c1->GetM20()));
366 c1->GetPosition(pos);
367 AliInfo(Form(
"Cor : i %d, x %f, y %f, z %f\n",c1->GetID(), pos[0], pos[1], pos[2]));
390 Int_t bc = InputEvent()->GetBunchCrossNumber();
391 Int_t nSM = (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules();
393 Int_t nbClusterInTopoHisto[nSM];
395 for(
Int_t iSM = 0; iSM < nSM; iSM++)
397 nbClusterInTopoHisto[iSM] = 0;
405 if(
fRecoUtils->ClusterContainsBadChannel(
fEMCALGeo, c1->GetCellsAbsId(), c1->GetNCells()))
continue;
412 else if (e1i >
fEmax)
continue;
416 else if (c1->GetNCells() <
fMinNCells)
continue;
424 AliInfo(Form(
"IMA : i %d, E %f, dispersion %f, m02 %f, m20 %f",c1->GetID(),e1i,c1->GetDispersion(),c1->GetM02(),c1->GetM20()));
425 c1->GetPosition(pos);
426 AliInfo(Form(
"IMA : i %d, x %f, y %f, z %f",c1->GetID(), pos[0], pos[1], pos[2]));
451 AliEMCALGeometry* geom = AliEMCALGeometry::GetInstance();
453 for(
Int_t iCell = 0; iCell < c1->GetNCells(); iCell++)
455 Int_t iSupMod = -1, iIeta =-1, iIphi =-1, iTower =-1, ietaCell =-1, iphiCell =-1;
457 Int_t CellID = c1->GetCellsAbsId()[iCell];
458 geom->GetCellIndex(CellID,iSupMod,iTower,iIphi,iIeta);
459 geom->GetCellPhiEtaIndexInSModule(iSupMod,iTower,iIphi,iIeta,iphiCell,ietaCell);
463 Float_t AmpFraction = amp / e1i;
465 AliDebug(2,Form(
"Cell ID: %i, Cell row: %i, Cell col: %i, Cell amp: %f, Cell amp fraction: %f\n",CellID,iphiCell,ietaCell,amp,AmpFraction));
467 switch (iPosInNoisyQuartet) {
492 if(amp && AmpFraction)
494 nbClusterInTopoHisto[iSupMod1] = nbClusterInTopoHisto[iSupMod1] + 1;
508 else if (e2i >
fEmax)
continue;
512 else if (c2->GetNCells() <
fMinNCells)
continue;
537 if(TMath::Abs(time1-time2) >
fDTimeCut)
continue;
539 if(invmass < fMaxBin && invmass >
fMinBin )
554 if(iSupMod1==iSupMod2)
583 for(
Int_t i = 0; i < nSM/2; i++)
586 if((iSupMod1==j && iSupMod2==j+1) || (iSupMod1==j+1 && iSupMod2==j))
594 for(
Int_t i = 0; i < nSM-2; i++)
596 if((iSupMod1==i && iSupMod2==i+2) || (iSupMod1==i+2 && iSupMod2==i))
613 for(
Int_t i = 0; i < nSM/2; i++)
620 for(
Int_t i = 0; i < nSM-2; i++)
631 for(
Int_t icell = 0; icell < c1->GetNCells(); icell++)
633 Int_t absID = c1->GetCellAbsId(icell);
637 for(
Int_t icell = 0; icell < c2->GetNCells(); icell++)
639 Int_t absID = c2->GetCellAbsId(icell);
651 if(iSupMod1==iSupMod2)
662 if((iSupMod1==0 && iSupMod2==2) || (iSupMod1==2 && iSupMod2==0))
668 if((iSupMod1==1 && iSupMod2==3) || (iSupMod1==3 && iSupMod2==1))
674 if((iSupMod1==0 && iSupMod2==1) || (iSupMod1==1 && iSupMod2==0))
679 if((iSupMod1==2 && iSupMod2==3) || (iSupMod1==3 && iSupMod2==2))
690 if(
fSameSM && iSupMod1!=iSupMod2)
continue;
695 fHmpi0[iSupMod1][ieta1][iphi1]->Fill(invmass);
696 fHmpi0[iSupMod2][ieta2][iphi2]->Fill(invmass);
721 for (
Int_t j = -fGroupNCells; j < fGroupNCells+1; j++)
723 Int_t absId11 =
fEMCALGeo->GetAbsCellIdFromCellIndexes(iSupMod1, iphi1+j, ieta1+i);
724 Int_t absId22 =
fEMCALGeo->GetAbsCellIdFromCellIndexes(iSupMod2, iphi2+j, ieta2+i);
729 for(
Int_t icell = 0; icell < c1->GetNCells(); icell++)
731 if(c1->GetCellsAbsId()[icell] == absId11) ok1=kTRUE;
734 for(
Int_t icell = 0; icell < c2->GetNCells(); icell++)
736 if(c2->GetCellsAbsId()[icell] == absId22) ok2=kTRUE;
739 if(ok1 && (ieta1+i >= 0) && (iphi1+j >= 0) && (ieta1+i < 48) && (iphi1+j < 24))
741 fHmpi0[iSupMod1][ieta1+i][iphi1+j]->Fill(invmass);
745 if(ok2 && (ieta2+i >= 0) && (iphi2+j >= 0) && (ieta2+i < 48) && (iphi2+j < 24))
747 fHmpi0[iSupMod2][ieta2+i][iphi2+j]->Fill(invmass);
754 AliDebug(1,Form(
"Mass in (SM%d,%d,%d) and (SM%d,%d,%d): %.3f GeV E1_i=%f E1_ii=%f E2_i=%f E2_ii=%f\n",
755 iSupMod1,iphi1,ieta1,iSupMod2,iphi2,ieta2,
fMomentum12.M(),e1i,c1->E(),e2i,c2->E()));
760 for(
Int_t iSM = 0; iSM < nSM; iSM++)
762 AliDebug(2,Form(
"nbClusterInTopo = %i\n",nbClusterInTopoHisto[iSM]));
764 if(nbClusterInTopoHisto[iSM] == 0)
continue;
795 if ( !calibFactorsFile ) AliFatal(
"Cannot recover the calibration factors");
797 for(
Int_t ism = 0; ism <
fEMCALGeo->GetNumberOfSuperModules(); ism++)
799 TH2F * histo = (
TH2F*) calibFactorsFile->Get(Form(
"EMCALRecalFactors_SM%d",ism));
800 printf(
"In AliAnalysisTaskEMCALPi0CalibSelection::InitEnergyCalibrationFactors \n ---Recover calibration factor for : EMCALRecalFactors_SM%d %p\n",ism,histo);
803 fRecoUtils->SetEMCALChannelRecalibrationFactors(ism,histo);
805 AliWarning(Form(
"Null histogram with calibration factors for SM%d, 1 will be used for the full SM!",ism));
815 Int_t runnumber = InputEvent()->GetRunNumber() ;
838 AliInfo(
"Load user defined EMCAL geometry matrices");
840 AliOADBContainer emcGeoMat(
"AliEMCALgeo");
844 emcGeoMat.InitFromFile(Form(
"%s/EMCALlocal2master.root",
fOADBFilePath.Data()),
"AliEMCALgeo");
848 for(
Int_t mod = 0; mod < (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules(); mod++)
852 AliDebug(1,Form(
"EMCAL matrices SM %d, %p",mod,((TGeoHMatrix*) matEMCAL->At(mod))));
855 fMatrix[mod] = (TGeoHMatrix*) matEMCAL->At(mod) ;
867 AliWarning(Form(
"Set matrix for SM %d from gGeoManager",mod));
868 fEMCALGeo->SetMisalMatrix(
fEMCALGeo->GetMatrixForSuperModuleFromGeoManager(mod),mod) ;
872 AliError(Form(
"Alignment matrix for SM %d is not available",mod));
876 else if(!gGeoManager)
878 AliInfo(
"Get geo matrices from data");
880 if(!strcmp(InputEvent()->GetName(),
"AliAODEvent"))
882 AliWarning(
"Use ideal geometry, values geometry matrix not kept in AODs");
886 AliDebug(1,
"AliAnalysisTaskEMCALClusterize Load Misaligned matrices");
888 for(
Int_t mod=0; mod < (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules(); mod++)
890 if(InputEvent()->GetEMCALMatrix(mod))
893 InputEvent()->GetEMCALMatrix(mod)->Print();
895 fEMCALGeo->SetMisalMatrix(InputEvent()->GetEMCALMatrix(mod),mod) ;
903 for(
Int_t mod = 0; mod < (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules(); mod++)
905 AliWarning(Form(
"Set matrix for SM %d from gGeoManager",mod));
906 fEMCALGeo->SetMisalMatrix(
fEMCALGeo->GetMatrixForSuperModuleFromGeoManager(mod),mod) ;
918 if(!
fRecoUtils->IsRunDepRecalibrationOn())
return;
920 AliOADBContainer *contRFTD=
new AliOADBContainer(
"");
922 contRFTD->InitFromFile(Form(
"%s/EMCALTemperatureCorrCalib.root",
fOADBFilePath.Data()),
"AliEMCALRunDepTempCalibCorrections");
924 Int_t runnumber = InputEvent()->GetRunNumber() ;
926 TH1S *htd=(TH1S*)contRFTD->GetObject(runnumber);
931 AliWarning(Form(
"No TemperatureCorrCalib Objects for run: %d",runnumber));
936 Int_t maxEntry = contRFTD->GetNumberOfEntries();
938 while ( (ic < maxEntry) && (contRFTD->UpperLimit(ic) < runnumber) )
944 Int_t closest = lower;
945 if ( (ic<maxEntry) &&
946 (contRFTD->LowerLimit(ic)-runnumber) < (runnumber - contRFTD->UpperLimit(lower)) )
951 AliWarning(Form(
"TemperatureCorrCalib Objects found closest id %d from run: %d",
952 closest, contRFTD->LowerLimit(closest)));
954 htd = (TH1S*) contRFTD->GetObjectByIndex(closest);
960 AliInfo(
"Recalibrate (Temperature) EMCAL");
964 for (
Int_t ism = 0; ism < nSM; ++ism)
966 for (
Int_t icol = 0; icol < 48; ++icol)
968 for (
Int_t irow = 0; irow < 24; ++irow)
972 Int_t absID =
fEMCALGeo->GetAbsCellIdFromCellIndexes(ism, irow, icol);
974 AliDebug(3,Form(
" ism %d, icol %d, irow %d,absID %d - Calib factor %1.5f - ",ism, icol, irow, absID, factor));
976 factor *= htd->GetBinContent(absID) / 10000. ;
978 fRecoUtils->SetEMCALChannelRecalibrationFactor(ism,icol,irow,factor);
980 AliDebug(3,Form(
"T factor %1.5f - final factor %1.5f",
981 htd->GetBinContent(absID) / 10000.,
982 fRecoUtils->GetEMCALChannelRecalibrationFactor(ism,icol,irow)));
987 else AliInfo(
"Do NOT recalibrate EMCAL with T variations, no params TH1");
999 Int_t nSM = (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules();
1002 const Int_t buffersize = 255;
1003 char hname[buffersize], htitl[buffersize], htitlEnergy[buffersize];
1005 fhNEvents =
new TH1I(
"hNEvents",
"Number of analyzed events" , 1 , 0 , 1 ) ;
1009 fHmgg->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1010 fHmgg->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1028 fHAsymmetry =
new TH2F(
"hasym",
"2-cluster opening angle",100,0.,1.,100,0,10);
1030 fHAsymmetry->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1051 for(
Int_t iSM = 0; iSM < nSM; iSM++)
1053 snprintf(hname, buffersize,
"hmgg_SM%d",iSM);
1054 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d",iSM);
1056 fHmggSM[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1057 fHmggSM[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1060 snprintf(hname, buffersize,
"hmgg_SM%d_MaskFrame",iSM);
1061 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d",iSM);
1067 snprintf(hname, buffersize,
"hmgg_SM%d_Zone1",iSM);
1068 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 1",iSM);
1070 fHmggSM_Zone1[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1071 fHmggSM_Zone1[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1074 snprintf(hname, buffersize,
"hmgg_SM%d_Zone2",iSM);
1075 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 2",iSM);
1077 fHmggSM_Zone2[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1078 fHmggSM_Zone2[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1081 snprintf(hname, buffersize,
"hmgg_SM%d_Zone3",iSM);
1082 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 3",iSM);
1084 fHmggSM_Zone3[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1085 fHmggSM_Zone3[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1088 snprintf(hname, buffersize,
"hmgg_SM%d_Zone4",iSM);
1089 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 4",iSM);
1091 fHmggSM_Zone4[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1092 fHmggSM_Zone4[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1095 snprintf(hname, buffersize,
"hmgg_SM%d_Zone5",iSM);
1096 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 5",iSM);
1098 fHmggSM_Zone5[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1099 fHmggSM_Zone5[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1102 snprintf(hname, buffersize,
"hmgg_SM%d_Zone6",iSM);
1103 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 6",iSM);
1105 fHmggSM_Zone6[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1106 fHmggSM_Zone6[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1109 snprintf(hname, buffersize,
"hmgg_SM%d_Zone7",iSM);
1110 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 7",iSM);
1112 fHmggSM_Zone7[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1113 fHmggSM_Zone7[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1118 snprintf(hname,buffersize,
"hmgg_PairSameSectorSM%d",iSM);
1119 snprintf(htitl,buffersize,
"Two-gamma inv. mass for SM pair Sector: %d",iSM);
1125 snprintf(hname,buffersize,
"hmgg_PairSameSectorSM%d_MaskFrame",iSM);
1126 snprintf(htitl,buffersize,
"Two-gamma inv. mass for SM pair Sector: %d",iSM);
1133 Form(
"cluster pair time difference vs E, Sector %d",iSM),
1134 100,0,10, 200,-100,100);
1142 snprintf(hname,buffersize,
"hmgg_PairSameSideSM%d",iSM);
1143 snprintf(htitl,buffersize,
"Two-gamma inv. mass for SM pair Sector: %d",iSM);
1149 snprintf(hname,buffersize,
"hmgg_PairSameSideSM%d_MaskFrame",iSM);
1150 snprintf(htitl,buffersize,
"Two-gamma inv. mass for SM pair Sector: %d",iSM);
1157 Form(
"cluster pair time difference vs E, Side %d",iSM),
1158 100,0,10, 200,-100,100);
1164 snprintf(hname, buffersize,
"hopang_SM%d",iSM);
1165 snprintf(htitl, buffersize,
"Opening angle for super mod %d",iSM);
1171 snprintf(hname,buffersize,
"hopang_PairSM%d",iSM);
1172 snprintf(htitl,buffersize,
"Opening angle for SM pair: %d",iSM);
1178 snprintf(hname, buffersize,
"hasym_SM%d",iSM);
1179 snprintf(htitl, buffersize,
"Asymmetry for super mod %d",iSM);
1182 fHAsymmetrySM[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1185 snprintf(hname,buffersize,
"hasym_PairSM%d",iSM);
1186 snprintf(htitl,buffersize,
"Asymmetry for SM pair: %d",iSM);
1196 Form(
"Entries in grid of cells in Module %d",iSM),
1197 colmax+2,-1.5,colmax+0.5, rowmax+2,-1.5,rowmax+0.5);
1203 Form(
"Accumulated energy in grid of cells in Module %d",iSM),
1204 colmax+2,-1.5,colmax+0.5, rowmax+2,-1.5,rowmax+0.5);
1210 Form(
"Accumulated asymmetry in grid of cells in Module %d",iSM),
1211 colmax+2,-1.5,colmax+0.5, rowmax+2,-1.5,rowmax+0.5);
1217 colmax+2,-1.5,colmax+0.5, rowmax+2,-1.5,rowmax+0.5);
1222 fhClusterTimeSM[iSM] =
new TH2F(Form(
"hClusterTime_SM%d",iSM),
"cluster time vs E",100,0,10, 200,-1000,1000);
1228 Form(
"cluster pair time difference vs E, SM %d",iSM),
1229 100,0,10, 200,-100,100);
1239 Form(
"cluster topology for cluster in position 0 in noisy quartet, SM %d",iSM),
1240 21,-10.5,10.5, 21,-10.5,10.5);
1246 Form(
"cluster topology for cluster in position 1 in noisy quartet, SM %d",iSM),
1247 21,-10.5,10.5, 21,-10.5,10.5);
1253 Form(
"cluster topology for cluster in position 2 in noisy quartet, SM %d",iSM),
1254 21,-10.5,10.5, 21,-10.5,10.5);
1260 Form(
"cluster topology for cluster in position 3 in noisy quartet, SM %d",iSM),
1261 21,-10.5,10.5, 21,-10.5,10.5);
1267 Form(
"cluster topology for cluster in position 0 in noisy quartet, SM %d",iSM),
1268 21,-10.5,10.5, 21,-10.5,10.5);
1274 Form(
"cluster topology for cluster in position 1 in noisy quartet, SM %d",iSM),
1275 21,-10.5,10.5, 21,-10.5,10.5);
1281 Form(
"cluster topology for cluster in position 2 in noisy quartet, SM %d",iSM),
1282 21,-10.5,10.5, 21,-10.5,10.5);
1288 Form(
"cluster topology for cluster in position 3 in noisy quartet, SM %d",iSM),
1289 21,-10.5,10.5, 21,-10.5,10.5);
1296 Form(
"cluster topology for cluster in position 0 in noisy quartet, SM %d",iSM),
1297 21,-10.5,10.5, 21,-10.5,10.5);
1303 Form(
"cluster topology for cluster in position 1 in noisy quartet, SM %d",iSM),
1304 21,-10.5,10.5, 21,-10.5,10.5);
1310 Form(
"cluster topology for cluster in position 2 in noisy quartet, SM %d",iSM),
1311 21,-10.5,10.5, 21,-10.5,10.5);
1317 Form(
"cluster topology for cluster in position 3 in noisy quartet, SM %d",iSM),
1318 21,-10.5,10.5, 21,-10.5,10.5);
1325 Int_t nchannels = nSM*AliEMCALGeoParams::fgkEMCALRows*AliEMCALGeoParams::fgkEMCALCols;
1326 for(
Int_t ibc = 0; ibc < 4; ibc++)
1328 fHTpi0[ibc] =
new TH2F(Form(
"hTime_BC%d",ibc),Form(
"Time of cell clusters under pi0 peak, bunch crossing %d",ibc),
1331 fHTpi0[ibc]->SetYTitle(
"time (ns)");
1332 fHTpi0[ibc]->SetXTitle(
"abs. Id. ");
1335 fhClusterTime =
new TH2F(
"hClusterTime",
"cluster time vs E",100,0,10, 100,0,1000);
1345 for(
Int_t iMod=0; iMod < nSM; iMod++)
1347 for(
Int_t iRow=0; iRow < AliEMCALGeoParams::fgkEMCALRows; iRow++)
1349 for(
Int_t iCol=0; iCol < AliEMCALGeoParams::fgkEMCALCols; iCol++)
1351 snprintf(hname,buffersize,
"%d_%d_%d",iMod,iCol,iRow);
1352 snprintf(htitl,buffersize,
"Two-gamma inv. mass for super mod %d, cell(col,row)=(%d,%d)",iMod,iCol,iRow);
1354 fHmpi0[iMod][iCol][iRow]->SetXTitle(
"mass (MeV/c^{2})");
1359 snprintf(htitlEnergy,buffersize,
"Energy for super mod %d, cell(col,row)=(%d,%d)",iMod,iCol,iRow);
1361 fhEnergy[iMod][iCol][iRow]->SetXTitle(
"E (GeV)");
1424 if((irow >= 2 && irow <= 21) && ((icol >= 42 && icol <= 46) || (icol >= 13 && icol <= 37) || (icol >= 1 && icol <= 9)))
1426 if((irow >= 2 && irow <= 3) || (irow >= 20 && irow <= 21))
1435 if((irow >= 2 && irow <= 21) && ((icol >= 1 && icol <= 5) || (icol >= 10 && icol <= 34) || (icol >= 38 && icol <= 46)))
1437 if((irow >= 2 && irow <= 3) || (irow >= 20 && irow <= 21))
1469 if((irow >= 2 && irow <= 21) && ((icol >= 42 && icol <= 46) || (icol >= 13 && icol <= 37) || (icol >= 1 && icol <= 9)))
1471 if((irow >= 2 && irow <= 3) || (irow >= 20 && irow <= 21))
1484 if((irow >= 2 && irow <= 21) && ((icol >= 1 && icol <= 5) || (icol >= 10 && icol <= 34) || (icol >= 38 && icol <= 46)))
1486 if((irow >= 2 && irow <= 3) || (irow >= 20 && irow <= 21))
1522 if((irow >= 2 && irow <= 21) && ((icol >= 42 && icol <= 46) || (icol >= 13 && icol <= 37) || (icol >= 1 && icol <= 9)))
1524 if((icol >= 1 && icol <= 3) || (icol >= 44 && icol <= 46))
1533 if((irow >= 2 && irow <= 21) && ((icol >= 1 && icol <= 5) || (icol >= 10 && icol <= 34) || (icol >= 38 && icol <= 46)))
1535 if((icol >= 1 && icol <= 3) || (icol >= 44 && icol <= 46))
1567 if((irow >= 2 && irow <= 21) && ((icol >= 42 && icol <= 46) || (icol >= 13 && icol <= 37) || (icol >= 1 && icol <= 9)))
1569 if((icol >= 1 && icol <= 3) || (icol >= 44 && icol <= 46))
1582 if((irow >= 2 && irow <= 21) && ((icol >= 1 && icol <= 5) || (icol >= 10 && icol <= 34) || (icol >= 38 && icol <= 46)))
1584 if((icol >= 1 && icol <= 3) || (icol >= 44 && icol <= 46))
1623 if(((icol-col0)*(icol-col0)) / (a*a) + ((irow-row0)*(irow-row0) / (b*b)) > 1)
1659 if((((icol-col0)*(icol-col0)) / (aLarge*aLarge) + ((irow-row0)*(irow-row0) / (bLarge*bLarge)) < 1) && (((icol-col0)*(icol-col0)) / (aSmall*aSmall) + ((irow-row0)*(irow-row0) / (bSmall*bSmall)) > 1))
1693 if(((icol-col0)*(icol-col0)) / (a*a) + ((irow-row0)*(irow-row0) / (b*b)) < 1)
1721 if (esdevent) triggerClass = esdevent->GetFiredTriggerClasses();
1722 else if(aodevent) triggerClass = aodevent->GetFiredTriggerClasses();
1724 AliDebug(1,Form(
"Event %d, FiredClass %s",
1729 AliDebug(1,
"Reject event!");
1733 AliDebug(1,
"Accept event!");
1738 AliVEvent*
event = 0;
1740 else event = InputEvent();
1744 AliWarning(
"Input event not available!");
1748 AliDebug(1,Form(
"<<< %s: Event %d >>>",event->GetName(), (
Int_t)Entry()));
1752 event->GetPrimaryVertex()->GetXYZ(
fVertex) ;
1795 printf(
"Cluster cuts: %2.2f < E < %2.2f GeV; number of cells > %d; Assymetry < %1.2f, pair time diff < %2.2f, %2.2f < t < %2.2f ns\n",
1800 printf(
"Cluster maximal cell away from border at least %d cells\n",
fRecoUtils->GetNumberOfCellsFromEMCALBorder()) ;
1804 printf(
"Switchs:\n \t Remove Bad Channels? %d; Use filtered input? %d; Correct Clusters? %d, and their position? %d \n \t Mass per channel same SM clusters? %d\n",
1839 else AliWarning(
"Mask column not set, position larger than allocated set size first") ;
1886 AliDebug(1,
"Not implemented");
Float_t fTimeMin
Minimum cluster time (ns).
TH2F * fHmggSM_Zone4[AliEMCALGeoParams::fgkEMCALModules]
! Two-cluster invariant mass per SM in zone 4.
Float_t fDTimeCut
Maximum difference between time of cluster pairs (ns).
TList * fOutputContainer
! Histogram container.
Float_t fTimeMax
Maximum cluster time (ns).
TH2F * fHmggPairSameSectorSMMaskFrame[AliEMCALGeoParams::fgkEMCALModules/2]
! Two-cluster invariant mass per Pair, mask clusters facing frames.
TGeoHMatrix * fMatrix[AliEMCALGeoParams::fgkEMCALModules]
Bool_t IsInZone3(Int_t iSupMod, Int_t ieta, Int_t iphi)
TH2F * fhClusterPairDiffTimeSameSide[AliEMCALGeoParams::fgkEMCALModules-2]
! Diference in time of clusters same side.
TRefArray * fCaloClustersArr
! List of clusters.
Bool_t IsInZone6(Int_t iSupMod, Int_t ieta, Int_t iphi)
TH2F * fHmggSM_Zone3[AliEMCALGeoParams::fgkEMCALModules]
! Two-cluster invariant mass per SM in zone 3.
Int_t fNTimeBins
N time bins of invariant mass histograms.
TH2F * fhTowerDecayPhotonHit[AliEMCALGeoParams::fgkEMCALModules]
! Cells ordered in column/row for different module, number of times a decay photon hits...
Float_t fInvMassCutMax
Maximum mass cut for clusters to fill time or other histograms.
TH2F * fHAsymmetryPairSM[AliEMCALGeoParams::fgkEMCALModules]
! Two-cluster asymmetry vs pt per Pair,with mass close to pi0.
TH1F * fHmpi0[AliEMCALGeoParams::fgkEMCALModules][AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]
< Two-cluster invariant mass assigned to each cell.
Float_t fL0min
Minimum cluster L0.
Bool_t IsInZone4(Int_t iSupMod, Int_t ieta, Int_t iphi)
TString fImportGeometryFilePath
Path fo geometry.root file.
TH2F * fhTopoClusterAmpCase0[AliEMCALGeoParams::fgkEMCALModules]
! Cell amplitude map for type 0 cluster in noisy quartet
Bool_t fSameSM
Combine clusters in channels on same SM.
Bool_t fLoadMatrices
Matrices set from configuration, not get from geometry.root or from ESDs/AODs.
Float_t fEmax
Maximum cluster energy (GeV).
AliEMCALRecoUtils * fRecoUtils
Access to reconstruction utilities.
AliEMCALGeometry * fEMCALGeo
! EMCAL geometry pointer.
Float_t fMaxTimeBin
Maximum time bins of invariant mass histograms.
Bool_t fSelectOnlyPhotonsInDifferentSM
Select only pairs of photons that are not in the same SM.
Float_t fLogWeight
Logarithmic weight used in cluster recalibration.
Bool_t IsInZone7(Int_t iSupMod, Int_t ieta, Int_t iphi)
TH2F * fHAsymmetry
! Two-cluster asymmetry vs pt of pair, with mass close to pi0.
This task provides the input for the EMCal energy calibration with pi0 invariant mass analysis per ch...
Float_t fMinTimeBin
Minimum time bins of invariant mass histograms.
Int_t fNMaskCellColumns
Number of masked columns.
Bool_t IsInZone5(Int_t iSupMod, Int_t ieta, Int_t iphi)
Int_t FindPositionInNoisyQuartet(Int_t irow, Int_t icol, Int_t iSM)
Int_t fMinNCells
Minimum ncells in cluster.
TH2F * fHOpeningAngleDifferentSM
! Two-cluster opening angle vs pt of pair, each cluster in different SM, with mass close to pi0...
TH2F * fhClusterPairDiffTimeSameSM[AliEMCALGeoParams::fgkEMCALModules]
! Diference in time of clusters same SM.
TH2F * fHOpeningAngle
! Two-cluster opening angle vs pt of pair, with mass close to pi0.
TH2F * fhClusterTimeSM[AliEMCALGeoParams::fgkEMCALModules]
! Timing of clusters vs energy per SM.
TH2F * fHmggSM_Zone5[AliEMCALGeoParams::fgkEMCALModules]
! Two-cluster invariant mass per SM in zone 5.
TH2F * fHOpeningAngleSM[AliEMCALGeoParams::fgkEMCALModules]
! Two-cluster opening angle vs pt per SM,with mass close to pi0.
TLorentzVector fMomentum2
Cluster kinematics, temporal.
TH2F * fhTopoClusterAmpCase2[AliEMCALGeoParams::fgkEMCALModules]
! Cell amplitude map for type 2 cluster in noisy quartet
Float_t fInvMassCutMin
Minimum mass cut for clusters to fill time or other histograms.
TH2F * fhTopoClusterAmpCase3[AliEMCALGeoParams::fgkEMCALModules]
! Cell amplitude map for type 3 cluster in noisy quartet
Float_t fOpAnglemax
Maximum cluster opening angle for bkg shape study.
Float_t fMinEnergyBin
Minimum energy bins of cell energy histograms.
Bool_t IsInZone2(Int_t iSupMod, Int_t ieta, Int_t iphi)
void SetMaskCellColumn(Int_t ipos, Int_t icol)
Int_t fGroupNCells
Group n cells.
Int_t fNEnergybins
N energy bins of cell energy histograms.
TH2F * fHAsymmetrySM[AliEMCALGeoParams::fgkEMCALModules]
! Two-cluster asymmetry vs pt per SM,with mass close to pi0.
TString fCalibFilePath
Full path with file with energy calibration factors per channel from previous iteration.
TH2F * fHmggSM[AliEMCALGeoParams::fgkEMCALModules]
! Two-cluster invariant mass per SM.
virtual ~AliAnalysisTaskEMCALPi0CalibSelection()
Destructor.
TH2F * fhTowerDecayPhotonHitMaskFrame[AliEMCALGeoParams::fgkEMCALModules]
! Cells ordered in column/row for different module, number of times a decay photon hits...
TH2F * fhTopoClusterAmpCase1[AliEMCALGeoParams::fgkEMCALModules]
! Cell amplitude map for type 1 cluster in noisy quartet
TH2F * fhTopoClusterCase2[AliEMCALGeoParams::fgkEMCALModules]
! Cell amplitude map for type 2 cluster in noisy quartet
Bool_t fSelectOnlyCellSignalOutOfCollision
Select cells / clusters that are due to noise, i.e. signal in EMCal that happens not during collision...
TH2F * fHmggSM_Zone6[AliEMCALGeoParams::fgkEMCALModules]
! Two-cluster invariant mass per SM in zone 6.
TH2F * fHmgg
! Two-cluster invariant mass vs pt of pair.
TH2F * fHTpi0[4]
! Time of cell under pi0 mass, for 4 bunch crossings.
Float_t fEBkgmax
Maximum cluster energy (GeV) for bkg shape study (only for high M02 clusters).
AliAnalysisTaskEMCALPi0CalibSelection()
Default constructor. Arrays initialization is done here.
TH1F * fhEnergy[AliEMCALGeoParams::fgkEMCALModules][AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]
! Energy distribution for each cell.
Float_t fMinBin
Minimum mass bins of invariant mass histograms.
TH2F * fhTopoClusterAmpFractionCase2[AliEMCALGeoParams::fgkEMCALModules]
! Cell amplitude fraction map for type 2 cluster in noisy quartet
TH2F * fhTopoClusterCase0[AliEMCALGeoParams::fgkEMCALModules]
! Cell amplitude map for type 0 cluster in noisy quartet
Bool_t fRecalPosition
Switch on/off cluster position calculation, in case alignment matrices are not available.
TH2F * fhTopoClusterCase1[AliEMCALGeoParams::fgkEMCALModules]
! Cell amplitude map for type 1 cluster in noisy quartet
Float_t fMaxEnergyBin
Maximum energy bins of cell energy histograms.
TString fTriggerName
Trigger name must contain this name.
Bool_t fChangeBkgShape
Select clusters with nominal M02 cuts (fL0min,fL0max) plus high M02 clusters (fL0Bkgmin,fL0Bkgmax)
TH2F * fHmggDifferentSMMaskFrame
! Two-cluster invariant mass vs pt of pair, each cluster in different SM,mask clusters facing frames...
TH2F * fhTopoClusterAmpFractionCase3[AliEMCALGeoParams::fgkEMCALModules]
! Cell amplitude fraction map for type 3 cluster in noisy quartet
TH2F * fhClusterPairDiffTime
! Diference in time of clusters.
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)
void UserExec(Option_t *opt)
void InitEnergyCalibrationFactors()
Float_t fEmin
Minimum cluster energy (GeV).
Bool_t MaskFrameCluster(Int_t iSM, Int_t ieta) const
Int_t fNbins
N mass bins of invariant mass histograms.
TH2F * fHmggSM_Zone2[AliEMCALGeoParams::fgkEMCALModules]
! Two-cluster invariant mass per SM in zone 2.
TH2F * fhClusterTime
! Timing of clusters vs energy.
TLorentzVector fMomentum12
Cluster pair kinematics, temporal.
TH2F * fhTowerDecayPhotonAsymmetry[AliEMCALGeoParams::fgkEMCALModules]
! Cells ordered in column/row for different module, accumulated asymmetry in the tower by decay photo...
TH2F * fHmggPairSameSideSMMaskFrame[AliEMCALGeoParams::fgkEMCALModules-2]
! Two-cluster invariant mass per Pair, mask clusters facing frames.
void InitTemperatureCorrections()
Bool_t fCorrectClusters
Correct clusters energy, position etc.
void UserCreateOutputObjects()
Create output container, init geometry.
Float_t fL0max
Maximum cluster L0.
void SetNMaskCellColumns(Int_t n)
TH2F * fHmggSMMaskFrame[AliEMCALGeoParams::fgkEMCALModules]
! Two-cluster invariant mass per SM, mask clusters facing frames.
void Terminate(Option_t *opt)
Create cuts/param objects and publish to slot. Comment out for the moment.
TH2F * fhTowerDecayPhotonEnergy[AliEMCALGeoParams::fgkEMCALModules]
! Cells ordered in column/row for different module, accumulated energy in the tower by decay photons...
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
void PrintInfo()
Print settings.
Float_t fL0Bkgmax
Maximum cluster L0 for bkg shape study.
TH2F * fHmggPairSameSideSM[AliEMCALGeoParams::fgkEMCALModules-2]
! Two-cluster invariant mass per Pair.
TH2F * fhTopoClusterAmpFractionCase0[AliEMCALGeoParams::fgkEMCALModules]
! Cell amplitude fraction map for type 0 cluster in noisy quartet
Float_t fL0Bkgmin
Minimum cluster L0 for bkg shape study.
TH2F * fhTopoClusterCase3[AliEMCALGeoParams::fgkEMCALModules]
! Cell amplitude map for type 3 cluster in noisy quartet
Float_t fMaxBin
Maximum mass bins of invariant mass histograms.
TH2F * fHmggDifferentSM
! Two-cluster invariant mass vs pt of pair, each cluster in different SM.
TH2F * fhClusterPairDiffTimeSameSector[AliEMCALGeoParams::fgkEMCALModules/2]
! Diference in time of clusters same sector.
TH1I * fhNEvents
! Number of events counter histogram.
TLorentzVector fMomentum1
Cluster kinematics, temporal.
TH2F * fHmggMaskFrame
! Two-cluster invariant mass vs pt of pair, mask clusters facing frames.
Bool_t fImportGeometryFromFile
Import geometry settings in geometry.root file.
Bool_t IsInZone1(Int_t iSupMod, Int_t ieta, Int_t iphi)
Float_t fAsyCut
Asymmetry cut.
Double_t fVertex[3]
! Primary vertex.
TString fOADBFilePath
Default path $ALICE_PHYSICS/OADB/EMCAL, if needed change.
TH2F * fHOpeningAnglePairSM[AliEMCALGeoParams::fgkEMCALModules]
! Two-cluster opening angle vs pt per Pair,with mass close to pi0.
Float_t fOpAnglemin
Minimum cluster opening angle for bkg shape study.
AliVCaloCells * fEMCALCells
! List of cells.
Bool_t fFilteredInput
Read input produced with filter.
TString fEMCALGeoName
Name of geometry to use.
TH2F * fHAsymmetryDifferentSM
! Two-cluster asymmetry vs pt of pair, each cluster in different SM, with mass close to pi0...
void InitGeometryMatrices()
TH2F * fHmggSM_Zone1[AliEMCALGeoParams::fgkEMCALModules]
! Two-cluster invariant mass per SM in zone 1.
Bool_t fClusterTopology
Draw cluster topology histo.
TH2F * fhTopoClusterAmpFractionCase1[AliEMCALGeoParams::fgkEMCALModules]
! Cell amplitude fraction map for type 1 cluster in noisy quartet
TH2F * fHmggSM_Zone7[AliEMCALGeoParams::fgkEMCALModules]
! Two-cluster invariant mass per SM in zone 7.
TH2F * fHmggPairSameSectorSM[AliEMCALGeoParams::fgkEMCALModules/2]
! Two-cluster invariant mass per Pair.
Bool_t fCellEnergyHiso
Draw cell ernergy histo.