1 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
2 * See cxx source for full Copyright notice */
7 /// \class AliMUONGeometryMisAligner
8 /// \brief Class for misalignment of geometry transformations
10 // Authors: Bruce Becker, Javier Castillo
13 #ifndef ALI_MUON_GEOMETRY_MIS_ALIGNER_H
14 #define ALI_MUON_GEOMETRY_MIS_ALIGNER_H
18 class AliMUONGeometryTransformer;
23 class AliMUONGeometryMisAligner:public TObject
26 AliMUONGeometryMisAligner(Double_t cartXMisAligM, Double_t cartXMisAligW, Double_t cartYMisAligM, Double_t cartYMisAligW, Double_t angMisAligM, Double_t angMisAligW);
27 AliMUONGeometryMisAligner(Double_t cartMisAligM, Double_t cartMisAligW, Double_t angMisAligM, Double_t angMisAligW);
28 AliMUONGeometryMisAligner(Double_t cartMisAligW, Double_t angMisAligW);
29 AliMUONGeometryMisAligner();
30 virtual ~AliMUONGeometryMisAligner();
32 //_________________________________________________________________
35 // return a misaligned geometry obtained from the existing one.
36 AliMUONGeometryTransformer* MisAlign(const AliMUONGeometryTransformer* transformer,
37 Bool_t verbose = kFALSE);
39 /// Set cartesian displacement parameters different along x, y
40 void SetCartMisAlig(Double_t xmean, Double_t xwidth, Double_t ymean, Double_t ywidth)
41 {fCartXMisAligM = xmean; fCartXMisAligW = xwidth; fCartYMisAligM = ymean; fCartYMisAligW = ywidth;}
43 /// Set cartesian displacement parameters, the same along x, y
44 void SetCartMisAlig(Double_t mean, Double_t width)
45 {fCartXMisAligM = mean; fCartXMisAligW = width; fCartYMisAligM = mean; fCartYMisAligW = width;}
47 /// Set angular displacement
48 void SetAngMisAlig(Double_t mean, Double_t width)
49 {fAngMisAligM = mean; fAngMisAligW = width;}
51 /// Set cartesian displacement (Kept for backward compatibility)
52 void SetMaxCartMisAlig(Double_t width)
53 {fCartXMisAligM = 0.0; fCartXMisAligW = width; fCartYMisAligM = 0.0; fCartYMisAligW = width;}
55 /// Set angular displacement (Kept for backward compatibility)
56 void SetMaxAngMisAlig(Double_t width)
57 {fAngMisAligM = 0.0; fAngMisAligW = width;}
59 void SetXYAngMisAligFactor(Double_t factor);
61 void SetZCartMisAligFactor(Double_t factor);
63 /// Set option for gaussian distribution
64 void SetUseGaus(Bool_t usegaus)
65 {fUseGaus=usegaus; fUseUni=!usegaus;}
67 /// Set option for uniform distribution
68 void SetUseUni(Bool_t useuni)
69 {fUseGaus=!useuni; fUseUni=useuni;}
72 AliMUONGeometryMisAligner(const AliMUONGeometryMisAligner & right);
73 AliMUONGeometryMisAligner & operator =(const AliMUONGeometryMisAligner &right);
77 // return a misaligned transformation
78 TGeoCombiTrans MisAlign(const TGeoCombiTrans& transform) const;
79 void GetUniMisAlign(Double_t cartMisAlig[3], Double_t angMisAlig[3]) const;
80 void GetGausMisAlign(Double_t cartMisAlig[3], Double_t angMisAlig[3]) const;
82 Bool_t fUseUni; ///< use uniform distribution for misaligmnets
83 Bool_t fUseGaus; ///< use gaussian distribution for misaligmnets
84 Double_t fCartXMisAligM; ///< cartesian displacement mean along x, (translations)
85 Double_t fCartXMisAligW; ///< cartesian displacement width along x, (translations)
86 Double_t fCartYMisAligM; ///< cartesian displacement mean along y, (translations)
87 Double_t fCartYMisAligW; ///< cartesian displacement width along y, (translations)
88 Double_t fAngMisAligM; ///< Angular displacement mean (rotations)
89 Double_t fAngMisAligW; ///< Angular displacement range (rotations)
90 Double_t fXYAngMisAligFactor; ///< factor (<1) to apply to angular misalignment range since range of motion is restricted out of the xy plane
91 Double_t fZCartMisAligFactor; ///< factor (<1) to apply to cartetian misalignment range since range of motion is restricted in z direction
92 TRandom *fDisplacementGenerator; ///< random number generator for the displacements
94 ClassDef(AliMUONGeometryMisAligner,3) // Geometry parametrisation
97 #endif //ALI_MUON_GEOMETRY_MIS_ALIGNER_H