Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

UgliSteelPlnHandle.h

Go to the documentation of this file.
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

Generated on Mon Nov 23 05:28:45 2009 for loon by  doxygen 1.3.9.1