Make the Scan method public
[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     /// Not implemented
126     AliMUONGeometryEnvelopeStore(const AliMUONGeometryEnvelopeStore& rhs);
127     /// Not implemented
128     AliMUONGeometryEnvelopeStore& operator = (const AliMUONGeometryEnvelopeStore& rhs);
129
130   private:
131     // methods
132     TGeoHMatrix ConvertDETransform(const TGeoHMatrix& transform) const;
133     Bool_t AlignEnvelope(AliMUONGeometryEnvelope* envelope) const;
134  
135     // data members
136     TObjArray*   fEnvelopes; ///< \brief the envelopes names and transformations
137                              /// wrt to the chamber position in mother volume                                 
138     AliMpExMap*  fDetElements; ///< \brief detection elements
139                                /// used for alignement of envelopes
140     TGeoCombiTrans fReferenceFrame; ///< \brief the transformation from the builder 
141                                     /// reference frame to that of the transform 
142                                     /// data files
143     Bool_t      fDebug;     ///< Switch for debugging  \deprecated - use AliLog instead
144     Bool_t      fAlign;     ///< option to read transformations from a file
145  
146   ClassDef(AliMUONGeometryEnvelopeStore,2) // Geometry envelope store
147 };
148
149 // inline functions
150
151 /// Set debug option
152 /// \deprecated - use AliLog instead
153 inline void  AliMUONGeometryEnvelopeStore::SetDebug(Bool_t debug)
154 { fDebug = debug; }
155
156 /// Return align option - if true, transformations are read from a file
157 inline Bool_t  AliMUONGeometryEnvelopeStore::GetAlign() const
158 { return fAlign; }
159
160 /// Set align option - if true, transformations are read from a file
161 inline void AliMUONGeometryEnvelopeStore::SetAlign(Bool_t align)
162 { fAlign = align; }
163
164 /// Return the array of the envelopes names and transformations
165 /// wrt to the chamber position in mother volume
166 inline const TObjArray* AliMUONGeometryEnvelopeStore::GetEnvelopes() const
167 { return fEnvelopes; }
168
169 /// Set the transformation from the builder reference frame to that of the transform 
170 /// data files
171 inline void 
172 AliMUONGeometryEnvelopeStore::SetReferenceFrame(const TGeoCombiTrans& referenceFrame)
173 { fReferenceFrame = referenceFrame; }
174
175 #endif //ALI_MUON_CHAMBER_ENVELOPE_STORE_H