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" 29 #include "AliDataFile.h" 40 fEMCALGeo(0x0), fLoadMatrices(0),
41 fEMCALGeoName(
"EMCAL_COMPLETE12SMV1_DCAL_8SM"),
43 fRecoUtils(new AliEMCALRecoUtils),
44 fOADBFilePath(
""), fCalibFilePath(
""),
45 fCorrectClusters(kFALSE), fRecalPosition(kTRUE),
46 fCaloClustersArr(0x0), fEMCALCells(0x0),
48 fOutputContainer(0x0),
49 fVertex(), fFilteredInput(kFALSE),
50 fImportGeometryFromFile(1), fImportGeometryFilePath(
""),
51 fEmin(0.5), fEmax(15.),
52 fEBkgmin(0.5), fEBkgmax(15.),
53 fL0min(0.01), fL0max(0.5),
54 fL0Bkgmin(1.0), fL0Bkgmax(3.0),
55 fOpAnglemin(0.), fOpAnglemax(3.0),
56 fDTimeCut(100.), fTimeMax(1000000), fTimeMin(-1000000),
57 fAsyCut(1.), fMinNCells(2), fGroupNCells(0),
58 fLogWeight(4.5), fSameSM(kFALSE),
59 fNMaskCellColumns(11), fMaskCellColumns(0x0),
60 fSelectOnlyCellSignalOutOfCollision(0),
61 fCellEnergyHiso(0), fClusterTopology(0),
62 fSelectOnlyPhotonsInDifferentSM(0),
64 fInvMassCutMin(110.), fInvMassCutMax(160.),
66 fNbins(300), fMinBin(0.), fMaxBin(300.),
67 fNTimeBins(1000), fMinTimeBin(0.), fMaxTimeBin(1000.),
68 fNEnergybins(1000), fMinEnergyBin(0.), fMaxEnergyBin(100.),
70 fMomentum1(), fMomentum2(), fMomentum12(),
72 fHmgg(0x0), fHmggDifferentSM(0x0),
73 fHmggMaskFrame(0x0), fHmggDifferentSMMaskFrame(0x0),
74 fHOpeningAngle(0x0), fHOpeningAngleDifferentSM(0x0),
75 fHAsymmetry(0x0), fHAsymmetryDifferentSM(0x0),
77 fhClusterTime(0x0), fhClusterPairDiffTime(0x0)
79 for(
Int_t iMod=0; iMod < AliEMCALGeoParams::fgkEMCALModules; iMod++)
81 for(
Int_t iX=0; iX<24; iX++)
83 for(
Int_t iZ=0; iZ<48; iZ++)
105 for(
Int_t iSMPair = 0; iSMPair < AliEMCALGeoParams::fgkEMCALModules/2; iSMPair++)
112 for(
Int_t iSMPair = 0; iSMPair < AliEMCALGeoParams::fgkEMCALModules-2; iSMPair++)
119 for(
Int_t iSM = 0; iSM < AliEMCALGeoParams::fgkEMCALModules; iSM++)
203 for(
Int_t iMod=0; iMod < AliEMCALGeoParams::fgkEMCALModules; iMod++)
205 for(
Int_t iX=0; iX<24; iX++)
207 for(
Int_t iZ=0; iZ<48; iZ++)
209 fHmpi0[iMod][iZ][iX] = 0 ;
229 for(
Int_t iSMPair = 0; iSMPair < AliEMCALGeoParams::fgkEMCALModules/2; iSMPair++)
236 for(
Int_t iSMPair = 0; iSMPair < AliEMCALGeoParams::fgkEMCALModules-2; iSMPair++)
243 for(
Int_t iSM = 0; iSM < AliEMCALGeoParams::fgkEMCALModules; iSM++)
279 DefineOutput(1, TList::Class());
305 if(
fRecoUtils->GetParticleType()!=AliEMCALRecoUtils::kPhoton)
306 AliFatal(Form(
"Wrong particle type for cluster position recalculation! = %d\n",
fRecoUtils->GetParticleType()));
308 AliDebug(1,Form(
"It will use fLogWeight %.3f",
fLogWeight));
320 else if (e1i >
fEmax)
continue;
322 else if (c1->GetNCells() <
fMinNCells)
continue;
328 if(
fRecoUtils->ClusterContainsBadChannel(
fEMCALGeo, c1->GetCellsAbsId(), c1->GetNCells()))
continue;
332 AliInfo(Form(
"Std : i %d, E %f, dispersion %f, m02 %f, m20 %f\n",c1->GetID(),c1->E(),c1->GetDispersion(),c1->GetM02(),c1->GetM20()));
333 c1->GetPosition(pos);
334 AliInfo(Form(
"Std : i %d, x %f, y %f, z %f\n",c1->GetID(), pos[0], pos[1], pos[2]));
345 AliDebug(2,Form(
"Energy: after recalibration %f",c1->E()));
351 c1->SetE(
fRecoUtils->CorrectClusterEnergyLinearity(c1));
353 AliDebug(2,Form(
"after linearity correction %f",c1->E()));
358 AliDebug(2,Form(
"after smearing %f\n",c1->E()));
362 AliInfo(Form(
"Cor : i %d, E %f, dispersion %f, m02 %f, m20 %f\n",c1->GetID(),c1->E(),c1->GetDispersion(),c1->GetM02(),c1->GetM20()));
363 c1->GetPosition(pos);
364 AliInfo(Form(
"Cor : i %d, x %f, y %f, z %f\n",c1->GetID(), pos[0], pos[1], pos[2]));
387 Int_t bc = InputEvent()->GetBunchCrossNumber();
388 Int_t nSM = (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules();
390 Int_t nbClusterInTopoHisto[nSM];
392 for(
Int_t iSM = 0; iSM < nSM; iSM++)
394 nbClusterInTopoHisto[iSM] = 0;
402 if(
fRecoUtils->ClusterContainsBadChannel(
fEMCALGeo, c1->GetCellsAbsId(), c1->GetNCells()))
continue;
409 else if (e1i >
fEmax)
continue;
413 else if (c1->GetNCells() <
fMinNCells)
continue;
421 AliInfo(Form(
"IMA : i %d, E %f, dispersion %f, m02 %f, m20 %f",c1->GetID(),e1i,c1->GetDispersion(),c1->GetM02(),c1->GetM20()));
422 c1->GetPosition(pos);
423 AliInfo(Form(
"IMA : i %d, x %f, y %f, z %f",c1->GetID(), pos[0], pos[1], pos[2]));
448 AliEMCALGeometry* geom = AliEMCALGeometry::GetInstance();
450 for(
Int_t iCell = 0; iCell < c1->GetNCells(); iCell++)
452 Int_t iSupMod = -1, iIeta =-1, iIphi =-1, iTower =-1, ietaCell =-1, iphiCell =-1;
454 Int_t CellID = c1->GetCellsAbsId()[iCell];
455 geom->GetCellIndex(CellID,iSupMod,iTower,iIphi,iIeta);
456 geom->GetCellPhiEtaIndexInSModule(iSupMod,iTower,iIphi,iIeta,iphiCell,ietaCell);
460 Float_t AmpFraction = amp / e1i;
462 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));
464 switch (iPosInNoisyQuartet) {
489 if(amp && AmpFraction)
491 nbClusterInTopoHisto[iSupMod1] = nbClusterInTopoHisto[iSupMod1] + 1;
505 else if (e2i >
fEmax)
continue;
509 else if (c2->GetNCells() <
fMinNCells)
continue;
534 if(TMath::Abs(time1-time2) >
fDTimeCut)
continue;
536 if(invmass < fMaxBin && invmass >
fMinBin )
551 if(iSupMod1==iSupMod2)
580 for(
Int_t i = 0; i < nSM/2; i++)
583 if((iSupMod1==j && iSupMod2==j+1) || (iSupMod1==j+1 && iSupMod2==j))
591 for(
Int_t i = 0; i < nSM-2; i++)
593 if((iSupMod1==i && iSupMod2==i+2) || (iSupMod1==i+2 && iSupMod2==i))
610 for(
Int_t i = 0; i < nSM/2; i++)
617 for(
Int_t i = 0; i < nSM-2; i++)
628 for(
Int_t icell = 0; icell < c1->GetNCells(); icell++)
630 Int_t absID = c1->GetCellAbsId(icell);
634 for(
Int_t icell = 0; icell < c2->GetNCells(); icell++)
636 Int_t absID = c2->GetCellAbsId(icell);
648 if(iSupMod1==iSupMod2)
659 if((iSupMod1==0 && iSupMod2==2) || (iSupMod1==2 && iSupMod2==0))
665 if((iSupMod1==1 && iSupMod2==3) || (iSupMod1==3 && iSupMod2==1))
671 if((iSupMod1==0 && iSupMod2==1) || (iSupMod1==1 && iSupMod2==0))
676 if((iSupMod1==2 && iSupMod2==3) || (iSupMod1==3 && iSupMod2==2))
687 if(
fSameSM && iSupMod1!=iSupMod2)
continue;
692 fHmpi0[iSupMod1][ieta1][iphi1]->Fill(invmass);
693 fHmpi0[iSupMod2][ieta2][iphi2]->Fill(invmass);
718 for (
Int_t j = -fGroupNCells; j < fGroupNCells+1; j++)
720 Int_t absId11 =
fEMCALGeo->GetAbsCellIdFromCellIndexes(iSupMod1, iphi1+j, ieta1+i);
721 Int_t absId22 =
fEMCALGeo->GetAbsCellIdFromCellIndexes(iSupMod2, iphi2+j, ieta2+i);
726 for(
Int_t icell = 0; icell < c1->GetNCells(); icell++)
728 if(c1->GetCellsAbsId()[icell] == absId11) ok1=kTRUE;
731 for(
Int_t icell = 0; icell < c2->GetNCells(); icell++)
733 if(c2->GetCellsAbsId()[icell] == absId22) ok2=kTRUE;
736 if(ok1 && (ieta1+i >= 0) && (iphi1+j >= 0) && (ieta1+i < 48) && (iphi1+j < 24))
738 fHmpi0[iSupMod1][ieta1+i][iphi1+j]->Fill(invmass);
742 if(ok2 && (ieta2+i >= 0) && (iphi2+j >= 0) && (ieta2+i < 48) && (iphi2+j < 24))
744 fHmpi0[iSupMod2][ieta2+i][iphi2+j]->Fill(invmass);
751 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",
752 iSupMod1,iphi1,ieta1,iSupMod2,iphi2,ieta2,
fMomentum12.M(),e1i,c1->E(),e2i,c2->E()));
757 for(
Int_t iSM = 0; iSM < nSM; iSM++)
759 AliDebug(2,Form(
"nbClusterInTopo = %i\n",nbClusterInTopoHisto[iSM]));
761 if(nbClusterInTopoHisto[iSM] == 0)
continue;
792 if ( !calibFactorsFile ) AliFatal(
"Cannot recover the calibration factors");
794 for(
Int_t ism = 0; ism <
fEMCALGeo->GetNumberOfSuperModules(); ism++)
796 TH2F * histo = (
TH2F*) calibFactorsFile->Get(Form(
"EMCALRecalFactors_SM%d",ism));
797 printf(
"In AliAnalysisTaskEMCALPi0CalibSelection::InitEnergyCalibrationFactors \n ---Recover calibration factor for : EMCALRecalFactors_SM%d %p\n",ism,histo);
800 fRecoUtils->SetEMCALChannelRecalibrationFactors(ism,histo);
802 AliWarning(Form(
"Null histogram with calibration factors for SM%d, 1 will be used for the full SM!",ism));
812 Int_t runnumber = InputEvent()->GetRunNumber() ;
821 if (runnumber < 140000)
fImportGeometryFilePath = AliDataFile::GetFileNameOADB(
"EMCAL/geometry_2010.root").data();
822 else if(runnumber < 171000)
fImportGeometryFilePath = AliDataFile::GetFileNameOADB(
"EMCAL/geometry_2011.root").data();
823 else if(runnumber < 198000)
fImportGeometryFilePath = AliDataFile::GetFileNameOADB(
"EMCAL/geometry_2012.root").data();
835 AliInfo(
"Load user defined EMCAL geometry matrices");
837 AliOADBContainer emcGeoMat(
"AliEMCALgeo");
840 emcGeoMat.InitFromFile(Form(
"%s/EMCALlocal2master.root",
fOADBFilePath.Data()),
"AliEMCALgeo");
842 emcGeoMat.InitFromFile(AliDataFile::GetFileNameOADB(
"EMCAL/EMCALlocal2master.root").data(),
"AliEMCALgeo");
846 for(
Int_t mod = 0; mod < (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules(); mod++)
850 AliDebug(1,Form(
"EMCAL matrices SM %d, %p",mod,((TGeoHMatrix*) matEMCAL->At(mod))));
853 fMatrix[mod] = (TGeoHMatrix*) matEMCAL->At(mod) ;
865 AliWarning(Form(
"Set matrix for SM %d from gGeoManager",mod));
866 fEMCALGeo->SetMisalMatrix(
fEMCALGeo->GetMatrixForSuperModuleFromGeoManager(mod),mod) ;
870 AliError(Form(
"Alignment matrix for SM %d is not available",mod));
874 else if(!gGeoManager)
876 AliInfo(
"Get geo matrices from data");
878 if(!strcmp(InputEvent()->GetName(),
"AliAODEvent"))
880 AliWarning(
"Use ideal geometry, values geometry matrix not kept in AODs");
884 AliDebug(1,
"AliAnalysisTaskEMCALClusterize Load Misaligned matrices");
886 for(
Int_t mod=0; mod < (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules(); mod++)
888 if(InputEvent()->GetEMCALMatrix(mod))
891 InputEvent()->GetEMCALMatrix(mod)->Print();
893 fEMCALGeo->SetMisalMatrix(InputEvent()->GetEMCALMatrix(mod),mod) ;
901 for(
Int_t mod = 0; mod < (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules(); mod++)
903 AliWarning(Form(
"Set matrix for SM %d from gGeoManager",mod));
904 fEMCALGeo->SetMisalMatrix(
fEMCALGeo->GetMatrixForSuperModuleFromGeoManager(mod),mod) ;
916 if(!
fRecoUtils->IsRunDepRecalibrationOn())
return;
918 AliOADBContainer *contRFTD=
new AliOADBContainer(
"");
921 contRFTD->InitFromFile(Form(
"%s/EMCALTemperatureCorrCalib.root",
fOADBFilePath.Data()),
"AliEMCALRunDepTempCalibCorrections");
923 contRFTD->InitFromFile(AliDataFile::GetFileNameOADB(
"EMCAL/EMCALTemperatureCorrCalib.root").data(),
"AliEMCALRunDepTempCalibCorrections");
925 Int_t runnumber = InputEvent()->GetRunNumber() ;
927 TH1S *htd=(TH1S*)contRFTD->GetObject(runnumber);
932 AliWarning(Form(
"No TemperatureCorrCalib Objects for run: %d",runnumber));
937 Int_t maxEntry = contRFTD->GetNumberOfEntries();
939 while ( (ic < maxEntry) && (contRFTD->UpperLimit(ic) < runnumber) )
945 Int_t closest = lower;
946 if ( (ic<maxEntry) &&
947 (contRFTD->LowerLimit(ic)-runnumber) < (runnumber - contRFTD->UpperLimit(lower)) )
952 AliWarning(Form(
"TemperatureCorrCalib Objects found closest id %d from run: %d",
953 closest, contRFTD->LowerLimit(closest)));
955 htd = (TH1S*) contRFTD->GetObjectByIndex(closest);
961 AliInfo(
"Recalibrate (Temperature) EMCAL");
965 for (
Int_t ism = 0; ism < nSM; ++ism)
967 for (
Int_t icol = 0; icol < 48; ++icol)
969 for (
Int_t irow = 0; irow < 24; ++irow)
973 Int_t absID =
fEMCALGeo->GetAbsCellIdFromCellIndexes(ism, irow, icol);
975 AliDebug(3,Form(
" ism %d, icol %d, irow %d,absID %d - Calib factor %1.5f - ",ism, icol, irow, absID, factor));
977 factor *= htd->GetBinContent(absID) / 10000. ;
979 fRecoUtils->SetEMCALChannelRecalibrationFactor(ism,icol,irow,factor);
981 AliDebug(3,Form(
"T factor %1.5f - final factor %1.5f",
982 htd->GetBinContent(absID) / 10000.,
983 fRecoUtils->GetEMCALChannelRecalibrationFactor(ism,icol,irow)));
988 else AliInfo(
"Do NOT recalibrate EMCAL with T variations, no params TH1");
1000 Int_t nSM = (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules();
1003 const Int_t buffersize = 255;
1004 char hname[buffersize], htitl[buffersize], htitlEnergy[buffersize];
1006 fhNEvents =
new TH1I(
"hNEvents",
"Number of analyzed events" , 1 , 0 , 1 ) ;
1010 fHmgg->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1011 fHmgg->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1029 fHAsymmetry =
new TH2F(
"hasym",
"2-cluster opening angle",100,0.,1.,100,0,10);
1031 fHAsymmetry->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1052 for(
Int_t iSM = 0; iSM < nSM; iSM++)
1054 snprintf(hname, buffersize,
"hmgg_SM%d",iSM);
1055 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d",iSM);
1057 fHmggSM[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1058 fHmggSM[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1061 snprintf(hname, buffersize,
"hmgg_SM%d_MaskFrame",iSM);
1062 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d",iSM);
1068 snprintf(hname, buffersize,
"hmgg_SM%d_Zone1",iSM);
1069 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 1",iSM);
1071 fHmggSM_Zone1[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1072 fHmggSM_Zone1[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1075 snprintf(hname, buffersize,
"hmgg_SM%d_Zone2",iSM);
1076 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 2",iSM);
1078 fHmggSM_Zone2[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1079 fHmggSM_Zone2[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1082 snprintf(hname, buffersize,
"hmgg_SM%d_Zone3",iSM);
1083 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 3",iSM);
1085 fHmggSM_Zone3[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1086 fHmggSM_Zone3[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1089 snprintf(hname, buffersize,
"hmgg_SM%d_Zone4",iSM);
1090 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 4",iSM);
1092 fHmggSM_Zone4[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1093 fHmggSM_Zone4[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1096 snprintf(hname, buffersize,
"hmgg_SM%d_Zone5",iSM);
1097 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 5",iSM);
1099 fHmggSM_Zone5[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1100 fHmggSM_Zone5[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1103 snprintf(hname, buffersize,
"hmgg_SM%d_Zone6",iSM);
1104 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 6",iSM);
1106 fHmggSM_Zone6[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1107 fHmggSM_Zone6[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1110 snprintf(hname, buffersize,
"hmgg_SM%d_Zone7",iSM);
1111 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 7",iSM);
1113 fHmggSM_Zone7[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1114 fHmggSM_Zone7[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1119 snprintf(hname,buffersize,
"hmgg_PairSameSectorSM%d",iSM);
1120 snprintf(htitl,buffersize,
"Two-gamma inv. mass for SM pair Sector: %d",iSM);
1126 snprintf(hname,buffersize,
"hmgg_PairSameSectorSM%d_MaskFrame",iSM);
1127 snprintf(htitl,buffersize,
"Two-gamma inv. mass for SM pair Sector: %d",iSM);
1134 Form(
"cluster pair time difference vs E, Sector %d",iSM),
1135 100,0,10, 200,-100,100);
1143 snprintf(hname,buffersize,
"hmgg_PairSameSideSM%d",iSM);
1144 snprintf(htitl,buffersize,
"Two-gamma inv. mass for SM pair Sector: %d",iSM);
1150 snprintf(hname,buffersize,
"hmgg_PairSameSideSM%d_MaskFrame",iSM);
1151 snprintf(htitl,buffersize,
"Two-gamma inv. mass for SM pair Sector: %d",iSM);
1158 Form(
"cluster pair time difference vs E, Side %d",iSM),
1159 100,0,10, 200,-100,100);
1165 snprintf(hname, buffersize,
"hopang_SM%d",iSM);
1166 snprintf(htitl, buffersize,
"Opening angle for super mod %d",iSM);
1172 snprintf(hname,buffersize,
"hopang_PairSM%d",iSM);
1173 snprintf(htitl,buffersize,
"Opening angle for SM pair: %d",iSM);
1179 snprintf(hname, buffersize,
"hasym_SM%d",iSM);
1180 snprintf(htitl, buffersize,
"Asymmetry for super mod %d",iSM);
1183 fHAsymmetrySM[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1186 snprintf(hname,buffersize,
"hasym_PairSM%d",iSM);
1187 snprintf(htitl,buffersize,
"Asymmetry for SM pair: %d",iSM);
1197 Form(
"Entries in grid of cells in Module %d",iSM),
1198 colmax+2,-1.5,colmax+0.5, rowmax+2,-1.5,rowmax+0.5);
1204 Form(
"Accumulated energy in grid of cells in Module %d",iSM),
1205 colmax+2,-1.5,colmax+0.5, rowmax+2,-1.5,rowmax+0.5);
1211 Form(
"Accumulated asymmetry in grid of cells in Module %d",iSM),
1212 colmax+2,-1.5,colmax+0.5, rowmax+2,-1.5,rowmax+0.5);
1218 colmax+2,-1.5,colmax+0.5, rowmax+2,-1.5,rowmax+0.5);
1223 fhClusterTimeSM[iSM] =
new TH2F(Form(
"hClusterTime_SM%d",iSM),
"cluster time vs E",100,0,10, 200,-1000,1000);
1229 Form(
"cluster pair time difference vs E, SM %d",iSM),
1230 100,0,10, 200,-100,100);
1240 Form(
"cluster topology for cluster in position 0 in noisy quartet, SM %d",iSM),
1241 21,-10.5,10.5, 21,-10.5,10.5);
1247 Form(
"cluster topology for cluster in position 1 in noisy quartet, SM %d",iSM),
1248 21,-10.5,10.5, 21,-10.5,10.5);
1254 Form(
"cluster topology for cluster in position 2 in noisy quartet, SM %d",iSM),
1255 21,-10.5,10.5, 21,-10.5,10.5);
1261 Form(
"cluster topology for cluster in position 3 in noisy quartet, SM %d",iSM),
1262 21,-10.5,10.5, 21,-10.5,10.5);
1268 Form(
"cluster topology for cluster in position 0 in noisy quartet, SM %d",iSM),
1269 21,-10.5,10.5, 21,-10.5,10.5);
1275 Form(
"cluster topology for cluster in position 1 in noisy quartet, SM %d",iSM),
1276 21,-10.5,10.5, 21,-10.5,10.5);
1282 Form(
"cluster topology for cluster in position 2 in noisy quartet, SM %d",iSM),
1283 21,-10.5,10.5, 21,-10.5,10.5);
1289 Form(
"cluster topology for cluster in position 3 in noisy quartet, SM %d",iSM),
1290 21,-10.5,10.5, 21,-10.5,10.5);
1297 Form(
"cluster topology for cluster in position 0 in noisy quartet, SM %d",iSM),
1298 21,-10.5,10.5, 21,-10.5,10.5);
1304 Form(
"cluster topology for cluster in position 1 in noisy quartet, SM %d",iSM),
1305 21,-10.5,10.5, 21,-10.5,10.5);
1311 Form(
"cluster topology for cluster in position 2 in noisy quartet, SM %d",iSM),
1312 21,-10.5,10.5, 21,-10.5,10.5);
1318 Form(
"cluster topology for cluster in position 3 in noisy quartet, SM %d",iSM),
1319 21,-10.5,10.5, 21,-10.5,10.5);
1326 Int_t nchannels = nSM*AliEMCALGeoParams::fgkEMCALRows*AliEMCALGeoParams::fgkEMCALCols;
1327 for(
Int_t ibc = 0; ibc < 4; ibc++)
1329 fHTpi0[ibc] =
new TH2F(Form(
"hTime_BC%d",ibc),Form(
"Time of cell clusters under pi0 peak, bunch crossing %d",ibc),
1332 fHTpi0[ibc]->SetYTitle(
"time (ns)");
1333 fHTpi0[ibc]->SetXTitle(
"abs. Id. ");
1336 fhClusterTime =
new TH2F(
"hClusterTime",
"cluster time vs E",100,0,10, 100,0,1000);
1346 for(
Int_t iMod=0; iMod < nSM; iMod++)
1348 for(
Int_t iRow=0; iRow < AliEMCALGeoParams::fgkEMCALRows; iRow++)
1350 for(
Int_t iCol=0; iCol < AliEMCALGeoParams::fgkEMCALCols; iCol++)
1352 snprintf(hname,buffersize,
"%d_%d_%d",iMod,iCol,iRow);
1353 snprintf(htitl,buffersize,
"Two-gamma inv. mass for super mod %d, cell(col,row)=(%d,%d)",iMod,iCol,iRow);
1355 fHmpi0[iMod][iCol][iRow]->SetXTitle(
"mass (MeV/c^{2})");
1360 snprintf(htitlEnergy,buffersize,
"Energy for super mod %d, cell(col,row)=(%d,%d)",iMod,iCol,iRow);
1362 fhEnergy[iMod][iCol][iRow]->SetXTitle(
"E (GeV)");
1425 if((irow >= 2 && irow <= 21) && ((icol >= 42 && icol <= 46) || (icol >= 13 && icol <= 37) || (icol >= 1 && icol <= 9)))
1427 if((irow >= 2 && irow <= 3) || (irow >= 20 && irow <= 21))
1436 if((irow >= 2 && irow <= 21) && ((icol >= 1 && icol <= 5) || (icol >= 10 && icol <= 34) || (icol >= 38 && icol <= 46)))
1438 if((irow >= 2 && irow <= 3) || (irow >= 20 && irow <= 21))
1470 if((irow >= 2 && irow <= 21) && ((icol >= 42 && icol <= 46) || (icol >= 13 && icol <= 37) || (icol >= 1 && icol <= 9)))
1472 if((irow >= 2 && irow <= 3) || (irow >= 20 && irow <= 21))
1485 if((irow >= 2 && irow <= 21) && ((icol >= 1 && icol <= 5) || (icol >= 10 && icol <= 34) || (icol >= 38 && icol <= 46)))
1487 if((irow >= 2 && irow <= 3) || (irow >= 20 && irow <= 21))
1523 if((irow >= 2 && irow <= 21) && ((icol >= 42 && icol <= 46) || (icol >= 13 && icol <= 37) || (icol >= 1 && icol <= 9)))
1525 if((icol >= 1 && icol <= 3) || (icol >= 44 && icol <= 46))
1534 if((irow >= 2 && irow <= 21) && ((icol >= 1 && icol <= 5) || (icol >= 10 && icol <= 34) || (icol >= 38 && icol <= 46)))
1536 if((icol >= 1 && icol <= 3) || (icol >= 44 && icol <= 46))
1568 if((irow >= 2 && irow <= 21) && ((icol >= 42 && icol <= 46) || (icol >= 13 && icol <= 37) || (icol >= 1 && icol <= 9)))
1570 if((icol >= 1 && icol <= 3) || (icol >= 44 && icol <= 46))
1583 if((irow >= 2 && irow <= 21) && ((icol >= 1 && icol <= 5) || (icol >= 10 && icol <= 34) || (icol >= 38 && icol <= 46)))
1585 if((icol >= 1 && icol <= 3) || (icol >= 44 && icol <= 46))
1624 if(((icol-col0)*(icol-col0)) / (a*a) + ((irow-row0)*(irow-row0) / (b*b)) > 1)
1660 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))
1694 if(((icol-col0)*(icol-col0)) / (a*a) + ((irow-row0)*(irow-row0) / (b*b)) < 1)
1722 if (esdevent) triggerClass = esdevent->GetFiredTriggerClasses();
1723 else if(aodevent) triggerClass = aodevent->GetFiredTriggerClasses();
1725 AliDebug(1,Form(
"Event %d, FiredClass %s",
1730 AliDebug(1,
"Reject event!");
1734 AliDebug(1,
"Accept event!");
1739 AliVEvent*
event = 0;
1741 else event = InputEvent();
1745 AliWarning(
"Input event not available!");
1749 AliDebug(1,Form(
"<<< %s: Event %d >>>",event->GetName(), (
Int_t)Entry()));
1753 event->GetPrimaryVertex()->GetXYZ(
fVertex) ;
1796 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",
1801 printf(
"Cluster maximal cell away from border at least %d cells\n",
fRecoUtils->GetNumberOfCellsFromEMCALBorder()) ;
1805 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",
1840 else AliWarning(
"Mask column not set, position larger than allocated set size first") ;
1887 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 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...
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.