]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONVGeometryBuilder.h
Addes script to compare Naiive, Poisson to Hits, Primaries
[u/mrichter/AliRoot.git] / MUON / AliMUONVGeometryBuilder.h
index 081114a3ce7c6b1e941f548c23ab38e478827912..0a9de7fbe96f51b666d65806a7813c170802d606 100644 (file)
@@ -1,41 +1,55 @@
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
 // $Id$
-//
-// Class AliMUONVGeometryBuilder
-// -----------------------------
-// Abstract base class for geometry construction per chamber(s).
-//
-// Author: Ivana Hrivnacova, IPN Orsay
+// Revision of includes 07/05/2004
+
+/// \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 AliMUONGeometryStore;
+class AliMUONGeometrySVMap;
 
 class AliMUONVGeometryBuilder : public TObject
 {
   public:
-    AliMUONVGeometryBuilder(AliMUONChamber* ch1,
-                            AliMUONChamber* ch2 = 0,
-                            AliMUONChamber* ch3 = 0,
-                            AliMUONChamber* ch4 = 0,
-                            AliMUONChamber* ch5 = 0,
-                            AliMUONChamber* ch6 = 0);
-    AliMUONVGeometryBuilder(const AliMUONVGeometryBuilder& rhs);
+    AliMUONVGeometryBuilder(const TString& fileName,
+                            AliMUONGeometryModule* mg1,
+                            AliMUONGeometryModule* mg2 = 0,
+                            AliMUONGeometryModule* mg3 = 0,
+                            AliMUONGeometryModule* mg4 = 0,
+                            AliMUONGeometryModule* mg5 = 0,
+                            AliMUONGeometryModule* mg6 = 0);
     AliMUONVGeometryBuilder();
     virtual ~AliMUONVGeometryBuilder();
-
-    // operators  
-    AliMUONVGeometryBuilder& operator = (const AliMUONVGeometryBuilder& rhs);
   
     // methods
+            void  SetReferenceFrame(const TGeoCombiTrans& referenceFrame);
+    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;
+
     virtual void CreateMaterials() {}  // make = 0; ?
                   // Function to be overriden in a concrete chamber/station
                  // geometry builder class.
@@ -60,17 +74,93 @@ class AliMUONVGeometryBuilder : public TObject
                  // geometry class.
                  // The sensitive volumes Ids for each chamber
                  // should be defined and set to its geometry class. 
-                  
+    virtual bool ApplyGlobalTransformation() { return true; }
+                  // Function to be overriden (and return false) 
+                 // in the concrete geometry builder classes 
+                 // which are already defined in the new ALICE
+                 // coordinate frame
+
+    // 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:
+    AliMUONVGeometryBuilder(const AliMUONVGeometryBuilder& rhs);
+
+    // operators  
+    AliMUONVGeometryBuilder& operator = (const AliMUONVGeometryBuilder& rhs);
+
     // methods
-    AliMUONChamber* GetChamber(Int_t chamberId) const;
+    AliMUONGeometryModule*         GetGeometry(Int_t moduleId) const;
+    AliMUONGeometryEnvelopeStore*  GetEnvelopes(Int_t moduleId) const;
+    AliMUONGeometryStore*          GetDetElements(Int_t moduleId) const;
+    AliMUONGeometrySVMap*          GetSVMap(Int_t moduleId) const;
     
   private:
-    // data members
-    TObjArray*  fChambers; // the chambers which geometry will be built
-                           // by this builder
+    //methods
+    TString  ComposePath(const TString& volName, Int_t copyNo) const; 
+    void     MapSV(const TString&path, const TString& volName, 
+                  Int_t detElemId) 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, Int_t nofDetElements, 
+                  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
     
-  ClassDef(AliMUONVGeometryBuilder,1) // MUON chamber geometry base class
+    // data members
+    TString     fTransformFileName; // the name file with transformations 
+    TString     fSVMapFileName;     // the name file with sensitive volume map 
+    TObjArray*  fModuleGeometries;  // the modules geometries that will be built
+                                    // by this builder                             
+    TGeoCombiTrans fReferenceFrame; // the transformation from the builder 
+                                    // reference frame to that of the transform 
+                                   // data files
+                                       
+  ClassDef(AliMUONVGeometryBuilder,4) // MUON chamber geometry base class
 };
 
+// inline functions
+
+inline Int_t  AliMUONVGeometryBuilder::NofGeometries() const
+{ return fModuleGeometries->GetEntriesFast(); }
+
+inline AliMUONGeometryModule* AliMUONVGeometryBuilder::Geometry(Int_t i) const
+{ return (AliMUONGeometryModule*)fModuleGeometries->At(i); }
+
+inline void 
+AliMUONVGeometryBuilder::SetReferenceFrame(const TGeoCombiTrans& referenceFrame)
+{ fReferenceFrame = referenceFrame; 
+  //fReferenceFrame = new TGeoCombiTrans(referenceFrame);
+}
+
 #endif //ALI_MUON_V_GEOMETRY_BUILDER_H