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

UgliScintPlnHandle.h

Go to the documentation of this file.
00001 
00002 // $Id: UgliScintPlnHandle.h,v 1.17 2005/09/01 08:07:08 rhatcher Exp $
00003 //
00004 // UgliScintPlnHandle
00005 //
00006 // UgliScintPlnHandle is the handle to a single scint plane
00007 //
00008 // Author:  R. Hatcher 2000.11.15
00009 //
00011 
00012 #ifndef UGLISCINTPLNHANDLE_H
00013 #define UGLISCINTPLNHANDLE_H
00014 class UgliScintPlnHandle;
00015 class UgliPlnHandle;
00016 class UgliScintPlnABC;
00017 
00018 #include "GeoGeometry/GeoGeometry.h" // IsFrozen
00019 #include "GeoGeometry/GeoScintPlnNode.h"
00020 
00021 #include "UgliGeometry/UgliScintPlnABC.h"
00022 #include "UgliGeometry/UgliPlnHandle.h"
00023 #include "UgliGeometry/UgliGeomHandle.h"
00024 #include "UgliGeometry/UgliScintPlnNode.h"
00025 #include "UgliGeometry/UgliStripHandle.h"
00026 #include "UgliGeometry/UgliScintMdlHandle.h"
00027 
00028 class GeoScintPlnNode;
00029 
00030 #include <vector>
00031 #include "TVector3.h"
00032 
00033 class UgliScintPlnHandle : public UgliPlnHandle, public UgliScintPlnABC {
00034 
00035  public:
00036 
00037    // Create handles from the actual node object, copy and assignment
00038    UgliScintPlnHandle(UgliScintPlnNode* scintNode);
00039    UgliScintPlnHandle(GeoScintPlnNode* scintNode);
00040    UgliScintPlnHandle(const UgliScintPlnHandle& that);
00041    UgliScintPlnHandle& operator=(const UgliScintPlnHandle& that);
00042 
00043    // One should avoid creating UgliScintPlnHandle without a reference 
00044    // (be sure to test IsValid())
00045    UgliScintPlnHandle();
00046 
00047    virtual ~UgliScintPlnHandle();
00048 
00049    virtual Bool_t                  IsValid() const;
00050    virtual Bool_t                  IsFrozen() const;
00051 
00052    virtual Int_t                   NumberOfStrips() const;
00053 
00054    virtual UgliStripHandle         GetStripHandle(PlexStripEndId seid);
00055 
00056    std::vector<UgliStripHandle>    GetStripHandleVector();
00057    std::vector<UgliScintMdlHandle> GetScintMdlHandleVector();
00058 
00059    UgliStripHandle                 GetClosestStrip(Float_t tpos, 
00060                                                    Float_t orthCoord=9999.);
00061 
00062    // convert between world and scint plane coordinates
00063    virtual TVector3       GlobalToLocal(const TVector3& global,
00064                                         const Bool_t globalInXYZ=true) const;
00065    virtual TVector3       LocalToGlobal(const TVector3& local,
00066                                         const Bool_t globalInXYZ=true) const;
00067 
00068    Float_t                         GetZRotRelSteelRad() const;
00069    Float_t                         GetX0RelSteel() const;
00070    Float_t                         GetY0RelSteel() const;
00071 
00072    // these are only allowed if the copy is modifiable
00073    Bool_t          AttemptSet(const char* what="?") const;
00074    void            SetZRotRelSteelRad(Float_t radians);
00075    void            SetXY0RelSteel(Float_t x0, Float_t y0);
00076    void            RotateRelSteelBy(Float_t deltaRadians);
00077    void            ShiftXY0RelSteelBy(Float_t dx, Float_t dy);
00078 
00079  protected:
00080 
00081    // The actual node being referenced
00082    // duplicates UgliPlnNode* in UgliPlnHandle but avoids recasting
00083    UgliScintPlnNode* fUgliScintPlnNode;
00084    GeoScintPlnNode* fGeoScintPlnNode;
00085    
00086  private:
00087 
00088    ClassDef(UgliScintPlnHandle,2)
00089 
00090 };
00091 
00092 #ifndef __CINT__
00093 //=============================================================================
00094 // Implementation details -- inlines need to be hidden from CINT
00095 //=============================================================================
00096 
00097 inline Bool_t UgliScintPlnHandle::IsValid() const
00098 { if ( !IsGeo() ) return (fUgliScintPlnNode) ? kTRUE : kFALSE;
00099   else return (fGeoScintPlnNode) ? kTRUE : kFALSE; }
00100 
00101 inline Bool_t UgliScintPlnHandle::IsFrozen() const
00102 { if ( !IsGeo() ) return fUgliScintPlnNode->GetUgliGeometry()->IsFrozen();
00103   else return fGeoScintPlnNode->GetGeoGeometry()->IsFrozen(); }
00104 
00105 inline Int_t UgliScintPlnHandle::NumberOfStrips() const
00106 { if ( !IsGeo() ) return fUgliScintPlnNode->NumberOfStrips();
00107   else return fGeoScintPlnNode->NumberOfStrips(); }
00108 
00109 inline Float_t UgliScintPlnHandle::GetZRotRelSteelRad() const
00110 { if ( !IsGeo() ) return fUgliScintPlnNode->GetZRotRelSteelRad();
00111   else return fGeoScintPlnNode->GetZRotRelSteelRad(); }
00112 
00113 inline Float_t UgliScintPlnHandle::GetX0RelSteel() const
00114 { if ( !IsGeo() ) return fUgliScintPlnNode->GetX0RelSteel();
00115   else return (fGeoScintPlnNode->GetX0RelSteel())*Munits::cm; }
00116 
00117 inline Float_t UgliScintPlnHandle::GetY0RelSteel() const
00118 { if ( !IsGeo() ) return fUgliScintPlnNode->GetY0RelSteel();
00119   else return (fGeoScintPlnNode->GetY0RelSteel())*Munits::cm; }
00120 
00121 inline void UgliScintPlnHandle::RotateRelSteelBy(Float_t deltaRadians) 
00122 { SetZRotRelSteelRad(GetZRotRelSteelRad()+deltaRadians); }
00123 
00124 inline void UgliScintPlnHandle::ShiftXY0RelSteelBy(Float_t dx, Float_t dy)
00125 { SetXY0RelSteel((GetX0RelSteel()+dx)/Munits::cm,
00126                  (GetY0RelSteel()+dy)/Munits::cm); }
00127 
00128 #endif /* __CINT__ */
00129 #endif // UGLISCINTPLNHANDLE_H

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