@@ -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