]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONGeometryEnvelopeStore.h
AliMUONGeometryStore replaced with AliMpExMap (used as the type
[u/mrichter/AliRoot.git] / MUON / AliMUONGeometryEnvelopeStore.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
6 /// \ingroup geometry
7 /// \class AliMUONGeometryEnvelopeStore
8 /// \brief Store for temporary volumes envelopes
9 ///
10 /// Class for definititon of the temporary volume envelopes
11 /// used in geometry construction
12 ///
13 /// \author Ivana Hrivnacova, IPN Orsay
14
15 #ifndef ALI_MUON_GEOMETRY_ENVELOPE_STORE_H
16 #define ALI_MUON_GEOMETRY_ENVELOPE_STORE_H
17
18 #include <TObject.h>
19 #include <TGeoMatrix.h>
20
21 class TGeoTranslation;
22 class TGeoRotation;
23 class TGeoCombiTrans;
24 class TObjArray;
25 class TArrayI;
26 class TString;
27
28 class AliMUONChamber;
29 class AliMUONGeometryEnvelope;
30 class AliMpExMap;
31
32 class AliMUONGeometryEnvelopeStore : public TObject
33 {
34   public:
35     AliMUONGeometryEnvelopeStore(AliMpExMap* detElements);
36     AliMUONGeometryEnvelopeStore();
37     virtual ~AliMUONGeometryEnvelopeStore();
38
39     // methods
40         
41           // adding virtual envelopes   
42           // (not placed in MC geometry, only logical assembly of volumes,
43           //  cannot have more copies)  
44     void  AddEnvelope(const TString& name, Int_t id, 
45                       Bool_t isVirtual, const char* only="ONLY"); 
46     void  AddEnvelope(const TString& name, Int_t id,  
47                       Bool_t isVirtual,
48                       const TGeoTranslation& translation, 
49                       const char* only="ONLY"); 
50     void  AddEnvelope(const TString& name, Int_t id, 
51                       Bool_t isVirtual, 
52                       const TGeoTranslation& translation, 
53                       const TGeoRotation& rotation,
54                       const char* only="ONLY");
55     void  AddEnvelope(const TString& name, Int_t id,  
56                       Bool_t isVirtual,
57                       const TGeoCombiTrans& transform,
58                       const char* only="ONLY");
59                       
60           // adding non-virtual envelopes       
61           // (placed in MC geometry with transformation composed
62           //  of transformation of chamber and their transformation, 
63           //  can have more copies )    
64     void  AddEnvelope(const TString& name, Int_t id, 
65                       Int_t copyNo, const char* only="ONLY"); 
66     void  AddEnvelope(const TString& name, Int_t id, 
67                       Int_t copyNo, 
68                       const TGeoTranslation& translation,
69                       const char* only="ONLY"); 
70     void  AddEnvelope(const TString& name,  Int_t id, 
71                       Int_t copyNo,
72                       const TGeoTranslation& translation, 
73                       const TGeoRotation& rotation,
74                       const char* only="ONLY");
75     void  AddEnvelope(const TString& name,  Int_t id, 
76                       Int_t copyNo, 
77                       const TGeoCombiTrans& transform,
78                       const char* only="ONLY");
79
80           // adding constituents to virtual envelopes   
81           // (placed in MC geometry with transformation composed
82           //  of transformation of chamber, envelope and their own
83           //  transformation )  
84     void  AddEnvelopeConstituent(const TString& name, const TString& envName, 
85                       Int_t copyNo); 
86     void  AddEnvelopeConstituent(const TString& name, const TString& envName, 
87                       Int_t copyNo, const TGeoTranslation& translation); 
88     void  AddEnvelopeConstituent(const TString& name, const TString& envName, 
89                       Int_t copyNo, const TGeoTranslation& translation, 
90                       const TGeoRotation& rotation);
91     void  AddEnvelopeConstituent(const TString& name, const TString& envName, 
92                       Int_t copyNo, const TGeoCombiTrans& transform);
93                                       
94           // adding constituents to virtual envelopes with specified shape
95           // parameters
96           // (placed in MC geometry with transformation composed
97           //  of transformation of chamber, envelope and their own
98           //  transformation )  
99     void  AddEnvelopeConstituentParam(const TString& name, const TString& envName, 
100                       Int_t copyNo, Int_t npar, Double_t* param); 
101     void  AddEnvelopeConstituentParam(const TString& name, const TString& envName, 
102                       Int_t copyNo, const TGeoTranslation& translation,
103                       Int_t npar, Double_t* param); 
104     void  AddEnvelopeConstituentParam(const TString& name, const TString& envName, 
105                       Int_t copyNo, const TGeoTranslation& translation, 
106                       const TGeoRotation& rotation, Int_t npar, Double_t* param);
107     void  AddEnvelopeConstituentParam(const TString& name, const TString& envName, 
108                       Int_t copyNo, const TGeoCombiTrans& transform,
109                       Int_t npar, Double_t* param);
110                                       
111     void  SetDebug(Bool_t debug);
112     void  SetReferenceFrame(const TGeoCombiTrans& referenceFrame);
113
114     // Alignement
115     virtual Bool_t  GetAlign() const;
116     virtual void    SetAlign(Bool_t align);
117  
118     // get methods
119     const TObjArray*  GetEnvelopes() const;
120     Int_t             GetNofDetElements() const;
121
122     AliMUONGeometryEnvelope* FindEnvelope(const TString& name) const;
123
124   protected:
125     AliMUONGeometryEnvelopeStore(const AliMUONGeometryEnvelopeStore& rhs);
126     AliMUONGeometryEnvelopeStore& operator = (const AliMUONGeometryEnvelopeStore& rhs);
127
128   private:
129     // methods
130     TGeoHMatrix ConvertDETransform(const TGeoHMatrix& transform) const;
131     Bool_t AlignEnvelope(AliMUONGeometryEnvelope* envelope) const;
132  
133     // data members
134     TObjArray*   fEnvelopes; ///< \brief the envelopes names and transformations
135                              /// wrt to the chamber position in mother volume                                 
136     AliMpExMap*  fDetElements; ///< \brief detection elements
137                                /// used for alignement of envelopes
138     TGeoCombiTrans fReferenceFrame; ///< \brief the transformation from the builder 
139                                     /// reference frame to that of the transform 
140                                     /// data files
141     Bool_t      fDebug;     ///< Switch for debugging  \deprecated - use AliLog instead
142     Bool_t      fAlign;     ///< option to read transformations from a file
143  
144   ClassDef(AliMUONGeometryEnvelopeStore,2) // Geometry envelope store
145 };
146
147 // inline functions
148
149 /// Set debug option
150 /// \deprecated - use AliLog instead
151 inline void  AliMUONGeometryEnvelopeStore::SetDebug(Bool_t debug)
152 { fDebug = debug; }
153
154 /// Return align option - if true, transformations are read from a file
155 inline Bool_t  AliMUONGeometryEnvelopeStore::GetAlign() const
156 { return fAlign; }
157
158 /// Set align option - if true, transformations are read from a file
159 inline void AliMUONGeometryEnvelopeStore::SetAlign(Bool_t align)
160 { fAlign = align; }
161
162 /// Return the array of the envelopes names and transformations
163 /// wrt to the chamber position in mother volume
164 inline const TObjArray* AliMUONGeometryEnvelopeStore::GetEnvelopes() const
165 { return fEnvelopes; }
166
167 /// Set the transformation from the builder reference frame to that of the transform 
168 /// data files
169 inline void 
170 AliMUONGeometryEnvelopeStore::SetReferenceFrame(const TGeoCombiTrans& referenceFrame)
171 { fReferenceFrame = referenceFrame; }
172
173 #endif //ALI_MUON_CHAMBER_ENVELOPE_STORE_H