]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - MUON/AliMUONVGeometryBuilder.h
Add option to run on some local files with test mode using the alien plugin
[u/mrichter/AliRoot.git] / MUON / AliMUONVGeometryBuilder.h
... / ...
CommitLineData
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
22class TGeoTranslation;
23class TGeoRotation;
24class TGeoCombiTrans;
25
26class AliMUONGeometryModule;
27class AliMUONGeometryEnvelopeStore;
28class AliMUONStringIntMap;
29
30class 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
135inline Int_t AliMUONVGeometryBuilder::NofGeometries() const
136{ return fGeometryModules->GetEntriesFast(); }
137
138/// Return the \a i th geometry module
139inline AliMUONGeometryModule* AliMUONVGeometryBuilder::Geometry(Int_t i) const
140{ return (AliMUONGeometryModule*)fGeometryModules->At(i); }
141
142#endif //ALI_MUONV_GEOMETRY_BUILDER_H