Back to home page

sPhenix code displayed by LXR

 
 

    


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;  // complement = 0xFFFFF... independent of integer type (32/64/... bits)
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 /* CALOBASE_RAWTOWERGEOMV3_H */