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