]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MUON/AliMUONSurveyObj.h
In AliMUONPedestal:
[u/mrichter/AliRoot.git] / MUON / AliMUONSurveyObj.h
CommitLineData
ba8b0266 1#ifndef ALIMUONSURVEYOBJ_H
2#define ALIMUONSURVEYOBJ_H
3/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
5
6/// \ingroup geometry
7/// \class AliMUONSurveyObj
8/// \brief Base class for survey of muon spectrometer
9//
10// Author: Javier Castillo
11
12#include <TObject.h>
13
14class TObjArray;
15class TGeoCombiTrans;
16class TVector3;
17class TH2;
18class TF2;
19class TFitter;
20class TArrayD;
21
22class AliSurveyPoint;
23
24class AliMUONSurveyObj:public TObject
25{
26
27 public:
28 AliMUONSurveyObj();
29 virtual ~AliMUONSurveyObj();
30
31 virtual Int_t AddStickerTargets(TObjArray *pArray, TString stBaseName, Int_t lTargetMax = 9);
32 virtual Int_t AddGButtonTargets(TObjArray *pArray, TString btBaseName, Int_t lTargetMax = 9);
33 virtual Int_t AddLButtonTargets(TObjArray *pArray, TString btBaseName, Int_t lTargetMax = 9);
34
625f657d 35 /// To be implemented in a concrete Chamber or DetElem class
ba8b0266 36 virtual Int_t AddStickerTargets(TString stBaseName, Int_t lTargetMax = 9) = 0;
625f657d 37 /// To be implemented in a concrete Chamber or DetElem class
ba8b0266 38 virtual Int_t AddGButtonTargets(TString btBaseName, Int_t lTargetMax = 9) = 0;
39
40 void AddStickerTarget(AliSurveyPoint *stPoint);
41 void AddGButtonTarget(AliSurveyPoint *btPoint);
42 void AddLButtonTarget(AliSurveyPoint *btPoint);
43 void AddLButtonTarget(TVector3 *btVector);
44
45 Int_t GetNStickerTargets();
46 AliSurveyPoint *GetStickerTarget(Int_t stIndex);
47 Int_t GetNGButtonTargets();
48 AliSurveyPoint *GetGButtonTarget(Int_t btIndex);
49 Int_t GetNLButtonTargets();
50 AliSurveyPoint *GetLButtonTarget(Int_t btIndex);
51 /// Set transformation of geoemtrical element
52 void SetBaseTransformation(TGeoCombiTrans *baseTrf, Bool_t ownerBaseTrf = kFALSE) {
53 fBaseTrf = baseTrf;
54 fOwnerBaseTrf=ownerBaseTrf;
55 }
56 /// Set local transformation of geometrical element
57 virtual void SetLocalTransformation(TGeoCombiTrans *localTrf, Bool_t ownerLocalTrf = kFALSE) {
58 fLocalTrf=localTrf;
59 fOwnerLocalTrf=ownerLocalTrf;
60 }
61
625f657d 62 /// Returns the local transformation
f7d36813 63 TGeoCombiTrans* GetLocalTrf() const {return fLocalTrf;}
625f657d 64 /// Returns the base (global) transformation
f7d36813 65 TGeoCombiTrans* GetBaseTrf() const {return fBaseTrf;}
625f657d 66 /// Returns the alignment transformation
f7d36813 67 TGeoCombiTrans* GetAlignTrf()const {return fAlignTrf;}
68
625f657d 69 /// Define wether to work in mm (survey units) or cm (alice units)
f7d36813 70 void SetUseCM(Bool_t bUseCM = kTRUE) {fUseCM = bUseCM;}
625f657d 71 /// Indicates if working in mm (survey units) or cm (alice units)
f7d36813 72 Bool_t GetUseCM() const {return fUseCM;}
ba8b0266 73
74 void SetPlane(TString pName, Double_t xMin=-2000., Double_t xMax=+2000., Double_t yMin=-2000., Double_t yMax=2000.);
75 void SetPlaneParameters(Double_t p0, Double_t p1, Double_t p2);
76
77 void DrawSTargets();
78 Double_t FitPlane();
79
625f657d 80 /// Returns the plane (TF2) representing the object
f7d36813 81 TF2* GetPlane() const {return fPlane;}
ba8b0266 82
625f657d 83 /// Returns the TFitter used for the best local to global transformation determination
f7d36813 84 TFitter* GetFitter() const {return fFitter;}
ba8b0266 85
86 Int_t SurveyToAlign(TGeoCombiTrans &quadTransf, Double_t *parErr, Double_t psi=0., Double_t tht=0., Double_t epsi=0., Double_t etht=0.);
87 Int_t SurveyToAlign(Double_t psi=0., Double_t tht=0., Double_t epsi=0., Double_t etht=0.);
88 Double_t SurveyChi2(Double_t *par);
89
f7d36813 90 Double_t EvalFunction(const TF2 *lFunction, Int_t iP1, Int_t iP2, const Char_t *lCoord);
ba8b0266 91
92 void CalculateTranslation(TF2 *xFunc, TF2 *yFunc, TF2 *zFunc, Int_t iP1, Int_t iP2, Double_t *lCenTemp);
93 // TGeoCombiTrans *CalculateTransformation(TF2 *xFunc, TF2 *yFunc, TF2 *zFunc, TF2 *pFunc, Int_t iP1, Int_t iP2);
94
95 Double_t CalculateGlobalDiff(TGeoCombiTrans &lTransf, Int_t nPoints, TArrayD &lDiff);
96
97 Int_t CalculateBestTransf(Int_t iP1, Int_t iP2, Double_t *lXYZ, Double_t *lPTP);
98
99 void CalculateMeanTransf(Double_t *lXYZ, Double_t *lPTP);
625f657d 100
101 /// Set xMin for functions fitting
ba8b0266 102 void SetXMin(Double_t xMin) {fXMin = xMin;}
625f657d 103 /// Set xMax for functions fitting
ba8b0266 104 void SetXMax(Double_t xMax) {fXMax = xMax;}
625f657d 105 /// Set yMin for functions fitting
ba8b0266 106 void SetYMin(Double_t yMin) {fYMin = yMin;}
625f657d 107 /// Set yMax for functions fitting
ba8b0266 108 void SetYMax(Double_t yMax) {fYMax = yMax;}
625f657d 109 /// Set zMin for functions fitting
ba8b0266 110 void SetZMin(Double_t zMin) {fZMin = zMin;}
625f657d 111 /// Set zMax for functions fitting
ba8b0266 112 void SetZMax(Double_t zMax) {fZMax = zMax;}
113
114 virtual void PrintLocalTrf();
115 virtual void PrintAlignTrf();
116
117 void FillSTHistograms(TString baseNameC, TH2 *hSTc, TString baseNameA="", TH2 *hSTa = 0);
118
119 Double_t GetAlignResX();
120 Double_t GetAlignResY();
121
f7d36813 122 AliSurveyPoint* ConvertPointUnits(AliSurveyPoint *stPoint, Float_t lFactor = 0.1);
123
ba8b0266 124 private:
125 /// Not implemented
126 AliMUONSurveyObj(const AliMUONSurveyObj& right);
127 /// Not implemented
128 AliMUONSurveyObj& operator = (const AliMUONSurveyObj& right);
129
f7d36813 130 Double_t EqPlane(const Double_t *x, const Double_t *par) const {
625f657d 131 /// Plane equation
ba8b0266 132 return (-par[1]*x[0] +par[0]*x[1] -par[2]); // then psi=ATan(par[0]) and tht=ATan(par[0])
133 // return (-par[0]*x[0] -par[1]*x[1] -par[2]);
134 }
135
136 TObjArray *fSTargets; ///< Array of AliSurveyPoint of Sticker Targets
137 TObjArray *fGBTargets; ///< Array of AliSurveyPoint of Button Targets
138 TObjArray *fLBTargets; ///< Array of TVector3 or AliSurveyPoint of local position of Button Targets
139 TGeoCombiTrans *fLocalTrf; ///< Local transformation
140 TGeoCombiTrans *fAlignTrf; ///< Local alignment transformation
141 TGeoCombiTrans *fBaseTrf; ///< Base Transformation
142
143 Bool_t fOwnerLocalTrf; ///< Flag for owner of fLocalTrf
144 Bool_t fOwnerAlignTrf; ///< Flag for owner of fAlignTrf
145 Bool_t fOwnerBaseTrf; ///< Flag for owner of fBaseTrf
146
f7d36813 147 Bool_t fUseCM; ///< Use centimeters, survey units are mm but aliroot uses cm
148
ba8b0266 149 TF2 *fPlane; ///< TF2 for plane fitting
150
151 TFitter *fFitter; ///< Fitter for best local to global transformation
152
625f657d 153 Double_t fXMin; ///< xMin for functions fitting
154 Double_t fXMax; ///< xMax for functions fitting
155 Double_t fYMin; ///< yMin for functions fitting
156 Double_t fYMax; ///< yMax for functions fitting
157 Double_t fZMin; ///< zMin for functions fitting
158 Double_t fZMax; ///< zMax for functions fitting
ba8b0266 159
160
161ClassDef(AliMUONSurveyObj, 0) //Class for alignment of muon spectrometer
162};
163
164#endif