]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONVGeometryBuilder.h
Fixing local structure disabled word, which had an incorrect value.
[u/mrichter/AliRoot.git] / MUON / AliMUONVGeometryBuilder.h
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