00001 00002 // $Id: UgliSteelPlnHandle.h,v 1.10 2006/06/27 20:08:23 rhatcher Exp $ 00003 // 00004 // UgliSteelPlnHandle 00005 // 00006 // UgliSteelPlnHandle is the handle to a single steel plane 00007 // 00008 // Author: R. Hatcher 2000.11.15 00009 // 00011 00012 #ifndef UGLISTEELPLNHANDLE_H 00013 #define UGLISTEELPLNHANDLE_H 00014 00015 #include "GeoGeometry/GeoGeometry.h" // IsFrozen 00016 #include "GeoGeometry/GeoSteelPlnNode.h" 00017 #include "UgliGeometry/UgliPlnHandle.h" 00018 #include "UgliGeometry/UgliSteelPlnNode.h" 00019 00020 #include "TVector3.h" 00021 00022 class UgliSteelPlnHandle : public UgliPlnHandle, public UgliSteelPlnABC { 00023 00024 public: 00025 00026 // Create handles from the actual node object, copy and assignment 00027 UgliSteelPlnHandle(UgliSteelPlnNode* steelNode); 00028 UgliSteelPlnHandle(GeoSteelPlnNode* steelNode); 00029 UgliSteelPlnHandle(const UgliSteelPlnHandle& that); 00030 UgliSteelPlnHandle& operator=(const UgliSteelPlnHandle& that); 00031 00032 // One should avoid creating UgliSteelPlnHandle without a reference 00033 // (be sure to test IsValid()) 00034 UgliSteelPlnHandle(); 00035 00036 virtual ~UgliSteelPlnHandle(); 00037 00038 virtual Bool_t IsValid() const; 00039 virtual Bool_t IsFrozen() const; 00040 00041 virtual Float_t GetHalfThickness() const; 00042 virtual TVector3 GetCenter() const; 00043 virtual Float_t GetX0() const; 00044 virtual Float_t GetY0() const; 00045 virtual Float_t GetZ0() const; 00046 00047 // convert between world and steel plane coordinates 00048 virtual TVector3 GlobalToLocal(const TVector3& global, 00049 const Bool_t globalInXYZ=true) const; 00050 virtual TVector3 LocalToGlobal(const TVector3& local, 00051 const Bool_t globalInXYZ=true) const; 00052 virtual TVector3 GlobalToLocalVect(const TVector3& global, 00053 const Bool_t globalInXYZ=true) const; 00054 virtual TVector3 LocalToGlobalVect(const TVector3& local, 00055 const Bool_t globalInXYZ=true) const; 00056 00057 protected: 00058 00059 // The actual node being referenced 00060 // duplicates UgliPlnNode* in UgliPlnHandle but avoids recasting 00061 UgliSteelPlnNode* fUgliSteelPlnNode; 00062 GeoSteelPlnNode* fGeoSteelPlnNode; 00063 00064 private: 00065 00066 ClassDef(UgliSteelPlnHandle,2) 00067 00068 }; 00069 00070 #ifndef __CINT__ 00071 //============================================================================= 00072 // Implementation details -- inlines need to be hidden from CINT 00073 //============================================================================= 00074 00075 inline Bool_t UgliSteelPlnHandle::IsValid() const 00076 { if (!IsGeo()) return (fUgliSteelPlnNode) ? kTRUE : kFALSE; 00077 else return (fGeoSteelPlnNode) ? kTRUE : kFALSE; } 00078 00079 inline Bool_t UgliSteelPlnHandle::IsFrozen() const 00080 { if (!IsGeo()) return fUgliSteelPlnNode->GetUgliGeometry()->IsFrozen(); 00081 else return fGeoSteelPlnNode->GetGeoGeometry()->IsFrozen(); } 00082 00083 inline Float_t UgliSteelPlnHandle::GetHalfThickness() const 00084 { if (!IsGeo()) return fUgliSteelPlnNode->GetHalfThickness(); 00085 else return (fGeoSteelPlnNode->GetHalfThickness())*Munits::cm; } 00086 00087 inline TVector3 UgliSteelPlnHandle::GetCenter() const 00088 { if (!IsGeo()) return fUgliSteelPlnNode->GetCenter(); 00089 else return (fGeoSteelPlnNode->GetCenter())*Munits::cm; } 00090 00091 inline Float_t UgliSteelPlnHandle::GetX0() const 00092 { if (!IsGeo()) return fUgliSteelPlnNode->GetX0(); 00093 else return (fGeoSteelPlnNode->GetX0())*Munits::cm; } 00094 00095 inline Float_t UgliSteelPlnHandle::GetY0() const 00096 { if (!IsGeo()) return fUgliSteelPlnNode->GetY0(); 00097 else return (fGeoSteelPlnNode->GetY0())*Munits::cm; } 00098 00099 inline Float_t UgliSteelPlnHandle::GetZ0() const 00100 { if (!IsGeo()) return fUgliSteelPlnNode->GetZ0(); 00101 else return (fGeoSteelPlnNode->GetZ0())*Munits::cm; } 00102 00103 #endif /* __CINT__ */ 00104 #endif // UGLISTEELPLNHANDLE_H
1.3.9.1