@@ -278,6 +278,7 @@ struct photonhbt {
278278 Configurable<float > cfgEllipseSigEta{" cfgEllipseSigEta" , 0 .02f , " sigma_eta for ellipse cut" };
279279 Configurable<float > cfgEllipseSigPhi{" cfgEllipseSigPhi" , 0 .02f , " sigma_phi for ellipse cut" };
280280 Configurable<float > cfgEllipseR2{" cfgEllipseR2" , 1 .0f , " R^2 threshold: reject if ellipse value < R^2" };
281+ Configurable<float > cfgMaxAsymmetry{" cfgMaxAsymmetry" , -1 .f , " max |p_{T, 1} - p_{T, 2}|/(p_{T, 1} + p_{T, 2}) asymmetry cut" };
281282 } ggpaircuts;
282283
283284 EMPhotonEventCut fEMEventCut ;
@@ -378,6 +379,16 @@ struct photonhbt {
378379 return true ;
379380 }
380381
382+ inline bool passAsymmetryCut (float pt1, float pt2) const
383+ {
384+ if (ggpaircuts.cfgMaxAsymmetry .value < 0 .f ) // ← .value hinzufügen
385+ return true ;
386+ const float sum = pt1 + pt2;
387+ if (sum < 1e-9f )
388+ return false ;
389+ return std::fabs (pt1 - pt2) / sum < ggpaircuts.cfgMaxAsymmetry .value ; // ← hier auch
390+ }
391+
381392 inline bool passQinvQAGate (float qinv) const
382393 {
383394 const float limit = qaflags.cfgMaxQinvForQA .value ;
@@ -1442,7 +1453,10 @@ struct photonhbt {
14421453 if (pos1.trackId () == pos2.trackId () || pos1.trackId () == ele2.trackId () ||
14431454 ele1.trackId () == pos2.trackId () || ele1.trackId () == ele2.trackId ())
14441455 continue ;
1456+ if (!passAsymmetryCut (g1.pt (), g2.pt ()))
1457+ continue ;
14451458 auto obs = buildPairQAObservables (g1, g2);
1459+
14461460 if (!obs.valid )
14471461 continue ;
14481462 const bool doQA = passQinvQAGate (obs.qinv ), doFR = passQinvFullRangeGate (obs.qinv );
@@ -1508,6 +1522,8 @@ struct photonhbt {
15081522 auto poolPhotons = emh1->GetTracksPerCollision (mixID);
15091523 for (const auto & g1 : selectedPhotons)
15101524 for (const auto & g2 : poolPhotons) {
1525+ if (!passAsymmetryCut (g1.pt (), g2.pt ()))
1526+ continue ;
15111527 auto obs = buildPairQAObservables (g1, g2);
15121528 if (!obs.valid )
15131529 continue ;
@@ -1593,6 +1609,8 @@ struct photonhbt {
15931609 auto truthType = classifyPairTruth (mc1, mc2);
15941610 if (truthType == PairTruthType::TrueTrueDistinct && isPi0DaughterPair (mc1, mc2, mcParticles))
15951611 truthType = PairTruthType::Pi0Daughters;
1612+ if (!passAsymmetryCut (g1.pt (), g2.pt ()))
1613+ continue ;
15961614 auto obs = buildPairQAObservables (g1, g2);
15971615 if (!obs.valid )
15981616 continue ;
@@ -1710,7 +1728,10 @@ struct photonhbt {
17101728 auto poolPhotons = emh1->GetTracksPerCollision (mixID);
17111729 for (const auto & g1 : selectedPhotons)
17121730 for (const auto & g2 : poolPhotons) {
1731+ if (!passAsymmetryCut (g1.pt (), g2.pt ()))
1732+ continue ;
17131733 auto obs = buildPairQAObservables (g1, g2);
1734+
17141735 if (!obs.valid )
17151736 continue ;
17161737 const bool doQA = passQinvQAGate (obs.qinv ), doFR = passQinvFullRangeGate (obs.qinv );
0 commit comments