30 m_trackdistcutoff(0.020),
31 m_trackdistexppower(2),
32 m_constraintcutoff(9.),
34 m_maximumTracksNoCut(20),
35 m_maximumDistanceCut(3.)
37 declareProperty(
"useweights",m_useweights);
38 declareProperty(
"trackdistcutoff",m_trackdistcutoff);
39 declareProperty(
"trackdistexppower",m_trackdistexppower);
40 declareProperty(
"constrainttemp",m_constrainttemp);
41 declareProperty(
"constraintcutoff",m_constraintcutoff);
42 declareProperty(
"maximumTracksNoCut",m_maximumTracksNoCut);
43 declareProperty(
"maximumDistanceCut",m_maximumDistanceCut);
55 return StatusCode::SUCCESS;
80 const std::vector<const Trk::TrackParameters*>& perigeeList,
83 std::unique_ptr<Trk::IMode3dInfo>
info;
91 std::unique_ptr<Trk::IMode3dInfo>&
info,
92 const std::vector<const Trk::TrackParameters*>& perigeeList,
97 bool useCutOnDistance=
false;
100 useCutOnDistance=
true;
107 weightMatrixPositionConstraint.setIdentity();
108 if (constraint !=
nullptr) {
109 weightMatrixPositionConstraint = constraint->covariancePosition().inverse();
113 std::vector<PositionAndWeight> CrossingPointsAndWeights;
114 std::vector<Amg::Vector3D> CrossingPoints;
117 const std::vector<const Trk::TrackParameters*>::const_iterator
begin=perigeeList.begin();
118 const std::vector<const Trk::TrackParameters*>::const_iterator
end=perigeeList.end();
120 ATH_MSG_DEBUG(
" Loop pairs of TrackParameters for modes " );
122 std::vector< std::pair <int, int> > trkidx ;
124 for (std::vector<const Trk::TrackParameters*>::const_iterator
i=
begin;
i!=
end-1;++
i)
129 ATH_MSG_WARNING(
"Neutrals not supported for seeding. Rejecting this track..." );
134 for (std::vector<const Trk::TrackParameters*>::const_iterator j=
i+1;j!=
end;++j++) {
140 ATH_MSG_WARNING(
"Neutrals not supported for seeding. Rejecting this track..." );
147 std::optional<ITrkDistanceFinder::TwoPoints>
result
155 #ifdef CROSSDISTANCESSEEDFINDER_DEBUG
157 " y: " <<
result->first.y() <<
158 " z: " <<
result->first.z() );
160 " y: " <<
result->second.y() <<
161 " z: " <<
result->second.z() );
174 if (constraint!=
nullptr) {
178 ATH_MSG_DEBUG(
"position x: " << DeltaP.x() <<
"position y: " << DeltaP.y() <<
"position z: " << DeltaP.z() );
179 DeltaPConv[0]=DeltaP.x();
180 DeltaPConv[1]=DeltaP.y();
181 DeltaPConv[2]=DeltaP.z();
184 double chi2=DeltaPConv.transpose()*weightMatrixPositionConstraint*DeltaPConv;
195 CrossingPointsAndWeights.push_back( thispoint );
197 trkidx.emplace_back( idx_i - 1 , idx_j - 1 );
200 << MyI->parameters()[
Trk::d0] <<
" "<< idx_j - 1 <<
" "
201 << MyJ->parameters()[
Trk::d0] );
210 CrossingPoints.push_back( thispoint );
215 ATH_MSG_ERROR(
"Something wrong in distance calculation: please report..." );
225 || (
m_useweights && CrossingPointsAndWeights.empty() ) )
230 ATH_MSG_DEBUG(
" crossing points prepared : " << CrossingPointsAndWeights.size() );
243 info->setTrkidx (std::move (trkidx));
252 const std::vector<const Trk::Track*>& ,
const xAOD::Vertex * )
const
256 ATH_MSG_WARNING(
"Multi-seeding requested but seed finder not able to operate in that mode, returning no seeds" );
257 return std::vector<Amg::Vector3D>(0);
261 const std::vector<const Trk::TrackParameters*>& ,
const xAOD::Vertex * )
const
265 ATH_MSG_WARNING(
"Multi-seeding requested but seed finder not able to operate in that mode, returning no seeds" );
266 return std::vector<Amg::Vector3D>(0);