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 fL0min(0.01), fL0max(0.5),
52 fL0Bkgmin(1.0), fL0Bkgmax(3.0),
53 fDTimeCut(100.), fTimeMax(1000000), fTimeMin(-1000000),
54 fAsyCut(1.), fMinNCells(2), fGroupNCells(0),
55 fLogWeight(4.5), fSameSM(kFALSE), fChangeBkgShape(kFALSE),
56 fNMaskCellColumns(11), fMaskCellColumns(0x0),
57 fInvMassCutMin(110.), fInvMassCutMax(160.),
60 fMinBin(0.), fMaxBin(300.),
62 fMinEnergyBin(0.), fMaxEnergyBin(100.),
63 fNTimeBins(1000), fMinTimeBin(0.), fMaxTimeBin(1000.),
65 fMomentum1(), fMomentum2(), fMomentum12(),
67 fHmgg(0x0), fHmggDifferentSM(0x0),
68 fHmggMaskFrame(0x0), fHmggDifferentSMMaskFrame(0x0),
69 fHOpeningAngle(0x0), fHOpeningAngleDifferentSM(0x0),
70 fHAsymmetry(0x0), fHAsymmetryDifferentSM(0x0),
72 fhClusterTime(0x0), fhClusterPairDiffTime(0x0)
74 for(
Int_t iMod=0; iMod < AliEMCALGeoParams::fgkEMCALModules; iMod++)
76 for(
Int_t iX=0; iX<24; iX++)
78 for(
Int_t iZ=0; iZ<48; iZ++)
100 for(
Int_t iSMPair = 0; iSMPair < AliEMCALGeoParams::fgkEMCALModules/2; iSMPair++)
107 for(
Int_t iSMPair = 0; iSMPair < AliEMCALGeoParams::fgkEMCALModules-2; iSMPair++)
114 for(
Int_t iSM = 0; iSM < AliEMCALGeoParams::fgkEMCALModules; iSM++)
159 fEMCALGeo(0x0), fLoadMatrices(0),
160 fEMCALGeoName(
"EMCAL_COMPLETE12SMV1_DCAL_8SM"),
162 fRecoUtils(new AliEMCALRecoUtils),
163 fOADBFilePath(
""), fCalibFilePath(
""),
164 fCorrectClusters(kFALSE), fRecalPosition(kTRUE),
165 fCaloClustersArr(0x0), fEMCALCells(0x0),
167 fOutputContainer(0x0),
168 fVertex(), fFilteredInput(kFALSE),
169 fImportGeometryFromFile(1), fImportGeometryFilePath(
""),
170 fEmin(0.5), fEmax(15.),
171 fL0min(0.01), fL0max(0.5),
172 fL0Bkgmin(1.0), fL0Bkgmax(3.0),
173 fDTimeCut(100.), fTimeMax(1000000), fTimeMin(-1000000),
174 fAsyCut(1.), fMinNCells(2), fGroupNCells(0),
175 fLogWeight(4.5), fSameSM(kFALSE), fChangeBkgShape(kFALSE),
176 fNMaskCellColumns(11), fMaskCellColumns(0x0),
177 fInvMassCutMin(110.), fInvMassCutMax(160.),
180 fMinBin(0.), fMaxBin(300.),
182 fMinEnergyBin(0.), fMaxEnergyBin(100.),
183 fNTimeBins(1000), fMinTimeBin(0.), fMaxTimeBin(1000.),
185 fMomentum1(), fMomentum2(), fMomentum12(),
187 fHmgg(0x0), fHmggDifferentSM(0x0),
188 fHmggMaskFrame(0x0), fHmggDifferentSMMaskFrame(0x0),
189 fHOpeningAngle(0x0), fHOpeningAngleDifferentSM(0x0),
190 fHAsymmetry(0x0), fHAsymmetryDifferentSM(0x0),
192 fhClusterTime(0x0), fhClusterPairDiffTime(0x0)
194 for(
Int_t iMod=0; iMod < AliEMCALGeoParams::fgkEMCALModules; iMod++)
196 for(
Int_t iX=0; iX<24; iX++)
198 for(
Int_t iZ=0; iZ<48; iZ++)
200 fHmpi0[iMod][iZ][iX] = 0 ;
220 for(
Int_t iSMPair = 0; iSMPair < AliEMCALGeoParams::fgkEMCALModules/2; iSMPair++)
227 for(
Int_t iSMPair = 0; iSMPair < AliEMCALGeoParams::fgkEMCALModules-2; iSMPair++)
234 for(
Int_t iSM = 0; iSM < AliEMCALGeoParams::fgkEMCALModules; iSM++)
270 DefineOutput(1, TList::Class());
296 if(
fRecoUtils->GetParticleType()!=AliEMCALRecoUtils::kPhoton)
297 AliFatal(Form(
"Wrong particle type for cluster position recalculation! = %d\n",
fRecoUtils->GetParticleType()));
299 AliDebug(1,Form(
"It will use fLogWeight %.3f",
fLogWeight));
311 else if (e1i >
fEmax)
continue;
313 else if (c1->GetNCells() <
fMinNCells)
continue;
319 if(
fRecoUtils->ClusterContainsBadChannel(
fEMCALGeo, c1->GetCellsAbsId(), c1->GetNCells()))
continue;
323 AliInfo(Form(
"Std : i %d, E %f, dispersion %f, m02 %f, m20 %f\n",c1->GetID(),c1->E(),c1->GetDispersion(),c1->GetM02(),c1->GetM20()));
324 c1->GetPosition(pos);
325 AliInfo(Form(
"Std : i %d, x %f, y %f, z %f\n",c1->GetID(), pos[0], pos[1], pos[2]));
336 AliDebug(2,Form(
"Energy: after recalibration %f",c1->E()));
342 c1->SetE(
fRecoUtils->CorrectClusterEnergyLinearity(c1));
344 AliDebug(2,Form(
"after linearity correction %f",c1->E()));
349 AliDebug(2,Form(
"after smearing %f\n",c1->E()));
353 AliInfo(Form(
"Cor : i %d, E %f, dispersion %f, m02 %f, m20 %f\n",c1->GetID(),c1->E(),c1->GetDispersion(),c1->GetM02(),c1->GetM20()));
354 c1->GetPosition(pos);
355 AliInfo(Form(
"Cor : i %d, x %f, y %f, z %f\n",c1->GetID(), pos[0], pos[1], pos[2]));
378 Int_t bc = InputEvent()->GetBunchCrossNumber();
379 Int_t nSM = (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules();
381 Int_t nbClusterInTopoHisto[nSM];
383 for(
Int_t iSM = 0; iSM < nSM; iSM++)
385 nbClusterInTopoHisto[iSM] = 0;
393 if(
fRecoUtils->ClusterContainsBadChannel(
fEMCALGeo, c1->GetCellsAbsId(), c1->GetNCells()))
continue;
400 else if (e1i >
fEmax)
continue;
404 else if (c1->GetNCells() <
fMinNCells)
continue;
412 AliInfo(Form(
"IMA : i %d, E %f, dispersion %f, m02 %f, m20 %f",c1->GetID(),e1i,c1->GetDispersion(),c1->GetM02(),c1->GetM20()));
413 c1->GetPosition(pos);
414 AliInfo(Form(
"IMA : i %d, x %f, y %f, z %f",c1->GetID(), pos[0], pos[1], pos[2]));
439 AliEMCALGeometry* geom = AliEMCALGeometry::GetInstance();
441 for(
Int_t iCell = 0; iCell < c1->GetNCells(); iCell++)
443 Int_t iSupMod = -1, iIeta =-1, iIphi =-1, iTower =-1, ietaCell =-1, iphiCell =-1;
445 Int_t CellID = c1->GetCellsAbsId()[iCell];
446 geom->GetCellIndex(CellID,iSupMod,iTower,iIphi,iIeta);
447 geom->GetCellPhiEtaIndexInSModule(iSupMod,iTower,iIphi,iIeta,iphiCell,ietaCell);
451 Float_t AmpFraction = amp / e1i;
453 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));
455 switch (iPosInNoisyQuartet) {
480 if(amp && AmpFraction)
482 nbClusterInTopoHisto[iSupMod1] = nbClusterInTopoHisto[iSupMod1] + 1;
496 else if (e2i >
fEmax)
continue;
500 else if (c2->GetNCells() <
fMinNCells)
continue;
525 if(TMath::Abs(time1-time2) >
fDTimeCut)
continue;
527 if(invmass < fMaxBin && invmass >
fMinBin )
542 if(iSupMod1==iSupMod2)
571 for(
Int_t i = 0; i < nSM/2; i++)
574 if((iSupMod1==j && iSupMod2==j+1) || (iSupMod1==j+1 && iSupMod2==j))
582 for(
Int_t i = 0; i < nSM-2; i++)
584 if((iSupMod1==i && iSupMod2==i+2) || (iSupMod1==i+2 && iSupMod2==i))
601 for(
Int_t i = 0; i < nSM/2; i++)
608 for(
Int_t i = 0; i < nSM-2; i++)
619 for(
Int_t icell = 0; icell < c1->GetNCells(); icell++)
621 Int_t absID = c1->GetCellAbsId(icell);
625 for(
Int_t icell = 0; icell < c2->GetNCells(); icell++)
627 Int_t absID = c2->GetCellAbsId(icell);
639 if(iSupMod1==iSupMod2)
650 if((iSupMod1==0 && iSupMod2==2) || (iSupMod1==2 && iSupMod2==0))
656 if((iSupMod1==1 && iSupMod2==3) || (iSupMod1==3 && iSupMod2==1))
662 if((iSupMod1==0 && iSupMod2==1) || (iSupMod1==1 && iSupMod2==0))
667 if((iSupMod1==2 && iSupMod2==3) || (iSupMod1==3 && iSupMod2==2))
678 if(
fSameSM && iSupMod1!=iSupMod2)
continue;
683 fHmpi0[iSupMod1][ieta1][iphi1]->Fill(invmass);
684 fHmpi0[iSupMod2][ieta2][iphi2]->Fill(invmass);
709 for (
Int_t j = -fGroupNCells; j < fGroupNCells+1; j++)
711 Int_t absId11 =
fEMCALGeo->GetAbsCellIdFromCellIndexes(iSupMod1, iphi1+j, ieta1+i);
712 Int_t absId22 =
fEMCALGeo->GetAbsCellIdFromCellIndexes(iSupMod2, iphi2+j, ieta2+i);
717 for(
Int_t icell = 0; icell < c1->GetNCells(); icell++)
719 if(c1->GetCellsAbsId()[icell] == absId11) ok1=kTRUE;
722 for(
Int_t icell = 0; icell < c2->GetNCells(); icell++)
724 if(c2->GetCellsAbsId()[icell] == absId22) ok2=kTRUE;
727 if(ok1 && (ieta1+i >= 0) && (iphi1+j >= 0) && (ieta1+i < 48) && (iphi1+j < 24))
729 fHmpi0[iSupMod1][ieta1+i][iphi1+j]->Fill(invmass);
733 if(ok2 && (ieta2+i >= 0) && (iphi2+j >= 0) && (ieta2+i < 48) && (iphi2+j < 24))
735 fHmpi0[iSupMod2][ieta2+i][iphi2+j]->Fill(invmass);
742 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",
743 iSupMod1,iphi1,ieta1,iSupMod2,iphi2,ieta2,
fMomentum12.M(),e1i,c1->E(),e2i,c2->E()));
748 for(
Int_t iSM = 0; iSM < nSM; iSM++)
750 AliDebug(2,Form(
"nbClusterInTopo = %i\n",nbClusterInTopoHisto[iSM]));
752 if(nbClusterInTopoHisto[iSM] == 0)
continue;
783 if ( !calibFactorsFile ) AliFatal(
"Cannot recover the calibration factors");
785 for(
Int_t ism = 0; ism <
fEMCALGeo->GetNumberOfSuperModules(); ism++)
787 TH2F * histo = (
TH2F*) calibFactorsFile->Get(Form(
"EMCALRecalFactors_SM%d",ism));
788 printf(
"In AliAnalysisTaskEMCALPi0CalibSelection::InitEnergyCalibrationFactors \n ---Recover calibration factor for : EMCALRecalFactors_SM%d %p\n",ism,histo);
791 fRecoUtils->SetEMCALChannelRecalibrationFactors(ism,histo);
793 AliWarning(Form(
"Null histogram with calibration factors for SM%d, 1 will be used for the full SM!",ism));
803 Int_t runnumber = InputEvent()->GetRunNumber() ;
826 AliInfo(
"Load user defined EMCAL geometry matrices");
828 AliOADBContainer emcGeoMat(
"AliEMCALgeo");
832 emcGeoMat.InitFromFile(Form(
"%s/EMCALlocal2master.root",
fOADBFilePath.Data()),
"AliEMCALgeo");
836 for(
Int_t mod = 0; mod < (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules(); mod++)
840 AliDebug(1,Form(
"EMCAL matrices SM %d, %p",mod,((TGeoHMatrix*) matEMCAL->At(mod))));
843 fMatrix[mod] = (TGeoHMatrix*) matEMCAL->At(mod) ;
855 AliWarning(Form(
"Set matrix for SM %d from gGeoManager",mod));
856 fEMCALGeo->SetMisalMatrix(
fEMCALGeo->GetMatrixForSuperModuleFromGeoManager(mod),mod) ;
860 AliError(Form(
"Alignment matrix for SM %d is not available",mod));
864 else if(!gGeoManager)
866 AliInfo(
"Get geo matrices from data");
868 if(!strcmp(InputEvent()->GetName(),
"AliAODEvent"))
870 AliWarning(
"Use ideal geometry, values geometry matrix not kept in AODs");
874 AliDebug(1,
"AliAnalysisTaskEMCALClusterize Load Misaligned matrices");
876 for(
Int_t mod=0; mod < (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules(); mod++)
878 if(InputEvent()->GetEMCALMatrix(mod))
881 InputEvent()->GetEMCALMatrix(mod)->Print();
883 fEMCALGeo->SetMisalMatrix(InputEvent()->GetEMCALMatrix(mod),mod) ;
891 for(
Int_t mod = 0; mod < (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules(); mod++)
893 AliWarning(Form(
"Set matrix for SM %d from gGeoManager",mod));
894 fEMCALGeo->SetMisalMatrix(
fEMCALGeo->GetMatrixForSuperModuleFromGeoManager(mod),mod) ;
906 if(!
fRecoUtils->IsRunDepRecalibrationOn())
return;
908 AliOADBContainer *contRFTD=
new AliOADBContainer(
"");
910 contRFTD->InitFromFile(Form(
"%s/EMCALTemperatureCorrCalib.root",
fOADBFilePath.Data()),
"AliEMCALRunDepTempCalibCorrections");
912 Int_t runnumber = InputEvent()->GetRunNumber() ;
914 TH1S *htd=(TH1S*)contRFTD->GetObject(runnumber);
919 AliWarning(Form(
"No TemperatureCorrCalib Objects for run: %d",runnumber));
924 Int_t maxEntry = contRFTD->GetNumberOfEntries();
926 while ( (ic < maxEntry) && (contRFTD->UpperLimit(ic) < runnumber) )
932 Int_t closest = lower;
933 if ( (ic<maxEntry) &&
934 (contRFTD->LowerLimit(ic)-runnumber) < (runnumber - contRFTD->UpperLimit(lower)) )
939 AliWarning(Form(
"TemperatureCorrCalib Objects found closest id %d from run: %d",
940 closest, contRFTD->LowerLimit(closest)));
942 htd = (TH1S*) contRFTD->GetObjectByIndex(closest);
948 AliInfo(
"Recalibrate (Temperature) EMCAL");
952 for (
Int_t ism = 0; ism < nSM; ++ism)
954 for (
Int_t icol = 0; icol < 48; ++icol)
956 for (
Int_t irow = 0; irow < 24; ++irow)
960 Int_t absID =
fEMCALGeo->GetAbsCellIdFromCellIndexes(ism, irow, icol);
962 AliDebug(3,Form(
" ism %d, icol %d, irow %d,absID %d - Calib factor %1.5f - ",ism, icol, irow, absID, factor));
964 factor *= htd->GetBinContent(absID) / 10000. ;
966 fRecoUtils->SetEMCALChannelRecalibrationFactor(ism,icol,irow,factor);
968 AliDebug(3,Form(
"T factor %1.5f - final factor %1.5f",
969 htd->GetBinContent(absID) / 10000.,
970 fRecoUtils->GetEMCALChannelRecalibrationFactor(ism,icol,irow)));
975 else AliInfo(
"Do NOT recalibrate EMCAL with T variations, no params TH1");
987 Int_t nSM = (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules();
990 const Int_t buffersize = 255;
991 char hname[buffersize], htitl[buffersize], htitlEnergy[buffersize];
993 fhNEvents =
new TH1I(
"hNEvents",
"Number of analyzed events" , 1 , 0 , 1 ) ;
997 fHmgg->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
998 fHmgg->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1016 fHAsymmetry =
new TH2F(
"hasym",
"2-cluster opening angle",100,0.,1.,100,0,10);
1018 fHAsymmetry->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1039 for(
Int_t iSM = 0; iSM < nSM; iSM++)
1041 snprintf(hname, buffersize,
"hmgg_SM%d",iSM);
1042 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d",iSM);
1044 fHmggSM[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1045 fHmggSM[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1048 snprintf(hname, buffersize,
"hmgg_SM%d_MaskFrame",iSM);
1049 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d",iSM);
1055 snprintf(hname, buffersize,
"hmgg_SM%d_Zone1",iSM);
1056 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 1",iSM);
1058 fHmggSM_Zone1[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1059 fHmggSM_Zone1[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1062 snprintf(hname, buffersize,
"hmgg_SM%d_Zone2",iSM);
1063 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 2",iSM);
1065 fHmggSM_Zone2[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1066 fHmggSM_Zone2[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1069 snprintf(hname, buffersize,
"hmgg_SM%d_Zone3",iSM);
1070 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 3",iSM);
1072 fHmggSM_Zone3[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1073 fHmggSM_Zone3[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1076 snprintf(hname, buffersize,
"hmgg_SM%d_Zone4",iSM);
1077 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 4",iSM);
1079 fHmggSM_Zone4[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1080 fHmggSM_Zone4[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1083 snprintf(hname, buffersize,
"hmgg_SM%d_Zone5",iSM);
1084 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 5",iSM);
1086 fHmggSM_Zone5[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1087 fHmggSM_Zone5[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1090 snprintf(hname, buffersize,
"hmgg_SM%d_Zone6",iSM);
1091 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 6",iSM);
1093 fHmggSM_Zone6[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1094 fHmggSM_Zone6[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1097 snprintf(hname, buffersize,
"hmgg_SM%d_Zone7",iSM);
1098 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 7",iSM);
1100 fHmggSM_Zone7[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1101 fHmggSM_Zone7[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1106 snprintf(hname,buffersize,
"hmgg_PairSameSectorSM%d",iSM);
1107 snprintf(htitl,buffersize,
"Two-gamma inv. mass for SM pair Sector: %d",iSM);
1113 snprintf(hname,buffersize,
"hmgg_PairSameSectorSM%d_MaskFrame",iSM);
1114 snprintf(htitl,buffersize,
"Two-gamma inv. mass for SM pair Sector: %d",iSM);
1121 Form(
"cluster pair time difference vs E, Sector %d",iSM),
1122 100,0,10, 200,-100,100);
1130 snprintf(hname,buffersize,
"hmgg_PairSameSideSM%d",iSM);
1131 snprintf(htitl,buffersize,
"Two-gamma inv. mass for SM pair Sector: %d",iSM);
1137 snprintf(hname,buffersize,
"hmgg_PairSameSideSM%d_MaskFrame",iSM);
1138 snprintf(htitl,buffersize,
"Two-gamma inv. mass for SM pair Sector: %d",iSM);
1145 Form(
"cluster pair time difference vs E, Side %d",iSM),
1146 100,0,10, 200,-100,100);
1152 snprintf(hname, buffersize,
"hopang_SM%d",iSM);
1153 snprintf(htitl, buffersize,
"Opening angle for super mod %d",iSM);
1159 snprintf(hname,buffersize,
"hopang_PairSM%d",iSM);
1160 snprintf(htitl,buffersize,
"Opening angle for SM pair: %d",iSM);
1166 snprintf(hname, buffersize,
"hasym_SM%d",iSM);
1167 snprintf(htitl, buffersize,
"Asymmetry for super mod %d",iSM);
1170 fHAsymmetrySM[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1173 snprintf(hname,buffersize,
"hasym_PairSM%d",iSM);
1174 snprintf(htitl,buffersize,
"Asymmetry for SM pair: %d",iSM);
1184 Form(
"Entries in grid of cells in Module %d",iSM),
1185 colmax+2,-1.5,colmax+0.5, rowmax+2,-1.5,rowmax+0.5);
1191 Form(
"Accumulated energy in grid of cells in Module %d",iSM),
1192 colmax+2,-1.5,colmax+0.5, rowmax+2,-1.5,rowmax+0.5);
1198 Form(
"Accumulated asymmetry in grid of cells in Module %d",iSM),
1199 colmax+2,-1.5,colmax+0.5, rowmax+2,-1.5,rowmax+0.5);
1205 colmax+2,-1.5,colmax+0.5, rowmax+2,-1.5,rowmax+0.5);
1210 fhClusterTimeSM[iSM] =
new TH2F(Form(
"hClusterTime_SM%d",iSM),
"cluster time vs E",100,0,10, 200,-1000,1000);
1216 Form(
"cluster pair time difference vs E, SM %d",iSM),
1217 100,0,10, 200,-100,100);
1227 Form(
"cluster topology for cluster in position 0 in noisy quartet, SM %d",iSM),
1228 21,-10.5,10.5, 21,-10.5,10.5);
1234 Form(
"cluster topology for cluster in position 1 in noisy quartet, SM %d",iSM),
1235 21,-10.5,10.5, 21,-10.5,10.5);
1241 Form(
"cluster topology for cluster in position 2 in noisy quartet, SM %d",iSM),
1242 21,-10.5,10.5, 21,-10.5,10.5);
1248 Form(
"cluster topology for cluster in position 3 in noisy quartet, SM %d",iSM),
1249 21,-10.5,10.5, 21,-10.5,10.5);
1255 Form(
"cluster topology for cluster in position 0 in noisy quartet, SM %d",iSM),
1256 21,-10.5,10.5, 21,-10.5,10.5);
1262 Form(
"cluster topology for cluster in position 1 in noisy quartet, SM %d",iSM),
1263 21,-10.5,10.5, 21,-10.5,10.5);
1269 Form(
"cluster topology for cluster in position 2 in noisy quartet, SM %d",iSM),
1270 21,-10.5,10.5, 21,-10.5,10.5);
1276 Form(
"cluster topology for cluster in position 3 in noisy quartet, SM %d",iSM),
1277 21,-10.5,10.5, 21,-10.5,10.5);
1284 Form(
"cluster topology for cluster in position 0 in noisy quartet, SM %d",iSM),
1285 21,-10.5,10.5, 21,-10.5,10.5);
1291 Form(
"cluster topology for cluster in position 1 in noisy quartet, SM %d",iSM),
1292 21,-10.5,10.5, 21,-10.5,10.5);
1298 Form(
"cluster topology for cluster in position 2 in noisy quartet, SM %d",iSM),
1299 21,-10.5,10.5, 21,-10.5,10.5);
1305 Form(
"cluster topology for cluster in position 3 in noisy quartet, SM %d",iSM),
1306 21,-10.5,10.5, 21,-10.5,10.5);
1313 Int_t nchannels = nSM*AliEMCALGeoParams::fgkEMCALRows*AliEMCALGeoParams::fgkEMCALCols;
1314 for(
Int_t ibc = 0; ibc < 4; ibc++)
1316 fHTpi0[ibc] =
new TH2F(Form(
"hTime_BC%d",ibc),Form(
"Time of cell clusters under pi0 peak, bunch crossing %d",ibc),
1319 fHTpi0[ibc]->SetYTitle(
"time (ns)");
1320 fHTpi0[ibc]->SetXTitle(
"abs. Id. ");
1323 fhClusterTime =
new TH2F(
"hClusterTime",
"cluster time vs E",100,0,10, 100,0,1000);
1333 for(
Int_t iMod=0; iMod < nSM; iMod++)
1335 for(
Int_t iRow=0; iRow < AliEMCALGeoParams::fgkEMCALRows; iRow++)
1337 for(
Int_t iCol=0; iCol < AliEMCALGeoParams::fgkEMCALCols; iCol++)
1339 snprintf(hname,buffersize,
"%d_%d_%d",iMod,iCol,iRow);
1340 snprintf(htitl,buffersize,
"Two-gamma inv. mass for super mod %d, cell(col,row)=(%d,%d)",iMod,iCol,iRow);
1342 fHmpi0[iMod][iCol][iRow]->SetXTitle(
"mass (MeV/c^{2})");
1347 snprintf(htitlEnergy,buffersize,
"Energy for super mod %d, cell(col,row)=(%d,%d)",iMod,iCol,iRow);
1349 fhEnergy[iMod][iCol][iRow]->SetXTitle(
"E (GeV)");
1412 if((irow >= 2 && irow <= 21) && ((icol >= 42 && icol <= 46) || (icol >= 13 && icol <= 37) || (icol >= 1 && icol <= 9)))
1414 if((irow >= 2 && irow <= 3) || (irow >= 20 && irow <= 21))
1423 if((irow >= 2 && irow <= 21) && ((icol >= 1 && icol <= 5) || (icol >= 10 && icol <= 34) || (icol >= 38 && icol <= 46)))
1425 if((irow >= 2 && irow <= 3) || (irow >= 20 && irow <= 21))
1457 if((irow >= 2 && irow <= 21) && ((icol >= 42 && icol <= 46) || (icol >= 13 && icol <= 37) || (icol >= 1 && icol <= 9)))
1459 if((irow >= 2 && irow <= 3) || (irow >= 20 && irow <= 21))
1472 if((irow >= 2 && irow <= 21) && ((icol >= 1 && icol <= 5) || (icol >= 10 && icol <= 34) || (icol >= 38 && icol <= 46)))
1474 if((irow >= 2 && irow <= 3) || (irow >= 20 && irow <= 21))
1510 if((irow >= 2 && irow <= 21) && ((icol >= 42 && icol <= 46) || (icol >= 13 && icol <= 37) || (icol >= 1 && icol <= 9)))
1512 if((icol >= 1 && icol <= 3) || (icol >= 44 && icol <= 46))
1521 if((irow >= 2 && irow <= 21) && ((icol >= 1 && icol <= 5) || (icol >= 10 && icol <= 34) || (icol >= 38 && icol <= 46)))
1523 if((icol >= 1 && icol <= 3) || (icol >= 44 && icol <= 46))
1555 if((irow >= 2 && irow <= 21) && ((icol >= 42 && icol <= 46) || (icol >= 13 && icol <= 37) || (icol >= 1 && icol <= 9)))
1557 if((icol >= 1 && icol <= 3) || (icol >= 44 && icol <= 46))
1570 if((irow >= 2 && irow <= 21) && ((icol >= 1 && icol <= 5) || (icol >= 10 && icol <= 34) || (icol >= 38 && icol <= 46)))
1572 if((icol >= 1 && icol <= 3) || (icol >= 44 && icol <= 46))
1611 if(((icol-col0)*(icol-col0)) / (a*a) + ((irow-row0)*(irow-row0) / (b*b)) > 1)
1647 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))
1681 if(((icol-col0)*(icol-col0)) / (a*a) + ((irow-row0)*(irow-row0) / (b*b)) < 1)
1709 if (esdevent) triggerClass = esdevent->GetFiredTriggerClasses();
1710 else if(aodevent) triggerClass = aodevent->GetFiredTriggerClasses();
1712 AliDebug(1,Form(
"Event %d, FiredClass %s",
1717 AliDebug(1,
"Reject event!");
1721 AliDebug(1,
"Accept event!");
1726 AliVEvent*
event = 0;
1728 else event = InputEvent();
1732 AliWarning(
"Input event not available!");
1736 AliDebug(1,Form(
"<<< %s: Event %d >>>",event->GetName(), (
Int_t)Entry()));
1740 event->GetPrimaryVertex()->GetXYZ(
fVertex) ;
1783 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",
1788 printf(
"Cluster maximal cell away from border at least %d cells\n",
fRecoUtils->GetNumberOfCellsFromEMCALBorder()) ;
1792 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",
1827 else AliWarning(
"Mask column not set, position larger than allocated set size first") ;
1874 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)
Float_t fEBkgmin
Minimum cluster energy (GeV) for bkg shape study (only for high M02 clusters).
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 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.
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.
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.