]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONGeometryTransformer.h
Updated list of MUON libraries
[u/mrichter/AliRoot.git] / MUON / AliMUONGeometryTransformer.h
index 9931291e755746a78b414a133a83c76b0aeb6fd6..1ca5bdc037e665b3f161467070e4b92d3cb3266b 100644 (file)
@@ -7,33 +7,61 @@
 /// \class AliMUONGeometryTransformer
 /// \brief Top container class for geometry transformations
 ///
-/// Author: Ivana Hrivnacova, IPN Orsay
+/// Geometry transformations can be filled in these ways:
+/// - by geometry builder when geometry is built via builders
+/// - from Root geometry file (*.root) or Root geometry manager
+/// - from ASCII file (*.dat)
+/// If geometry is loaded from a file, the list of aligned volume paths
+/// has to be read first from volpaths.dat file.
+/// 
+/// \author Ivana Hrivnacova, IPN Orsay
 
 #ifndef ALI_MUON_GEOMETRY_TRANSFORMER_H
 #define ALI_MUON_GEOMETRY_TRANSFORMER_H
 
 #include <TObject.h>
+#include <TObjArray.h>
 #include <TGeoMatrix.h>
 
-class TObjArray;
-
 class AliMUONGeometryModuleTransformer;
+class AliMUONGeometryDetElement;
+
+class TGeoManager;
+class TClonesArray;
 
 class AliMUONGeometryTransformer : public TObject
 {
   public:
-    AliMUONGeometryTransformer(Bool_t isOwner);
+    AliMUONGeometryTransformer(Bool_t isOwner, const TString& detName = "MUON");
     AliMUONGeometryTransformer();
     virtual  ~AliMUONGeometryTransformer();
     
     // methods
     void  AddModuleTransformer(AliMUONGeometryModuleTransformer* transformer);
+    void  AddMisAlignModule(Int_t moduleId, const TGeoHMatrix& matrix);
+    void  AddMisAlignDetElement(Int_t detElemId, const TGeoHMatrix& matrix);
+
+    void  AddAlignableVolumes() const; 
+    TClonesArray* CreateZeroAlignmentData() const;
+    void  ClearMisAlignmentData();                            
 
     // IO
-    Bool_t  ReadTransformations(const TString& fileName);
+    //
+    Bool_t  ReadGeometryData(const TString& volPathFileName,
+                             const TString& transformFileName);
+    Bool_t  ReadGeometryData(const TString& volPathFileName,
+                             TGeoManager* geoManager);
+
+    Bool_t  WriteGeometryData(const TString& volPathFileName,
+                             const TString& transformFileName,
+                            const TString& misalignFileName = "") const;
+   
+    Bool_t  WriteVolumePaths(const TString& fileName) const;
     Bool_t  WriteTransformations(const TString& fileName) const;
+    Bool_t  WriteMisAlignmentData(const TString& fileName) const;
 
-    // transformation methods 
+    // Transformation methods 
+    //
     void Global2Local(Int_t detElemId,
                  Float_t xg, Float_t yg, Float_t zg, 
                  Float_t& xl, Float_t& yl, Float_t& zl) const;
@@ -48,51 +76,86 @@ class AliMUONGeometryTransformer : public TObject
                  Double_t xl, Double_t yl, Double_t zl, 
                  Double_t& xg, Double_t& yg, Double_t& zg) const;
 
-    // get methods
+    // Get methods
+    //
+    Int_t GetNofModuleTransformers() const;
     const AliMUONGeometryModuleTransformer* GetModuleTransformer(
                                Int_t index, Bool_t warn = true) const;
 
     const AliMUONGeometryModuleTransformer* GetModuleTransformerByDEId(
                                Int_t detElemId, Bool_t warn = true) const;
 
+    const AliMUONGeometryDetElement* GetDetElement(
+                               Int_t detElemId, Bool_t warn = true) const;
+
+    const TClonesArray* GetMisAlignmentData() const;
+    
     Bool_t  HasDE(Int_t detElemId) const;
 
   protected:
+    /// Not implemented
     AliMUONGeometryTransformer(const AliMUONGeometryTransformer& right);
+    /// Not implemented
     AliMUONGeometryTransformer&  operator = (const AliMUONGeometryTransformer& right);
  
   private:
     // methods
     AliMUONGeometryModuleTransformer* GetModuleTransformerNonConst(
                                     Int_t index, Bool_t warn = true) const;
-    TString  ComposePath(const TString& volName, Int_t copyNo) const; 
 
     TGeoHMatrix GetTransform(
                   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 moduleId, 
+
+    void FillModuleVolPath(Int_t moduleId, const TString& volPath); 
+    void FillDetElemVolPath(Int_t detElemId, const TString& volPath); 
+
+    void FillModuleTransform(Int_t moduleId,
                   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); 
-    void FillData(Int_t id, const TString& volName, Int_t copyNo,
+    void FillDetElemTransform(Int_t id, 
                   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);
 
-    TString ReadData1(ifstream& in);
-    TString ReadData2(ifstream& in);
+    Bool_t  ReadVolPaths(ifstream& in);
+    TString ReadModuleTransforms(ifstream& in);
+    TString ReadDetElemTransforms(ifstream& in);
+    Bool_t  LoadTransforms(TGeoManager* tgeoManager); 
+
+    Bool_t  ReadVolPaths(const TString& fileName);
+    Bool_t  ReadTransformations(const TString& fileName);
+    Bool_t  ReadTransformations2(const TString& fileName);
 
-    void WriteTransform(ofstream& out, const TGeoCombiTrans* transform) const;
-    void WriteData1(ofstream& out) const;
-    void WriteData2(ofstream& out) const;
+    void    WriteTransform(ofstream& out, const TGeoMatrix* transform) const;
+    void    WriteModuleVolPaths(ofstream& out) const;
+    void    WriteDetElemVolPaths(ofstream& out) const;
+    void    WriteModuleTransforms(ofstream& out) const;
+    void    WriteDetElemTransforms(ofstream& out) const;
+    
+    TString GetModuleSymName(Int_t moduleId) const;
+    TString GetDESymName(Int_t detElemId) const;
 
     // data members
-    TObjArray*  fModuleTransformers; // list of module transformers
+    TString        fDetectorName;       ///< Detector name
+    TObjArray*     fModuleTransformers; ///< array of module transformers
+    TClonesArray*  fMisAlignArray;      ///< array of misalignment data
 
-  ClassDef(AliMUONGeometryTransformer,1)  // Geometry parametrisation
+  ClassDef(AliMUONGeometryTransformer,2)  // Geometry parametrisation
 };
 
+// inline methods
+
+/// Return the number of contained module transformers
+inline Int_t AliMUONGeometryTransformer::GetNofModuleTransformers() const
+{ return fModuleTransformers->GetEntriesFast(); }
+
+/// Return the array of misalignment data
+inline const TClonesArray* AliMUONGeometryTransformer::GetMisAlignmentData() const     
+{ return fMisAlignArray; }                    
+
 #endif //ALI_MUON_GEOMETRY_TRANSFORMER_H