actions
Loading...
Searching...
No Matches
gTrackProvenance.h
Go to the documentation of this file.
1#pragma once
2
3// Geant4
4#include "G4ThreeVector.hh"
5
6// C++
7#include <unordered_set>
8#include <vector>
9
10class G4Track;
11
16{
17 int pid = 0;
18 int tid = 0;
19 int mtid = 0;
20 int otid = 0;
21 double kinetic_energy = 0;
22 G4ThreeVector momentum;
23 G4ThreeVector vertex;
24};
25
33{
34public:
35 explicit GTrackProvenance(bool save_ancestors);
36
37 void clear();
38 void record(const G4Track& track);
39 void record(int pid, int track_id, int parent_id, double kinetic_energy,
40 const G4ThreeVector& momentum, const G4ThreeVector& vertex);
41
42 [[nodiscard]] int originalTrackId(int track_id) const;
43 [[nodiscard]] int originalTrackPid(int track_id) const;
44 [[nodiscard]] G4ThreeVector originalTrackMomentum(int track_id) const;
45 [[nodiscard]] std::vector<GTrackRecord> ancestorsForTracks(
46 const std::unordered_set<int>& track_ids) const;
47
48private:
49 void ensureCapacity(int track_id);
50
51 bool save_ancestor_records = false;
52 std::vector<int> original_track_ids;
53 std::vector<int> original_track_pids;
54 std::vector<G4ThreeVector> original_track_momenta;
55 std::vector<GTrackRecord> track_records;
56};
Worker-local, event-scoped track ancestry registry.
GTrackProvenance(bool save_ancestors)
void record(const G4Track &track)
int originalTrackId(int track_id) const
G4ThreeVector originalTrackMomentum(int track_id) const
std::vector< GTrackRecord > ancestorsForTracks(const std::unordered_set< int > &track_ids) const
int originalTrackPid(int track_id) const
Immutable initial information recorded for one Geant4 track.
G4ThreeVector momentum
G4ThreeVector vertex