File indexing completed on 2024-09-28 07:03:49
0001
0002
0003
0004 #ifndef JUGGLER_JUGRECO_CKFTracking_HH
0005 #define JUGGLER_JUGRECO_CKFTracking_HH
0006
0007 #include <functional>
0008 #include <random>
0009 #include <stdexcept>
0010 #include <vector>
0011
0012 #include "Gaudi/Property.h"
0013 #include "GaudiAlg/GaudiAlgorithm.h"
0014 #include "GaudiKernel/ToolHandle.h"
0015
0016 #include <k4FWCore/DataHandle.h>
0017 #include <k4Interface/IGeoSvc.h>
0018 #include "JugTrack/IActsGeoSvc.h"
0019 #include "JugTrack/DD4hepBField.h"
0020 #include "ActsExamples/EventData/GeometryContainers.hpp"
0021 #include "ActsExamples/EventData/Index.hpp"
0022 #include "ActsExamples/EventData/IndexSourceLink.hpp"
0023 #include "ActsExamples/EventData/Measurement.hpp"
0024 #include "ActsExamples/EventData/Track.hpp"
0025 #include "ActsExamples/EventData/Trajectories.hpp"
0026
0027 #include "edm4eic/TrackerHitCollection.h"
0028
0029 #include "Acts/Definitions/Common.hpp"
0030 #include "Acts/Geometry/TrackingGeometry.hpp"
0031 #include "Acts/TrackFinding/CombinatorialKalmanFilter.hpp"
0032 #include "Acts/TrackFinding/MeasurementSelector.hpp"
0033
0034 namespace Jug::Reco {
0035
0036
0037
0038
0039
0040 class CKFTracking : public GaudiAlgorithm {
0041 public:
0042
0043
0044 using TrackFinderOptions =
0045 Acts::CombinatorialKalmanFilterOptions<ActsExamples::IndexSourceLinkAccessor::Iterator,
0046 Acts::VectorMultiTrajectory>;
0047 using TrackFinderResult =
0048 Acts::Result<std::vector<ActsExamples::TrackContainer::TrackProxy>>;
0049
0050
0051
0052
0053 class CKFTrackingFunction {
0054 public:
0055 virtual ~CKFTrackingFunction() = default;
0056 virtual TrackFinderResult operator()(const ActsExamples::TrackParameters&,
0057 const TrackFinderOptions&,
0058 ActsExamples::TrackContainer&) const = 0;
0059 };
0060
0061
0062
0063
0064 static std::shared_ptr<CKFTrackingFunction> makeCKFTrackingFunction(
0065 std::shared_ptr<const Acts::TrackingGeometry> trackingGeometry,
0066 std::shared_ptr<const Acts::MagneticFieldProvider> magneticField);
0067
0068 public:
0069 DataHandle<ActsExamples::IndexSourceLinkContainer> m_inputSourceLinks{"inputSourceLinks", Gaudi::DataHandle::Reader, this};
0070 DataHandle<ActsExamples::MeasurementContainer> m_inputMeasurements{"inputMeasurements", Gaudi::DataHandle::Reader, this};
0071 DataHandle<ActsExamples::TrackParametersContainer> m_inputInitialTrackParameters{"inputInitialTrackParameters",
0072 Gaudi::DataHandle::Reader, this};
0073 DataHandle<ActsExamples::ConstTrackContainer> m_outputTracks{"outputTracks", Gaudi::DataHandle::Writer, this};
0074 DataHandle<ActsExamples::TrajectoriesContainer> m_outputTrajectories{"outputTrajectories", Gaudi::DataHandle::Writer, this};
0075
0076 Gaudi::Property<std::vector<double>> m_etaBins{this, "etaBins", {}};
0077 Gaudi::Property<std::vector<double>> m_chi2CutOff{this, "chi2CutOff", {15.}};
0078 Gaudi::Property<std::vector<size_t>> m_numMeasurementsCutOff{this, "numMeasurementsCutOff", {10}};
0079
0080 std::shared_ptr<CKFTrackingFunction> m_trackFinderFunc;
0081 SmartIF<IGeoSvc> m_geoSvc;
0082 SmartIF<IActsGeoSvc> m_actsGeoSvc;
0083
0084 std::shared_ptr<const Jug::BField::DD4hepBField> m_BField = nullptr;
0085 Acts::GeometryContext m_geoctx;
0086 Acts::CalibrationContext m_calibctx;
0087 Acts::MagneticFieldContext m_fieldctx;
0088
0089 Acts::MeasurementSelector::Config m_sourcelinkSelectorCfg;
0090 Acts::Logging::Level m_actsLoggingLevel = Acts::Logging::INFO;
0091
0092 CKFTracking(const std::string& name, ISvcLocator* svcLoc);
0093
0094 StatusCode initialize() override;
0095
0096 StatusCode execute() override;
0097 };
0098
0099 }
0100
0101 #endif