7#ifndef ECAL_ECALTRACKFINDERPROCESSOR_H_
8#define ECAL_ECALTRACKFINDERPROCESSOR_H_
12#include "Ecal/Event/EcalHit.h"
13#include "Framework/Configure/Parameters.h"
16#include "Tracking/Event/Measurement.h"
17#include "Tracking/Event/Track.h"
18#include "Tracking/Sim/IndexSourceLink.h"
21#include "Acts/Definitions/Algebra.hpp"
22#include "Acts/EventData/TrackContainer.hpp"
23#include "Acts/EventData/VectorMultiTrajectory.hpp"
24#include "Acts/EventData/VectorTrackContainer.hpp"
25#include "Acts/Geometry/GeometryIdentifier.hpp"
26#include "Acts/Geometry/TrackingGeometry.hpp"
27#include "Acts/Propagator/EigenStepper.hpp"
28#include "Acts/Propagator/Navigator.hpp"
29#include "Acts/Propagator/Propagator.hpp"
30#include "Acts/Surfaces/Surface.hpp"
31#include "Acts/TrackFinding/CombinatorialKalmanFilter.hpp"
36#include <unordered_map>
90 const std::vector<ldmx::EcalHit>& hits, std::vector<double>& energies);
101 const std::vector<ldmx::Measurement>& measurements);
108 const std::vector<Acts::Vector3>& points);
113 std::unordered_multimap<Acts::GeometryIdentifier,
118 using EcalPropagator =
119 Acts::Propagator<Acts::EigenStepper<>, Acts::Navigator>;
120 using TrackContainer = Acts::TrackContainer<Acts::VectorTrackContainer,
121 Acts::VectorMultiTrajectory>;
124 std::unique_ptr<const EcalPropagator> propagator_;
126 const Acts::CombinatorialKalmanFilter<EcalPropagator, TrackContainer>>
130 std::map<int, std::shared_ptr<Acts::Surface>> layer_surfaces_;
135 std::map<int, Acts::GeometryIdentifier> layer_geo_ids_;
138 std::shared_ptr<Acts::Surface> reference_surface_;
141 std::shared_ptr<const Acts::TrackingGeometry> tracking_geometry_;
144 Acts::RotationMatrix3 surf_rotation_;
147 std::string rec_coll_name_{
"EcalRecHits"};
148 std::string rec_pass_name_{
""};
149 std::string out_track_collection_{
"EcalTracks"};
151 double max_chi2_{10.0};
152 double cell_resolution_{1.5};
156 double max_seed_rms_{10.0};
157 double min_momentum_{50.0};
158 double max_momentum_{10000.0};
161 bool use_roc_energy_{
true};
162 std::string roc_file_name_;
163 std::vector<std::vector<float>> roc_range_values_;
172 double processing_time_{0.0};
Class that translates raw positions of ECal module hits into cells in a hexagonal readout.
The only reason this file exists is to silence an annoying maybe-uninitialized warning that originate...
Base classes for all user event processing components to extend.
A source link that stores just an index_.
Uses ACTS framework to fit tracks through ECAL hits with zero B-field.
virtual ~EcalTrackFinderProcessor()=default
Destructor.
EcalTrackFinderProcessor(const std::string &name, framework::Process &process)
Constructor.
void onNewRun(const ldmx::RunHeader &) override
Initialize ACTS tracking objects once the detector geometry is known.
std::vector< ldmx::Measurement > createMeasurements(const std::vector< ldmx::EcalHit > &hits, std::vector< double > &energies)
Create ACTS measurement objects from ECAL hits.
std::unordered_multimap< Acts::GeometryIdentifier, acts_examples::IndexSourceLink > makeGeoIdSourceLinkMap(const std::vector< ldmx::Measurement > &measurements)
Create geometry ID to source link map for CKF.
std::tuple< Acts::Vector3, Acts::Vector3, double > fitStraightLine(const std::vector< Acts::Vector3 > &points)
Fit straight line through 3D points Returns: (position, direction, RMS residual)
void produce(framework::Event &event) override
Process event to find ECAL tracks.
void configure(framework::config::Parameters ¶meters) override
Configure the processor.
std::vector< ldmx::Track > findSeeds(const std::vector< ldmx::Measurement > &measurements)
Find seed tracks via straight-line fitting.
void createEcalSurfaces()
Create unbounded plane surfaces at each ECAL layer.
void onProcessEnd() override
Print statistics.
Implements an event buffer system for storing event data.
Class which represents the process under execution.
Base class for a module which produces a data product.
virtual void process(Event &event) final
Processing an event for a Producer is calling produce.
Class encapsulating parameters for configuring a processor.
Translation between real-space positions and cell IDs within the ECal.