LCOV - code coverage report
Current view: top level - MUON/MUONgeometry - AliMUONGeometryTransformer.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 2 5 40.0 %
Date: 2016-06-14 17:26:59 Functions: 3 9 33.3 %

          Line data    Source code
       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 AliMUONGeometryTransformer
       8             : /// \brief Top container class for geometry transformations
       9             : ///
      10             : /// Geometry transformations can be filled in these ways:
      11             : /// - by geometry builder when geometry is built via builders
      12             : ///   (this way is used when running simulation and building geometry
      13             : ///    via VirtualMC)
      14             : /// - from Root geometry file (*.root) or ASCII file (*.dat) using
      15             : ///   the method LoadGeometryData(const TString& fileName)
      16             : /// - from geometry loaded in AliGeomManager using
      17             : ///   the method LoadGeometryData() without arguments
      18             : /// 
      19             : /// \author Ivana Hrivnacova, IPN Orsay
      20             : 
      21             : #ifndef ALI_MUON_GEOMETRY_TRANSFORMER_H
      22             : #define ALI_MUON_GEOMETRY_TRANSFORMER_H
      23             : 
      24             : #include <TObject.h>
      25             : #include <TObjArray.h>
      26             : #include <TGeoMatrix.h>
      27             : 
      28             : class AliMUONGeometryModuleTransformer;
      29             : class AliMUONGeometryDetElement;
      30             : 
      31             : class TGeoManager;
      32             : class TClonesArray;
      33             : class AliMpExMap;
      34             : class AliMpArea;
      35             : 
      36             : using std::ifstream;
      37             : using std::ofstream;
      38             : 
      39             : class AliMUONGeometryTransformer : public TObject
      40             : {
      41             :   public:
      42             :     AliMUONGeometryTransformer();
      43             :     AliMUONGeometryTransformer(TRootIOCtor* /*ioCtor*/);
      44             :     virtual  ~AliMUONGeometryTransformer();
      45             :     
      46             :     // methods
      47             :     void  AddModuleTransformer(AliMUONGeometryModuleTransformer* transformer);
      48             :     void  AddMisAlignModule(Int_t moduleId, const TGeoHMatrix& matrix, Bool_t bGlobal = kTRUE);
      49             :     void  AddMisAlignDetElement(Int_t detElemId, const TGeoHMatrix& matrix, Bool_t bGlobal = kTRUE);
      50             :     void  CreateModules();
      51             : 
      52             :     void  AddAlignableVolumes() const; 
      53             :     TClonesArray* CreateZeroAlignmentData() const;
      54             :     void  ClearMisAlignmentData();      
      55             : 
      56             :     // IO
      57             :     //
      58             :     Bool_t  LoadTransformations(); 
      59             :     Bool_t  LoadGeometryData(const TString& fileName);
      60             :     Bool_t  LoadGeometryData();
      61             : 
      62             :     Bool_t  WriteTransformations(const TString& fileName) const;
      63             :     Bool_t  WriteMisAlignmentData(const TString& fileName) const;
      64             : 
      65             :     // Transformation methods 
      66             :     //
      67             :     void Global2Local(Int_t detElemId,
      68             :                  Float_t xg, Float_t yg, Float_t zg, 
      69             :                  Float_t& xl, Float_t& yl, Float_t& zl) const;
      70             :     void Global2Local(Int_t detElemId,
      71             :                  Double_t xg, Double_t yg, Double_t zg, 
      72             :                  Double_t& xl, Double_t& yl, Double_t& zl) const;
      73             : 
      74             :     void Local2Global(Int_t detElemId,
      75             :                  Float_t xl, Float_t yl, Float_t zl, 
      76             :                  Float_t& xg, Float_t& yg, Float_t& zg) const;
      77             :     void Local2Global(Int_t detElemId,
      78             :                  Double_t xl, Double_t yl, Double_t zl, 
      79             :                  Double_t& xg, Double_t& yg, Double_t& zg) const;
      80             :                  
      81             :     // Set methods
      82             :     void SetDetName(const TString& detName);                 
      83             :     void SetOwner(Bool_t isOwner);                 
      84             : 
      85             :     // Get methods
      86             :     //
      87             :     Int_t GetNofModuleTransformers() const;
      88             :     const AliMUONGeometryModuleTransformer* GetModuleTransformer(
      89             :                                Int_t index, Bool_t warn = true) const;
      90             : 
      91             :     const AliMUONGeometryModuleTransformer* GetModuleTransformerByDEId(
      92             :                                Int_t detElemId, Bool_t warn = true) const;
      93             : 
      94             :     const AliMUONGeometryDetElement* GetDetElement(
      95             :                                Int_t detElemId, Bool_t warn = true) const;
      96             : 
      97             :     const TClonesArray* GetMisAlignmentData() const;
      98             :     
      99             :     Bool_t  HasDE(Int_t detElemId) const;
     100             : 
     101             :     AliMpArea* GetDEArea(Int_t detElemId) const;
     102             :     
     103             :   protected:
     104             :     /// Not implemented
     105             :     AliMUONGeometryTransformer(const AliMUONGeometryTransformer& right);
     106             :     /// Not implemented
     107             :     AliMUONGeometryTransformer&  operator = (const AliMUONGeometryTransformer& right);
     108             :  
     109             :   private:
     110             :     // static methods
     111             :     static const TString&  GetDefaultDetectorName(); 
     112             : 
     113             :     // methods
     114             :       
     115             :     void CreateDEAreas() const;
     116             :     
     117             :     Bool_t LoadMapping() const;
     118             :     AliMUONGeometryModuleTransformer* GetModuleTransformerNonConst(
     119             :                                     Int_t index, Bool_t warn = true) const;
     120             : 
     121             :     TGeoHMatrix GetTransform(
     122             :                   Double_t x, Double_t y, Double_t z,
     123             :                   Double_t a1, Double_t a2, Double_t a3, 
     124             :                   Double_t a4, Double_t a5, Double_t a6) const;
     125             : 
     126             :     void FillModuleTransform(Int_t moduleId,
     127             :                   Double_t x, Double_t y, Double_t z,
     128             :                   Double_t a1, Double_t a2, Double_t a3, 
     129             :                   Double_t a4, Double_t a5, Double_t a6); 
     130             :     void FillDetElemTransform(Int_t id, 
     131             :                   Double_t x, Double_t y, Double_t z,
     132             :                   Double_t a1, Double_t a2, Double_t a3, 
     133             :                   Double_t a4, Double_t a5, Double_t a6);
     134             : 
     135             :     TString ReadModuleTransforms(ifstream& in);
     136             :     TString ReadDetElemTransforms(ifstream& in);
     137             :     Bool_t  ReadTransformations(const TString& fileName);
     138             : 
     139             :     void    WriteTransform(ofstream& out, const TGeoMatrix* transform) const;
     140             :     void    WriteModuleTransforms(ofstream& out) const;
     141             :     void    WriteDetElemTransforms(ofstream& out) const;
     142             :     
     143             :     TString GetModuleSymName(Int_t moduleId) const;
     144             :     TString GetDESymName(Int_t detElemId) const;
     145             : 
     146             :     // data members
     147             :     TString        fDetectorName;       ///< Detector name
     148             :     TObjArray*     fModuleTransformers; ///< array of module transformers
     149             :     TClonesArray*  fMisAlignArray;      ///< array of misalignment data
     150             :     mutable AliMpExMap*    fDEAreas; ///< areas of detection elements in global coordinates
     151             :     
     152          70 :   ClassDef(AliMUONGeometryTransformer,4)  // Geometry parametrisation
     153             : };
     154             : 
     155             : // inline methods
     156             : 
     157             : /// Return the number of contained module transformers
     158             : inline Int_t AliMUONGeometryTransformer::GetNofModuleTransformers() const
     159           0 : { return fModuleTransformers->GetEntriesFast(); }
     160             : 
     161             : /// Return the array of misalignment data
     162             : inline const TClonesArray* AliMUONGeometryTransformer::GetMisAlignmentData() const      
     163           0 : { return fMisAlignArray; }                     
     164             :                                
     165             : /// Set detector name
     166             : inline void AliMUONGeometryTransformer::SetDetName(const TString& detName)
     167           0 : {  fDetectorName = detName; }               
     168             : 
     169             : /// Set ownership of array module transformers
     170             : inline void AliMUONGeometryTransformer::SetOwner(Bool_t isOwner)
     171           1 : {  fModuleTransformers->SetOwner(isOwner); }               
     172             : 
     173             : #endif //ALI_MUON_GEOMETRY_TRANSFORMER_H
     174             : 
     175             : 
     176             : 
     177             : 
     178             : 
     179             : 
     180             : 

Generated by: LCOV version 1.11