Back to home page

sPhenix code displayed by LXR

 
 

    


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   /*       y                     
0060            |                    7_______6
0061            |                   /|      /|
0062            |_______ z        8/_|_____/5|
0063           /                   | |     | |
0064          /                    |3|_____|_|2
0065         /                     | /     | /
0066      -x                      4|/______|/1
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 }