]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONVGeometryBuilder.h
Using AliPHOSLoader instead of AliPHOSGetter
[u/mrichter/AliRoot.git] / MUON / AliMUONVGeometryBuilder.h
index f1d582c11516ff86659272765251bd613bd5b67c..2a2911cbd8eaec53eb890c195d7c3e7dc4632193 100644 (file)
@@ -3,12 +3,12 @@
 
 // $Id$
 // Revision of includes 07/05/2004
-//
-// Class AliMUONVGeometryBuilder
-// -----------------------------
-// Abstract base class for geometry construction per chamber(s).
-//
-// Author: Ivana Hrivnacova, IPN Orsay
+
+/// \ingroup geometry
+/// \class AliMUONVGeometryBuilder
+/// \brief Abstract base class for geometry construction per module(s)
+///
+/// \author Ivana Hrivnacova, IPN Orsay
 
 #ifndef ALI_MUON_V_GEOMETRY_BUILDER_H
 #define ALI_MUON_V_GEOMETRY_BUILDER_H
 #include <fstream>
 
 #include <TObject.h>
+#include <TObjArray.h>
+#include <TGeoMatrix.h>
 
 class TGeoTranslation;
 class TGeoRotation;
 class TGeoCombiTrans;
-class TObjArray;
 
-class AliMUONChamber;
-class AliMUONChamberGeometry;
+class AliMUONGeometryModule;
 class AliMUONGeometryEnvelopeStore;
