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

UgliScintMdlHandle.h

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

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