X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONGeometryTransformer.h;h=8d85eef0182d84b90f033d8cf00aae1ecfe0fa6c;hb=285aba1798b12994193c39ae0f98a54006220298;hp=9931291e755746a78b414a133a83c76b0aeb6fd6;hpb=317aa7dccaf8309e1043e72f0b86566b12fea032;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONGeometryTransformer.h b/MUON/AliMUONGeometryTransformer.h index 9931291e755..8d85eef0182 100644 --- a/MUON/AliMUONGeometryTransformer.h +++ b/MUON/AliMUONGeometryTransformer.h @@ -7,33 +7,60 @@ /// \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 +/// (this way is used when running simulation and building geometry +/// via VirtualMC) +/// - from Root geometry file (*.root) or ASCII file (*.dat) using +/// the method LoadGeometryData(const TString& fileName) +/// - from geometry loaded in AliGeomManager using +/// the method LoadGeometryData() without arguments +/// +/// \author Ivana Hrivnacova, IPN Orsay #ifndef ALI_MUON_GEOMETRY_TRANSFORMER_H #define ALI_MUON_GEOMETRY_TRANSFORMER_H #include +#include #include -class TObjArray; - class AliMUONGeometryModuleTransformer; +class AliMUONGeometryDetElement; + +class TGeoManager; +class TClonesArray; +class AliMpExMap; +class AliMpArea; class AliMUONGeometryTransformer : public TObject { public: - AliMUONGeometryTransformer(Bool_t isOwner); AliMUONGeometryTransformer(); + AliMUONGeometryTransformer(TRootIOCtor* /*ioCtor*/); virtual ~AliMUONGeometryTransformer(); // methods void AddModuleTransformer(AliMUONGeometryModuleTransformer* transformer); + void AddMisAlignModule(Int_t moduleId, const TGeoHMatrix& matrix, Bool_t bGlobal = kTRUE); + void AddMisAlignDetElement(Int_t detElemId, const TGeoHMatrix& matrix, Bool_t bGlobal = kTRUE); + void CreateModules(); + + void AddAlignableVolumes() const; + TClonesArray* CreateZeroAlignmentData() const; + void ClearMisAlignmentData(); // IO - Bool_t ReadTransformations(const TString& fileName); + // + Bool_t LoadTransformations(); + Bool_t LoadGeometryData(const TString& fileName); + Bool_t LoadGeometryData(); + 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; @@ -47,52 +74,99 @@ class AliMUONGeometryTransformer : public TObject void Local2Global(Int_t detElemId, Double_t xl, Double_t yl, Double_t zl, Double_t& xg, Double_t& yg, Double_t& zg) const; - - // get methods + + // Set methods + void SetDetName(const TString& detName); + void SetOwner(Bool_t isOwner); + + // 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; + AliMpArea* GetDEArea(Int_t detElemId) const; + protected: + /// Not implemented AliMUONGeometryTransformer(const AliMUONGeometryTransformer& right); + /// Not implemented AliMUONGeometryTransformer& operator = (const AliMUONGeometryTransformer& right); private: + // static methods + static const TString& GetDefaultDetectorName(); + // methods + + void CreateDEAreas() const; + + Bool_t LoadMapping() const; 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 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); + TString ReadModuleTransforms(ifstream& in); + TString ReadDetElemTransforms(ifstream& in); + Bool_t ReadTransformations(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 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 - - ClassDef(AliMUONGeometryTransformer,1) // Geometry parametrisation + TString fDetectorName; ///< Detector name + TObjArray* fModuleTransformers; ///< array of module transformers + TClonesArray* fMisAlignArray; ///< array of misalignment data + mutable AliMpExMap* fDEAreas; ///< areas of detection elements in global coordinates + + ClassDef(AliMUONGeometryTransformer,4) // 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; } + +/// Set detector name +inline void AliMUONGeometryTransformer::SetDetName(const TString& detName) +{ fDetectorName = detName; } + +/// Set ownership of array module transformers +inline void AliMUONGeometryTransformer::SetOwner(Bool_t isOwner) +{ fModuleTransformers->SetOwner(isOwner); } + #endif //ALI_MUON_GEOMETRY_TRANSFORMER_H