FEDRA emulsion software from the OPERA Collaboration
EdbAffine.h
Go to the documentation of this file.
1 #ifndef ROOT_EdbAffine
2 #define ROOT_EdbAffine
3 
5 // //
6 // EdbAffine //
7 // //
8 // Affine transformation algoriths //
9 // //
11 
12 #include "TObject.h"
13 
14 class EdbPointsBox2D;
15 
16 //______________________________________________________________________________
17 class EdbAffine2D : public TObject{
18 
19  // x1 = A11*x + A12*y + B1
20  // y1 = A21*x + A22*y + B2
21 
22  private:
23  Float_t eA11, eA12; //
24  Float_t eA21, eA22; //
25  Float_t eB1, eB2; //
26 
27  public:
28  EdbAffine2D() { Reset(); }
29  EdbAffine2D( const char *str) { Set(str); }
30  EdbAffine2D( float a11, float a12,
31  float a21, float a22,
32  float b1, float b2 ):
33  eA11(a11), eA12(a12), eA21(a21), eA22(a22), eB1(b1), eB2(b2) {}
34  virtual ~EdbAffine2D() {}
35 
36  void Set( EdbAffine2D &a ) {Set(a.A11(),a.A12(),a.A21(),a.A22(),a.B1(),a.B2());}
37  void Set( const char *str=0 );
38  void Set( float a11, float a12,
39  float a21, float a22,
40  float b1, float b2 )
41  { eA11=a11; eA12=a12; eA21=a21; eA22=a22; eB1=b1; eB2=b2; }
42 
43  Float_t A11() const { return eA11; }
44  Float_t A12() const { return eA12; }
45  Float_t A21() const { return eA21; }
46  Float_t A22() const { return eA22; }
47  Float_t B1() const { return eB1; }
48  Float_t B2() const { return eB2; }
49 
50  //EdbAffine2D operator*( const EdbAffine2D& rhs ) const;
51 
52  void Transform( const EdbAffine2D *a );
53  void Transform( const EdbAffine2D &a ) {Transform(&a);}
54 
55  void Reset();
56  void Invert();
57  void SetAxisX( float a, float b ) { eA11 = a; eB1 = b; }
58  void SetAxisY( float a, float b ) { eA22 = a; eB2 = b; }
59 
60  void ZoomX( float k ) { eA11*=k; eA12*=k; }
61  void ZoomY( float k ) { eA21*=k; eA22*=k; }
62  void Zoom ( float k ) { ZoomX(k); ZoomY(k); }
63 
64  void ShiftX(float d) { eB1+=d; }
65  void ShiftY(float d) { eB2+=d; }
66 
67  void Rotate( float angle );
68 
69  Int_t Calculate( EdbPointsBox2D *b1, EdbPointsBox2D *b2 );
70  Int_t Calculate( int n, float *x0, float *y0, float *x1, float *y1, int flag=0);
71  Int_t CalculateFull( int n, float *x0, float *y0, float *x1, float *y1 );
72  Int_t CalculateTurn( int n, float *x0, float *y0, float *x1, float *y1 );
73  Int_t CalculateShift( int n, float *x0, float *y0, float *x1, float *y1 );
74  Double_t Phi(Double_t x, Double_t y) const;
75 
76  const char *AsString() const;
77 
78  Float_t Xtrans( Float_t x, Float_t y) const { return eA11*x + eA12*y + eB1; }
79  Float_t Ytrans( Float_t x, Float_t y) const { return eA21*x + eA22*y + eB2; }
80 
81  void Print(Option_t *opt="") const;
82 
83  ClassDef(EdbAffine2D,2) // 2D affine parameters
84 };
85 
86 //______________________________________________________________________________
87 class EdbAffine3D : public TObject {
88 
89  // x1 = A11*x + A12*y + A13*z + B1
90  // y1 = A21*x + A22*y + A23*z + B2
91  // z1 = A31*x + A32*y + A33*z + B3
92 
93  private:
94  Float_t eA11, eA12, eA13; //
95  Float_t eA21, eA22, eA23; //
96  Float_t eA31, eA32, eA33; //
97  Float_t eB1, eB2, eB3; //
98 
99  public:
101  virtual ~EdbAffine3D() {}
102 
103  void Set( float a11, float a12, float a13,
104  float a21, float a22, float a23,
105  float a31, float a32, float a33,
106  float b1, float b2, float b3 )
107  { eA11=a11; eA12=a12; eA13=a13;
108  eA21=a21; eA22=a22; eA23=a23;
109  eA31=a31; eA32=a32; eA33=a33;
110  eB1=b1; eB2=b2; eB3=b3; }
111 
112  void Reset();
113 
114  Float_t A11() const { return eA11; }
115  Float_t A12() const { return eA12; }
116  Float_t A13() const { return eA13; }
117  Float_t A21() const { return eA21; }
118  Float_t A22() const { return eA22; }
119  Float_t A23() const { return eA23; }
120  Float_t A31() const { return eA31; }
121  Float_t A32() const { return eA32; }
122  Float_t A33() const { return eA33; }
123  Float_t B1() const { return eB1; }
124  Float_t B2() const { return eB2; }
125  Float_t B3() const { return eB3; }
126 
127  void SetAxisX( float a, float b ) { eA11 = a; eB1 = b; }
128  void SetAxisY( float a, float b ) { eA22 = a; eB2 = b; }
129  void SetAxisZ( float a, float b ) { eA33 = a; eB3 = b; }
130 
131  void SetSlantXZ( float s ) { eA13=s; }
132  void SetSlantYZ( float s ) { eA23=s; }
133 
134  void ZoomX( float k ) { eA11*=k; eA12*=k; eA31*=k; }
135  void ZoomY( float k ) { eA21*=k; eA22*=k; eA23*=k; }
136  void ZoomZ( float k ) { eA31*=k; eA32*=k; eA33*=k; }
137  void Zoom ( float k ) { ZoomX(k); ZoomY(k); ZoomZ(k); }
138 
139  virtual void ShiftX(float d) { eB1+=d; }
140  virtual void ShiftY(float d) { eB2+=d; }
141  virtual void ShiftZ(float d) { eB3+=d; }
142 
143  void Print(Option_t *opt="") const;
144 
145  ClassDef(EdbAffine3D,2) // 3D affine parameters
146 };
147 
148 #endif /* ROOT_EdbAffine */
void d()
Definition: RecDispEX.C:381
void a()
Definition: check_aligned.C:59
Definition: EdbAffine.h:17
Float_t eA11
Definition: EdbAffine.h:23
Float_t B2() const
Definition: EdbAffine.h:48
void Transform(const EdbAffine2D &a)
Definition: EdbAffine.h:53
Int_t CalculateTurn(int n, float *x0, float *y0, float *x1, float *y1)
Definition: EdbAffine.cxx:449
void Invert()
Definition: EdbAffine.cxx:103
Float_t eB2
Definition: EdbAffine.h:25
Float_t Xtrans(Float_t x, Float_t y) const
Definition: EdbAffine.h:78
Float_t A22() const
Definition: EdbAffine.h:46
void SetAxisX(float a, float b)
Definition: EdbAffine.h:57
void Print(Option_t *opt="") const
Definition: EdbAffine.cxx:52
void ShiftX(float d)
Definition: EdbAffine.h:64
Int_t CalculateFull(int n, float *x0, float *y0, float *x1, float *y1)
Definition: EdbAffine.cxx:164
Float_t Ytrans(Float_t x, Float_t y) const
Definition: EdbAffine.h:79
void ShiftY(float d)
Definition: EdbAffine.h:65
EdbAffine2D(const char *str)
Definition: EdbAffine.h:29
Double_t Phi(Double_t x, Double_t y) const
Definition: EdbAffine.cxx:376
Int_t Calculate(EdbPointsBox2D *b1, EdbPointsBox2D *b2)
Definition: EdbAffine.cxx:260
virtual ~EdbAffine2D()
Definition: EdbAffine.h:34
Float_t A21() const
Definition: EdbAffine.h:45
const char * AsString() const
Definition: EdbAffine.cxx:57
Float_t A12() const
Definition: EdbAffine.h:44
void ZoomX(float k)
Definition: EdbAffine.h:60
void Reset()
Definition: EdbAffine.cxx:72
Float_t eA21
Definition: EdbAffine.h:24
void ZoomY(float k)
Definition: EdbAffine.h:61
EdbAffine2D(float a11, float a12, float a21, float a22, float b1, float b2)
Definition: EdbAffine.h:30
Float_t eB1
Definition: EdbAffine.h:25
void Set(float a11, float a12, float a21, float a22, float b1, float b2)
Definition: EdbAffine.h:38
Float_t eA12
Definition: EdbAffine.h:23
void Rotate(float angle)
Definition: EdbAffine.cxx:383
Float_t B1() const
Definition: EdbAffine.h:47
void Transform(const EdbAffine2D *a)
Definition: EdbAffine.cxx:93
void SetAxisY(float a, float b)
Definition: EdbAffine.h:58
Float_t eA22
Definition: EdbAffine.h:24
EdbAffine2D()
Definition: EdbAffine.h:28
Int_t CalculateShift(int n, float *x0, float *y0, float *x1, float *y1)
Definition: EdbAffine.cxx:135
void Zoom(float k)
Definition: EdbAffine.h:62
void Set(EdbAffine2D &a)
Definition: EdbAffine.h:36
Float_t A11() const
Definition: EdbAffine.h:43
Definition: EdbAffine.h:87
virtual void ShiftZ(float d)
Definition: EdbAffine.h:141
void SetAxisZ(float a, float b)
Definition: EdbAffine.h:129
Float_t eA22
Definition: EdbAffine.h:95
virtual ~EdbAffine3D()
Definition: EdbAffine.h:101
void Set(float a11, float a12, float a13, float a21, float a22, float a23, float a31, float a32, float a33, float b1, float b2, float b3)
Definition: EdbAffine.h:103
Float_t A22() const
Definition: EdbAffine.h:118
Float_t B3() const
Definition: EdbAffine.h:125
Float_t A32() const
Definition: EdbAffine.h:121
virtual void ShiftY(float d)
Definition: EdbAffine.h:140
Float_t eA32
Definition: EdbAffine.h:96
void ZoomZ(float k)
Definition: EdbAffine.h:136
Float_t B2() const
Definition: EdbAffine.h:124
void SetSlantXZ(float s)
Definition: EdbAffine.h:131
Float_t eB2
Definition: EdbAffine.h:97
Float_t A12() const
Definition: EdbAffine.h:115
void Zoom(float k)
Definition: EdbAffine.h:137
Float_t A23() const
Definition: EdbAffine.h:119
void SetSlantYZ(float s)
Definition: EdbAffine.h:132
Float_t eA13
Definition: EdbAffine.h:94
void ZoomX(float k)
Definition: EdbAffine.h:134
Float_t A31() const
Definition: EdbAffine.h:120
Float_t A33() const
Definition: EdbAffine.h:122
Float_t eB1
Definition: EdbAffine.h:97
Float_t eA12
Definition: EdbAffine.h:94
Float_t eA21
Definition: EdbAffine.h:95
Float_t eA31
Definition: EdbAffine.h:96
Float_t A11() const
Definition: EdbAffine.h:114
Float_t B1() const
Definition: EdbAffine.h:123
void Reset()
Definition: EdbAffine.cxx:437
Float_t eA11
Definition: EdbAffine.h:94
Float_t eB3
Definition: EdbAffine.h:97
void Print(Option_t *opt="") const
Definition: EdbAffine.cxx:427
Float_t eA23
Definition: EdbAffine.h:95
void SetAxisX(float a, float b)
Definition: EdbAffine.h:127
Float_t A21() const
Definition: EdbAffine.h:117
EdbAffine3D()
Definition: EdbAffine.h:100
virtual void ShiftX(float d)
Definition: EdbAffine.h:139
void SetAxisY(float a, float b)
Definition: EdbAffine.h:128
void ZoomY(float k)
Definition: EdbAffine.h:135
Float_t A13() const
Definition: EdbAffine.h:116
Float_t eA33
Definition: EdbAffine.h:96
Definition: EdbVirtual.h:142
const char * opt
Definition: mc2raw.cxx:42
EdbSegP * s
Definition: tlg2pattern.C:32