]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MUON/AliMUONSt1GeometryBuilderV2.h
Add possibility to have at least 2 MC labels in the new cluster (Jocelyn)
[u/mrichter/AliRoot.git] / MUON / AliMUONSt1GeometryBuilderV2.h
CommitLineData
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 22typedef Double_t GReal_t; // for VirtualMC
23
adbabf6d 24class AliMUON;
25class AliMpSector;
26
d1cd2474 27class TTree;
28class TVector2;
29class TVector3;
30
d1cd2474 31class 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 162inline GReal_t AliMUONSt1GeometryBuilderV2::TotalHzPlane() const
163//{ return fgkHzPadPlane + fgkHzFoam + fgkHzFR4; }
164{ return fgkHzFoam + fgkHzFR4; }
165
5398f946 166/// Return total daughter plane half Size
d1cd2474 167inline GReal_t AliMUONSt1GeometryBuilderV2::TotalHzDaughter() const
168{ return fgkHzBergPlastic + fgkHzDaughter; }
169
5398f946 170/// Return total plane half Size
d1cd2474 171inline GReal_t AliMUONSt1GeometryBuilderV2::TotalHz() const
172{ return TotalHzPlane() + TotalHzDaughter(); }
173
5398f946 174/// Return middle quadrant layer name for chamber \a chamber
d1cd2474 175inline 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
179inline 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 183inline 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 187inline 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 191inline 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 195inline 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 199inline 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