]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONGeometryMisAligner.h
- Disentangle masks effect from trigger chamber efficiency estimation.
[u/mrichter/AliRoot.git] / MUON / AliMUONGeometryMisAligner.h
index e22b6e3788f07607a88d2cd136654a8549eef70a..3a81849c2abaeb3337fef9565d905c0f512593b1 100644 (file)
@@ -6,8 +6,8 @@
 /// \ingroup geometry
 /// \class AliMUONGeometryMisAligner
 /// \brief Class for misalignment of geometry transformations
-///
-/// Authors: Bruce Becker, Javier Castillo
+//
+//  Authors: Bruce Becker, Javier Castillo
 
 
 #ifndef ALI_MUON_GEOMETRY_MIS_ALIGNER_H
@@ -17,8 +17,8 @@
 
 class AliMUONGeometryTransformer;
 
-class TRandom;
 class TGeoCombiTrans;
+class TClonesArray;
 
 class AliMUONGeometryMisAligner:public TObject
 {
@@ -36,55 +36,73 @@ class AliMUONGeometryMisAligner:public TObject
   AliMUONGeometryTransformer* MisAlign(const AliMUONGeometryTransformer* transformer, 
                                        Bool_t verbose = kFALSE);
   
-  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 different along x, y
+  void SetCartMisAlig(Double_t xmean, Double_t xwidth, Double_t ymean, Double_t ywidth, Double_t zmean = 0., Double_t zwidth = 0.)
+    {fDetElemMisAlig[0][0] = xmean; fDetElemMisAlig[0][1] = xwidth; fDetElemMisAlig[1][0] = ymean; fDetElemMisAlig[1][1] = ywidth; fDetElemMisAlig[2][0] = zmean; fDetElemMisAlig[2][1] = zwidth; }
 
+  /// 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;}
+    {fDetElemMisAlig[0][0] = mean; fDetElemMisAlig[0][1] = width; fDetElemMisAlig[1][0] = mean; fDetElemMisAlig[1][1] = width;}
   
-  void SetAngMisAlig(Double_t mean, Double_t width)
-    {fAngMisAligM = mean; fAngMisAligW = width;}
+  /// Set angular displacement
+  void SetAngMisAlig(Double_t zmean, Double_t zwidth, Double_t xmean = 0., Double_t xwidth = 0., Double_t ymean = 0., Double_t ywidth = 0.)
+    {fDetElemMisAlig[3][0] = xmean; fDetElemMisAlig[3][1] = xwidth; fDetElemMisAlig[4][0] = ymean; fDetElemMisAlig[4][1] = ywidth; fDetElemMisAlig[5][0] = zmean; fDetElemMisAlig[5][1] = zwidth;}
   
-  void SetMaxCartMisAlig(Double_t width) // Kept for backward compatibility
-    {fCartXMisAligM = 0.0; fCartXMisAligW = width; fCartYMisAligM = 0.0; fCartYMisAligW = width;}
+  /// Set cartesian displacement (Kept for backward compatibility)
+  void SetMaxCartMisAlig(Double_t width) 
+    {fDetElemMisAlig[0][0] = 0.0; fDetElemMisAlig[0][1] = width; fDetElemMisAlig[1][0] = 0.0; fDetElemMisAlig[1][1] = width;}
   
-  void SetMaxAngMisAlig(Double_t width) // Kept for backward compatibility
-    {fAngMisAligM = 0.0; fAngMisAligW = width;}
+  /// Set angular displacement (Kept for backward compatibility)
+  void SetMaxAngMisAlig(Double_t width) 
+    {fDetElemMisAlig[5][0] = 0.0; fDetElemMisAlig[5][1] = 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;}
+
+  /// Set module (half chambers) cartesian displacement parameters
+  void SetModuleCartMisAlig(Double_t xmean, Double_t xwidth, Double_t ymean, Double_t ywidth, Double_t zmean, Double_t zwidth) 
+    {fModuleMisAlig[0][0] = xmean; fModuleMisAlig[0][1] = xwidth; fModuleMisAlig[1][0] = ymean; fModuleMisAlig[1][1] = ywidth; fModuleMisAlig[2][0] = zmean; fModuleMisAlig[2][1] = zwidth;}
+
+  /// Set module (half chambers) cartesian displacement parameters
+  void SetModuleAngMisAlig(Double_t xmean, Double_t xwidth, Double_t ymean, Double_t ywidth, Double_t zmean, Double_t zwidth) 
+    {fModuleMisAlig[3][0] = xmean; fModuleMisAlig[3][1] = xwidth; fModuleMisAlig[4][0] = ymean; fModuleMisAlig[4][1] = ywidth; fModuleMisAlig[5][0] = zmean; fModuleMisAlig[5][1] = zwidth;}
+
+  /// Set alignment resolution to misalign objects to be stored in CDB
+  void SetAlignmentResolution(const TClonesArray* misAlignArray, Int_t chId=-1, Double_t chResX=-1., Double_t chResY=-1., Double_t deResX=-1., Double_t deResY=-1.);
   
  protected:
+  /// Not implemented
   AliMUONGeometryMisAligner(const AliMUONGeometryMisAligner & right);
+  /// Not implemented
   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;
-
-  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
+  TGeoCombiTrans MisAlignDetElem(const TGeoCombiTrans& transform) const;
+  TGeoCombiTrans MisAlignModule(const TGeoCombiTrans& transform) const;
+  void GetUniMisAlign(Double_t cartMisAlig[3], Double_t angMisAlig[3], const Double_t lParMisAlig[6][2]) const;
+  void GetGausMisAlign(Double_t cartMisAlig[3], Double_t angMisAlig[3], const Double_t lParMisAlig[6][2]) const;
+
+  Bool_t fUseUni;            ///< use uniform distribution for misaligmnets
+  Bool_t fUseGaus;           ///< use gaussian distribution for misaligmnets
+  Double_t fDetElemMisAlig[6][2]; ///< Mean and width of the displacements of the detection elements along x,y,z (translations) and about x,y,z (rotations)
+  Double_t fModuleMisAlig[6][2];  ///< Mean and width of the displacements of the modules along x,y,z (translations) and about x,y,z (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
+
   
-  ClassDef(AliMUONGeometryMisAligner,3)        // Geometry parametrisation
+  ClassDef(AliMUONGeometryMisAligner,4)        // Geometry parametrisation
 };
 
 #endif //ALI_MUON_GEOMETRY_MIS_ALIGNER_H