Jpp  17.3.0-rc.1
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Private Member Functions | Private Attributes | List of all members
JDETECTOR::JRotation Struct Reference

Auxiliary class to get rotation matrix between two optical modules. More...

#include <JDetectorToolkit.hh>

Inheritance diagram for JDETECTOR::JRotation:
JGEOMETRY3D::JRotation3D JMATH::JMatrix3D JMATH::JMath< JFirst_t, JSecond_t > JMATH::JMath< JMatrix3D > JLANG::JEquals< JFirst_t, JSecond_t >

Public Member Functions

const JRotation3Doperator() (const JModule &first, const JModule &second)
 Get rotation matrix to go from first to second module. More...
 
const JRotation3DgetRotation () const
 Get rotation. More...
 
 operator JQuaternion3D () const
 Type conversion operator. More...
 
JRotation3Dtranspose ()
 Transpose. More...
 
JRotation3Dmul (const JRotation3D &A, const JRotation3D &B)
 Matrix multiplication. More...
 
JMatrix3Dmul (const double factor)
 Scale matrix. More...
 
JMatrix3Dmul (const JMatrix3D &A, const JMatrix3D &B)
 Matrix multiplication. More...
 
JMatrix3Dmul (const JNullType &object)
 Multiply with object. More...
 
JFirst_t & mul (const JSecond_t &object)
 Multiply with object. More...
 
void rotate (double &__x, double &__y, double &__z) const
 Rotate. More...
 
void rotate_back (double &__x, double &__y, double &__z) const
 Rotate back. More...
 
JMatrix3DsetIdentity ()
 Set to identity matrix. More...
 
void set (const JMatrix3D &A)
 Set matrix. More...
 
JMatrix3Dreset ()
 Set matrix to the null matrix. More...
 
JMatrix3Dnegate ()
 Negate matrix. More...
 
JMatrix3Dadd (const JMatrix3D &A)
 Matrix addition. More...
 
JMatrix3Dsub (const JMatrix3D &A)
 Matrix subtraction. More...
 
JMatrix3Ddiv (const double factor)
 Scale matrix. More...
 
bool equals (const JMatrix3D &A, const double eps=std::numeric_limits< double >::min()) const
 Equality. More...
 
bool isIdentity (const double eps=std::numeric_limits< double >::min()) const
 Test identity. More...
 
double getDeterminant () const
 Get determinant of matrix. More...
 
void transform (double &__x, double &__y, double &__z) const
 Transform. More...
 

Static Public Member Functions

static const JMatrix3DgetInstance ()
 Get reference to unique instance of this class object. More...
 
static const JMatrix3DgetIdentity ()
 Get reference to unique instance of this class object. More...
 

Public Attributes

double a00
 
double a01
 
double a02
 
double a10
 
double a11
 
double a12
 
double a20
 
double a21
 
double a22
 

Static Public Attributes

static const size_t NUMBER_OF_DIMENSIONS = 3
 Number of dimensions. More...
 

Private Member Functions

bool orthonormalise (const size_t index, const double precision=std::numeric_limits< double >::epsilon())
 Put normalised primary direction at specified index and orthoganilise following directions. More...
 

Private Attributes

std::vector< JVector3Din
 
std::vector< JVector3Dout
 

Detailed Description

Auxiliary class to get rotation matrix between two optical modules.

Definition at line 779 of file JDetectorToolkit.hh.

Member Function Documentation

const JRotation3D& JDETECTOR::JRotation::operator() ( const JModule first,
const JModule second 
)
inline

Get rotation matrix to go from first to second module.

Parameters
firstfirst module
secondsecond module
Returns
rotation matrix

Definition at line 793 of file JDetectorToolkit.hh.

