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