Back to home page

sPhenix code displayed by LXR

 
 

    


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(),  // vertex 1 (new line for readability)
0134 
0135       std::numeric_limits<double>::quiet_NaN(),
0136       std::numeric_limits<double>::quiet_NaN(),
0137       std::numeric_limits<double>::quiet_NaN(),  // vertex 2
0138 
0139       std::numeric_limits<double>::quiet_NaN(),
0140       std::numeric_limits<double>::quiet_NaN(),
0141       std::numeric_limits<double>::quiet_NaN(),  // etc.
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