File indexing completed on 2025-08-06 08:17:29
0001 #include "RawTowerGeomv5.h"
0002
0003 #include <cmath>
0004 #include <iostream>
0005
0006 RawTowerGeomv5::RawTowerGeomv5(RawTowerDefs::keytype id)
0007 : _towerid(id)
0008 {
0009 }
0010
0011 RawTowerGeomv5::RawTowerGeomv5(const RawTowerGeom& geom0)
0012 {
0013 _towerid = geom0.get_id();
0014
0015 _rotx = geom0.get_rotx();
0016 _roty = geom0.get_roty();
0017 _rotz = geom0.get_rotz();
0018
0019 _vertices.resize(_nVtx);
0020 for (int i = 0; i < _nVtx; i++)
0021 {
0022 _vertices[i].x = geom0.get_vertex_x(i);
0023 _vertices[i].y = geom0.get_vertex_y(i);
0024 _vertices[i].z = geom0.get_vertex_z(i);
0025 }
0026
0027 _center.x = geom0.get_center_x();
0028 _center.y = geom0.get_center_y();
0029 _center.z = geom0.get_center_z();
0030
0031 _center_int.x = geom0.get_center_int_x();
0032 _center_int.y = geom0.get_center_int_y();
0033 _center_int.z = geom0.get_center_int_z();
0034
0035 _center_ext.x = geom0.get_center_ext_x();
0036 _center_ext.y = geom0.get_center_ext_y();
0037 _center_ext.z = geom0.get_center_ext_z();
0038
0039 _center_low_eta.x = geom0.get_center_low_eta_x();
0040 _center_low_eta.y = geom0.get_center_low_eta_y();
0041 _center_low_eta.z = geom0.get_center_low_eta_z();
0042
0043 _center_high_eta.x = geom0.get_center_high_eta_x();
0044 _center_high_eta.y = geom0.get_center_high_eta_y();
0045 _center_high_eta.z = geom0.get_center_high_eta_z();
0046
0047 _center_low_phi.x = geom0.get_center_low_phi_x();
0048 _center_low_phi.y = geom0.get_center_low_phi_y();
0049 _center_low_phi.z = geom0.get_center_low_phi_z();
0050
0051 _center_high_phi.x = geom0.get_center_high_phi_x();
0052 _center_high_phi.y = geom0.get_center_high_phi_y();
0053 _center_high_phi.z = geom0.get_center_high_phi_z();
0054 }
0055
0056 void RawTowerGeomv5::set_vertices(const std::vector<double>& vertices)
0057 {
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069 if ((int) vertices.size() != _nVtx * 3)
0070 {
0071 std::cerr
0072 << "RawTowerGeomv5::set_vertices - input " << vertices.size() << " vertices given. Expected 8 x 3." << std::endl;
0073 exit(1);
0074 }
0075
0076 bool face_outside[_nVtx] = {false, false, false, false, true, true, true, true};
0077 bool face_inside[_nVtx] = {true, true, true, true, false, false, false, false};
0078 bool face_low_eta[_nVtx] = {false, false, true, true, false, false, true, true};
0079 bool face_high_eta[_nVtx] = {true, true, false, false, true, true, false, false};
0080 bool face_low_phi[_nVtx] = {false, true, true, false, false, true, true, false};
0081 bool face_high_phi[_nVtx] = {true, false, false, true, true, false, false, true};
0082
0083 _center.x = 0;
0084 _center.y = 0;
0085 _center.z = 0;
0086 _center_int.x = 0;
0087 _center_int.y = 0;
0088 _center_int.z = 0;
0089 _center_ext.x = 0;
0090 _center_ext.y = 0;
0091 _center_ext.z = 0;
0092 _center_low_eta.x = 0;
0093 _center_low_eta.y = 0;
0094 _center_low_eta.z = 0;
0095 _center_high_eta.x = 0;
0096 _center_high_eta.y = 0;
0097 _center_high_eta.z = 0;
0098 _center_low_phi.x = 0;
0099 _center_low_phi.y = 0;
0100 _center_low_phi.z = 0;
0101 _center_high_phi.x = 0;
0102 _center_high_phi.y = 0;
0103 _center_high_phi.z = 0;
0104 _vertices.resize(_nVtx);
0105 for (int i = 0; i < _nVtx; i++)
0106 {
0107 _vertices[i].x = vertices[i*3+0];
0108 _vertices[i].y = vertices[i*3+1];
0109 _vertices[i].z = vertices[i*3+2];
0110
0111 _center.x += _vertices[i].x;
0112 _center.y += _vertices[i].y;
0113 _center.z += _vertices[i].z;
0114
0115 if (face_inside[i])
0116 {
0117 _center_int.x += _vertices[i].x;
0118 _center_int.y += _vertices[i].y;
0119 _center_int.z += _vertices[i].z;
0120 }
0121 if (face_outside[i])
0122 {
0123 _center_ext.x += _vertices[i].x;
0124 _center_ext.y += _vertices[i].y;
0125 _center_ext.z += _vertices[i].z;
0126 }
0127 if (face_low_eta[i])
0128 {
0129 _center_low_eta.x += _vertices[i].x;
0130 _center_low_eta.y += _vertices[i].y;
0131 _center_low_eta.z += _vertices[i].z;
0132 }
0133 if (face_high_eta[i])
0134 {
0135 _center_high_eta.x += _vertices[i].x;
0136 _center_high_eta.y += _vertices[i].y;
0137 _center_high_eta.z += _vertices[i].z;
0138 }
0139 if (face_low_phi[i])
0140 {
0141 _center_low_phi.x += _vertices[i].x;
0142 _center_low_phi.y += _vertices[i].y;
0143 _center_low_phi.z += _vertices[i].z;
0144 }
0145 if (face_high_phi[i])
0146 {
0147 _center_high_phi.x += _vertices[i].x;
0148 _center_high_phi.y += _vertices[i].y;
0149 _center_high_phi.z += _vertices[i].z;
0150 }
0151 }
0152
0153 _center.x /= (float) _nVtx;
0154 _center.y /= (float) _nVtx;
0155 _center.z /= (float) _nVtx;
0156
0157 _center_int.x /= (float) _nVtx / 2.;
0158 _center_int.y /= (float) _nVtx / 2.;
0159 _center_int.z /= (float) _nVtx / 2.;
0160
0161 _center_ext.x /= (float) _nVtx / 2.;
0162 _center_ext.y /= (float) _nVtx / 2.;
0163 _center_ext.z /= (float) _nVtx / 2.;
0164
0165 _center_low_eta.x /= (float) _nVtx / 2.;
0166 _center_low_eta.y /= (float) _nVtx / 2.;
0167 _center_low_eta.z /= (float) _nVtx / 2.;
0168
0169 _center_high_eta.x /= (float) _nVtx / 2.;
0170 _center_high_eta.y /= (float) _nVtx / 2.;
0171 _center_high_eta.z /= (float) _nVtx / 2.;
0172
0173 _center_low_phi.x /= (float) _nVtx / 2.;
0174 _center_low_phi.y /= (float) _nVtx / 2.;
0175 _center_low_phi.z /= (float) _nVtx / 2.;
0176
0177 _center_high_phi.x /= (float) _nVtx / 2.;
0178 _center_high_phi.y /= (float) _nVtx / 2.;
0179 _center_high_phi.z /= (float) _nVtx / 2.;
0180
0181
0182
0183 return;
0184 }
0185
0186 double RawTowerGeomv5::get_center_radius() const
0187 {
0188 return std::sqrt(_center.x * _center.x +
0189 _center.y * _center.y);
0190 }
0191
0192 double RawTowerGeomv5::get_theta() const
0193 {
0194 double radius = sqrt(_center.x * _center.x + _center.y * _center.y);
0195 double theta = atan2(radius, _center.z);
0196 return theta;
0197 }
0198
0199 double RawTowerGeomv5::get_eta() const
0200 {
0201 double theta = get_theta();
0202 double eta = -log(tan(theta / 2.));
0203
0204 return eta;
0205 }
0206
0207 double RawTowerGeomv5::get_phi() const
0208 {
0209 return atan2(_center.y, _center.x);
0210 }
0211
0212 void RawTowerGeomv5::identify(std::ostream& os) const
0213 {
0214 os << "RawTowerGeomv5: x: " << get_center_x() << " y: " << get_center_y() << " z: " << get_center_z() << std::endl;
0215 }