794  {
795  this->setIdentity();
796 
797  if (first.size() == second.size()) {
798 
799  const size_t N = first.size();
800 
801  if (N >= NUMBER_OF_DIMENSIONS) {
802 
803  in .resize(N);
804  out.resize(N);
805 
806  for (size_t i = 0; i != N; ++i) {
807  in [i] = first .getPMT(i).getDirection();
808  out[i] = second.getPMT(i).getDirection();
809  }
810 
811  for (size_t i = 0; i != NUMBER_OF_DIMENSIONS; ++i) {
812  if (!orthonormalise(i)) {
813  THROW(JException, "Failure to orthonormalise direction " << i);
814  }
815  }
816 
817  this->a00 = out[0].getX() * in[0].getX() + out[1].getX() * in[1].getX() + out[2].getX() * in[2].getX();
818  this->a01 = out[0].getX() * in[0].getY() + out[1].getX() * in[1].getY() + out[2].getX() * in[2].getY();
819  this->a02 = out[0].getX() * in[0].getZ() + out[1].getX() * in[1].getZ() + out[2].getX() * in[2].getZ();
820 
821  this->a10 = out[0].getY() * in[0].getX() + out[1].getY() * in[1].getX() + out[2].getY() * in[2].getX();
822  this->a11 = out[0].getY() * in[0].getY() + out[1].getY() * in[1].getY() + out[2].getY() * in[2].getY();
823  this->a12 = out[0].getY() * in[0].getZ() + out[1].getY() * in[1].getZ() + out[2].getY() * in[2].getZ();
824 
825  this->a20 = out[0].getZ() * in[0].getX() + out[1].getZ() * in[1].getX() + out[2].getZ() * in[2].getX();
826  this->a21 = out[0].getZ() * in[0].getY() + out[1].getZ() * in[1].getY() + out[2].getZ() * in[2].getY();
827  this->a22 = out[0].getZ() * in[0].getZ() + out[1].getZ() * in[1].getZ() + out[2].getZ() * in[2].getZ();
828 
829  } else {
830 
831  THROW(JException, "Module " << first.getID() << " size " << N << " < " << NUMBER_OF_DIMENSIONS);
832  }
833 
834  } else {
835 
836  THROW(JException, "Module " << first.getID() << " size " << first.size() << " != " << second.size());
837  }
838 
839  return *this;
840  }
General exception.
Definition: JException.hh:23
const JDirection3D & getDirection() const
Get direction.
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:696
then JShowerPostfit f $INPUT_FILE o $OUTPUT_FILE N
int getID() const
Get identifier.
Definition: JObjectID.hh:50
const JPMT & getPMT(const int index) const
Get PMT.
Definition: JModule.hh:173
static const size_t NUMBER_OF_DIMENSIONS
Number of dimensions.
std::vector< JVector3D > in
JMatrix3D & setIdentity()
Set to identity matrix.
std::vector< JVector3D > out
bool orthonormalise(const size_t index, const double precision=std::numeric_limits< double >::epsilon())
Put normalised primary direction at specified index and orthoganilise following directions.
bool JDETECTOR::JRotation::orthonormalise ( const size_t  index,
const double  precision = std::numeric_limits<double>::epsilon() 
)
inlineprivate

Put normalised primary direction at specified index and orthoganilise following directions.


This procedure follows Gram-Schmidt process.

Parameters
indexindex
precisionprecision
Returns
true if primary direction exists; else false

Definition at line 851 of file JDetectorToolkit.hh.

852  {
853  using namespace std;
854 
855  size_t pos = index;
856 
857  for (size_t i = index + 1; i != in.size(); ++i) {
858  if (in[i].getLengthSquared() > in[pos].getLengthSquared()) {
859  pos = i;
860  }
861  }
862 
863  const double u = in[pos].getLength();
864 
865  if (u > precision) {
866 
867  in [pos] /= u;
868  out[pos] /= u;
869 
870  if (pos != index) {
871  swap(in [pos], in [index]);
872  swap(out[pos], out[index]);
873  }
874 
875  for (size_t i = index + 1; i != in.size(); ++i) {
876 
877  const double dot = in[index].getDot(in[i]);
878 
879  in [i] -= dot * in [index];
880  out[i] -= dot * out[index];
881  }
882 
883  return true;
884 
885  } else {
886 
887  return false;
888  }
889  }
std::vector< JVector3D > in
double u[N+1]
Definition: JPolint.hh:776
std::vector< JVector3D > out
const JRotation3D& JGEOMETRY3D::JRotation3D::getRotation ( ) const
inlineinherited

Get rotation.

Returns
rotation

Definition at line 272 of file JRotation3D.hh.

273  {
274  return static_cast<const JRotation3D&>(*this);
275  }
Rotation matrix.
Definition: JRotation3D.hh:111
JGEOMETRY3D::JRotation3D::operator JQuaternion3D ( ) const
inlineinherited

Type conversion operator.

Returns
quaternion

Definition at line 283 of file JRotation3D.hh.

