11MuonMatchingTool :: MuonMatchingTool(
const std::string&
type,
const std::string& name,
const IInterface* parent)
16StatusCode MuonMatchingTool :: initialize(){
35 return StatusCode::SUCCESS;
40 const xAOD::TrackParticle* track = mu->trackParticle(xAOD::Muon::TrackParticleType::Primary);
41 std::unique_ptr<const Trk::TrackParameters> extPars(
extTrackToPivot(ctx, track));
42 return extPars ? extPars->position() :
Amg::Vector3D(0.,0.,0.);
47std::tuple<bool, double,double> MuonMatchingTool :: trigPosForMatch<xAOD::L2StandAloneMuon>(
const xAOD::L2StandAloneMuon *trig){
48 return std::forward_as_tuple(
true, trig->
roiEta(), trig->
roiPhi());
52std::tuple<bool, double,double> MuonMatchingTool :: trigPosForMatchSATrack(
const xAOD::Muon *mu){
53 return mu->muonType() == xAOD::Muon::MuonType::MuonStandAlone ? std::forward_as_tuple(
true, mu->eta(), mu->phi()) : std::forward_as_tuple(
false, 0., 0.);
56std::tuple<bool, double,double> MuonMatchingTool :: trigPosForMatchCBTrack(
const xAOD::Muon *mu){
57 return mu->muonType() == xAOD::Muon::MuonType::Combined ? std::forward_as_tuple(
true, mu->eta(), mu->phi()) : std::forward_as_tuple(
false, 0., 0.);
60std::tuple<bool, double,double> MuonMatchingTool :: PosForMatchSATrack(
const xAOD::Muon *mu){
61 const xAOD::TrackParticle* MuonTrack = mu->trackParticle(xAOD::Muon::TrackParticleType::ExtrapolatedMuonSpectrometerTrackParticle);
62 return MuonTrack ? std::forward_as_tuple(
true, MuonTrack->
eta(), MuonTrack->
phi()) : std::forward_as_tuple(
false, 0., 0.);
65std::tuple<bool, double,double> MuonMatchingTool :: PosForMatchCBTrack(
const xAOD::Muon *mu){
66 const xAOD::TrackParticle* MuonTrack = mu->trackParticle(xAOD::Muon::TrackParticleType::CombinedTrackParticle);
67 return MuonTrack ? std::forward_as_tuple(
true, MuonTrack->
eta(), MuonTrack->
phi()) : std::forward_as_tuple(
false, 0., 0.);
74 using Type = xAOD::Muon::TrackParticleType;
75 std::vector<Type>
types { Type::ExtrapolatedMuonSpectrometerTrackParticle,
76 Type::MSOnlyExtrapolatedMuonSpectrometerTrackParticle,
77 Type::MuonSpectrometerTrackParticle};
79 MuonTrack = mu->trackParticle(
type);
87 ATH_MSG_DEBUG(
"MuonMonitoring::matchEFSA() for truth particle");
96 using Type = xAOD::Muon::TrackParticleType;
97 std::vector<Type>
types { Type::ExtrapolatedMuonSpectrometerTrackParticle,
98 Type::MSOnlyExtrapolatedMuonSpectrometerTrackParticle,
99 Type::MuonSpectrometerTrackParticle};
101 MuonTrack = mu->trackParticle(
type);
102 if (MuonTrack)
break;
107const xAOD::Muon* MuonMatchingTool :: matchEFSAReadHandle(
const EventContext& ctx,
const xAOD::Muon *mu)
const {
110 using Type = xAOD::Muon::TrackParticleType;
111 std::vector<Type>
types { Type::ExtrapolatedMuonSpectrometerTrackParticle,
112 Type::MSOnlyExtrapolatedMuonSpectrometerTrackParticle,
113 Type::MuonSpectrometerTrackParticle};
115 MuonTrack = mu->trackParticle(
type);
116 if (MuonTrack)
break;
122 ATH_MSG_DEBUG(
"MuonMonitoring::matchEFCB() for TruthParticle");
128 const xAOD::TrackParticle* MuonTrack = mu->trackParticle(xAOD::Muon::TrackParticleType::Primary);
137 const xAOD::TrackParticle* MuonTrack = mu->trackParticle(xAOD::Muon::TrackParticleType::Primary);
141const xAOD::Muon* MuonMatchingTool :: matchEFCBReadHandle(
const EventContext& ctx,
const xAOD::Muon *mu)
const {
143 const xAOD::TrackParticle* MuonTrack = mu->trackParticle(xAOD::Muon::TrackParticleType::Primary);
150 using Type = xAOD::Muon::TrackParticleType;
151 std::vector<Type>
types { Type::ExtrapolatedMuonSpectrometerTrackParticle,
152 Type::MSOnlyExtrapolatedMuonSpectrometerTrackParticle,
153 Type::MuonSpectrometerTrackParticle};
155 MuonTrack = mu->trackParticle(
type);
157 if (MuonTrack)
break;
163 ATH_MSG_DEBUG(
"MuonMonitoring::matchEFSAFS() for truth particle");
172 using Type = xAOD::Muon::TrackParticleType;
173 std::vector<Type>
types { Type::ExtrapolatedMuonSpectrometerTrackParticle,
174 Type::MSOnlyExtrapolatedMuonSpectrometerTrackParticle,
175 Type::MuonSpectrometerTrackParticle};
177 MuonTrack = mu->trackParticle(
type);
178 if (MuonTrack)
break;
183const xAOD::Muon* MuonMatchingTool :: matchEFSAFSReadHandle(
const EventContext& ctx,
const xAOD::Muon *mu)
const {
186 using Type = xAOD::Muon::TrackParticleType;
187 std::vector<Type>
types { Type::ExtrapolatedMuonSpectrometerTrackParticle,
188 Type::MSOnlyExtrapolatedMuonSpectrometerTrackParticle,
189 Type::MuonSpectrometerTrackParticle};
191 MuonTrack = mu->trackParticle(
type);
192 if (MuonTrack)
break;
198 ATH_MSG_DEBUG(
"MuonMonitoring::matchEFCBFS() for TruthParticle");
204 const xAOD::TrackParticle* MuonTrack = mu->trackParticle(xAOD::Muon::TrackParticleType::Primary);
213 const xAOD::TrackParticle* MuonTrack = mu->trackParticle(xAOD::Muon::TrackParticleType::Primary);
217const xAOD::Muon* MuonMatchingTool :: matchEFCBFSReadHandle(
const EventContext& ctx,
const xAOD::Muon *mu)
const {
219 const xAOD::TrackParticle* MuonTrack = mu->trackParticle(xAOD::Muon::TrackParticleType::Primary);
225 const xAOD::TrackParticle* MuonTrack = mu->trackParticle(xAOD::Muon::TrackParticleType::Primary);
230 ATH_MSG_DEBUG(
"MuonMonitoring::matchEFIso() for truth particle");
238 float EFEta = (*muEL)->eta();
239 float EFPhi = (*muEL)->phi();
243 if ( !trackHandle.
isValid() )
return MatchedTrack;
251 float deta = EFEta - (*it)->eta();
253 float dR = std::sqrt(deta*deta + dphi*dphi);
257 MatchedTrack = (*it);
269 const xAOD::TrackParticle* MuonTrack = mu->trackParticle(xAOD::Muon::TrackParticleType::Primary);
286const xAOD::Muon* MuonMatchingTool :: matchFastRecoSA(
const EventContext& ctx,
const xAOD::Muon *mu,
const std::string& trig,
bool &pass)
const {
300 ATH_MSG_DEBUG(
"MuonMonitoring::matchL2SA() from TruthParticle");
305 ATH_MSG_DEBUG(
"MuonMonitoring::matchFastRecoSA() from TruthParticle");
332 using Type = xAOD::Muon::TrackParticleType;
333 std::vector<Type>
types { Type::ExtrapolatedMuonSpectrometerTrackParticle,
334 Type::MSOnlyExtrapolatedMuonSpectrometerTrackParticle,
335 Type::MuonSpectrometerTrackParticle};
337 MuonTrack = mu->trackParticle(
type);
338 if (MuonTrack)
break;
343const xAOD::Muon* MuonMatchingTool :: matchFastRecoSAReadHandle(
const EventContext& ctx,
const xAOD::Muon *mu)
const {
344 ATH_MSG_DEBUG(
"MuonMonitoring::matchFastRecoSAReadHandle()");
354 using Type = xAOD::Muon::TrackParticleType;
355 std::vector<Type>
types { Type::ExtrapolatedMuonSpectrometerTrackParticle,
356 Type::MSOnlyExtrapolatedMuonSpectrometerTrackParticle,
357 Type::MuonSpectrometerTrackParticle};
359 MuonTrack = mu->trackParticle(
type);
360 if (MuonTrack)
break;
371 ATH_MSG_DEBUG(
"MuonMonitoring::matchL2CB() from TruthParticle");
383 const xAOD::TrackParticle* MuonTrack = mu->trackParticle(xAOD::Muon::TrackParticleType::Primary);
387const xAOD::MuonRoI* MuonMatchingTool :: matchL1(
const EventContext& ctx,
double refEta,
double refPhi,
double reqdR,
const std::string& trig,
bool &pass)
const {
399 const std::vector<std::pair<std::shared_ptr<TrigConf::L1Threshold>,
bool> > L1thr_list =
m_thresholdTool-> getThresholdDecisions(
400 l1muon->roiWord(), ctx);
403 bool L1thr_isMatch =
false;
404 for(
const std::pair<std::shared_ptr<TrigConf::L1Threshold>,
bool>& L1thr : L1thr_list){
405 if (L1toMatch == L1thr.first->name()){
406 L1thr_isMatch = L1thr.second;
410 if (!L1thr_isMatch)
continue;
412 double l1muonEta = l1muon->eta();
413 double l1muonPhi = l1muon->phi();
415 double deta = refEta - l1muonEta;
417 double dR = std::sqrt(deta*deta + dphi*dphi);
418 ATH_MSG_DEBUG(
"L1 muon candidate eta=" << l1muonEta <<
" phi=" << l1muonPhi <<
" dR=" << dR);
423 ATH_MSG_DEBUG(
"*** L1 muon eta=" << l1muonEta <<
" phi=" << l1muonPhi <<
" dR=" << dR <<
" isPassed=true" );
426 ATH_MSG_DEBUG(
"*** L1 muon eta=" << l1muonEta <<
" phi=" << l1muonPhi <<
" dR=" << dR <<
" isPassed=false" );
432const xAOD::MuonRoI* MuonMatchingTool :: matchL1(
const EventContext& ctx,
const xAOD::Muon *mu,
const std::string& trig,
bool &pass)
const {
433 double refEta = mu->eta();
434 double refPhi = mu->phi();
441 refEta = extPos.eta();
442 refPhi = extPos.phi();
445 return matchL1(ctx, refEta, refPhi, reqdR, trig, pass);
449 double refEta = mu->eta();
450 double refPhi = mu->phi();
452 return matchL1(ctx, refEta, refPhi, reqdR, trig, pass);
459const xAOD::Muon* MuonMatchingTool :: matchFastRecoSAtoOff(
const EventContext& ctx,
const xAOD::Muon* samu)
const {
469 float offlEta = mu->eta();
470 float offlPhi = mu->phi();
471 float trigEta = samu->
roiEta();
472 float trigPhi = samu->
roiPhi();
474 float deta = offlEta - trigEta;
476 float dR = sqrt(deta*deta + dphi*dphi);
490double MuonMatchingTool :: FermiFunction(
double x,
double x0,
double w) {
491 return 1/(1+TMath::Exp(-10*(
x-x0)/w));
501 if(!track)
return extTGC;
502 double trkEta = track->eta();
504 bool isBarrel =
true;
506 if( fabs(trkEta)<1.05){
515 if(fabs(extEta)>=1.05){
517 isBarrel = (extTGC) ==
nullptr;
521 else if( fabs(trkEta)>=1.05 ){
530 if(fabs(extEta)<1.05){
532 isBarrel = (extRPC) !=
nullptr;
537 ATH_MSG_DEBUG(
"extTGC=" << extTGC <<
" extRPC=" << extRPC <<
" isBarrel=" << isBarrel);
538 if( isBarrel)
delete extTGC;
539 else if(!isBarrel)
delete extRPC;
540 return (isBarrel) ? extRPC : extTGC;
547 if(!trk)
return nullptr;
548 double TGC_Z = ( trk->
eta()>0 )? 15153.0:-15153.0;
551 std::unique_ptr<Trk::DiscSurface> disc(
new Trk::DiscSurface( matrix, 0., 15000.));
552 const bool boundaryCheck =
true;
562 <<
" eta=" << ((param) ? param->
position().eta() : 0)
563 <<
" phi=" << ((param) ? param->
position().phi() : 0));;
571 if(!trk)
return nullptr;
573 const bool boundaryCheck =
true;
586double MuonMatchingTool :: reqdRL1byPt(
double mupt){
588 if( mupt < 10000. ) {
589 dR = -0.00001*mupt + 0.18;
#define ATH_CHECK
Evaluate an expression and check for errors.
static const std::vector< std::string > types
DataModel_detail::const_iterator< DataVector > const_iterator
ElementLink implementation for ROOT usage.
Property holding a SG store/key/clid from which a ReadHandle is made.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
HLT chain configuration information.
const std::string & lower_chain_name() const
Class for a CylinderSurface in the ATLAS detector.
Class for a DiscSurface in the ATLAS detector.
const Amg::Vector3D & position() const
Access method for the position.
float roiEta() const
Get and set RoI eta.
float roiPhi() const
Get and set RoI phi.
const Trk::Perigee & perigeeParameters() const
Returns the Trk::MeasuredPerigee track parameters.
virtual double phi() const override final
The azimuthal angle ( ) of the particle (has range to .).
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
bool match(std::string s1, std::string s2)
match the individual directories of two strings
Eigen::Affine3d Transform3D
Eigen::Matrix< double, 3, 1 > Vector3D
ParametersBase< TrackParametersDim, Charged > TrackParameters
double deltaPhi(double phiA, double phiB)
delta Phi in range [-pi,pi[
double deltaR(double rapidity1, double phi1, double rapidity2, double phi2)
from bare bare rapidity,phi
L2CombinedMuon_v1 L2CombinedMuon
Define the latest version of the muon CB class.
TrackParticle_v1 TrackParticle
Reference the current persistent version:
TruthParticle_v1 TruthParticle
Typedef to implementation.
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".
Muon_v1 Muon
Reference the current persistent version:
L2StandAloneMuon_v2 L2StandAloneMuon
Define the latest version of the muon SA class.
Helper to keep a Decision object, ElementLink and ActiveState (with respect to some requested ChainGr...
ElementLink< T > link
Link to the feature.