57 {
58
59 if(
track.measurementsOnTrack()->size()==0)
60 {
61 ATH_MSG_ERROR(
"Cannot create a DKF track -- Trk::Track has no hits");
62 return false;
63 }
64 vpTrkNodes.clear();
65 vpTrkNodes.reserve(
track.measurementsOnTrack()->size());
66 for (
auto tMOT =
track.measurementsOnTrack()->begin(); tMOT !=
track.measurementsOnTrack()->end(); ++tMOT) {
67 const Trk::Surface& rSurf=(*tMOT)->associatedSurface();
68 constexpr double radLength=0.022;
69 double C[3],
N[3],M[3][3];
80 for(
int i=0;
i<3;
i++) {
82 }
83 Trk::TrkPlanarSurface* pS =
new Trk::TrkPlanarSurface(
C,N,M,radLength, &(rSurf));
84
85 const InDet::SiClusterOnTrack* siCLOT = dynamic_cast<const InDet::SiClusterOnTrack*>(*tMOT);
86 if (siCLOT==nullptr) {
88 continue;
89 }
90 const InDet::SiCluster* siCL =
dynamic_cast<const InDet::SiCluster*
>(siCLOT->
prepRawData());
91 if (siCL==nullptr) {
93 continue;
94 }
95 Identifier id = (*tMOT)->associatedSurface().associatedDetectorElement()->identify();
98 const InDetDD::SiDetectorElement* sctElement = dynamic_cast<const InDetDD::SiDetectorElement*>
99 ((*tMOT)->associatedSurface().associatedDetectorElement());
100 if (sctElement) {
102 {
104 const Trk::SurfaceBounds& rBounds=rSurf.
bounds();
105 const Trk::TrapezoidBounds& ecBounds= dynamic_cast<const Trk::TrapezoidBounds&>(rBounds);
108 vpTrkNodes.push_back(new Trk::TrkEndCapClusterNode(pS,DChi2,siCL,R));
109 }
112 vpTrkNodes.push_back(new Trk::TrkClusterNode(pS,DChi2,siCL));
113 }
116 const Trk::SurfaceBounds& rBounds=rSurf.
bounds();
117 const Trk::AnnulusBounds& ecBounds= dynamic_cast<const Trk::AnnulusBounds&>(rBounds);
119 vpTrkNodes.push_back(new Trk::TrkEndCapClusterNode(pS,DChi2,siCL,R));
120 }
121 }
122 else {
123 ATH_MSG_WARNING(
"Identifier is SCT but does not match endcap or barrel shape");
124 }
125 }
128 vpTrkNodes.push_back(new Trk::TrkPixelNode(pS,DChi2,siCL));
129 }
130 else {
132 }
133 }
134 ATH_MSG_DEBUG(vpTrkNodes.size()<<
" filtering nodes created");
135
136 return true;
137}
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
virtual DetectorShape shape() const
Shape of element.
virtual const SiDetectorDesign & design() const override final
access to the local description (inline):
double waferCentreR() const
This method returns the R-parameter from design of sensors, which is the radius that the original cen...
virtual const Trk::PrepRawData * prepRawData() const =0
returns the PrepRawData (also known as RIO) object to which this RIO_OnTrack is associated.
virtual const Amg::Vector3D & normal() const
Returns the normal vector of the Surface (i.e.
const Amg::Transform3D & transform() const
Returns HepGeom::Transform3D by reference.
virtual const SurfaceBounds & bounds() const =0
Surface Bounds method.
const Amg::Vector3D & center() const
Returns the center position of the Surface.
double halflengthY() const
This method returns the halflength in Y (second coordinate of local surface frame)
double minHalflengthX() const
This method returns the minimal halflength in X (first coordinate of local surface frame)
double maxHalflengthX() const
This method returns the maximal halflength in X (first coordinate of local surface frame)
Eigen::Matrix< double, 3, 1 > Vector3D
double R(const INavigable4Momentum *p1, const double v_eta, const double v_phi)