19#include "CLHEP/Random/RandFlat.h"
63 (*m_msgStream) << MSG::DEBUG <<
" * FourMuonEvent::Init * START *" <<
endmsg;
65 (*m_msgStream) << MSG::DEBUG <<
" * FourMuonEvent::Init * initializing muon selector *" <<
endmsg;
67 (*m_msgStream) << MSG::DEBUG <<
" * FourMuonEvent::Init * initializing electron selector *" <<
endmsg;
70 if (
m_workAsFourMuons) {(*m_msgStream) << MSG::INFO <<
" * FourMuonEvent::Init * working mode: 4 muons" <<
endmsg; }
75 (*m_msgStream) << MSG::DEBUG <<
" * FourMuonEvent::Init * Completed * " <<
endmsg;
84 (*m_msgStream) << MSG::DEBUG <<
" * FourMuonEvent::Reco * STARTING ** New event ** eventCount " <<
m_eventCount <<
endmsg;
91 (*m_msgStream) << MSG::DEBUG <<
" * FourMuonEvent::Reco * retrieving xAOD::MuonContainer " <<
m_container <<
" of eventCount " <<
m_eventCount << std::endl;
96 if (pxMuonContainer !=
nullptr) {
97 (*m_msgStream) << MSG::DEBUG <<
" * FourMuonEvent::Reco * eventCount " <<
m_eventCount
98 <<
" track list has "<< pxMuonContainer->
size()
106 while ( xMuonItr != xMuonItrE ){
110 if (
m_xMuonID.passSelection( pxCMuon)) {
112 (*m_msgStream) << MSG::DEBUG <<
" * FourMuonEvent::Reco ** muon " << theCount <<
" is accepted " <<
endmsg;
120 if (!pxMuonContainer) {
121 std::cout <<
" * FourMuonEvent::Reco * Can't retrieve combined muon collection (container: " <<
m_container <<
") " << std::endl;
136 if (pxElecContainer !=
nullptr) {
137 (*m_msgStream) << MSG::DEBUG <<
" * FourMuonEvent::Reco * retrieving xAOD::ElectronContainer SUCCESS. "
139 <<
" size: " << pxElecContainer->
size()
141 if (pxElecContainer->
size() > 0 ){
142 m_xElecID.PrepareElectronList (pxElecContainer);
148 (*m_msgStream) << MSG::DEBUG <<
" * FourMuonEvent::Reco * retrieving xAOD::ElectronContainer -- FAILED -- eventcount: " <<
m_eventCount <<
endmsg;
167 if (
m_doDebug) std::cout <<
" * FourMuonEvent::Reco * === Event " <<
m_eventCount <<
" is a GOOD 4-muon event " << std::endl;
170 if (
m_doDebug) std::cout <<
" * FourMuonEvent::Reco * === Event " <<
m_eventCount <<
" FAILS the 4-muon event selection " << std::endl;
176 if (
m_doDebug) std::cout <<
" * FourMuonEvent::Reco * applying 4 electron selection " << std::endl;
185 if (
m_doDebug) std::cout <<
" * FourMuonEvent::Reco * === Event " <<
m_eventCount <<
" is a GOOD 4-electrom event " << std::endl;
188 if (
m_doDebug) std::cout <<
" * FourMuonEvent::Reco * === Event " <<
m_eventCount <<
" FAILS the 4-electron event selection " << std::endl;
192 if (
m_doDebug) std::cout <<
" * FourMuonEvent::Reco * === Event " <<
m_eventCount <<
" is not a 4-electron event " << std::endl;
198 if (
m_doDebug) std::cout <<
" * FourMuonEvent::Reco * applying 4 lepton selection " << std::endl;
201 bool enoughleptons =
false;
206 if ( enoughleptons) {
208 std::cout <<
" * FourMuonEvent::Reco * Global statistics: Total number of accepted muons so far: " <<
m_acceptedMuonCount
224 (*m_msgStream) << MSG::DEBUG <<
" * FourMuonEvent::Reco * === Event " <<
m_eventCount <<
" -- FAILS -- the 4-lepton event selection " <<
endmsg;
228 (*m_msgStream) << MSG::DEBUG <<
" * FourMuonEvent::Reco * 4lepton selection FAILURE. Not enough muons or electrons. Event has " <<
m_numberOfFullPassMuons
241 (*m_msgStream) << MSG::DEBUG <<
" * FourMuonEvent::Reco * COMPLETED * Event has " <<
m_numberOfFullPassMuons <<
" muons & "
263 bool eventisgood =
true;
264 (*m_msgStream) << MSG::DEBUG <<
" * FourMuonEvent::EventSelection( type= " << eType <<
") ** started ** " << std::endl
275 if(
m_doDebug) {std::cout <<
" * FourMuonEvent::EventSelection(" << eType <<
") * Failing number of good muons == 4 :( "
284 if(
m_doDebug) {std::cout <<
" * FourMuonEvent::EventSelection(" << eType <<
") * Failing number of good electrons == 4 :( "
291 bool thisselection =
false;
295 if (!thisselection) {
296 if(
m_doDebug) {std::cout <<
" * FourMuonEvent::EventSelection(" << eType <<
") * Failing number of good muons >= 2 && electrons >= 2 :( "
301 eventisgood = thisselection;
307 unsigned int npassleadingpt = 0;
308 unsigned int npasssecondpt = 0;
312 for (
unsigned int i=0; i <
NUM_MUONS; i++) {
314 if(
m_doDebug) {std::cout <<
" * FourMuonEvent::EventSelection(" << eType <<
") * using muon " << i <<
" with pt: " <<
m_pxIDTrack[i]->pt() << std::endl;}
318 if(
m_doDebug) {std::cout <<
" * FourMuonEvent::EventSelection(" << eType <<
") * #muons with pt > leading pt: " <<
m_LeadingMuonPtCut*CLHEP::GeV <<
" = " << npassleadingpt << std::endl;}
319 if(
m_doDebug) {std::cout <<
" * FourMuonEvent::EventSelection(" << eType <<
") * #muons with pt > second pt: " <<
m_SecondMuonPtCut*CLHEP::GeV <<
" = " << npasssecondpt << std::endl;}
320 if (npassleadingpt == 0) {
322 if(
m_doDebug) {std::cout <<
" * FourMuonEvent::EventSelection(" << eType <<
") * Failing leading muon pt cut " <<
m_LeadingMuonPtCut*CLHEP::GeV << std::endl;}
326 if(
m_doDebug) {std::cout <<
" * FourMuonEvent::EventSelection(" << eType <<
") * Failing second muon pt cut " <<
m_LeadingMuonPtCut*CLHEP::GeV << std::endl;}
336 for (
unsigned int i=0; i <
NUM_MUONS; i++) {
338 if (
m_doDebug) {std::cout <<
" * FourMuonEvent::EventSelection(" << eType <<
") * using electron " << i <<
" with pt: " <<
m_pxELTrack[i]->pt() << std::endl;}
342 if(
m_doDebug) {std::cout <<
" * FourMuonEvent::EventSelection(" << eType <<
") * #elecs with pt > leading pt: " <<
m_LeadingMuonPtCut*CLHEP::GeV <<
" = " << npassleadingpt << std::endl;}
343 if(
m_doDebug) {std::cout <<
" * FourMuonEvent::EventSelection(" << eType <<
") * #elecs with pt > second pt: " <<
m_SecondMuonPtCut*CLHEP::GeV <<
" = " << npasssecondpt << std::endl;}
344 if (npassleadingpt == 0) {
346 if(
m_doDebug) {std::cout <<
" * FourMuonEvent::EventSelection(" << eType <<
") * Failing leading electron pt cut " <<
m_LeadingMuonPtCut*CLHEP::GeV << std::endl;}
350 if(
m_doDebug) {std::cout <<
" * FourMuonEvent::EventSelection(" << eType <<
") * Failing second electrons pt cut " <<
m_LeadingMuonPtCut*CLHEP::GeV << std::endl;}
359 std::cout <<
" * FourMuonEvent::EventSelection * Failing mass window low cut: reco m= " <<
m_fInvariantMass[eType] <<
" > " <<
m_MassWindowLow << std::endl;
365 std::cout <<
" * FourMuonEvent::EventSelection * Failing mass window high cut: reco m= " <<
m_fInvariantMass[eType] <<
" > " <<
m_MassWindowHigh << std::endl;
373 bool vertexstatus =
false;
375 std::vector <float> vtxListX;
376 std::vector <float> vtxListY;
377 std::vector <float> vtxListZ;
378 std::vector <int> vtxNpart;
380 int noVertexCountMuon = 0;
381 int noVertexCountElec = 0;
385 if (vtxListX.size()>0) vertexstatus =
true;
390 std::cout <<
" * FourMuonEvent::EventSelection(" << eType <<
") * vertices ID of the muons = " << std::endl
401 if (vtxListX.size()>0) vertexstatus =
true;
404 std::cout <<
" * FourMuonEvent::EventSelection(" << eType <<
") * vertices ID of the electrons = "
413 if (vtxListX.size()>0) vertexstatus =
true;
418 std::cout <<
" * FourMuonEvent::EventSelection(" << eType <<
") * vertices in event = " << vtxListX.size() << std::endl;
419 for (
size_t imu=0; imu <
NUM_MUONS; imu++) {
422 for (
size_t iel=0; iel <
NUM_MUONS; iel++) {
431 std::cout <<
" * FourMuonEvent::EventSelection(" << eType <<
") * Number of vertex found = " << vtxListX.size()
432 <<
" and mu without vertex: " << noVertexCountMuon
433 <<
" and elec without vertex: " << noVertexCountElec << std::endl;
434 for (
unsigned int ivtx=0; ivtx < vtxListX.size(); ivtx++) {
435 std::cout <<
" vtx[" << ivtx <<
"]= "
436 <<
"( " << vtxListX.at(ivtx)
437 <<
", " << vtxListY.at(ivtx)
438 <<
", " << vtxListZ.at(ivtx)
439 <<
") nparticles: " << vtxNpart.at(ivtx)
445 eventisgood = vertexstatus;
449 if(
m_doDebug){ std::cout <<
" * FourMuonEvent::EventSelection(" << eType <<
") ** completed ** result= " << eventisgood << std::endl;}
458 if(
m_doDebug){ std::cout <<
" * FourMuonEvent::EventSelection(" << eType <<
") ** started ** " << std::endl
467 if(
m_doDebug) {std::cout <<
" * FourMuonEvent::EventSelection(" << eType <<
") * Failing number of good muons and electrons == 4 :( "
474 if(
m_doDebug) {std::cout <<
" * FourMuonEvent::EventSelection(" << eType <<
") * Too many muons !! Failing number of good muons == 4 :( "
480 if(
m_doDebug) {std::cout <<
" * FourMuonEvent::EventSelection(" << eType <<
") * Too many electrons !! Failing number of good electrons == 4 :( "
486 double leadingMuonPt = -1., secondMuonPt=-1., thirdMuonPt=-1, fourthMuonPt=-1.;
530 double theLeadingPt = leadingMuonPt;
531 if (secondMuonPt > theLeadingPt) { theLeadingPt = secondMuonPt;}
532 if (thirdMuonPt > theLeadingPt) { theLeadingPt = thirdMuonPt;}
533 if (fourthMuonPt > theLeadingPt) { theLeadingPt = fourthMuonPt;}
535 double theTrailingPt = leadingMuonPt;
536 if (secondMuonPt < theTrailingPt && secondMuonPt > 0) { theTrailingPt = secondMuonPt;}
537 if (thirdMuonPt < theTrailingPt && thirdMuonPt > 0) { theTrailingPt = thirdMuonPt;}
538 if (fourthMuonPt < theTrailingPt && fourthMuonPt > 0) { theTrailingPt = fourthMuonPt;}
541 std::cout <<
" * FourMuonEvent::EventSelection * muon pt selection -- cuts: Leading: " <<
m_LeadingMuonPtCut*CLHEP::GeV << std::endl
543 std::cout <<
" Pt of muons in this event 1: " << leadingMuonPt << std::endl
544 <<
" 2: " << secondMuonPt << std::endl
545 <<
" 3: " << thirdMuonPt << std::endl
546 <<
" 4: " << fourthMuonPt << std::endl
547 <<
" leading Pt: " << theLeadingPt << std::endl
548 <<
" trailing Pt: " << theTrailingPt << std::endl;
554 std::cout <<
" * FourMuonEvent::EventSelection * Failing pt cut * Reco Pt: leading " << theLeadingPt <<
" --> trailing " << theTrailingPt << std::endl;
559 std::cout <<
" * FourMuonEvent::EventSelection * Event passed the pt cuts: leading muon pt: " << leadingMuonPt << std::endl;
560 std::cout <<
" trailing muon pt: " << theTrailingPt << std::endl;
567 std::cout <<
" * FourMuonEvent::EventSelection * Failing mass window low cut: reco m= " << invariantMass <<
" > " <<
m_MassWindowLow << std::endl;
573 std::cout <<
" * FourMuonEvent * Failing mass window high cut: reco m= " << invariantMass <<
" > " <<
m_MassWindowHigh << std::endl;
578 std::cout <<
" * FourMuonEvent::EventSelection * Event passed the mass window: " << invariantMass << std::endl;
582 std::cout <<
" * FourMuonEvent::EventSelection( type= " << eType <<
")* Good 4-muon set: pt range from " << leadingMuonPt/1000
583 <<
" to " << secondMuonPt/1000
584 <<
" GeV 4-muon invariant mass = " <<
m_fInvariantMass.at(eType) <<
" GeV \n";
585 std::cout <<
" * FourMuonEvent::EventSelection( type= " << eType <<
")* completed * \n";
610 for (
unsigned int u = 0; u <
NUM_MUONS; ++u ) {
618 for (
unsigned int v = 0; v <
NUM_TYPES; ++v ) {
641 constexpr bool thisdebug =
false;
644 if(
m_doDebug){ std::cout <<
" * FourMuonEvent * RecordMuon * bad pxMuon --> EXIT "<< std::endl;}
654 std::cout <<
" sigma_d0 "<<
m_pxRecMuon[
m_numberOfFullPassMuons]->trackParticle(xAOD::Muon::TrackParticleType::Primary)->definingParametersCovMatrixVec()[0] << std::endl;
659 if (
m_doDebug){ std::cout <<
" * FourMuonEvent * RecordMuon * bad pxMSmuon --> EXIT "<< std::endl;}
672 if (
m_doDebug){ std::cout <<
" * FourMuonEvent * RecordMuon * bad pxIDTrack for this muon--> EXIT "<< std::endl;}
693 if(
m_doDebug){ std::cout <<
" * FourMuonEvent * ReconstructKinematics * -- start -- " << std::endl; }
694 bool kinematicscomputed =
false;
699 bool goodidentifiers =
true;
705 if (goodidentifiers) {
707 bool goodtracks =
true;
725 kinematicscomputed =
true;
728 std::cout <<
" * FourMuonEvent * ReconstructKinematics4Elec * -- Muon ID Tracks -- new -- " << std::endl
729 <<
" Pt(mu1-)= " <<
m_pxMUTrack[0]->pt() << std::endl
730 <<
" Pt(mu2-)= " <<
m_pxMUTrack[1]->pt() << std::endl
731 <<
" Pt(mu1+)= " <<
m_pxMUTrack[2]->pt() << std::endl
732 <<
" Pt(mu2+)= " <<
m_pxMUTrack[3]->pt() << std::endl
741 if (!kinematicscomputed) {
742 if(
m_doDebug){ std::cout <<
" * FourMuonEvent * ReconstructKinematics * -- FAILED -- " << std::endl; }
745 if(
m_doDebug){ std::cout <<
" * FourMuonEvent * ReconstructKinematics * -- completed -- status: " << kinematicscomputed << std::endl; }
746 return kinematicscomputed;
752 if(
m_doDebug){ std::cout <<
" * FourMuonEvent * ReconstructKinematics4Elec * -- start -- " << std::endl; }
753 bool kinematicscomputed =
false;
758 bool goodtracks =
true;
775 kinematicscomputed =
true;
778 std::cout <<
" * FourMuonEvent * ReconstructKinematics4Elec * -- Electron Tracks -- " << std::endl
779 <<
" Pt(e1-)= " <<
m_pxELTrack[0]->pt() << std::endl
780 <<
" Pt(e2-)= " <<
m_pxELTrack[1]->pt() << std::endl
781 <<
" Pt(e1+)= " <<
m_pxELTrack[2]->pt() << std::endl
782 <<
" Pt(e2+)= " <<
m_pxELTrack[3]->pt() << std::endl
789 if (!kinematicscomputed) {
790 if(
m_doDebug){ std::cout <<
" * FourMuonEvent * ReconstructKinematics4Elec * -- FAILED -- " << std::endl; }
793 if(
m_doDebug){ std::cout <<
" * FourMuonEvent * ReconstructKinematics4Elec * -- completed -- status: " << kinematicscomputed << std::endl; }
794 return kinematicscomputed;
800 (*m_msgStream) << MSG::DEBUG <<
" * FourMuonEvent * ReconstructKinematicsNew * -- START -- " <<
endmsg;
802 bool kinematicscomputed =
false;
826 bool goodtracks =
true;
838 kinematicscomputed =
true;
843 std::cout <<
" * FourMuonEvent * ReconstructKinematicsNew * -- Muon ID Tracks -- new -- " << std::endl;
848 if (kinematicscomputed) std::cout <<
" invariant mass (4mu) = " <<
m_fInvariantMass[
ID] << std::endl;
851 double invmass_test = -1.;
854 bool goodtracks =
true;
860 if (goodtracks && !kinematicscomputed) {
868 kinematicscomputed =
true;
872 std::cout <<
" * FourMuonEvent * ReconstructKinematicsNew * -- Electron Tracks -- " << std::endl;
877 std::cout <<
" invariant mass (4e) = " << invmass_test << std::endl;
882 bool goodtracks =
true;
888 if (goodtracks && !kinematicscomputed) {
896 kinematicscomputed =
true;
900 std::cout <<
" * FourMuonEvent * ReconstructKinematicsNew * -- Muon and Electron Tracks -- " << std::endl;
910 std::cout <<
" invariant mass test = " << invmass_test << std::endl;
913 if (!kinematicscomputed) {
914 if(
m_doDebug){ std::cout <<
" * FourMuonEvent * ReconstructKinematicsNew * -- FAILED -- " << std::endl; }
917 (*m_msgStream) << MSG::DEBUG <<
" * FourMuonEvent * ReconstructKinematicsNew * -- COMPLETED -- status " << kinematicscomputed <<
endmsg;
918 return kinematicscomputed;
1006 if ( pxTrackContainer )
1010 while ( xTrkItr != xTrkItrE )
1013 if ( !pxTrack )
continue;
1015 if(!pxTrkTrack)
continue;
1017 if ( !pxPerigee )
continue;
1018 const float fTrkPhi = pxPerigee->parameters()[
Trk::phi];
1019 const float fTrkEta = pxPerigee->
eta();
1023 float fDR = sqrt( fDPhi*fDPhi + fDEta*fDEta );
1050 std::cout <<
" * FourMuonEvent * SetLeadingMuonPtCut * new Pt cuts: " <<
m_LeadingMuonPtCut <<
" & "
1052 <<
" MuonSelector: " <<
m_xMuonID.GetPtCut() << std::endl;
1072 std::cout <<
" * FourMuonEvent * SetSecondMuonPtCut * new Pt cuts: " <<
m_LeadingMuonPtCut
1074 <<
" MuonSelector: " <<
m_xMuonID.GetPtCut() << std::endl;
1084 constexpr bool thisdebug =
false;
1086 if (
m_doDebug || thisdebug) {std::cout <<
" * FourMuonEvent::OrderMuonList * -- start -- " << std::endl
1091 int muMinus1Id = -9;
1092 int muMinus2Id = -9;
1093 double muPlus1Pt = 0.;
1094 double muPlus2Pt = 0.;
1095 double muMinus1Pt = 0.;
1096 double muMinus2Pt = 0.;
1104 if (nMuonsAtEntry >= 2) {
1105 for (
int imuon=0; imuon < (int) nMuonsAtEntry; imuon++) {
1106 if(
m_doDebug &&
false ){ std::cout <<
" * FourMuonEvent::OrderMuonList * testing imuon= " << imuon
1107 <<
" with charge= " <<
m_pxRecMuon[imuon]->charge()
1117 muPlus2Pt = muPlus1Pt;
1118 muPlus2Id = muPlus1Id;
1134 muMinus2Pt = muMinus1Pt;
1135 muMinus2Id = muMinus1Id;
1149 if (nMuonsAtEntry >= 2 && (muposcount == 0 || munegcount == 0)) {
1150 if (
m_doDebug) std::cout <<
" -- FourMuonEvent::OrderMuonList -- No opposite charge muons in the " << nMuonsAtEntry <<
" input muons"
1151 <<
" #mu+ " << muposcount
1152 <<
" #mu- " << munegcount
1153 <<
" --> DISCARD ALL MUONS -- \n";
1170 std::cout <<
" * FourMuonEvent::OrderMuonList * taking " <<
m_numberOfFullPassMuons <<
" muons from the input list of " << nMuonsAtEntry <<
" muons: " << std::endl;
1171 if (muMinus1Id >= 0) std::cout <<
" leading mu-: " << muMinus1Id <<
" Pt = " << muMinus1Pt << std::endl;
1172 if (muMinus2Id >= 0) std::cout <<
" second mu-: " << muMinus2Id <<
" Pt = " << muMinus2Pt << std::endl;
1173 if (muPlus1Id >= 0) std::cout <<
" leading mu+: " << muPlus1Id <<
" Pt = " << muPlus1Pt << std::endl;
1174 if (muPlus2Id >= 0) std::cout <<
" second mu+: " << muPlus2Id <<
" Pt = " << muPlus2Pt << std::endl;
1177 if (
m_doDebug) std::cout <<
" * FourMuonEvent::OrderMuonList * This event has less than 2 muons :(" << std::endl;
1180 if (
m_doDebug || thisdebug) std::cout <<
" * FourMuonEvent::OrderMuonList * completed * m_numberOfFullPassMuons= " <<
m_numberOfFullPassMuons << std::endl;
1187 (*m_msgStream) << MSG::DEBUG <<
" * FourMuonsEvents::CheckMuonVertices * -- START --" <<
endmsg;
1189 if (
m_doDebug) std::cout <<
" -- FourMuonEvent::CheckMuonVertices -- WARNING -- MUONS DO NOT COME FROM SAME VERTEX \n" ;
1191 (*m_msgStream) << MSG::DEBUG <<
" * FourMuonsEvents::CheckMuonVertices * -- COMPLETED -- status: " <<
true <<
endmsg;
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
double charge(const T &p)
DataModel_detail::const_iterator< DataVector > const_iterator
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
static float EvaluateAngle(const T *pxP1, const T *pxP2)
static float EvalCharge(const T *pxP1, const T *pxP2)
static float EvalPhi(const T *pxP1, const T *pxP2)
static float EvalPtDiff(const T *pxP1, const T *pxP2)
static float EvalPt(const T *pxP1, const T *pxP2)
static float EvalFourMuInvMass(const T *pxP1, const T *pxP2, const T *pxP3, const T *pxP4)
static float EvalEta(const T *pxP1, const T *pxP2)
std::string m_xSampleName
const xAOD::TrackParticle * m_pxMETrack[NUM_MUONS]
void SetSecondMuonPtCut(double newvalue)
bool m_passedFourLeptonSelection
void SetLeadingMuonPtCut(double newvalue)
int getZCharge(ZTYPE eType)
PerfMonServices::CONTAINERS m_container
int m_muon_vtx[NUM_MUONS]
bool m_passedFourElectronSelection
bool ReconstructKinematics4Elec()
int m_elec_vtx[NUM_MUONS]
bool ReconstructKinematics()
bool m_workAsFourElectrons
void SetMuonPtCut(double newvalue)
const xAOD::TrackParticle * m_pxIDTrack[NUM_MUONS]
bool EventSelection(ZTYPE eType)
const xAOD::TrackParticle * m_pxMUTrack[NUM_MUONS]
double m_LeadingMuonPtCut
ElectronSelector m_xElecID
bool m_passedFourMuonSelection
bool ReconstructKinematicsNew()
bool m_passedSelectionCuts
void RecordMuon(const xAOD::Muon *pxMuon)
const xAOD::TrackParticle * m_pxELTrack[NUM_MUONS]
float getPtImbalance(ZTYPE eType)
unsigned int getPosMuon(int eType)
unsigned int m_numberOfFullPassElectrons
const xAOD::Muon * m_pxRecMuon[NUM_MUONS]
unsigned int getNegMuon(int eType)
const xAOD::TrackParticle * m_pxMSTrack[NUM_MUONS]
const xAOD::TrackParticle * getLooseIDTk(unsigned int uPart)
bool EventSelectionNew(ZTYPE eType)
unsigned int m_numberOfFullPassMuons
static const T * getContainer(CONTAINERS eContainer)
static const std::string & getContainerName(CONTAINERS eContainer)
double eta() const
Access method for pseudorapidity - from momentum.
const Perigee * perigeeParameters() const
return Perigee.
const TrackParticle * trackParticle(TrackParticleType type) const
Returns a pointer (which can be a nullptr) to the TrackParticle used in identification of this muon.
const Trk::Track * track() const
Returns a pointer (which can be NULL) to the Trk::Track which was used to make this TrackParticle.
singleton-like access to IMessageSvc via open function and helper
IMessageSvc * getMessageSvc(bool quiet=false)
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
ElectronContainer_v1 ElectronContainer
Definition of the current "electron container version".
TrackParticle_v1 TrackParticle
Reference the current persistent version:
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".
Muon_v1 Muon
Reference the current persistent version:
MuonContainer_v1 MuonContainer
Definition of the current "Muon container version".