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 : // Revision of includes 07/05/2004
6 : //
7 : /// \ingroup sim
8 : /// \class AliMUONSt1GeometryBuilderV2
9 : /// \brief MUON Station1 detailed geometry construction class
10 : ///
11 : /// \author David Guez, Ivana Hrivnacova, Marion MacCormick; IPN Orsay
12 :
13 : #ifndef ALI_MUON_ST1_GEOMETRY_BUILDER_V2_H
14 : #define ALI_MUON_ST1_GEOMETRY_BUILDER_V2_H
15 :
16 :
17 : #include "AliMUONVGeometryBuilder.h"
18 :
19 : #include <TExMap.h>
20 :
21 : // typedef Float_t GReal_t; // for AliGeant3
22 : typedef Double_t GReal_t; // for VirtualMC
23 :
24 : class AliMUON;
25 : class AliMpSector;
26 :
27 : class TTree;
28 : class TVector2;
29 : class TVector3;
30 :
31 : class AliMUONSt1GeometryBuilderV2 : public AliMUONVGeometryBuilder
32 : {
33 : public:
34 : AliMUONSt1GeometryBuilderV2(AliMUON* muon);
35 : AliMUONSt1GeometryBuilderV2();
36 : virtual ~AliMUONSt1GeometryBuilderV2();
37 :
38 : virtual void CreateMaterials();
39 : virtual void CreateGeometry();
40 : virtual void SetVolumes();
41 : virtual void SetTransformations();
42 : virtual void SetSensitiveVolumes();
43 :
44 : protected:
45 :
46 : private:
47 : /// Not implemented
48 : AliMUONSt1GeometryBuilderV2(const AliMUONSt1GeometryBuilderV2& rMUON);
49 : /// Not implemented
50 : AliMUONSt1GeometryBuilderV2& operator = (const AliMUONSt1GeometryBuilderV2& rhs);
51 :
52 : // Constants
53 : //
54 : static const GReal_t fgkHzPadPlane; ///< Pad plane
55 : static const GReal_t fgkHzFoam; ///< Foam of mechanicalplane
56 : static const GReal_t fgkHzFR4; ///< FR4 of mechanical plane
57 : static const GReal_t fgkHzSnPb; ///< Pad/Kapton connection (66 pt)
58 : static const GReal_t fgkHzKapton; ///< Kapton
59 : static const GReal_t fgkHzBergPlastic; ///< Berg connector
60 : static const GReal_t fgkHzBergCopper; ///< Berg connector (80 pt)
61 : static const GReal_t fgkHzDaughter; ///< Daughter board
62 : static const GReal_t fgkHzGas; ///< ArCO2 Gas
63 :
64 : // Sensitive copper pads, foam layer, PCB and electronics model parameters
65 : static const GReal_t fgkHxHole; ///< foam hole paremeter
66 : static const GReal_t fgkHyHole; ///< foam hole paremeter
67 : static const GReal_t fgkHxBergPlastic; ///< Berg connector parameter
68 : static const GReal_t fgkHyBergPlastic; ///< Berg connector parameter
69 : static const GReal_t fgkHxBergCopper; ///< Berg connector parameter
70 : static const GReal_t fgkHyBergCopper; ///< Berg connector parameter
71 : static const GReal_t fgkHxKapton; ///< Kapton parameter
72 : static const GReal_t fgkHyKapton; ///< Kapton parameter
73 : static const GReal_t fgkHxDaughter; ///< Electronics parameter
74 : static const GReal_t fgkHyDaughter; ///< Electronics parameter
75 : static const GReal_t fgkOffsetX; ///< Offset X
76 : static const GReal_t fgkOffsetY; ///< Offset Y
77 : static const GReal_t fgkDeltaFilleEtamX; ///< Electronics parameter
78 : static const GReal_t fgkDeltaFilleEtamY; ///< Electronics parameter
79 :
80 : static const GReal_t fgkDeltaQuadLHC; ///< LHC Origin wrt Quadrant Origin
81 : static const GReal_t fgkFrameOffset; ///< Frame offset
82 :
83 : // Pad planes offsets
84 : static const GReal_t fgkPadXOffsetBP; ///< Horizontal offset in bending plane
85 : static const GReal_t fgkPadYOffsetBP; ///< Vertical offset in bending plane
86 :
87 : // Quadrant Mother volume - TUBS1
88 : static const GReal_t fgkMotherIR1; ///< Middle Layer Rin
89 : static const GReal_t fgkMotherOR1; ///< Middle Layer Rout
90 : static const GReal_t fgkMotherThick1; ///< Middle Layer Hz
91 : static const GReal_t fgkMotherPhiL1; ///< Middle Layer Sphi
92 : static const GReal_t fgkMotherPhiU1; ///< Middle Layer Endphi
93 :
94 : // Quadrant Mother volume - TUBS2 (2 copies at different Z's)
95 : static const GReal_t fgkMotherIR2; ///< Near and Far Layer Rin
96 : static const GReal_t fgkMotherOR2; ///< Near and Far Layer Rout
97 : static const GReal_t fgkMotherThick2; ///< Near and Far Layer Hz
98 : static const GReal_t fgkMotherPhiL2; ///< Near and Far Layer Sphi
99 : static const GReal_t fgkMotherPhiU2; ///< Near and Far Layer Endphi
100 :
101 : static const char* fgkHoleName; ///< prefix for automatic volume naming
102 : static const char* fgkQuadrantEnvelopeName; ///< prefix for automatic volume naming
103 : static const char* fgkQuadrantMLayerName;///< prefix for automatic volume naming
104 : static const char* fgkQuadrantNLayerName;///< prefix for automatic volume naming
105 : static const char* fgkQuadrantFLayerName;///< prefix for automatic volume naming
106 : static const char* fgkQuadrantMFLayerName; ///< prefix for automatic volume naming
107 : static const char* fgkDaughterName; ///< prefix for automatic volume naming
108 : static const Int_t fgkFoamBoxNameOffset; ///< coefficient for automatic volume naming
109 : static const Int_t fgkFR4BoxNameOffset; ///< coefficient for automatic volume naming
110 : static const Int_t fgkDaughterCopyNoOffset; ///< \brief copy number offset for daughter
111 : /// boards positions in non-bending plane
112 :
113 : // Methods
114 : //
115 : void CreateHole();
116 : void CreateDaughterBoard();
117 : void CreateInnerLayers();
118 : void CreateSpacer0();
119 : void CreateSpacer();
120 : void CreateQuadrant(Int_t chamber);
121 : void CreateFoamBox(Int_t segNumber, const TVector2& dimensions);
122 : void CreatePlaneSegment(Int_t segNumber, const TVector2& dimensions,
123 : Int_t nofHoles);
124 : void CreateQuadrantLayersAsVolumes(Int_t chamber);
125 : void CreateQuadrantLayersAsAssemblies(Int_t chamber);
126 : void CreateFrame(Int_t chamber);
127 :
128 : void PlaceInnerLayers(Int_t chamber);
129 : void PlaceSpacer0(Int_t chamber);
130 : void PlaceSector(const AliMpSector* sector, TExMap specialMap,
131 : const TVector3& where, Bool_t reflectZ, Int_t chamber);
132 :
133 : TString QuadrantEnvelopeName(Int_t chamber, Int_t quadrant) const;
134 : TString QuadrantMLayerName(Int_t chamber) const;
135 : TString QuadrantNLayerName(Int_t chamber) const;
136 : TString QuadrantFLayerName(Int_t chamber) const;
137 : TString QuadrantMFLayerName(Int_t chamber) const;
138 : TString PlaneSegmentName(Int_t segNumber) const;
139 : TString FoamBoxName(Int_t segNumber) const;
140 : TString FR4BoxName(Int_t segNumber) const;
141 : TString GasVolumeName(const TString& name, Int_t chamber) const;
142 :
143 : GReal_t TotalHzPlane() const ;
144 : GReal_t TotalHzDaughter() const ;
145 : GReal_t TotalHz() const ;
146 :
147 : // Data members
148 : //
149 : //Float_t fRadlCopper; //! copper computed radiation length
150 : //Float_t fRadlFoam; //! foam computed radiation length
151 : //Float_t fRadlFR4; //! FR4 computed radiation length
152 : AliMUON* fMUON; ///< the MUON detector class
153 :
154 126 : ClassDef(AliMUONSt1GeometryBuilderV2,1) // MUON Detector base class
155 : };
156 :
157 : // inline functions
158 :
159 : /// Return total mechanical plane half Size
160 : inline GReal_t AliMUONSt1GeometryBuilderV2::TotalHzPlane() const
161 : //{ return fgkHzPadPlane + fgkHzFoam + fgkHzFR4; }
162 1380 : { return fgkHzFoam + fgkHzFR4; }
163 :
164 : /// Return total daughter plane half Size
165 : inline GReal_t AliMUONSt1GeometryBuilderV2::TotalHzDaughter() const
166 1810 : { return fgkHzBergPlastic + fgkHzDaughter; }
167 :
168 : /// Return total plane half Size
169 : inline GReal_t AliMUONSt1GeometryBuilderV2::TotalHz() const
170 : { return TotalHzPlane() + TotalHzDaughter(); }
171 :
172 : /// Return middle quadrant layer name for chamber \a chamber
173 : inline TString AliMUONSt1GeometryBuilderV2::QuadrantMLayerName(Int_t chamber) const
174 2208 : { return Form("%s%d",fgkQuadrantMLayerName,chamber); }
175 :
176 : /// Return middle quadrant frame layer name for chamber \a chamber
177 : inline TString AliMUONSt1GeometryBuilderV2::QuadrantMFLayerName(Int_t chamber) const
178 24 : { return Form("%s%d",fgkQuadrantMFLayerName,chamber); }
179 :
180 : /// Return nearer quadrant layer name for chamber \a chamber
181 : inline TString AliMUONSt1GeometryBuilderV2::QuadrantNLayerName(Int_t chamber) const
182 24 : { return Form("%s%d",fgkQuadrantNLayerName,chamber); }
183 :
184 : /// Return farther quadrant layer name for chamber \a chamber
185 : inline TString AliMUONSt1GeometryBuilderV2::QuadrantFLayerName(Int_t chamber) const
186 24 : { return Form("%s%d",fgkQuadrantFLayerName,chamber); }
187 :
188 : /// Return plane segment name for segment \a segNumber
189 : inline TString AliMUONSt1GeometryBuilderV2::PlaneSegmentName(Int_t segNumber) const
190 1344 : { return Form("S%.3d", segNumber); }
191 :
192 : /// Return foam box name for segment \a segNumber
193 : inline TString AliMUONSt1GeometryBuilderV2::FoamBoxName(Int_t segNumber) const
194 3860 : { return Form("S%.3d", segNumber + fgkFoamBoxNameOffset); }
195 :
196 : /// Return FR4 box name for segment \a segNumber
197 : inline TString AliMUONSt1GeometryBuilderV2::FR4BoxName(Int_t segNumber) const
198 672 : { return Form("S%.3d", segNumber + fgkFR4BoxNameOffset); }
199 :
200 : #endif //ALI_MUON_ST1_GEOMETRY_BUILDER_V2_H
|