284  {
285  const double q2 = 0.25 * (1.0 + a00 + a11 + a22);
286 
287  if (q2 > 0.0) {
288 
289  const double a = sqrt(q2);
290  const double w = 0.25 / a;
291  const double b = (a21 - a12) * w;
292  const double c = (a02 - a20) * w;
293  const double d = (a10 - a01) * w;
294 
295  return JQuaternion3D(a,b,c,d).normalise();
296  }
297 
298  return JQuaternion3D(1.0, 0.0, 0.0, 0.0);
299  }
data_type w[N+1][M+1]
Definition: JPolint.hh:778
then JCalibrateToT a
Definition: JTuneHV.sh:116
Data structure for unit quaternion in three dimensions.
$WORKDIR ev_configure_dqsimulator txt echo process $DQ_SIMULATOR $i $SOURCE_HOST[$index] csh c(setenv ROOTSYS $ROOTSYS &&source $JPP_DIR/setenv.csh $JPP_DIR &&($DQ_SIMULATOR\-u\$NAME\$\-H\$SERVER\$\-M\$LOGGER\$\-d $DEBUG</dev/null > &/dev/null &))'
then JMuonMCEvt f $INPUT_FILE o $INTERMEDIATE_FILE d
Definition: JMuonPath.sh:47
JQuaternion3D & normalise()
Normalise quaternion.
JRotation3D& JGEOMETRY3D::JRotation3D::transpose ( )
inlineinherited

Transpose.

Definition at line 305 of file JRotation3D.hh.

306  {
307  static_cast<JMatrix3D&>(*this).transpose();
308 
309  return *this;
310  }
JMatrix3D()
Default constructor.
JRotation3D& JGEOMETRY3D::JRotation3D::mul ( const JRotation3D A,
const JRotation3D B 
)
inlineinherited

Matrix multiplication.

Parameters
Amatrix
Bmatrix
Returns
this matrix

Definition at line 320 of file JRotation3D.hh.

322  {
323  static_cast<JMatrix3D&>(*this).mul(A, B);
324 
325  return *this;
326  }
JMatrix3D()
Default constructor.
JMatrix3D& JMATH::JMatrix3D::mul ( const double  factor)
inlineinherited

Scale matrix.

Parameters
factorfactor
Returns
this matrix * factor

Definition at line 208 of file JMath/JMatrix3D.hh.

209  {
210  a00 *= factor; a01 *= factor; a02 *= factor;
211  a10 *= factor; a11 *= factor; a12 *= factor;
212  a20 *= factor; a21 *= factor; a22 *= factor;
213 
214  return *this;
215  }
JMatrix3D& JMATH::JMatrix3D::mul ( const JMatrix3D A,
const JMatrix3D B 
)
inlineinherited

Matrix multiplication.

Parameters
Amatrix
Bmatrix
Returns
this matrix

Definition at line 241 of file JMath/JMatrix3D.hh.

243  {
244  a00 = A.a00 * B.a00 + A.a01 * B.a10 + A.a02 * B.a20;
245  a01 = A.a00 * B.a01 + A.a01 * B.a11 + A.a02 * B.a21;
246  a02 = A.a00 * B.a02 + A.a01 * B.a12 + A.a02 * B.a22;
247 
248  a10 = A.a10 * B.a00 + A.a11 * B.a10 + A.a12 * B.a20;
249  a11 = A.a10 * B.a01 + A.a11 * B.a11 + A.a12 * B.a21;
250  a12 = A.a10 * B.a02 + A.a11 * B.a12 + A.a12 * B.a22;
251 
252  a20 = A.a20 * B.a00 + A.a21 * B.a10 + A.a22 * B.a20;
253  a21 = A.a20 * B.a01 + A.a21 * B.a11 + A.a22 * B.a21;
254  a22 = A.a20 * B.a02 + A.a21 * B.a12 + A.a22 * B.a22;
255 
256  return *this;
257  }
JMatrix3D & JMATH::JMath< JMatrix3D , JNullType >::mul ( const JNullType object)
inlineinherited

Multiply with object.

Parameters
objectobject
Returns
result object

Definition at line 354 of file JMath.hh.

355  {
356  return static_cast<JFirst_t&>(*this) = JFirst_t().mul(static_cast<const JFirst_t&>(*this), object);
357  }
template<class JFirst_t, class JSecond_t = JNullType>
JFirst_t& JMATH::JMath< JFirst_t, JSecond_t >::mul ( const JSecond_t &  object)
inlineinherited

Multiply with object.

Parameters
objectobject
Returns
result object

Definition at line 354 of file JMath.hh.

355  {
356  return static_cast<JFirst_t&>(*this) = JFirst_t().mul(static_cast<const JFirst_t&>(*this), object);
357  }
void JGEOMETRY3D::JRotation3D::rotate ( double &  __x,
double &  __y,
double &  __z 
) const
inlineinherited

