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 fOpAnglemin(0.), fOpAnglemax(3.0),
54 fDTimeCut(100.), fTimeMax(1000000), fTimeMin(-1000000),
55 fAsyCut(1.), fMinNCells(2), fGroupNCells(0),
56 fLogWeight(4.5), fSameSM(kFALSE), fChangeBkgShape(kFALSE),
57 fNMaskCellColumns(11), fMaskCellColumns(0x0),
58 fInvMassCutMin(110.), fInvMassCutMax(160.),
61 fMinBin(0.), fMaxBin(300.),
63 fMinEnergyBin(0.), fMaxEnergyBin(100.),
64 fNTimeBins(1000), fMinTimeBin(0.), fMaxTimeBin(1000.),
66 fMomentum1(), fMomentum2(), fMomentum12(),
68 fHmgg(0x0), fHmggDifferentSM(0x0),
69 fHmggMaskFrame(0x0), fHmggDifferentSMMaskFrame(0x0),
70 fHOpeningAngle(0x0), fHOpeningAngleDifferentSM(0x0),
71 fHAsymmetry(0x0), fHAsymmetryDifferentSM(0x0),
73 fhClusterTime(0x0), fhClusterPairDiffTime(0x0)
75 for(
Int_t iMod=0; iMod < AliEMCALGeoParams::fgkEMCALModules; iMod++)
77 for(
Int_t iX=0; iX<24; iX++)
79 for(
Int_t iZ=0; iZ<48; iZ++)
101 for(
Int_t iSMPair = 0; iSMPair < AliEMCALGeoParams::fgkEMCALModules/2; iSMPair++)
108 for(
Int_t iSMPair = 0; iSMPair < AliEMCALGeoParams::fgkEMCALModules-2; iSMPair++)
115 for(
Int_t iSM = 0; iSM < AliEMCALGeoParams::fgkEMCALModules; iSM++)
160 fEMCALGeo(0x0), fLoadMatrices(0),
161 fEMCALGeoName(
"EMCAL_COMPLETE12SMV1_DCAL_8SM"),
163 fRecoUtils(new AliEMCALRecoUtils),
164 fOADBFilePath(
""), fCalibFilePath(
""),
165 fCorrectClusters(kFALSE), fRecalPosition(kTRUE),
166 fCaloClustersArr(0x0), fEMCALCells(0x0),
168 fOutputContainer(0x0),
169 fVertex(), fFilteredInput(kFALSE),
170 fImportGeometryFromFile(1), fImportGeometryFilePath(
""),
171 fEmin(0.5), fEmax(15.),
172 fL0min(0.01), fL0max(0.5),
173 fL0Bkgmin(1.0), fL0Bkgmax(3.0),
174 fOpAnglemin(0.), fOpAnglemax(3.0),
175 fDTimeCut(100.), fTimeMax(1000000), fTimeMin(-1000000),
176 fAsyCut(1.), fMinNCells(2), fGroupNCells(0),
177 fLogWeight(4.5), fSameSM(kFALSE), fChangeBkgShape(kFALSE),
178 fNMaskCellColumns(11), fMaskCellColumns(0x0),
179 fInvMassCutMin(110.), fInvMassCutMax(160.),
182 fMinBin(0.), fMaxBin(300.),
184 fMinEnergyBin(0.), fMaxEnergyBin(100.),
185 fNTimeBins(1000), fMinTimeBin(0.), fMaxTimeBin(1000.),
187 fMomentum1(), fMomentum2(), fMomentum12(),
189 fHmgg(0x0), fHmggDifferentSM(0x0),
190 fHmggMaskFrame(0x0), fHmggDifferentSMMaskFrame(0x0),
191 fHOpeningAngle(0x0), fHOpeningAngleDifferentSM(0x0),
192 fHAsymmetry(0x0), fHAsymmetryDifferentSM(0x0),
194 fhClusterTime(0x0), fhClusterPairDiffTime(0x0)
196 for(
Int_t iMod=0; iMod < AliEMCALGeoParams::fgkEMCALModules; iMod++)
198 for(
Int_t iX=0; iX<24; iX++)
200 for(
Int_t iZ=0; iZ<48; iZ++)
202 fHmpi0[iMod][iZ][iX] = 0 ;
222 for(
Int_t iSMPair = 0; iSMPair < AliEMCALGeoParams::fgkEMCALModules/2; iSMPair++)
229 for(
Int_t iSMPair = 0; iSMPair < AliEMCALGeoParams::fgkEMCALModules-2; iSMPair++)
236 for(
Int_t iSM = 0; iSM < AliEMCALGeoParams::fgkEMCALModules; iSM++)
272 DefineOutput(1, TList::Class());
298 if(
fRecoUtils->GetParticleType()!=AliEMCALRecoUtils::kPhoton)
299 AliFatal(Form(
"Wrong particle type for cluster position recalculation! = %d\n",
fRecoUtils->GetParticleType()));
301 AliDebug(1,Form(
"It will use fLogWeight %.3f",
fLogWeight));
313 else if (e1i >
fEmax)
continue;
315 else if (c1->GetNCells() <
fMinNCells)
continue;
321 if(
fRecoUtils->ClusterContainsBadChannel(
fEMCALGeo, c1->GetCellsAbsId(), c1->GetNCells()))
continue;
325 AliInfo(Form(
"Std : i %d, E %f, dispersion %f, m02 %f, m20 %f\n",c1->GetID(),c1->E(),c1->GetDispersion(),c1->GetM02(),c1->GetM20()));
326 c1->GetPosition(pos);
327 AliInfo(Form(
"Std : i %d, x %f, y %f, z %f\n",c1->GetID(), pos[0], pos[1], pos[2]));
338 AliDebug(2,Form(
"Energy: after recalibration %f",c1->E()));
344 c1->SetE(
fRecoUtils->CorrectClusterEnergyLinearity(c1));
346 AliDebug(2,Form(
"after linearity correction %f",c1->E()));
351 AliDebug(2,Form(
"after smearing %f\n",c1->E()));
355 AliInfo(Form(
"Cor : i %d, E %f, dispersion %f, m02 %f, m20 %f\n",c1->GetID(),c1->E(),c1->GetDispersion(),c1->GetM02(),c1->GetM20()));
356 c1->GetPosition(pos);
357 AliInfo(Form(
"Cor : i %d, x %f, y %f, z %f\n",c1->GetID(), pos[0], pos[1], pos[2]));
380 Int_t bc = InputEvent()->GetBunchCrossNumber();
381 Int_t nSM = (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules();
383 Int_t nbClusterInTopoHisto[nSM];
385 for(
Int_t iSM = 0; iSM < nSM; iSM++)
387 nbClusterInTopoHisto[iSM] = 0;
395 if(
fRecoUtils->ClusterContainsBadChannel(
fEMCALGeo, c1->GetCellsAbsId(), c1->GetNCells()))
continue;
402 else if (e1i >
fEmax)
continue;
406 else if (c1->GetNCells() <
fMinNCells)
continue;
414 AliInfo(Form(
"IMA : i %d, E %f, dispersion %f, m02 %f, m20 %f",c1->GetID(),e1i,c1->GetDispersion(),c1->GetM02(),c1->GetM20()));
415 c1->GetPosition(pos);
416 AliInfo(Form(
"IMA : i %d, x %f, y %f, z %f",c1->GetID(), pos[0], pos[1], pos[2]));
441 AliEMCALGeometry* geom = AliEMCALGeometry::GetInstance();
443 for(
Int_t iCell = 0; iCell < c1->GetNCells(); iCell++)
445 Int_t iSupMod = -1, iIeta =-1, iIphi =-1, iTower =-1, ietaCell =-1, iphiCell =-1;
447 Int_t CellID = c1->GetCellsAbsId()[iCell];
448 geom->GetCellIndex(CellID,iSupMod,iTower,iIphi,iIeta);
449 geom->GetCellPhiEtaIndexInSModule(iSupMod,iTower,iIphi,iIeta,iphiCell,ietaCell);
453 Float_t AmpFraction = amp / e1i;
455 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));
457 switch (iPosInNoisyQuartet) {
482 if(amp && AmpFraction)
484 nbClusterInTopoHisto[iSupMod1] = nbClusterInTopoHisto[iSupMod1] + 1;
498 else if (e2i >
fEmax)
continue;
502 else if (c2->GetNCells() <
fMinNCells)
continue;
527 if(TMath::Abs(time1-time2) >
fDTimeCut)
continue;
529 if(invmass < fMaxBin && invmass >
fMinBin )
544 if(iSupMod1==iSupMod2)
573 for(
Int_t i = 0; i < nSM/2; i++)
576 if((iSupMod1==j && iSupMod2==j+1) || (iSupMod1==j+1 && iSupMod2==j))
584 for(
Int_t i = 0; i < nSM-2; i++)
586 if((iSupMod1==i && iSupMod2==i+2) || (iSupMod1==i+2 && iSupMod2==i))
603 for(
Int_t i = 0; i < nSM/2; i++)
610 for(
Int_t i = 0; i < nSM-2; i++)
621 for(
Int_t icell = 0; icell < c1->GetNCells(); icell++)
623 Int_t absID = c1->GetCellAbsId(icell);
627 for(
Int_t icell = 0; icell < c2->GetNCells(); icell++)
629 Int_t absID = c2->GetCellAbsId(icell);
641 if(iSupMod1==iSupMod2)
652 if((iSupMod1==0 && iSupMod2==2) || (iSupMod1==2 && iSupMod2==0))
658 if((iSupMod1==1 && iSupMod2==3) || (iSupMod1==3 && iSupMod2==1))
664 if((iSupMod1==0 && iSupMod2==1) || (iSupMod1==1 && iSupMod2==0))
669 if((iSupMod1==2 && iSupMod2==3) || (iSupMod1==3 && iSupMod2==2))
680 if(
fSameSM && iSupMod1!=iSupMod2)
continue;
685 fHmpi0[iSupMod1][ieta1][iphi1]->Fill(invmass);
686 fHmpi0[iSupMod2][ieta2][iphi2]->Fill(invmass);
711 for (
Int_t j = -fGroupNCells; j < fGroupNCells+1; j++)
713 Int_t absId11 =
fEMCALGeo->GetAbsCellIdFromCellIndexes(iSupMod1, iphi1+j, ieta1+i);
714 Int_t absId22 =
fEMCALGeo->GetAbsCellIdFromCellIndexes(iSupMod2, iphi2+j, ieta2+i);
719 for(
Int_t icell = 0; icell < c1->GetNCells(); icell++)
721 if(c1->GetCellsAbsId()[icell] == absId11) ok1=kTRUE;
724 for(
Int_t icell = 0; icell < c2->GetNCells(); icell++)
726 if(c2->GetCellsAbsId()[icell] == absId22) ok2=kTRUE;
729 if(ok1 && (ieta1+i >= 0) && (iphi1+j >= 0) && (ieta1+i < 48) && (iphi1+j < 24))
731 fHmpi0[iSupMod1][ieta1+i][iphi1+j]->Fill(invmass);
735 if(ok2 && (ieta2+i >= 0) && (iphi2+j >= 0) && (ieta2+i < 48) && (iphi2+j < 24))
737 fHmpi0[iSupMod2][ieta2+i][iphi2+j]->Fill(invmass);
744 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",
745 iSupMod1,iphi1,ieta1,iSupMod2,iphi2,ieta2,
fMomentum12.M(),e1i,c1->E(),e2i,c2->E()));
750 for(
Int_t iSM = 0; iSM < nSM; iSM++)
752 AliDebug(2,Form(
"nbClusterInTopo = %i\n",nbClusterInTopoHisto[iSM]));
754 if(nbClusterInTopoHisto[iSM] == 0)
continue;
785 if ( !calibFactorsFile ) AliFatal(
"Cannot recover the calibration factors");
787 for(
Int_t ism = 0; ism <
fEMCALGeo->GetNumberOfSuperModules(); ism++)
789 TH2F * histo = (
TH2F*) calibFactorsFile->Get(Form(
"EMCALRecalFactors_SM%d",ism));
790 printf(
"In AliAnalysisTaskEMCALPi0CalibSelection::InitEnergyCalibrationFactors \n ---Recover calibration factor for : EMCALRecalFactors_SM%d %p\n",ism,histo);
793 fRecoUtils->SetEMCALChannelRecalibrationFactors(ism,histo);
795 AliWarning(Form(
"Null histogram with calibration factors for SM%d, 1 will be used for the full SM!",ism));
805 Int_t runnumber = InputEvent()->GetRunNumber() ;
828 AliInfo(
"Load user defined EMCAL geometry matrices");
830 AliOADBContainer emcGeoMat(
"AliEMCALgeo");
834 emcGeoMat.InitFromFile(Form(
"%s/EMCALlocal2master.root",
fOADBFilePath.Data()),
"AliEMCALgeo");
838 for(
Int_t mod = 0; mod < (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules(); mod++)
842 AliDebug(1,Form(
"EMCAL matrices SM %d, %p",mod,((TGeoHMatrix*) matEMCAL->At(mod))));
845 fMatrix[mod] = (TGeoHMatrix*) matEMCAL->At(mod) ;
857 AliWarning(Form(
"Set matrix for SM %d from gGeoManager",mod));
858 fEMCALGeo->SetMisalMatrix(
fEMCALGeo->GetMatrixForSuperModuleFromGeoManager(mod),mod) ;
862 AliError(Form(
"Alignment matrix for SM %d is not available",mod));
866 else if(!gGeoManager)
868 AliInfo(
"Get geo matrices from data");
870 if(!strcmp(InputEvent()->GetName(),
"AliAODEvent"))
872 AliWarning(
"Use ideal geometry, values geometry matrix not kept in AODs");
876 AliDebug(1,
"AliAnalysisTaskEMCALClusterize Load Misaligned matrices");
878 for(
Int_t mod=0; mod < (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules(); mod++)
880 if(InputEvent()->GetEMCALMatrix(mod))
883 InputEvent()->GetEMCALMatrix(mod)->Print();
885 fEMCALGeo->SetMisalMatrix(InputEvent()->GetEMCALMatrix(mod),mod) ;
893 for(
Int_t mod = 0; mod < (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules(); mod++)
895 AliWarning(Form(
"Set matrix for SM %d from gGeoManager",mod));
896 fEMCALGeo->SetMisalMatrix(
fEMCALGeo->GetMatrixForSuperModuleFromGeoManager(mod),mod) ;
908 if(!
fRecoUtils->IsRunDepRecalibrationOn())
return;
910 AliOADBContainer *contRFTD=
new AliOADBContainer(
"");
912 contRFTD->InitFromFile(Form(
"%s/EMCALTemperatureCorrCalib.root",
fOADBFilePath.Data()),
"AliEMCALRunDepTempCalibCorrections");
914 Int_t runnumber = InputEvent()->GetRunNumber() ;
916 TH1S *htd=(TH1S*)contRFTD->GetObject(runnumber);
921 AliWarning(Form(
"No TemperatureCorrCalib Objects for run: %d",runnumber));
926 Int_t maxEntry = contRFTD->GetNumberOfEntries();
928 while ( (ic < maxEntry) && (contRFTD->UpperLimit(ic) < runnumber) )
934 Int_t closest = lower;
935 if ( (ic<maxEntry) &&
936 (contRFTD->LowerLimit(ic)-runnumber) < (runnumber - contRFTD->UpperLimit(lower)) )
941 AliWarning(Form(
"TemperatureCorrCalib Objects found closest id %d from run: %d",
942 closest, contRFTD->LowerLimit(closest)));
944 htd = (TH1S*) contRFTD->GetObjectByIndex(closest);
950 AliInfo(
"Recalibrate (Temperature) EMCAL");
954 for (
Int_t ism = 0; ism < nSM; ++ism)
956 for (
Int_t icol = 0; icol < 48; ++icol)
958 for (
Int_t irow = 0; irow < 24; ++irow)
962 Int_t absID =
fEMCALGeo->GetAbsCellIdFromCellIndexes(ism, irow, icol);
964 AliDebug(3,Form(
" ism %d, icol %d, irow %d,absID %d - Calib factor %1.5f - ",ism, icol, irow, absID, factor));
966 factor *= htd->GetBinContent(absID) / 10000. ;
968 fRecoUtils->SetEMCALChannelRecalibrationFactor(ism,icol,irow,factor);
970 AliDebug(3,Form(
"T factor %1.5f - final factor %1.5f",
971 htd->GetBinContent(absID) / 10000.,
972 fRecoUtils->GetEMCALChannelRecalibrationFactor(ism,icol,irow)));
977 else AliInfo(
"Do NOT recalibrate EMCAL with T variations, no params TH1");
989 Int_t nSM = (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules();
992 const Int_t buffersize = 255;
993 char hname[buffersize], htitl[buffersize], htitlEnergy[buffersize];
995 fhNEvents =
new TH1I(
"hNEvents",
"Number of analyzed events" , 1 , 0 , 1 ) ;
999 fHmgg->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1000 fHmgg->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1018 fHAsymmetry =
new TH2F(
"hasym",
"2-cluster opening angle",100,0.,1.,100,0,10);
1020 fHAsymmetry->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1041 for(
Int_t iSM = 0; iSM < nSM; iSM++)
1043 snprintf(hname, buffersize,
"hmgg_SM%d",iSM);
1044 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d",iSM);
1046 fHmggSM[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1047 fHmggSM[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1050 snprintf(hname, buffersize,
"hmgg_SM%d_MaskFrame",iSM);
1051 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d",iSM);
1057 snprintf(hname, buffersize,
"hmgg_SM%d_Zone1",iSM);
1058 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 1",iSM);
1060 fHmggSM_Zone1[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1061 fHmggSM_Zone1[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1064 snprintf(hname, buffersize,
"hmgg_SM%d_Zone2",iSM);
1065 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 2",iSM);
1067 fHmggSM_Zone2[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1068 fHmggSM_Zone2[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1071 snprintf(hname, buffersize,
"hmgg_SM%d_Zone3",iSM);
1072 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 3",iSM);
1074 fHmggSM_Zone3[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1075 fHmggSM_Zone3[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1078 snprintf(hname, buffersize,
"hmgg_SM%d_Zone4",iSM);
1079 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 4",iSM);
1081 fHmggSM_Zone4[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1082 fHmggSM_Zone4[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1085 snprintf(hname, buffersize,
"hmgg_SM%d_Zone5",iSM);
1086 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 5",iSM);
1088 fHmggSM_Zone5[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1089 fHmggSM_Zone5[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1092 snprintf(hname, buffersize,
"hmgg_SM%d_Zone6",iSM);
1093 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 6",iSM);
1095 fHmggSM_Zone6[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1096 fHmggSM_Zone6[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1099 snprintf(hname, buffersize,
"hmgg_SM%d_Zone7",iSM);
1100 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 7",iSM);
1102 fHmggSM_Zone7[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1103 fHmggSM_Zone7[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1108 snprintf(hname,buffersize,
"hmgg_PairSameSectorSM%d",iSM);
1109 snprintf(htitl,buffersize,
"Two-gamma inv. mass for SM pair Sector: %d",iSM);
1115 snprintf(hname,buffersize,
"hmgg_PairSameSectorSM%d_MaskFrame",iSM);
1116 snprintf(htitl,buffersize,
"Two-gamma inv. mass for SM pair Sector: %d",iSM);
1123 Form(
"cluster pair time difference vs E, Sector %d",iSM),
1124 100,0,10, 200,-100,100);
1132 snprintf(hname,buffersize,
"hmgg_PairSameSideSM%d",iSM);
1133 snprintf(htitl,buffersize,
"Two-gamma inv. mass for SM pair Sector: %d",iSM);
1139 snprintf(hname,buffersize,
"hmgg_PairSameSideSM%d_MaskFrame",iSM);
1140 snprintf(htitl,buffersize,
"Two-gamma inv. mass for SM pair Sector: %d",iSM);
1147 Form(
"cluster pair time difference vs E, Side %d",iSM),
1148 100,0,10, 200,-100,100);
1154 snprintf(hname, buffersize,
"hopang_SM%d",iSM);
1155 snprintf(htitl, buffersize,
"Opening angle for super mod %d",iSM);
1161 snprintf(hname,buffersize,
"hopang_PairSM%d",iSM);
1162 snprintf(htitl,buffersize,
"Opening angle for SM pair: %d",iSM);
1168 snprintf(hname, buffersize,
"hasym_SM%d",iSM);
1169 snprintf(htitl, buffersize,
"Asymmetry for super mod %d",iSM);
1172 fHAsymmetrySM[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1175 snprintf(hname,buffersize,
"hasym_PairSM%d",iSM);
1176 snprintf(htitl,buffersize,
"Asymmetry for SM pair: %d",iSM);
1186 Form(
"Entries in grid of cells in Module %d",iSM),
1187 colmax+2,-1.5,colmax+0.5, rowmax+2,-1.5,rowmax+0.5);
1193 Form(
"Accumulated energy in grid of cells in Module %d",iSM),
1194 colmax+2,-1.5,colmax+0.5, rowmax+2,-1.5,rowmax+0.5);
1200 Form(
"Accumulated asymmetry in grid of cells in Module %d",iSM),
1201 colmax+2,-1.5,colmax+0.5, rowmax+2,-1.5,rowmax+0.5);
1207 colmax+2,-1.5,colmax+0.5, rowmax+2,-1.5,rowmax+0.5);
1212 fhClusterTimeSM[iSM] =
new TH2F(Form(
"hClusterTime_SM%d",iSM),
"cluster time vs E",100,0,10, 200,-1000,1000);
1218 Form(
"cluster pair time difference vs E, SM %d",iSM),
1219 100,0,10, 200,-100,100);
1229 Form(
"cluster topology for cluster in position 0 in noisy quartet, SM %d",iSM),
1230 21,-10.5,10.5, 21,-10.5,10.5);
1236 Form(
"cluster topology for cluster in position 1 in noisy quartet, SM %d",iSM),
1237 21,-10.5,10.5, 21,-10.5,10.5);
1243 Form(
"cluster topology for cluster in position 2 in noisy quartet, SM %d",iSM),
1244 21,-10.5,10.5, 21,-10.5,10.5);
1250 Form(
"cluster topology for cluster in position 3 in noisy quartet, SM %d",iSM),
1251 21,-10.5,10.5, 21,-10.5,10.5);
1257 Form(
"cluster topology for cluster in position 0 in noisy quartet, SM %d",iSM),
1258 21,-10.5,10.5, 21,-10.5,10.5);
1264 Form(
"cluster topology for cluster in position 1 in noisy quartet, SM %d",iSM),
1265 21,-10.5,10.5, 21,-10.5,10.5);
1271 Form(
"cluster topology for cluster in position 2 in noisy quartet, SM %d",iSM),
1272 21,-10.5,10.5, 21,-10.5,10.5);
1278 Form(
"cluster topology for cluster in position 3 in noisy quartet, SM %d",iSM),
1279 21,-10.5,10.5, 21,-10.5,10.5);
1286 Form(
"cluster topology for cluster in position 0 in noisy quartet, SM %d",iSM),
1287 21,-10.5,10.5, 21,-10.5,10.5);
1293 Form(
"cluster topology for cluster in position 1 in noisy quartet, SM %d",iSM),
1294 21,-10.5,10.5, 21,-10.5,10.5);
1300 Form(
"cluster topology for cluster in position 2 in noisy quartet, SM %d",iSM),
1301 21,-10.5,10.5, 21,-10.5,10.5);
1307 Form(
"cluster topology for cluster in position 3 in noisy quartet, SM %d",iSM),
1308 21,-10.5,10.5, 21,-10.5,10.5);
1315 Int_t nchannels = nSM*AliEMCALGeoParams::fgkEMCALRows*AliEMCALGeoParams::fgkEMCALCols;
1316 for(
Int_t ibc = 0; ibc < 4; ibc++)
1318 fHTpi0[ibc] =
new TH2F(Form(
"hTime_BC%d",ibc),Form(
"Time of cell clusters under pi0 peak, bunch crossing %d",ibc),
1321 fHTpi0[ibc]->SetYTitle(
"time (ns)");
1322 fHTpi0[ibc]->SetXTitle(
"abs. Id. ");
1325 fhClusterTime =
new TH2F(
"hClusterTime",
"cluster time vs E",100,0,10, 100,0,1000);
1335 for(
Int_t iMod=0; iMod < nSM; iMod++)
1337 for(
Int_t iRow=0; iRow < AliEMCALGeoParams::fgkEMCALRows; iRow++)
1339 for(
Int_t iCol=0; iCol < AliEMCALGeoParams::fgkEMCALCols; iCol++)
1341 snprintf(hname,buffersize,
"%d_%d_%d",iMod,iCol,iRow);
1342 snprintf(htitl,buffersize,
"Two-gamma inv. mass for super mod %d, cell(col,row)=(%d,%d)",iMod,iCol,iRow);
1344 fHmpi0[iMod][iCol][iRow]->SetXTitle(
"mass (MeV/c^{2})");
1349 snprintf(htitlEnergy,buffersize,
"Energy for super mod %d, cell(col,row)=(%d,%d)",iMod,iCol,iRow);
1351 fhEnergy[iMod][iCol][iRow]->SetXTitle(
"E (GeV)");
1414 if((irow >= 2 && irow <= 21) && ((icol >= 42 && icol <= 46) || (icol >= 13 && icol <= 37) || (icol >= 1 && icol <= 9)))
1416 if((irow >= 2 && irow <= 3) || (irow >= 20 && irow <= 21))
1425 if((irow >= 2 && irow <= 21) && ((icol >= 1 && icol <= 5) || (icol >= 10 && icol <= 34) || (icol >= 38 && icol <= 46)))
1427 if((irow >= 2 && irow <= 3) || (irow >= 20 && irow <= 21))
1459 if((irow >= 2 && irow <= 21) && ((icol >= 42 && icol <= 46) || (icol >= 13 && icol <= 37) || (icol >= 1 && icol <= 9)))
1461 if((irow >= 2 && irow <= 3) || (irow >= 20 && irow <= 21))
1474 if((irow >= 2 && irow <= 21) && ((icol >= 1 && icol <= 5) || (icol >= 10 && icol <= 34) || (icol >= 38 && icol <= 46)))
1476 if((irow >= 2 && irow <= 3) || (irow >= 20 && irow <= 21))
1512 if((irow >= 2 && irow <= 21) && ((icol >= 42 && icol <= 46) || (icol >= 13 && icol <= 37) || (icol >= 1 && icol <= 9)))
1514 if((icol >= 1 && icol <= 3) || (icol >= 44 && icol <= 46))
1523 if((irow >= 2 && irow <= 21) && ((icol >= 1 && icol <= 5) || (icol >= 10 && icol <= 34) || (icol >= 38 && icol <= 46)))
1525 if((icol >= 1 && icol <= 3) || (icol >= 44 && icol <= 46))
1557 if((irow >= 2 && irow <= 21) && ((icol >= 42 && icol <= 46) || (icol >= 13 && icol <= 37) || (icol >= 1 && icol <= 9)))
1559 if((icol >= 1 && icol <= 3) || (icol >= 44 && icol <= 46))
1572 if((irow >= 2 && irow <= 21) && ((icol >= 1 && icol <= 5) || (icol >= 10 && icol <= 34) || (icol >= 38 && icol <= 46)))
1574 if((icol >= 1 && icol <= 3) || (icol >= 44 && icol <= 46))
1613 if(((icol-col0)*(icol-col0)) / (a*a) + ((irow-row0)*(irow-row0) / (b*b)) > 1)
1649 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))
1683 if(((icol-col0)*(icol-col0)) / (a*a) + ((irow-row0)*(irow-row0) / (b*b)) < 1)
1711 if (esdevent) triggerClass = esdevent->GetFiredTriggerClasses();
1712 else if(aodevent) triggerClass = aodevent->GetFiredTriggerClasses();
1714 AliDebug(1,Form(
"Event %d, FiredClass %s",
1719 AliDebug(1,
"Reject event!");
1723 AliDebug(1,
"Accept event!");
1728 AliVEvent*
event = 0;
1730 else event = InputEvent();
1734 AliWarning(
"Input event not available!");
1738 AliDebug(1,Form(
"<<< %s: Event %d >>>",event->GetName(), (
Int_t)Entry()));
1742 event->GetPrimaryVertex()->GetXYZ(
fVertex) ;
1785 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",
1790 printf(
"Cluster maximal cell away from border at least %d cells\n",
fRecoUtils->GetNumberOfCellsFromEMCALBorder()) ;
1794 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",
1829 else AliWarning(
"Mask column not set, position larger than allocated set size first") ;
1876 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.