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");
581 for (
Int_t i=0; i<3; i++) fTranslation[i] = 0;
629 if (&matrix ==
this)
return *
this;
671 if (&other ==
this)
return kTRUE;
674 for (
auto i=0; i<3; i++)
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++) {
857 if (i%4) fRotationMatrix[i] = 0;
858 else fRotationMatrix[i] = 1.0;
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++)
1001 for (
Int_t i=0; i<2; i++) {
1002 for (
Int_t j=i+1; j<3; j++) {
1004 cij =
TMath::Abs(r[i]*r[j]+r[i+3]*r[j+3]+r[i+6]*r[j+6]);
1007 cij =
TMath::Abs(r[3*i]*r[3*j]+r[3*i+1]*r[3*j+1]+r[3*i+2]*r[3*j+2]);
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];
1098 v[4] = c*fRotationMatrix[4]-s*fRotationMatrix[7];
1099 v[5] = c*fRotationMatrix[5]-s*fRotationMatrix[8];
1100 v[6] = s*fRotationMatrix[3]+c*fRotationMatrix[6];
1101 v[7] = s*fRotationMatrix[4]+c*fRotationMatrix[7];
1102 v[8] = s*fRotationMatrix[5]+c*fRotationMatrix[8];
1104 memcpy(fRotationMatrix, v,
kN9);
1118 v[1] = c*fRotationMatrix[1]+s*fRotationMatrix[7];
1119 v[2] = c*fRotationMatrix[2]+s*fRotationMatrix[8];
1120 v[3] = fRotationMatrix[3];
1121 v[4] = fRotationMatrix[4];
1122 v[5] = fRotationMatrix[5];
1123 v[6] = -s*fRotationMatrix[0]+c*fRotationMatrix[6];
1124 v[7] = -s*fRotationMatrix[1]+c*fRotationMatrix[7];
1125 v[8] = -s*fRotationMatrix[2]+c*fRotationMatrix[8];
1127 memcpy(fRotationMatrix, v,
kN9);
1141 v[1] = c*fRotationMatrix[1]-s*fRotationMatrix[4];
1142 v[2] = c*fRotationMatrix[2]-s*fRotationMatrix[5];
1143 v[3] = s*fRotationMatrix[0]+c*fRotationMatrix[3];
1144 v[4] = s*fRotationMatrix[1]+c*fRotationMatrix[4];
1145 v[5] = s*fRotationMatrix[2]+c*fRotationMatrix[5];
1146 v[6] = fRotationMatrix[6];
1147 v[7] = fRotationMatrix[7];
1148 v[8] = fRotationMatrix[8];
1150 memcpy(&fRotationMatrix[0],v,
kN9);
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;
1255 if (!
IsValid())
Error(
"SetAngles",
"invalid rotation (Euler angles : phi=%f theta=%f psi=%f)",phi,theta,psi);
1276 for (
Int_t i=0; i<9; i++) {
1281 if (!
IsValid())
Error(
"SetAngles",
"invalid rotation (G3 angles, th1=%f phi1=%f, th2=%f ph2=%f, th3=%f phi3=%f)",
1282 theta1,phi1,theta2,phi2,theta3,phi3);
1298 if (phi1<0) phi1+=360.;
1301 if (phi2<0) phi2+=360.;
1304 if (phi3<0) phi3+=360.;
1362 Error(
"GetInverse",
"no place to store the inverse matrix");
1365 for (
Int_t i=0; i<3; i++) {
1366 for (
Int_t j=0; j<3; j++) {
1379 const Double_t *matleft, *matright;
1389 for (
Int_t i=0; i<3; i++) {
1390 for (
Int_t j=0; j<3; j++) {
1391 for (
Int_t k=0; k<3; k++) {
1392 newmat[3*i+j] += matleft[3*i+k] * matright[3*k+j];
1414 for (
Int_t i=0; i<3; i++) fScale[i] = 1.;
1469 if (&matrix ==
this)
return *
this;
1512 if (&other ==
this)
return kTRUE;
1515 for (
auto i=0; i<3; i++)
1541 Error(
"SetScale",
"Invalid scale %f, %f, %f for transformation %s",sx,sy,sx,
GetName());
1566 master[0] = local[0]*
fScale[0];
1567 master[1] = local[1]*fScale[1];
1568 master[2] = local[2]*fScale[2];
1606 local[0] = master[0]/
fScale[0];
1607 local[1] = master[1]/
fScale[1];
1608 local[2] = master[2]/
fScale[2];
1626 (dir[1]*dir[1])/(fScale[1]*fScale[1]) +
1627 (dir[2]*dir[2])/(fScale[2]*fScale[2]);
1646 for (
Int_t i=0; i<3; i++) fTranslation[i] = 0.0;
1729 if (&matrix ==
this)
return *
this;
1765 if (&other ==
this)
return kTRUE;
1899 v[3] = c*rot[3]-s*rot[6];
1900 v[4] = c*rot[4]-s*rot[7];
1901 v[5] = c*rot[5]-s*rot[8];
1902 v[6] = s*rot[3]+c*rot[6];
1903 v[7] = s*rot[4]+c*rot[7];
1904 v[8] = s*rot[5]+c*rot[8];
1910 v[2] = s*fTranslation[1]+c*fTranslation[2];
1911 memcpy(fTranslation,v,
kN3);
1930 v[0] = c*rot[0]+s*rot[6];
1931 v[1] = c*rot[1]+s*rot[7];
1932 v[2] = c*rot[2]+s*rot[8];
1936 v[6] = -s*rot[0]+c*rot[6];
1937 v[7] = -s*rot[1]+c*rot[7];
1938 v[8] = -s*rot[2]+c*rot[8];
1943 v[1] = fTranslation[1];
1944 v[2] = -s*fTranslation[0]+c*fTranslation[2];
1945 memcpy(fTranslation,v,
kN3);
1964 v[0] = c*rot[0]-s*rot[3];
1965 v[1] = c*rot[1]-s*rot[4];
1966 v[2] = c*rot[2]-s*rot[5];
1967 v[3] = s*rot[0]+c*rot[3];
1968 v[4] = s*rot[1]+c*rot[4];
1969 v[5] = s*rot[2]+c*rot[5];
1977 v[1] = s*fTranslation[0]+c*fTranslation[1];
1978 v[2] = fTranslation[2];
1979 memcpy(fTranslation,v,
kN3);
2036 out <<
" // Combi transformation: " <<
GetName() << std::endl;
2037 out <<
" dx = " <<
fTranslation[0] <<
";" << std::endl;
2038 out <<
" dy = " <<
fTranslation[1] <<
";" << std::endl;
2039 out <<
" dz = " <<
fTranslation[2] <<
";" << std::endl;
2046 out <<
" " <<
GetPointerName() <<
"->SetTranslation(dx,dy,dz);" << std::endl;
2153 for (
Int_t j=0; j<3; j++) fScale[j] = 1.0;
2217 if (sx<1.
E-5 || sy<1.
E-5 || sz<1.
E-5) {
2218 Error(
"ctor",
"Invalid scale");
2241 if (normfactor <= 1
E-5)
return kFALSE;
2242 for (
Int_t i=0; i<3; i++)
2243 fScale[i] /= normfactor;
2261 if (!gGeoIdentity) gGeoIdentity =
this;
2271 if (!gGeoIdentity) gGeoIdentity =
this;
2300 memset(&fTranslation[0], 0,
kN3);
2354 if (&matrix ==
this)
return *
this;
2390 if (&other ==
this)
return kTRUE;
2541 for (i=0; i<3; i++) {
2549 for (i=0; i<3; i++) {
2550 for (j=0; j<3; j++) {
2560 for (i=0; i<3; i++)
fScale[i] *= r_scl[i];
2570 if (left == gGeoIdentity)
return;
2603 for (i=0; i<3; i++) {
2604 new_tra[i] = l_tra[i]
2613 for (i=0; i<3; i++) {
2614 for (j=0; j<3; j++) {
2624 for (i=0; i<3; i++)
fScale[i] *= l_scl[i];
2642 v[4] = c*fRotationMatrix[4]-s*fRotationMatrix[7];
2643 v[5] = c*fRotationMatrix[5]-s*fRotationMatrix[8];
2644 v[6] = s*fRotationMatrix[3]+c*fRotationMatrix[6];
2645 v[7] = s*fRotationMatrix[4]+c*fRotationMatrix[7];
2646 v[8] = s*fRotationMatrix[5]+c*fRotationMatrix[8];
2647 memcpy(fRotationMatrix, v,
kN9);
2651 v[2] = s*fTranslation[1]+c*fTranslation[2];
2652 memcpy(fTranslation,v,
kN3);
2666 v[1] = c*fRotationMatrix[1]+s*fRotationMatrix[7];
2667 v[2] = c*fRotationMatrix[2]+s*fRotationMatrix[8];
2668 v[3] = fRotationMatrix[3];
2669 v[4] = fRotationMatrix[4];
2670 v[5] = fRotationMatrix[5];
2671 v[6] = -s*fRotationMatrix[0]+c*fRotationMatrix[6];
2672 v[7] = -s*fRotationMatrix[1]+c*fRotationMatrix[7];
2673 v[8] = -s*fRotationMatrix[2]+c*fRotationMatrix[8];
2674 memcpy(fRotationMatrix, v,
kN9);
2677 v[1] = fTranslation[1];
2678 v[2] = -s*fTranslation[0]+c*fTranslation[2];
2679 memcpy(fTranslation,v,
kN3);
2693 v[1] = c*fRotationMatrix[1]-s*fRotationMatrix[4];
2694 v[2] = c*fRotationMatrix[2]-s*fRotationMatrix[5];
2695 v[3] = s*fRotationMatrix[0]+c*fRotationMatrix[3];
2696 v[4] = s*fRotationMatrix[1]+c*fRotationMatrix[4];
2697 v[5] = s*fRotationMatrix[2]+c*fRotationMatrix[5];
2698 v[6] = fRotationMatrix[6];
2699 v[7] = fRotationMatrix[7];
2700 v[8] = fRotationMatrix[8];
2701 memcpy(&fRotationMatrix[0],v,
kN9);
2704 v[1] = s*fTranslation[0]+c*fTranslation[1];
2705 v[2] = fTranslation[2];
2706 memcpy(fTranslation,v,
kN3);
2774 out <<
" // HMatrix: " <<
GetName() << std::endl;
2775 out <<
" tr[0] = " << tr[0] <<
"; " <<
"tr[1] = " << tr[1] <<
"; " <<
"tr[2] = " << tr[2] <<
";" << std::endl;
2776 out <<
" rot[0] =" << rot[0] <<
"; " <<
"rot[1] = " << rot[1] <<
"; " <<
"rot[2] = " << rot[2] <<
";" << std::endl;
2777 out <<
" rot[3] =" << rot[3] <<
"; " <<
"rot[4] = " << rot[4] <<
"; " <<
"rot[5] = " << rot[5] <<
";" << std::endl;
2778 out <<
" rot[6] =" << rot[6] <<
"; " <<
"rot[7] = " << rot[7] <<
"; " <<
"rot[8] = " << rot[8] <<
";" << std::endl;
2780 out <<
" TGeoHMatrix *" << name <<
" = new TGeoHMatrix(\"" <<
GetName() <<
"\");" << std::endl;
2781 out <<
" " << name <<
"->SetTranslation(tr);" << std::endl;
2782 out <<
" " << name <<
"->SetRotation(rot);" << std::endl;
2783 if (
IsTranslation()) out <<
" " << name <<
"->SetBit(TGeoMatrix::kGeoTranslation);" << std::endl;
2784 if (
IsRotation()) out <<
" " << name <<
"->SetBit(TGeoMatrix::kGeoRotation);" << std::endl;
2785 if (
IsReflection()) out <<
" " << name <<
"->SetBit(TGeoMatrix::kGeoReflection);" << std::endl;
void Subtract(const TGeoTranslation *other)
Subtracting a translation from this one.
virtual const char * GetName() const
Returns name of object.
virtual UInt_t GetUniqueID() const
Return the unique object id.
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
double dist(Rotation3D const &r1, Rotation3D const &r2)
const Double_t kIdentityMatrix[3 *3]
void SetRotation(const TGeoRotation &other)
Copy the rotation from another one.
void Print(Option_t *option="") const
print the matrix in 4x4 format
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
Double_t fRotationMatrix[9]
TGeoMatrix()
dummy constructor
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
void FastRotZ(const Double_t *sincos)
Perform a rotation about Z having the sine/cosine of the rotation angle.
TGeoHMatrix operator*(const TGeoMatrix &other) const
TGeoScale & operator*=(const TGeoScale &other)
Scale composition.
void FastRotZ(const Double_t *sincos)
Perform a rotation about Z having the sine/cosine of the rotation angle.
void MultiplyLeft(const TGeoMatrix *left)
multiply to the left with an other transformation if right is identity matrix, just return ...
virtual ~TGeoScale()
destructor
void BombTranslation(const Double_t *tr, Double_t *bombtr)
Get the new 'bombed' translation vector according current exploded view mode.
Geometrical transformation package.
Bool_t operator==(const TGeoRotation &other) const
Is-equal operator.
Bool_t operator==(const TGeoMatrix &other) const
Is-equal operator.
virtual const Double_t * GetRotationMatrix() const
virtual const Double_t * GetTranslation() const
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 const Double_t * GetRotationMatrix() const =0
const Double_t kNullVector[3]
virtual void SetName(const char *name)
Set the name of the TNamed.
virtual void MasterToLocal(const Double_t *master, Double_t *local) const
Convert a global point to local frame.
virtual void ReflectZ(Bool_t leftside, Bool_t rotonly=kFALSE)
Multiply by a reflection respect to XY.
An identity transformation.
TGeoCombiTrans operator*(const TGeoMatrix &other) const
virtual void RotateX(Double_t angle)
Rotate about X axis of the master frame with angle expressed in degrees.
Most general transformation, holding a translation, a rotation and a scale.
TGeoCombiTrans()
dummy ctor
void SetTranslation(const Double_t *vect)
TGeoRotation()
Default constructor.
TGeoTranslation operator*(const TGeoTranslation &right) const
Class describing translations.
virtual TObject * Remove(TObject *obj)
Remove object from array.
Bool_t operator==(const TGeoScale &other) const
Is-equal operator.
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
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
virtual const Double_t * GetScale() const
Matrix class used for computing global transformations Should NOT be used for node definition...
void Multiply(const TGeoMatrix *right)
multiply to the right with an other transformation if right is identity matrix, just return ...
void GetInverse(Double_t *invmat) const
Get the inverse rotation matrix (which is simply the transpose)
void Add(const TGeoTranslation *other)
Adding a translation to this one.
const Double_t kUnitScale[3]
virtual void RotateY(Double_t angle)
Rotate about Y axis with angle expressed in degrees.
void SetTranslation(const TGeoTranslation &tr)
copy the translation component
virtual ~TGeoCombiTrans()
destructor
virtual const Double_t * GetScale() const
TGeoHMatrix Inverse() const
Return a temporary inverse of this.
virtual void ReflectY(Bool_t leftside, Bool_t rotonly=kFALSE)
Multiply by a reflection respect to ZX.
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual void RotateY(Double_t angle)
Rotate about Y axis with angle expressed in degrees.
TGeoRotation & operator=(const TGeoRotation &other)
virtual void RotateX(Double_t angle)
Rotate about X axis with angle expressed in degrees.
TGeoHMatrix Inverse() const
Return a temporary inverse of this.
TGeoHMatrix Inverse() const
Return a temporary inverse of this.
TGeoScale operator*(const TGeoScale &other) const
virtual void RotateX(Double_t angle)
Rotate about X axis with angle expressed in degrees.
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.
virtual void ReflectY(Bool_t leftside, Bool_t rotonly=kFALSE)
Multiply by a reflection respect to ZX.
virtual ~TGeoHMatrix()
destructor
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString...
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.
The TNamed class is the base class for all named ROOT classes.
Double_t Determinant() const
computes determinant of the rotation matrix
virtual void ReflectZ(Bool_t leftside, Bool_t rotonly=kFALSE)
Multiply by a reflection respect to XY.
constexpr Double_t DegToRad()
virtual ~TGeoGenTrans()
destructor
Bool_t IsIdentity() const
void Multiply(const TGeoMatrix *right)
multiply to the right with an other transformation if right is identity matrix, just return ...
TGeoRotation operator*(const TGeoRotation &other) const
Double_t ATan2(Double_t, Double_t)
void CopyFrom(const TGeoMatrix *other)
Fast copy method.
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
virtual void RotateY(Double_t angle)
Rotate about Y axis of the master frame with angle expressed in degrees.
char * GetPointerName() const
Provide a pointer name containing uid.
virtual const Double_t * GetTranslation() const
TGeoHMatrix Inverse() const
Return a temporary inverse of this.
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.
TGeoTranslation & operator*=(const TGeoTranslation &other)
Translation composition.
TGeoHMatrix & operator*=(const TGeoMatrix &other)
Composition.
virtual const Double_t * GetRotationMatrix() const
virtual void LocalToMaster(const Double_t *local, Double_t *master) const
Convert a local point to the master frame.
TGeoHMatrix Inverse() const
Return a temporary inverse of this.
TNamed & operator=(const TNamed &rhs)
TNamed assignment operator.
Bool_t operator==(const TGeoMatrix &other) const
Is-equal operator.
virtual void RegisterYourself()
Register the matrix in the current manager, which will become the owner.
void Clear(Option_t *option="")
clear the data for this matrix
Class describing rotation + translation.
void Clear(Option_t *option="")
clear the fields of this transformation
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 void LocalToMasterVect(const Double_t *local, Double_t *master) const
convert a vector to MARS
virtual const Double_t * GetRotationMatrix() const
get the rotation array
void Clear(Option_t *option="")
reset data members
void SetDefaultName()
If no name was supplied in the ctor, the type of transformation is checked.
void CheckMatrix()
performes an orthogonality check and finds if the matrix is a reflection Warning("CheckMatrix", "orthogonality check not performed yet");
Bool_t IsRegistered() const
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
Int_t GetEntriesFast() const
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual TGeoMatrix * MakeClone() const
Make a clone of this matrix.
virtual void RegisterYourself()
Register the matrix in the current manager, which will become the owner.
TGeoTranslation & operator=(const TGeoTranslation &other)
virtual void ReflectY(Bool_t leftside, Bool_t rotonly=kFALSE)
Multiply by a reflection respect to ZX.
static void Normalize(Double_t *vect)
Normalize a vector.
virtual const Double_t * GetTranslation() const
void Clear(Option_t *option="")
Reset translation/rotation to identity.
virtual void ReflectY(Bool_t leftside, Bool_t rotonly=kFALSE)
Multiply by a reflection respect to ZX.
virtual Int_t GetByteCount() const
Get total size in bytes of this.
void GetHomogenousMatrix(Double_t *hmat) const
The homogenous matrix associated with the transformation is used for piling up's and visualization...
TObjArray * GetListOfMatrices() const
virtual void RotateZ(Double_t angle)
Rotate about Z axis of the master frame with angle expressed in degrees.
TGeoIdentity * gGeoIdentity
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
Class describing rotations.
virtual void RotateZ(Double_t angle)
Rotate about Z axis of the master frame with angle expressed in degrees.
Double_t fRotationMatrix[3 *3]
Bool_t IsValid() const
Perform orthogonality test for rotation.
Bool_t IsRotation() const
TGeoHMatrix Inverse() const
Return a temporary inverse of this.
virtual void ReflectZ(Bool_t leftside, Bool_t rotonly=kFALSE)
Multiply by a reflection respect to XY.
Class describing scale transformations.
virtual void ReflectX(Bool_t leftside, Bool_t rotonly=kFALSE)
Multiply by a reflection respect to YZ.
R__EXTERN TGeoManager * gGeoManager
void GetAngles(Double_t &theta1, Double_t &phi1, Double_t &theta2, Double_t &phi2, Double_t &theta3, Double_t &phi3) const
Retrieve rotation angles.
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
TGeoTranslation()
Default constructor.
TGeoScale & operator=(const TGeoScale &other)
virtual void ReflectZ(Bool_t leftside, Bool_t rotonly=kFALSE)
Multiply by a reflection respect to XY.
TGeoHMatrix Inverse() const
Return a temporary inverse of this.
void RegisterMatrix(const TGeoMatrix *matrix)
Register a matrix to the list of matrices.
TGeoScale()
default constructor
static constexpr double s
you should not use this method at all Int_t Int_t Double_t Double_t Double_t e
void SetRotation(const TGeoMatrix &other)
Copy rotation elements from other rotation matrix.
Double_t Determinant() const
computes determinant of the rotation matrix
TGeoCombiTrans & operator=(const TGeoCombiTrans &other)
TGeoCombiTrans & operator*=(const TGeoMatrix &other)
Composition.
Bool_t IsReflection() 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".
void MultiplyBy(const TGeoRotation *rot, Bool_t after=kTRUE)
Multiply this rotation with the one specified by ROT.
void SetScale(const Double_t *scale)
void SetMatrix(const Double_t *rot)
TGeoHMatrix & operator=(const TGeoHMatrix &other)
constexpr Double_t RadToDeg()
Bool_t operator==(const TGeoTranslation &other) const
Is-equal operator.
TGeoRotation & operator*=(const TGeoRotation &other)
Composition.
void SetRotation(const Double_t *matrix)
Bool_t IsCleaning() const
virtual ~TGeoMatrix()
Destructor.
virtual TGeoMatrix * MakeClone() const
Make a clone of this matrix.
Bool_t IsTranslation() const
virtual void ReflectX(Bool_t leftside, Bool_t rotonly=kFALSE)
Multiply by a reflection respect to YZ.
void SetScale(Double_t sx, Double_t sy, Double_t sz)
scale setter
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
virtual void RotateX(Double_t angle)
Rotate about X axis of the master frame with angle expressed in degrees.
virtual void RotateY(Double_t angle)
Rotate about Y 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.
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
Double_t Sqrt(Double_t x)
void UnbombTranslation(const Double_t *tr, Double_t *bombtr)
Get the new 'unbombed' translation vector according current exploded view mode.
virtual void MasterToLocalVect(const Double_t *master, Double_t *local) const
convert a vector from MARS to local
virtual void RotateZ(Double_t angle)
Rotate about Z axis with angle expressed in degrees.
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save a primitive as a C++ statement(s) on output stream "out".
virtual const Double_t * GetTranslation() const =0
Bool_t IsRotAboutZ() const
Returns true if no rotation or the rotation is about Z axis.
virtual const Double_t * GetScale() const =0
void SetTranslation(Double_t dx, Double_t dy, Double_t dz)
Set translation components.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
virtual void SavePrimitive(std::ostream &out, Option_t *option="")
Save a primitive as a C++ statement(s) on output stream "out".
virtual const char * GetTitle() const
Returns title of object.
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 SetScale(Double_t sx, Double_t sy, Double_t sz)
set the scale
const char * Data() const