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