00001 00002 // $Id: UgliScintMdlHandle.h,v 1.9 2005/09/01 08:07:08 rhatcher Exp $ 00003 // 00004 // UgliScintMdlHandle 00005 // 00006 // UgliScintMdlHandle is the handle to a single module 00007 // 00008 // Author: R. Hatcher 2001.10.10 00009 // 00011 00012 #ifndef UGLISCINTMDLHANDLE_H 00013 #define UGLISCINTMDLHANDLE_H 00014 class UgliScintMdlHandle; 00015 class UgliScintMdlABC; 00016 00017 #include "GeoGeometry/GeoScintMdlNode.h" 00018 #include "UgliGeometry/UgliScintMdlABC.h" 00019 #include "UgliGeometry/UgliGeomHandle.h" 00020 #include "UgliGeometry/UgliScintMdlNode.h" 00021 #include "UgliGeometry/UgliScintPlnHandle.h" 00022 00023 class UgliScintMdlHandle : public UgliScintMdlABC { 00024 00025 public: 00026 00027 // Create handles from the actual node object, copy and assignment 00028 UgliScintMdlHandle(UgliScintMdlNode* mdlNode); 00029 UgliScintMdlHandle(GeoScintMdlNode* mdlNode); 00030 UgliScintMdlHandle(const UgliScintMdlHandle& that); 00031 UgliScintMdlHandle& operator=(const UgliScintMdlHandle& that); 00032 00033 // One should avoid creating UgliScintMdlHandle without a reference 00034 // (be sure to test IsValid()) 00035 UgliScintMdlHandle(); 00036 00037 virtual ~UgliScintMdlHandle(); 00038 00039 virtual Bool_t IsGeo() const { return (fGeoScintMdlNode != 0); } 00040 virtual Bool_t IsValid() const; 00041 virtual Bool_t IsFrozen() const; 00042 00043 virtual PlexScintMdlId GetPlexScintMdlId() const; 00044 virtual PlexPlaneId GetPlexPlaneId() const; 00045 virtual Int_t GetModuleNum() const; 00046 00047 virtual Int_t NumberOfStrips() const; 00048 00049 virtual Float_t GetClearFiber(const StripEnd::StripEnd_t end) const; 00050 virtual Float_t GetExtraWlsFiber(const StripEnd::StripEnd_t end) const; 00051 00052 // return the Scint. Plane in which this module is located. 00053 UgliScintPlnHandle GetScintPlnHandle() const; 00054 00055 // convert between world and scint module coordinates 00056 virtual TVector3 GlobalToLocal(const TVector3& global, 00057 const Bool_t globalInXYZ=true) const; 00058 virtual TVector3 LocalToGlobal(const TVector3& local, 00059 const Bool_t globalInXYZ=true) const; 00060 00061 Float_t GetZRotRelPlnRad() const; 00062 Float_t GetLPosRelPln() const; 00063 Float_t GetTPosRelPln() const; 00064 00065 // these are only allowed if the copy is modifiable 00066 Bool_t AttemptSet(const char* what="?") const; 00067 void SetZRotRelPlnRad(Float_t radians); 00068 void SetLTPosRelPln(Float_t lpos, Float_t tpos); 00069 void RotateRelPlnBy(Float_t deltaRadians); 00070 void ShiftLTPosRelPlnBy(Float_t dlpos, Float_t dtpos); 00071 00072 protected: 00073 00074 // The actual node being referenced 00075 UgliScintMdlNode* fUgliScintMdlNode; 00076 GeoScintMdlNode* fGeoScintMdlNode; 00077 00078 private: 00079 00080 ClassDef(UgliScintMdlHandle,2) 00081 00082 }; 00083 00084 #ifndef __CINT__ 00085 //============================================================================= 00086 // Implementation details -- inlines need to be hidden from CINT 00087 //============================================================================= 00088 00089 inline Bool_t UgliScintMdlHandle::IsValid() const 00090 { if ( !IsGeo() ) return (fUgliScintMdlNode) ? kTRUE : kFALSE; 00091 else return (fGeoScintMdlNode) ? kTRUE : kFALSE; } 00092 00093 inline Bool_t UgliScintMdlHandle::IsFrozen() const 00094 { if ( !IsGeo() ) return fUgliScintMdlNode->GetUgliGeometry()->IsFrozen(); 00095 else return fGeoScintMdlNode ->GetGeoGeometry() ->IsFrozen(); } 00096 00097 inline PlexScintMdlId UgliScintMdlHandle::GetPlexScintMdlId() const 00098 { if ( !IsGeo() ) return fUgliScintMdlNode->GetPlexScintMdlId(); 00099 else return fGeoScintMdlNode ->GetPlexScintMdlId(); } 00100 00101 inline PlexPlaneId UgliScintMdlHandle::GetPlexPlaneId() const 00102 { if ( !IsGeo() ) return fUgliScintMdlNode->GetPlexPlaneId(); 00103 else return fGeoScintMdlNode ->GetPlexPlaneId(); } 00104 00105 inline Int_t UgliScintMdlHandle::GetModuleNum() const 00106 { if ( !IsGeo() ) return fUgliScintMdlNode->GetModuleNum(); 00107 else return fGeoScintMdlNode ->GetModuleNum(); } 00108 00109 inline Int_t UgliScintMdlHandle::NumberOfStrips() const 00110 { if ( !IsGeo() ) return fUgliScintMdlNode->NumberOfStrips(); 00111 else return fGeoScintMdlNode ->NumberOfStrips(); } 00112 00113 inline Float_t UgliScintMdlHandle::GetClearFiber(const StripEnd::StripEnd_t end) const 00114 { if ( !IsGeo() ) return fUgliScintMdlNode->GetClearFiber(end); 00115 else return (fGeoScintMdlNode ->GetClearFiber(end))*Munits::cm; } 00116 00117 inline Float_t UgliScintMdlHandle::GetExtraWlsFiber(const StripEnd::StripEnd_t end) const 00118 { if ( !IsGeo() ) return fUgliScintMdlNode->GetExtraWlsFiber(end); 00119 else return (fGeoScintMdlNode->GetExtraWlsFiber(end))*Munits::cm;} 00120 00121 inline Float_t UgliScintMdlHandle::GetZRotRelPlnRad() const 00122 { if ( !IsGeo() ) return fUgliScintMdlNode->GetZRotRelPlnRad(); 00123 else return fGeoScintMdlNode ->GetZRotRelPlnRad(); } 00124 00125 inline Float_t UgliScintMdlHandle::GetLPosRelPln() const 00126 { if ( !IsGeo() ) return fUgliScintMdlNode->GetLPosRelPln(); 00127 else return (fGeoScintMdlNode ->GetLPosRelPln())*Munits::cm; } 00128 00129 inline Float_t UgliScintMdlHandle::GetTPosRelPln() const 00130 { if ( !IsGeo() ) return fUgliScintMdlNode->GetTPosRelPln(); 00131 else return (fGeoScintMdlNode ->GetTPosRelPln())*Munits::cm; } 00132 00133 inline void UgliScintMdlHandle::RotateRelPlnBy(Float_t deltaRadians) 00134 { SetZRotRelPlnRad(GetZRotRelPlnRad()+deltaRadians); } 00135 00136 inline void UgliScintMdlHandle::ShiftLTPosRelPlnBy(Float_t dlpos, Float_t dtpos) 00137 { SetLTPosRelPln(GetLPosRelPln()+dlpos,GetTPosRelPln()+dtpos); } 00138 00139 #endif /* __CINT__ */ 00140 #endif // UGLISCINTMDLHANDLE_H
1.3.9.1