Skip to content

Commit e26c748

Browse files
authored
[PWGLF] Add new process function to have optimize selection of phi meson pair (#11029)
1 parent 4baca43 commit e26c748

File tree

1 file changed

+167
-0
lines changed

1 file changed

+167
-0
lines changed

PWGLF/Tasks/Resonances/doublephimeson.cxx

Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,20 @@ struct doublephimeson {
115115
return 0.5 * trackRelK.P();
116116
}
117117

118+
float deepangle2(const ROOT::Math::PtEtaPhiMVector candidate1,
119+
const ROOT::Math::PtEtaPhiMVector candidate2)
120+
{
121+
double pt1, pt2, pz1, pz2, p1, p2, angle;
122+
pt1 = candidate1.Pt();
123+
pt2 = candidate2.Pt();
124+
pz1 = candidate1.Pz();
125+
pz2 = candidate2.Pz();
126+
p1 = candidate1.P();
127+
p2 = candidate2.P();
128+
angle = TMath::ACos((pt1 * pt2 + pz1 * pz2) / (p1 * p2));
129+
return angle;
130+
}
131+
118132
float deepangle(const TLorentzVector candidate1,
119133
const TLorentzVector candidate2)
120134
{
@@ -367,6 +381,159 @@ struct doublephimeson {
367381
}
368382
}
369383

384+
void processopti(aod::RedPhiEvents::iterator const& collision, aod::PhiTracks const& phitracks)
385+
{
386+
std::vector<ROOT::Math::PtEtaPhiMVector> exoticresonance, phiresonanced1, phiresonanced2;
387+
std::vector<int> d1trackid = {};
388+
std::vector<int> d2trackid = {};
389+
std::vector<int> d3trackid = {};
390+
std::vector<int> d4trackid = {};
391+
if (additionalEvsel && (collision.numPos() < 2 || collision.numNeg() < 2)) {
392+
return;
393+
}
394+
int phimult = 0;
395+
396+
for (auto phitrackd1 : phitracks) {
397+
if (phitrackd1.phiMass() < minPhiMass || phitrackd1.phiMass() > maxPhiMass) {
398+
continue;
399+
}
400+
auto kaonplusd1pt = TMath::Sqrt(phitrackd1.phid1Px() * phitrackd1.phid1Px() + phitrackd1.phid1Py() * phitrackd1.phid1Py());
401+
auto kaonminusd1pt = TMath::Sqrt(phitrackd1.phid2Px() * phitrackd1.phid2Px() + phitrackd1.phid2Py() * phitrackd1.phid2Py());
402+
if (kaonplusd1pt > maxKaonPt) {
403+
continue;
404+
}
405+
if (kaonminusd1pt > maxKaonPt) {
406+
continue;
407+
}
408+
if (!selectionPID(phitrackd1.phid1TPC(), phitrackd1.phid1TOF(), phitrackd1.phid1TOFHit(), strategyPID1, kaonplusd1pt)) {
409+
continue;
410+
}
411+
if (!selectionPID(phitrackd1.phid2TPC(), phitrackd1.phid2TOF(), phitrackd1.phid2TOFHit(), strategyPID1, kaonminusd1pt)) {
412+
continue;
413+
}
414+
phimult = phimult + 1;
415+
}
416+
for (auto phitrackd1 : phitracks) {
417+
if (phitrackd1.phiMass() < minPhiMass || phitrackd1.phiMass() > maxPhiMass) {
418+
continue;
419+
}
420+
auto kaonplusd1pt = TMath::Sqrt(phitrackd1.phid1Px() * phitrackd1.phid1Px() + phitrackd1.phid1Py() * phitrackd1.phid1Py());
421+
auto kaonminusd1pt = TMath::Sqrt(phitrackd1.phid2Px() * phitrackd1.phid2Px() + phitrackd1.phid2Py() * phitrackd1.phid2Py());
422+
if (kaonplusd1pt > maxKaonPt) {
423+
continue;
424+
}
425+
if (kaonminusd1pt > maxKaonPt) {
426+
continue;
427+
}
428+
if (!selectionPID(phitrackd1.phid1TPC(), phitrackd1.phid1TOF(), phitrackd1.phid1TOFHit(), strategyPID1, kaonplusd1pt)) {
429+
continue;
430+
}
431+
histos.fill(HIST("hnsigmaTPCTOFKaon"), phitrackd1.phid1TPC(), phitrackd1.phid1TOF(), kaonplusd1pt);
432+
histos.fill(HIST("hnsigmaTPCKaonPlus"), phitrackd1.phid1TPC(), kaonplusd1pt);
433+
if (!selectionPID(phitrackd1.phid2TPC(), phitrackd1.phid2TOF(), phitrackd1.phid2TOFHit(), strategyPID1, kaonminusd1pt)) {
434+
continue;
435+
}
436+
histos.fill(HIST("hnsigmaTPCKaonMinus"), phitrackd1.phid2TPC(), kaonminusd1pt);
437+
histos.fill(HIST("hPhiMass"), Phid1.M(), Phid1.Pt());
438+
auto phid1id = phitrackd1.index();
439+
Phid1.SetXYZM(phitrackd1.phiPx(), phitrackd1.phiPy(), phitrackd1.phiPz(), phitrackd1.phiMass());
440+
for (auto phitrackd2 : phitracks) {
441+
auto phid2id = phitrackd2.index();
442+
if (phid2id <= phid1id) {
443+
continue;
444+
}
445+
if (phitrackd2.phiMass() < minPhiMass || phitrackd2.phiMass() > maxPhiMass) {
446+
continue;
447+
}
448+
auto kaonplusd2pt = TMath::Sqrt(phitrackd2.phid1Px() * phitrackd2.phid1Px() + phitrackd2.phid1Py() * phitrackd2.phid1Py());
449+
auto kaonminusd2pt = TMath::Sqrt(phitrackd2.phid2Px() * phitrackd2.phid2Px() + phitrackd2.phid2Py() * phitrackd2.phid2Py());
450+
if (kaonplusd2pt > maxKaonPt) {
451+
continue;
452+
}
453+
if (kaonminusd2pt > maxKaonPt) {
454+
continue;
455+
}
456+
if (!selectionPID(phitrackd2.phid1TPC(), phitrackd2.phid1TOF(), phitrackd2.phid1TOFHit(), strategyPID2, kaonplusd2pt)) {
457+
continue;
458+
}
459+
if (!selectionPID(phitrackd2.phid2TPC(), phitrackd2.phid2TOF(), phitrackd2.phid2TOFHit(), strategyPID2, kaonminusd2pt)) {
460+
continue;
461+
}
462+
if ((phitrackd1.phid1Index() == phitrackd2.phid1Index()) || (phitrackd1.phid2Index() == phitrackd2.phid2Index())) {
463+
continue;
464+
}
465+
466+
Phid2.SetXYZM(phitrackd2.phiPx(), phitrackd2.phiPy(), phitrackd2.phiPz(), phitrackd2.phiMass());
467+
exotic = Phid1 + Phid2;
468+
469+
if (exotic.M() < minExoticMass || exotic.M() > maxExoticMass) {
470+
continue;
471+
}
472+
473+
ROOT::Math::PtEtaPhiMVector temp1(exotic.Pt(), exotic.Eta(), exotic.Phi(), exotic.M());
474+
ROOT::Math::PtEtaPhiMVector temp2(Phid1.Pt(), Phid1.Eta(), Phid1.Phi(), Phid1.M());
475+
ROOT::Math::PtEtaPhiMVector temp3(Phid2.Pt(), Phid2.Eta(), Phid2.Phi(), Phid2.M());
476+
exoticresonance.push_back(temp1);
477+
phiresonanced1.push_back(temp2);
478+
phiresonanced2.push_back(temp3);
479+
d1trackid.push_back(phitrackd1.phid1Index());
480+
d2trackid.push_back(phitrackd2.phid1Index());
481+
d3trackid.push_back(phitrackd1.phid2Index());
482+
d4trackid.push_back(phitrackd2.phid2Index());
483+
}
484+
}
485+
if (exoticresonance.size() == 0) {
486+
return;
487+
}
488+
// LOGF(info, "Total number of exotic: %d", exoticresonance.size());
489+
if (exoticresonance.size() == 2) {
490+
for (auto if1 = exoticresonance.begin(); if1 != exoticresonance.end(); ++if1) {
491+
auto i5 = std::distance(exoticresonance.begin(), if1);
492+
auto exotic1phi1 = phiresonanced1.at(i5);
493+
auto exotic1phi2 = phiresonanced2.at(i5);
494+
auto exotic1 = exoticresonance.at(i5);
495+
auto deltam1 = TMath::Sqrt(TMath::Power(exotic1phi1.M() - 1.0192, 2.0) + TMath::Power(exotic1phi2.M() - 1.0192, 2.0));
496+
auto deltaR1 = TMath::Sqrt(TMath::Power(exotic1phi1.Phi() - exotic1phi2.Phi(), 2.0) + TMath::Power(exotic1phi1.Eta() - exotic1phi2.Eta(), 2.0));
497+
for (auto if2 = if1 + 1; if2 != exoticresonance.end(); ++if2) {
498+
auto i6 = std::distance(exoticresonance.begin(), if2);
499+
auto exotic2phi1 = phiresonanced1.at(i6);
500+
auto exotic2phi2 = phiresonanced2.at(i6);
501+
auto exotic2 = exoticresonance.at(i6);
502+
auto deltam2 = TMath::Sqrt(TMath::Power(exotic2phi1.M() - 1.0192, 2.0) + TMath::Power(exotic2phi2.M() - 1.0192, 2.0));
503+
auto deltaR2 = TMath::Sqrt(TMath::Power(exotic2phi1.Phi() - exotic2phi2.Phi(), 2.0) + TMath::Power(exotic2phi1.Eta() - exotic2phi2.Eta(), 2.0));
504+
// LOGF(info, "exotic 1 kaon ids %d , %d, %d, %d", d1trackid.at(i5), d2trackid.at(i5), d3trackid.at(i5), d4trackid.at(i5));
505+
// LOGF(info, "exotic 2 kaon ids %d , %d, %d, %d", d1trackid.at(i6), d2trackid.at(i6), d3trackid.at(i6), d4trackid.at(i6));
506+
if ((d1trackid.at(i5) == d1trackid.at(i6) || d1trackid.at(i5) == d2trackid.at(i6)) &&
507+
(d2trackid.at(i5) == d1trackid.at(i6) || d2trackid.at(i5) == d2trackid.at(i6)) &&
508+
(d3trackid.at(i5) == d3trackid.at(i6) || d3trackid.at(i5) == d4trackid.at(i6)) &&
509+
(d4trackid.at(i5) == d3trackid.at(i6) || d4trackid.at(i5) == d4trackid.at(i6))) {
510+
// LOGF(info, "Find Pair %f %f", deltam2, deltam1);
511+
if (deltam2 < deltam1) {
512+
histos.fill(HIST("SEMassUnlike"), exotic2.M(), exotic2.Pt(), deltaR2, deepangle2(exotic2phi1, exotic2phi2), deltam2, exoticresonance.size());
513+
// LOGF(info, "Fill exotic Id %d which is pair of Id %d", i6, i5);
514+
} else {
515+
histos.fill(HIST("SEMassUnlike"), exotic1.M(), exotic1.Pt(), deltaR1, deepangle2(exotic1phi1, exotic1phi2), deltam1, exoticresonance.size());
516+
// LOGF(info, "Fill exotic Id %d which is pair of Id %d", i6, i5);
517+
}
518+
} else {
519+
histos.fill(HIST("SEMassUnlike"), exotic1.M(), exotic1.Pt(), deltaR1, deepangle2(exotic1phi1, exotic1phi2), deltam1, exoticresonance.size());
520+
}
521+
}
522+
}
523+
} else {
524+
for (auto if1 = exoticresonance.begin(); if1 != exoticresonance.end(); ++if1) {
525+
auto i5 = std::distance(exoticresonance.begin(), if1);
526+
auto exotic1phi1 = phiresonanced1.at(i5);
527+
auto exotic1phi2 = phiresonanced2.at(i5);
528+
auto exotic1 = exoticresonance.at(i5);
529+
auto deltam1 = TMath::Sqrt(TMath::Power(exotic1phi1.M() - 1.0192, 2.0) + TMath::Power(exotic1phi2.M() - 1.0192, 2.0));
530+
auto deltaR1 = TMath::Sqrt(TMath::Power(exotic1phi1.Phi() - exotic1phi2.Phi(), 2.0) + TMath::Power(exotic1phi1.Eta() - exotic1phi2.Eta(), 2.0));
531+
histos.fill(HIST("SEMassUnlike"), exotic1.M(), exotic1.Pt(), deltaR1, deepangle2(exotic1phi1, exotic1phi2), deltam1, exoticresonance.size());
532+
}
533+
}
534+
}
535+
PROCESS_SWITCH(doublephimeson, processopti, "Process Optimized same event", false);
536+
370537
SliceCache cache;
371538
using BinningTypeVertexContributor = ColumnBinningPolicy<aod::collision::PosZ, aod::collision::NumContrib>;
372539
void processMixedEvent(aod::RedPhiEvents& collisions, aod::PhiTracks& phitracks)

0 commit comments

Comments
 (0)