6 #include "Acts/Propagator/PropagatorOptions.hpp" 
   21 #include "Acts/Definitions/Units.hpp" 
   22 #include "Acts/Geometry/TrackingGeometry.hpp" 
   23 #include "Acts/Geometry/GeometryIdentifier.hpp" 
   24 #include "Acts/MagneticField/MagneticFieldProvider.hpp" 
   25 #include "Acts/Surfaces/Surface.hpp" 
   26 #include "Acts/TrackFinding/CombinatorialKalmanFilter.hpp" 
   27 #include "Acts/Surfaces/PerigeeSurface.hpp" 
   28 #include "Acts/Utilities/TrackHelpers.hpp" 
   29 #include "Acts/TrackFinding/TrackStateCreator.hpp" 
   47 #include <initializer_list> 
   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;
 
  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(1
ul);
 
  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();                  
 
  184     defaultTrackStateCreator.sourceLinkAccessor = slAccessorDelegate;
 
  185     defaultTrackStateCreator.calibrator.template connect<&detail::OnTrackCalibrator<detail::RecoTrackStateContainer>::calibrate>(&calibrator);
 
  188        &DefaultTrackStateCreator
 
  189        ::createTrackStates>(&defaultTrackStateCreator);
 
  193       for ( 
auto truthParticle: *truthHandle ) {
 
  194         ATH_MSG_DEBUG(
"truth: eta: " << truthParticle->eta() << 
" phi: " << truthParticle->phi() << 
" pt: " << truthParticle->pt());
 
  198     ATH_MSG_DEBUG(
"Size of proto tracks collection " << protoTracksHandle->size());
 
  200       if(protoTrack.measurements.empty()) 
continue;
 
  202       const Acts::Surface* refSurface = surfAcc.get(protoTrack.measurements[0]);
 
  204       auto res = 
m_actsFitter->fit(protoTrack.measurements, *protoTrack.parameters,
 
  205                                    tgContext, mfContext, calContext, refSurface);
 
  207       if (
res->size() == 0 ) 
continue;
 
  208       ATH_MSG_DEBUG(
".......Done fit of track with "<< protoTrack.measurements.size() << 
" measurements");
 
  209       const auto trackProxy = 
res->getTrack(0);
 
  210       if (not trackProxy.hasReferenceSurface()) {
 
  211         ATH_MSG_INFO(
"There is not reference surface for this track");
 
  215       Acts::BoundTrackParameters parametersAtRefSurface( trackProxy.referenceSurface().getSharedPtr(), 
 
  216                                                           trackProxy.parameters(), 
 
  217                                                           trackProxy.covariance(),
 
  218                                                           trackProxy.particleHypothesis());
 
  222       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())));
 
  223       ATH_MSG_DEBUG(
"Extending proto track of " << protoTrack.measurements.size() << 
" measurements");
 
  225                                                        tracksContainerTemp);
 
  228       ATH_MSG_DEBUG(
"Built " << tracksContainerTemp.size() << 
" tracks from it");
 
  229       for (detail::RecoTrackContainer::TrackProxy tempTrackProxy : tracksContainerTemp) {
 
  231         ATH_MSG_DEBUG(
"Reco MTJ size " << trackStateBackend.size() );
 
  232         for ( 
size_t stateIndex=0; stateIndex < trackStateBackend.size(); ++stateIndex) {
 
  233           auto state = trackStateBackend.getTrackState(stateIndex);
 
  236         ATH_MSG_DEBUG(
"Track has: " << tempTrackProxy.nMeasurements() << 
" measurements ");
 
  237         ATH_MSG_DEBUG(
"track: eta: " <<  -1 * 
log(
tan( tempTrackProxy.theta() * 0.5)) << 
" phi: " << tempTrackProxy.phi() << 
" pt:" << abs(1./tempTrackProxy.qOverP() * 
sin(protoTrack.parameters->theta())));
 
  239         destTrackProxy.copyFrom(tempTrackProxy);
 
  246     Acts::ConstVectorTrackContainer ctback( std::move(tback) );
 
  247     Acts::ConstVectorMultiTrajectory ctsBack( std::move(tsBack) );
 
  248     std::unique_ptr< ActsTrk::TrackContainer > ctrackContainer = std::make_unique< ActsTrk::TrackContainer >( std::move(ctback), std::move(ctsBack) );
 
  253     return StatusCode::SUCCESS;