Rotate.

Parameters
__xx value
__yy value
__zz value

Definition at line 336 of file JRotation3D.hh.

337  {
338  const double x = a00 * __x + a01 * __y + a02 * __z;
339  const double y = a10 * __x + a11 * __y + a12 * __z;
340  const double z = a20 * __x + a21 * __y + a22 * __z;
341 
342  __x = x;
343  __y = y;
344  __z = z;
345  }
void JGEOMETRY3D::JRotation3D::rotate_back ( double &  __x,
double &  __y,
double &  __z 
) const
inlineinherited

Rotate back.

Parameters
__xx value
__yy value
__zz value

Definition at line 355 of file JRotation3D.hh.

356  {
357  const double x = a00 * __x + a10 * __y + a20 * __z;
358  const double y = a01 * __x + a11 * __y + a21 * __z;
359  const double z = a02 * __x + a12 * __y + a22 * __z;
360 
361  __x = x;
362  __y = y;
363  __z = z;
364  }
static const JMatrix3D& JMATH::JMatrix3D::getInstance ( )
inlinestaticinherited

Get reference to unique instance of this class object.

Returns
zero matrix

Definition at line 78 of file JMath/JMatrix3D.hh.

79  {
80  static JMatrix3D matrix;
81 
82  return matrix;
83  }
3 x 3 matrix
JMatrix3D& JMATH::JMatrix3D::setIdentity ( )
inlineinherited

Set to identity matrix.

Returns
this matrix

Definition at line 91 of file JMath/JMatrix3D.hh.

92  {
93  a00 = 1.0; a01 = 0.0; a02 = 0.0;
94  a10 = 0.0; a11 = 1.0; a12 = 0.0;
95  a20 = 0.0; a21 = 0.0; a22 = 1.0;
96 
97  return *this;
98  }
static const JMatrix3D& JMATH::JMatrix3D::getIdentity ( )
inlinestaticinherited

Get reference to unique instance of this class object.

Returns
identity matrix

Definition at line 106 of file JMath/JMatrix3D.hh.

107  {
108  static JMatrix3D matrix(JMatrix3D().setIdentity());
109 
110  return matrix;
111  }
JMatrix3D()
Default constructor.
3 x 3 matrix
JMatrix3D & setIdentity()
Set to identity matrix.
void JMATH::JMatrix3D::set ( const JMatrix3D A)
inlineinherited

Set matrix.

Parameters
Amatrix

Definition at line 119 of file JMath/JMatrix3D.hh.

120  {
121  static_cast<JMatrix3D&>(*this) = A;
122  }
3 x 3 matrix
source $JPP_DIR setenv csh $JPP_DIR &dev null eval JShellParser o a A
JMatrix3D& JMATH::JMatrix3D::reset ( )
inlineinherited

Set matrix to the null matrix.

Returns
this matrix

Definition at line 130 of file JMath/JMatrix3D.hh.

131  {
132  *this = JMatrix3D();
133 
134  return *this;
135  }
JMatrix3D()
Default constructor.
JMatrix3D& JMATH::JMatrix3D::negate ( )
inlineinherited

Negate matrix.

Returns
-this matrix

Definition at line 160 of file JMath/JMatrix3D.hh.

161  {
162  a00 = -a00; a01 = -a01; a02 = -a02;
163  a10 = -a10; a11 = -a11; a12 = -a12;
164  a20 = -a20; a21 = -a21; a22 = -a22;
165 
166  return *this;
167  }
JMatrix3D& JMATH::JMatrix3D::add ( const JMatrix3D A)
inlineinherited

Matrix addition.

Parameters
Amatrix
Returns
this matrix + A

Definition at line 176 of file JMath/JMatrix3D.hh.

177  {
178  a00 += A.a00; a01 += A.a01; a02 += A.a02;
179  a10 += A.a10; a11 += A.a11; a12 += A.a12;
180  a20 += A.a20; a21 += A.a21; a22 += A.a22;
181 
182  return *this;
183  }
JMatrix3D& JMATH::JMatrix3D::sub ( const JMatrix3D A)
inlineinherited

Matrix subtraction.

Parameters
Amatrix
Returns
this matrix - A

Definition at line 192 of file JMath/JMatrix3D.hh.

193  {
194  a00 -= A.a00; a01 -= A.a01; a02 -= A.a02;
195  a10 -= A.a10; a11 -= A.a11; a12 -= A.a12;
196  a20 -= A.a20; a21 -= A.a21; a22 -= A.a22;
197 
198  return *this;
199  }
JMatrix3D& JMATH::JMatrix3D::div ( const double  factor)
inlineinherited

