Skip to content

Commit 7e48b68

Browse files
committed
implemented Z-h correlation
1 parent ff2f196 commit 7e48b68

File tree

1 file changed

+69
-10
lines changed

1 file changed

+69
-10
lines changed

PWGHF/HFL/Tasks/taskElectronWeakBoson.cxx

Lines changed: 69 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,14 @@ struct HfTaskElectronWeakBoson {
6767

6868
Configurable<float> vtxZ{"vtxZ", 10.f, ""};
6969

70-
Configurable<float> etaTrMim{"etaTrMim", -1.0f, "minimun track eta"};
70+
Configurable<float> etaTrMin{"etaTrMin", -1.0f, "minimun track eta"};
7171
Configurable<float> etaTrMax{"etaTrMax", 1.0f, "maximum track eta"};
7272
Configurable<float> etaEmcMax{"etaEmcMax", 0.6f, "maximum track eta"};
7373
Configurable<float> dcaxyMax{"dcaxyMax", 2.0f, "mximum DCA xy"};
7474
Configurable<float> chi2ItsMax{"chi2ItsMax", 15.0f, "its chi2 cut"};
7575
Configurable<float> ptMin{"ptMin", 3.0f, "minimum pT cut"};
76+
Configurable<float> ptAssMin{"ptAssMin", 0.15, "minimum pT cut for associated hadrons"};
77+
Configurable<float> ptMatch{"ptMatch", 0.001, "pT match in Z->ee and associated tracks"};
7678
Configurable<float> ptZeeMin{"ptZeeMin", 20.0f, "minimum pT cut for Zee"};
7779
Configurable<float> chi2TpcMax{"chi2TpcMax", 4.0f, "tpc chi2 cut"};
7880
Configurable<float> nclItsMin{"nclItsMin", 2.0f, "its # of cluster cut"};
@@ -97,6 +99,10 @@ struct HfTaskElectronWeakBoson {
9799
Configurable<float> energyIsolationMax{"energyIsolationMax", 0.1, "isolation cut on energy"};
98100
Configurable<int> trackIsolationMax{"trackIsolationMax", 3, "Maximum number of tracks in isolation cone"};
99101

102+
Configurable<float> zMassMin{"zMassMin", 60.0, "Minimum Z mass (GeV/c^2)"};
103+
Configurable<float> zMassMax{"zMassMax", 120.0, "Maximum Z mass (GeV/c^2)"};
104+
Configurable<float> hadronPtMin{"hadronPtMin", 0.5, "Minimum hadron pT for correlation"};
105+
100106
// flag for THn
101107
Configurable<bool> isTHnElectron{"isTHnElectron", true, "Enables THn for electrons"};
102108
Configurable<float> ptTHnThresh{"ptTHnThresh", 5.0, "Threshold for THn make"};
@@ -126,7 +132,14 @@ struct HfTaskElectronWeakBoson {
126132
};
127133
std::vector<HfElectronCandidate> selectedElectronsIso;
128134
std::vector<HfElectronCandidate> selectedElectronsAss;
129-
std::vector<HfElectronCandidate> reconstructedZ;
135+
136+
struct ZeeCandidate {
137+
float pt, eta, phi, mass, ptchild0, ptchild1;
138+
int charge;
139+
ZeeCandidate(float ptr, float e, float ph, float m, int ch, float ptzee0, float ptzee1)
140+
: pt(ptr), eta(e), phi(ph), mass(m), ptchild0(ptzee0), ptchild1(ptzee1), charge(ch) {}
141+
};
142+
std::vector<ZeeCandidate> reconstructedZ;
130143

131144
using SelectedClusters = o2::aod::EMCALClusters;
132145
// PbPb
@@ -140,7 +153,7 @@ struct HfTaskElectronWeakBoson {
140153
Filter eventFilter = (o2::aod::evsel::sel8 == true);
141154
Filter posZFilter = (nabs(o2::aod::collision::posZ) < vtxZ);
142155

143-
Filter etafilter = (aod::track::eta < etaTrMax) && (aod::track::eta > etaTrMim);
156+
Filter etafilter = (aod::track::eta < etaTrMax) && (aod::track::eta > etaTrMin);
144157
Filter dcaxyfilter = (nabs(aod::track::dcaXY) < dcaxyMax);
145158
Filter filterGlobalTr = requireGlobalTrackInFilter();
146159

@@ -197,6 +210,9 @@ struct HfTaskElectronWeakBoson {
197210
const AxisSpec axisIsoTrack{15, -0.5, 14.5, "Isolation Track"};
198211
const AxisSpec axisInvMassZ{150, 0, 150, "M_{ee} (GeV/c^{2})"};
199212
const AxisSpec axisTrigger{3, -0.5, 2.5, "Trigger status of zorro"};
213+
const AxisSpec axisDPhiZh{64, -TMath::Pi() / 2, 3 * TMath::Pi() / 2, "#Delta#phi(Z-h)"};
214+
const AxisSpec axisPtHadron{50, 0, 50, "p_{T,hadron} (GeV/c)"};
215+
const AxisSpec axisZpt{50, 0, 100, "p_{T,Z} (GeV/c)"};
200216

201217
// create registrygrams
202218
registry.add("hZvtx", "Z vertex", kTH1F, {axisZvtx});
@@ -230,6 +246,11 @@ struct HfTaskElectronWeakBoson {
230246
registry.add("hTHnElectrons", "electron info", HistType::kTHnSparseF, {axisPt, axisNsigma, axisM02, axisEop, axisIsoEnergy, axisIsoTrack});
231247
registry.add("hTHnTrMatch", "Track EMC Match", HistType::kTHnSparseF, {axisPt, axisdPhi, axisdEta});
232248

249+
// Z-hadron correlation histograms
250+
registry.add("hZHadronDphi", "Z-hadron #Delta#phi correlation", kTH2F, {{axisDPhiZh}, {axisPtHadron}});
251+
registry.add("hZHadronDphiVsZpt", "Z-hadron #Delta#phi vs Z p_{T}", kTH2F, {{axisDPhiZh}, {axisZpt}});
252+
registry.add("hZptSpectrum", "Z boson p_{T} spectrum", kTH1F, {axisZpt});
253+
233254
// hisotgram for EMCal trigger
234255
registry.add("hEMCalTrigger", "EMCal trigger", kTH1F, {axisTrigger});
235256
}
@@ -313,6 +334,12 @@ struct HfTaskElectronWeakBoson {
313334

314335
KFPTrack kfpTrackAssEle = createKFPTrackFromTrack(track);
315336
KFParticle kfpAssEle(kfpTrackAssEle, pdgAss);
337+
// reco by RecoDecay
338+
auto arr1 = RecoDecayPtEtaPhi::pVector(kfpIsoEle.GetPt(), kfpIsoEle.GetEta(), kfpIsoEle.GetPhi());
339+
auto arr2 = RecoDecayPtEtaPhi::pVector(kfpAssEle.GetPt(), kfpAssEle.GetEta(), kfpAssEle.GetPhi());
340+
double massZeeRecoDecay = RecoDecay::m(std::array{arr1, arr2}, std::array{o2::constants::physics::MassElectron, o2::constants::physics::MassElectron});
341+
342+
// reco by KFparticle
316343
const KFParticle* electronPairs[2] = {&kfpIsoEle, &kfpAssEle};
317344
KFParticle zeeKF;
318345
zeeKF.SetConstructMethod(kfConstructMethod);
@@ -326,19 +353,24 @@ struct HfTaskElectronWeakBoson {
326353
float massZee, massZeeErr;
327354
zeeKF.GetMass(massZee, massZeeErr);
328355
// LOG(info) << "Invarimass cal by KF particle mass = " << massZee;
356+
// LOG(info) << "Invarimass cal by RecoDecay = " << massZeeRecoDecay;
329357

330358
if (track.sign() * charge > 0) {
331359
registry.fill(HIST("hKfInvMassZeeLs"), kfpIsoEle.GetPt(), massZee);
360+
registry.fill(HIST("hInvMassZeeLs"), kfpIsoEle.GetPt(), massZeeRecoDecay);
332361
} else {
333362
registry.fill(HIST("hKfInvMassZeeUls"), kfpIsoEle.GetPt(), massZee);
363+
registry.fill(HIST("hInvMassZeeUls"), kfpIsoEle.GetPt(), massZeeRecoDecay);
334364
}
335365

336366
reconstructedZ.emplace_back(
337367
zeeKF.GetPt(),
338368
zeeKF.GetEta(),
339369
zeeKF.GetPhi(),
340370
massZee,
341-
track.sign() * charge);
371+
track.sign() * charge,
372+
kfpIsoEle.GetPt(),
373+
kfpAssEle.GetPt());
342374
}
343375
}
344376

@@ -420,8 +452,6 @@ struct HfTaskElectronWeakBoson {
420452
continue;
421453
if (track.itsNCls() < nclItsMin)
422454
continue;
423-
if (track.pt() < ptMin)
424-
continue;
425455

426456
registry.fill(HIST("hEta"), track.eta());
427457
registry.fill(HIST("hITSchi2"), track.itsChi2NCl());
@@ -434,7 +464,7 @@ struct HfTaskElectronWeakBoson {
434464

435465
float energyTrk = 0.0;
436466

437-
if (track.tpcNSigmaEl() > nsigTpcMinLose && track.tpcNSigmaEl() < nsigTpcMax && track.pt() > ptZeeMin) {
467+
if (track.pt() > ptAssMin) {
438468
selectedElectronsAss.emplace_back(
439469
track.pt(),
440470
track.eta(),
@@ -443,6 +473,9 @@ struct HfTaskElectronWeakBoson {
443473
track.sign());
444474
}
445475

476+
if (track.pt() < ptMin)
477+
continue;
478+
446479
// track - match
447480

448481
// continue;
@@ -547,7 +580,6 @@ struct HfTaskElectronWeakBoson {
547580
}
548581
}
549582
}
550-
551583
nMatch++;
552584
}
553585
}
@@ -558,14 +590,17 @@ struct HfTaskElectronWeakBoson {
558590
}
559591

560592
} // end of track loop
561-
593+
/*
562594
// calculate inv. mass
563595
if (selectedElectronsIso.size() > 0) {
564596
for (size_t i = 0; i < selectedElectronsIso.size(); i++) {
565597
const auto& e1 = selectedElectronsIso[i];
566598
for (size_t j = 0; j < selectedElectronsAss.size(); j++) {
567599
const auto& e2 = selectedElectronsAss[j];
568-
600+
if (std::abs(e2.nSigEl) > nsigTpcMax)
601+
continue;
602+
if (e2.pt < ptZeeMin)
603+
continue;
569604
float ptIso = e1.pt;
570605
float ptAss = e2.pt;
571606
if (ptIso == ptAss)
@@ -582,6 +617,30 @@ struct HfTaskElectronWeakBoson {
582617
}
583618
}
584619
} // end of inv. mass calculation
620+
*/
621+
// Z-hadron
622+
if (reconstructedZ.size() > 0) {
623+
for (const auto& zBoson : reconstructedZ) {
624+
// Z boson selection
625+
if (zBoson.mass < zMassMin || zBoson.mass > zMassMax)
626+
continue;
627+
registry.fill(HIST("hZptSpectrum"), zBoson.pt);
628+
for (const auto& trackAss : selectedElectronsAss) {
629+
if (std::abs(trackAss.pt - zBoson.ptchild0) < ptMatch)
630+
continue;
631+
if (std::abs(trackAss.pt - zBoson.ptchild1) < ptMatch)
632+
continue;
633+
// calculate Z-h correlation
634+
double deltaPhi = trackAss.phi - zBoson.phi;
635+
while (deltaPhi < -TMath::Pi() / 2)
636+
deltaPhi += 2 * TMath::Pi();
637+
while (deltaPhi > 3 * TMath::Pi() / 2)
638+
deltaPhi -= 2 * TMath::Pi();
639+
registry.fill(HIST("hZHadronDphi"), deltaPhi, trackAss.pt);
640+
registry.fill(HIST("hZHadronDphiVsZpt"), deltaPhi, zBoson.pt);
641+
}
642+
}
643+
} // end of Z-hadron correlation
585644
}
586645
};
587646

0 commit comments

Comments
 (0)