Fixed memory leak
[u/mrichter/AliRoot.git] / MUON / AliMUONTriggerGeometryBuilder.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 AliMUONTriggerGeometryBuilder
9 /// \brief MUON Trigger stations geometry construction class
10 ///
11 /// \author Philippe Crochet (LPCCFd)
12
13 #ifndef ALI_MUON_TRIGGER_GEOMETRY_BUILDER_H
14 #define ALI_MUON_TRIGGER_GEOMETRY_BUILDER_H
15
16 #include "AliMUONVGeometryBuilder.h"
17
18 class AliMUON;
19
20 class AliMUONTriggerGeometryBuilder : public AliMUONVGeometryBuilder
21 {
22   public:
23     AliMUONTriggerGeometryBuilder(AliMUON* muon);
24     AliMUONTriggerGeometryBuilder();
25     virtual ~AliMUONTriggerGeometryBuilder();
26   
27     // methods
28     virtual void CreateGeometry();
29     virtual void SetVolumes();
30     virtual void SetTransformations();
31     virtual void SetSensitiveVolumes();
32     
33     /// Do not apply global transformation (geometry is defined in the new ALICE reference frame)
34     virtual bool ApplyGlobalTransformation() { return false; }
35     
36   protected:  
37     
38   private:
39     /// Not implemented
40     AliMUONTriggerGeometryBuilder(const AliMUONTriggerGeometryBuilder& rhs);
41     /// Not implemented
42     AliMUONTriggerGeometryBuilder& operator = (const AliMUONTriggerGeometryBuilder& rhs);
43
44     // methods
45     void BuildChamberPrototype(Int_t icount) const;  
46     void BuildRPCSupportsVertical(Int_t& iVolNum, Int_t icount) const;    
47     void BuildRPCSupportsHorizontal(Int_t icount) const;    
48     void BuildAngularSupportForChambers(Int_t icount) const;  
49     void BuildGasPipes(Int_t icount) const;         
50     void BuildChamberTypeA(Int_t& iVolNum, Int_t icount);  
51     void BuildChamberTypeB(Int_t& iVolNum, Int_t icount);  
52     void BuildChamberTypeD(Int_t& iVolNum, Int_t icount);  
53     void BuildChamberTypeE(Int_t& iVolNum, Int_t icount);  
54     void BuildChamberTypeF(Int_t& iVolNum, Int_t icount);  
55
56     // constants
57     
58     static const Float_t fgkDXZERO; ///<  vertical gap between right and left chambers (kDXZERO*2=4cm)
59
60     // main distances for chamber definition in first plane/first station
61     static const Float_t fgkXMIN; ///< xmin distance in first plane/first station    
62     static const Float_t fgkXMED; ///< xmed distance in first plane/first station                                 
63     static const Float_t fgkXMAX; ///< xmax distance in first plane/first station  
64
65     // 090704 kXMAX changed from 272 to 255.
66     // (see fig.2-4 & 2-5 of Local Trigger Board PRR)
67     // segmentation updated accordingly
68     static const Float_t fgkYMIN; ///< add                             
69     static const Float_t fgkYMAX; ///< add                            
70
71     // inner/outer radius of flange between beam shield. and chambers (1/station)
72     //    static const Float_t fgkRMIN[2]={50.,50.};
73     //    static const Float_t fgkRMAX[2]={64.,68.};
74     // z position of the middle of the gas gap in mother vol 
75     static const Float_t fgkZm; ///< inner radius of flange between beam shield. and chambers (1/station)
76     static const Float_t fgkZp; ///< outer radius of flange between beam shield. and chambers (1/station)
77     
78     static const Float_t fgkYVSup[4]; ///< y positions of vertical supports
79
80     static const Float_t fgkSizeVSupExt[3]; ///< ext dimensions of vertical supports 
81     static const Float_t fgkSizeVSupInt[3]; ///< int dimensions of vertical supports  
82
83     static const Float_t fgkSizeSupport1V[3]; ///< transverse dimensions of 1V angular supports 
84     static const Float_t fgkSizeSupport1H[3]; ///< transverse dimensions of 1H angular supports 
85        // z should be 1.4 in the installed set-up 
86     static const Float_t fgkSizeSupport2V[3]; ///< transverse dimensions of 2V angular supports  
87     static const Float_t fgkSizeSupport2H[3]; ///< transverse dimensions of 2H angular supports  
88     static const Float_t fgkSizeSupportXV[3]; ///< transverse dimensions of XV angular supports 
89     static const Float_t fgkSizeSupportXH[3]; ///< transverse dimensions of XH angular supports 
90
91     static const Float_t fgkSizeSupportCable[3]; /// transverse dimensions of horizontal cable supports
92     static const Float_t fgkSizeGasPipe[3]; ///< dimensions of gas pipes (inner and outer radius)
93
94     static const Float_t fgkOffsetGasPipe;  ///< Position of gas pipe with respect to angular support
95     static const Float_t fgkAvoidExtrusion; ///<  Small cut on some volumes to avoid extrusion from SC1x
96     
97     // 
98     TString GetVolumeName(const TString& volume, Int_t icount) const; 
99     TString GetVolEnvName(Int_t icount, Int_t ienv) const; 
100     TString GetVolAluAngSuppName(
101                      const TString& type1234X, 
102                      const TString& typeHV,
103                      Int_t icount) const;                      
104     TString GetVolEnvSuppAngName(
105                      const TString& type1234X, 
106                      const TString& typeHV, 
107                      const TString& typeABDEF,
108                      Int_t icount, Int_t ivol) const;                      
109     TString GetVolEnvInoxGasPipeName(
110                      const TString& type12, 
111                      const TString& typeABCDEF,
112                      Int_t icount, Int_t ivol) const;                      
113                            
114     
115     // data members 
116     AliMUON*  fMUON;   ///< the MUON detector class 
117     Int_t*    fIdtmed; //!< tracking media   
118     Int_t     fIdAir;  //!< medium 1
119     Int_t     fIdAlu1; //!< medium 4
120     Int_t     fIdInox; //!< medium 29 Stainless Steel (18%Cr,9%Ni,Fe)
121     Float_t   fYEnvPsave; //!< add
122     Float_t   fYEnvMsave; //!< add
123     Float_t   fDYsave;    //!< add
124     Float_t   fDXsave;    //!< add
125     TGeoRotation fRsupportpipe; ///< pipe support rotation 
126         
127   ClassDef(AliMUONTriggerGeometryBuilder,1) // MUON Trigger stations geometry construction class
128 };
129
130 #endif //ALI_MUON_TRIGGER_GEOMETRY_BUILDER_H