4545#include " Math/Vector4D.h"
4646#include " TGeoGlobalMagField.h"
4747
48+ #include < utility>
49+ #include < string>
50+ #include < algorithm>
51+ #include < map>
52+ #include < vector>
4853#include < chrono>
4954
5055using namespace std ;
@@ -562,12 +567,34 @@ struct muonQa {
562567 }
563568
564569 if (configQAs.fEnableQADimuon ) {
570+ // single muons
571+ AxisSpec transverseMomentumAxis = {1000 , 0 , 100 , " p_{T} (GeV/c)" };
572+ AxisSpec etaAxis = {80 , -5 , -1 , " #eta" };
573+ AxisSpec rAbsAxis = {100 , 0 ., 100.0 , " R_{abs} (cm)" };
574+ AxisSpec dcaAxis = {400 , 0.0 , 20.0 , " DCA" };
575+ AxisSpec phiAxis = {360 , -180.0 , 180.0 , " #phi (degrees)" };
576+ // dimuons
565577 AxisSpec invMassAxis = {400 , 1 , 5 , " M_{#mu^{+}#mu^{-}} (GeV/c^{2})" };
566578 AxisSpec invMassCorrelationAxis = {80 , 0 , 8 , " M_{#mu^{+}#mu^{-}} (GeV/c^{2})" };
567579 AxisSpec invMassAxisFull = {5000 , 0 , 100 , " M_{#mu^{+}#mu^{-}} (GeV/c^{2})" };
568580 AxisSpec yPairAxis = {120 , 0.0 , 6.0 , " #y_{pair}" };
569581 AxisSpec invMassAxis2D = {750 , 0 , 15 , " M_{#mu^{+}#mu^{-}} (GeV/c^{2})" };
570582 AxisSpec pTAxis2D = {120 , 0 , 30 , " p_{T} (GeV/c)" };
583+ // Single muons - dimuons correlations
584+ registryDimuon.add (" dimuon/same-event/single-muon-dimuon-correlations/invariantMass_pT_MuPosPt_MuonKine_MuonCuts" , " #mu^{+}#mu^{-} and #mu^{+}" , {HistType::kTH3F , {invMassAxis2D, pTAxis2D, transverseMomentumAxis}});
585+ registryDimuon.add (" dimuon/same-event/single-muon-dimuon-correlations/invariantMass_pT_MuNegPt_MuonKine_MuonCuts" , " #mu^{+}#mu^{-} and #mu^{-}" , {HistType::kTH3F , {invMassAxis2D, pTAxis2D, transverseMomentumAxis}});
586+ //
587+ registryDimuon.add (" dimuon/same-event/single-muon-dimuon-correlations/invariantMass_pT_MuPosEta_MuonKine_MuonCuts" , " #mu^{+}#mu^{-} and #mu^{+}" , {HistType::kTH3F , {invMassAxis2D, pTAxis2D, etaAxis}});
588+ registryDimuon.add (" dimuon/same-event/single-muon-dimuon-correlations/invariantMass_pT_MuNegEta_MuonKine_MuonCuts" , " #mu^{+}#mu^{-} and #mu^{-}" , {HistType::kTH3F , {invMassAxis2D, pTAxis2D, etaAxis}});
589+ //
590+ registryDimuon.add (" dimuon/same-event/single-muon-dimuon-correlations/invariantMass_pT_MuPosRabs_MuonKine_MuonCuts" , " #mu^{+}#mu^{-} and #mu^{+}" , {HistType::kTH3F , {invMassAxis2D, pTAxis2D, rAbsAxis}});
591+ registryDimuon.add (" dimuon/same-event/single-muon-dimuon-correlations/invariantMass_pT_MuNegRabs_MuonKine_MuonCuts" , " #mu^{+}#mu^{-} and #mu^{-}" , {HistType::kTH3F , {invMassAxis2D, pTAxis2D, rAbsAxis}});
592+ //
593+ registryDimuon.add (" dimuon/same-event/single-muon-dimuon-correlations/invariantMass_pT_MuPosDca_MuonKine_MuonCuts" , " #mu^{+}#mu^{-} and #mu^{+}" , {HistType::kTH3F , {invMassAxis2D, pTAxis2D, dcaAxis}});
594+ registryDimuon.add (" dimuon/same-event/single-muon-dimuon-correlations/invariantMass_pT_MuNegDca_MuonKine_MuonCuts" , " #mu^{+}#mu^{-} and #mu^{-}" , {HistType::kTH3F , {invMassAxis2D, pTAxis2D, dcaAxis}});
595+ //
596+ registryDimuon.add (" dimuon/same-event/single-muon-dimuon-correlations/invariantMass_pT_MuPosPhi_MuonKine_MuonCuts" , " #mu^{+}#mu^{-} and #mu^{+}" , {HistType::kTH3F , {invMassAxis2D, pTAxis2D, phiAxis}});
597+ registryDimuon.add (" dimuon/same-event/single-muon-dimuon-correlations/invariantMass_pT_MuNegPhi_MuonKine_MuonCuts" , " #mu^{+}#mu^{-} and #mu^{-}" , {HistType::kTH3F , {invMassAxis2D, pTAxis2D, phiAxis}});
571598 // MCH-MID tracks with MCH acceptance cuts
572599 registryDimuon.add (" dimuon/same-event/invariantMass_MuonKine_MuonCuts" , " #mu^{+}#mu^{-} invariant mass" , {HistType::kTH1F , {invMassAxis}});
573600 registryDimuon.add (" dimuon/same-event/invariantMassFull_MuonKine_MuonCuts" , " #mu^{+}#mu^{-} invariant mass" , {HistType::kTH1F , {invMassAxisFull}});
@@ -1796,7 +1823,7 @@ struct muonQa {
17961823 std::vector<std::array<double , 2 >> yPos;
17971824 std::vector<std::array<double , 2 >> thetax;
17981825 std::vector<std::array<double , 2 >> thetay;
1799- for (int zi = 0 ; zi < int (zRefPlane.size ()); zi++) {
1826+ for (int zi = 0 ; zi < static_cast < int > (zRefPlane.size ()); zi++) {
18001827 xPos.emplace_back (std::array<double , 2 >{fgVectorsMCH[zi].x , fgVectorsMFT[zi].x });
18011828 yPos.emplace_back (std::array<double , 2 >{fgVectorsMCH[zi].y , fgVectorsMFT[zi].y });
18021829 thetax.emplace_back (std::array<double , 2 >{
@@ -1807,7 +1834,7 @@ struct muonQa {
18071834 std::atan2 (fgVectorsMFT[zi].py , -1.0 * fgVectorsMFT[zi].pz ) * 180 / TMath::Pi ()});
18081835 }
18091836
1810- for (int i = 0 ; i < int (zRefPlane.size ()); i++) {
1837+ for (int i = 0 ; i < static_cast < int > (zRefPlane.size ()); i++) {
18111838 if (same) {
18121839 std::get<std::shared_ptr<TH2>>(trackResidualsHistos[i][quadrant][" dx_vs_x" ])->Fill (std::fabs (xPos[i][1 ]), xPos[i][0 ] - xPos[i][1 ]);
18131840 std::get<std::shared_ptr<TH2>>(trackResidualsHistos[i][quadrant][" dx_vs_y" ])->Fill (std::fabs (yPos[i][1 ]), xPos[i][0 ] - xPos[i][1 ]);
@@ -2180,7 +2207,7 @@ struct muonQa {
21802207 }
21812208
21822209 // Loop over attached clusters
2183- for (int iCls = 0 ; iCls < int (fgValuesClsTmp.posClusters .size ()); iCls++) {
2210+ for (int iCls = 0 ; iCls < static_cast < int > (fgValuesClsTmp.posClusters .size ()); iCls++) {
21842211
21852212 double phiCls = std::atan2 (fgValuesClsTmp.posClusters [iCls][1 ], fgValuesClsTmp.posClusters [iCls][0 ]) * 180 / TMath::Pi ();
21862213 int quadrantCls = GetQuadrantPhi (phiCls);
@@ -2327,7 +2354,7 @@ struct muonQa {
23272354 FillMatching (muontrack, fgValuesMCH, fgValuesMFT);
23282355
23292356 // // Fill global informations
2330- registry.get <TH1>(HIST (" global-muons/NCandidates" ))->Fill (int (globalMuonsVector.size ()));
2357+ registry.get <TH1>(HIST (" global-muons/NCandidates" ))->Fill (static_cast < int > (globalMuonsVector.size ()));
23312358 for (size_t candidateIndex = 0 ; candidateIndex < globalMuonsVector.size (); candidateIndex++) {
23322359 auto const & muon = muons.rawIteratorAt (globalMuonsVector[candidateIndex]);
23332360 registry.get <TH2>(HIST (" global-muons/MatchChi2" ))->Fill (muon.chi2MatchMCHMFT (), candidateIndex);
@@ -2369,7 +2396,7 @@ struct muonQa {
23692396 }
23702397
23712398 // // Fill global muon candidates info
2372- for (int i = 0 ; i < int (globalMuonsVector.size ()); i++) {
2399+ for (int i = 0 ; i < static_cast < int > (globalMuonsVector.size ()); i++) {
23732400 VarTrack fgValuesTmp;
23742401 auto muonCandidate = muons.rawIteratorAt (globalMuonsVector[i]);
23752402 FillTrack<0 >(muonCandidate, fgValuesTmp);
@@ -2473,6 +2500,21 @@ struct muonQa {
24732500 if ((sign1 * sign2) >= 0 )
24742501 continue ;
24752502
2503+ const auto & muonPos = fgValuesMuon1.sign > 0 ? fgValuesMuon1 : fgValuesMuon2;
2504+ const auto & muonNeg = fgValuesMuon1.sign < 0 ? fgValuesMuon1 : fgValuesMuon2;
2505+ // μ⁺ variables
2506+ double muPosPt = muonPos.pT ;
2507+ double muPosEta = muonPos.eta ;
2508+ double muPosRabs = muonPos.rabs ;
2509+ double muPosPhi = muonPos.phi * 180.0 / TMath::Pi ();
2510+ double muPosDca = std::sqrt (muonPos.dcaX * muonPos.dcaX + muonPos.dcaY * muonPos.dcaY );
2511+ // μ⁻ variables
2512+ double muNegPt = muonNeg.pT ;
2513+ double muNegEta = muonNeg.eta ;
2514+ double muNegRabs = muonNeg.rabs ;
2515+ double muNegPhi = muonNeg.phi * 180.0 / TMath::Pi ();
2516+ double muNegDca = std::sqrt (muonNeg.dcaX * muonNeg.dcaX + muonNeg.dcaY * muonNeg.dcaY );
2517+
24762518 int Quadrant1 = GetQuadrantPhi (muonTrack1.phi () * 180.0 / TMath::Pi ());
24772519 int Quadrant2 = GetQuadrantPhi (muonTrack2.phi () * 180.0 / TMath::Pi ());
24782520 int TopBottom1 = (Quadrant1 == 0 || Quadrant1 == 1 ) ? 0 : 1 ;
@@ -2491,6 +2533,22 @@ struct muonQa {
24912533 if (goodMuonTracks) {
24922534 if (sameEvent) {
24932535 // same-event case
2536+ // single muons
2537+ registryDimuon.get <TH3>(HIST (" dimuon/same-event/single-muon-dimuon-correlations/invariantMass_pT_MuPosPt_MuonKine_MuonCuts" ))->Fill (mass, pT, muPosPt);
2538+ registryDimuon.get <TH3>(HIST (" dimuon/same-event/single-muon-dimuon-correlations/invariantMass_pT_MuNegPt_MuonKine_MuonCuts" ))->Fill (mass, pT, muNegPt);
2539+ //
2540+ registryDimuon.get <TH3>(HIST (" dimuon/same-event/single-muon-dimuon-correlations/invariantMass_pT_MuPosEta_MuonKine_MuonCuts" ))->Fill (mass, pT, muPosEta);
2541+ registryDimuon.get <TH3>(HIST (" dimuon/same-event/single-muon-dimuon-correlations/invariantMass_pT_MuNegEta_MuonKine_MuonCuts" ))->Fill (mass, pT, muNegEta);
2542+ //
2543+ registryDimuon.get <TH3>(HIST (" dimuon/same-event/single-muon-dimuon-correlations/invariantMass_pT_MuPosRabs_MuonKine_MuonCuts" ))->Fill (mass, pT, muPosRabs);
2544+ registryDimuon.get <TH3>(HIST (" dimuon/same-event/single-muon-dimuon-correlations/invariantMass_pT_MuNegRabs_MuonKine_MuonCuts" ))->Fill (mass, pT, muNegRabs);
2545+ //
2546+ registryDimuon.get <TH3>(HIST (" dimuon/same-event/single-muon-dimuon-correlations/invariantMass_pT_MuPosDca_MuonKine_MuonCuts" ))->Fill (mass, pT, muPosDca);
2547+ registryDimuon.get <TH3>(HIST (" dimuon/same-event/single-muon-dimuon-correlations/invariantMass_pT_MuNegDca_MuonKine_MuonCuts" ))->Fill (mass, pT, muNegDca);
2548+ //
2549+ registryDimuon.get <TH3>(HIST (" dimuon/same-event/single-muon-dimuon-correlations/invariantMass_pT_MuPosPhi_MuonKine_MuonCuts" ))->Fill (mass, pT, muPosPhi);
2550+ registryDimuon.get <TH3>(HIST (" dimuon/same-event/single-muon-dimuon-correlations/invariantMass_pT_MuNegPhi_MuonKine_MuonCuts" ))->Fill (mass, pT, muNegPhi);
2551+ // dimuons
24942552 registryDimuon.get <TH1>(HIST (" dimuon/same-event/invariantMass_MuonKine_MuonCuts" ))->Fill (mass);
24952553 registryDimuon.get <TH1>(HIST (" dimuon/same-event/invariantMassFull_MuonKine_MuonCuts" ))->Fill (mass);
24962554 registryDimuon.get <TH2>(HIST (" dimuon/same-event/invariantMass_pT_MuonKine_MuonCuts" ))->Fill (mass, pT);
0 commit comments