11MuonMatchingTool :: MuonMatchingTool(
const std::string&
type,
const std::string& name,
const IInterface* parent)
16StatusCode MuonMatchingTool :: initialize(){
34 return StatusCode::SUCCESS;
40 std::unique_ptr<const Trk::TrackParameters> extPars(
extTrackToPivot(track));
41 return extPars ? extPars->position() :
Amg::Vector3D(0.,0.,0.);
46std::tuple<bool, double,double> MuonMatchingTool :: trigPosForMatch<xAOD::L2StandAloneMuon>(
const xAOD::L2StandAloneMuon *trig){
47 return std::forward_as_tuple(
true, trig->
roiEta(), trig->
roiPhi());
51std::tuple<bool, double,double> MuonMatchingTool :: trigPosForMatchSATrack(
const xAOD::Muon *mu){
52 return mu->muonType() == xAOD::Muon::MuonType::MuonStandAlone ? std::forward_as_tuple(
true, mu->eta(), mu->phi()) : std::forward_as_tuple(
false, 0., 0.);
55std::tuple<bool, double,double> MuonMatchingTool :: trigPosForMatchCBTrack(
const xAOD::Muon *mu){
56 return mu->muonType() == xAOD::Muon::MuonType::Combined ? std::forward_as_tuple(
true, mu->eta(), mu->phi()) : std::forward_as_tuple(
false, 0., 0.);
59std::tuple<bool, double,double> MuonMatchingTool :: PosForMatchSATrack(
const xAOD::Muon *mu){
60 const xAOD::TrackParticle* MuonTrack = mu->trackParticle(xAOD::Muon::TrackParticleType::ExtrapolatedMuonSpectrometerTrackParticle);
61 return MuonTrack ? std::forward_as_tuple(
true, MuonTrack->
eta(), MuonTrack->
phi()) : std::forward_as_tuple(
false, 0., 0.);
64std::tuple<bool, double,double> MuonMatchingTool :: PosForMatchCBTrack(
const xAOD::Muon *mu){
65 const xAOD::TrackParticle* MuonTrack = mu->trackParticle(xAOD::Muon::TrackParticleType::CombinedTrackParticle);
66 return MuonTrack ? std::forward_as_tuple(
true, MuonTrack->
eta(), MuonTrack->
phi()) : std::forward_as_tuple(
false, 0., 0.);
73 using Type = xAOD::Muon::TrackParticleType;
74 std::vector<Type>
types { Type::ExtrapolatedMuonSpectrometerTrackParticle,
75 Type::MSOnlyExtrapolatedMuonSpectrometerTrackParticle,
76 Type::MuonSpectrometerTrackParticle};
78 MuonTrack = mu->trackParticle(
type);
86 ATH_MSG_DEBUG(
"MuonMonitoring::matchEFSA() for truth particle");
95 using Type = xAOD::Muon::TrackParticleType;
96 std::vector<Type>
types { Type::ExtrapolatedMuonSpectrometerTrackParticle,
97 Type::MSOnlyExtrapolatedMuonSpectrometerTrackParticle,
98 Type::MuonSpectrometerTrackParticle};
100 MuonTrack = mu->trackParticle(
type);
101 if (MuonTrack)
break;
106const xAOD::Muon* MuonMatchingTool :: matchEFSAReadHandle(
const EventContext& ctx,
const xAOD::Muon *mu)
const {
109 using Type = xAOD::Muon::TrackParticleType;
110 std::vector<Type>
types { Type::ExtrapolatedMuonSpectrometerTrackParticle,
111 Type::MSOnlyExtrapolatedMuonSpectrometerTrackParticle,
112 Type::MuonSpectrometerTrackParticle};
114 MuonTrack = mu->trackParticle(
type);
115 if (MuonTrack)
break;
121 ATH_MSG_DEBUG(
"MuonMonitoring::matchEFCB() for TruthParticle");
127 const xAOD::TrackParticle* MuonTrack = mu->trackParticle(xAOD::Muon::TrackParticleType::Primary);
136 const xAOD::TrackParticle* MuonTrack = mu->trackParticle(xAOD::Muon::TrackParticleType::Primary);
140const xAOD::Muon* MuonMatchingTool :: matchEFCBReadHandle(
const EventContext& ctx,
const xAOD::Muon *mu)
const {
142 const xAOD::TrackParticle* MuonTrack = mu->trackParticle(xAOD::Muon::TrackParticleType::Primary);
149 using Type = xAOD::Muon::TrackParticleType;
150 std::vector<Type>
types { Type::ExtrapolatedMuonSpectrometerTrackParticle,
151 Type::MSOnlyExtrapolatedMuonSpectrometerTrackParticle,
152 Type::MuonSpectrometerTrackParticle};
154 MuonTrack = mu->trackParticle(
type);
156 if (MuonTrack)
break;
162 ATH_MSG_DEBUG(
"MuonMonitoring::matchEFSAFS() for truth particle");
171 using Type = xAOD::Muon::TrackParticleType;
172 std::vector<Type>
types { Type::ExtrapolatedMuonSpectrometerTrackParticle,
173 Type::MSOnlyExtrapolatedMuonSpectrometerTrackParticle,
174 Type::MuonSpectrometerTrackParticle};
176 MuonTrack = mu->trackParticle(
type);
177 if (MuonTrack)
break;
182const xAOD::Muon* MuonMatchingTool :: matchEFSAFSReadHandle(
const EventContext& ctx,
const xAOD::Muon *mu)
const {
185 using Type = xAOD::Muon::TrackParticleType;
186 std::vector<Type>
types { Type::ExtrapolatedMuonSpectrometerTrackParticle,
187 Type::MSOnlyExtrapolatedMuonSpectrometerTrackParticle,
188 Type::MuonSpectrometerTrackParticle};
190 MuonTrack = mu->trackParticle(
type);
191 if (MuonTrack)
break;
197 ATH_MSG_DEBUG(
"MuonMonitoring::matchEFCBFS() for TruthParticle");
203 const xAOD::TrackParticle* MuonTrack = mu->trackParticle(xAOD::Muon::TrackParticleType::Primary);
212 const xAOD::TrackParticle* MuonTrack = mu->trackParticle(xAOD::Muon::TrackParticleType::Primary);
216const xAOD::Muon* MuonMatchingTool :: matchEFCBFSReadHandle(
const EventContext& ctx,
const xAOD::Muon *mu)
const {
218 const xAOD::TrackParticle* MuonTrack = mu->trackParticle(xAOD::Muon::TrackParticleType::Primary);
224 const xAOD::TrackParticle* MuonTrack = mu->trackParticle(xAOD::Muon::TrackParticleType::Primary);
229 ATH_MSG_DEBUG(
"MuonMonitoring::matchEFIso() for truth particle");
237 float EFEta = (*muEL)->eta();
238 float EFPhi = (*muEL)->phi();
242 if ( !trackHandle.
isValid() )
return MatchedTrack;
250 float deta = EFEta - (*it)->eta();
252 float dR = std::sqrt(deta*deta + dphi*dphi);
256 MatchedTrack = (*it);
268 const xAOD::TrackParticle* MuonTrack = mu->trackParticle(xAOD::Muon::TrackParticleType::Primary);
303 using Type = xAOD::Muon::TrackParticleType;
304 std::vector<Type>
types { Type::ExtrapolatedMuonSpectrometerTrackParticle,
305 Type::MSOnlyExtrapolatedMuonSpectrometerTrackParticle,
306 Type::MuonSpectrometerTrackParticle};
308 MuonTrack = mu->trackParticle(
type);
309 if (MuonTrack)
break;
328 const xAOD::TrackParticle* MuonTrack = mu->trackParticle(xAOD::Muon::TrackParticleType::Primary);
332const xAOD::MuonRoI* MuonMatchingTool :: matchL1(
double refEta,
double refPhi,
double reqdR,
const std::string& trig,
bool &pass)
const {
344 const std::vector<std::pair<std::shared_ptr<TrigConf::L1Threshold>,
bool> > L1thr_list =
m_thresholdTool-> getThresholdDecisions(
345 l1muon->roiWord(), Gaudi::Hive::currentContext());
348 bool L1thr_isMatch =
false;
349 for(
const std::pair<std::shared_ptr<TrigConf::L1Threshold>,
bool>& L1thr : L1thr_list){
350 std::shared_ptr<TrigConf::L1Threshold_MU> thr = std::static_pointer_cast<TrigConf::L1Threshold_MU>(L1thr.first);
351 if (L1toMatch == thr->name()){
352 L1thr_isMatch = L1thr.second;
356 if (!L1thr_isMatch)
continue;
358 double l1muonEta = l1muon->eta();
359 double l1muonPhi = l1muon->phi();
361 double deta = refEta - l1muonEta;
363 double dR = std::sqrt(deta*deta + dphi*dphi);
364 ATH_MSG_DEBUG(
"L1 muon candidate eta=" << l1muonEta <<
" phi=" << l1muonPhi <<
" dR=" << dR);
369 ATH_MSG_DEBUG(
"*** L1 muon eta=" << l1muonEta <<
" phi=" << l1muonPhi <<
" dR=" << dR <<
" isPassed=true" );
372 ATH_MSG_DEBUG(
"*** L1 muon eta=" << l1muonEta <<
" phi=" << l1muonPhi <<
" dR=" << dR <<
" isPassed=false" );
379 double refEta = mu->eta();
380 double refPhi = mu->phi();
387 refEta = extPos.eta();
388 refPhi = extPos.phi();
391 return matchL1(refEta, refPhi, reqdR, trig, pass);
395 double refEta = mu->eta();
396 double refPhi = mu->phi();
398 return matchL1(refEta, refPhi, reqdR, trig, pass);
411 float offlEta = mu->eta();
412 float offlPhi = mu->phi();
413 float trigEta = samu->
roiEta();
414 float trigPhi = samu->
roiPhi();
416 float deta = offlEta - trigEta;
418 float dR = sqrt(deta*deta + dphi*dphi);
432double MuonMatchingTool :: FermiFunction(
double x,
double x0,
double w) {
433 return 1/(1+TMath::Exp(-10*(
x-x0)/w));
443 if(!track)
return extTGC;
444 double trkEta = track->eta();
446 bool isBarrel =
true;
448 if( fabs(trkEta)<1.05){
457 if(fabs(extEta)>=1.05){
459 isBarrel = (extTGC) ==
nullptr;
463 else if( fabs(trkEta)>=1.05 ){
472 if(fabs(extEta)<1.05){
474 isBarrel = (extRPC) !=
nullptr;
479 ATH_MSG_DEBUG(
"extTGC=" << extTGC <<
" extRPC=" << extRPC <<
" isBarrel=" << isBarrel);
480 if( isBarrel)
delete extTGC;
481 else if(!isBarrel)
delete extRPC;
482 return (isBarrel) ? extRPC : extTGC;
489 if(!trk)
return nullptr;
490 double TGC_Z = ( trk->
eta()>0 )? 15153.0:-15153.0;
493 std::unique_ptr<Trk::DiscSurface> disc(
new Trk::DiscSurface( matrix, 0., 15000.));
494 const bool boundaryCheck =
true;
504 <<
" eta=" << ((param) ? param->
position().eta() : 0)
505 <<
" phi=" << ((param) ? param->
position().phi() : 0));;
513 if(!trk)
return nullptr;
515 const bool boundaryCheck =
true;
528double MuonMatchingTool :: reqdRL1byPt(
double mupt){
530 if( mupt < 10000. ) {
531 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.