Back to home page

sPhenix code displayed by LXR

 
 

    


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