14 #include <TRefArray.h> 17 #include <TGeoManager.h> 22 #include "AliAODEvent.h" 23 #include "AliESDEvent.h" 24 #include "AliEMCALGeometry.h" 25 #include "AliVCluster.h" 26 #include "AliVCaloCells.h" 27 #include "AliEMCALRecoUtils.h" 28 #include "AliOADBContainer.h" 39 fEMCALGeo(0x0), fLoadMatrices(0),
40 fEMCALGeoName(
"EMCAL_COMPLETE12SMV1_DCAL_8SM"),
42 fRecoUtils(new AliEMCALRecoUtils),
43 fOADBFilePath(
""), fCalibFilePath(
""),
44 fCorrectClusters(kFALSE), fRecalPosition(kTRUE),
45 fCaloClustersArr(0x0), fEMCALCells(0x0),
47 fOutputContainer(0x0),
48 fVertex(), fFilteredInput(kFALSE),
49 fImportGeometryFromFile(1), fImportGeometryFilePath(
""),
50 fEmin(0.5), fEmax(15.),
51 fEBkgmin(0.5), fEBkgmax(15.),
52 fL0min(0.01), fL0max(0.5),
53 fL0Bkgmin(1.0), fL0Bkgmax(3.0),
54 fOpAnglemin(0.), fOpAnglemax(3.0),
55 fDTimeCut(100.), fTimeMax(1000000), fTimeMin(-1000000),
56 fAsyCut(1.), fMinNCells(2), fGroupNCells(0),
57 fLogWeight(4.5), fSameSM(kFALSE),
58 fNMaskCellColumns(11), fMaskCellColumns(0x0),
59 fSelectOnlyCellSignalOutOfCollision(0),
60 fCellEnergyHiso(0), fClusterTopology(0),
61 fSelectOnlyPhotonsInDifferentSM(0),
63 fInvMassCutMin(110.), fInvMassCutMax(160.),
65 fNbins(300), fMinBin(0.), fMaxBin(300.),
66 fNTimeBins(1000), fMinTimeBin(0.), fMaxTimeBin(1000.),
67 fNEnergybins(1000), fMinEnergyBin(0.), fMaxEnergyBin(100.),
69 fMomentum1(), fMomentum2(), fMomentum12(),
71 fHmgg(0x0), fHmggDifferentSM(0x0),
72 fHmggMaskFrame(0x0), fHmggDifferentSMMaskFrame(0x0),
73 fHOpeningAngle(0x0), fHOpeningAngleDifferentSM(0x0),
74 fHAsymmetry(0x0), fHAsymmetryDifferentSM(0x0),
76 fhClusterTime(0x0), fhClusterPairDiffTime(0x0)
78 for(
Int_t iMod=0; iMod < AliEMCALGeoParams::fgkEMCALModules; iMod++)
80 for(
Int_t iX=0; iX<24; iX++)
82 for(
Int_t iZ=0; iZ<48; iZ++)
104 for(
Int_t iSMPair = 0; iSMPair < AliEMCALGeoParams::fgkEMCALModules/2; iSMPair++)
111 for(
Int_t iSMPair = 0; iSMPair < AliEMCALGeoParams::fgkEMCALModules-2; iSMPair++)
118 for(
Int_t iSM = 0; iSM < AliEMCALGeoParams::fgkEMCALModules; iSM++)
202 for(
Int_t iMod=0; iMod < AliEMCALGeoParams::fgkEMCALModules; iMod++)
204 for(
Int_t iX=0; iX<24; iX++)
206 for(
Int_t iZ=0; iZ<48; iZ++)
208 fHmpi0[iMod][iZ][iX] = 0 ;
228 for(
Int_t iSMPair = 0; iSMPair < AliEMCALGeoParams::fgkEMCALModules/2; iSMPair++)
235 for(
Int_t iSMPair = 0; iSMPair < AliEMCALGeoParams::fgkEMCALModules-2; iSMPair++)
242 for(
Int_t iSM = 0; iSM < AliEMCALGeoParams::fgkEMCALModules; iSM++)
278 DefineOutput(1, TList::Class());
304 if(
fRecoUtils->GetParticleType()!=AliEMCALRecoUtils::kPhoton)
305 AliFatal(Form(
"Wrong particle type for cluster position recalculation! = %d\n",
fRecoUtils->GetParticleType()));
307 AliDebug(1,Form(
"It will use fLogWeight %.3f",
fLogWeight));
319 else if (e1i >
fEmax)
continue;
321 else if (c1->GetNCells() <
fMinNCells)
continue;
327 if(
fRecoUtils->ClusterContainsBadChannel(
fEMCALGeo, c1->GetCellsAbsId(), c1->GetNCells()))
continue;
331 AliInfo(Form(
"Std : i %d, E %f, dispersion %f, m02 %f, m20 %f\n",c1->GetID(),c1->E(),c1->GetDispersion(),c1->GetM02(),c1->GetM20()));
332 c1->GetPosition(pos);
333 AliInfo(Form(
"Std : i %d, x %f, y %f, z %f\n",c1->GetID(), pos[0], pos[1], pos[2]));
344 AliDebug(2,Form(
"Energy: after recalibration %f",c1->E()));
350 c1->SetE(
fRecoUtils->CorrectClusterEnergyLinearity(c1));
352 AliDebug(2,Form(
"after linearity correction %f",c1->E()));
357 AliDebug(2,Form(
"after smearing %f\n",c1->E()));
361 AliInfo(Form(
"Cor : i %d, E %f, dispersion %f, m02 %f, m20 %f\n",c1->GetID(),c1->E(),c1->GetDispersion(),c1->GetM02(),c1->GetM20()));
362 c1->GetPosition(pos);
363 AliInfo(Form(
"Cor : i %d, x %f, y %f, z %f\n",c1->GetID(), pos[0], pos[1], pos[2]));
386 Int_t bc = InputEvent()->GetBunchCrossNumber();
387 Int_t nSM = (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules();
389 Int_t nbClusterInTopoHisto[nSM];
391 for(
Int_t iSM = 0; iSM < nSM; iSM++)
393 nbClusterInTopoHisto[iSM] = 0;
401 if(
fRecoUtils->ClusterContainsBadChannel(
fEMCALGeo, c1->GetCellsAbsId(), c1->GetNCells()))
continue;
408 else if (e1i >
fEmax)
continue;
412 else if (c1->GetNCells() <
fMinNCells)
continue;
420 AliInfo(Form(
"IMA : i %d, E %f, dispersion %f, m02 %f, m20 %f",c1->GetID(),e1i,c1->GetDispersion(),c1->GetM02(),c1->GetM20()));
421 c1->GetPosition(pos);
422 AliInfo(Form(
"IMA : i %d, x %f, y %f, z %f",c1->GetID(), pos[0], pos[1], pos[2]));
447 AliEMCALGeometry* geom = AliEMCALGeometry::GetInstance();
449 for(
Int_t iCell = 0; iCell < c1->GetNCells(); iCell++)
451 Int_t iSupMod = -1, iIeta =-1, iIphi =-1, iTower =-1, ietaCell =-1, iphiCell =-1;
453 Int_t CellID = c1->GetCellsAbsId()[iCell];
454 geom->GetCellIndex(CellID,iSupMod,iTower,iIphi,iIeta);
455 geom->GetCellPhiEtaIndexInSModule(iSupMod,iTower,iIphi,iIeta,iphiCell,ietaCell);
459 Float_t AmpFraction = amp / e1i;
461 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));
463 switch (iPosInNoisyQuartet) {
488 if(amp && AmpFraction)
490 nbClusterInTopoHisto[iSupMod1] = nbClusterInTopoHisto[iSupMod1] + 1;
504 else if (e2i >
fEmax)
continue;
508 else if (c2->GetNCells() <
fMinNCells)
continue;
533 if(TMath::Abs(time1-time2) >
fDTimeCut)
continue;
535 if(invmass < fMaxBin && invmass >
fMinBin )
550 if(iSupMod1==iSupMod2)
579 for(
Int_t i = 0; i < nSM/2; i++)
582 if((iSupMod1==j && iSupMod2==j+1) || (iSupMod1==j+1 && iSupMod2==j))
590 for(
Int_t i = 0; i < nSM-2; i++)
592 if((iSupMod1==i && iSupMod2==i+2) || (iSupMod1==i+2 && iSupMod2==i))
609 for(
Int_t i = 0; i < nSM/2; i++)
616 for(
Int_t i = 0; i < nSM-2; i++)
627 for(
Int_t icell = 0; icell < c1->GetNCells(); icell++)
629 Int_t absID = c1->GetCellAbsId(icell);
633 for(
Int_t icell = 0; icell < c2->GetNCells(); icell++)
635 Int_t absID = c2->GetCellAbsId(icell);
647 if(iSupMod1==iSupMod2)
658 if((iSupMod1==0 && iSupMod2==2) || (iSupMod1==2 && iSupMod2==0))
664 if((iSupMod1==1 && iSupMod2==3) || (iSupMod1==3 && iSupMod2==1))
670 if((iSupMod1==0 && iSupMod2==1) || (iSupMod1==1 && iSupMod2==0))
675 if((iSupMod1==2 && iSupMod2==3) || (iSupMod1==3 && iSupMod2==2))
686 if(
fSameSM && iSupMod1!=iSupMod2)
continue;
691 fHmpi0[iSupMod1][ieta1][iphi1]->Fill(invmass);
692 fHmpi0[iSupMod2][ieta2][iphi2]->Fill(invmass);
717 for (
Int_t j = -fGroupNCells; j < fGroupNCells+1; j++)
719 Int_t absId11 =
fEMCALGeo->GetAbsCellIdFromCellIndexes(iSupMod1, iphi1+j, ieta1+i);
720 Int_t absId22 =
fEMCALGeo->GetAbsCellIdFromCellIndexes(iSupMod2, iphi2+j, ieta2+i);
725 for(
Int_t icell = 0; icell < c1->GetNCells(); icell++)
727 if(c1->GetCellsAbsId()[icell] == absId11) ok1=kTRUE;
730 for(
Int_t icell = 0; icell < c2->GetNCells(); icell++)
732 if(c2->GetCellsAbsId()[icell] == absId22) ok2=kTRUE;
735 if(ok1 && (ieta1+i >= 0) && (iphi1+j >= 0) && (ieta1+i < 48) && (iphi1+j < 24))
737 fHmpi0[iSupMod1][ieta1+i][iphi1+j]->Fill(invmass);
741 if(ok2 && (ieta2+i >= 0) && (iphi2+j >= 0) && (ieta2+i < 48) && (iphi2+j < 24))
743 fHmpi0[iSupMod2][ieta2+i][iphi2+j]->Fill(invmass);
750 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",
751 iSupMod1,iphi1,ieta1,iSupMod2,iphi2,ieta2,
fMomentum12.M(),e1i,c1->E(),e2i,c2->E()));
756 for(
Int_t iSM = 0; iSM < nSM; iSM++)
758 AliDebug(2,Form(
"nbClusterInTopo = %i\n",nbClusterInTopoHisto[iSM]));
760 if(nbClusterInTopoHisto[iSM] == 0)
continue;
791 if ( !calibFactorsFile ) AliFatal(
"Cannot recover the calibration factors");
793 for(
Int_t ism = 0; ism <
fEMCALGeo->GetNumberOfSuperModules(); ism++)
795 TH2F * histo = (
TH2F*) calibFactorsFile->Get(Form(
"EMCALRecalFactors_SM%d",ism));
796 printf(
"In AliAnalysisTaskEMCALPi0CalibSelection::InitEnergyCalibrationFactors \n ---Recover calibration factor for : EMCALRecalFactors_SM%d %p\n",ism,histo);
799 fRecoUtils->SetEMCALChannelRecalibrationFactors(ism,histo);
801 AliWarning(Form(
"Null histogram with calibration factors for SM%d, 1 will be used for the full SM!",ism));
811 Int_t runnumber = InputEvent()->GetRunNumber() ;
834 AliInfo(
"Load user defined EMCAL geometry matrices");
836 AliOADBContainer emcGeoMat(
"AliEMCALgeo");
840 emcGeoMat.InitFromFile(Form(
"%s/EMCALlocal2master.root",
fOADBFilePath.Data()),
"AliEMCALgeo");
844 for(
Int_t mod = 0; mod < (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules(); mod++)
848 AliDebug(1,Form(
"EMCAL matrices SM %d, %p",mod,((TGeoHMatrix*) matEMCAL->At(mod))));
851 fMatrix[mod] = (TGeoHMatrix*) matEMCAL->At(mod) ;
863 AliWarning(Form(
"Set matrix for SM %d from gGeoManager",mod));
864 fEMCALGeo->SetMisalMatrix(
fEMCALGeo->GetMatrixForSuperModuleFromGeoManager(mod),mod) ;
868 AliError(Form(
"Alignment matrix for SM %d is not available",mod));
872 else if(!gGeoManager)
874 AliInfo(
"Get geo matrices from data");
876 if(!strcmp(InputEvent()->GetName(),
"AliAODEvent"))
878 AliWarning(
"Use ideal geometry, values geometry matrix not kept in AODs");
882 AliDebug(1,
"AliAnalysisTaskEMCALClusterize Load Misaligned matrices");
884 for(
Int_t mod=0; mod < (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules(); mod++)
886 if(InputEvent()->GetEMCALMatrix(mod))
889 InputEvent()->GetEMCALMatrix(mod)->Print();
891 fEMCALGeo->SetMisalMatrix(InputEvent()->GetEMCALMatrix(mod),mod) ;
899 for(
Int_t mod = 0; mod < (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules(); mod++)
901 AliWarning(Form(
"Set matrix for SM %d from gGeoManager",mod));
902 fEMCALGeo->SetMisalMatrix(
fEMCALGeo->GetMatrixForSuperModuleFromGeoManager(mod),mod) ;
914 if(!
fRecoUtils->IsRunDepRecalibrationOn())
return;
916 AliOADBContainer *contRFTD=
new AliOADBContainer(
"");
918 contRFTD->InitFromFile(Form(
"%s/EMCALTemperatureCorrCalib.root",
fOADBFilePath.Data()),
"AliEMCALRunDepTempCalibCorrections");
920 Int_t runnumber = InputEvent()->GetRunNumber() ;
922 TH1S *htd=(TH1S*)contRFTD->GetObject(runnumber);
927 AliWarning(Form(
"No TemperatureCorrCalib Objects for run: %d",runnumber));
932 Int_t maxEntry = contRFTD->GetNumberOfEntries();
934 while ( (ic < maxEntry) && (contRFTD->UpperLimit(ic) < runnumber) )
940 Int_t closest = lower;
941 if ( (ic<maxEntry) &&
942 (contRFTD->LowerLimit(ic)-runnumber) < (runnumber - contRFTD->UpperLimit(lower)) )
947 AliWarning(Form(
"TemperatureCorrCalib Objects found closest id %d from run: %d",
948 closest, contRFTD->LowerLimit(closest)));
950 htd = (TH1S*) contRFTD->GetObjectByIndex(closest);
956 AliInfo(
"Recalibrate (Temperature) EMCAL");
960 for (
Int_t ism = 0; ism < nSM; ++ism)
962 for (
Int_t icol = 0; icol < 48; ++icol)
964 for (
Int_t irow = 0; irow < 24; ++irow)
968 Int_t absID =
fEMCALGeo->GetAbsCellIdFromCellIndexes(ism, irow, icol);
970 AliDebug(3,Form(
" ism %d, icol %d, irow %d,absID %d - Calib factor %1.5f - ",ism, icol, irow, absID, factor));
972 factor *= htd->GetBinContent(absID) / 10000. ;
974 fRecoUtils->SetEMCALChannelRecalibrationFactor(ism,icol,irow,factor);
976 AliDebug(3,Form(
"T factor %1.5f - final factor %1.5f",
977 htd->GetBinContent(absID) / 10000.,
978 fRecoUtils->GetEMCALChannelRecalibrationFactor(ism,icol,irow)));
983 else AliInfo(
"Do NOT recalibrate EMCAL with T variations, no params TH1");
995 Int_t nSM = (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules();
998 const Int_t buffersize = 255;
999 char hname[buffersize], htitl[buffersize], htitlEnergy[buffersize];
1001 fhNEvents =
new TH1I(
"hNEvents",
"Number of analyzed events" , 1 , 0 , 1 ) ;
1005 fHmgg->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1006 fHmgg->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1024 fHAsymmetry =
new TH2F(
"hasym",
"2-cluster opening angle",100,0.,1.,100,0,10);
1026 fHAsymmetry->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1047 for(
Int_t iSM = 0; iSM < nSM; iSM++)
1049 snprintf(hname, buffersize,
"hmgg_SM%d",iSM);
1050 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d",iSM);
1052 fHmggSM[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1053 fHmggSM[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1056 snprintf(hname, buffersize,
"hmgg_SM%d_MaskFrame",iSM);
1057 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d",iSM);
1063 snprintf(hname, buffersize,
"hmgg_SM%d_Zone1",iSM);
1064 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 1",iSM);
1066 fHmggSM_Zone1[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1067 fHmggSM_Zone1[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1070 snprintf(hname, buffersize,
"hmgg_SM%d_Zone2",iSM);
1071 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 2",iSM);
1073 fHmggSM_Zone2[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1074 fHmggSM_Zone2[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1077 snprintf(hname, buffersize,
"hmgg_SM%d_Zone3",iSM);
1078 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 3",iSM);
1080 fHmggSM_Zone3[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1081 fHmggSM_Zone3[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1084 snprintf(hname, buffersize,
"hmgg_SM%d_Zone4",iSM);
1085 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 4",iSM);
1087 fHmggSM_Zone4[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1088 fHmggSM_Zone4[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1091 snprintf(hname, buffersize,
"hmgg_SM%d_Zone5",iSM);
1092 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 5",iSM);
1094 fHmggSM_Zone5[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1095 fHmggSM_Zone5[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1098 snprintf(hname, buffersize,
"hmgg_SM%d_Zone6",iSM);
1099 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 6",iSM);
1101 fHmggSM_Zone6[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1102 fHmggSM_Zone6[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1105 snprintf(hname, buffersize,
"hmgg_SM%d_Zone7",iSM);
1106 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 7",iSM);
1108 fHmggSM_Zone7[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1109 fHmggSM_Zone7[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1114 snprintf(hname,buffersize,
"hmgg_PairSameSectorSM%d",iSM);
1115 snprintf(htitl,buffersize,
"Two-gamma inv. mass for SM pair Sector: %d",iSM);
1121 snprintf(hname,buffersize,
"hmgg_PairSameSectorSM%d_MaskFrame",iSM);
1122 snprintf(htitl,buffersize,
"Two-gamma inv. mass for SM pair Sector: %d",iSM);
1129 Form(
"cluster pair time difference vs E, Sector %d",iSM),
1130 100,0,10, 200,-100,100);
1138 snprintf(hname,buffersize,
"hmgg_PairSameSideSM%d",iSM);
1139 snprintf(htitl,buffersize,
"Two-gamma inv. mass for SM pair Sector: %d",iSM);
1145 snprintf(hname,buffersize,
"hmgg_PairSameSideSM%d_MaskFrame",iSM);
1146 snprintf(htitl,buffersize,
"Two-gamma inv. mass for SM pair Sector: %d",iSM);
1153 Form(
"cluster pair time difference vs E, Side %d",iSM),
1154 100,0,10, 200,-100,100);
1160 snprintf(hname, buffersize,
"hopang_SM%d",iSM);
1161 snprintf(htitl, buffersize,
"Opening angle for super mod %d",iSM);
1167 snprintf(hname,buffersize,
"hopang_PairSM%d",iSM);
1168 snprintf(htitl,buffersize,
"Opening angle for SM pair: %d",iSM);
1174 snprintf(hname, buffersize,
"hasym_SM%d",iSM);
1175 snprintf(htitl, buffersize,
"Asymmetry for super mod %d",iSM);
1178 fHAsymmetrySM[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1181 snprintf(hname,buffersize,
"hasym_PairSM%d",iSM);
1182 snprintf(htitl,buffersize,
"Asymmetry for SM pair: %d",iSM);
1192 Form(
"Entries in grid of cells in Module %d",iSM),
1193 colmax+2,-1.5,colmax+0.5, rowmax+2,-1.5,rowmax+0.5);
1199 Form(
"Accumulated energy in grid of cells in Module %d",iSM),
1200 colmax+2,-1.5,colmax+0.5, rowmax+2,-1.5,rowmax+0.5);
1206 Form(
"Accumulated asymmetry in grid of cells in Module %d",iSM),
1207 colmax+2,-1.5,colmax+0.5, rowmax+2,-1.5,rowmax+0.5);
1213 colmax+2,-1.5,colmax+0.5, rowmax+2,-1.5,rowmax+0.5);
1218 fhClusterTimeSM[iSM] =
new TH2F(Form(
"hClusterTime_SM%d",iSM),
"cluster time vs E",100,0,10, 200,-1000,1000);
1224 Form(
"cluster pair time difference vs E, SM %d",iSM),
1225 100,0,10, 200,-100,100);
1235 Form(
"cluster topology for cluster in position 0 in noisy quartet, SM %d",iSM),
1236 21,-10.5,10.5, 21,-10.5,10.5);
1242 Form(
"cluster topology for cluster in position 1 in noisy quartet, SM %d",iSM),
1243 21,-10.5,10.5, 21,-10.5,10.5);
1249 Form(
"cluster topology for cluster in position 2 in noisy quartet, SM %d",iSM),
1250 21,-10.5,10.5, 21,-10.5,10.5);
1256 Form(
"cluster topology for cluster in position 3 in noisy quartet, SM %d",iSM),
1257 21,-10.5,10.5, 21,-10.5,10.5);
1263 Form(
"cluster topology for cluster in position 0 in noisy quartet, SM %d",iSM),
1264 21,-10.5,10.5, 21,-10.5,10.5);
1270 Form(
"cluster topology for cluster in position 1 in noisy quartet, SM %d",iSM),
1271 21,-10.5,10.5, 21,-10.5,10.5);
1277 Form(
"cluster topology for cluster in position 2 in noisy quartet, SM %d",iSM),
1278 21,-10.5,10.5, 21,-10.5,10.5);
1284 Form(
"cluster topology for cluster in position 3 in noisy quartet, SM %d",iSM),
1285 21,-10.5,10.5, 21,-10.5,10.5);
1292 Form(
"cluster topology for cluster in position 0 in noisy quartet, SM %d",iSM),
1293 21,-10.5,10.5, 21,-10.5,10.5);
1299 Form(
"cluster topology for cluster in position 1 in noisy quartet, SM %d",iSM),
1300 21,-10.5,10.5, 21,-10.5,10.5);
1306 Form(
"cluster topology for cluster in position 2 in noisy quartet, SM %d",iSM),
1307 21,-10.5,10.5, 21,-10.5,10.5);
1313 Form(
"cluster topology for cluster in position 3 in noisy quartet, SM %d",iSM),
1314 21,-10.5,10.5, 21,-10.5,10.5);
1321 Int_t nchannels = nSM*AliEMCALGeoParams::fgkEMCALRows*AliEMCALGeoParams::fgkEMCALCols;
1322 for(
Int_t ibc = 0; ibc < 4; ibc++)
1324 fHTpi0[ibc] =
new TH2F(Form(
"hTime_BC%d",ibc),Form(
"Time of cell clusters under pi0 peak, bunch crossing %d",ibc),
1327 fHTpi0[ibc]->SetYTitle(
"time (ns)");
1328 fHTpi0[ibc]->SetXTitle(
"abs. Id. ");
1331 fhClusterTime =
new TH2F(
"hClusterTime",
"cluster time vs E",100,0,10, 100,0,1000);
1341 for(
Int_t iMod=0; iMod < nSM; iMod++)
1343 for(
Int_t iRow=0; iRow < AliEMCALGeoParams::fgkEMCALRows; iRow++)
1345 for(
Int_t iCol=0; iCol < AliEMCALGeoParams::fgkEMCALCols; iCol++)
1347 snprintf(hname,buffersize,
"%d_%d_%d",iMod,iCol,iRow);
1348 snprintf(htitl,buffersize,
"Two-gamma inv. mass for super mod %d, cell(col,row)=(%d,%d)",iMod,iCol,iRow);
1350 fHmpi0[iMod][iCol][iRow]->SetXTitle(
"mass (MeV/c^{2})");
1355 snprintf(htitlEnergy,buffersize,
"Energy for super mod %d, cell(col,row)=(%d,%d)",iMod,iCol,iRow);
1357 fhEnergy[iMod][iCol][iRow]->SetXTitle(
"E (GeV)");
1420 if((irow >= 2 && irow <= 21) && ((icol >= 42 && icol <= 46) || (icol >= 13 && icol <= 37) || (icol >= 1 && icol <= 9)))
1422 if((irow >= 2 && irow <= 3) || (irow >= 20 && irow <= 21))
1431 if((irow >= 2 && irow <= 21) && ((icol >= 1 && icol <= 5) || (icol >= 10 && icol <= 34) || (icol >= 38 && icol <= 46)))
1433 if((irow >= 2 && irow <= 3) || (irow >= 20 && irow <= 21))
1465 if((irow >= 2 && irow <= 21) && ((icol >= 42 && icol <= 46) || (icol >= 13 && icol <= 37) || (icol >= 1 && icol <= 9)))
1467 if((irow >= 2 && irow <= 3) || (irow >= 20 && irow <= 21))
1480 if((irow >= 2 && irow <= 21) && ((icol >= 1 && icol <= 5) || (icol >= 10 && icol <= 34) || (icol >= 38 && icol <= 46)))
1482 if((irow >= 2 && irow <= 3) || (irow >= 20 && irow <= 21))
1518 if((irow >= 2 && irow <= 21) && ((icol >= 42 && icol <= 46) || (icol >= 13 && icol <= 37) || (icol >= 1 && icol <= 9)))
1520 if((icol >= 1 && icol <= 3) || (icol >= 44 && icol <= 46))
1529 if((irow >= 2 && irow <= 21) && ((icol >= 1 && icol <= 5) || (icol >= 10 && icol <= 34) || (icol >= 38 && icol <= 46)))
1531 if((icol >= 1 && icol <= 3) || (icol >= 44 && icol <= 46))
1563 if((irow >= 2 && irow <= 21) && ((icol >= 42 && icol <= 46) || (icol >= 13 && icol <= 37) || (icol >= 1 && icol <= 9)))
1565 if((icol >= 1 && icol <= 3) || (icol >= 44 && icol <= 46))
1578 if((irow >= 2 && irow <= 21) && ((icol >= 1 && icol <= 5) || (icol >= 10 && icol <= 34) || (icol >= 38 && icol <= 46)))
1580 if((icol >= 1 && icol <= 3) || (icol >= 44 && icol <= 46))
1619 if(((icol-col0)*(icol-col0)) / (a*a) + ((irow-row0)*(irow-row0) / (b*b)) > 1)
1655 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))
1689 if(((icol-col0)*(icol-col0)) / (a*a) + ((irow-row0)*(irow-row0) / (b*b)) < 1)
1717 if (esdevent) triggerClass = esdevent->GetFiredTriggerClasses();
1718 else if(aodevent) triggerClass = aodevent->GetFiredTriggerClasses();
1720 AliDebug(1,Form(
"Event %d, FiredClass %s",
1725 AliDebug(1,
"Reject event!");
1729 AliDebug(1,
"Accept event!");
1734 AliVEvent*
event = 0;
1736 else event = InputEvent();
1740 AliWarning(
"Input event not available!");
1744 AliDebug(1,Form(
"<<< %s: Event %d >>>",event->GetName(), (
Int_t)Entry()));
1748 event->GetPrimaryVertex()->GetXYZ(
fVertex) ;
1791 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",
1796 printf(
"Cluster maximal cell away from border at least %d cells\n",
fRecoUtils->GetNumberOfCellsFromEMCALBorder()) ;
1800 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",
1835 else AliWarning(
"Mask column not set, position larger than allocated set size first") ;
1882 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.