Fixed memory leak
[u/mrichter/AliRoot.git] / MUON / AliMUONGeometryBuilder.h
index fea42f2..a55311a 100644 (file)
-#ifndef ALI_MUON_GEOMETRY_BUILDER_H
-#define ALI_MUON_GEOMETRY_BUILDER_H
 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
  * See cxx source for full Copyright notice                               */
 
 // $Id$
-//
-// Class AliMUONGeometryBuilder
-// ----------------------------
-// MUON manager class for geometry construction,
-// separated form AliMUONv1
-//
-// Author: Ivana Hrivnacova, IPN Orsay
+
+/// \ingroup geometry
+/// \class AliMUONGeometryBuilder
+/// \brief Manager class for geometry construction via geometry builders.
+///
+/// \author Ivana Hrivnacova, IPN Orsay
+
+#ifndef ALI_MUON_GEOMETRY_BUILDER_H
+#define ALI_MUON_GEOMETRY_BUILDER_H
+
+#include "AliMUONGeometry.h"
 
 #include <TObject.h>
+#include <TGeoMatrix.h>
 
-class TGeoCombiTrans;
-class TGeoHMatrix;
 class TObjArray;
 
-class AliMUON;
+class AliModule;
 class AliMUONVGeometryBuilder;
 
 class AliMUONGeometryBuilder : public TObject 
 {
   public:
+    AliMUONGeometryBuilder(AliModule* detector);
     AliMUONGeometryBuilder();
-    AliMUONGeometryBuilder(AliMUON* muon);
     virtual  ~AliMUONGeometryBuilder();
-
+    
+    // static methods
+    static TGeoHMatrix Multiply(const TGeoMatrix& m1, const TGeoMatrix& m2); 
+    static TGeoHMatrix Multiply(const TGeoMatrix& m1, const TGeoMatrix& m2,
+                                const TGeoMatrix& m3); 
+    static TGeoHMatrix Multiply(const TGeoMatrix& m1, const TGeoMatrix& m2,
+                                const TGeoMatrix& m3, const TGeoMatrix& m4); 
+
+    // methods
+    //
+    void  AddBuilder(AliMUONVGeometryBuilder* geomBuilder);
     void  CreateGeometry();
     void  CreateMaterials();
+
     void  InitGeometry();
-    void  WriteTransformations();
-    void  WriteSVMaps(Bool_t rebuild = true);
+    void  InitGeometry(const TString& svmapFileName);
+    void  UpdateInternalGeometry();
+
+    void  WriteSVMaps();
+    void  WriteSVMaps(const TString& fileName, 
+                      Bool_t rebuild = true, Bool_t writeEnvelopes = true);
+    
+    // Geometry parametrisation
+    const AliMUONGeometry*            GetGeometry() const;
+    const AliMUONGeometryTransformer* GetTransformer() const;
 
     // Alignement
     virtual Bool_t  GetAlign() const;
-    virtual void    SetAlign(Bool_t align);
+    virtual void    SetAlign(Bool_t align = true);
+    virtual void    SetAlign(const TString& fileName, Bool_t align = true);
  
-    void  AddBuilder(AliMUONVGeometryBuilder* geomBuilder);
-   
   protected:
+    /// Not implemented
     AliMUONGeometryBuilder(const AliMUONGeometryBuilder& right);
+    /// Not implemented
     AliMUONGeometryBuilder&  operator = (const AliMUONGeometryBuilder& right);
  
   private:
+    // static methods
+    static const TString& GetDefaultTransformFileName();    
+    static const TString& GetDefaultSVMapFileName();    
+    static const TString& GetOutFileNameExtension();        
+
     // method
     void PlaceVolume(const TString& name, const TString& mName, Int_t copyNo, 
              const TGeoHMatrix& matrix, Int_t npar, Double_t* param,
-            const char* only) const;
+            const char* only, Bool_t makeAssembly = false) const;
+    void CreateGeometryWithTGeo();
+    void CreateGeometryWithoutTGeo();
+    void SetAlignToBuilder(AliMUONVGeometryBuilder* builder) const;         
 
     // data members
-    AliMUON*        fMUON;                // MUON detector
-    Bool_t          fAlign;               // option to read transformations 
-                                          // from a file
-    TGeoCombiTrans* fGlobalTransformation;// global transformation 
-                                          // applied to the whole geometry 
-    TObjArray*      fGeometryBuilders;    // list of Geometry Builders
-
-  ClassDef(AliMUONGeometryBuilder,3)  // MUON Detector class Version 1
+    AliModule*       fModule;              ///< the AliRoot module
+    Bool_t           fAlign;               ///< \brief option to read transformations 
+                                           /// from a file
+    TString          fTransformFileName;   ///< transformations file name                                         
+    TString          fSVMapFileName;       ///< svmaps file name                                          
+    TGeoCombiTrans   fGlobalTransformation;///< \brief global transformation 
+                                           /// applied to the whole geometry 
+    TObjArray*       fGeometryBuilders;    ///< list of Geometry Builders
+    AliMUONGeometry* fGeometry;            ///< geometry parametrisation
+
+  ClassDef(AliMUONGeometryBuilder,6)  // Geometry builder
 };
 
 // inline functions
 
+/// Initialize geometry
+inline void  AliMUONGeometryBuilder::InitGeometry()
+{ InitGeometry(fSVMapFileName); }
+
+/// Write sensitive volume maps
+inline void  AliMUONGeometryBuilder::WriteSVMaps()
+{ WriteSVMaps(fSVMapFileName + GetOutFileNameExtension()); }
+
+/// Return geometry parametrisation
+inline 
+const AliMUONGeometry* AliMUONGeometryBuilder::GetGeometry() const
+{ return fGeometry; }
+
+/// Return geometry transformer
+inline 
+const AliMUONGeometryTransformer* AliMUONGeometryBuilder::GetTransformer() const
+{ return fGeometry->GetTransformer(); }
+
+/// Return option for reading transformations from a file
 inline Bool_t  AliMUONGeometryBuilder::GetAlign() const
 { return fAlign; }