File indexing completed on 2024-10-29 06:08:24
0001 #ifndef GEOMETRY_CALOGEOMETRY_IDEALZPRISM_H
0002 #define GEOMETRY_CALOGEOMETRY_IDEALZPRISM_H 1
0003
0004 #include "Geometry/CaloGeometry/interface/CaloCellGeometry.h"
0005 #include <memory>
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026 class IdealZPrism final : public CaloCellGeometry {
0027 public:
0028 enum DEPTH { None, EM, HADR };
0029
0030 typedef CaloCellGeometry::CCGFloat CCGFloat;
0031 typedef CaloCellGeometry::Pt3D Pt3D;
0032 typedef CaloCellGeometry::Pt3DVec Pt3DVec;
0033
0034 static constexpr uint32_t k_dEta = 0;
0035 static constexpr uint32_t k_dPhi = 1;
0036 static constexpr uint32_t k_dZ = 2;
0037 static constexpr uint32_t k_Eta = 3;
0038 static constexpr uint32_t k_Z = 4;
0039
0040 IdealZPrism();
0041
0042 IdealZPrism(const IdealZPrism& idzp);
0043
0044 IdealZPrism& operator=(const IdealZPrism& idzp);
0045
0046 IdealZPrism(const GlobalPoint& faceCenter, CornersMgr* mgr, const CCGFloat* parm, IdealZPrism::DEPTH depth);
0047
0048 ~IdealZPrism() override;
0049
0050 CCGFloat dEta() const;
0051 CCGFloat dPhi() const;
0052 CCGFloat dz() const;
0053 CCGFloat eta() const;
0054 CCGFloat z() const;
0055
0056 static void localCorners(Pt3DVec& vec, const CCGFloat* pv, Pt3D& ref);
0057
0058 void vocalCorners(Pt3DVec& vec, const CCGFloat* pv, Pt3D& ref) const override;
0059
0060
0061 const IdealZPrism* forPF() const { return m_geoForPF.get(); }
0062
0063 private:
0064 void initCorners(CornersVec&) override;
0065
0066 static GlobalPoint etaPhiR(float eta, float phi, float rad);
0067
0068 static GlobalPoint etaPhiPerp(float eta, float phi, float perp);
0069
0070 static GlobalPoint etaPhiZ(float eta, float phi, float z);
0071
0072 private:
0073
0074 std::unique_ptr<IdealZPrism> m_geoForPF;
0075 };
0076
0077 std::ostream& operator<<(std::ostream& s, const IdealZPrism& cell);
0078
0079 #endif