File indexing completed on 2025-12-17 09:19:54
0001 #ifndef CALOBASE_RAWTOWERGEOMV5_H
0002 #define CALOBASE_RAWTOWERGEOMV5_H
0003
0004 #include "RawTowerGeom.h"
0005
0006 #include "RawTowerDefs.h"
0007
0008 #include <array>
0009 #include <iostream>
0010 #include <limits>
0011
0012 class RawTowerGeomv5 : public RawTowerGeom
0013 {
0014 public:
0015 RawTowerGeomv5() = default;
0016 RawTowerGeomv5(RawTowerDefs::keytype id);
0017 RawTowerGeomv5(const RawTowerGeom& geom0);
0018 ~RawTowerGeomv5() override = default;
0019
0020 void identify(std::ostream& os = std::cout) const override;
0021
0022 void set_id(RawTowerDefs::keytype key) override { _towerid = key; }
0023 RawTowerDefs::keytype get_id() const override { return _towerid; }
0024
0025 int get_bineta() const override { return RawTowerDefs::decode_index1(_towerid); }
0026 int get_binphi() const override { return RawTowerDefs::decode_index2(_towerid); }
0027 int get_column() const override { return RawTowerDefs::decode_index1(_towerid); }
0028 int get_row() const override { return RawTowerDefs::decode_index2(_towerid); }
0029
0030 void set_center_x(double x) override
0031 {
0032 _center[0] = x;
0033 return;
0034 }
0035 void set_center_y(double y) override
0036 {
0037 _center[1] = y;
0038 return;
0039 }
0040 void set_center_z(double z) override
0041 {
0042 _center[2] = z;
0043 return;
0044 }
0045 void set_rotx(double rotx) override
0046 {
0047 _rot[0] = rotx;
0048 return;
0049 }
0050 void set_roty(double roty) override
0051 {
0052 _rot[1] = roty;
0053 return;
0054 }
0055 void set_rotz(double rotz) override
0056 {
0057 _rot[2] = rotz;
0058 return;
0059 }
0060
0061 void set_vertices(const std::vector<double>&) override;
0062
0063 double get_center_x() const override { return _center[0]; }
0064 double get_center_y() const override { return _center[1]; }
0065 double get_center_z() const override { return _center[2]; }
0066 double get_center_int_x() const override { return _center_int[0]; }
0067 double get_center_int_y() const override { return _center_int[1]; }
0068 double get_center_int_z() const override { return _center_int[2]; }
0069 double get_center_ext_x() const override { return _center_ext[0]; }
0070 double get_center_ext_y() const override { return _center_ext[1]; }
0071 double get_center_ext_z() const override { return _center_ext[2]; }
0072 double get_center_low_eta_x() const override { return _center_low_eta[0]; }
0073 double get_center_low_eta_y() const override { return _center_low_eta[1]; }
0074 double get_center_low_eta_z() const override { return _center_low_eta[2]; }
0075 double get_center_high_eta_x() const override { return _center_high_eta[0]; }
0076 double get_center_high_eta_y() const override { return _center_high_eta[1]; }
0077 double get_center_high_eta_z() const override { return _center_high_eta[2]; }
0078 double get_center_low_phi_x() const override { return _center_low_phi[0]; }
0079 double get_center_low_phi_y() const override { return _center_low_phi[1]; }
0080 double get_center_low_phi_z() const override { return _center_low_phi[2]; }
0081 double get_center_high_phi_x() const override { return _center_high_phi[0]; }
0082 double get_center_high_phi_y() const override { return _center_high_phi[1]; }
0083 double get_center_high_phi_z() const override { return _center_high_phi[2]; }
0084 double get_rotx() const override { return _rot[0]; }
0085 double get_roty() const override { return _rot[1]; }
0086 double get_rotz() const override { return _rot[2]; }
0087 double get_vertex_x(int i) const override;
0088 double get_vertex_y(int i) const override;
0089 double get_vertex_z(int i) const override;
0090 double get_center_radius() const override;
0091 double get_eta() const override;
0092 double get_phi() const override;
0093 double get_theta() const override;
0094
0095 protected:
0096 RawTowerDefs::keytype _towerid{std::numeric_limits<RawTowerDefs::keytype>::max()};
0097
0098 static constexpr int _nVtx = 8;
0099 static constexpr int _nDim = 3;
0100
0101 std::array<double, _nDim> _center{
0102 std::numeric_limits<double>::quiet_NaN(),
0103 std::numeric_limits<double>::quiet_NaN(),
0104 std::numeric_limits<double>::quiet_NaN()};
0105 std::array<double, _nDim> _center_int{
0106 std::numeric_limits<double>::quiet_NaN(),
0107 std::numeric_limits<double>::quiet_NaN(),
0108 std::numeric_limits<double>::quiet_NaN()};
0109 std::array<double, _nDim> _center_ext{
0110 std::numeric_limits<double>::quiet_NaN(),
0111 std::numeric_limits<double>::quiet_NaN(),
0112 std::numeric_limits<double>::quiet_NaN()};
0113 std::array<double, _nDim> _center_low_eta{
0114 std::numeric_limits<double>::quiet_NaN(),
0115 std::numeric_limits<double>::quiet_NaN(),
0116 std::numeric_limits<double>::quiet_NaN()};
0117 std::array<double, _nDim> _center_high_eta{
0118 std::numeric_limits<double>::quiet_NaN(),
0119 std::numeric_limits<double>::quiet_NaN(),
0120 std::numeric_limits<double>::quiet_NaN()};
0121 std::array<double, _nDim> _center_low_phi{
0122 std::numeric_limits<double>::quiet_NaN(),
0123 std::numeric_limits<double>::quiet_NaN(),
0124 std::numeric_limits<double>::quiet_NaN()};
0125 std::array<double, _nDim> _center_high_phi{
0126 std::numeric_limits<double>::quiet_NaN(),
0127 std::numeric_limits<double>::quiet_NaN(),
0128 std::numeric_limits<double>::quiet_NaN()};
0129
0130 std::array<double, _nVtx * _nDim> _vertices{
0131 std::numeric_limits<double>::quiet_NaN(),
0132 std::numeric_limits<double>::quiet_NaN(),
0133 std::numeric_limits<double>::quiet_NaN(),
0134
0135 std::numeric_limits<double>::quiet_NaN(),
0136 std::numeric_limits<double>::quiet_NaN(),
0137 std::numeric_limits<double>::quiet_NaN(),
0138
0139 std::numeric_limits<double>::quiet_NaN(),
0140 std::numeric_limits<double>::quiet_NaN(),
0141 std::numeric_limits<double>::quiet_NaN(),
0142
0143 std::numeric_limits<double>::quiet_NaN(),
0144 std::numeric_limits<double>::quiet_NaN(),
0145 std::numeric_limits<double>::quiet_NaN(),
0146
0147 std::numeric_limits<double>::quiet_NaN(),
0148 std::numeric_limits<double>::quiet_NaN(),
0149 std::numeric_limits<double>::quiet_NaN(),
0150
0151 std::numeric_limits<double>::quiet_NaN(),
0152 std::numeric_limits<double>::quiet_NaN(),
0153 std::numeric_limits<double>::quiet_NaN(),
0154
0155 std::numeric_limits<double>::quiet_NaN(),
0156 std::numeric_limits<double>::quiet_NaN(),
0157 std::numeric_limits<double>::quiet_NaN(),
0158
0159 std::numeric_limits<double>::quiet_NaN(),
0160 std::numeric_limits<double>::quiet_NaN(),
0161 std::numeric_limits<double>::quiet_NaN()};
0162
0163 std::array<double, _nDim> _rot{
0164 std::numeric_limits<double>::quiet_NaN(),
0165 std::numeric_limits<double>::quiet_NaN(),
0166 std::numeric_limits<double>::quiet_NaN()};
0167
0168 ClassDefOverride(RawTowerGeomv5, 1)
0169 };
0170
0171 #endif