]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONGeometryBuilder.h
Fix memory leak (in simulations with trigger chamber efficiency < 1)
[u/mrichter/AliRoot.git] / MUON / AliMUONGeometryBuilder.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
6 /// \ingroup geometry
7 /// \class AliMUONGeometryBuilder
8 /// \brief Manager class for geometry construction via geometry builders.
9 ///
10 /// \author Ivana Hrivnacova, IPN Orsay
11
12 #ifndef ALI_MUON_GEOMETRY_BUILDER_H
13 #define ALI_MUON_GEOMETRY_BUILDER_H
14
15 #include "AliMUONGeometry.h"
16
17 #include <TObject.h>
18 #include <TGeoMatrix.h>
19
20 class TObjArray;
21
22 class AliModule;
23 class AliMUONVGeometryBuilder;
24
25 class AliMUONGeometryBuilder : public TObject 
26 {
27   public:
28     AliMUONGeometryBuilder(AliModule* detector);
29     AliMUONGeometryBuilder();
30     virtual  ~AliMUONGeometryBuilder();
31     
32     // static methods
33     static TGeoHMatrix Multiply(const TGeoMatrix& m1, const TGeoMatrix& m2); 
34     static TGeoHMatrix Multiply(const TGeoMatrix& m1, const TGeoMatrix& m2,
35                                 const TGeoMatrix& m3); 
36     static TGeoHMatrix Multiply(const TGeoMatrix& m1, const TGeoMatrix& m2,
37                                 const TGeoMatrix& m3, const TGeoMatrix& m4); 
38
39     // methods
40     //
41     void  AddBuilder(AliMUONVGeometryBuilder* geomBuilder);
42     void  CreateGeometry();
43     void  CreateMaterials();
44
45     void  InitGeometry();
46     void  InitGeometry(const TString& svmapFileName);
47     void  UpdateInternalGeometry();
48
49     void  WriteSVMaps();
50     void  WriteSVMaps(const TString& fileName, 
51                       Bool_t rebuild = true, Bool_t writeEnvelopes = true);
52     
53     // Geometry parametrisation
54     const AliMUONGeometry*            GetGeometry() const;
55     const AliMUONGeometryTransformer* GetTransformer() const;
56
57     // Alignement
58     virtual Bool_t  GetAlign() const;
59     virtual void    SetAlign(Bool_t align = true);
60     virtual void    SetAlign(const TString& fileName, Bool_t align = true);
61  
62   protected:
63     /// Not implemented
64     AliMUONGeometryBuilder(const AliMUONGeometryBuilder& right);
65     /// Not implemented
66     AliMUONGeometryBuilder&  operator = (const AliMUONGeometryBuilder& right);
67  
68   private:
69     // method
70     void PlaceVolume(const TString& name, const TString& mName, Int_t copyNo, 
71              const TGeoHMatrix& matrix, Int_t npar, Double_t* param,
72              const char* only, Bool_t makeAssembly = false) const;
73     void CreateGeometryWithTGeo();
74     void CreateGeometryWithoutTGeo();
75     void SetAlignToBuilder(AliMUONVGeometryBuilder* builder) const;          
76
77     // static data members
78     static const TString  fgkDefaultVolPathsFileName;  ///< default volume paths file name                                         
79     static const TString  fgkDefaultTransformFileName; ///< default transformations file name                                      
80     static const TString  fgkDefaultSVMapFileName;     ///< default svmaps file name                                       
81     static const TString  fgkOutFileNameExtension;     ///< default output file name extension                                     
82
83     // data members
84     AliModule*       fModule;              ///< the AliRoot module
85     Bool_t           fAlign;               ///< \brief option to read transformations 
86                                            /// from a file
87     TString          fTransformFileName;   ///< transformations file name                                          
88     TString          fSVMapFileName;       ///< svmaps file name                                           
89     TGeoCombiTrans   fGlobalTransformation;///< \brief global transformation 
90                                            /// applied to the whole geometry 
91     TObjArray*       fGeometryBuilders;    ///< list of Geometry Builders
92     AliMUONGeometry* fGeometry;            ///< geometry parametrisation
93
94   ClassDef(AliMUONGeometryBuilder,6)  // Geometry builder
95 };
96
97 // inline functions
98
99 /// Initialize geometry
100 inline void  AliMUONGeometryBuilder::InitGeometry()
101 { InitGeometry(fSVMapFileName); }
102
103 /// Write sensitive volume maps
104 inline void  AliMUONGeometryBuilder::WriteSVMaps()
105 { WriteSVMaps(fSVMapFileName + fgkOutFileNameExtension); }
106
107 /// Return geometry parametrisation
108 inline 
109 const AliMUONGeometry* AliMUONGeometryBuilder::GetGeometry() const
110 { return fGeometry; }
111
112 /// Return geometry transformer
113 inline 
114 const AliMUONGeometryTransformer* AliMUONGeometryBuilder::GetTransformer() const
115 { return fGeometry->GetTransformer(); }
116
117 /// Return option for reading transformations from a file
118 inline Bool_t  AliMUONGeometryBuilder::GetAlign() const
119 { return fAlign; }
120
121 #endif //ALI_MUON_GEOMETRY_BUILDER_H
122
123
124
125
126
127
128