57int compare(
double v1,
double v2,
const char*
name,
double Scale = 1.0) {
61 double eps = Scale* 2.22044604925031308e-16;
63 double delta =
v2 -
v1;
65 if (delta < 0 ) delta = - delta;
66 if (
v1 == 0 ||
v2 == 0) {
77 if ( delta/
d > eps && delta > eps )
84 int pr = std::cout.precision (18);
87 discr =
int(delta/
d/eps);
89 discr =
int(delta/eps);
91 std::cout <<
"\nDiscrepancy in " <<
name <<
"() : " <<
v1 <<
" != " <<
v2 <<
" discr = " << discr
92 <<
" (Allowed discrepancy is " << eps <<
")\n";
93 std::cout.precision (pr);
100 std::cout <<
"\n************************************************************************\n "
102 <<
"\n************************************************************************\n";
106 std::cout <<
"Test Cartesian-Polar : " ;
111 ok+= compare(
v1.X(),
v2.X(),
"x");
112 ok+= compare(
v1.Y(),
v2.Y(),
"y");
113 ok+= compare(
v1.Z(),
v2.Z(),
"z");
114 ok+= compare(
v1.Phi(),
v2.Phi(),
"phi");
115 ok+= compare(
v1.Theta(),
v2.Theta(),
"theta");
116 ok+= compare(
v1.R(),
v2.R(),
"r");
117 ok+= compare(
v1.Eta(),
v2.Eta(),
"eta");
118 ok+= compare(
v1.Rho(),
v2.Rho(),
"rho");
120 if (ok == 0) std::cout <<
"\t OK " << std::endl;
122 std::cout <<
"Test Cartesian-CylindricalEta : ";
127 ok+= compare(
v1.X(),
v3.X(),
"x");
128 ok+= compare(
v1.Y(),
v3.Y(),
"y");
129 ok+= compare(
v1.Z(),
v3.Z(),
"z");
130 ok+= compare(
v1.Phi(),
v3.Phi(),
"phi");
131 ok+= compare(
v1.Theta(),
v3.Theta(),
"theta");
132 ok+= compare(
v1.R(),
v3.R(),
"r");
133 ok+= compare(
v1.Eta(),
v3.Eta(),
"eta");
134 ok+= compare(
v1.Rho(),
v3.Rho(),
"rho");
136 if (ok == 0) std::cout <<
"\t OK " << std::endl;
138 std::cout <<
"Test Cartesian-Cylindrical : ";
143 ok+= compare(
v1.X(),
v4.X(),
"x");
144 ok+= compare(
v1.Y(),
v4.Y(),
"y");
145 ok+= compare(
v1.Z(),
v4.Z(),
"z");
146 ok+= compare(
v1.Phi(),
v4.Phi(),
"phi");
147 ok+= compare(
v1.Theta(),
v4.Theta(),
"theta");
148 ok+= compare(
v1.R(),
v4.R(),
"r");
149 ok+= compare(
v1.Eta(),
v4.Eta(),
"eta");
150 ok+= compare(
v1.Rho(),
v4.Rho(),
"rho");
152 if (ok == 0) std::cout <<
"\t OK " << std::endl;
154 std::cout <<
"Test Operations : " ;
158 ok+= compare(
Dot,
v1.Mag2(),
"dot" );
160 ok+= compare( vcross.
R(), 0,
"cross" );
164 ok+= compare(
v1.R(), vscale2.
R(),
"scale");
167 ok+= compare(
v2.Phi(),vu.
Phi(),
"unit Phi");
168 ok+= compare(
v2.Theta(),vu.
Theta(),
"unit Theta");
169 ok+= compare(1.0,vu.
R(),
"unit ");
177 ok+= compare( q4.
X(), q1.
X(),
"op X" );
178 ok+= compare( q4.
Y(), q1.
Y(),
"op Y" );
179 ok+= compare( q4.
Z(), q1.
Z(),
"op Z" );
186 ok+= compare( w1 ==
v1,
static_cast<double>(
true),
"== XYZ");
187 ok+= compare( w2 ==
v2,
static_cast<double>(
true),
"== Polar");
188 ok+= compare( w3 ==
v3,
static_cast<double>(
true),
"== RhoEtaPhi");
189 ok+= compare( w4 ==
v4,
static_cast<double>(
true),
"== RhoZPhi");
191 if (ok == 0) std::cout <<
"\t OK " << std::endl;
194 std::cout <<
"Test Setters : " ;
196 q2.SetXYZ(q1.
X(), q1.
Y(), q1.
Z() );
198 ok+= compare( q2.X(), q1.
X(),
"setXYZ X" );
199 ok+= compare( q2.Y(), q1.
Y(),
"setXYZ Y" );
200 ok+= compare( q2.Z(), q1.
Z(),
"setXYZ Z" );
202 q2.SetCoordinates( 2.0*q1.
Rho(), q1.
Eta(), q1.
Phi() );
204 ok+= compare( q2.X(), q1s.
X(),
"set X" );
205 ok+= compare( q2.Y(), q1s.
Y(),
"set Y" );
206 ok+= compare( q2.Z(), q1s.
Z(),
"set Z" );
208 if (ok == 0) std::cout <<
"\t\t OK " << std::endl;
210 std::cout <<
"Test Linear Algebra conversion: " ;
215 vxyz1.Coordinates().GetCoordinates(vla1.GetMatrixArray() );
218 vla2[0] = 1.; vla2[1] = -2.; vla2[2] = 1.;
224 double prod1 = vxyz1.Dot(vxyz2);
225 double prod2 = vla1*vla2;
226 ok+= compare( prod1, prod2,
"la test" );
228 if (ok == 0) std::cout <<
"\t\t OK " << std::endl;
234 std::cout <<
"\n************************************************************************\n "
236 <<
"\n************************************************************************\n";
240 std::cout <<
"Test Cartesian-Polar : ";
245 ok+= compare(p1.x(), p2.X(),
"x");
246 ok+= compare(p1.y(), p2.Y(),
"y");
247 ok+= compare(p1.z(), p2.Z(),
"z");
248 ok+= compare(p1.phi(), p2.Phi(),
"phi");
249 ok+= compare(p1.theta(), p2.Theta(),
"theta");
250 ok+= compare(p1.r(), p2.R(),
"r");
251 ok+= compare(p1.eta(), p2.Eta(),
"eta");
252 ok+= compare(p1.rho(), p2.Rho(),
"rho");
254 if (ok == 0) std::cout <<
"\t OK " << std::endl;
256 std::cout <<
"Test Polar-CylindricalEta : ";
261 ok+= compare(p2.X(), p3.X(),
"x");
262 ok+= compare(p2.Y(), p3.Y(),
"y");
263 ok+= compare(p2.Z(), p3.Z(),
"z",3);
264 ok+= compare(p2.Phi(), p3.Phi(),
"phi");
265 ok+= compare(p2.Theta(), p3.Theta(),
"theta");
266 ok+= compare(p2.R(), p3.R(),
"r");
267 ok+= compare(p2.Eta(), p3.Eta(),
"eta");
268 ok+= compare(p2.Rho(), p3.Rho(),
"rho");
270 if (ok == 0) std::cout <<
"\t OK " << std::endl;
272 std::cout <<
"Test operations : ";
276 double Dot = p1.Dot(vperp);
277 ok+= compare(
Dot, 0.0,
"dot", 10 );
280 ok+= compare( vcross.
R(), p1.R(),
"cross mag" );
281 ok+= compare( vcross.
Dot(vperp), 0.0,
"cross dir" );
285 ok+= compare( p1.R(), pscale2.
R(),
"scale");
288 ok+= compare( p1 == pscale2,
static_cast<double>(
true),
"== Point");
296 if (ok == 0) std::cout <<
"\t OK " << std::endl;
301int testLorentzVector() {
302 std::cout <<
"\n************************************************************************\n "
303 <<
" Lorentz Vector Tests"
304 <<
"\n************************************************************************\n";
308 std::cout <<
"Test XYZT - PtEtaPhiE Vectors: ";
313 ok+= compare(
v1.Px(),
v2.X(),
"x");
314 ok+= compare(
v1.Py(),
v2.Y(),
"y");
315 ok+= compare(
v1.Pz(),
v2.Z(),
"z", 2);
316 ok+= compare(
v1.E(),
v2.T(),
"e");
317 ok+= compare(
v1.Phi(),
v2.Phi(),
"phi");
318 ok+= compare(
v1.Theta(),
v2.Theta(),
"theta");
319 ok+= compare(
v1.Pt(),
v2.Pt(),
"pt");
320 ok+= compare(
v1.M(),
v2.M(),
"mass", 5);
321 ok+= compare(
v1.Et(),
v2.Et(),
"et");
322 ok+= compare(
v1.Mt(),
v2.Mt(),
"mt", 3);
324 if (ok == 0) std::cout <<
"\t OK " << std::endl;
326 std::cout <<
"Test XYZT - PtEtaPhiM Vectors: ";
331 ok+= compare(
v1.Px(),
v3.X(),
"x");
332 ok+= compare(
v1.Py(),
v3.Y(),
"y");
333 ok+= compare(
v1.Pz(),
v3.Z(),
"z", 2);
334 ok+= compare(
v1.E(),
v3.T(),
"e");
335 ok+= compare(
v1.Phi(),
v3.Phi(),
"phi");
336 ok+= compare(
v1.Theta(),
v3.Theta(),
"theta");
337 ok+= compare(
v1.Pt(),
v3.Pt(),
"pt");
338 ok+= compare(
v1.M(),
v3.M(),
"mass", 5);
339 ok+= compare(
v1.Et(),
v3.Et(),
"et");
340 ok+= compare(
v1.Mt(),
v3.Mt(),
"mt", 3);
342 if (ok == 0) std::cout <<
"\t OK " << std::endl;
344 std::cout <<
"Test PtEtaPhiE - PxPyPzM Vect.: ";
349 ok+= compare(
v4.Px(),
v3.X(),
"x");
350 ok+= compare(
v4.Py(),
v3.Y(),
"y");
351 ok+= compare(
v4.Pz(),
v3.Z(),
"z",2);
352 ok+= compare(
v4.E(),
v3.T(),
"e");
353 ok+= compare(
v4.Phi(),
v3.Phi(),
"phi");
354 ok+= compare(
v4.Theta(),
v3.Theta(),
"theta");
355 ok+= compare(
v4.Pt(),
v3.Pt(),
"pt");
356 ok+= compare(
v4.M(),
v3.M(),
"mass",5);
357 ok+= compare(
v4.Et(),
v3.Et(),
"et");
358 ok+= compare(
v4.Mt(),
v3.Mt(),
"mt",3);
360 if (ok == 0) std::cout <<
"\t OK " << std::endl;
362 std::cout <<
"Test operations : ";
366 ok+= compare(
Dot,
v1.M2(),
"dot" , 10 );
370 ok+= compare(
v1.M(), vscale2.
M(),
"scale");
378 ok+= compare( q4.
x(), q1.
X(),
"op X" );
379 ok+= compare( q4.
y(), q1.
Y(),
"op Y" );
380 ok+= compare( q4.
z(), q1.
Z(),
"op Z" );
381 ok+= compare( q4.
t(), q1.
E(),
"op E" );
388 ok+= compare( w1 ==
v1,
static_cast<double>(
true),
"== PxPyPzE");
389 ok+= compare( w2 ==
v2,
static_cast<double>(
true),
"== PtEtaPhiE");
390 ok+= compare( w3 ==
v3,
static_cast<double>(
true),
"== PtEtaPhiM");
391 ok+= compare( w4 ==
v4,
static_cast<double>(
true),
"== PxPyPzM");
398 ok += compare(
b.R(),
beta,
"beta" );
399 ok += compare( gamma, 1./
sqrt( 1 -
beta*
beta ),
"gamma");
401 if (ok == 0) std::cout <<
"\t OK " << std::endl;
404 std::cout <<
"Test Setters : " ;
406 q2.SetXYZT(q1.
Px(), q1.
Py(), q1.
Pz(), q1.
E() );
408 ok+= compare( q2.X(), q1.
X(),
"setXYZT X" );
409 ok+= compare( q2.Y(), q1.
Y(),
"setXYZT Y" );
410 ok+= compare( q2.Z(), q1.
Z(),
"setXYZT Z" ,2);
411 ok+= compare( q2.T(), q1.
E(),
"setXYZT E" );
413 q2.SetCoordinates( 2.0*q1.
Rho(), q1.
Eta(), q1.
Phi(), 2.0*q1.
E() );
415 ok+= compare( q2.X(), q1s.
X(),
"set X" );
416 ok+= compare( q2.Y(), q1s.
Y(),
"set Y" );
417 ok+= compare( q2.Z(), q1s.
Z(),
"set Z" ,2);
418 ok+= compare( q2.T(), q1s.
T(),
"set E" );
420 if (ok == 0) std::cout <<
"\t OK " << std::endl;
425int testVectorUtil() {
426 std::cout <<
"\n************************************************************************\n "
427 <<
" Utility Function Tests"
428 <<
"\n************************************************************************\n";
430 std::cout <<
"Test Vector utility functions : ";
449 if (ok == 0) std::cout <<
"\t\t OK " << std::endl;
452 std::cout <<
"Test Point utility functions : ";
470 if (ok == 0) std::cout <<
"\t\t OK " << std::endl;
472 std::cout <<
"LorentzVector utility funct.: ";
485 if (ok == 0) std::cout <<
"\t\t OK " << std::endl;
491 std::cout <<
"\n************************************************************************\n "
492 <<
" Rotation and Transformation Tests"
493 <<
"\n************************************************************************\n";
495 std::cout <<
"Test Vector Rotations : ";
515 ok+= compare(
v1.X(),
v2.X(),
"x",2);
516 ok+= compare(
v1.Y(),
v2.Y(),
"y",2);
517 ok+= compare(
v1.Z(),
v2.Z(),
"z",2);
519 ok+= compare(
v1.X(),
v3.X(),
"x",2);
520 ok+= compare(
v1.Y(),
v3.Y(),
"y",2);
521 ok+= compare(
v1.Z(),
v3.Z(),
"z",2);
523 ok+= compare(
v1.X(),
v4.X(),
"x",5);
524 ok+= compare(
v1.Y(),
v4.Y(),
"y",5);
525 ok+= compare(
v1.Z(),
v4.Z(),
"z",5);
527 ok+= compare(
v1.X(),
v5.X(),
"x",2);
528 ok+= compare(
v1.Y(),
v5.Y(),
"y",2);
529 ok+= compare(
v1.Z(),
v5.Z(),
"z",2);
533 r2.GetComponents(rdata, rdata+9);
536 v.GetCoordinates(vdata);
543 ok+= compare(
v1.X(), v6.
X(),
"x");
544 ok+= compare(
v1.Y(), v6.
Y(),
"y");
545 ok+= compare(
v1.Z(), v6.
Z(),
"z");
547 if (ok == 0) std::cout <<
"\t OK " << std::endl;
548 else std::cout << std::endl;
550 std::cout <<
"Test Axial Rotations : ";
565 RotationZYX rzyx( rz.Angle(), ry.Angle(), rx.Angle() );
570 ok+= compare(vrot1.
X(), vrot2.
X(),
"x");
571 ok+= compare(vrot1.
Y(), vrot2.
Y(),
"y");
572 ok+= compare(vrot1.
Z(), vrot2.
Z(),
"z");
574 vrot2 = qx * qy * qz *
v;
576 ok+= compare(vrot1.
X(), vrot2.
X(),
"x",2);
577 ok+= compare(vrot1.
Y(), vrot2.
Y(),
"y",2);
578 ok+= compare(vrot1.
Z(), vrot2.
Z(),
"z",2);
582 ok+= compare(vrot1.
X(), vrot2.
X(),
"x");
583 ok+= compare(vrot1.
Y(), vrot2.
Y(),
"y");
584 ok+= compare(vrot1.
Z(), vrot2.
Z(),
"z");
587 vrot1 = rz * ry * rx *
v;
588 vrot2 = r3z * r3y * r3x *
v;
590 ok+= compare(vrot1.
X(), vrot2.
X(),
"x");
591 ok+= compare(vrot1.
Y(), vrot2.
Y(),
"y");
592 ok+= compare(vrot1.
Z(), vrot2.
Z(),
"z");
594 XYZPoint vinv1 = rx.Inverse()*ry.Inverse()*rz.Inverse()*vrot1;
596 ok+= compare(vinv1.
X(),
v.X(),
"x",2);
597 ok+= compare(vinv1.
Y(),
v.Y(),
"y");
598 ok+= compare(vinv1.
Z(),
v.Z(),
"z");
600 if (ok == 0) std::cout <<
"\t OK " << std::endl;
601 else std::cout << std::endl;
604 std::cout <<
"Test Rotations by a PI angle : ";
607 double b[4] = { 6,8,10,3.14159265358979323 };
611 ok+= compare(arPi.Axis().X(), a1.
Axis().
X(),
"x");
612 ok+= compare(arPi.Axis().Y(), a1.
Axis().
Y(),
"y");
613 ok+= compare(arPi.Axis().Z(), a1.
Axis().
Z(),
"z");
614 ok+= compare(arPi.Angle(), a1.
Angle(),
"angle");
618 ok+= compare(ePi.
Phi(), e1.
Phi(),
"phi");
619 ok+= compare(ePi.
Theta(), e1.
Theta(),
"theta");
620 ok+= compare(ePi.
Psi(), e1.
Psi(),
"ps1");
622 if (ok == 0) std::cout <<
"\t\t OK " << std::endl;
623 else std::cout << std::endl;
625 std::cout <<
"Test Inversions : ";
637 ok+= compare(p.
X(),
v.X(),
"x",10);
638 ok+= compare(p.
Y(),
v.Y(),
"y",10);
639 ok+= compare(p.
Z(),
v.Z(),
"z",10);
644 ok+= compare(p.
X(),
v.X(),
"x",10);
645 ok+= compare(p.
Y(),
v.Y(),
"y",10);
646 ok+= compare(p.
Z(),
v.Z(),
"z",10);
650 ok+= compare(p.
X(),
v.X(),
"x",1E9);
651 ok+= compare(p.
Y(),
v.Y(),
"y",1E9);
652 ok+= compare(p.
Z(),
v.Z(),
"z",1E9);
656 ok+= compare(p.
X(),
v.X(),
"x",10);
657 ok+= compare(p.
Y(),
v.Y(),
"y",10);
658 ok+= compare(p.
Z(),
v.Z(),
"z",10);
666 ok+= compare(p.
X(),
v.X(),
"x",10);
667 ok+= compare(p.
Y(),
v.Y(),
"y",10);
668 ok+= compare(p.
Z(),
v.Z(),
"z",10);
670 if (ok == 0) std::cout <<
"\t OK " << std::endl;
671 else std::cout << std::endl;
674 std::cout <<
"Test rectify : ";
677 XYZVector u1(0.999498,-0.00118212,-0.0316611);
679 XYZVector u3(0.0316832,0.0372921,0.998802);
683 ok+= compare(
v.R(), vrr.
R(),
"R",1.E9);
685 if (ok == 0) std::cout <<
"\t\t OK " << std::endl;
686 else std::cout << std::endl;
688 std::cout <<
"Test Transform3D : ";
698 ok+= compare(pd.
X(), vd.
X(),
"x");
699 ok+= compare(pd.
Y(), vd.
Y(),
"y");
700 ok+= compare(pd.
Z(), vd.
Z(),
"z");
704 t.GetComponents(tdata);
707 v.GetCoordinates(vData);
713 ok+= compare(pd.
X(), qt(0),
"x");
714 ok+= compare(pd.
Y(), qt(1),
"y");
715 ok+= compare(pd.
Z(), qt(2),
"z");
723 ok+= compare(p.
X(),
v.X(),
"x",10);
724 ok+= compare(p.
Y(),
v.Y(),
"y",10);
725 ok+= compare(p.
Z(),
v.Z(),
"z",10);
729 Transform3D tinv2 ( r2.Inverse(), r2.Inverse() *( -
d) ) ;
732 ok+= compare(p.
X(),
v.X(),
"x",10);
733 ok+= compare(p.
Y(),
v.Y(),
"y",10);
734 ok+= compare(p.
Z(),
v.Z(),
"z",10);
742 ok+= compare( tc == tb*ta,
static_cast<double>(
true),
"== Rot*Tra");
743 ok+= compare( td == ta*tb,
static_cast<double>(
true),
"== Rot*Tra");
746 if (ok == 0) std::cout <<
"\t OK " << std::endl;
747 else std::cout << std::endl;
749 std::cout <<
"Test Plane3D : ";
761 ok+= compare(
n.Dot(p2-p1), 0.0,
"n.v12",10);
762 ok+= compare(
n.Dot(p3-p1), 0.0,
"n.v13",10);
763 ok+= compare(
n.Dot(p3-p2), 0.0,
"n.v23",10);
776 ok+= compare(n1.
X(), n2.
X(),
"a",10);
777 ok+= compare(n1.
Y(), n2.
Y(),
"b",10);
778 ok+= compare(n1.
Z(), n2.
Z(),
"c",10);
779 ok+= compare(plane1.
HesseDistance(), plane2.HesseDistance(),
"d",10);
782 ok += compare(plane1.
Distance(pt1), 0.0,
"distance",10);
784 if (ok == 0) std::cout <<
"\t OK " << std::endl;
785 else std::cout << std::endl;
787 std::cout <<
"Test LorentzRotation : ";
809 ok+= compare(lv1== lv2,
true,
"V0==V2");
810 ok+= compare(lv1== lv2,
true,
"V1==V2");
816 lv.GetCoordinates(lvData);
821 ok+= compare(lv1.
X(), qlr(0),
"x");
822 ok+= compare(lv1.
Y(), qlr(1),
"y");
823 ok+= compare(lv1.
Z(), qlr(2),
"z");
824 ok+= compare(lv1.
E(), qlr(3),
"t");
829 ok+= compare(lv0.
X(),
lv.X(),
"x");
830 ok+= compare(lv0.
Y(),
lv.Y(),
"y");
831 ok+= compare(lv0.
Z(),
lv.Z(),
"z");
832 ok+= compare(lv0.
E(),
lv.E(),
"t");
834 if (ok == 0) std::cout <<
"\t OK " << std::endl;
835 else std::cout << std::endl;
838 std::cout <<
"Test Boost : ";
841 Boost bst( 0.3,0.4,0.5);
850 ok+= compare(lvb.
X(), lvb2.
X(),
"x");
851 ok+= compare(lvb.
Y(), lvb2.
Y(),
"y");
852 ok+= compare(lvb.
Z(), lvb2.
Z(),
"z");
853 ok+= compare(lvb.
E(), lvb2.
E(),
"t");
854 ok+= compare(lvb.
M(),
lv.M(),
"m",50);
857 lv0 = bst.Inverse() * lvb;
859 ok+= compare(lv0.
X(),
lv.X(),
"x",5);
860 ok+= compare(lv0.
Y(),
lv.Y(),
"y",5);
861 ok+= compare(lv0.
Z(),
lv.Z(),
"z",3);
862 ok+= compare(lv0.
E(),
lv.E(),
"t",3);
865 bst.SetComponents( brest.
X(), brest.
Y(), brest.
Z() );
869 ok+= compare(lvr.
X(), 0.0,
"x",10);
870 ok+= compare(lvr.
Y(), 0.0,
"y",10);
871 ok+= compare(lvr.
Z(), 0.0,
"z",10);
872 ok+= compare(lvr.
M(),
lv.M(),
"m",10);
874 if (ok == 0) std::cout <<
"\t OK " << std::endl;
875 else std::cout << std::endl;
879void mathcoreGenVector() {
888 std::cout <<
"\n\nNumber of tests " << ntest <<
" failed = " << nfail << std::endl;
Double_t Dot(const TGLVector3 &v1, const TGLVector3 &v2)
TMatrixT< Double_t > TMatrixD
TVectorT< Double_t > TVectorD
AxisAngle class describing rotation represented with direction axis (3D Vector) and an angle of rotat...
AxisVector Axis() const
access to rotation axis
Scalar Angle() const
access to rotation angle
AxisAngle Inverse() const
Return inverse of an AxisAngle rotation.
Lorentz boost class with the (4D) transformation represented internally by a 4x4 orthosymplectic matr...
Scalar Theta() const
Polar theta, converting if necessary from internal coordinate system.
Scalar R() const
Polar R, converting if necessary from internal coordinate system.
Scalar X() const
Cartesian X, converting if necessary from internal coordinate system.
Scalar Y() const
Cartesian Y, converting if necessary from internal coordinate system.
DisplacementVector3D Cross(const DisplacementVector3D< OtherCoords, Tag > &v) const
Return vector (cross) product of two displacement vectors, as a vector in the coordinate system of th...
Scalar Rho() const
Cylindrical transverse component rho.
DisplacementVector3D< CoordSystem, Tag > & SetCoordinates(const Scalar src[])
Set internal data based on a C-style array of 3 Scalar numbers.
Scalar Phi() const
Polar phi, converting if necessary from internal coordinate system.
Scalar Eta() const
Polar eta, converting if necessary from internal coordinate system.
Scalar Z() const
Cartesian Z, converting if necessary from internal coordinate system.
EulerAngles class describing rotation as three angles (Euler Angles).
Scalar Psi() const
Return Psi Euler angle.
Scalar Theta() const
Return Theta Euler angle.
Scalar Phi() const
Return Phi Euler angle.
Vector Normal() const
Return normal vector to the plane as Cartesian DisplacementVector.
Scalar HesseDistance() const
Return the Hesse Distance (distance from the origin) of the plane or the d coefficient expressed in n...
Scalar Distance(const Point &p) const
Return the signed distance to a Point.
Lorentz transformation class with the (4D) transformation represented by a 4x4 orthosymplectic matrix...
LorentzRotation Inverse() const
Return inverse of a rotation.
void GetComponents(Foreign4Vector &v1, Foreign4Vector &v2, Foreign4Vector &v3, Foreign4Vector &v4) const
Get components into four 4-vectors which will be the (orthosymplectic) columns of the rotation matrix...
Scalar E() const
return 4-th component (time, or energy for a 4-momentum vector)
BetaVector BoostToCM() const
The beta vector for the boost that would bring this vector into its center of mass frame (zero moment...
Scalar M() const
return magnitude (mass) using the (-,-,-,+) metric.
Scalar Pt() const
return the transverse spatial component sqrt ( X**2 + Y**2 )
Scalar Beta() const
Return beta scalar value.
Scalar Eta() const
pseudorapidity
Scalar Py() const
spatial Y component
Scalar Pz() const
spatial Z component
Scalar Phi() const
azimuthal Angle
Scalar Gamma() const
Return Gamma scalar value.
Scalar Px() const
spatial X component
Scalar Y() const
Cartesian Y, converting if necessary from internal coordinate system.
Scalar Z() const
Cartesian Z, converting if necessary from internal coordinate system.
Scalar X() const
Cartesian X, converting if necessary from internal coordinate system.
PositionVector3D< CoordSystem, Tag > & SetCoordinates(const Scalar src[])
Set internal data based on a C-style array of 3 Scalar numbers.
Scalar Dot(const DisplacementVector3D< OtherCoords, Tag > &v) const
Return the scalar (Dot) product of this with a displacement vector in any coordinate system,...
Scalar R() const
Polar R, converting if necessary from internal coordinate system.
Rotation class with the (3D) rotation represented by a unit quaternion (u, i, j, k).
Quaternion Inverse() const
Return inverse of a rotation.
Rotation class with the (3D) rotation represented by a 3x3 orthogonal matrix.
Rotation3D Inverse() const
Return inverse of a rotation.
Rotation class representing a 3D rotation about the X axis by the angle of rotation.
Rotation class representing a 3D rotation about the Y axis by the angle of rotation.
Rotation class with the (3D) rotation represented by angles describing first a rotation of an angle p...
RotationZYX Inverse() const
Return inverse of a rotation.
Rotation class representing a 3D rotation about the Z axis by the angle of rotation.
Element * GetMatrixArray()
Vector1::Scalar DeltaR(const Vector1 &v1, const Vector2 &v2)
Find difference in pseudorapidity (Eta) and Phi between two generic vectors The only requirements on ...
Vector1::Scalar DeltaPhi(const Vector1 &v1, const Vector2 &v2)
Find aximutal Angle difference between two generic vectors ( v2.Phi() - v1.Phi() ) The only requireme...
double Angle(const Vector1 &v1, const Vector2 &v2)
Find Angle between two vectors.
double CosTheta(const Vector1 &v1, const Vector2 &v2)
Find CosTheta Angle between two generic 3D vectors pre-requisite: vectors implement the X(),...
Vector1::Scalar InvariantMass(const Vector1 &v1, const Vector2 &v2)
return the invariant mass of two LorentzVector The only requirement on the LorentzVector is that they...
double beta(double x, double y)
Calculates the beta function.
DisplacementVector3D< Cylindrical3D< double >, DefaultCoordinateSystemTag > RhoZPhiVector
3D Vector based on the cylindrical coordinates rho, z, phi in double precision.
LorentzVector< PtEtaPhiE4D< double > > PtEtaPhiEVector
LorentzVector based on the cylindrical coordinates Pt, eta, phi and E (rho, eta, phi,...
LorentzVector< PtEtaPhiM4D< double > > PtEtaPhiMVector
LorentzVector based on the cylindrical coordinates pt, eta, phi and Mass in double precision.
Impl::Plane3D< double > Plane3D
PositionVector3D< CylindricalEta3D< double >, DefaultCoordinateSystemTag > RhoEtaPhiPoint
3D Point based on the eta based cylindrical coordinates rho, eta, phi in double precision.
PositionVector3D< Cartesian3D< double >, DefaultCoordinateSystemTag > XYZPoint
3D Point based on the cartesian coordinates x,y,z in double precision
Impl::Transform3D< double > Transform3D
DisplacementVector3D< Cartesian3D< double >, DefaultCoordinateSystemTag > XYZVector
3D Vector based on the cartesian coordinates x,y,z in double precision
DisplacementVector3D< Polar3D< double >, DefaultCoordinateSystemTag > Polar3DVector
3D Vector based on the polar coordinates rho, theta, phi in double precision.
DisplacementVector3D< CylindricalEta3D< double >, DefaultCoordinateSystemTag > RhoEtaPhiVector
3D Vector based on the eta based cylindrical coordinates rho, eta, phi in double precision.
VecExpr< UnaryOp< Sqrt< T >, VecExpr< A, T, D >, T >, T, D > sqrt(const VecExpr< A, T, D > &rhs)
LorentzVector< PxPyPzM4D< double > > PxPyPzMVector
LorentzVector based on the x, y, z and Mass in double precision.
LorentzVector< PxPyPzE4D< double > > XYZTVector
LorentzVector based on x,y,z,t (or px,py,pz,E) coordinates in double precision with metric (-,...
PositionVector3D< Polar3D< double >, DefaultCoordinateSystemTag > Polar3DPoint
3D Point based on the polar coordinates rho, theta, phi in double precision.
constexpr Double_t PiOver2()