14 #include <TRefArray.h>
17 #include <TGeoManager.h>
22 #include "AliAODEvent.h"
23 #include "AliESDEvent.h"
24 #include "AliEMCALGeometry.h"
25 #include "AliVCluster.h"
26 #include "AliVCaloCells.h"
27 #include "AliEMCALRecoUtils.h"
28 #include "AliOADBContainer.h"
39 fEMCALGeo(0x0), fLoadMatrices(0),
40 fEMCALGeoName(
"EMCAL_COMPLETE12SMV1_DCAL_8SM"),
42 fRecoUtils(new AliEMCALRecoUtils),
43 fOADBFilePath(
""), fCalibFilePath(
""),
44 fCorrectClusters(kFALSE), fRecalPosition(kTRUE),
45 fCaloClustersArr(0x0), fEMCALCells(0x0),
47 fOutputContainer(0x0),
48 fVertex(), fFilteredInput(kFALSE),
49 fImportGeometryFromFile(1), fImportGeometryFilePath(
""),
50 fEmin(0.5), fEmax(15.),
51 fL0min(0.01), fL0max(0.5),
52 fDTimeCut(100.), fTimeMax(1000000), fTimeMin(-1000000),
53 fAsyCut(1.), fMinNCells(2), fGroupNCells(0),
54 fLogWeight(4.5), fSameSM(kFALSE),
55 fNMaskCellColumns(11), fMaskCellColumns(0x0),
56 fInvMassCutMin(110.), fInvMassCutMax(160.),
59 fMinBin(0.), fMaxBin(300.),
61 fMinEnergyBin(0.), fMaxEnergyBin(100.),
62 fNTimeBins(1000), fMinTimeBin(0.), fMaxTimeBin(1000.),
64 fMomentum1(), fMomentum2(), fMomentum12(),
66 fHmgg(0x0), fHmggDifferentSM(0x0),
67 fHmggMaskFrame(0x0), fHmggDifferentSMMaskFrame(0x0),
68 fHOpeningAngle(0x0), fHOpeningAngleDifferentSM(0x0),
69 fHAsymmetry(0x0), fHAsymmetryDifferentSM(0x0),
71 fhClusterTime(0x0), fhClusterPairDiffTime(0x0)
73 for(Int_t iMod=0; iMod < AliEMCALGeoParams::fgkEMCALModules; iMod++)
75 for(Int_t iX=0; iX<24; iX++)
77 for(Int_t iZ=0; iZ<48; iZ++)
99 for(Int_t iSMPair = 0; iSMPair < AliEMCALGeoParams::fgkEMCALModules/2; iSMPair++)
106 for(Int_t iSMPair = 0; iSMPair < AliEMCALGeoParams::fgkEMCALModules-2; iSMPair++)
113 for(Int_t iSM = 0; iSM < AliEMCALGeoParams::fgkEMCALModules; iSM++)
153 AliAnalysisTaskSE(name),
154 fEMCALGeo(0x0), fLoadMatrices(0),
155 fEMCALGeoName(
"EMCAL_COMPLETE12SMV1_DCAL_8SM"),
157 fRecoUtils(new AliEMCALRecoUtils),
158 fOADBFilePath(
""), fCalibFilePath(
""),
159 fCorrectClusters(kFALSE), fRecalPosition(kTRUE),
160 fCaloClustersArr(0x0), fEMCALCells(0x0),
162 fOutputContainer(0x0),
163 fVertex(), fFilteredInput(kFALSE),
164 fImportGeometryFromFile(1), fImportGeometryFilePath(
""),
165 fEmin(0.5), fEmax(15.),
166 fL0min(0.01), fL0max(0.5),
167 fDTimeCut(100.), fTimeMax(1000000), fTimeMin(-1000000),
168 fAsyCut(1.), fMinNCells(2), fGroupNCells(0),
169 fLogWeight(4.5), fSameSM(kFALSE),
170 fNMaskCellColumns(11), fMaskCellColumns(0x0),
171 fInvMassCutMin(110.), fInvMassCutMax(160.),
174 fMinBin(0.), fMaxBin(300.),
176 fMinEnergyBin(0.), fMaxEnergyBin(100.),
177 fNTimeBins(1000), fMinTimeBin(0.), fMaxTimeBin(1000.),
179 fMomentum1(), fMomentum2(), fMomentum12(),
181 fHmgg(0x0), fHmggDifferentSM(0x0),
182 fHmggMaskFrame(0x0), fHmggDifferentSMMaskFrame(0x0),
183 fHOpeningAngle(0x0), fHOpeningAngleDifferentSM(0x0),
184 fHAsymmetry(0x0), fHAsymmetryDifferentSM(0x0),
186 fhClusterTime(0x0), fhClusterPairDiffTime(0x0)
188 for(Int_t iMod=0; iMod < AliEMCALGeoParams::fgkEMCALModules; iMod++)
190 for(Int_t iX=0; iX<24; iX++)
192 for(Int_t iZ=0; iZ<48; iZ++)
194 fHmpi0[iMod][iZ][iX] = 0 ;
214 for(Int_t iSMPair = 0; iSMPair < AliEMCALGeoParams::fgkEMCALModules/2; iSMPair++)
221 for(Int_t iSMPair = 0; iSMPair < AliEMCALGeoParams::fgkEMCALModules-2; iSMPair++)
228 for(Int_t iSM = 0; iSM < AliEMCALGeoParams::fgkEMCALModules; iSM++)
260 DefineOutput(1, TList::Class());
286 if(
fRecoUtils->GetParticleType()!=AliEMCALRecoUtils::kPhoton)
287 AliFatal(Form(
"Wrong particle type for cluster position recalculation! = %d\n",
fRecoUtils->GetParticleType()));
289 AliDebug(1,Form(
"It will use fLogWeight %.3f",
fLogWeight));
291 Float_t pos[]={0,0,0};
297 Float_t e1i = c1->E();
298 if (e1i <
fEmin)
continue;
299 else if (e1i >
fEmax)
continue;
301 else if (c1->GetNCells() <
fMinNCells)
continue;
303 else if (c1->GetM02() <
fL0min || c1->GetM02() >
fL0max)
continue;
305 if(
fRecoUtils->ClusterContainsBadChannel(
fEMCALGeo, c1->GetCellsAbsId(), c1->GetNCells()))
continue;
309 AliInfo(Form(
"Std : i %d, E %f, dispersion %f, m02 %f, m20 %f\n",c1->GetID(),c1->E(),c1->GetDispersion(),c1->GetM02(),c1->GetM20()));
310 c1->GetPosition(pos);
311 AliInfo(Form(
"Std : i %d, x %f, y %f, z %f\n",c1->GetID(), pos[0], pos[1], pos[2]));
322 AliDebug(2,Form(
"Energy: after recalibration %f",c1->E()));
328 c1->SetE(
fRecoUtils->CorrectClusterEnergyLinearity(c1));
330 AliDebug(2,Form(
"after linearity correction %f",c1->E()));
335 AliDebug(2,Form(
"after smearing %f\n",c1->E()));
339 AliInfo(Form(
"Cor : i %d, E %f, dispersion %f, m02 %f, m20 %f\n",c1->GetID(),c1->E(),c1->GetDispersion(),c1->GetM02(),c1->GetM20()));
340 c1->GetPosition(pos);
341 AliInfo(Form(
"Cor : i %d, x %f, y %f, z %f\n",c1->GetID(), pos[0], pos[1], pos[2]));
360 Bool_t shared = kFALSE;
362 Float_t pos[] = {0,0,0};
364 Int_t bc = InputEvent()->GetBunchCrossNumber();
365 Int_t nSM = (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules();
372 if(
fRecoUtils->ClusterContainsBadChannel(
fEMCALGeo, c1->GetCellsAbsId(), c1->GetNCells()))
continue;
374 Float_t e1i = c1->E();
376 if (e1i <
fEmin)
continue;
377 else if (e1i >
fEmax)
continue;
381 else if (c1->GetNCells() <
fMinNCells)
continue;
383 else if (c1->GetM02() <
fL0min || c1->GetM02() >
fL0max)
continue;
387 AliInfo(Form(
"IMA : i %d, E %f, dispersion %f, m02 %f, m20 %f",c1->GetID(),e1i,c1->GetDispersion(),c1->GetM02(),c1->GetM20()));
388 c1->GetPosition(pos);
389 AliInfo(Form(
"IMA : i %d, x %f, y %f, z %f",c1->GetID(), pos[0], pos[1], pos[2]));
403 Double_t time1 = c1->GetTOF()*1.e9;
414 AliEMCALGeometry* geom = AliEMCALGeometry::GetInstance();
416 for(Int_t iCell = 0; iCell < c1->GetNCells(); iCell++)
418 Int_t iSupMod = -1, iIeta =-1, iIphi =-1, iTower =-1;
420 Int_t CellID = c1->GetCellsAbsId()[iCell];
421 geom->GetCellIndex(CellID,iSupMod,iTower,iIphi,iIeta);
422 Float_t AmpFraction = c1->GetCellAmplitudeFraction(CellID);
423 Float_t amp =
fEMCALCells->GetCellAmplitude(CellID);
425 switch (iPosInNoisyQuartet) {
453 Float_t e2i = c2->E();
454 if (e2i <
fEmin)
continue;
455 else if (e2i >
fEmax)
continue;
459 else if (c2->GetNCells() <
fMinNCells)
continue;
461 else if (c2->GetM02() <
fL0min || c2->GetM02() >
fL0max)
continue;
476 Double_t time2 = c2->GetTOF()*1.e9;
482 if(TMath::Abs(time1-time2) >
fDTimeCut)
continue;
484 if(invmass < fMaxBin && invmass >
fMinBin )
499 if(iSupMod1==iSupMod2)
505 Bool_t zone1 =
IsInZone1(iSupMod1,ieta1,iphi1);
506 Bool_t zone2 =
IsInZone2(iSupMod1,ieta1,iphi1);
507 Bool_t zone3 =
IsInZone3(iSupMod1,ieta1,iphi1);
508 Bool_t zone4 =
IsInZone4(iSupMod1,ieta1,iphi1);
509 Bool_t zone5 =
IsInZone5(iSupMod1,ieta1,iphi1);
510 Bool_t zone6 =
IsInZone6(iSupMod1,ieta1,iphi1);
511 Bool_t zone7 =
IsInZone7(iSupMod1,ieta1,iphi1);
528 for(Int_t i = 0; i < nSM/2; i++)
531 if((iSupMod1==j && iSupMod2==j+1) || (iSupMod1==j+1 && iSupMod2==j))
539 for(Int_t i = 0; i < nSM-2; i++)
541 if((iSupMod1==i && iSupMod2==i+2) || (iSupMod1==i+2 && iSupMod2==i))
558 for(Int_t i = 0; i < nSM/2; i++)
565 for(Int_t i = 0; i < nSM-2; i++)
576 for(Int_t icell = 0; icell < c1->GetNCells(); icell++)
578 Int_t absID = c1->GetCellAbsId(icell);
582 for(Int_t icell = 0; icell < c2->GetNCells(); icell++)
584 Int_t absID = c2->GetCellAbsId(icell);
589 Float_t opangle =
fMomentum1.Angle(fMomentum2.Vect())*TMath::RadToDeg();
596 if(iSupMod1==iSupMod2)
607 if((iSupMod1==0 && iSupMod2==2) || (iSupMod1==2 && iSupMod2==0))
613 if((iSupMod1==1 && iSupMod2==3) || (iSupMod1==3 && iSupMod2==1))
619 if((iSupMod1==0 && iSupMod2==1) || (iSupMod1==1 && iSupMod2==0))
624 if((iSupMod1==2 && iSupMod2==3) || (iSupMod1==3 && iSupMod2==2))
635 if(
fSameSM && iSupMod1!=iSupMod2)
continue;
639 fHmpi0[iSupMod1][ieta1][iphi1]->Fill(invmass);
640 fHmpi0[iSupMod2][ieta2][iphi2]->Fill(invmass);
665 for (Int_t j = -fGroupNCells; j < fGroupNCells+1; j++)
667 Int_t absId11 =
fEMCALGeo->GetAbsCellIdFromCellIndexes(iSupMod1, iphi1+j, ieta1+i);
668 Int_t absId22 =
fEMCALGeo->GetAbsCellIdFromCellIndexes(iSupMod2, iphi2+j, ieta2+i);
673 for(Int_t icell = 0; icell < c1->GetNCells(); icell++)
675 if(c1->GetCellsAbsId()[icell] == absId11) ok1=kTRUE;
678 for(Int_t icell = 0; icell < c2->GetNCells(); icell++)
680 if(c2->GetCellsAbsId()[icell] == absId22) ok2=kTRUE;
683 if(ok1 && (ieta1+i >= 0) && (iphi1+j >= 0) && (ieta1+i < 48) && (iphi1+j < 24))
685 fHmpi0[iSupMod1][ieta1+i][iphi1+j]->Fill(invmass);
689 if(ok2 && (ieta2+i >= 0) && (iphi2+j >= 0) && (ieta2+i < 48) && (iphi2+j < 24))
691 fHmpi0[iSupMod2][ieta2+i][iphi2+j]->Fill(invmass);
698 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",
699 iSupMod1,iphi1,ieta1,iSupMod2,iphi2,ieta2,
fMomentum12.M(),e1i,c1->E(),e2i,c2->E()));
719 if ( !calibFactorsFile ) AliFatal(
"Cannot recover the calibration factors");
721 for(Int_t ism = 0; ism <
fEMCALGeo->GetNumberOfSuperModules(); ism++)
723 TH2F * histo = (TH2F*) calibFactorsFile->Get(Form(
"EMCALRecalFactors_SM%d",ism));
724 printf(
"In AliAnalysisTaskEMCALPi0CalibSelection::InitEnergyCalibrationFactors \n ---Recover calibration factor for : EMCALRecalFactors_SM%d %p\n",ism,histo);
727 fRecoUtils->SetEMCALChannelRecalibrationFactors(ism,histo);
729 AliWarning(Form(
"Null histogram with calibration factors for SM%d, 1 will be used for the full SM!",ism));
739 Int_t runnumber = InputEvent()->GetRunNumber() ;
762 AliInfo(
"Load user defined EMCAL geometry matrices");
764 AliOADBContainer emcGeoMat(
"AliEMCALgeo");
768 emcGeoMat.InitFromFile(Form(
"%s/EMCALlocal2master.root",
fOADBFilePath.Data()),
"AliEMCALgeo");
770 TObjArray *matEMCAL=(TObjArray*)emcGeoMat.GetObject(runnumber,
"EmcalMatrices");
772 for(Int_t mod = 0; mod < (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules(); mod++)
776 AliDebug(1,Form(
"EMCAL matrices SM %d, %p",mod,((TGeoHMatrix*) matEMCAL->At(mod))));
779 fMatrix[mod] = (TGeoHMatrix*) matEMCAL->At(mod) ;
791 AliWarning(Form(
"Set matrix for SM %d from gGeoManager",mod));
792 fEMCALGeo->SetMisalMatrix(
fEMCALGeo->GetMatrixForSuperModuleFromGeoManager(mod),mod) ;
796 AliError(Form(
"Alignment matrix for SM %d is not available",mod));
800 else if(!gGeoManager)
802 AliInfo(
"Get geo matrices from data");
804 if(!strcmp(InputEvent()->GetName(),
"AliAODEvent"))
806 AliWarning(
"Use ideal geometry, values geometry matrix not kept in AODs");
810 AliDebug(1,
"AliAnalysisTaskEMCALClusterize Load Misaligned matrices");
812 for(Int_t mod=0; mod < (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules(); mod++)
814 if(InputEvent()->GetEMCALMatrix(mod))
817 InputEvent()->GetEMCALMatrix(mod)->Print();
819 fEMCALGeo->SetMisalMatrix(InputEvent()->GetEMCALMatrix(mod),mod) ;
827 for(Int_t mod = 0; mod < (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules(); mod++)
829 AliWarning(Form(
"Set matrix for SM %d from gGeoManager",mod));
830 fEMCALGeo->SetMisalMatrix(
fEMCALGeo->GetMatrixForSuperModuleFromGeoManager(mod),mod) ;
842 if(!
fRecoUtils->IsRunDepRecalibrationOn())
return;
844 AliOADBContainer *contRFTD=
new AliOADBContainer(
"");
846 contRFTD->InitFromFile(Form(
"%s/EMCALTemperatureCorrCalib.root",
fOADBFilePath.Data()),
"AliEMCALRunDepTempCalibCorrections");
848 Int_t runnumber = InputEvent()->GetRunNumber() ;
850 TH1S *htd=(TH1S*)contRFTD->GetObject(runnumber);
855 AliWarning(Form(
"No TemperatureCorrCalib Objects for run: %d",runnumber));
860 Int_t maxEntry = contRFTD->GetNumberOfEntries();
862 while ( (ic < maxEntry) && (contRFTD->UpperLimit(ic) < runnumber) )
868 Int_t closest = lower;
869 if ( (ic<maxEntry) &&
870 (contRFTD->LowerLimit(ic)-runnumber) < (runnumber - contRFTD->UpperLimit(lower)) )
875 AliWarning(Form(
"TemperatureCorrCalib Objects found closest id %d from run: %d",
876 closest, contRFTD->LowerLimit(closest)));
878 htd = (TH1S*) contRFTD->GetObjectByIndex(closest);
884 AliInfo(
"Recalibrate (Temperature) EMCAL");
886 Int_t nSM =
fEMCALGeo->GetNumberOfSuperModules();
888 for (Int_t ism = 0; ism < nSM; ++ism)
890 for (Int_t icol = 0; icol < 48; ++icol)
892 for (Int_t irow = 0; irow < 24; ++irow)
894 Float_t factor =
fRecoUtils->GetEMCALChannelRecalibrationFactor(ism,icol,irow);
896 Int_t absID =
fEMCALGeo->GetAbsCellIdFromCellIndexes(ism, irow, icol);
898 AliDebug(3,Form(
" ism %d, icol %d, irow %d,absID %d - Calib factor %1.5f - ",ism, icol, irow, absID, factor));
900 factor *= htd->GetBinContent(absID) / 10000. ;
902 fRecoUtils->SetEMCALChannelRecalibrationFactor(ism,icol,irow,factor);
904 AliDebug(3,Form(
"T factor %1.5f - final factor %1.5f",
905 htd->GetBinContent(absID) / 10000.,
906 fRecoUtils->GetEMCALChannelRecalibrationFactor(ism,icol,irow)));
911 else AliInfo(
"Do NOT recalibrate EMCAL with T variations, no params TH1");
923 Int_t nSM = (
fEMCALGeo->GetEMCGeometry())->GetNumberOfSuperModules();
926 const Int_t buffersize = 255;
927 char hname[buffersize], htitl[buffersize], htitlEnergy[buffersize];
929 fhNEvents =
new TH1I(
"hNEvents",
"Number of analyzed events" , 1 , 0 , 1 ) ;
933 fHmgg->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
934 fHmgg->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
942 fHOpeningAngle =
new TH2F(
"hopang",
"2-cluster opening angle",100,0.,50.,100,0,10);
952 fHAsymmetry =
new TH2F(
"hasym",
"2-cluster opening angle",100,0.,1.,100,0,10);
954 fHAsymmetry->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
957 fHAsymmetryDifferentSM =
new TH2F(
"hasymDifferentSM",
"2-cluster opening angle, different SM",100,0,1.,100,0,10);
975 for(Int_t iSM = 0; iSM < nSM; iSM++)
977 snprintf(hname, buffersize,
"hmgg_SM%d",iSM);
978 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d",iSM);
980 fHmggSM[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
981 fHmggSM[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
984 snprintf(hname, buffersize,
"hmgg_SM%d_MaskFrame",iSM);
985 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d",iSM);
991 snprintf(hname, buffersize,
"hmgg_SM%d_Zone1",iSM);
992 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 1",iSM);
994 fHmggSM_Zone1[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
995 fHmggSM_Zone1[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
998 snprintf(hname, buffersize,
"hmgg_SM%d_Zone2",iSM);
999 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 2",iSM);
1001 fHmggSM_Zone2[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1002 fHmggSM_Zone2[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1005 snprintf(hname, buffersize,
"hmgg_SM%d_Zone3",iSM);
1006 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 3",iSM);
1008 fHmggSM_Zone3[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1009 fHmggSM_Zone3[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1012 snprintf(hname, buffersize,
"hmgg_SM%d_Zone4",iSM);
1013 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 4",iSM);
1015 fHmggSM_Zone4[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1016 fHmggSM_Zone4[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1019 snprintf(hname, buffersize,
"hmgg_SM%d_Zone5",iSM);
1020 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 5",iSM);
1022 fHmggSM_Zone5[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1023 fHmggSM_Zone5[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1026 snprintf(hname, buffersize,
"hmgg_SM%d_Zone6",iSM);
1027 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 6",iSM);
1029 fHmggSM_Zone6[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1030 fHmggSM_Zone6[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1033 snprintf(hname, buffersize,
"hmgg_SM%d_Zone7",iSM);
1034 snprintf(htitl, buffersize,
"Two-gamma inv. mass for super mod %d in zone 7",iSM);
1036 fHmggSM_Zone7[iSM]->SetXTitle(
"m_{#gamma #gamma} (MeV/c^{2})");
1037 fHmggSM_Zone7[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1042 snprintf(hname,buffersize,
"hmgg_PairSameSectorSM%d",iSM);
1043 snprintf(htitl,buffersize,
"Two-gamma inv. mass for SM pair Sector: %d",iSM);
1049 snprintf(hname,buffersize,
"hmgg_PairSameSectorSM%d_MaskFrame",iSM);
1050 snprintf(htitl,buffersize,
"Two-gamma inv. mass for SM pair Sector: %d",iSM);
1057 Form(
"cluster pair time difference vs E, Sector %d",iSM),
1058 100,0,10, 200,-100,100);
1066 snprintf(hname,buffersize,
"hmgg_PairSameSideSM%d",iSM);
1067 snprintf(htitl,buffersize,
"Two-gamma inv. mass for SM pair Sector: %d",iSM);
1073 snprintf(hname,buffersize,
"hmgg_PairSameSideSM%d_MaskFrame",iSM);
1074 snprintf(htitl,buffersize,
"Two-gamma inv. mass for SM pair Sector: %d",iSM);
1081 Form(
"cluster pair time difference vs E, Side %d",iSM),
1082 100,0,10, 200,-100,100);
1088 snprintf(hname, buffersize,
"hopang_SM%d",iSM);
1089 snprintf(htitl, buffersize,
"Opening angle for super mod %d",iSM);
1095 snprintf(hname,buffersize,
"hopang_PairSM%d",iSM);
1096 snprintf(htitl,buffersize,
"Opening angle for SM pair: %d",iSM);
1102 snprintf(hname, buffersize,
"hasym_SM%d",iSM);
1103 snprintf(htitl, buffersize,
"Asymmetry for super mod %d",iSM);
1104 fHAsymmetrySM[iSM] =
new TH2F(hname,htitl,100,0.,1.,100,0,10);
1106 fHAsymmetrySM[iSM]->SetYTitle(
"p_{T #gamma #gamma} (GeV/c)");
1109 snprintf(hname,buffersize,
"hasym_PairSM%d",iSM);
1110 snprintf(htitl,buffersize,
"Asymmetry for SM pair: %d",iSM);
1120 Form(
"Entries in grid of cells in Module %d",iSM),
1121 colmax+2,-1.5,colmax+0.5, rowmax+2,-1.5,rowmax+0.5);
1127 Form(
"Accumulated energy in grid of cells in Module %d",iSM),
1128 colmax+2,-1.5,colmax+0.5, rowmax+2,-1.5,rowmax+0.5);
1134 Form(
"Accumulated asymmetry in grid of cells in Module %d",iSM),
1135 colmax+2,-1.5,colmax+0.5, rowmax+2,-1.5,rowmax+0.5);
1140 fhTowerDecayPhotonHitMaskFrame[iSM] =
new TH2F (Form(
"hTowerDecPhotonHit_Mod%d_MaskFrame",iSM),Form(
"Entries in grid of cells in Module %d",iSM),
1141 colmax+2,-1.5,colmax+0.5, rowmax+2,-1.5,rowmax+0.5);
1146 fhClusterTimeSM[iSM] =
new TH2F(Form(
"hClusterTime_SM%d",iSM),
"cluster time vs E",100,0,10, 200,-1000,1000);
1152 Form(
"cluster pair time difference vs E, SM %d",iSM),
1153 100,0,10, 200,-100,100);
1163 Form(
"cluster topology for cluster in position 0 in noisy quartet, SM %d",iSM),
1164 20,-10,10, 20,-10,10);
1170 Form(
"cluster topology for cluster in position 1 in noisy quartet, SM %d",iSM),
1171 20,-10,10, 20,-10,10);
1177 Form(
"cluster topology for cluster in position 2 in noisy quartet, SM %d",iSM),
1178 20,-10,10, 20,-10,10);
1184 Form(
"cluster topology for cluster in position 3 in noisy quartet, SM %d",iSM),
1185 20,-10,10, 20,-10,10);
1192 Form(
"cluster topology for cluster in position 0 in noisy quartet, SM %d",iSM),
1193 20,-10,10, 20,-10,10);
1199 Form(
"cluster topology for cluster in position 1 in noisy quartet, SM %d",iSM),
1200 20,-10,10, 20,-10,10);
1206 Form(
"cluster topology for cluster in position 2 in noisy quartet, SM %d",iSM),
1207 20,-10,10, 20,-10,10);
1213 Form(
"cluster topology for cluster in position 3 in noisy quartet, SM %d",iSM),
1214 20,-10,10, 20,-10,10);
1221 Int_t nchannels = nSM*AliEMCALGeoParams::fgkEMCALRows*AliEMCALGeoParams::fgkEMCALCols;
1222 for(Int_t ibc = 0; ibc < 4; ibc++)
1224 fHTpi0[ibc] =
new TH2F(Form(
"hTime_BC%d",ibc),Form(
"Time of cell clusters under pi0 peak, bunch crossing %d",ibc),
1227 fHTpi0[ibc]->SetYTitle(
"time (ns)");
1228 fHTpi0[ibc]->SetXTitle(
"abs. Id. ");
1231 fhClusterTime =
new TH2F(
"hClusterTime",
"cluster time vs E",100,0,10, 100,0,1000);
1236 fhClusterPairDiffTime =
new TH2F(
"hClusterPairDiffTime",
"cluster pair time difference vs E",100,0,10, 800,-400,400);
1241 for(Int_t iMod=0; iMod < nSM; iMod++)
1243 for(Int_t iRow=0; iRow < AliEMCALGeoParams::fgkEMCALRows; iRow++)
1245 for(Int_t iCol=0; iCol < AliEMCALGeoParams::fgkEMCALCols; iCol++)
1247 snprintf(hname,buffersize,
"%d_%d_%d",iMod,iCol,iRow);
1248 snprintf(htitl,buffersize,
"Two-gamma inv. mass for super mod %d, cell(col,row)=(%d,%d)",iMod,iCol,iRow);
1250 fHmpi0[iMod][iCol][iRow]->SetXTitle(
"mass (MeV/c^{2})");
1255 snprintf(htitlEnergy,buffersize,
"Energy for super mod %d, cell(col,row)=(%d,%d)",iMod,iCol,iRow);
1257 fhEnergy[iMod][iCol][iRow]->SetXTitle(
"E (GeV)");
1320 if((irow >= 2 && irow <= 21) && ((icol >= 42 && icol <= 46) || (icol >= 13 && icol <= 37) || (icol >= 1 && icol <= 9)))
1322 if((irow >= 2 && irow <= 3) || (irow >= 20 && irow <= 21))
1331 if((irow >= 2 && irow <= 21) && ((icol >= 1 && icol <= 5) || (icol >= 10 && icol <= 34) || (icol >= 38 && icol <= 46)))
1333 if((irow >= 2 && irow <= 3) || (irow >= 20 && irow <= 21))
1365 if((irow >= 2 && irow <= 21) && ((icol >= 42 && icol <= 46) || (icol >= 13 && icol <= 37) || (icol >= 1 && icol <= 9)))
1367 if((irow >= 2 && irow <= 3) || (irow >= 20 && irow <= 21))
1380 if((irow >= 2 && irow <= 21) && ((icol >= 1 && icol <= 5) || (icol >= 10 && icol <= 34) || (icol >= 38 && icol <= 46)))
1382 if((irow >= 2 && irow <= 3) || (irow >= 20 && irow <= 21))
1418 if((irow >= 2 && irow <= 21) && ((icol >= 42 && icol <= 46) || (icol >= 13 && icol <= 37) || (icol >= 1 && icol <= 9)))
1420 if((icol >= 1 && icol <= 3) || (icol >= 44 && icol <= 46))
1429 if((irow >= 2 && irow <= 21) && ((icol >= 1 && icol <= 5) || (icol >= 10 && icol <= 34) || (icol >= 38 && icol <= 46)))
1431 if((icol >= 1 && icol <= 3) || (icol >= 44 && icol <= 46))
1463 if((irow >= 2 && irow <= 21) && ((icol >= 42 && icol <= 46) || (icol >= 13 && icol <= 37) || (icol >= 1 && icol <= 9)))
1465 if((icol >= 1 && icol <= 3) || (icol >= 44 && icol <= 46))
1478 if((irow >= 2 && irow <= 21) && ((icol >= 1 && icol <= 5) || (icol >= 10 && icol <= 34) || (icol >= 38 && icol <= 46)))
1480 if((icol >= 1 && icol <= 3) || (icol >= 44 && icol <= 46))
1512 Float_t col0 = 47/2;
1513 Float_t row0 = 23/2;
1519 if(((icol-col0)*(icol-col0)) / (a*a) + ((irow-row0)*(irow-row0) / (b*b)) > 1)
1546 Float_t col0 = 47/2;
1547 Float_t row0 = 23/2;
1550 Float_t aLarge = 3-col0;
1551 Float_t bLarge = 2-row0;
1552 Float_t aSmall = 16-col0;
1553 Float_t bSmall = 7-row0;
1555 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))
1582 Float_t col0 = 47/2;
1583 Float_t row0 = 23/2;
1586 Float_t a = 16-col0;
1589 if(((icol-col0)*(icol-col0)) / (a*a) + ((irow-row0)*(irow-row0) / (b*b)) < 1)
1613 AliESDEvent* esdevent =
dynamic_cast<AliESDEvent*
> (InputEvent());
1614 AliAODEvent* aodevent =
dynamic_cast<AliAODEvent*
> (InputEvent());
1616 TString triggerClass =
"";
1617 if (esdevent) triggerClass = esdevent->GetFiredTriggerClasses();
1618 else if(aodevent) triggerClass = aodevent->GetFiredTriggerClasses();
1620 AliDebug(1,Form(
"Event %d, FiredClass %s",
1621 (Int_t)Entry(),(((AliESDEvent*)InputEvent())->GetFiredTriggerClasses()).
Data()));
1625 AliDebug(1,
"Reject event!");
1629 AliDebug(1,
"Accept event!");
1634 AliVEvent*
event = 0;
1636 else event = InputEvent();
1640 AliWarning(
"Input event not available!");
1644 AliDebug(1,Form(
"<<< %s: Event %d >>>",event->GetName(), (Int_t)Entry()));
1648 event->GetPrimaryVertex()->GetXYZ(
fVertex) ;
1691 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",
1696 printf(
"Cluster maximal cell away from border at least %d cells\n",
fRecoUtils->GetNumberOfCellsFromEMCALBorder()) ;
1700 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",
1708 if(
fLoadMatrices) {
for(Int_t ism = 0; ism < AliEMCALGeoParams::fgkEMCALModules; ism++)
if(
fMatrix[ism])
fMatrix[ism]->Print() ; }
1735 else AliWarning(
"Mask column not set, position larger than allocated set size first") ;
1782 AliDebug(1,
"Not implemented");
Float_t fTimeMin
Minimum cluster time (ns).
TH2F * fHmggSM_Zone4[AliEMCALGeoParams::fgkEMCALModules]
! Two-cluster invariant mass per SM in zone 4.
Float_t fDTimeCut
Maximum difference between time of cluster pairs (ns).
TList * fOutputContainer
! Histogram container.
Float_t fTimeMax
Maximum cluster time (ns).
TH2F * fHmggPairSameSectorSMMaskFrame[AliEMCALGeoParams::fgkEMCALModules/2]
! Two-cluster invariant mass per Pair, mask clusters facing frames.
TGeoHMatrix * fMatrix[AliEMCALGeoParams::fgkEMCALModules]
Bool_t IsInZone3(Int_t iSupMod, Int_t ieta, Int_t iphi)
TH2F * fhClusterPairDiffTimeSameSide[AliEMCALGeoParams::fgkEMCALModules-2]
! Diference in time of clusters same side.
TRefArray * fCaloClustersArr
! List of clusters.
Bool_t IsInZone6(Int_t iSupMod, Int_t ieta, Int_t iphi)
TH2F * fHmggSM_Zone3[AliEMCALGeoParams::fgkEMCALModules]
! Two-cluster invariant mass per SM in zone 3.
Int_t fNTimeBins
N time bins of invariant mass histograms.
TH2F * fhTowerDecayPhotonHit[AliEMCALGeoParams::fgkEMCALModules]
! Cells ordered in column/row for different module, number of times a decay photon hits...
Float_t fInvMassCutMax
Maximum mass cut for clusters to fill time or other histograms.
TH2F * fHAsymmetryPairSM[AliEMCALGeoParams::fgkEMCALModules]
! Two-cluster asymmetry vs pt per Pair,with mass close to pi0.
TH1F * fHmpi0[AliEMCALGeoParams::fgkEMCALModules][AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]
< Two-cluster invariant mass assigned to each cell.
Float_t fL0min
Minimum cluster L0.
Bool_t IsInZone4(Int_t iSupMod, Int_t ieta, Int_t iphi)
TString fImportGeometryFilePath
Path fo geometry.root file.
TH2F * fhTopoClusterAmpCase0[AliEMCALGeoParams::fgkEMCALModules]
! Cell amplitude map for type 0 cluster in noisy quartet
Bool_t fSameSM
Combine clusters in channels on same SM.
Bool_t fLoadMatrices
Matrices set from configuration, not get from geometry.root or from ESDs/AODs.
Float_t fEmax
Maximum cluster energy (GeV).
AliEMCALRecoUtils * fRecoUtils
Access to reconstruction utilities.
AliEMCALGeometry * fEMCALGeo
! EMCAL geometry pointer.
Float_t fMaxTimeBin
Maximum time bins of invariant mass histograms.
Bool_t fSelectOnlyPhotonsInDifferentSM
Select only pairs of photons that are not in the same SM.
Float_t fLogWeight
Logarithmic weight used in cluster recalibration.
Bool_t IsInZone7(Int_t iSupMod, Int_t ieta, Int_t iphi)
TH2F * fHAsymmetry
! Two-cluster asymmetry vs pt of pair, with mass close to pi0.
This task provides the input for the EMCal energy calibration with pi0 invariant mass analysis per ch...
Float_t fMinTimeBin
Minimum time bins of invariant mass histograms.
Int_t fNMaskCellColumns
Number of masked columns.
Bool_t IsInZone5(Int_t iSupMod, Int_t ieta, Int_t iphi)
Int_t FindPositionInNoisyQuartet(Int_t irow, Int_t icol, Int_t iSM)
Int_t fMinNCells
Minimum ncells in cluster.
TH2F * fHOpeningAngleDifferentSM
! Two-cluster opening angle vs pt of pair, each cluster in different SM, with mass close to pi0...
TH2F * fhClusterPairDiffTimeSameSM[AliEMCALGeoParams::fgkEMCALModules]
! Diference in time of clusters same SM.
TH2F * fHOpeningAngle
! Two-cluster opening angle vs pt of pair, with mass close to pi0.
TH2F * fhClusterTimeSM[AliEMCALGeoParams::fgkEMCALModules]
! Timing of clusters vs energy per SM.
TH2F * fHmggSM_Zone5[AliEMCALGeoParams::fgkEMCALModules]
! Two-cluster invariant mass per SM in zone 5.
TH2F * fHOpeningAngleSM[AliEMCALGeoParams::fgkEMCALModules]
! Two-cluster opening angle vs pt per SM,with mass close to pi0.
TLorentzVector fMomentum2
Cluster kinematics, temporal.
TH2F * fhTopoClusterAmpCase2[AliEMCALGeoParams::fgkEMCALModules]
! Cell amplitude map for type 2 cluster in noisy quartet
Float_t fInvMassCutMin
Minimum mass cut for clusters to fill time or other histograms.
TH2F * fhTopoClusterAmpCase3[AliEMCALGeoParams::fgkEMCALModules]
! Cell amplitude map for type 3 cluster in noisy quartet
Float_t 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
Bool_t fSelectOnlyCellSignalOutOfCollision
Select cells / clusters that are due to noise, i.e. signal in EMCal that happens not during collision...
TH2F * fHmggSM_Zone6[AliEMCALGeoParams::fgkEMCALModules]
! Two-cluster invariant mass per SM in zone 6.
TH2F * fHmgg
! Two-cluster invariant mass vs pt of pair.
TH2F * fHTpi0[4]
! Time of cell under pi0 mass, for 4 bunch crossings.
AliAnalysisTaskEMCALPi0CalibSelection()
Default constructor. Arrays initialization is done here.
TH1F * fhEnergy[AliEMCALGeoParams::fgkEMCALModules][AliEMCALGeoParams::fgkEMCALCols][AliEMCALGeoParams::fgkEMCALRows]
! Energy distribution for each cell.
Float_t fMinBin
Minimum mass bins of invariant mass histograms.
TH2F * fhTopoClusterAmpFractionCase2[AliEMCALGeoParams::fgkEMCALModules]
! Cell amplitude fraction map for type 2 cluster in noisy quartet
Bool_t fRecalPosition
Switch on/off cluster position calculation, in case alignment matrices are not available.
Float_t fMaxEnergyBin
Maximum energy bins of cell energy histograms.
TString fTriggerName
Trigger name must contain this name.
TH2F * fHmggDifferentSMMaskFrame
! Two-cluster invariant mass vs pt of pair, each cluster in different SM,mask clusters facing frames...
TH2F * fhTopoClusterAmpFractionCase3[AliEMCALGeoParams::fgkEMCALModules]
! Cell amplitude fraction map for type 3 cluster in noisy quartet
TH2F * fhClusterPairDiffTime
! Diference in time of clusters.
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
void UserExec(Option_t *opt)
void InitEnergyCalibrationFactors()
Float_t fEmin
Minimum cluster energy (GeV).
Bool_t MaskFrameCluster(Int_t iSM, Int_t ieta) const
Int_t fNbins
N mass bins of invariant mass histograms.
TH2F * fHmggSM_Zone2[AliEMCALGeoParams::fgkEMCALModules]
! Two-cluster invariant mass per SM in zone 2.
TH2F * fhClusterTime
! Timing of clusters vs energy.
TLorentzVector fMomentum12
Cluster pair kinematics, temporal.
TH2F * fhTowerDecayPhotonAsymmetry[AliEMCALGeoParams::fgkEMCALModules]
! Cells ordered in column/row for different module, accumulated asymmetry in the tower by decay photo...
TH2F * fHmggPairSameSideSMMaskFrame[AliEMCALGeoParams::fgkEMCALModules-2]
! Two-cluster invariant mass per Pair, mask clusters facing frames.
void InitTemperatureCorrections()
Bool_t fCorrectClusters
Correct clusters energy, position etc.
void UserCreateOutputObjects()
Create output container, init geometry.
Float_t fL0max
Maximum cluster L0.
void SetNMaskCellColumns(Int_t n)
TH2F * fHmggSMMaskFrame[AliEMCALGeoParams::fgkEMCALModules]
! Two-cluster invariant mass per SM, mask clusters facing frames.
void Terminate(Option_t *opt)
Create cuts/param objects and publish to slot. Comment out for the moment.
TH2F * fhTowerDecayPhotonEnergy[AliEMCALGeoParams::fgkEMCALModules]
! Cells ordered in column/row for different module, accumulated energy in the tower by decay photons...
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
void PrintInfo()
Print settings.
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 fMaxBin
Maximum mass bins of invariant mass histograms.
TH2F * fHmggDifferentSM
! Two-cluster invariant mass vs pt of pair, each cluster in different SM.
TH2F * fhClusterPairDiffTimeSameSector[AliEMCALGeoParams::fgkEMCALModules/2]
! Diference in time of clusters same sector.
TH1I * fhNEvents
! Number of events counter histogram.
TLorentzVector fMomentum1
Cluster kinematics, temporal.
TH2F * fHmggMaskFrame
! Two-cluster invariant mass vs pt of pair, mask clusters facing frames.
Bool_t fImportGeometryFromFile
Import geometry settings in geometry.root file.
Bool_t IsInZone1(Int_t iSupMod, Int_t ieta, Int_t iphi)
Float_t fAsyCut
Asymmetry cut.
Double_t fVertex[3]
! Primary vertex.
TString fOADBFilePath
Default path $ALICE_PHYSICS/OADB/EMCAL, if needed change.
TH2F * fHOpeningAnglePairSM[AliEMCALGeoParams::fgkEMCALModules]
! Two-cluster opening angle vs pt per Pair,with mass close to pi0.
AliVCaloCells * fEMCALCells
! List of cells.
Bool_t fFilteredInput
Read input produced with filter.
TString fEMCALGeoName
Name of geometry to use.
TH2F * fHAsymmetryDifferentSM
! Two-cluster asymmetry vs pt of pair, each cluster in different SM, with mass close to pi0...
void InitGeometryMatrices()
TH2F * fHmggSM_Zone1[AliEMCALGeoParams::fgkEMCALModules]
! Two-cluster invariant mass per SM in zone 1.
Bool_t fClusterTopology
Draw cluster topology histo.
TH2F * fhTopoClusterAmpFractionCase1[AliEMCALGeoParams::fgkEMCALModules]
! Cell amplitude fraction map for type 1 cluster in noisy quartet
TH2F * fHmggSM_Zone7[AliEMCALGeoParams::fgkEMCALModules]
! Two-cluster invariant mass per SM in zone 7.
TH2F * fHmggPairSameSectorSM[AliEMCALGeoParams::fgkEMCALModules/2]
! Two-cluster invariant mass per Pair.
Bool_t fCellEnergyHiso
Draw cell ernergy histo.