File indexing completed on 2025-08-06 08:17:29
0001 #ifndef CALOBASE_RAWTOWERGEOMV3_H
0002 #define CALOBASE_RAWTOWERGEOMV3_H
0003
0004 #include "RawTowerGeom.h"
0005
0006 #include "RawTowerDefs.h"
0007
0008 #include <iostream>
0009 #include <limits>
0010
0011 class RawTowerGeomv3 : public RawTowerGeom
0012 {
0013 public:
0014 RawTowerGeomv3() {}
0015 RawTowerGeomv3(RawTowerDefs::keytype id);
0016 ~RawTowerGeomv3() override {}
0017
0018 void identify(std::ostream& os = std::cout) const override;
0019
0020 void set_id(RawTowerDefs::keytype key) override { _towerid = key; }
0021 RawTowerDefs::keytype get_id() const override { return _towerid; }
0022
0023 int get_bineta() const override;
0024 int get_binphi() const override;
0025
0026 int get_column() const override { return get_bineta(); }
0027 int get_row() const override { return get_binphi(); }
0028
0029 int get_binl() const override { return RawTowerDefs::decode_index3v2(_towerid); }
0030
0031 void set_center_x(double x) override
0032 {
0033 _center_x = x;
0034 return;
0035 }
0036 void set_center_y(double y) override
0037 {
0038 _center_y = y;
0039 return;
0040 }
0041 void set_center_z(double z) override
0042 {
0043 _center_z = z;
0044 return;
0045 }
0046
0047 void set_size_x(double dx) override
0048 {
0049 _size_x = dx;
0050 return;
0051 }
0052 void set_size_y(double dy) override
0053 {
0054 _size_y = dy;
0055 return;
0056 }
0057 void set_size_z(double dz) override
0058 {
0059 _size_z = dz;
0060 return;
0061 }
0062
0063 double get_center_x() const override { return _center_x; }
0064 double get_center_y() const override { return _center_y; }
0065 double get_center_z() const override { return _center_z; }
0066
0067 double get_size_x() const override { return _size_x; }
0068 double get_size_y() const override { return _size_y; }
0069 double get_size_z() const override { return _size_z; }
0070 double get_volume() const override { return (_size_x * _size_y * _size_z); }
0071
0072 double get_center_radius() const override;
0073 double get_eta() const override;
0074 double get_phi() const override;
0075 double get_theta() const override;
0076
0077 void set_tower_type(int tt) override { _tower_type = tt; }
0078 int get_tower_type() const override { return _tower_type; }
0079
0080 protected:
0081 RawTowerDefs::keytype _towerid = ~0;
0082
0083 double _center_x{std::numeric_limits<double>::signaling_NaN()};
0084 double _center_y{std::numeric_limits<double>::signaling_NaN()};
0085 double _center_z{std::numeric_limits<double>::signaling_NaN()};
0086
0087 double _size_x{std::numeric_limits<double>::signaling_NaN()};
0088 double _size_y{std::numeric_limits<double>::signaling_NaN()};
0089 double _size_z{std::numeric_limits<double>::signaling_NaN()};
0090
0091 int _tower_type{-1};
0092
0093 ClassDefOverride(RawTowerGeomv3, 4)
0094 };
0095
0096 #endif