ATLAS Offline Software
MuonEDMHelperSvc.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
13 
16 
19 
20 #include "TrkTrack/Track.h"
21 
22 namespace Muon {
23 
24  MuonEDMHelperSvc::MuonEDMHelperSvc(const std::string& name, ISvcLocator* svc) : base_class(name, svc) {}
27  ATH_CHECK(m_idHelperSvc.retrieve());
28  return StatusCode::SUCCESS;
29  }
30 
32  const Trk::RIO_OnTrack* rot = dynamic_cast<const Trk::RIO_OnTrack*>(&meas);
33  if( rot ) return rot->identify();
34  const CompetingMuonClustersOnTrack* crot = dynamic_cast<const CompetingMuonClustersOnTrack*>(&meas);
35  if( crot ) {
36  if( crot->containedROTs().empty() ){
37  ATH_MSG_WARNING(" CompetingMuonClustersOnTrack without contained ROTs ");
38  return {};
39  }
40  if( !crot->containedROTs().front() ) {
41  ATH_MSG_WARNING(" CompetingMuonClustersOnTrack contains a ROT pointer that is zero ");
42  return {};
43  }
44  return crot->containedROTs().front()->identify();
45  }
46  return {};
47  }
48 
49 
51  Identifier chid;
52  for(const Trk::MeasurementBase* meas : seg.containedMeasurements()){
53 
54  // get Identifier
55  Identifier id = getIdentifier(*meas);
56  if( !id.is_valid() ) continue;
57 
58  // create chamber ID
59  chid = m_idHelperSvc->chamberId(id);
60 
61  // stop at first none trigger hit
62  if( !m_idHelperSvc->isTrigger(id) ) break;
63  }
64 
65  if( !chid.is_valid() ){
66  ATH_MSG_WARNING("Got segment without valid identifiers");
67  }
68 
69  return chid;
70  }
71 
72  std::set<Identifier> MuonEDMHelperSvc::chamberIds( const MuonSegment& seg ) const {
73 
74  std::set<Identifier> chIds;
75  Identifier chid;
76  Identifier chidTrig;
77  for(const Trk::MeasurementBase* meas : seg.containedMeasurements()){
78 
79  // get Identifier
80  Identifier id = getIdentifier(*meas);
81  if( !id.is_valid() ) continue;
82 
83  // create chamber ID
84  chid = m_idHelperSvc->chamberId(id);
85 
86  // stop at first none trigger hit
87  if( !m_idHelperSvc->isTrigger(id) ) chIds.insert(chid);
88  else chidTrig = chid;
89  }
90  if( chIds.empty() ) {
91  chIds.insert(chidTrig);
92  }
93 
94  return chIds;
95  }
96 
97  bool MuonEDMHelperSvc::isEndcap( const MuonSegment& seg ) const {
98  return m_idHelperSvc->isEndcap( chamberId(seg) );
99  }
100 
102 
103  const DataVector<const Trk::MeasurementBase>* measurements = track.measurementsOnTrack();
104  if( !measurements ) return true;
105 
106  // loop over measurements in reversed order (should be faster as endcap hits tend to be at the end of the track)
109  for( ;rit!=rit_end;++rit ){
110  Identifier id = getIdentifier(**rit);
111  if( !id.is_valid() ) continue;
112 
113  if( m_idHelperSvc->isEndcap(id) ) return true;
114  }
115  return false;
116  }
117 
118 
120 
121  // we need a none zero momentum
122  if( momentum == 0. ) {
123  ATH_MSG_WARNING(" cannot create parameters with zero momentum ");
124  return nullptr;
125  }
126  double locx = seg.localParameters().contains(Trk::locX) ? seg.localParameters()[Trk::locX] : 0.;
127  double locy = seg.localParameters().contains(Trk::locY) ? seg.localParameters()[Trk::locY] : 0.;
128  double qoverp = charge/momentum;
129  return dynamic_cast<const Trk::AtaPlane*>(
130  seg.associatedSurface()
132  locy,
133  seg.globalDirection().phi(),
134  seg.globalDirection().theta(),
135  qoverp)
136  .release());
137  }
138 
139  bool MuonEDMHelperSvc::goodTrack( const Trk::Track& track, double chi2Cut ) const {
140 
141  // get reduced chi2
142  const Trk::FitQuality* fq = track.fitQuality();
143  if( !fq || fq->numberDoF() == 0 ){
144  return false;
145  }
146 
147  double reducedChi2 = fq->chiSquared()/fq->numberDoF();
148  // reject fit if larger than cut
149  return reducedChi2 <= chi2Cut;
150  }
151 
153  // use track info if set properly
154  if( track.info().trackProperties(Trk::TrackInfo::StraightTrack) ) return true;
155 
156  // else try using error matrix
157  const Trk::Perigee* pp = track.perigeeParameters();
158  if (!pp || !pp->covariance()) return false;
160  double momCov = 0.;
161  for( int i=0;i<4;++i ) momCov += std::abs( (*pp->covariance())(4,i) );
162  return momCov < 1.e-10;
163  }
164 } //end of namespace
AlignmentEffectsOnTrack.h
TrackParameters.h
MeasurementBase.h
Muon::MuonEDMHelperSvc::MuonEDMHelperSvc
MuonEDMHelperSvc(const std::string &name, ISvcLocator *svc)
default AlgService constructor
Definition: MuonEDMHelperSvc.cxx:24
PerigeeSurface.h
Trk::locX
@ locX
Definition: ParamDefs.h:43
Trk::locY
@ locY
local cartesian
Definition: ParamDefs.h:44
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
DataVector::rend
const_reverse_iterator rend() const noexcept
Return a const_reverse_iterator pointing at the beginning of the collection.
Trk::ParametersT
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
Definition: EMErrorDetail.h:25
initialize
void initialize()
Definition: run_EoverP.cxx:894
MuonEDMHelperSvc.h
Trk::LocalParameters::contains
bool contains(ParamDefs par) const
The simple check for the clients whether the parameter is contained.
CompetingMuonClustersOnTrack.h
IExtrapolator.h
Trk::RIO_OnTrack
Definition: RIO_OnTrack.h:70
Muon::MuonEDMHelperSvc::initialize
virtual StatusCode initialize() override
initialize method, method taken from bass-class AlgTool
Definition: MuonEDMHelperSvc.cxx:25
Muon::CompetingMuonClustersOnTrack
Definition: CompetingMuonClustersOnTrack.h:54
Muon
This class provides conversion from CSC RDO data to CSC Digits.
Definition: TrackSystemController.h:49
Identifier::is_valid
bool is_valid() const
Check if id is in a valid state.
Muon::MuonEDMHelperSvc::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: MuonEDMHelperSvc.h:69
Trk::Charged
Definition: Charged.h:27
Track.h
Trk::TrackInfo::StraightTrack
@ StraightTrack
A straight track.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/TrackInfo.h:84
Muon::MuonEDMHelperSvc::getIdentifier
virtual Identifier getIdentifier(const Trk::MeasurementBase &meas) const override
tries to get Identifier for measurement, if not possible it will return Identifier()
Definition: MuonEDMHelperSvc.cxx:31
ParticleGun_EoverP_Config.momentum
momentum
Definition: ParticleGun_EoverP_Config.py:63
Trk::PlaneSurface::createUniqueParameters
std::unique_ptr< ParametersT< DIM, T, PlaneSurface > > createUniqueParameters(double l1, double l2, double phi, double theta, double qop, std::optional< AmgSymMatrix(DIM)> cov=std::nullopt) const
Use the Surface as a ParametersBase constructor, from local parameters.
lumiFormat.i
int i
Definition: lumiFormat.py:92
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
Trk::Segment::containedMeasurements
const std::vector< const Trk::MeasurementBase * > & containedMeasurements() const
returns the vector of Trk::MeasurementBase objects
Definition: TrkEvent/TrkSegment/TrkSegment/Segment.h:166
CscClusterOnTrack.h
PseudoMeasurementOnTrack.h
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
Trk::FitQuality
Class to represent and store fit qualities from track reconstruction in terms of and number of degre...
Definition: FitQuality.h:97
Handler::svc
AthROOTErrorHandlerSvc * svc
Definition: AthROOTErrorHandlerSvc.cxx:10
DataVector< const Trk::MeasurementBase >
DataVector::rbegin
const_reverse_iterator rbegin() const noexcept
Return a const_reverse_iterator pointing past the end of the collection.
Trk::MeasurementBase
Definition: MeasurementBase.h:58
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
RIO_OnTrack.h
charge
double charge(const T &p)
Definition: AtlasPID.h:494
Muon::CompetingMuonClustersOnTrack::containedROTs
const std::vector< const MuonClusterOnTrack * > & containedROTs() const
returns the vector of SCT_ClusterOnTrack objects .
Definition: CompetingMuonClustersOnTrack.h:184
Trk::MeasurementBase::localParameters
const LocalParameters & localParameters() const
Interface method to get the LocalParameters.
Definition: MeasurementBase.h:132
Muon::MuonEDMHelperSvc::chamberIds
virtual std::set< Identifier > chamberIds(const MuonSegment &seg) const override
returns a set containing the chamber Ids of all MDT or CSC chambers on the segment
Definition: MuonEDMHelperSvc.cxx:72
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
Muon::MuonEDMHelperSvc::chamberId
virtual Identifier chamberId(const MuonSegment &seg) const override
returns the first MDT or CSC identifier of the segment
Definition: MuonEDMHelperSvc.cxx:50
Trk::RIO_OnTrack::identify
virtual Identifier identify() const final
return the identifier -extends MeasurementBase
Definition: RIO_OnTrack.h:155
Trk::FitQuality::chiSquared
double chiSquared() const
returns the of the overall track fit
Definition: FitQuality.h:56
MuonSegment.h
Muon::MuonEDMHelperSvc::isSLTrack
virtual bool isSLTrack(const Trk::Track &track) const override
determines whether a track is a straight line track (no momentum fitted).
Definition: MuonEDMHelperSvc.cxx:152
Trk::FitQuality::numberDoF
int numberDoF() const
returns the number of degrees of freedom of the overall track or vertex fit as integer
Definition: FitQuality.h:60
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
Muon::MuonSegment
Definition: MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonSegment/MuonSegment/MuonSegment.h:45
Muon::MuonEDMHelperSvc::goodTrack
virtual bool goodTrack(const Trk::Track &track, double chi2Cut) const override
check whether track satisfies selection chi2 cut
Definition: MuonEDMHelperSvc.cxx:139
Muon::MuonEDMHelperSvc::isEndcap
virtual bool isEndcap(const MuonSegment &seg) const override
returns whether the segment is in the endcap
Definition: MuonEDMHelperSvc.cxx:97
Muon::release
std::vector< ObjType * > release(std::vector< std::unique_ptr< ObjType >> &objVec)
Definition: MuonSpectrometer/MuonDetDescr/MuonTrackingGeometry/MuonTrackingGeometry/Utils.h:18
Muon::MuonEDMHelperSvc::createTrackParameters
virtual const Trk::AtaPlane * createTrackParameters(const MuonSegment &seg, double momentum=1., double charge=0.) const override
brief create a AtaPlane track parameter for segment
Definition: MuonEDMHelperSvc.cxx:119
Muon::MuonSegment::associatedSurface
virtual const Trk::PlaneSurface & associatedSurface() const override final
returns the surface for the local to global transformation
Definition: MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonSegment/MuonSegment/MuonSegment.h:175
Muon::MuonSegment::globalDirection
const Amg::Vector3D & globalDirection() const
global direction
Definition: MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonSegment/MuonSegment/MuonSegment.h:163