Line data Source code
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 6 : 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 40 : 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 42 : 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 150 : { return fGeometryModules->GetEntriesFast(); }
137 :
138 : /// Return the \a i th geometry module
139 : inline AliMUONGeometryModule* AliMUONVGeometryBuilder::Geometry(Int_t i) const
140 120 : { return (AliMUONGeometryModule*)fGeometryModules->At(i); }
141 :
142 : #endif //ALI_MUONV_GEOMETRY_BUILDER_H
|