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 :
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 662 : 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 0 : { fDebug = debug; }
155 :
156 : /// Return align option - if true, transformations are read from a file
157 : inline Bool_t AliMUONGeometryEnvelopeStore::GetAlign() const
158 0 : { return fAlign; }
159 :
160 : /// Set align option - if true, transformations are read from a file
161 : inline void AliMUONGeometryEnvelopeStore::SetAlign(Bool_t align)
162 20 : { 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 80 : { 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 32 : { fReferenceFrame = referenceFrame; }
174 :
175 : #endif //ALI_MUON_CHAMBER_ENVELOPE_STORE_H
|