00001 00002 // $Id: UgliPlnHandle.h,v 1.6 2005/07/17 23:54:45 schubert Exp $ 00003 // 00004 // UgliPlnHandle 00005 // 00006 // UgliPlnHandle is the handle to a single plane 00007 // 00008 // Author: R. Hatcher 2000.11.15 00009 // 00011 00012 #ifndef UGLIPLNHANDLE_H 00013 #define UGLIPLNHANDLE_H 00014 00015 #include "GeoGeometry/GeoPlnNode.h" 00016 #include "UgliGeometry/UgliPlnNode.h" 00017 #include "UgliGeometry/UgliGeometry.h" 00018 00019 00020 class UgliPlnHandle : public UgliPlnABC { 00021 00022 public: 00023 00024 // Create handles from the actual node object, copy and assignment 00025 UgliPlnHandle(UgliPlnNode* plnNode); 00026 UgliPlnHandle(GeoPlnNode* plnNode); 00027 UgliPlnHandle(const UgliPlnHandle& that); 00028 UgliPlnHandle& operator=(const UgliPlnHandle& that); 00029 00030 // One should avoid creating UgliPlnHandle without a reference 00031 // (be sure to test IsValid()) 00032 UgliPlnHandle(); 00033 00034 virtual ~UgliPlnHandle(); 00035 00036 virtual Bool_t IsValid() const; 00037 virtual Bool_t IsGeo() const { return (fGeoPlnNode != 0); } 00038 00039 virtual PlexPlaneId GetPlexPlaneId() const; 00040 virtual Int_t GetPlaneNumber() const; 00041 virtual PlaneView::PlaneView_t GetPlaneView() const; 00042 virtual PlaneCoverage::PlaneCoverage_t GetPlaneCoverage() const; 00043 00044 virtual Float_t GetHalfThickness() const; 00045 virtual TVector3 GetCenter() const; 00046 virtual Float_t GetX0() const; 00047 virtual Float_t GetY0() const; 00048 virtual Float_t GetZ0() const; 00049 00050 protected: 00051 00052 // The actual node being referenced 00053 UgliPlnNode* fUgliPlnNode; 00054 GeoPlnNode* fGeoPlnNode; 00055 00056 private: 00057 00058 ClassDef(UgliPlnHandle,3) 00059 00060 }; 00061 00062 #ifndef __CINT__ 00063 //============================================================================= 00064 // Implementation details -- inlines need to be hidden from CINT 00065 //============================================================================= 00066 00067 inline Bool_t UgliPlnHandle::IsValid() const 00068 { if ( !IsGeo() ) return (fUgliPlnNode) ? kTRUE : kFALSE; 00069 else return (fGeoPlnNode) ? kTRUE : kFALSE; 00070 } 00071 00072 inline PlexPlaneId UgliPlnHandle::GetPlexPlaneId() const 00073 { if ( !IsGeo() ) return fUgliPlnNode->GetPlexPlaneId(); 00074 else return fGeoPlnNode->GetPlexPlaneId(); 00075 } 00076 00077 inline Int_t UgliPlnHandle::GetPlaneNumber() const 00078 { if ( !IsGeo() ) return fUgliPlnNode->GetPlexPlaneId().GetPlane(); 00079 else return fGeoPlnNode->GetPlexPlaneId().GetPlane(); 00080 } 00081 00082 inline PlaneView::PlaneView_t UgliPlnHandle::GetPlaneView() const 00083 { if ( !IsGeo() ) return fUgliPlnNode->GetPlexPlaneId().GetPlaneView(); 00084 else return fGeoPlnNode->GetPlexPlaneId().GetPlaneView(); 00085 } 00086 00087 inline PlaneCoverage::PlaneCoverage_t 00088 UgliPlnHandle::GetPlaneCoverage() const 00089 { if ( !IsGeo() ) return fUgliPlnNode->GetPlexPlaneId().GetPlaneCoverage(); 00090 else return fGeoPlnNode->GetPlexPlaneId().GetPlaneCoverage(); 00091 } 00092 00093 inline Float_t UgliPlnHandle::GetHalfThickness() const 00094 { if ( !IsGeo() ) return fUgliPlnNode->GetHalfThickness(); 00095 else return (fGeoPlnNode->GetHalfThickness())*Munits::cm; 00096 } 00097 00098 inline TVector3 UgliPlnHandle::GetCenter() const 00099 { if ( !IsGeo() ) return fUgliPlnNode->GetCenter(); 00100 else return (fGeoPlnNode->GetCenter())*Munits::cm; 00101 } 00102 00103 inline Float_t UgliPlnHandle::GetX0() const 00104 { if ( !IsGeo() ) return fUgliPlnNode->GetX0(); 00105 else return (fGeoPlnNode->GetX0())*Munits::cm; 00106 } 00107 00108 inline Float_t UgliPlnHandle::GetY0() const 00109 { if ( !IsGeo() ) return fUgliPlnNode->GetY0(); 00110 else return (fGeoPlnNode->GetY0())*Munits::cm; 00111 } 00112 00113 inline Float_t UgliPlnHandle::GetZ0() const 00114 { if ( !IsGeo() ) return fUgliPlnNode->GetZ0(); 00115 else return (fGeoPlnNode->GetZ0())*Munits::cm; 00116 } 00117 00118 #endif /* __CINT__ */ 00119 #endif // UGLIPLNHANDLE_H
1.3.9.1