diff --git a/ACTSTracking/SourceLink.hxx b/ACTSTracking/SourceLink.hxx index ed69002..7b79a01 100644 --- a/ACTSTracking/SourceLink.hxx +++ b/ACTSTracking/SourceLink.hxx @@ -65,5 +65,16 @@ struct SourceLinkAccessor : GeometryIdMultisetAccessor { } }; +/// Access for the surface associated to a source link +struct SurfaceAccessor { + const std::shared_ptr trackingGeometry; + + const Acts::Surface* operator()(const Acts::SourceLink& sourceLink) const { + const auto& mySourceLink = sourceLink.get(); + return trackingGeometry->findSurface(mySourceLink.geometryId()); + } + }; + + } // namespace ACTSTracking diff --git a/src/ACTSTruthTrackingProc.cxx b/src/ACTSTruthTrackingProc.cxx index 7dc0dd8..f4539e7 100644 --- a/src/ACTSTruthTrackingProc.cxx +++ b/src/ACTSTruthTrackingProc.cxx @@ -231,6 +231,7 @@ void ACTSTruthTrackingProc::processEvent(LCEvent* evt) { // Make container // MeasurementContainer track; + ACTSTracking::MeasurementContainer measurements; std::vector trackSourceLinks; ACTSTracking::MeasurementContainer track; for (EVENT::TrackerHit* hit : trackFilteredByRHits) { @@ -263,6 +264,7 @@ void ACTSTruthTrackingProc::processEvent(LCEvent* evt) { sourceLink, loc, cov, Acts::eBoundLoc0, Acts::eBoundLoc1); track.push_back(meas); + measurements.push_back(meas); trackSourceLinks.push_back(sourceLink); } @@ -276,13 +278,22 @@ void ACTSTruthTrackingProc::processEvent(LCEvent* evt) { Updater kfUpdater; Smoother kfSmoother; + ACTSTracking::MeasurementCalibrator measCal { measurements }; + ACTSTracking::SurfaceAccessor surfaceAccessor {trackingGeometry()}; + Acts::KalmanFitterExtensions extensions; + extensions.calibrator.connect< + &ACTSTracking::MeasurementCalibrator::calibrate>( + &measCal); extensions.updater.connect< &Acts::GainMatrixUpdater::operator()>( &kfUpdater); extensions.smoother.connect< &Acts::GainMatrixSmoother::operator()>( &kfSmoother); + extensions.surfaceAccessor.connect< + &ACTSTracking::SurfaceAccessor::operator()>( + &surfaceAccessor); // Set the KalmanFitter options // std::unique_ptr