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