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" 28 #include "AliOADBContainer.h" 29 #include "AliDataFile.h" 40 fEMCALGeo(0x0), fLoadMatrices(0),
41 fEMCALGeoName(
"EMCAL_COMPLETE12SMV1_DCAL_8SM"),
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());
308 AliDebug(1,Form(
"It will use fLogWeight %.3f",
fLogWeight));
320 else if (e1i >
fEmax)
continue;
322 else if (c1->GetNCells() <
fMinNCells)
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()));
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;
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);
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) ;
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. ;
981 AliDebug(3,Form(
"T factor %1.5f - final factor %1.5f",
982 htd->GetBinContent(absID) / 10000.,
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",
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).
Bool_t IsRunDepRecalibrationOn() const
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.
Bool_t CheckCellFiducialRegion(const AliEMCALGeometry *geom, const AliVCluster *cluster, AliVCaloCells *cells)
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).
void SetEMCALChannelRecalibrationFactor(Int_t iSM, Int_t iCol, Int_t iRow, Double_t c=1)
AliEMCALRecoUtils * fRecoUtils
Access to reconstruction utilities.
AliEMCALGeometry * fEMCALGeo
! EMCAL geometry pointer.
Int_t GetNumberOfCellsFromEMCALBorder() const
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...
Bool_t IsBadChannelsRemovalSwitchedOn() const
Float_t fMinTimeBin
Minimum time bins of invariant mass histograms.
Int_t fNMaskCellColumns
Number of masked columns.
Int_t GetParticleType() const
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.
Bool_t IsRecalibrationOn() const
Some utilities for cluster and cell treatment.
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.
Float_t GetEMCALChannelRecalibrationFactor(Int_t iSM, Int_t iCol, Int_t iRow) const
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.
void RecalculateClusterShowerShapeParameters(const AliEMCALGeometry *geom, AliVCaloCells *cells, AliVCluster *cluster)
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
void RecalibrateClusterEnergy(const AliEMCALGeometry *geom, AliVCluster *cluster, AliVCaloCells *cells, Int_t bc=-1)
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.
Bool_t IsGoodCluster(AliVCluster *cluster, const AliEMCALGeometry *geom, AliVCaloCells *cells, Int_t bc=-1)
TH2F * fhClusterTime
! Timing of clusters vs energy.
void GetMaxEnergyCell(const AliEMCALGeometry *geom, AliVCaloCells *cells, const AliVCluster *clu, Int_t &absId, Int_t &iSupMod, Int_t &ieta, Int_t &iphi, Bool_t &shared)
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 RecalculateClusterPosition(const AliEMCALGeometry *geom, AliVCaloCells *cells, AliVCluster *clu)
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 RecalculateClusterPID(AliVCluster *cluster)
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.
Float_t CorrectClusterEnergyLinearity(AliVCluster *clu)
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.
Bool_t ClusterContainsBadChannel(const AliEMCALGeometry *geom, const UShort_t *cellList, Int_t nCells)
Float_t fOpAnglemin
Minimum cluster opening angle for bkg shape study.
void SetEMCALChannelRecalibrationFactors(const TObjArray *map)
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.