74 auto magneticField = std::make_unique<ATLASMagneticFieldWrapper>();
75 std::shared_ptr<const Acts::TrackingGeometry> trackingGeometry =
m_trackingGeometryTool->trackingGeometry();
78 detail::Navigator::Config cfg{trackingGeometry};
79 cfg.resolvePassive =
false;
80 cfg.resolveMaterial =
true;
81 cfg.resolveSensitive =
true;
90 Acts::TrackSelector::EtaBinnedConfig trackSelectorCfg(std::vector<double>({0, 4}));
91 trackSelectorCfg.cutSets[0].ptMin = 1000;
92 trackSelectorCfg.cutSets[0].ptMax = 1000000;
93 trackSelectorCfg.cutSets[0].minMeasurements = 3;
94 trackSelectorCfg.cutSets[0].maxHoles = 1;
95 trackSelectorCfg.cutSets[0].maxOutliers = 1;
96 trackSelectorCfg.cutSets[0].maxSharedHits = 1;
97 trackSelectorCfg.cutSets[0].maxChi2 = 25.;
100 std::move(extrapolator),
103 Acts::TrackSelector{trackSelectorCfg}};
105 m_ckfConfig = std::make_unique<detail::CKF_config>(std::move(ckfConfig));
106 return StatusCode::SUCCESS;
116 Acts::VectorTrackContainer tback;
117 Acts::VectorMultiTrajectory tsBack;
121 Acts::VectorTrackContainer trackBackend;
122 Acts::VectorMultiTrajectory trackStateBackend;
131 Acts::Vector3 beamPos( beamSpotData->
beamPos().x() * Acts::UnitConstants::mm,
132 beamSpotData->
beamPos().y() * Acts::UnitConstants::mm,
136 std::shared_ptr<Acts::PerigeeSurface> perigeeSurface = Acts::Surface::makeShared<Acts::PerigeeSurface>(beamPos);
139 const Acts::MagneticFieldContext mfContext =
m_extrapolationTool->getMagneticFieldContext(context);
145 ATH_MSG_DEBUG(
"Measurements (pixels only) size: " << pixelClustersHandle->size());
149 std::optional<detail::MeasurementIndex> measurementIndex;
152 measurementIndex.emplace(1ul);
153 measurementIndex->addMeasurements(*pixelClustersHandle);
156 using DefaultTrackStateCreator = Acts::TrackStateCreator<ActsTrk::detail::UncalibSourceLinkAccessor::Iterator,detail::RecoTrackContainer>;
159 DefaultTrackStateCreator::SourceLinkAccessor slAccessorDelegate;
162 Acts::PropagatorPlainOptions plainOptions(tgContext, mfContext);
163 plainOptions.maxSteps = 1000;
164 plainOptions.direction=
m_propagateForward ? Acts::Direction::Forward() : Acts::Direction::Backward();
173 perigeeSurface.get());
175 options.targetSurface = perigeeSurface.get();
185 defaultTrackStateCreator.sourceLinkAccessor = slAccessorDelegate;
186 defaultTrackStateCreator.calibrator.template connect<&detail::OnTrackCalibrator<detail::RecoTrackStateContainer>::calibrate>(&calibrator);
188 options.extensions.createTrackStates.template connect<
189 &DefaultTrackStateCreator
190 ::createTrackStates>(&defaultTrackStateCreator);
194 for (
auto truthParticle: *truthHandle ) {
195 ATH_MSG_DEBUG(
"truth: eta: " << truthParticle->eta() <<
" phi: " << truthParticle->phi() <<
" pt: " << truthParticle->pt());
199 ATH_MSG_DEBUG(
"Size of proto tracks collection " << protoTracksHandle->size());
201 if(protoTrack.measurements.empty())
continue;
203 const Acts::Surface* refSurface = surfAcc.
get(protoTrack.measurements[0]);
205 auto res =
m_actsFitter->fit(protoTrack.measurements, *protoTrack.parameters,
206 tgContext, mfContext, calContext, refSurface);
208 if (
res->size() == 0 )
continue;
209 ATH_MSG_DEBUG(
".......Done fit of track with "<< protoTrack.measurements.size() <<
" measurements");
210 const auto trackProxy =
res->getTrack(0);
211 if (not trackProxy.hasReferenceSurface()) {
212 ATH_MSG_INFO(
"There is not reference surface for this track");
216 Acts::BoundTrackParameters parametersAtRefSurface( trackProxy.referenceSurface().getSharedPtr(),
217 trackProxy.parameters(),
218 trackProxy.covariance(),
219 trackProxy.particleHypothesis());
223 ATH_MSG_DEBUG(
"proto track: eta: " << -1 * log(tan( parametersAtRefSurface.theta() * 0.5)) <<
" phi: " << parametersAtRefSurface.phi() <<
" pt:" << abs(1./protoTrack.parameters->qOverP() * sin(protoTrack.parameters->theta())));
224 ATH_MSG_DEBUG(
"Extending proto track of " << protoTrack.measurements.size() <<
" measurements");
225 auto result =
m_ckfConfig->ckf.findTracks(parametersAtRefSurface, options,
226 tracksContainerTemp);
229 ATH_MSG_DEBUG(
"Built " << tracksContainerTemp.size() <<
" tracks from it");
230 for (detail::RecoTrackContainer::TrackProxy tempTrackProxy : tracksContainerTemp) {
231 auto destTrackProxy = trackContainer.makeTrack();
232 ATH_MSG_DEBUG(
"Reco MTJ size " << trackStateBackend.size() );
233 for (
size_t stateIndex=0; stateIndex < trackStateBackend.size(); ++stateIndex) {
234 auto state = trackStateBackend.getTrackState(stateIndex);
237 ATH_MSG_DEBUG(
"Track has: " << tempTrackProxy.nMeasurements() <<
" measurements ");
238 ATH_MSG_DEBUG(
"track: eta: " << -1 * log(tan( tempTrackProxy.theta() * 0.5)) <<
" phi: " << tempTrackProxy.phi() <<
" pt:" << abs(1./tempTrackProxy.qOverP() * sin(protoTrack.parameters->theta())));
240 destTrackProxy.copyFrom(tempTrackProxy);
247 Acts::ConstVectorTrackContainer ctback( std::move(tback) );
248 Acts::ConstVectorMultiTrajectory ctsBack( std::move(tsBack) );
249 std::unique_ptr< ActsTrk::TrackContainer > ctrackContainer = std::make_unique< ActsTrk::TrackContainer >( std::move(ctback), std::move(ctsBack) );
254 return StatusCode::SUCCESS;