00001 #ifndef EcalAlgo_DDEcalEndcapTrap_h 00002 #define EcalAlgo_DDEcalEndcapTrap_h 00003 00004 #include <vector> 00005 #include "DetectorDescription/Base/interface/DDTypes.h" 00006 #include "FWCore/MessageLogger/interface/MessageLogger.h" 00007 #include "DetectorDescription/Base/interface/DDTypes.h" 00008 #include "DetectorDescription/Base/interface/DDutils.h" 00009 #include "DetectorDescription/Core/interface/DDPosPart.h" 00010 #include "DetectorDescription/Core/interface/DDLogicalPart.h" 00011 #include "DetectorDescription/Core/interface/DDSolid.h" 00012 #include "DetectorDescription/Core/interface/DDMaterial.h" 00013 #include "DetectorDescription/Core/interface/DDName.h" 00014 #include "DetectorDescription/Core/interface/DDCurrentNamespace.h" 00015 #include "DetectorDescription/Core/interface/DDSplit.h" 00016 #include "CLHEP/Units/PhysicalConstants.h" 00017 #include "CLHEP/Units/SystemOfUnits.h" 00018 #include <CLHEP/Geometry/Point3D.h> 00019 #include <CLHEP/Geometry/Plane3D.h> 00020 #include <CLHEP/Geometry/Vector3D.h> 00021 #include <CLHEP/Geometry/Transform3D.h> 00022 #include <CLHEP/Vector/EulerAngles.h> 00023 00024 // Define Endcap Supercrystal class 00025 00026 class DDEcalEndcapTrap { 00027 00028 public: 00029 DDEcalEndcapTrap( const int hand, 00030 const double front , 00031 const double rear , 00032 const double length ) ; 00033 00034 // virtual ~DDEcalEndcapTrap(); 00035 00036 void rotate( const DDRotationMatrix rot ) ; 00037 void rotate( const DDTranslation frontCentre, 00038 const DDTranslation rearCentre ) ; 00039 void translate( const DDTranslation trans ) ; 00040 00041 // void rotate(); 00042 00043 void rotateX( const double angle ) ; 00044 void rotateY( const double angle ) ; 00045 void translate(); 00046 void moveto( const DDTranslation frontCentre, 00047 const DDTranslation rearCentre ); 00048 double elevationAngle( const DDTranslation trans ); 00049 double polarAngle( const DDTranslation trans); 00050 double elevationAngle(); 00051 double polarAngle(); 00052 DDTranslation cornerPos( const int icorner ); 00053 void cornerPos( const int icorner , 00054 const DDTranslation cc) ; 00055 DDTranslation centrePos(); 00056 DDTranslation fcentrePos(); 00057 DDTranslation rcentrePos(); 00058 void calculateCorners(); 00059 void calculateCentres(); 00060 DDRotationMatrix rotation() {return m_rotation;} 00061 void print(); 00062 00063 00064 private: 00065 DDEcalEndcapTrap(); // forbid default constructor 00066 00067 double m_front; 00068 double m_rear; 00069 double m_length; 00070 int m_hand; 00071 DDRotationMatrix m_rotation; 00072 DDTranslation m_translation; 00073 00074 double m_centre[4]; 00075 double m_fcentre[4]; 00076 double m_rcentre[4]; 00077 double m_corners[25]; 00078 00079 int m_update; 00080 }; 00081 00082 #endif