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;
389 if (noVertexCountMuon > 0) vertexstatus =
false;
391 std::cout <<
" * FourMuonEvent::EventSelection(" << eType <<
") * vertices ID of the muons = " << std::endl
402 if (vtxListX.size()>0) vertexstatus =
true;
406 std::cout <<
" * FourMuonEvent::EventSelection(" << eType <<
") * vertices ID of the electrons = "
415 if (vtxListX.size()>0) vertexstatus =
true;
420 std::cout <<
" * FourMuonEvent::EventSelection(" << eType <<
") * vertices in event = " << vtxListX.size() << std::endl;
421 for (
size_t imu=0; imu <
NUM_MUONS; imu++) {
424 for (
size_t iel=0; iel <
NUM_MUONS; iel++) {
433 std::cout <<
" * FourMuonEvent::EventSelection(" << eType <<
") * Number of vertex found = " << vtxListX.size()
434 <<
" and mu without vertex: " << noVertexCountMuon
435 <<
" and elec without vertex: " << noVertexCountElec << std::endl;
436 for (
unsigned int ivtx=0; ivtx < vtxListX.size(); ivtx++) {
437 std::cout <<
" vtx[" << ivtx <<
"]= "
438 <<
"( " << vtxListX.at(ivtx)
439 <<
", " << vtxListY.at(ivtx)
440 <<
", " << vtxListZ.at(ivtx)
441 <<
") nparticles: " << vtxNpart.at(ivtx)
447 eventisgood = vertexstatus;
451 if(
m_doDebug){ std::cout <<
" * FourMuonEvent::EventSelection(" << eType <<
") ** completed ** result= " << eventisgood << std::endl;}
460 if(
m_doDebug){ std::cout <<
" * FourMuonEvent::EventSelection(" << eType <<
") ** started ** " << std::endl
469 if(
m_doDebug) {std::cout <<
" * FourMuonEvent::EventSelection(" << eType <<
") * Failing number of good muons and electrons == 4 :( "
476 if(
m_doDebug) {std::cout <<
" * FourMuonEvent::EventSelection(" << eType <<
") * Too many muons !! Failing number of good muons == 4 :( "
482 if(
m_doDebug) {std::cout <<
" * FourMuonEvent::EventSelection(" << eType <<
") * Too many electrons !! Failing number of good electrons == 4 :( "
488 double leadingMuonPt = -1., secondMuonPt=-1., thirdMuonPt=-1, fourthMuonPt=-1.;
532 double theLeadingPt = leadingMuonPt;
533 if (secondMuonPt > theLeadingPt) { theLeadingPt = secondMuonPt;}
534 if (thirdMuonPt > theLeadingPt) { theLeadingPt = thirdMuonPt;}
535 if (fourthMuonPt > theLeadingPt) { theLeadingPt = fourthMuonPt;}
537 double theTrailingPt = leadingMuonPt;
538 if (secondMuonPt < theTrailingPt && secondMuonPt > 0) { theTrailingPt = secondMuonPt;}
539 if (thirdMuonPt < theTrailingPt && thirdMuonPt > 0) { theTrailingPt = thirdMuonPt;}
540 if (fourthMuonPt < theTrailingPt && fourthMuonPt > 0) { theTrailingPt = fourthMuonPt;}
543 std::cout <<
" * FourMuonEvent::EventSelection * muon pt selection -- cuts: Leading: " <<
m_LeadingMuonPtCut*CLHEP::GeV << std::endl
545 std::cout <<
" Pt of muons in this event 1: " << leadingMuonPt << std::endl
546 <<
" 2: " << secondMuonPt << std::endl
547 <<
" 3: " << thirdMuonPt << std::endl
548 <<
" 4: " << fourthMuonPt << std::endl
549 <<
" leading Pt: " << theLeadingPt << std::endl
550 <<
" trailing Pt: " << theTrailingPt << std::endl;
556 std::cout <<
" * FourMuonEvent::EventSelection * Failing pt cut * Reco Pt: leading " << theLeadingPt <<
" --> trailing " << theTrailingPt << std::endl;
561 std::cout <<
" * FourMuonEvent::EventSelection * Event passed the pt cuts: leading muon pt: " << leadingMuonPt << std::endl;
562 std::cout <<
" trailing muon pt: " << theTrailingPt << std::endl;
569 std::cout <<
" * FourMuonEvent::EventSelection * Failing mass window low cut: reco m= " <<
m_fInvariantMass[eType] <<
" > " <<
m_MassWindowLow << std::endl;
580 std::cout <<
" * FourMuonEvent::EventSelection * Event passed the mass window: " <<
m_fInvariantMass[eType] << std::endl;
584 std::cout <<
" * FourMuonEvent::EventSelection( type= " << eType <<
")* Good 4-muon set: pt range from " << leadingMuonPt/1000
585 <<
" to " << secondMuonPt/1000
586 <<
" GeV 4-muon invariant mass = " <<
m_fInvariantMass.at(eType) <<
" GeV \n";
587 std::cout <<
" * FourMuonEvent::EventSelection( type= " << eType <<
")* completed * \n";
612 for (
unsigned int u = 0; u <
NUM_MUONS; ++u ) {
620 for (
unsigned int v = 0; v <
NUM_TYPES; ++v ) {
643 constexpr bool thisdebug =
false;
646 if(
m_doDebug){ std::cout <<
" * FourMuonEvent * RecordMuon * bad pxMuon --> EXIT "<< std::endl;}
656 std::cout <<
" sigma_d0 "<<
m_pxRecMuon[
m_numberOfFullPassMuons]->trackParticle(xAOD::Muon::TrackParticleType::Primary)->definingParametersCovMatrixVec()[0] << std::endl;
661 if (
m_doDebug){ std::cout <<
" * FourMuonEvent * RecordMuon * bad pxMSmuon --> EXIT "<< std::endl;}
674 if (
m_doDebug){ std::cout <<
" * FourMuonEvent * RecordMuon * bad pxIDTrack for this muon--> EXIT "<< std::endl;}
695 if(
m_doDebug){ std::cout <<
" * FourMuonEvent * ReconstructKinematics * -- start -- " << std::endl; }
696 bool kinematicscomputed =
false;
701 bool goodidentifiers =
true;
707 if (goodidentifiers) {
709 bool goodtracks =
true;
727 kinematicscomputed =
true;
730 std::cout <<
" * FourMuonEvent * ReconstructKinematics4Elec * -- Muon ID Tracks -- new -- " << std::endl
731 <<
" Pt(mu1-)= " <<
m_pxMUTrack[0]->pt() << std::endl
732 <<
" Pt(mu2-)= " <<
m_pxMUTrack[1]->pt() << std::endl
733 <<
" Pt(mu1+)= " <<
m_pxMUTrack[2]->pt() << std::endl
734 <<
" Pt(mu2+)= " <<
m_pxMUTrack[3]->pt() << std::endl
743 if (!kinematicscomputed) {
744 if(
m_doDebug){ std::cout <<
" * FourMuonEvent * ReconstructKinematics * -- FAILED -- " << std::endl; }
747 if(
m_doDebug){ std::cout <<
" * FourMuonEvent * ReconstructKinematics * -- completed -- status: " << kinematicscomputed << std::endl; }
748 return kinematicscomputed;
754 if(
m_doDebug){ std::cout <<
" * FourMuonEvent * ReconstructKinematics4Elec * -- start -- " << std::endl; }
755 bool kinematicscomputed =
false;
760 bool goodtracks =
true;
777 kinematicscomputed =
true;
780 std::cout <<
" * FourMuonEvent * ReconstructKinematics4Elec * -- Electron Tracks -- " << std::endl
781 <<
" Pt(e1-)= " <<
m_pxELTrack[0]->pt() << std::endl
782 <<
" Pt(e2-)= " <<
m_pxELTrack[1]->pt() << std::endl
783 <<
" Pt(e1+)= " <<
m_pxELTrack[2]->pt() << std::endl
784 <<
" Pt(e2+)= " <<
m_pxELTrack[3]->pt() << std::endl
791 if (!kinematicscomputed) {
792 if(
m_doDebug){ std::cout <<
" * FourMuonEvent * ReconstructKinematics4Elec * -- FAILED -- " << std::endl; }
795 if(
m_doDebug){ std::cout <<
" * FourMuonEvent * ReconstructKinematics4Elec * -- completed -- status: " << kinematicscomputed << std::endl; }
796 return kinematicscomputed;
802 (*m_msgStream) << MSG::DEBUG <<
" * FourMuonEvent * ReconstructKinematicsNew * -- START -- " <<
endmsg;
804 bool kinematicscomputed =
false;
828 bool goodtracks =
true;
840 kinematicscomputed =
true;
845 std::cout <<
" * FourMuonEvent * ReconstructKinematicsNew * -- Muon ID Tracks -- new -- " << std::endl;
850 if (kinematicscomputed) std::cout <<
" invariant mass (4mu) = " <<
m_fInvariantMass[
ID] << std::endl;
853 double invmass_test = -1.;
856 bool goodtracks =
true;
862 if (goodtracks && !kinematicscomputed) {
870 kinematicscomputed =
true;
874 std::cout <<
" * FourMuonEvent * ReconstructKinematicsNew * -- Electron Tracks -- " << std::endl;
879 std::cout <<
" invariant mass (4e) = " << invmass_test << std::endl;
884 bool goodtracks =
true;
890 if (goodtracks && !kinematicscomputed) {
898 kinematicscomputed =
true;
902 std::cout <<
" * FourMuonEvent * ReconstructKinematicsNew * -- Muon and Electron Tracks -- " << std::endl;
912 std::cout <<
" invariant mass test = " << invmass_test << std::endl;
915 if (!kinematicscomputed) {
916 if(
m_doDebug){ std::cout <<
" * FourMuonEvent * ReconstructKinematicsNew * -- FAILED -- " << std::endl; }
919 (*m_msgStream) << MSG::DEBUG <<
" * FourMuonEvent * ReconstructKinematicsNew * -- COMPLETED -- status " << kinematicscomputed <<
endmsg;
920 return kinematicscomputed;
1008 if ( pxTrackContainer )
1012 while ( xTrkItr != xTrkItrE )
1015 if ( !pxTrack )
continue;
1017 if(!pxTrkTrack)
continue;
1019 if ( !pxPerigee )
continue;
1020 const float fTrkPhi = pxPerigee->parameters()[
Trk::phi];
1021 const float fTrkEta = pxPerigee->
eta();
1025 float fDR = sqrt( fDPhi*fDPhi + fDEta*fDEta );
1052 std::cout <<
" * FourMuonEvent * SetLeadingMuonPtCut * new Pt cuts: " <<
m_LeadingMuonPtCut <<
" & "
1054 <<
" MuonSelector: " <<
m_xMuonID.GetPtCut() << std::endl;
1074 std::cout <<
" * FourMuonEvent * SetSecondMuonPtCut * new Pt cuts: " <<
m_LeadingMuonPtCut
1076 <<
" MuonSelector: " <<
m_xMuonID.GetPtCut() << std::endl;
1086 constexpr bool thisdebug =
false;
1088 if (
m_doDebug || thisdebug) {std::cout <<
" * FourMuonEvent::OrderMuonList * -- start -- " << std::endl
1093 int muMinus1Id = -9;
1094 int muMinus2Id = -9;
1095 double muPlus1Pt = 0.;
1096 double muPlus2Pt = 0.;
1097 double muMinus1Pt = 0.;
1098 double muMinus2Pt = 0.;
1106 if (nMuonsAtEntry >= 2) {
1107 for (
int imuon=0; imuon < (int) nMuonsAtEntry; imuon++) {
1108 if(
m_doDebug &&
false ){ std::cout <<
" * FourMuonEvent::OrderMuonList * testing imuon= " << imuon
1109 <<
" with charge= " <<
m_pxRecMuon[imuon]->charge()
1119 muPlus2Pt = muPlus1Pt;
1120 muPlus2Id = muPlus1Id;
1136 muMinus2Pt = muMinus1Pt;
1137 muMinus2Id = muMinus1Id;
1151 if (nMuonsAtEntry >= 2 && (muposcount == 0 || munegcount == 0)) {
1152 if (
m_doDebug) std::cout <<
" -- FourMuonEvent::OrderMuonList -- No opposite charge muons in the " << nMuonsAtEntry <<
" input muons"
1153 <<
" #mu+ " << muposcount
1154 <<
" #mu- " << munegcount
1155 <<
" --> DISCARD ALL MUONS -- \n";
1172 std::cout <<
" * FourMuonEvent::OrderMuonList * taking " <<
m_numberOfFullPassMuons <<
" muons from the input list of " << nMuonsAtEntry <<
" muons: " << std::endl;
1173 if (muMinus1Id >= 0) std::cout <<
" leading mu-: " << muMinus1Id <<
" Pt = " << muMinus1Pt << std::endl;
1174 if (muMinus2Id >= 0) std::cout <<
" second mu-: " << muMinus2Id <<
" Pt = " << muMinus2Pt << std::endl;
1175 if (muPlus1Id >= 0) std::cout <<
" leading mu+: " << muPlus1Id <<
" Pt = " << muPlus1Pt << std::endl;
1176 if (muPlus2Id >= 0) std::cout <<
" second mu+: " << muPlus2Id <<
" Pt = " << muPlus2Pt << std::endl;
1179 if (
m_doDebug) std::cout <<
" * FourMuonEvent::OrderMuonList * This event has less than 2 muons :(" << std::endl;
1182 if (
m_doDebug || thisdebug) std::cout <<
" * FourMuonEvent::OrderMuonList * completed * m_numberOfFullPassMuons= " <<
m_numberOfFullPassMuons << std::endl;
1189 (*m_msgStream) << MSG::DEBUG <<
" * FourMuonsEvents::CheckMuonVertices * -- START --" <<
endmsg;
1191 bool goodvertices =
false;
1192 goodvertices =
true;
1193 int nverticesfound = 0;
1197 for (
unsigned int imuneg = 0; imuneg <= 1; imuneg++) {
1233 if (nverticesfound >= 1) goodvertices =
true;
1235 if (nverticesfound == 0)
if (
m_doDebug) std::cout <<
" -- FourMuonEvent::CheckMuonVertices -- WARNING -- MUONS DO NOT COME FROM SAME VERTEX " << std::endl;
1237 (*m_msgStream) << MSG::DEBUG <<
" * FourMuonsEvents::CheckMuonVertices * -- COMPLETED -- status: " << goodvertices <<
endmsg;
1238 return goodvertices;
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".