00001 00002 // $Id: GeoStripNode.h,v 1.15 2005/10/23 01:48:11 schubert Exp $ 00003 // 00004 // GeoStripNode 00005 // 00006 // GeoStripNode is a specialized GeoNode to help keep track of information 00007 // identifying this strip. 00008 // Modeled after R. Hatcher's UgliStripNode class 00009 // 00010 // Author: S. Kasahara 06/04 00012 00013 #ifndef GEOSTRIPNODE_H 00014 #define GEOSTRIPNODE_H 00015 00016 #include "GeoGeometry/GeoNode.h" // base class 00017 #include "GeoGeometry/GeoStripVolume.h" 00018 #include "Plex/PlexStripEndId.h" // data member 00019 00020 class GeoStripNode; 00021 class GeoScintPlnNode; 00022 class GeoScintMdlNode; 00023 class TGeoMatrix; 00024 class TGeoVolume; 00025 00026 class GeoStripNode : public GeoNode { 00027 00028 friend class UgliStripHandle; // handle inc/dec ref count 00029 friend class GeoGeometry; // every node belongs to its geometry creator 00030 00031 public: 00032 00033 // Constructors and destructors 00034 GeoStripNode() : fScintMdlNode(0) {} // default constructor for i/o 00035 virtual ~GeoStripNode(); 00036 00037 // State testing methods 00038 virtual PlexStripEndId GetSEId() const { return fStripEndId; } 00039 GeoStripVolume* GetStripVolume() const 00040 { return dynamic_cast<GeoStripVolume*>(GetVolume()); } 00041 virtual Float_t GetLPosRelMdl() const; 00042 virtual Float_t GetTPosRelMdl() const; 00043 virtual Float_t GetZRotRelMdlRad() const; 00044 00045 GeoScintMdlNode* GetScintMdlNode(void) const { return fScintMdlNode; } 00046 GeoScintPlnNode* GetScintPlnNode(void) const; 00047 00048 // State testing, passed down to GeoStripVolume 00049 virtual Float_t GetHalfLength() const; 00050 virtual Float_t GetHalfThickness() const; 00051 virtual Float_t GetHalfWidth() const; 00052 virtual Float_t PartialLength(StripEnd::StripEnd_t end) const; 00053 virtual Float_t WlsBypass() const; 00054 virtual Float_t WlsPigtail(StripEnd::StripEnd_t end) const; 00055 virtual Bool_t IsMirrored(StripEnd::StripEnd_t end) const; 00056 virtual Float_t ClearFiber(StripEnd::StripEnd_t end) const; 00057 virtual TVector3 GlobalPos(const Float_t alongLength, 00058 const Bool_t onWLS = kFALSE) const; 00059 virtual Float_t GetTPos(Float_t orthCoord = 999999.) const; 00060 virtual Float_t DistanceAlong(const PlexStripEndId& orthogonalStrip) const; 00061 virtual TVector3 Intersection(const PlexStripEndId& orthogonalStrip) const; 00062 00063 // Dummy, but also dummy in UgliStripNode 00064 virtual Float_t TotalAttenuation(StripEnd::StripEnd_t end, 00065 const Float_t alongLength) const; 00066 // Dummy Set methods 00067 void SetZRotRelMdlRad(Float_t radians); 00068 void SetLTPosRelMdl(Float_t lpos, Float_t tpos); 00069 00070 00071 protected: 00072 00073 GeoStripNode(GeoGeometry* geom, TGeoVolume* stpvol,TGeoMatrix* stpmatrix, 00074 GeoScintMdlNode* mdlNode, std::string nodename, 00075 const PlexStripEndId& seid); 00076 00077 private: 00078 00079 // Avoid copy and assignment ctor by making them private and w/no imp 00080 GeoStripNode(const GeoStripNode& that); 00081 GeoStripNode& operator=(const GeoStripNode& that); 00082 00083 // data members 00084 PlexStripEndId fStripEndId; // plane id info for this node 00085 GeoScintMdlNode* fScintMdlNode; // mdl node to which this strip node belongs 00086 00087 ClassDef(GeoStripNode,1) 00088 }; 00089 #endif // GEOSTRIPNODE_H
1.3.9.1