-class AliMUONGeometryTransformStore;
-class AliMUONGeometrySVMap;
+class AliMUONStringIntMap;
 
 class AliMUONVGeometryBuilder : public TObject
 {
   public:
-    AliMUONVGeometryBuilder(const TString& fileName,
-                            AliMUONChamber* ch1,
-                            AliMUONChamber* ch2 = 0,
-                            AliMUONChamber* ch3 = 0,
-                            AliMUONChamber* ch4 = 0,
-                            AliMUONChamber* ch5 = 0,
-                            AliMUONChamber* ch6 = 0);
+    AliMUONVGeometryBuilder(Int_t firstModuleId, Int_t nofModules);
     AliMUONVGeometryBuilder();
     virtual ~AliMUONVGeometryBuilder();
   
     // methods
-    virtual void  FillTransformations() const;
-    virtual void  RebuildSVMaps() const;
-    virtual Bool_t  ReadTransformations() const;
-    virtual Bool_t  ReadSVMap() const;
-    virtual Bool_t  WriteTransformations() const;
-    virtual Bool_t  WriteSVMap(Bool_t rebuild) const;
-    
+    void  SetReferenceFrame(const TGeoCombiTrans& referenceFrame);
+    void  RebuildSVMaps(Bool_t withEnvelopes = true) const;
+    void  CreateDetElements() const;
+
+                  /// Function to be overriden in a concrete chamber/station
+                 /// geometry builder class.
+                 /// Only materials that are not defined in the common
+                 /// functions should be defined here.
     virtual void CreateMaterials() {}  // make = 0; ?
-                  // Function to be overriden in a concrete chamber/station
-                 // geometry builder class.
-                 // Only materials that are not defined in the common
-                 // functions should be defined here.
+
+                  /// Function to be overriden in a concrete chamber/station
+                 /// geometry builder class. \n
+                 /// The geometry built there should not be placed
+                 /// in ALIC; but all volumes going to ALIC
+                 /// have to be added as envelopes to the chamber
+                 /// geometries
+                 /// (They will be then placed automatically 
+                 /// usind the provided transformation.
     virtual void CreateGeometry() = 0;
-                  // Function to be overriden in a concrete chamber/station
-                 // geometry builder class.
-                 // The geometry built there should not be placed
-                 // in ALIC; but all volumes going to ALIC
-                 // have to be added as envelopes to the chamber
-                 // geometries
-                 // (They will be then placed automatically 
-                 // usind the provided transformation.
+
+                  /// Function to be overriden in a concrete chamber/station
+                 /// geometry class. \n
+                 /// The transformation of each chamber(s) wrt ALICE
+                 /// should be defined and set to its geometry class. 
     virtual void SetTransformations() = 0;
-                  // Function to be overriden in a concrete chamber/station
-                 // geometry class.
-                 // The transformation of each chamber(s) wrt ALICE
-                 // should be defined and set to its geometry class. 
+
+                  /// Function to be overriden in a concrete chamber/station
+                 /// geometry class. \n
+                 /// The sensitive volumes Ids for each chamber
+                 /// should be defined and set to its geometry class. 
     virtual void SetSensitiveVolumes() = 0;
-                  // Function to be overriden in a concrete chamber/station
-                 // geometry class.
-                 // The sensitive volumes Ids for each chamber
-                 // should be defined and set to its geometry class. 
 
-  protected:
-    AliMUONVGeometryBuilder(const AliMUONVGeometryBuilder& rhs);
+                  /// Function to be overriden (and return false) 
+                 /// in the concrete geometry builder classes 
+                 /// which are already defined in the new ALICE
+                 /// coordinate frame
+    virtual bool ApplyGlobalTransformation() { return true; }
 
-    // operators  
-    AliMUONVGeometryBuilder& operator = (const AliMUONVGeometryBuilder& rhs);
+    // access to module geometries
+    Int_t  NofGeometries() const;
+    AliMUONGeometryModule* Geometry(Int_t i) const;
+                  // In difference from protected GetGeometry()
+                 // this function access geometry via index and not
+                 // via moduleId
 
+  protected:
     // methods
-    AliMUONChamber*                GetChamber(Int_t chamberId) const;
-    AliMUONGeometryEnvelopeStore*  GetEnvelopes(Int_t chamberId) const;
-    AliMUONGeometryTransformStore* GetTransforms(Int_t chamberId) const;
-    AliMUONGeometrySVMap*          GetSVMap(Int_t chamberId) const;
+    AliMUONGeometryModule*         GetGeometry(Int_t moduleId) const;
+    AliMUONGeometryEnvelopeStore*  GetEnvelopes(Int_t moduleId) const;
+    AliMUONStringIntMap*           GetSVMap(Int_t moduleId) const;
+    Int_t                          GetModuleId(const TString& envName) const;
+    
+    // set module transformation
+    void SetTranslation(Int_t moduleId, 
+                        const TGeoTranslation& translation);
+    void SetTransformation(Int_t moduleId, 
+                        const TGeoTranslation& translation,
+                       const TGeoRotation& rotation);
+                       
+    // set volumes 
+    void SetVolume(Int_t moduleId, const TString& volumeName, 
+                   Bool_t isVirtual = false);                  
+    void SetMotherVolume(Int_t moduleId, const TString& volumeName);                   
     
   private:
     //methods
-    TString  ComposePath(const TString& volName, Int_t copyNo) const; 
-    void     MapSV(const TString&path, const TString& volName, 
-                  Int_t detElemId) const;
-
-    void FillData(Int_t chamberId, 
-                  Double_t x, Double_t y, Double_t z,
-                 Double_t a1, Double_t a2, Double_t a3, 
-                 Double_t a4, Double_t a5, Double_t a6) const; 
-    void FillData(Int_t id, const TString& volName, Int_t copyNo,
-                  Double_t x, Double_t y, Double_t z,
-                 Double_t a1, Double_t a2, Double_t a3, 
-                 Double_t a4, Double_t a5, Double_t a6) const;
-    void FillData(const TString& sensVolumePath, Int_t detElemId) const;                  
-
-    TString ReadData1(ifstream& in) const;
-    TString ReadData2(ifstream& in) const;
-    TString ReadData3(ifstream& in) const;
-
-    void WriteTransform(ofstream& out, const TGeoCombiTrans* transform) const;
-    void WriteData1(ofstream& out) const;
-    void WriteData2(ofstream& out) const;
-    void WriteData3(ofstream& out) const;
-
-    // static data members
-    static const TString fgkTransformFileNamePrefix; // the prefix for the name 
-                                                 // of file with transformations
-    static const TString fgkSVMapFileNamePrefix; // the prefix for the name of file 
-                                                 // with sensitive volume map
-    static const TString fgkOutFileNameSuffix;   // the suffix for the name of 
-                                                 // generated files
     
+    /// Not implemented
+    AliMUONVGeometryBuilder(const AliMUONVGeometryBuilder& rhs);
+    /// Not implemented
+    AliMUONVGeometryBuilder& operator = (const AliMUONVGeometryBuilder& rhs);
+
+    TGeoHMatrix ConvertTransform(const TGeoHMatrix& transform) const;
+    TGeoHMatrix ConvertDETransform(const TGeoHMatrix& transform) const;
+    TString     ComposePath(const TString& volName, Int_t copyNo) const; 
+    void        MapSV(const TString& path0, 
+                      const TString& volName, Int_t detElemId) const;
+
     // data members
-    TString     fTransformFileName; // the name file with transformations 
-    TString     fSVMapFileName;     // the name file with sensitive volume map 
-    TObjArray*  fChambers; // the chambers which geometry will be built
-                           // by this builder
-    
-  ClassDef(AliMUONVGeometryBuilder,2) // MUON chamber geometry base class
+    TObjArray*  fGeometryModules;   ///< \brief the modules geometries that will be built
+                                    /// by this builder                                    
+    TGeoCombiTrans fReferenceFrame; ///< \brief the transformation from the builder 
+                                    /// reference frame to that of the transform 
+                                   /// data files
+                                       
+  ClassDef(AliMUONVGeometryBuilder,4) // MUON chamber geometry base class
 };
 
+// inline functions
+
+/// Return the number of geometry modules
+inline Int_t  AliMUONVGeometryBuilder::NofGeometries() const
+{ return fGeometryModules->GetEntriesFast(); }
+
+/// Return the \a i th geometry module
+inline AliMUONGeometryModule* AliMUONVGeometryBuilder::Geometry(Int_t i) const
+{ return (AliMUONGeometryModule*)fGeometryModules->At(i); }
+
 #endif //ALI_MUON_V_GEOMETRY_BUILDER_H