|
ROOT
Reference Guide |
|
Go to the documentation of this file.
298 return (
char*)
name.Data();
318 for (
Int_t i=0; i<3; i++) {
319 memcpy(hmatrix, mat,
kN3);
328 for (
Int_t i=0; i<3; i++) {
342 memcpy(master, local,
kN3);
348 for (i=0; i<3; i++) master[i] = tr[i] + local[i];
352 for (i=0; i<3; i++) {
355 + local[1]*rot[3*i+1]
356 + local[2]*rot[3*i+2];
366 memcpy(master, local,
kN3);
370 for (
Int_t i=0; i<3; i++) {
371 master[i] = local[0]*rot[3*i]
372 + local[1]*rot[3*i+1]
373 + local[2]*rot[3*i+2];
383 memcpy(master, local,
kN3);
391 for (i=0; i<3; i++) master[i] = bombtr[i] + local[i];
395 for (i=0; i<3; i++) {
396 master[i] = bombtr[i]
398 + local[1]*rot[3*i+1]
399 + local[2]*rot[3*i+2];
409 memcpy(local, master,
kN3);
423 local[0] = mt0*rot[0] + mt1*rot[3] + mt2*rot[6];
424 local[1] = mt0*rot[1] + mt1*rot[4] + mt2*rot[7];
425 local[2] = mt0*rot[2] + mt1*rot[5] + mt2*rot[8];
434 memcpy(local, master,
kN3);
438 for (
Int_t i=0; i<3; i++) {
439 local[i] = master[0]*rot[i]
441 + master[2]*rot[i+6];
451 memcpy(local, master,
kN3);
459 for (i=0; i<3; i++) local[i] = master[i]-bombtr[i];
463 for (i=0; i<3; i++) {
464 local[i] = (master[0]-bombtr[0])*rot[i]
465 + (master[1]-bombtr[1])*rot[i+3]
466 + (master[2]-bombtr[2])*rot[i+6];
475 Double_t normfactor = vect[0]*vect[0] + vect[1]*vect[1] + vect[2]*vect[2];
476 if (normfactor <= 1
E-10)
return;
478 vect[0] *= normfactor;
479 vect[1] *= normfactor;
480 vect[2] *= normfactor;
493 printf(
"%10.6f%12.6f%12.6f Tx = %10.6f\n", rot[0], rot[1], rot[2], tr[0]);
494 printf(
"%10.6f%12.6f%12.6f Ty = %10.6f\n", rot[3], rot[4], rot[5], tr[1]);
495 printf(
"%10.6f%12.6f%12.6f Tz = %10.6f\n", rot[6], rot[7], rot[8], tr[2]);
498 printf(
"Sx=%10.6fSy=%12.6fSz=%12.6f\n", scl[0], scl[1], scl[2]);
529 Warning(
"RegisterYourself",
"cannot register without geometry");
629 if (&matrix ==
this)
return *
this;
671 if (&other ==
this)
return kTRUE;
674 for (
auto i=0; i<3; i++)
690 h.SetTranslation(tr);
700 for (
Int_t i=0; i<3; i++)
718 Warning(
"RotateX",
"Not implemented. Use TGeoCombiTrans instead");
726 Warning(
"RotateY",
"Not implemented. Use TGeoCombiTrans instead");
734 Warning(
"RotateZ",
"Not implemented. Use TGeoCombiTrans instead");
743 for (
Int_t i=0; i<3; i++)
775 for (
Int_t i=0; i<3; i++)
776 master[i] = tr[i] + local[i];
784 memcpy(master, local,
kN3);
795 for (
Int_t i=0; i<3; i++)
796 master[i] = bombtr[i] + local[i];
805 for (
Int_t i=0; i<3; i++)
806 local[i] = master[i]-tr[i];
814 memcpy(local, master,
kN3);
825 for (
Int_t i=0; i<3; i++)
826 local[i] = master[i]-bombtr[i];
835 out <<
" // Translation: " <<
GetName() << std::endl;
839 out <<
" TGeoTranslation *" <<
GetPointerName() <<
" = new TGeoTranslation(\"" <<
GetName() <<
"\",dx,dy,dz);" << std::endl;
856 for (
Int_t i=0; i<9; i++) {
888 for (
Int_t i=0; i<9; i++) {
918 SetAngles(theta1, phi1, theta2, phi2, theta3, phi3);
926 if (&other ==
this)
return *
this;
965 if (&other ==
this)
return kTRUE;
968 for (
auto i=0; i<9; i++)
990 h.SetRotation(newrot);
1001 for (
Int_t i=0; i<2; i++) {
1002 for (
Int_t j=i+1; j<3; j++) {
1055 for (
Int_t i=0; i<3; i++) {
1056 master[i] = local[0]*rot[3*i]
1057 + local[1]*rot[3*i+1]
1058 + local[2]*rot[3*i+2];
1068 for (
Int_t i=0; i<3; i++) {
1069 local[i] = master[0]*rot[i]
1070 + master[1]*rot[i+3]
1071 + master[2]*rot[i+6];
1213 out <<
" // Rotation: " <<
GetName() << std::endl;
1216 out <<
" thx = " <<
th1 <<
"; phx = " << ph1 <<
";" << std::endl;
1217 out <<
" thy = " <<
th2 <<
"; phy = " << ph2 <<
";" << std::endl;
1218 out <<
" thz = " <<
th3 <<
"; phz = " << ph3 <<
";" << std::endl;
1219 out <<
" TGeoRotation *" <<
GetPointerName() <<
" = new TGeoRotation(\"" <<
GetName() <<
"\",thx,phx,thy,phy,thz,phz);" << std::endl;
1258 if (!
IsValid())
Error(
"SetAngles",
"invalid rotation (Euler angles : phi=%f theta=%f psi=%f)",phi,theta,psi);
1279 for (
Int_t i=0; i<9; i++) {
1284 if (!
IsValid())
Error(
"SetAngles",
"invalid rotation (G3 angles, th1=%f phi1=%f, th2=%f ph2=%f, th3=%f phi3=%f)",
1285 theta1,phi1,theta2,phi2,theta3,phi3);
1301 if (phi1<0) phi1+=360.;
1304 if (phi2<0) phi2+=360.;
1307 if (phi3<0) phi3+=360.;
1365 Error(
"GetInverse",
"no place to store the inverse matrix");
1368 for (
Int_t i=0; i<3; i++) {
1369 for (
Int_t j=0; j<3; j++) {
1382 const Double_t *matleft, *matright;
1392 for (
Int_t i=0; i<3; i++) {
1393 for (
Int_t j=0; j<3; j++) {
1394 for (
Int_t k=0; k<3; k++) {
1395 newmat[3*i+j] += matleft[3*i+k] * matright[3*k+j];
1472 if (&matrix ==
this)
return *
this;
1515 if (&other ==
this)
return kTRUE;
1518 for (
auto i=0; i<3; i++)
1544 Error(
"SetScale",
"Invalid scale %f, %f, %f for transformation %s",sx,sy,sx,
GetName());
1569 master[0] = local[0]*
fScale[0];
1570 master[1] = local[1]*
fScale[1];
1571 master[2] = local[2]*
fScale[2];
1609 local[0] = master[0]/
fScale[0];
1610 local[1] = master[1]/
fScale[1];
1611 local[2] = master[2]/
fScale[2];
1732 if (&matrix ==
this)
return *
this;
1768 if (&other ==
this)
return kTRUE;
1771 for (
auto i=0; i<3; i++)
if (
TMath::Abs(tr[i]-otr[i])>1.E-10)
return kFALSE;
1774 for (
auto i=0; i<9; i++)
if (
TMath::Abs(rot[i]-orot[i])>1.E-10)
return kFALSE;
1837 h.SetTranslation(tr);
1847 h.SetRotation(newrot);
1902 v[3] =
c*rot[3]-
s*rot[6];
1903 v[4] =
c*rot[4]-
s*rot[7];
1904 v[5] =
c*rot[5]-
s*rot[8];
1905 v[6] =
s*rot[3]+
c*rot[6];
1906 v[7] =
s*rot[4]+
c*rot[7];
1907 v[8] =
s*rot[5]+
c*rot[8];
1933 v[0] =
c*rot[0]+
s*rot[6];
1934 v[1] =
c*rot[1]+
s*rot[7];
1935 v[2] =
c*rot[2]+
s*rot[8];
1939 v[6] = -
s*rot[0]+
c*rot[6];
1940 v[7] = -
s*rot[1]+
c*rot[7];
1941 v[8] = -
s*rot[2]+
c*rot[8];
1967 v[0] =
c*rot[0]-
s*rot[3];
1968 v[1] =
c*rot[1]-
s*rot[4];
1969 v[2] =
c*rot[2]-
s*rot[5];
1970 v[3] =
s*rot[0]+
c*rot[3];
1971 v[4] =
s*rot[1]+
c*rot[4];
1972 v[5] =
s*rot[2]+
c*rot[5];
2039 out <<
" // Combi transformation: " <<
GetName() << std::endl;
2040 out <<
" dx = " <<
fTranslation[0] <<
";" << std::endl;
2041 out <<
" dy = " <<
fTranslation[1] <<
";" << std::endl;
2042 out <<
" dz = " <<
fTranslation[2] <<
";" << std::endl;
2049 out <<
" " <<
GetPointerName() <<
"->SetTranslation(dx,dy,dz);" << std::endl;
2220 if (sx<1.E-5 || sy<1.E-5 || sz<1.E-5) {
2221 Error(
"ctor",
"Invalid scale");
2244 if (normfactor <= 1
E-5)
return kFALSE;
2245 for (
Int_t i=0; i<3; i++)
2357 if (&matrix ==
this)
return *
this;
2393 if (&other ==
this)
return kTRUE;
2396 for (
auto i=0; i<3; i++)
if (
TMath::Abs(tr[i]-otr[i])>1.E-10)
return kFALSE;
2399 for (
auto i=0; i<9; i++)
if (
TMath::Abs(rot[i]-orot[i])>1.E-10)
return kFALSE;
2402 for (
auto i=0; i<3; i++)
if (
TMath::Abs(scl[i]-oscl[i])>1.E-10)
return kFALSE;
2466 h.SetTranslation(tr);
2479 h.SetRotation(newrot);
2544 for (i=0; i<3; i++) {
2552 for (i=0; i<3; i++) {
2553 for (j=0; j<3; j++) {
2563 for (i=0; i<3; i++)
fScale[i] *= r_scl[i];
2606 for (i=0; i<3; i++) {
2607 new_tra[i] = l_tra[i]
2616 for (i=0; i<3; i++) {
2617 for (j=0; j<3; j++) {
2627 for (i=0; i<3; i++)
fScale[i] *= l_scl[i];
2777 out <<
" // HMatrix: " <<
GetName() << std::endl;
2778 out <<
" tr[0] = " << tr[0] <<
"; " <<
"tr[1] = " << tr[1] <<
"; " <<
"tr[2] = " << tr[2] <<
";" << std::endl;
2779 out <<
" rot[0] =" << rot[0] <<
"; " <<
"rot[1] = " << rot[1] <<
"; " <<
"rot[2] = " << rot[2] <<
";" << std::endl;
2780 out <<
" rot[3] =" << rot[3] <<
"; " <<
"rot[4] = " << rot[4] <<
"; " <<
"rot[5] = " << rot[5] <<
";" << std::endl;
2781 out <<
" rot[6] =" << rot[6] <<
"; " <<
"rot[7] = " << rot[7] <<
"; " <<
"rot[8] = " << rot[8] <<
";" << std::endl;
2783 out <<
" TGeoHMatrix *" <<
name <<
" = new TGeoHMatrix(\"" <<
GetName() <<
"\");" << std::endl;
2784 out <<
" " <<
name <<
"->SetTranslation(tr);" << std::endl;
2785 out <<
" " <<
name <<
"->SetRotation(rot);" << std::endl;
2786 if (
IsTranslation()) out <<
" " <<
name <<
"->SetBit(TGeoMatrix::kGeoTranslation);" << std::endl;
2787 if (
IsRotation()) out <<
" " <<
name <<
"->SetBit(TGeoMatrix::kGeoRotation);" << std::endl;
2788 if (
IsReflection()) out <<
" " <<
name <<
"->SetBit(TGeoMatrix::kGeoReflection);" << std::endl;
TGeoScale operator*(const TGeoScale &other) const
virtual void ReflectX(Bool_t leftside, Bool_t rotonly=kFALSE)
Multiply by a reflection respect to YZ.
virtual void MasterToLocalVect(const Double_t *master, Double_t *local) const
convert a point by multiplying its column vector (x, y, z, 1) to matrix
TGeoRotation & operator*=(const TGeoRotation &other)
Composition.
void Multiply(const TGeoMatrix *right)
multiply to the right with an other transformation if right is identity matrix, just return
virtual void ReflectZ(Bool_t leftside, Bool_t rotonly=kFALSE)
Multiply by a reflection respect to XY.
TGeoScale()
default constructor
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
virtual void ReflectZ(Bool_t leftside, Bool_t rotonly=kFALSE)
Multiply by a reflection respect to XY.
void UnbombTranslation(const Double_t *tr, Double_t *bombtr)
Get the new 'unbombed' translation vector according current exploded view mode.
TGeoHMatrix Inverse() const
Return a temporary inverse of this.
Double_t ATan2(Double_t y, Double_t x)
Bool_t operator==(const TGeoScale &other) const
Is-equal operator.
virtual void MasterToLocalBomb(const Double_t *master, Double_t *local) const
convert a point by multiplying its column vector (x, y, z, 1) to matrix
constexpr Double_t RadToDeg()
Conversion from radian to degree:
virtual void SetName(const char *name)
Set the name of the TNamed.
Class describing rotation + translation.
virtual ~TGeoMatrix()
Destructor.
Double_t fRotationMatrix[9]
virtual void RotateZ(Double_t angle)
Rotate about Z axis of the master frame with angle expressed in degrees.
void SetAngles(Double_t phi, Double_t theta, Double_t psi)
Set matrix elements according to Euler angles.
void SetTranslation(const Double_t *vect)
R__EXTERN TGeoManager * gGeoManager
TGeoRotation & operator=(const TGeoRotation &other)
TNamed & operator=(const TNamed &rhs)
TNamed assignment operator.
void SetScale(Double_t sx, Double_t sy, Double_t sz)
set the scale
virtual const Double_t * GetScale() const
TGeoHMatrix operator*(const TGeoMatrix &other) const
void FastRotZ(const Double_t *sincos)
Perform a rotation about Z having the sine/cosine of the rotation angle.
virtual TObject * Remove(TObject *obj)
Remove object from array.
virtual const char * GetTitle() const
Returns title of object.
virtual ~TGeoCombiTrans()
destructor
virtual void RotateX(Double_t angle)
Rotate about X axis with angle expressed in degrees.
virtual void ReflectY(Bool_t leftside, Bool_t rotonly=kFALSE)
Multiply by a reflection respect to ZX.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual const Double_t * GetTranslation() const
const Double_t kIdentityMatrix[3 *3]
Double_t Sqrt(Double_t x)
TGeoIdentity * gGeoIdentity
constexpr Double_t DegToRad()
Conversion from degree to radian:
void SetTranslation(Double_t dx, Double_t dy, Double_t dz)
Set translation components.
static constexpr double s
virtual ~TGeoGenTrans()
destructor
TGeoHMatrix Inverse() const
Return a temporary inverse of this.
static void Normalize(Double_t *vect)
Normalize a vector.
virtual UInt_t GetUniqueID() const
Return the unique object id.
TGeoTranslation operator*(const TGeoTranslation &right) const
const Double_t kNullVector[3]
void MultiplyLeft(const TGeoMatrix *left)
multiply to the left with an other transformation if right is identity matrix, just return
TGeoRotation operator*(const TGeoRotation &other) const
virtual void MasterToLocal(const Double_t *master, Double_t *local) const
Convert a global point to local frame.
Bool_t operator==(const TGeoRotation &other) const
Is-equal operator.
Bool_t IsCleaning() const
Most general transformation, holding a translation, a rotation and a scale.
TGeoCombiTrans()
dummy ctor
virtual void RotateZ(Double_t angle)
Rotate about Z axis with angle expressed in degrees.
virtual ~TGeoHMatrix()
destructor
TGeoCombiTrans operator*(const TGeoMatrix &other) const
void FastRotZ(const Double_t *sincos)
Perform a rotation about Z having the sine/cosine of the rotation angle.
virtual TGeoMatrix * MakeClone() const
Make a clone of this matrix.
virtual void ReflectX(Bool_t leftside, Bool_t rotonly=kFALSE)
Multiply by a reflection respect to YZ.
virtual void RotateY(Double_t angle)
Rotate about Y axis with angle expressed in degrees.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
void Print(Option_t *option="") const
print the matrix in 4x4 format
TGeoHMatrix & operator*=(const TGeoMatrix &other)
Composition.
Double_t Determinant() const
computes determinant of the rotation matrix
Bool_t IsRegistered() const
virtual void ReflectZ(Bool_t leftside, Bool_t rotonly=kFALSE)
Multiply by a reflection respect to XY.
virtual void ReflectY(Bool_t leftside, Bool_t rotonly=kFALSE)
Multiply by a reflection respect to ZX.
Class describing translations.
virtual void RotateX(Double_t angle)
Rotate about X axis of the master frame with angle expressed in degrees.
TGeoHMatrix Inverse() const
Return a temporary inverse of this.
void SetRotation(const TGeoRotation &other)
Copy the rotation from another one.
virtual Int_t GetByteCount() const
Get total size in bytes of this.
void Subtract(const TGeoTranslation *other)
Subtracting a translation from this one.
void Add(const TGeoTranslation *other)
Adding a translation to this one.
virtual void RotateX(Double_t angle)
Rotate about X axis of the master frame with angle expressed in degrees.
void Clear(Option_t *option="")
clear the data for this matrix
virtual const Double_t * GetScale() const
virtual void RotateY(Double_t angle)
Rotate about Y axis of the master frame with angle expressed in degrees.
TGeoTranslation()
Default constructor.
const Double_t kUnitScale[3]
TGeoScale & operator*=(const TGeoScale &other)
Scale composition.
virtual const Double_t * GetRotationMatrix() const =0
TGeoHMatrix Inverse() const
Return a temporary inverse of this.
Bool_t operator==(const TGeoMatrix &other) const
Is-equal operator.
double dist(Rotation3D const &r1, Rotation3D const &r2)
Bool_t IsIdentity() const
void GetInverse(Double_t *invmat) const
Get the inverse rotation matrix (which is simply the transpose)
virtual void RotateZ(Double_t angle)
Rotate about Z axis of the master frame with angle expressed in degrees.
virtual void LocalToMasterVect(const Double_t *local, Double_t *master) const
convert a vector by multiplying its column vector (x, y, z, 1) to matrix inverse
TGeoHMatrix Inverse() const
Return a temporary inverse of this.
virtual void MasterToLocal(const Double_t *master, Double_t *local) const
convert a point by multiplying its column vector (x, y, z, 1) to matrix
Bool_t IsValid() const
Perform orthogonality test for rotation.
TGeoHMatrix Inverse() const
Return a temporary inverse of this.
void RegisterMatrix(const TGeoMatrix *matrix)
Register a matrix to the list of matrices.
void CopyFrom(const TGeoMatrix *other)
Fast copy method.
virtual void LocalToMasterVect(const Double_t *local, Double_t *master) const
convert a vector to MARS
Matrix class used for computing global transformations Should NOT be used for node definition.
Double_t fRotationMatrix[3 *3]
virtual void RegisterYourself()
Register the matrix in the current manager, which will become the owner.
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
Bool_t Normalize()
A scale transformation should be normalized by sx*sy*sz factor.
Double_t GetPhiRotation(Bool_t fixX=kFALSE) const
Returns rotation angle about Z axis in degrees.
virtual void ReflectZ(Bool_t leftside, Bool_t rotonly=kFALSE)
Multiply by a reflection respect to XY.
Bool_t IsReflection() const
Int_t GetEntriesFast() const
void SetDefaultName()
If no name was supplied in the ctor, the type of transformation is checked.
The TNamed class is the base class for all named ROOT classes.
virtual void LocalToMasterBomb(const Double_t *local, Double_t *master) const
convert a point by multiplying its column vector (x, y, z, 1) to matrix inverse
Class describing rotations.
virtual const Double_t * GetTranslation() const
virtual void ReflectX(Bool_t leftside, Bool_t rotonly=kFALSE)
Multiply by a reflection respect to YZ.
Bool_t IsRotation() const
void GetAngles(Double_t &theta1, Double_t &phi1, Double_t &theta2, Double_t &phi2, Double_t &theta3, Double_t &phi3) const
Retrieve rotation angles.
Double_t Determinant() const
computes determinant of the rotation matrix
char * GetPointerName() const
Provide a pointer name containing uid.
virtual void ReflectY(Bool_t leftside, Bool_t rotonly=kFALSE)
Multiply by a reflection respect to ZX.
virtual void ReflectY(Bool_t leftside, Bool_t rotonly=kFALSE)
Multiply by a reflection respect to ZX.
void SetScale(Double_t sx, Double_t sy, Double_t sz)
scale setter
virtual void RotateX(Double_t angle)
Rotate about X axis with angle expressed in degrees.
Bool_t operator==(const TGeoMatrix &other) const
Is-equal operator.
virtual void RotateY(Double_t angle)
Rotate about Y axis of the master frame with angle expressed in degrees.
TGeoScale & operator=(const TGeoScale &other)
virtual void LocalToMaster(const Double_t *local, Double_t *master) const
Convert a local point to the master frame.
void Clear(Option_t *option="")
Reset translation/rotation to identity.
TGeoCombiTrans & operator*=(const TGeoMatrix &other)
Composition.
Bool_t IsTranslation() const
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save a primitive as a C++ statement(s) on output stream "out".
virtual void LocalToMaster(const Double_t *local, Double_t *master) const
convert a point by multiplying its column vector (x, y, z, 1) to matrix inverse
virtual const Double_t * GetRotationMatrix() const
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
TGeoHMatrix Inverse() const
Return a temporary inverse of this.
void GetHomogenousMatrix(Double_t *hmat) const
The homogenous matrix associated with the transformation is used for piling up's and visualization.
virtual void MasterToLocal(const Double_t *master, Double_t *local) const
convert a point by multiplying its column vector (x, y, z, 1) to matrix
void Clear(Option_t *option="")
reset data members
virtual void LocalToMasterBomb(const Double_t *local, Double_t *master) const
convert a point by multiplying its column vector (x, y, z, 1) to matrix inverse
void CheckMatrix()
performes an orthogonality check and finds if the matrix is a reflection Warning("CheckMatrix",...
Geometrical transformation package.
TGeoHMatrix & operator=(const TGeoHMatrix &other)
Class describing scale transformations.
void Clear(Option_t *option="")
clear the fields of this transformation
TGeoCombiTrans & operator=(const TGeoCombiTrans &other)
virtual void RotateY(Double_t angle)
Rotate about Y axis with angle expressed in degrees.
void BombTranslation(const Double_t *tr, Double_t *bombtr)
Get the new 'bombed' translation vector according current exploded view mode.
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save a primitive as a C++ statement(s) on output stream "out".
TGeoMatrix()
dummy constructor
virtual ~TGeoScale()
destructor
virtual void MasterToLocalBomb(const Double_t *master, Double_t *local) const
convert a point by multiplying its column vector (x, y, z, 1) to matrix
void SetTranslation(const TGeoTranslation &tr)
copy the translation component
virtual void LocalToMaster(const Double_t *local, Double_t *master) const
convert a point by multiplying its column vector (x, y, z, 1) to matrix inverse
virtual void MasterToLocal(const Double_t *master, Double_t *local) const
convert a point by multiplying its column vector (x, y, z, 1) to matrix
virtual TGeoMatrix * MakeClone() const
Make a clone of this matrix.
virtual void MasterToLocalVect(const Double_t *master, Double_t *local) const
convert a vector from MARS to local
virtual void RegisterYourself()
Register the matrix in the current manager, which will become the owner.
virtual void LocalToMaster(const Double_t *local, Double_t *master) const
convert a point by multiplying its column vector (x, y, z, 1) to matrix inverse
virtual const char * GetName() const
Returns name of object.
virtual const Double_t * GetRotationMatrix() const
get the rotation array
TObjArray * GetListOfMatrices() const
void Multiply(const TGeoMatrix *right)
multiply to the right with an other transformation if right is identity matrix, just return
virtual const Double_t * GetTranslation() const =0
virtual void ReflectX(Bool_t leftside, Bool_t rotonly=kFALSE)
Multiply by a reflection respect to YZ.
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save a primitive as a C++ statement(s) on output stream "out".
virtual void RotateZ(Double_t angle)
Rotate about Z axis with angle expressed in degrees.
void MultiplyBy(const TGeoRotation *rot, Bool_t after=kTRUE)
Multiply this rotation with the one specified by ROT.
Bool_t operator==(const TGeoTranslation &other) const
Is-equal operator.
virtual TGeoMatrix * MakeClone() const
Make a clone of this matrix.
An identity transformation.
virtual const Double_t * GetTranslation() const
constexpr Double_t E()
Base of natural log:
TGeoTranslation & operator=(const TGeoTranslation &other)
TGeoTranslation & operator*=(const TGeoTranslation &other)
Translation composition.
void SetRotation(const TGeoMatrix &other)
Copy rotation elements from other rotation matrix.
Bool_t IsRotAboutZ() const
Returns true if no rotation or the rotation is about Z axis.
virtual const Double_t * GetRotationMatrix() const
virtual TGeoMatrix * MakeClone() const
Make a clone of this matrix.
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save a primitive as a C++ statement(s) on output stream "out".
TGeoRotation()
Default constructor.
virtual TGeoMatrix * MakeClone() const
Make a clone of this matrix.
virtual const Double_t * GetScale() const =0
void SetMatrix(const Double_t *rot)