Scale matrix.

Parameters
factorfactor
Returns
this matrix / factor

Definition at line 224 of file JMath/JMatrix3D.hh.

225  {
226  a00 /= factor; a01 /= factor; a02 /= factor;
227  a10 /= factor; a11 /= factor; a12 /= factor;
228  a20 /= factor; a21 /= factor; a22 /= factor;
229 
230  return *this;
231  }
bool JMATH::JMatrix3D::equals ( const JMatrix3D A,
const double  eps = std::numeric_limits<double>::min() 
) const
inlineinherited

Equality.

Parameters
Amatrix
epsnumerical precision
Returns
true if matrices identical; else false

Definition at line 267 of file JMath/JMatrix3D.hh.

269  {
270  return (fabs(a00 - A.a00) <= eps &&
271  fabs(a01 - A.a01) <= eps &&
272  fabs(a02 - A.a02) <= eps &&
273  fabs(a10 - A.a10) <= eps &&
274  fabs(a11 - A.a11) <= eps &&
275  fabs(a12 - A.a12) <= eps &&
276  fabs(a20 - A.a20) <= eps &&
277  fabs(a21 - A.a21) <= eps &&
278  fabs(a22 - A.a22) <= eps);
279  }
bool JMATH::JMatrix3D::isIdentity ( const double  eps = std::numeric_limits<double>::min()) const
inlineinherited

Test identity.

Parameters
epsnumerical precision
Returns
true if identity matrix; else false

Definition at line 288 of file JMath/JMatrix3D.hh.

289  {
290  return equals(getIdentity(), eps);
291  }
static const JMatrix3D & getIdentity()
Get reference to unique instance of this class object.
bool equals(const JMatrix3D &A, const double eps=std::numeric_limits< double >::min()) const
Equality.
double JMATH::JMatrix3D::getDeterminant ( ) const
inlineinherited

Get determinant of matrix.

Returns
determinant of matrix

Definition at line 299 of file JMath/JMatrix3D.hh.

300  {
301  double det = 0.0;
302 
303  det += a00 * (a11 * a22 - a21 * a12);
304  det -= a01 * (a10 * a22 - a20 * a12);
305  det += a02 * (a10 * a21 - a20 * a11);
306 
307  return det;
308  }
void JMATH::JMatrix3D::transform ( double &  __x,
double &  __y,
double &  __z 
) const
inlineinherited

Transform.

Parameters
__xx value
__yy value
__zz value

Definition at line 318 of file JMath/JMatrix3D.hh.

319  {
320  const double x = a00 * __x + a01 * __y + a02 * __z;
321  const double y = a10 * __x + a11 * __y + a12 * __z;
322  const double z = a20 * __x + a21 * __y + a22 * __z;
323 
324  __x = x;
325  __y = y;
326  __z = z;
327  }

Member Data Documentation

const size_t JDETECTOR::JRotation::NUMBER_OF_DIMENSIONS = 3
static

Number of dimensions.

Definition at line 783 of file JDetectorToolkit.hh.

std::vector<JVector3D> JDETECTOR::JRotation::in
private

Definition at line 892 of file JDetectorToolkit.hh.

std::vector<JVector3D> JDETECTOR::JRotation::out
private

Definition at line 893 of file JDetectorToolkit.hh.

double JMATH::JMatrix3D::a00
inherited

Definition at line 385 of file JMath/JMatrix3D.hh.

double JMATH::JMatrix3D::a01
inherited

Definition at line 385 of file JMath/JMatrix3D.hh.

double JMATH::JMatrix3D::a02
inherited

Definition at line 385 of file JMath/JMatrix3D.hh.

double JMATH::JMatrix3D::a10
inherited

Definition at line 386 of file JMath/JMatrix3D.hh.

double JMATH::JMatrix3D::a11
inherited

Definition at line 386 of file JMath/JMatrix3D.hh.

double JMATH::JMatrix3D::a12
inherited

Definition at line 386 of file JMath/JMatrix3D.hh.

double JMATH::JMatrix3D::a20
inherited

Definition at line 387 of file JMath/JMatrix3D.hh.

double JMATH::JMatrix3D::a21
inherited

Definition at line 387 of file JMath/JMatrix3D.hh.

double JMATH::JMatrix3D::a22
inherited

Definition at line 387 of file JMath/JMatrix3D.hh.


The documentation for this struct was generated from the following file: