]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MUON/AliMUONSurveyObj.h
Adding the array of the recosntruction parameters (Marian)
[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
35 virtual Int_t AddStickerTargets(TString stBaseName, Int_t lTargetMax = 9) = 0;
36 virtual Int_t AddGButtonTargets(TString btBaseName, Int_t lTargetMax = 9) = 0;
37
38 void AddStickerTarget(AliSurveyPoint *stPoint);
39 void AddGButtonTarget(AliSurveyPoint *btPoint);
40 void AddLButtonTarget(AliSurveyPoint *btPoint);
41 void AddLButtonTarget(TVector3 *btVector);
42
43 Int_t GetNStickerTargets();
44 AliSurveyPoint *GetStickerTarget(Int_t stIndex);
45 Int_t GetNGButtonTargets();
46 AliSurveyPoint *GetGButtonTarget(Int_t btIndex);
47 Int_t GetNLButtonTargets();
48 AliSurveyPoint *GetLButtonTarget(Int_t btIndex);
49 /// Set transformation of geoemtrical element
50 void SetBaseTransformation(TGeoCombiTrans *baseTrf, Bool_t ownerBaseTrf = kFALSE) {
51 fBaseTrf = baseTrf;
52 fOwnerBaseTrf=ownerBaseTrf;
53 }
54 /// Set local transformation of geometrical element
55 virtual void SetLocalTransformation(TGeoCombiTrans *localTrf, Bool_t ownerLocalTrf = kFALSE) {
56 fLocalTrf=localTrf;
57 fOwnerLocalTrf=ownerLocalTrf;
58 }
59
60 TGeoCombiTrans* GetLocalTrf(){return fLocalTrf;}
61 TGeoCombiTrans* GetBaseTrf(){return fBaseTrf;}
62 TGeoCombiTrans* GetAlignTrf(){return fAlignTrf;}
63
64 void SetPlane(TString pName, Double_t xMin=-2000., Double_t xMax=+2000., Double_t yMin=-2000., Double_t yMax=2000.);
65 void SetPlaneParameters(Double_t p0, Double_t p1, Double_t p2);
66
67 void DrawSTargets();
68 Double_t FitPlane();
69
70 TF2* GetPlane() {return fPlane;}
71
72 TFitter* GetFitter() {return fFitter;}
73
74 Int_t SurveyToAlign(TGeoCombiTrans &quadTransf, Double_t *parErr, Double_t psi=0., Double_t tht=0., Double_t epsi=0., Double_t etht=0.);
75 Int_t SurveyToAlign(Double_t psi=0., Double_t tht=0., Double_t epsi=0., Double_t etht=0.);
76 Double_t SurveyChi2(Double_t *par);
77
a6e0ebfe 78 Double_t EvalFunction(TF2 *lFunction, Int_t iP1, Int_t iP2, const Char_t *lCoord);
ba8b0266 79
80 void CalculateTranslation(TF2 *xFunc, TF2 *yFunc, TF2 *zFunc, Int_t iP1, Int_t iP2, Double_t *lCenTemp);
81 // TGeoCombiTrans *CalculateTransformation(TF2 *xFunc, TF2 *yFunc, TF2 *zFunc, TF2 *pFunc, Int_t iP1, Int_t iP2);
82
83 Double_t CalculateGlobalDiff(TGeoCombiTrans &lTransf, Int_t nPoints, TArrayD &lDiff);
84
85 Int_t CalculateBestTransf(Int_t iP1, Int_t iP2, Double_t *lXYZ, Double_t *lPTP);
86
87 void CalculateMeanTransf(Double_t *lXYZ, Double_t *lPTP);
88
89 void SetXMin(Double_t xMin) {fXMin = xMin;}
90 void SetXMax(Double_t xMax) {fXMax = xMax;}
91 void SetYMin(Double_t yMin) {fYMin = yMin;}
92 void SetYMax(Double_t yMax) {fYMax = yMax;}
93 void SetZMin(Double_t zMin) {fZMin = zMin;}
94 void SetZMax(Double_t zMax) {fZMax = zMax;}
95
96 virtual void PrintLocalTrf();
97 virtual void PrintAlignTrf();
98
99 void FillSTHistograms(TString baseNameC, TH2 *hSTc, TString baseNameA="", TH2 *hSTa = 0);
100
101 Double_t GetAlignResX();
102 Double_t GetAlignResY();
103
104 private:
105 /// Not implemented
106 AliMUONSurveyObj(const AliMUONSurveyObj& right);
107 /// Not implemented
108 AliMUONSurveyObj& operator = (const AliMUONSurveyObj& right);
109
110 Double_t eqPlane(Double_t *x, Double_t *par){
111 return (-par[1]*x[0] +par[0]*x[1] -par[2]); // then psi=ATan(par[0]) and tht=ATan(par[0])
112 // return (-par[0]*x[0] -par[1]*x[1] -par[2]);
113 }
114
115 TObjArray *fSTargets; ///< Array of AliSurveyPoint of Sticker Targets
116 TObjArray *fGBTargets; ///< Array of AliSurveyPoint of Button Targets
117 TObjArray *fLBTargets; ///< Array of TVector3 or AliSurveyPoint of local position of Button Targets
118 TGeoCombiTrans *fLocalTrf; ///< Local transformation
119 TGeoCombiTrans *fAlignTrf; ///< Local alignment transformation
120 TGeoCombiTrans *fBaseTrf; ///< Base Transformation
121
122 Bool_t fOwnerLocalTrf; ///< Flag for owner of fLocalTrf
123 Bool_t fOwnerAlignTrf; ///< Flag for owner of fAlignTrf
124 Bool_t fOwnerBaseTrf; ///< Flag for owner of fBaseTrf
125
126 TF2 *fPlane; ///< TF2 for plane fitting
127
128 TFitter *fFitter; ///< Fitter for best local to global transformation
129
130 Double_t fXMin;
131 Double_t fXMax;
132 Double_t fYMin;
133 Double_t fYMax;
134 Double_t fZMin;
135 Double_t fZMax;
136
137
138ClassDef(AliMUONSurveyObj, 0) //Class for alignment of muon spectrometer
139};
140
141#endif