LDMX Software
TruthSeedProcessor.h
1#pragma once
2
3//--- Framework ---//
4#include "Framework/Configure/Parameters.h"
6#include "Framework/Logger.h"
7#include "SimCore/Event/SimParticle.h"
9
10// --- Tracking --- //
11#include "Tracking/Event/Track.h"
12#include "Tracking/Event/TruthTrack.h"
13#include "Tracking/Reco/TrackExtrapolatorTool.h"
14#include "Tracking/Reco/TrackingGeometryUser.h"
15#include "Tracking/Sim/TrackingUtils.h"
16
17// --- ACTS --- //
18#include <random>
19
20#include "Acts/Definitions/Algebra.hpp"
21#include "Acts/Definitions/TrackParametrization.hpp"
22#include "Acts/EventData/TrackParameters.hpp"
23#include "Acts/Propagator/EigenStepper.hpp"
24#include "Acts/Propagator/Navigator.hpp"
25#include "Acts/Propagator/Propagator.hpp"
26#include "Acts/Surfaces/PerigeeSurface.hpp"
27#include "Tracking/Sim/BFieldXYZUtils.h"
28
29using TruthPropagator = Acts::Propagator<Acts::EigenStepper<>, Acts::Navigator>;
30
31namespace tracking::reco {
32
44 public:
52 TruthSeedProcessor(const std::string& name, framework::Process& process);
53
55 virtual ~TruthSeedProcessor() = default;
56
67 void configure(framework::config::Parameters& parameters) override;
68
74 void onProcessStart() override {};
75
82 void onNewRun(const ldmx::RunHeader& rh) override;
83
90 void produce(framework::Event& event) override;
91
92 private:
100 void makeHitCountMap(const std::vector<ldmx::SimTrackerHit>& sim_hits,
101 std::map<int, std::vector<int>>& hit_count_map);
102
109 void createTruthTrack(const ldmx::SimParticle& particle, ldmx::Track& trk,
110 const std::shared_ptr<Acts::Surface>& target_surface);
111
120 void createTruthTrack(const ldmx::SimParticle& particle,
121 const ldmx::SimTrackerHit& hit, ldmx::Track& trk,
122 const std::shared_ptr<Acts::Surface>& target_surface);
123
133 void createTruthTrack(const std::vector<double>& pos_vec,
134 const std::vector<double>& p_vec, int charge,
135 ldmx::Track& trk,
136 const std::shared_ptr<Acts::Surface>& target_surface);
137
147 const ldmx::SimTrackerHit& hit,
148 const std::vector<ldmx::SimTrackerHit>& ecal_sp_hits);
149
156 ldmx::Track seedFromTruth(const ldmx::Track& tt, bool seed_smearing);
157
158 ldmx::Track recoilFullSeed(
159 const ldmx::SimParticle& particle, const int trackID,
160 const ldmx::SimTrackerHit& hit, const ldmx::SimTrackerHit& ecal_hit,
161 const std::map<int, std::vector<int>>& hit_count_map,
162 const std::shared_ptr<Acts::Surface>& origin_surface,
163 const std::shared_ptr<Acts::Surface>& target_surface,
164 const std::shared_ptr<Acts::Surface>& ecal_surface);
165
186 const ldmx::SimParticle& beam_electron, const int trackID,
187 const ldmx::SimTrackerHit& hit,
188 const std::map<int, std::vector<int>>& hit_count_map,
189 const std::shared_ptr<Acts::Surface>& origin_surface,
190 const std::shared_ptr<Acts::Surface>& target_surface);
191
193 Acts::GeometryContext gctx_;
194
196 std::vector<int> pdg_ids_{11};
197
199 std::string scoring_hits_coll_name_{"TargetScoringPlaneHits"};
200 std::string ecal_sp_coll_name_{"EcalScoringPlaneHits"};
201 std::string sp_pass_name_{""};
202
204 std::string tagger_sim_hits_coll_name_{"TaggerSimHits"};
205
207 std::string recoil_sim_hits_coll_name_{"RecoilSimHits"};
208
210 std::string input_pass_name_{""};
211
212 std::string sim_particles_coll_name_;
213 std::string sim_particles_passname_;
214
220
226
231 float z_min_{-999};
232
234 int track_id_{-999};
235
237 double pz_cut_{-9999};
238
240 double p_cut_{0.};
241
243 double p_cut_max_{100000.};
244
245 // Ask for a minimum p for the seeds at the ecal (from truth)
246 double p_cut_ecal_{-1.};
247
248 // Use scoring plane for recoil truth tracks
249 bool recoil_sp_{true};
250
251 // Use scoring plane for target truth tracks
252 bool target_sp_{true};
253
254 // skip the tagger tracker
255 bool skip_tagger_{false};
256
257 // skip the recoil tracker
258 bool skip_recoil_{false};
259
260 // Maximum track id for hit to be selected from target scoring plane
261 int max_track_id_{5};
262
263 std::unique_ptr<const TruthPropagator> propagator_;
264
265 // Track Extrapolator Tool
266 std::shared_ptr<tracking::reco::TrackExtrapolatorTool<TruthPropagator>>
267 trk_extrap_;
268
270 std::string field_map_{""};
271
272 //--- Smearing ---//
273
274 std::default_random_engine generator_;
275 std::shared_ptr<std::normal_distribution<float>> normal_;
276
277 bool seed_smearing_{false};
278
279 std::vector<double> d0smear_;
280 std::vector<double> z0smear_;
281 double phismear_;
282 double thetasmear_;
283 double relpsmear_;
284 std::vector<double> rel_smearfactors_;
285 std::vector<double> inflate_factors_;
286 std::vector<double> beam_origin_{-880.1, -44., 0.};
287 int particle_hypothesis_;
288
289 std::string beam_electrons_collection_;
290 std::string tagger_truth_collection_;
291 std::string recoil_truth_collection_;
292 std::string tagger_seeds_collection_;
293 std::string recoil_seeds_collection_;
294};
295} // namespace tracking::reco
Base classes for all user event processing components to extend.
Class which encapsulates information from a hit in a simulated tracking detector.
Implements an event buffer system for storing event data.
Definition Event.h:42
Class which represents the process under execution.
Definition Process.h:37
virtual void process(Event &event) final
Processing an event for a Producer is calling produce.
Class encapsulating parameters for configuring a processor.
Definition Parameters.h:29
Run-specific configuration and data stored in its own output TTree alongside the event TTree in the o...
Definition RunHeader.h:57
Class representing a simulated particle.
Definition SimParticle.h:24
Represents a simulated tracker hit in the simulation.
Implementation of a track object.
Definition Track.h:53
a helper base class providing some methods to shorten access to common conditions used within the tra...
Create a track seed using truth information extracted from the corresponding SimParticle or SimTracke...
float z_min_
Min cut on the z_ of the scoring hit.
void createTruthTrack(const ldmx::SimParticle &particle, ldmx::Track &trk, const std::shared_ptr< Acts::Surface > &target_surface)
Use the vertex position of the SimParticle to extract (x_, y_, z_, px, py, pz, q) and create a track ...
std::string input_pass_name_
Pass name for the sim hit collections.
std::string recoil_sim_hits_coll_name_
Sim hits to check if the truth seed is findable.
void onNewRun(const ldmx::RunHeader &rh) override
onNewRun is the first function called for each processor after the conditions are fully configured an...
std::vector< int > pdg_ids_
pdg_ids of the particles we want to select for the seeds
void produce(framework::Event &event) override
Main loop that creates the seed tracks for both the tagger and recoil tracker.
int track_id_
Only select a particular trackID.
void configure(framework::config::Parameters &parameters) override
Callback for the EventProcessor to configure itself from the given set of parameters.
double pz_cut_
Ask for a minimum pz for the seeds.
TruthSeedProcessor(const std::string &name, framework::Process &process)
Constructor.
double p_cut_
Ask for a minimum p for the seeds.
void makeHitCountMap(const std::vector< ldmx::SimTrackerHit > &sim_hits, std::map< int, std::vector< int > > &hit_count_map)
Create a mapping from the selected scoring plane hit objects to the number of hits they associated pa...
void onProcessStart() override
Callback for the EventProcessor to take any necessary action when the processing of events starts.
std::string field_map_
Path to the magnetic field map.
std::string scoring_hits_coll_name_
Which scoring plane hits to use for the truth seeds generation.
std::string tagger_sim_hits_coll_name_
Sim hits to check if the truth seed is findable.
ldmx::Track taggerFullSeed(const ldmx::SimParticle &beam_electron, const int trackID, const ldmx::SimTrackerHit &hit, const std::map< int, std::vector< int > > &hit_count_map, const std::shared_ptr< Acts::Surface > &origin_surface, const std::shared_ptr< Acts::Surface > &target_surface)
This method retrieves the beam electron and forms a full seed The seed parameters are the truth param...
virtual ~TruthSeedProcessor()=default
Destructor.
bool scoringPlaneHitFilter(const ldmx::SimTrackerHit &hit, const std::vector< ldmx::SimTrackerHit > &ecal_sp_hits)
Filter that checks if a scoring plane passes specified momentum cuts as well as if the associated Sim...
double p_cut_max_
Ask for a maximum p for the seeds.
int n_min_hits_tagger_
Minimum number of hits left in the recoil tracker to consider the seed as findable.
int n_min_hits_recoil_
Minimum number of hits left in the recoil tracker to consider the seed as findable.
ldmx::Track seedFromTruth(const ldmx::Track &tt, bool seed_smearing)
Create a track seed from a truth track applying a smearing to the truth parameters as well as an infl...
Acts::GeometryContext gctx_
The ACTS geometry context properly.