File indexing completed on 2025-12-16 09:22:01
0001
0002
0003 #ifndef G4MAIN_PHG4SHOWERV1_H
0004 #define G4MAIN_PHG4SHOWERV1_H
0005
0006 #include "PHG4Shower.h"
0007
0008 #include "PHG4HitDefs.h"
0009
0010 #include <cstddef> // for size_t
0011 #include <iostream>
0012 #include <limits>
0013 #include <map>
0014 #include <set>
0015
0016 class PHG4Showerv1 : public PHG4Shower
0017 {
0018 public:
0019 PHG4Showerv1();
0020 ~PHG4Showerv1() override = default;
0021
0022
0023
0024 void identify(std::ostream& os = std::cout) const override;
0025 PHG4Shower* CloneMe() const override { return (new PHG4Showerv1(*this)); }
0026 void Reset() override { *this = PHG4Showerv1(); }
0027 int isValid() const override;
0028
0029
0030
0031 int get_id() const override { return _id; }
0032 void set_id(int id) override { _id = id; }
0033
0034 int get_parent_particle_id() const override { return _parent_particle_id; }
0035 void set_parent_particle_id(int parent_particle_id) override { _parent_particle_id = parent_particle_id; }
0036
0037 int get_parent_shower_id() const override { return _parent_shower_id; }
0038 void set_parent_shower_id(int parent_shower_id) override { _parent_shower_id = parent_shower_id; }
0039
0040 float get_x() const override { return _pos[0]; }
0041 void set_x(float x) override { _pos[0] = x; }
0042
0043 float get_y() const override { return _pos[1]; }
0044 void set_y(float y) override { _pos[1] = y; }
0045
0046 float get_z() const override { return _pos[2]; }
0047 void set_z(float z) override { _pos[2] = z; }
0048
0049 float get_position(unsigned int coor) const override { return _pos[coor]; }
0050 void set_position(unsigned int coor, float xi) override { _pos[coor] = xi; }
0051
0052 float get_covar(unsigned int i, unsigned int j) const override;
0053 void set_covar(unsigned int i, unsigned int j, float value) override;
0054
0055 unsigned int get_nhits(int volume) const override;
0056 void set_nhits(int volume, unsigned int nhits) override { _nhits[volume] = nhits; }
0057
0058 double get_edep() const override;
0059 float get_edep(int volume) const override;
0060 void set_edep(int volume, float edep) override { _edep[volume] = edep; }
0061
0062 double get_eion() const override;
0063 float get_eion(int volume) const override;
0064 void set_eion(int volume, float eion) override { _eion[volume] = eion; }
0065
0066 float get_light_yield(int volume) const override;
0067 void set_light_yield(int volume, float light_yield) override { _light_yield[volume] = light_yield; }
0068
0069 float get_eh_ratio(int volume) const override;
0070 void set_eh_ratio(int volume, float eh_ratio) override { _eh_ratio[volume] = eh_ratio; }
0071
0072
0073 bool empty_g4particle_id() const override { return _g4particle_ids.empty(); }
0074 size_t size_g4particle_id() const override { return _g4particle_ids.size(); }
0075 void add_g4particle_id(int id) override { _g4particle_ids.insert(id); }
0076 PHG4Shower::ParticleIdIter begin_g4particle_id() override { return _g4particle_ids.begin(); }
0077 PHG4Shower::ParticleIdConstIter begin_g4particle_id() const override { return _g4particle_ids.begin(); }
0078 PHG4Shower::ParticleIdIter end_g4particle_id() override { return _g4particle_ids.end(); }
0079 PHG4Shower::ParticleIdConstIter end_g4particle_id() const override { return _g4particle_ids.end(); }
0080 size_t remove_g4particle_id(int id) override { return _g4particle_ids.erase(id); }
0081 void clear_g4particle_id() override { return _g4particle_ids.clear(); }
0082 const ParticleIdSet& g4particle_ids() const override { return _g4particle_ids; }
0083
0084 bool empty_g4vertex_id() const override { return _g4vertex_ids.empty(); }
0085 size_t size_g4vertex_id() const override { return _g4vertex_ids.size(); }
0086 void add_g4vertex_id(int id) override { _g4vertex_ids.insert(id); }
0087 PHG4Shower::VertexIdIter begin_g4vertex_id() override { return _g4vertex_ids.begin(); }
0088 PHG4Shower::VertexIdConstIter begin_g4vertex_id() const override { return _g4vertex_ids.begin(); }
0089 PHG4Shower::VertexIdIter end_g4vertex_id() override { return _g4vertex_ids.end(); }
0090 PHG4Shower::VertexIdConstIter end_g4vertex_id() const override { return _g4vertex_ids.end(); }
0091 size_t remove_g4vertex_id(int id) override { return _g4vertex_ids.erase(id); }
0092 void clear_g4vertex_id() override { return _g4vertex_ids.clear(); }
0093 const VertexIdSet& g4vertex_ids() const override { return _g4vertex_ids; }
0094
0095 bool empty_g4hit_id() const override { return _g4hit_ids.empty(); }
0096 size_t size_g4hit_id() const override { return _g4hit_ids.size(); }
0097 void add_g4hit_id(int volume, PHG4HitDefs::keytype id) override { _g4hit_ids[volume].insert(id); }
0098 PHG4Shower::HitIdIter begin_g4hit_id() override { return _g4hit_ids.begin(); }
0099 PHG4Shower::HitIdConstIter begin_g4hit_id() const override { return _g4hit_ids.begin(); }
0100 PHG4Shower::HitIdIter find_g4hit_id(int volume) override { return _g4hit_ids.find(volume); }
0101 PHG4Shower::HitIdConstIter find_g4hit_id(int volume) const override { return _g4hit_ids.find(volume); }
0102 PHG4Shower::HitIdIter end_g4hit_id() override { return _g4hit_ids.end(); }
0103 PHG4Shower::HitIdConstIter end_g4hit_id() const override { return _g4hit_ids.end(); }
0104 size_t remove_g4hit_id(int volume, PHG4HitDefs::keytype id) override { return _g4hit_ids[volume].erase(id); }
0105 size_t remove_g4hit_volume(int volume) override { return _g4hit_ids.erase(volume); }
0106 void clear_g4hit_id() override { return _g4hit_ids.clear(); }
0107 const HitIdMap& g4hit_ids() const override { return _g4hit_ids; }
0108
0109 private:
0110 unsigned int covar_index(unsigned int i, unsigned int j) const;
0111
0112 int _id{std::numeric_limits<int>::min()};
0113 int _parent_particle_id{0};
0114 int _parent_shower_id{0};
0115 float _pos[3]{};
0116 float _covar[6]{};
0117 std::map<int, unsigned int> _nhits;
0118 std::map<int, float> _edep;
0119 std::map<int, float> _eion;
0120 std::map<int, float> _light_yield;
0121 std::map<int, float> _eh_ratio;
0122
0123
0124 ParticleIdSet _g4particle_ids;
0125 VertexIdSet _g4vertex_ids;
0126 HitIdMap _g4hit_ids;
0127
0128 ClassDefOverride(PHG4Showerv1, 1);
0129 };
0130
0131 #endif