ATLAS Offline Software
Loading...
Searching...
No Matches
DCMathSegmentMaker.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef DCMATHSEGMENTMAKER_H
6#define DCMATHSEGMENTMAKER_H
7
8#include <list>
9#include <set>
10
33#include "TrkSurfaces/Surface.h"
35namespace Trk {
36 class RIO_OnTrack;
37 class PlaneSurface;
38} // namespace Trk
39
40namespace TrkDriftCircleMath {
42 class Segment;
43} // namespace TrkDriftCircleMath
44
45namespace MuonGM {
47}
48
49namespace Muon {
50 class MdtPrepData;
51}
52
53namespace Muon {
54
56
68 bool operator()(const MuonClusterOnTrack* cl1, const MuonClusterOnTrack* cl2) { return cl1->identify() < cl2->identify(); }
69 };
70
83 bool operator()(const std::pair<double, std::unique_ptr<const Trk::MeasurementBase>>& hit1,
84 const std::pair<double, std::unique_ptr<const Trk::MeasurementBase>>& hit2) {
85 return hit1.first < hit2.first;
86 }
87 };
88
96 class DCMathSegmentMaker : public extends<AthAlgTool, IMuonSegmentMaker> {
97 public:
98 // pair of eta-phi hits in the same gasgap
99 using EtaPhiHitsPair = std::pair<std::vector<const MuonClusterOnTrack*>, std::vector<const MuonClusterOnTrack*> >;
100 // map to sort hit per gasgap
101 using IdHitMap = std::map<Identifier, EtaPhiHitsPair>;
102 using ChIdHitMap = std::map<Identifier, IdHitMap>;
103
104
105 struct HitInXZ {
106 HitInXZ(Identifier i, bool isM, bool measP, double lx, double lz, double lxmin, double lxmax, double phmin, double phmax) :
107 id(i), isMdt(isM), measPhi(measP), x(lx), z(lz), xmin(lxmin), xmax(lxmax), phimin(phmin), phimax(phmax) {}
109 bool isMdt{false};
110 bool measPhi{false};
111 double x{0.};
112 double z{0.};
113 double xmin{0.};
114 double xmax{0.};
115 double phimin{0.};
116 double phimax{0.};
117 };
118
119 struct Cluster2D {
121 Cluster2D(const Identifier elId, const Identifier ggId, const Amg::Vector2D& lp, double err, const MuonClusterOnTrack* ecl,
122 const MuonClusterOnTrack* pcl) :
123 detElId(elId), gasGapId(ggId), locPos(lp), error(err), etaHit(ecl), phiHit(pcl) {
124 if (ecl || pcl) { surface().localToGlobal(locPos, Amg::Vector3D::UnitZ(), globalPos); }
125 if (pcl) phiHits.push_back(pcl);
126 }
127
128 Cluster2D(const Identifier elId, const Identifier ggId, const Amg::Vector2D& lp, double err, const MuonClusterOnTrack* ecl,
129 const std::vector<const MuonClusterOnTrack*>& phs) :
130 detElId(elId), gasGapId(ggId), locPos(lp), error(err), etaHit(ecl), phiHits(phs) {
131 // if phiHits to empty point phiHit to first hit in PhiHits
132 phiHit = phiHits.empty() ? 0 : phiHits.front();
133 if (ecl || phiHit) { surface().localToGlobal(locPos, Amg::Vector3D::UnitZ(), globalPos); }
134 }
137 Amg::Vector2D locPos{Amg::Vector2D::Zero()};
138 double error; // assume same error for eta and phi
139 const MuonClusterOnTrack* etaHit{nullptr};
140 const MuonClusterOnTrack* phiHit{nullptr};
141 std::vector<const MuonClusterOnTrack*> phiHits;
142 const Trk::Surface& surface() const {
143 if (etaHit)
144 return etaHit->associatedSurface();
145 else
146 return phiHit->associatedSurface();
147 }
149 if (etaHit)
150 return etaHit->identify();
151 else
152 return phiHit->identify();
153 }
155 bool is2D() const { return etaHit && phiHit; }
156 bool corrupt() const { return (!etaHit && !phiHit) || error < 0.01; }
157 };
158 using ClusterVec = std::vector<Cluster2D>;
159 using ClusterVecPair = std::pair<ClusterVec, ClusterVec>;
160
161 struct TubeEnds {
162 TubeEnds() = default;
163 double lxmin{0};
164 double lxmax{0};
165 double phimin{0};
166 double phimax{0};
167 };
168
169 struct segmentCreationInfo { // miscellaneous objects needed for segment creation
171 Amg::Transform3D amdbToGlobal, double pmin, double pmax) :
172 clusters(spVecs.first, spVecs.second),
173 geom(multiGeo),
174 globalTrans(gToStation),
175 amdbTrans(amdbToGlobal),
176 phimin(pmin),
177 phimax(pmax) {}
180 Amg::Transform3D globalTrans{Amg::Transform3D::Identity()};
181 Amg::Transform3D amdbTrans{Amg::Transform3D::Identity()};
182 double phimin{0.};
183 double phimax{0.};
184 };
185
186 public:
187 using base_class::base_class;
188 virtual ~DCMathSegmentMaker() = default;
189
190 virtual StatusCode initialize();
191
202 void find(const std::vector<const Trk::RIO_OnTrack*>& rios, Trk::SegmentCollection* segColl = nullptr) const;
203
212 void find(const std::vector<const Trk::RIO_OnTrack*>& rios1, const std::vector<const Trk::RIO_OnTrack*>& rios2) const;
213
227 void find(const std::vector<const MdtDriftCircleOnTrack*>& mdts, const std::vector<const MuonClusterOnTrack*>& clusters,
228 Trk::SegmentCollection* segColl = nullptr) const;
229
240 void find(const Amg::Vector3D& gpos, const Amg::Vector3D& gdir, const std::vector<const MdtDriftCircleOnTrack*>& mdts,
241 const std::vector<const MuonClusterOnTrack*>& clusters, bool hasPhiMeasurements = false,
242 Trk::SegmentCollection* segColl = nullptr, double momentum = 1e9, double sinAngleCut = 0, double beta = 1. ) const;
243
258 void find(const Trk::TrackRoad& road, const std::vector<std::vector<const MdtDriftCircleOnTrack*> >& mdts,
259 const std::vector<std::vector<const MuonClusterOnTrack*> >& clusters, Trk::SegmentCollection* segColl,
260 bool hasPhiMeasurements = false, double momentum = 1e9) const;
261
262 private:
264 bool errorScalingRegion(const Identifier& id) const;
265
267 double errorScaleFactor(const Identifier& id, double curvature, bool hasPhiMeasurements) const;
268
269 std::vector<Identifier> calculateHoles(const EventContext& ctx, Identifier chid, const Amg::Vector3D& gpos, const Amg::Vector3D& gdir, bool hasMeasuredCoordinate,
270 std::set<Identifier>& deltaVec, std::set<Identifier>& outoftimeVec,
271 const std::vector<std::pair<double, std::unique_ptr<const Trk::MeasurementBase>> >& rioDistVec) const;
272
273 TrkDriftCircleMath::DCVec createDCVec(const std::vector<const MdtDriftCircleOnTrack*>& mdts, double errorScale,
274 std::set<Identifier>& chamberSet, double& phimin, double& phimax,
275 TrkDriftCircleMath::DCStatistics& dcStatistics, const Amg::Transform3D& gToStation,
276 const Amg::Transform3D& amdbToGlobal) const;
277 ClusterVecPair create1DClusters(const std::vector<const MuonClusterOnTrack*>& clusters) const;
278 ClusterVecPair create2DClusters(const std::vector<const MuonClusterOnTrack*>& clusters) const;
279
280 ClusterVecPair createSpacePoints(const ChIdHitMap& chIdHitMap) const;
281 ClusterVecPair createSpacePoints(const IdHitMap& gasGapHitMap) const;
282 Cluster2D createSpacePoint(const Identifier& gasGapId, const MuonClusterOnTrack* etaHit, const MuonClusterOnTrack* phiHit) const;
283 Cluster2D createRpcSpacePoint(const Identifier& gasGapId, const MuonClusterOnTrack* etaHit,
284 const std::vector<const MuonClusterOnTrack*>& phiHits) const;
285 Cluster2D createTgcSpacePoint(const Identifier& gasGapId, const MuonClusterOnTrack* etaHit, const MuonClusterOnTrack* phiHit) const;
286 TrkDriftCircleMath::CLVec createClusterVec(const Identifier& chid, ClusterVec& spVec, const Amg::Transform3D& gToStation) const;
287
289 const Amg::Vector3D& gdir, TrkDriftCircleMath::Segment& segment,
290 const TrkDriftCircleMath::ChamberGeometry* multiGeo, const Amg::Transform3D& gToStation, const Amg::Transform3D& amdbToGlobal,
291 std::set<Identifier>& deltaVec, std::set<Identifier>& outoftimeVec,
292 std::vector<std::pair<double, std::unique_ptr<const Trk::MeasurementBase>> >& rioDistVec, double beta = 1. ) const;
293 std::pair<std::pair<int, int>, bool> associateClustersToSegment(
294 const TrkDriftCircleMath::Segment& segment, const Identifier& chid, const Amg::Transform3D& gToStation, ClusterVecPair& spVecs,
295 double phimin, double phimax, std::vector<std::pair<double, std::unique_ptr<const Trk::MeasurementBase>> >& rioDistVec) const;
296
298 std::vector<std::pair<double, std::unique_ptr<const Trk::MeasurementBase>> >& rioDistVec) ;
299
300 static double distanceToSegment(const TrkDriftCircleMath::Segment& segment, const Amg::Vector3D& hitPos,
301 const Amg::Transform3D& gToStation) ;
302 static std::pair<double, double> residualAndPullWithSegment(const TrkDriftCircleMath::Segment& segment, const Cluster2D& spacePoint,
303 const Amg::Transform3D& gToStation) ;
304
306
307 const MdtDriftCircleOnTrack* findFirstRotInChamberWithMostHits(const std::vector<const MdtDriftCircleOnTrack*>& mdts) const;
308
309 bool updateSegmentPhi(const Amg::Vector3D& gpos, const Amg::Vector3D& gdir, Amg::Vector2D& segLocPos,
310 Trk::LocalDirection& segLocDir, Trk::PlaneSurface& surf, const std::vector<const Trk::MeasurementBase*>& rots,
311 double phimin, double phimax) const;
312
314 bool checkBoundsInXZ(double xline, double zline, double dXdZ, const std::vector<HitInXZ>& hits) const;
315
317 TubeEnds localTubeEnds(const MdtDriftCircleOnTrack& mdt, const Amg::Transform3D& gToSegment,
318 const Amg::Transform3D& segmentToG) const;
319
321 static void updatePhiRanges(double phiminNew, double phimaxNew, double& phiminRef, double& phimaxRef) ;
322
324 bool checkPhiConsistency(double phi, double phimin, double phimax) const;
325
327 Amg::Vector3D updateDirection(double linephi, const Trk::PlaneSurface& surf, const Amg::Vector3D& roaddir,
328 bool isCurvedSegment) const;
329
330 std::unique_ptr<MuonSegment> createSegment(const EventContext& ctx, TrkDriftCircleMath::Segment& segment, const Identifier& chid, const Amg::Vector3D& roadpos,
331 const Amg::Vector3D& roaddir2, const std::vector<const MdtDriftCircleOnTrack*>& mdts,
332 bool hasPhiMeasurements, segmentCreationInfo& sInfo, double beta = 1. ) const;
333
334 const MdtPrepData* findMdt(const EventContext& ctx, const Identifier& id) const;
335
338 this,
339 "DetectorManagerKey",
340 "MuonDetectorManager",
341 "Key of input MuonDetectorManager condition data",
342 };
343
345 this,
346 "MuonIdHelperSvc",
347 "Muon::MuonIdHelperSvc/MuonIdHelperSvc",
348 };
350 this,
351 "edmHelper",
352 "Muon::MuonEDMHelperSvc/MuonEDMHelperSvc",
353 "Handle to the service providing the IMuonEDMHelperSvc interface",
354 }; //<! edm helper tool
355
356 ToolHandle<IMdtDriftCircleOnTrackCreator> m_mdtCreator{
357 this,
358 "MdtCreator",
359 "Muon::MdtDriftCircleOnTrackCreator/MdtDriftCircleOnTrackCreator",
360 }; //<! mdt rio ontrack creator
361 ToolHandle<IMdtDriftCircleOnTrackCreator> m_mdtCreatorT0{
362 this,
363 "MdtCreatorT0",
364 "Muon::MdtDriftCircleOnTrackCreator/MdtDriftCircleOnTrackCreator",
365 }; //<! mdt rio ontrack creator
366 ToolHandle<IMuonClusterOnTrackCreator> m_clusterCreator{
367 this,
368 "MuonClusterCreator",
369 "Muon::MuonClusterOnTrackCreator/MuonClusterOnTrackCreator",
370 }; //<! cluster rio ontrack creator
371 ToolHandle<IMuonCompetingClustersOnTrackCreator> m_compClusterCreator{
372 this,
373 "MuonCompetingClustersCreator",
374 "Muon::TriggerChamberClusterOnTrackCreator/TriggerChamberClusterOnTrackCreator",
375 }; //<! competing clusters rio ontrack creator
376 PublicToolHandle<MuonEDMPrinterTool> m_printer{
377 this,
378 "EDMPrinter",
379 "Muon::MuonEDMPrinterTool/MuonEDMPrinterTool",
380 }; //<! printer helper tool
381 ToolHandle<IMdtSegmentFinder> m_segmentFinder{
382 this,
383 "MdtSegmentFinder",
384 "Muon::MdtMathSegmentFinder/MdtMathSegmentFinder",
385 }; //<! segment finder tool
386 ToolHandle<IMuonSegmentFittingTool> m_segmentFitter{
387 this,
388 "SegmentFitter",
389 "Muon::MuonSegmentFittingTool/MuonSegmentFittingTool",
390 }; //<! segment fitting tool
391 ToolHandle<IMuonSegmentSelectionTool> m_segmentSelectionTool{
392 this,
393 "SegmentSelector",
394 "Muon::MuonSegmentSelectionTool/MuonSegmentSelectionTool",
395 }; //<! segment selection tool
396 ToolHandle<IDCSLFitProvider> m_dcslFitProvider{
397 this,
398 "DCFitProvider",
399 "",
400 };
401
402 Gaudi::Property<double> m_sinAngleCut{this, "SinAngleCut", 0.2}; //<! cut on the angle between the segment and the prediction
403 Gaudi::Property<bool> m_doGeometry{this, "DoGeometry", true}; //<! use chamber geometry in segment finding
404 Gaudi::Property<bool> m_curvedErrorScaling{this, "CurvedErrorScaling", true}; //<! rescale errors for low momenta
405 Gaudi::Property<bool> m_doSpacePoints{this, "UseTriggerSpacePoints", true}; //<! use cluster space points for association
406 Gaudi::Property<bool> m_createCompetingROTsEta{this, "CreateCompetingROTsEta", true}; //<! create competing ROTs for the clusters
407 Gaudi::Property<bool> m_createCompetingROTsPhi{this, "CreateCompetingROTsPhi", true}; //<! create competing ROTs for the clusters
408 Gaudi::Property<bool> m_refitParameters{this, "RefitSegment", false}; //<! refit segment if there are sufficient phi hits and update the segment parameters
409 Gaudi::Property<bool> m_addUnassociatedPhiHits{this, "AddUnassociatedPhiHits", false}; //<! if there are phi hits without associated eta hit add them to segment
410 Gaudi::Property<bool> m_strictRoadDirectionConsistencyCheck{this, "StrictRoadDirectionConsistencyCheck", true}; //<! check if direction of road is consistent with IP (default: true),
411 // should be off for cosmics
412 Gaudi::Property<double> m_maxAssociateClusterDistance{this, "MaxAssociateClusterDistance", 3000.}; //<! maximum distance for clusters to be associated to segment (default: 3000
413 //(mm))
414 Gaudi::Property<bool> m_allMdtHoles{this, "AllMdtHoles", false}; //<! add all mdt holes without bound checks / flag to decide whether to apply bound checks during the hole search
415 Gaudi::Property<bool> m_removeDeltas{this, "RemoveDeltasFromSegmentQuality", true}; //<! do not add delta electrons to MuonSegmentQuality::holes
416 Gaudi::Property<bool> m_reject1DTgcSpacePoints{this,"Reject1DTgcSpacePoints", true }; //<! remove 1D tgc space points / reject TGC eta hits that are not associated with a phi hit in the same gas gap
417 Gaudi::Property<bool> m_usePreciseError{this, "UsePreciseError", false};
418 Gaudi::Property<bool> m_outputFittedT0{this, "OutputFittedT0", false};
419 Gaudi::Property<double> m_preciseErrorScale{this, "PreciseErrorScale", 2.};
420 Gaudi::Property<bool> m_doTimeOutChecks{this, "UseTimeOutGard", false};
421
422 Gaudi::Property<bool> m_recoverBadRpcCabling{this, "RecoverBadRpcCabling", false};
423 Gaudi::Property<bool> m_updatePhiUsingPhiHits{this, "UpdatePhiUsingPhiHits", false};
424 Gaudi::Property<bool> m_assumePointingPhi{this, "AssumePointingPhi", false };
425 Gaudi::Property<bool> m_redo2DFit{this, "Redo2DFit", true};
426
427
428 SG::ReadHandleKey<Muon::MdtPrepDataContainer> m_mdtKey{this, "MdtPrepDataContainer", "MDT_DriftCircles"};
429
430 SG::ReadCondHandleKey<Muon::MuonIntersectGeoData> m_chamberGeoKey{this, "ChamberGeoKey", "MuonStationIntersects", "Pointer to hole search service"};
431
432
433 };
434
435} // namespace Muon
436#endif
Scalar phi() const
phi method
if(febId1==febId2)
Derived DataVector<T>.
Definition DataVector.h:795
The MuonDetectorManager stores the transient representation of the Muon Spectrometer geometry and pro...
Implementation of a IMuonSegmentMaker.
Gaudi::Property< bool > m_doSpacePoints
void find(const std::vector< const Trk::RIO_OnTrack * > &rios, Trk::SegmentCollection *segColl=nullptr) const
find segments starting from a list of RIO_OnTrack objects, implementation of IMuonSegmentMaker interf...
std::unique_ptr< MuonSegment > createSegment(const EventContext &ctx, TrkDriftCircleMath::Segment &segment, const Identifier &chid, const Amg::Vector3D &roadpos, const Amg::Vector3D &roaddir2, const std::vector< const MdtDriftCircleOnTrack * > &mdts, bool hasPhiMeasurements, segmentCreationInfo &sInfo, double beta=1.) const
bool errorScalingRegion(const Identifier &id) const
apply error scaling for low mometum tracks
ClusterVecPair create1DClusters(const std::vector< const MuonClusterOnTrack * > &clusters) const
std::map< Identifier, EtaPhiHitsPair > IdHitMap
Gaudi::Property< bool > m_addUnassociatedPhiHits
Gaudi::Property< bool > m_updatePhiUsingPhiHits
Gaudi::Property< bool > m_recoverBadRpcCabling
Gaudi::Property< bool > m_strictRoadDirectionConsistencyCheck
ToolHandle< IDCSLFitProvider > m_dcslFitProvider
Gaudi::Property< bool > m_doGeometry
Amg::Vector3D updateDirection(double linephi, const Trk::PlaneSurface &surf, const Amg::Vector3D &roaddir, bool isCurvedSegment) const
update the global direction, keeping the phi of the input road direction but using the local angle YZ
virtual ~DCMathSegmentMaker()=default
Gaudi::Property< double > m_sinAngleCut
Gaudi::Property< bool > m_removeDeltas
ToolHandle< IMuonClusterOnTrackCreator > m_clusterCreator
Gaudi::Property< bool > m_createCompetingROTsEta
ToolHandle< IMuonSegmentSelectionTool > m_segmentSelectionTool
std::map< Identifier, IdHitMap > ChIdHitMap
TrkDriftCircleMath::MdtChamberGeometry createChamberGeometry(const Identifier &chid, const Amg::Transform3D &gToStation) const
Gaudi::Property< bool > m_doTimeOutChecks
static double distanceToSegment(const TrkDriftCircleMath::Segment &segment, const Amg::Vector3D &hitPos, const Amg::Transform3D &gToStation)
Gaudi::Property< bool > m_outputFittedT0
const MdtDriftCircleOnTrack * findFirstRotInChamberWithMostHits(const std::vector< const MdtDriftCircleOnTrack * > &mdts) const
Gaudi::Property< double > m_preciseErrorScale
Gaudi::Property< bool > m_reject1DTgcSpacePoints
ToolHandle< IMuonSegmentFittingTool > m_segmentFitter
PublicToolHandle< MuonEDMPrinterTool > m_printer
std::pair< std::vector< const MuonClusterOnTrack * >, std::vector< const MuonClusterOnTrack * > > EtaPhiHitsPair
virtual StatusCode initialize()
TrkDriftCircleMath::CLVec createClusterVec(const Identifier &chid, ClusterVec &spVec, const Amg::Transform3D &gToStation) const
Cluster2D createTgcSpacePoint(const Identifier &gasGapId, const MuonClusterOnTrack *etaHit, const MuonClusterOnTrack *phiHit) const
Gaudi::Property< bool > m_curvedErrorScaling
Gaudi::Property< bool > m_redo2DFit
Gaudi::Property< bool > m_allMdtHoles
Gaudi::Property< bool > m_refitParameters
std::vector< Cluster2D > ClusterVec
bool updateSegmentPhi(const Amg::Vector3D &gpos, const Amg::Vector3D &gdir, Amg::Vector2D &segLocPos, Trk::LocalDirection &segLocDir, Trk::PlaneSurface &surf, const std::vector< const Trk::MeasurementBase * > &rots, double phimin, double phimax) const
TubeEnds localTubeEnds(const MdtDriftCircleOnTrack &mdt, const Amg::Transform3D &gToSegment, const Amg::Transform3D &segmentToG) const
calculate positions of tube ends
static void updatePhiRanges(double phiminNew, double phimaxNew, double &phiminRef, double &phimaxRef)
update phi ranges
SG::ReadHandleKey< Muon::MdtPrepDataContainer > m_mdtKey
ClusterVecPair create2DClusters(const std::vector< const MuonClusterOnTrack * > &clusters) const
SG::ReadCondHandleKey< Muon::MuonIntersectGeoData > m_chamberGeoKey
SG::ReadCondHandleKey< MuonGM::MuonDetectorManager > m_DetectorManagerKey
pointers to IdHelpers
bool checkBoundsInXZ(double xline, double zline, double dXdZ, const std::vector< HitInXZ > &hits) const
check whether all hits are in bounds in the XZ plane
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
ToolHandle< IMuonCompetingClustersOnTrackCreator > m_compClusterCreator
void associateMDTsToSegment(const Amg::Vector3D &gdir, TrkDriftCircleMath::Segment &segment, const TrkDriftCircleMath::ChamberGeometry *multiGeo, const Amg::Transform3D &gToStation, const Amg::Transform3D &amdbToGlobal, std::set< Identifier > &deltaVec, std::set< Identifier > &outoftimeVec, std::vector< std::pair< double, std::unique_ptr< const Trk::MeasurementBase > > > &rioDistVec, double beta=1.) const
double errorScaleFactor(const Identifier &id, double curvature, bool hasPhiMeasurements) const
calculate error scaling factor
Cluster2D createRpcSpacePoint(const Identifier &gasGapId, const MuonClusterOnTrack *etaHit, const std::vector< const MuonClusterOnTrack * > &phiHits) const
Gaudi::Property< bool > m_createCompetingROTsPhi
ToolHandle< IMdtDriftCircleOnTrackCreator > m_mdtCreator
Cluster2D createSpacePoint(const Identifier &gasGapId, const MuonClusterOnTrack *etaHit, const MuonClusterOnTrack *phiHit) const
Gaudi::Property< double > m_maxAssociateClusterDistance
std::pair< ClusterVec, ClusterVec > ClusterVecPair
ClusterVecPair createSpacePoints(const ChIdHitMap &chIdHitMap) const
const MdtPrepData * findMdt(const EventContext &ctx, const Identifier &id) const
Gaudi::Property< bool > m_usePreciseError
std::pair< std::pair< int, int >, bool > associateClustersToSegment(const TrkDriftCircleMath::Segment &segment, const Identifier &chid, const Amg::Transform3D &gToStation, ClusterVecPair &spVecs, double phimin, double phimax, std::vector< std::pair< double, std::unique_ptr< const Trk::MeasurementBase > > > &rioDistVec) const
ToolHandle< IMdtSegmentFinder > m_segmentFinder
static DataVector< const Trk::MeasurementBase > createROTVec(std::vector< std::pair< double, std::unique_ptr< const Trk::MeasurementBase > > > &rioDistVec)
ServiceHandle< IMuonEDMHelperSvc > m_edmHelperSvc
ToolHandle< IMdtDriftCircleOnTrackCreator > m_mdtCreatorT0
Gaudi::Property< bool > m_assumePointingPhi
static std::pair< double, double > residualAndPullWithSegment(const TrkDriftCircleMath::Segment &segment, const Cluster2D &spacePoint, const Amg::Transform3D &gToStation)
bool checkPhiConsistency(double phi, double phimin, double phimax) const
check whether phi is consistent with segment phi
std::vector< Identifier > calculateHoles(const EventContext &ctx, Identifier chid, const Amg::Vector3D &gpos, const Amg::Vector3D &gdir, bool hasMeasuredCoordinate, std::set< Identifier > &deltaVec, std::set< Identifier > &outoftimeVec, const std::vector< std::pair< double, std::unique_ptr< const Trk::MeasurementBase > > > &rioDistVec) const
TrkDriftCircleMath::DCVec createDCVec(const std::vector< const MdtDriftCircleOnTrack * > &mdts, double errorScale, std::set< Identifier > &chamberSet, double &phimin, double &phimax, TrkDriftCircleMath::DCStatistics &dcStatistics, const Amg::Transform3D &gToStation, const Amg::Transform3D &amdbToGlobal) const
This class represents the corrected MDT measurements, where the corrections include the effects of wi...
Class to represent measurements from the Monitored Drift Tubes.
Definition MdtPrepData.h:33
Base class for Muon cluster RIO_OnTracks.
Property holding a SG store/key/clid from which a ReadHandle is made.
This class offers no functionality, but to define a standard device for the maker to transfer to the ...
represents the three-dimensional global direction with respect to a planar surface frame.
Class for a planaer rectangular or trapezoidal surface in the ATLAS detector.
Class to handle RIO On Tracks ROT) for InDet and Muons, it inherits from the common MeasurementBase.
Definition RIO_OnTrack.h:70
Identifier identify() const
return the identifier -extends MeasurementBase
Abstract Base Class for tracking surfaces.
virtual void localToGlobal(const Amg::Vector2D &locp, const Amg::Vector3D &mom, Amg::Vector3D &glob) const =0
Specified by each surface type: LocalToGlobal method without dynamic memory allocation.
Encapsulates the information required by the find() method of the muon segment makers.
Definition TrackRoad.h:21
Eigen::Affine3d Transform3D
Eigen::Matrix< double, 2, 1 > Vector2D
Eigen::Matrix< double, 3, 1 > Vector3D
Ensure that the Athena extensions are properly loaded.
Definition GeoMuonHits.h:27
NRpcCablingAlg reads raw condition data and writes derived condition data to the condition store.
Function object to check whether two Segments are sub/super sets or different.
std::vector< DriftCircle > DCVec
Ensure that the ATLAS eigen extensions are properly loaded.
DataVector< Trk::Segment > SegmentCollection
const Trk::Surface & surface() const
Cluster2D(const Identifier elId, const Identifier ggId, const Amg::Vector2D &lp, double err, const MuonClusterOnTrack *ecl, const MuonClusterOnTrack *pcl)
constructor taking a single phi hit
std::vector< const MuonClusterOnTrack * > phiHits
Cluster2D(const Identifier elId, const Identifier ggId, const Amg::Vector2D &lp, double err, const MuonClusterOnTrack *ecl, const std::vector< const MuonClusterOnTrack * > &phs)
constructor taking a vector of phi hits
HitInXZ(Identifier i, bool isM, bool measP, double lx, double lz, double lxmin, double lxmax, double phmin, double phmax)
segmentCreationInfo(ClusterVecPair &spVecs, const TrkDriftCircleMath::ChamberGeometry *multiGeo, Amg::Transform3D gToStation, Amg::Transform3D amdbToGlobal, double pmin, double pmax)
const TrkDriftCircleMath::ChamberGeometry * geom
Function object to sort pairs containing a double and a pointer to a MuonClusterOnTrack.
bool operator()(const std::pair< double, std::unique_ptr< const Trk::MeasurementBase > > &hit1, const std::pair< double, std::unique_ptr< const Trk::MeasurementBase > > &hit2)
Function object to sort MuonClusterOnTrack pointers by Identier.
bool operator()(const MuonClusterOnTrack *cl1, const MuonClusterOnTrack *cl2)