]>
Commit | Line | Data |
---|---|---|
1 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
2 | * See cxx source for full Copyright notice */ | |
3 | ||
4 | // $Id$ | |
5 | // Revision of includes 07/05/2004 | |
6 | ||
7 | /// \ingroup geometry | |
8 | /// \class AliMUONVGeometryBuilder | |
9 | /// \brief Abstract base class for geometry construction per module(s) | |
10 | /// | |
11 | /// \author Ivana Hrivnacova, IPN Orsay | |
12 | ||
13 | #ifndef ALI_MUONV_GEOMETRY_BUILDER_H | |
14 | #define ALI_MUONV_GEOMETRY_BUILDER_H | |
15 | ||
16 | #include <fstream> | |
17 | ||
18 | #include <TObject.h> | |
19 | #include <TObjArray.h> | |
20 | #include <TGeoMatrix.h> | |
21 | ||
22 | class TGeoTranslation; | |
23 | class TGeoRotation; | |
24 | class TGeoCombiTrans; | |
25 | ||
26 | class AliMUONGeometryModule; | |
27 | class AliMUONGeometryEnvelopeStore; | |
28 | class AliMUONStringIntMap; | |
29 | ||
30 | class AliMUONVGeometryBuilder : public TObject | |
31 | { | |
32 | public: | |
33 | AliMUONVGeometryBuilder(Int_t firstModuleId, Int_t nofModules); | |
34 | AliMUONVGeometryBuilder(); | |
35 | virtual ~AliMUONVGeometryBuilder(); | |
36 | ||
37 | // methods | |
38 | void SetReferenceFrame(const TGeoCombiTrans& referenceFrame); | |
39 | void RebuildSVMaps(Bool_t withEnvelopes = true) const; | |
40 | void UpdateDetElements(Bool_t create) const; | |
41 | ||
42 | /// Function to be overriden in a concrete chamber/station | |
43 | /// geometry builder class. | |
44 | /// Only materials that are not defined in the common | |
45 | /// functions should be defined here. | |
46 | virtual void CreateMaterials() {} // make = 0; ? | |
47 | ||
48 | /// Function to be overriden in a concrete chamber/station | |
49 | /// geometry builder class. \n | |
50 | /// The geometry built there should not be placed | |
51 | /// in ALIC; but all volumes going to ALIC | |
52 | /// have to be added as envelopes to the chamber | |
53 | /// geometries | |
54 | /// (They will be then placed automatically | |
55 | /// usind the provided transformation. | |
56 | virtual void CreateGeometry() = 0; | |
57 | ||
58 | /// Function to be overriden in a concrete chamber/station | |
59 | /// geometry class. \n | |
60 | /// The volume name for each geometry module, its virtuality | |
61 | /// and eventually the mother volume name should be defined | |
62 | virtual void SetVolumes() = 0; | |
63 | ||
64 | /// Function to be overriden in a concrete chamber/station | |
65 | /// geometry class. \n | |
66 | /// The transformation of each chamber(s) wrt ALICE | |
67 | /// should be defined and set to its geometry class. | |
68 | virtual void SetTransformations() = 0; | |
69 | ||
70 | /// Function to be overriden in a concrete chamber/station | |
71 | /// geometry class. \n | |
72 | /// The sensitive volumes Ids for each chamber | |
73 | /// should be defined and set to its geometry class. | |
74 | virtual void SetSensitiveVolumes() = 0; | |
75 | ||
76 | /// Function to be overriden (and return false) | |
77 | /// in the concrete geometry builder classes | |
78 | /// which are already defined in the new ALICE | |
79 | /// coordinate frame | |
80 | virtual bool ApplyGlobalTransformation() { return true; } | |
81 | ||
82 | // access to module geometries | |
83 | Int_t NofGeometries() const; | |
84 | AliMUONGeometryModule* Geometry(Int_t i) const; | |
85 | // In difference from protected GetGeometry() | |
86 | // this function access geometry via index and not | |
87 | // via moduleId | |
88 | ||
89 | protected: | |
90 | // methods | |
91 | AliMUONGeometryModule* GetGeometry(Int_t moduleId) const; | |
92 | AliMUONGeometryEnvelopeStore* GetEnvelopes(Int_t moduleId) const; | |
93 | AliMUONStringIntMap* GetSVMap(Int_t moduleId) const; | |
94 | Int_t GetModuleId(const TString& envName) const; | |
95 | ||
96 | // set module transformation | |
97 | void SetTranslation(Int_t moduleId, | |
98 | const TGeoTranslation& translation); | |
99 | void SetTransformation(Int_t moduleId, | |
100 | const TGeoTranslation& translation, | |
101 | const TGeoRotation& rotation); | |
102 | ||
103 | // set volumes | |
104 | void SetVolume(Int_t moduleId, const TString& volumeName, | |
105 | Bool_t isVirtual = false); | |
106 | void SetMotherVolume(Int_t moduleId, const TString& volumeName); | |
107 | ||
108 | private: | |
109 | //methods | |
110 | ||
111 | /// Not implemented | |
112 | AliMUONVGeometryBuilder(const AliMUONVGeometryBuilder& rhs); | |
113 | /// Not implemented | |
114 | AliMUONVGeometryBuilder& operator = (const AliMUONVGeometryBuilder& rhs); | |
115 | ||
116 | TGeoHMatrix ConvertTransform(const TGeoHMatrix& transform) const; | |
117 | TGeoHMatrix ConvertDETransform(const TGeoHMatrix& transform) const; | |
118 | TString ComposePath(const TString& volName, Int_t copyNo) const; | |
119 | void MapSV(const TString& path0, | |
120 | const TString& volName, Int_t detElemId) const; | |
121 | ||
122 | // data members | |
123 | TObjArray* fGeometryModules; ///< \brief the modules geometries that will be built | |
124 | /// by this builder | |
125 | TGeoCombiTrans fReferenceFrame; ///< \brief the transformation from the builder | |
126 | /// reference frame to that of the transform | |
127 | /// data files | |
128 | ||
129 | ClassDef(AliMUONVGeometryBuilder,4) // MUON chamber geometry base class | |
130 | }; | |
131 | ||
132 | // inline functions | |
133 | ||
134 | /// Return the number of geometry modules | |
135 | inline Int_t AliMUONVGeometryBuilder::NofGeometries() const | |
136 | { return fGeometryModules->GetEntriesFast(); } | |
137 | ||
138 | /// Return the \a i th geometry module | |
139 | inline AliMUONGeometryModule* AliMUONVGeometryBuilder::Geometry(Int_t i) const | |
140 | { return (AliMUONGeometryModule*)fGeometryModules->At(i); } | |
141 | ||
142 | #endif //ALI_MUONV_GEOMETRY_BUILDER_H |