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