@@ -1118,8 +1118,26 @@ struct AnalysisSameEventPairing {
11181118 names.push_back (Form (" PairsMuonSEPM_ambiguousOutOfBunch_%s" , objArray->At (icut)->GetName ()));
11191119 names.push_back (Form (" PairsMuonSEPP_ambiguousOutOfBunch_%s" , objArray->At (icut)->GetName ()));
11201120 names.push_back (Form (" PairsMuonSEMM_ambiguousOutOfBunch_%s" , objArray->At (icut)->GetName ()));
1121+ names.push_back (Form (" PairsMuonSEPM_unambiguous_%s" , objArray->At (icut)->GetName ()));
1122+ names.push_back (Form (" PairsMuonSEPP_unambiguous_%s" , objArray->At (icut)->GetName ()));
1123+ names.push_back (Form (" PairsMuonSEMM_unambiguous_%s" , objArray->At (icut)->GetName ()));
11211124 histNames += Form (" %s;%s;%s;" , names[(fEnableMuonMixingHistos ? 6 : 3 )].Data (), names[(fEnableMuonMixingHistos ? 7 : 4 )].Data (), names[(fEnableMuonMixingHistos ? 8 : 5 )].Data ());
11221125 histNames += Form (" %s;%s;%s;" , names[(fEnableMuonMixingHistos ? 9 : 6 )].Data (), names[(fEnableMuonMixingHistos ? 10 : 7 )].Data (), names[(fEnableMuonMixingHistos ? 11 : 8 )].Data ());
1126+ histNames += Form (" %s;%s;%s;" , names[(fEnableMuonMixingHistos ? 12 : 9 )].Data (), names[(fEnableMuonMixingHistos ? 13 : 10 )].Data (), names[(fEnableMuonMixingHistos ? 14 : 11 )].Data ());
1127+ if (fEnableMuonMixingHistos ) {
1128+ names.push_back (Form (" PairsMuonMEPM_ambiguousInBunch_%s" , objArray->At (icut)->GetName ()));
1129+ names.push_back (Form (" PairsMuonMEPP_ambiguousInBunch_%s" , objArray->At (icut)->GetName ()));
1130+ names.push_back (Form (" PairsMuonMEMM_ambiguousInBunch_%s" , objArray->At (icut)->GetName ()));
1131+ names.push_back (Form (" PairsMuonMEPM_ambiguousOutOfBunch_%s" , objArray->At (icut)->GetName ()));
1132+ names.push_back (Form (" PairsMuonMEPP_ambiguousOutOfBunch_%s" , objArray->At (icut)->GetName ()));
1133+ names.push_back (Form (" PairsMuonMEMM_ambiguousOutOfBunch_%s" , objArray->At (icut)->GetName ()));
1134+ names.push_back (Form (" PairsMuonMEPM_unambiguous_%s" , objArray->At (icut)->GetName ()));
1135+ names.push_back (Form (" PairsMuonMEPP_unambiguous_%s" , objArray->At (icut)->GetName ()));
1136+ names.push_back (Form (" PairsMuonMEMM_unambiguous_%s" , objArray->At (icut)->GetName ()));
1137+ histNames += Form (" %s;%s;%s;" , names[15 ].Data (), names[16 ].Data (), names[17 ].Data ());
1138+ histNames += Form (" %s;%s;%s;" , names[18 ].Data (), names[19 ].Data (), names[20 ].Data ());
1139+ histNames += Form (" %s;%s;%s;" , names[21 ].Data (), names[22 ].Data (), names[23 ].Data ());
1140+ }
11231141 fMuonHistNames [icut] = names;
11241142
11251143 TString cutNamesStr = fConfigPairCuts .value ;
@@ -1475,10 +1493,12 @@ struct AnalysisSameEventPairing {
14751493 // Fill histograms
14761494 bool isAmbiInBunch = false ;
14771495 bool isAmbiOutOfBunch = false ;
1496+ bool isUnambiguous = false ;
14781497 for (int icut = 0 ; icut < ncuts; icut++) {
14791498 if (twoTrackFilter & (uint32_t (1 ) << icut)) {
14801499 isAmbiInBunch = (twoTrackFilter & (uint32_t (1 ) << 28 )) || (twoTrackFilter & (uint32_t (1 ) << 29 ));
14811500 isAmbiOutOfBunch = (twoTrackFilter & (uint32_t (1 ) << 30 )) || (twoTrackFilter & (uint32_t (1 ) << 31 ));
1501+ isUnambiguous = !((twoTrackFilter & (uint32_t (1 ) << 28 )) || (twoTrackFilter & (uint32_t (1 ) << 29 )) || (twoTrackFilter & (uint32_t (1 ) << 30 )) || (twoTrackFilter & (uint32_t (1 ) << 31 )));
14821502 if (sign1 * sign2 < 0 ) {
14831503 fHistMan ->FillHistClass (histNames[icut][0 ].Data (), VarManager::fgValues);
14841504 if (isAmbiInBunch) {
@@ -1487,6 +1507,9 @@ struct AnalysisSameEventPairing {
14871507 if (isAmbiOutOfBunch) {
14881508 fHistMan ->FillHistClass (histNames[icut][3 + histIdxOffset + 3 ].Data (), VarManager::fgValues);
14891509 }
1510+ if (isUnambiguous) {
1511+ fHistMan ->FillHistClass (histNames[icut][3 + histIdxOffset + 6 ].Data (), VarManager::fgValues);
1512+ }
14901513 } else {
14911514 if (sign1 > 0 ) {
14921515 fHistMan ->FillHistClass (histNames[icut][1 ].Data (), VarManager::fgValues);
@@ -1496,6 +1519,9 @@ struct AnalysisSameEventPairing {
14961519 if (isAmbiOutOfBunch) {
14971520 fHistMan ->FillHistClass (histNames[icut][4 + histIdxOffset + 3 ].Data (), VarManager::fgValues);
14981521 }
1522+ if (isUnambiguous) {
1523+ fHistMan ->FillHistClass (histNames[icut][4 + histIdxOffset + 6 ].Data (), VarManager::fgValues);
1524+ }
14991525 } else {
15001526 fHistMan ->FillHistClass (histNames[icut][2 ].Data (), VarManager::fgValues);
15011527 if (isAmbiInBunch) {
@@ -1504,6 +1530,9 @@ struct AnalysisSameEventPairing {
15041530 if (isAmbiOutOfBunch) {
15051531 fHistMan ->FillHistClass (histNames[icut][5 + histIdxOffset + 3 ].Data (), VarManager::fgValues);
15061532 }
1533+ if (isUnambiguous) {
1534+ fHistMan ->FillHistClass (histNames[icut][5 + histIdxOffset + 6 ].Data (), VarManager::fgValues);
1535+ }
15071536 }
15081537 }
15091538 for (unsigned int iPairCut = 0 ; iPairCut < fPairCuts .size (); iPairCut++) {
@@ -1565,24 +1594,70 @@ struct AnalysisSameEventPairing {
15651594 VarManager::FillPairVn<TPairType>(t1, t2);
15661595 }
15671596 pairSign = t1.sign () + t2.sign ();
1597+ // store the ambiguity number of the two dilepton legs in the last 4 digits of the two-track filter
1598+ if (t1.muonAmbiguityInBunch () > 1 ) {
1599+ twoTrackFilter |= (uint32_t (1 ) << 28 );
1600+ }
1601+ if (t2.muonAmbiguityInBunch () > 1 ) {
1602+ twoTrackFilter |= (uint32_t (1 ) << 29 );
1603+ }
1604+ if (t1.muonAmbiguityOutOfBunch () > 1 ) {
1605+ twoTrackFilter |= (uint32_t (1 ) << 30 );
1606+ }
1607+ if (t2.muonAmbiguityOutOfBunch () > 1 ) {
1608+ twoTrackFilter |= (uint32_t (1 ) << 31 );
1609+ }
15681610 ncuts = fNCutsMuon ;
15691611 histNames = fMuonHistNames ;
15701612 }
15711613 /* if constexpr (TPairType == VarManager::kElectronMuon) {
15721614 twoTrackFilter = a1.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & a2.isMuonSelected_raw() & fTrackFilterMask;
15731615 }*/
15741616
1617+ bool isAmbiInBunch = false ;
1618+ bool isAmbiOutOfBunch = false ;
1619+ bool isUnambiguous = false ;
15751620 for (int icut = 0 ; icut < ncuts; icut++) {
15761621 if (!(twoTrackFilter & (uint32_t (1 ) << icut))) {
15771622 continue ; // cut not passed
15781623 }
1624+ isAmbiInBunch = (twoTrackFilter & (uint32_t (1 ) << 28 )) || (twoTrackFilter & (uint32_t (1 ) << 29 ));
1625+ isAmbiOutOfBunch = (twoTrackFilter & (uint32_t (1 ) << 30 )) || (twoTrackFilter & (uint32_t (1 ) << 31 ));
1626+ isUnambiguous = !((twoTrackFilter & (uint32_t (1 ) << 28 )) || (twoTrackFilter & (uint32_t (1 ) << 29 )) || (twoTrackFilter & (uint32_t (1 ) << 30 )) || (twoTrackFilter & (uint32_t (1 ) << 31 )));
15791627 if (pairSign == 0 ) {
15801628 fHistMan ->FillHistClass (histNames[icut][3 ].Data (), VarManager::fgValues);
1629+ if (isAmbiInBunch) {
1630+ fHistMan ->FillHistClass (histNames[icut][15 ].Data (), VarManager::fgValues);
1631+ }
1632+ if (isAmbiOutOfBunch) {
1633+ fHistMan ->FillHistClass (histNames[icut][18 ].Data (), VarManager::fgValues);
1634+ }
1635+ if (isUnambiguous) {
1636+ fHistMan ->FillHistClass (histNames[icut][21 ].Data (), VarManager::fgValues);
1637+ }
15811638 } else {
15821639 if (pairSign > 0 ) {
15831640 fHistMan ->FillHistClass (histNames[icut][4 ].Data (), VarManager::fgValues);
1641+ if (isAmbiInBunch) {
1642+ fHistMan ->FillHistClass (histNames[icut][16 ].Data (), VarManager::fgValues);
1643+ }
1644+ if (isAmbiOutOfBunch) {
1645+ fHistMan ->FillHistClass (histNames[icut][19 ].Data (), VarManager::fgValues);
1646+ }
1647+ if (isUnambiguous) {
1648+ fHistMan ->FillHistClass (histNames[icut][22 ].Data (), VarManager::fgValues);
1649+ }
15841650 } else {
15851651 fHistMan ->FillHistClass (histNames[icut][5 ].Data (), VarManager::fgValues);
1652+ if (isAmbiInBunch) {
1653+ fHistMan ->FillHistClass (histNames[icut][17 ].Data (), VarManager::fgValues);
1654+ }
1655+ if (isAmbiOutOfBunch) {
1656+ fHistMan ->FillHistClass (histNames[icut][20 ].Data (), VarManager::fgValues);
1657+ }
1658+ if (isUnambiguous) {
1659+ fHistMan ->FillHistClass (histNames[icut][23 ].Data (), VarManager::fgValues);
1660+ }
15861661 }
15871662 }
15881663 } // end for (cuts)
@@ -1648,7 +1723,7 @@ struct AnalysisSameEventPairing {
16481723
16491724 void processMixingAllSkimmed (soa::Filtered<MyEventsHashSelected>& events,
16501725 soa::Join<aod::ReducedTracksAssoc, aod::BarrelTrackCuts, aod::Prefilter> const & trackAssocs, MyBarrelTracksWithCov const & tracks,
1651- soa::Join<aod::ReducedMuonsAssoc, aod::MuonTrackCuts> const & muonAssocs, MyMuonTracksWithCov const & muons)
1726+ soa::Join<aod::ReducedMuonsAssoc, aod::MuonTrackCuts> const & muonAssocs, MyMuonTracksWithCovWithAmbiguities const & muons)
16521727 {
16531728 runSameSideMixing<pairTypeEE, gkEventFillMap>(events, trackAssocs, tracks, trackAssocsPerCollision);
16541729 runSameSideMixing<pairTypeMuMu, gkEventFillMap>(events, muonAssocs, muons, muonAssocsPerCollision);
0 commit comments