]>
Commit | Line | Data |
---|---|---|
21dd83fc | 1 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * |
2 | * See cxx source for full Copyright notice */ | |
3 | ||
4 | // $Id$ | |
5 | ||
6 | /// \ingroup geometry | |
7 | /// \class AliMUONGeometryMisAligner | |
8 | /// \brief Class for misalignment of geometry transformations | |
a9aad96e | 9 | // |
10 | // Authors: Bruce Becker, Javier Castillo | |
21dd83fc | 11 | |
12 | ||
13 | #ifndef ALI_MUON_GEOMETRY_MIS_ALIGNER_H | |
14 | #define ALI_MUON_GEOMETRY_MIS_ALIGNER_H | |
15 | ||
16 | #include <TObject.h> | |
21dd83fc | 17 | |
18 | class AliMUONGeometryTransformer; | |
19 | ||
328e160e | 20 | class TGeoCombiTrans; |
4818a9b7 | 21 | class TClonesArray; |
ef79ed3a | 22 | |
21dd83fc | 23 | class AliMUONGeometryMisAligner:public TObject |
24 | { | |
25 | public: | |
328e160e | 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); | |
21dd83fc | 29 | AliMUONGeometryMisAligner(); |
30 | virtual ~AliMUONGeometryMisAligner(); | |
31 | ||
32 | //_________________________________________________________________ | |
33 | // methods | |
34 | ||
35 | // return a misaligned geometry obtained from the existing one. | |
ef79ed3a | 36 | AliMUONGeometryTransformer* MisAlign(const AliMUONGeometryTransformer* transformer, |
37 | Bool_t verbose = kFALSE); | |
21dd83fc | 38 | |
a9aad96e | 39 | /// Set cartesian displacement parameters different along x, y |
4600314b | 40 | void SetCartMisAlig(Double_t xmean, Double_t xwidth, Double_t ymean, Double_t ywidth, Double_t zmean = 0., Double_t zwidth = 0.) |
41 | {fDetElemMisAlig[0][0] = xmean; fDetElemMisAlig[0][1] = xwidth; fDetElemMisAlig[1][0] = ymean; fDetElemMisAlig[1][1] = ywidth; fDetElemMisAlig[2][0] = zmean; fDetElemMisAlig[2][1] = zwidth; } | |
328e160e | 42 | |
a9aad96e | 43 | /// Set cartesian displacement parameters, the same along x, y |
328e160e | 44 | void SetCartMisAlig(Double_t mean, Double_t width) |
4600314b | 45 | {fDetElemMisAlig[0][0] = mean; fDetElemMisAlig[0][1] = width; fDetElemMisAlig[1][0] = mean; fDetElemMisAlig[1][1] = width;} |
21dd83fc | 46 | |
a9aad96e | 47 | /// Set angular displacement |
4600314b | 48 | void SetAngMisAlig(Double_t zmean, Double_t zwidth, Double_t xmean = 0., Double_t xwidth = 0., Double_t ymean = 0., Double_t ywidth = 0.) |
49 | {fDetElemMisAlig[3][0] = xmean; fDetElemMisAlig[3][1] = xwidth; fDetElemMisAlig[4][0] = ymean; fDetElemMisAlig[4][1] = ywidth; fDetElemMisAlig[5][0] = zmean; fDetElemMisAlig[5][1] = zwidth;} | |
21dd83fc | 50 | |
a9aad96e | 51 | /// Set cartesian displacement (Kept for backward compatibility) |
52 | void SetMaxCartMisAlig(Double_t width) | |
4600314b | 53 | {fDetElemMisAlig[0][0] = 0.0; fDetElemMisAlig[0][1] = width; fDetElemMisAlig[1][0] = 0.0; fDetElemMisAlig[1][1] = width;} |
21dd83fc | 54 | |
a9aad96e | 55 | /// Set angular displacement (Kept for backward compatibility) |
56 | void SetMaxAngMisAlig(Double_t width) | |
4600314b | 57 | {fDetElemMisAlig[5][0] = 0.0; fDetElemMisAlig[5][1] = width;} |
328e160e | 58 | |
59 | void SetXYAngMisAligFactor(Double_t factor); | |
60 | ||
61 | void SetZCartMisAligFactor(Double_t factor); | |
62 | ||
a9aad96e | 63 | /// Set option for gaussian distribution |
328e160e | 64 | void SetUseGaus(Bool_t usegaus) |
65 | {fUseGaus=usegaus; fUseUni=!usegaus;} | |
66 | ||
a9aad96e | 67 | /// Set option for uniform distribution |
328e160e | 68 | void SetUseUni(Bool_t useuni) |
69 | {fUseGaus=!useuni; fUseUni=useuni;} | |
4600314b | 70 | |
71 | /// Set module (half chambers) cartesian displacement parameters | |
72 | void SetModuleCartMisAlig(Double_t xmean, Double_t xwidth, Double_t ymean, Double_t ywidth, Double_t zmean, Double_t zwidth) | |
73 | {fModuleMisAlig[0][0] = xmean; fModuleMisAlig[0][1] = xwidth; fModuleMisAlig[1][0] = ymean; fModuleMisAlig[1][1] = ywidth; fModuleMisAlig[2][0] = zmean; fModuleMisAlig[2][1] = zwidth;} | |
74 | ||
75 | /// Set module (half chambers) cartesian displacement parameters | |
76 | void SetModuleAngMisAlig(Double_t xmean, Double_t xwidth, Double_t ymean, Double_t ywidth, Double_t zmean, Double_t zwidth) | |
77 | {fModuleMisAlig[3][0] = xmean; fModuleMisAlig[3][1] = xwidth; fModuleMisAlig[4][0] = ymean; fModuleMisAlig[4][1] = ywidth; fModuleMisAlig[5][0] = zmean; fModuleMisAlig[5][1] = zwidth;} | |
4818a9b7 | 78 | |
79 | /// Set alignment resolution to misalign objects to be stored in CDB | |
80 | 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.); | |
21dd83fc | 81 | |
82 | protected: | |
71a2d3aa | 83 | /// Not implemented |
21dd83fc | 84 | AliMUONGeometryMisAligner(const AliMUONGeometryMisAligner & right); |
71a2d3aa | 85 | /// Not implemented |
21dd83fc | 86 | AliMUONGeometryMisAligner & operator =(const AliMUONGeometryMisAligner &right); |
87 | ||
328e160e | 88 | |
21dd83fc | 89 | private: |
ef79ed3a | 90 | // return a misaligned transformation |
4600314b | 91 | TGeoCombiTrans MisAlignDetElem(const TGeoCombiTrans& transform) const; |
92 | TGeoCombiTrans MisAlignModule(const TGeoCombiTrans& transform) const; | |
93 | void GetUniMisAlign(Double_t cartMisAlig[3], Double_t angMisAlig[3], const Double_t lParMisAlig[6][2]) const; | |
94 | void GetGausMisAlign(Double_t cartMisAlig[3], Double_t angMisAlig[3], const Double_t lParMisAlig[6][2]) const; | |
ef79ed3a | 95 | |
829425a5 | 96 | Bool_t fUseUni; ///< use uniform distribution for misaligmnets |
97 | Bool_t fUseGaus; ///< use gaussian distribution for misaligmnets | |
4600314b | 98 | 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) |
99 | 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) | |
100 | ||
101 | Double_t fXYAngMisAligFactor; ///< factor (<1) to apply to angular misalignment range since range of motion is restricted out of the xy plane | |
829425a5 | 102 | Double_t fZCartMisAligFactor; ///< factor (<1) to apply to cartetian misalignment range since range of motion is restricted in z direction |
fdc9da07 | 103 | |
21dd83fc | 104 | |
fdc9da07 | 105 | ClassDef(AliMUONGeometryMisAligner,4) // Geometry parametrisation |
21dd83fc | 106 | }; |
107 | ||
108 | #endif //ALI_MUON_GEOMETRY_MIS_ALIGNER_H | |
109 | ||
110 | ||
111 | ||
112 |