FairRoot
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
FairGeoTransform.cxx
Go to the documentation of this file.
1 /********************************************************************************
2  * Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *
3  * *
4  * This software is distributed under the terms of the *
5  * GNU Lesser General Public Licence (LGPL) version 3, *
6  * copied verbatim in the file "LICENSE" *
7  ********************************************************************************/
8 //*-- AUTHOR : Ilse Koenig
9 //*-- Modified : 16/06/1999
10 //*-- Modified : 21/06/2005 D.Bertini
11 
13 //
14 // FairGeoTransform
15 //
16 // Class to hold the orientation (rotation matrix) and the position
17 // (translation vector) of a coordinate system (system 2) relative to a
18 // reference coordinate system (system 1)
19 // It provides member functions to transform a vector or a point and an other
20 // coordinate system from its own coordinate system into the reference
21 // coordinate system and vice versa.
22 // Instances of this class can e.g. hold the lab or detector transformation of
23 // a geometry volume (see class FairGeoVolume)
24 //
25 // Inline functions:
26 //
27 // FairGeoTransform()
28 // The default constructor creates an identity transformation
29 // FairGeoTransform(FairGeoTransform& t)
30 // copy constructor
31 // void setTransform(const FairGeoTransform& t)
32 // copies the given transformation
33 // void setRotMatrix(const FairGeoRotation& r)
34 // copies the given rotation matrix
35 // void setRotMatrix(const Double_t* a)
36 // creates a rotation matrix taking an Double_t array with 9 components
37 // void setTransVector(const FairGeoVector& t)
38 // copies the given translation vector
39 // void setTransVector(const Double_t* a)
40 // creates a translation vector taking an Double_t array with 6 components
41 // const FairGeoRotation& getRotMatrix() const
42 // returns the rotation matrix
43 // const FairGeoVector& getTransVector() const
44 // returns the translation vector
45 //
47 
48 #include "FairGeoTransform.h"
49 
50 //#include <iostream>
51 //#include <iomanip>
52 //#include "math.h"
53 
55 
57  : TObject()
58  , rot(FairGeoRotation(0, 0, 0))
59  , trans(FairGeoVector(0, 0, 0))
60  , trans_cm(FairGeoVector(0, 0, 0))
61 {}
62 
64 {
65  rot = t.getRotMatrix();
66  trans = t.getTransVector();
67 
68  return *this;
69 }
70 
72 {
73  // Transforms a vector (point) given in its own coordinate
74  // system (2) into the reference coordinate system (1)
75  // e.g. v2 is a vector (point) in the detector coordinate system;
76  // it can be transformed to a vector v2 the lab system with
77  // FairGeoVector v2=mo.transFrom(v1)
78  // where mo is the coordinate system of the mother
79  return rot * p + trans;
80 }
81 
83 {
84  // Transforms a vector (point) given in the reference system (1)
85  // into the local coordinate system (2)
86  // e.g. v1 is a vector (point) in the lab system; it can be transformed to
87  // a vector v2 the detector coordinate system with
88  // FairGeoVector v2=mo.transTo(v1)
89  // where mo is the coordinate system of the mother
90  return rot.inverse() * (p - trans);
91 }
92 
94 {
95  // Transforms the coordinate system into the coordinate system
96  // described by s. Both transformations must have the same reference
97  // system e.g. the lab system
98  // This function is e.g. used to transform a daughter coordinate system
99  // with a transformation relative to the lab into the detector coordinate
100  // system.
101  const FairGeoRotation& rm = s.getRotMatrix();
102  FairGeoRotation rt(rm.inverse());
103  if (rm.diff2(rot) < 0.000001) {
104  rot.setUnitMatrix();
105  } else {
106  rot.transform(rt);
107  }
108  trans -= s.getTransVector();
109  trans = rt * trans;
110  // trans.round(3); // rounds to 3 digits (precision 1 micrometer)
111 }
112 
114 {
115  // Transforms the coordinate system described by s into the local
116  // coordinate system
117  // This function is e.g. used to transform a daughter coordinate system
118  // with a transformation relative to its mother into the lab system.
119  // e.g. daughterDetTransform.transFrom(motherLabTransform)
120  const FairGeoRotation& r = s.getRotMatrix();
121  rot.transform(r);
122  trans = r * trans;
123  trans += s.getTransVector();
124 }
125 
127 {
128  trans.clear();
129  rot.setUnitMatrix();
130 }
131 
133 {
134  rot.print();
135  trans.print();
136 }
137 
139 {
140  rot.invert();
141  trans = rot * trans;
142  trans *= -1.;
143 }
FairGeoRotation inverse() const
FairGeoRotation & invert()
FairGeoRotation rot
ClassImp(FairEventBuilder)
FairGeoTransform & operator=(const FairGeoTransform &t)
const FairGeoVector & getTransVector() const
FairGeoVector transFrom(const FairGeoVector &p) const
FairGeoRotation & transform(const FairGeoRotation &)
const FairGeoRotation & getRotMatrix() const
FairGeoVector transTo(const FairGeoVector &p) const
FairGeoVector trans
Double_t diff2(const FairGeoRotation &) const
void print() const
void print() const
Definition: FairGeoVector.h:98