]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONGeometryMisAligner.h
New classes for shuttle (Laurent)
[u/mrichter/AliRoot.git] / MUON / AliMUONGeometryMisAligner.h
index 9ba2e077751a179662367243b29f76226bb7b1b0..c862880a701e7a905d92dc0fe900ad6ef18a664b 100644 (file)
@@ -6,24 +6,26 @@
 /// \ingroup geometry
 /// \class AliMUONGeometryMisAligner
 /// \brief Class for misalignment of geometry transformations
-///
-/// Author: Bruce Becker
+//
+//  Authors: Bruce Becker, Javier Castillo
 
 
 #ifndef ALI_MUON_GEOMETRY_MIS_ALIGNER_H
 #define ALI_MUON_GEOMETRY_MIS_ALIGNER_H
 
 #include <TObject.h>
-#include <TGeoMatrix.h>
 
 class AliMUONGeometryTransformer;
 
 class TRandom;
+class TGeoCombiTrans;
 
 class AliMUONGeometryMisAligner:public TObject
 {
  public:
-  AliMUONGeometryMisAligner(Double_t cartMisAlig, Double_t angMisAlig);
+  AliMUONGeometryMisAligner(Double_t cartXMisAligM, Double_t cartXMisAligW, Double_t cartYMisAligM, Double_t cartYMisAligW, Double_t angMisAligM, Double_t angMisAligW);
+  AliMUONGeometryMisAligner(Double_t cartMisAligM, Double_t cartMisAligW, Double_t angMisAligM, Double_t angMisAligW);
+  AliMUONGeometryMisAligner(Double_t cartMisAligW, Double_t angMisAligW);
   AliMUONGeometryMisAligner();
   virtual ~AliMUONGeometryMisAligner();
   
@@ -34,29 +36,62 @@ class AliMUONGeometryMisAligner:public TObject
   AliMUONGeometryTransformer* MisAlign(const AliMUONGeometryTransformer* transformer, 
                                        Bool_t verbose = kFALSE);
   
-  void SetMaxCartMisAlig(Double_t offset)
-    {fMaxCartMisAlig = offset ;}
+  /// Set cartesian displacement parameters different along x, y
+  void SetCartMisAlig(Double_t xmean, Double_t xwidth, Double_t ymean, Double_t ywidth)
+    {fCartXMisAligM = xmean; fCartXMisAligW = xwidth; fCartYMisAligM = ymean; fCartYMisAligW = ywidth;}
+
+  /// Set cartesian displacement parameters, the same along x, y
+  void SetCartMisAlig(Double_t mean, Double_t width)
+    {fCartXMisAligM = mean; fCartXMisAligW = width; fCartYMisAligM = mean; fCartYMisAligW = width;}
   
-  void SetMaxAngMisAlig(Double_t offset)
-    {fMaxAngMisAlig = offset;}
+  /// Set angular displacement
+  void SetAngMisAlig(Double_t mean, Double_t width)
+    {fAngMisAligM = mean; fAngMisAligW = width;}
   
-  void SetXYAngMisAligFactor(Double_t factor);
+  /// Set cartesian displacement (Kept for backward compatibility)
+  void SetMaxCartMisAlig(Double_t width) 
+    {fCartXMisAligM = 0.0; fCartXMisAligW = width; fCartYMisAligM = 0.0; fCartYMisAligW = width;}
   
+  /// Set angular displacement (Kept for backward compatibility)
+  void SetMaxAngMisAlig(Double_t width) 
+    {fAngMisAligM = 0.0; fAngMisAligW = width;}
+
+  void SetXYAngMisAligFactor(Double_t factor);
+
+  void SetZCartMisAligFactor(Double_t factor);
+
+  /// Set option for gaussian distribution 
+  void SetUseGaus(Bool_t usegaus)
+    {fUseGaus=usegaus; fUseUni=!usegaus;}
+
+  /// Set option for uniform distribution 
+  void SetUseUni(Bool_t useuni)
+    {fUseGaus=!useuni; fUseUni=useuni;}
   
  protected:
   AliMUONGeometryMisAligner(const AliMUONGeometryMisAligner & right);
   AliMUONGeometryMisAligner & operator =(const AliMUONGeometryMisAligner &right);
   
+  
  private:
   // return a misaligned transformation
   TGeoCombiTrans MisAlign(const TGeoCombiTrans& transform) const;
+  void GetUniMisAlign(Double_t cartMisAlig[3], Double_t angMisAlig[3]) const;
+  void GetGausMisAlign(Double_t cartMisAlig[3], Double_t angMisAlig[3]) const;
 
-  Double_t fMaxCartMisAlig;   // cartesian displacement range, set by SetMaxCartMisAlig (translations)
-  Double_t fMaxAngMisAlig;    // Angular displacement range (rotations)
-  Double_t fXYAngMisAligFactor; // factor (<1) to apply to angular misalignment range since range of motion is restricted out of the xy plane
-  TRandom *fDisplacementGenerator;  // random number generator for the displacements
+  Bool_t fUseUni;            ///< use uniform distribution for misaligmnets
+  Bool_t fUseGaus;           ///< use gaussian distribution for misaligmnets
+  Double_t fCartXMisAligM;   ///< cartesian displacement mean along x,  (translations)
+  Double_t fCartXMisAligW;   ///< cartesian displacement width along x,  (translations)
+  Double_t fCartYMisAligM;   ///< cartesian displacement mean along y,  (translations)
+  Double_t fCartYMisAligW;   ///< cartesian displacement width along y,  (translations)
+  Double_t fAngMisAligM;     ///< Angular displacement mean (rotations)
+  Double_t fAngMisAligW;     ///< Angular displacement range (rotations)
+  Double_t fXYAngMisAligFactor; ///< factor (<1) to apply to angular misalignment range since range of motion is restricted out of the xy plane
+  Double_t fZCartMisAligFactor; ///< factor (<1) to apply to cartetian misalignment range since range of motion is restricted in z direction
+  TRandom *fDisplacementGenerator;  ///< random number generator for the displacements
   
-  ClassDef(AliMUONGeometryMisAligner,2)        // Geometry parametrisation
+  ClassDef(AliMUONGeometryMisAligner,3)        // Geometry parametrisation
 };
 
 #endif //ALI_MUON_GEOMETRY_MIS_ALIGNER_H