00001
00002
00003
00004
00005
00006
00007
00008
00010
00011 #ifndef GEOSCINTMDLVOLUME_H
00012 #define GEOSCINTMDLVOLUME_H
00013
00014 #include "GeoGeometry/GeoVolume.h"
00015 #include "Plex/PlexScintMdlId.h"
00016
00017 class GeoScintMdlVolume;
00018 class GeoGeometry;
00019 class TGeoShape;
00020
00021 class GeoScintMdlVolume : public GeoVolume {
00022
00023 friend class GeoGeometry;
00024
00025 public:
00026
00027 GeoScintMdlVolume();
00028 virtual ~GeoScintMdlVolume() {}
00029
00030
00031 const TGeoNode* GetAirNode() const { return GetNode(0); }
00032 GeoStripNode* GetStripNode(const PlexStripEndId& seid) const;
00033 std::vector<GeoStripNode*> GetStripNodePtrVector() const;
00034 virtual Int_t NumberOfStrips() const;
00035 virtual void Print(Option_t *option="") const;
00036
00037 protected:
00038
00039 GeoScintMdlVolume(GeoGeometry* geo, const PlexScintMdlId& mdlid,
00040 const UgliDbiTables& ugliTables);
00041
00042 private:
00043
00044 virtual void AddAirNode(const UgliDbiTables& ugliTables);
00045 TGeoShape* BuildModuleShape(const UgliDbiTables& ugliTables,
00046 std::string shpName,bool isInner = false);
00047 TGeoShape* BuildCalDet(const UgliDbiTables& ugliTables,
00048 std::string shpName,bool isInner = false);
00049 TGeoShape* BuildFar(const UgliDbiTables& ugliTables,
00050 std::string shpName,bool isInner = false);
00051 TGeoShape* BuildNear(const UgliDbiTables& ugliTables,
00052 std::string shpName,bool isInner = false);
00053 TGeoShape* BuildSimpleTrap(const UgliDbiTables& ugliTables,
00054 std::string shpName,bool isInner = false);
00055 TGeoShape* BuildBBox(const UgliDbiTables& ugliTables,
00056 std::string shpName,bool isInner = false);
00057 TGeoShape* BuildFardfXtru(const UgliDbiTables& ugliTables,
00058 std::string shpName,bool isInner = false);
00059 TGeoShape* BuildFarDFXtru(const UgliDbiTables& ugliTables,
00060 std::string shpName,bool isInner = false);
00061 TGeoShape* BuildNearXtru(const UgliDbiTables& ugliTables,
00062 std::string shpName,bool isInner = false);
00063 TGeoShape* BuildNeariXtru(const UgliDbiTables& ugliTables,
00064 std::string shpName,bool isInner = false);
00065 TGeoShape* BuildNearIXtru(const UgliDbiTables& ugliTables,
00066 std::string shpName,bool isInner = false);
00067 TGeoShape* BuildNearLmXtru(const UgliDbiTables& ugliTables,
00068 std::string shpName,bool isInner = false);
00069 TGeoShape* BuildNearlMXtru(const UgliDbiTables& ugliTables,
00070 std::string shpName,bool isInner = false);
00071 void Build4Corners(const UgliDbiTables& ugliTables, Float_t& m01,
00072 Float_t& m23);
00073 void BuildHalfY(const UgliDbiTables& ugliTables);
00074
00075
00076 PlexScintMdlId fScintMdlId;
00077 Float_t fThick;
00078 Float_t fSkinThick;
00079 Float_t fXY[4][2];
00080 TGeoShape* fBaseShp;
00081 TGeoShape* fBaseShpAir;
00082
00083 ClassDef(GeoScintMdlVolume,1)
00084 };
00085 #endif // GEOSCINTMDLVOLUME_H