Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
PositionVector3D.h
Go to the documentation of this file.
1// @(#)root/mathcore:$Id$
2// Authors: W. Brown, M. Fischler, L. Moneta 2005
3
4 /**********************************************************************
5 * *
6 * Copyright (c) 2005 , LCG ROOT MathLib Team *
7 * *
8 * *
9 **********************************************************************/
10
11// Header file for class PositionVector3D
12//
13// Created by: Lorenzo Moneta at Mon May 30 15:25:04 2005
14//
15// Last update: $Id$
16//
17#ifndef ROOT_Math_GenVector_PositionVector3D
18#define ROOT_Math_GenVector_PositionVector3D 1
19
21
23
25
27
29
30
31#include <cassert>
32
33namespace ROOT {
34
35 namespace Math {
36
37
38//__________________________________________________________________________________________
39 /**
40 Class describing a generic position vector (point) in 3 dimensions.
41 This class is templated on the type of Coordinate system.
42 One example is the XYZPoint which is a vector based on
43 double precision x,y,z data members by using the
44 ROOT::Math::Cartesian3D<double> Coordinate system.
45 The class is having also an extra template parameter, the coordinate system tag,
46 to be able to identify (tag) vector described in different reference coordinate system,
47 like global or local coordinate systems.
48
49 @ingroup GenVector
50
51 @see GenVector
52 */
53
54 template <class CoordSystem, class Tag = DefaultCoordinateSystemTag >
56
57 public:
58
59 typedef typename CoordSystem::Scalar Scalar;
60 typedef CoordSystem CoordinateType;
62
63 // ------ ctors ------
64
65 /**
66 Default constructor. Construct an empty object with zero values
67 */
68
70
71 /**
72 Construct from three values of type <em>Scalar</em>.
73 In the case of a XYZPoint the values are x,y,z
74 In the case of a polar vector they are r,theta,phi
75 */
77
78 /**
79 Construct from a position vector expressed in different
80 coordinates, or using a different Scalar type
81 */
82 template <class T>
83 explicit constexpr PositionVector3D( const PositionVector3D<T,Tag> & v) :
84 fCoordinates ( v.Coordinates() ) { }
85
86 /**
87 Construct from an arbitrary displacement vector
88 */
89 template <class T>
90 explicit constexpr PositionVector3D( const DisplacementVector3D<T,Tag> & p) :
91 fCoordinates ( p.Coordinates() ) { }
92
93 /**
94 Construct from a foreign 3D vector type, for example, Hep3Vector
95 Precondition: v must implement methods x(), y() and z()
96 */
97 template <class ForeignVector>
98 explicit constexpr PositionVector3D( const ForeignVector & v) :
99 fCoordinates ( Cartesian3D<Scalar>( v.x(), v.y(), v.z() ) ) { }
100
101#ifdef LATER
102 /**
103 construct from a generic linear algebra vector of at least size 3
104 implementing operator []. This could be also a C array
105 \par v LAVector
106 \par index0 index where coordinates starts (typically zero)
107 It works for all Coordinates types,
108 ( x= v[index0] for Cartesian and r=v[index0] for Polar )
109 */
110 template <class LAVector>
111 PositionVector3D(const LAVector & v, size_t index0 ) {
112 fCoordinates = CoordSystem ( v[index0], v[index0+1], v[index0+2] );
113 }
114#endif
115
116 // compiler-generated copy ctor and dtor are fine.
117
118 // ------ assignment ------
119
120 /**
121 Assignment operator from a position vector of arbitrary type
122 */
123 template <class OtherCoords>
126 fCoordinates = v.Coordinates();
127 return *this;
128 }
129
130 /**
131 Assignment operator from a displacement vector of arbitrary type
132 */
133 template <class OtherCoords>
136 fCoordinates = v.Coordinates();
137 return *this;
138 }
139
140 /**
141 Assignment from a foreign 3D vector type, for example, Hep3Vector
142 Precondition: v must implement methods x(), y() and z()
143 */
144 template <class ForeignVector>
146 SetXYZ( v.x(), v.y(), v.z() );
147 return *this;
148 }
149
150#ifdef LATER
151 /**
152 assign from a generic linear algebra vector of at least size 3
153 implementing operator [].
154 \par v LAVector
155 \par index0 index where coordinates starts (typically zero)
156 It works for all Coordinates types,
157 ( x= v[index0] for Cartesian and r=v[index0] for Polar )
158 */
159 template <class LAVector>
160 PositionVector3D & assignFrom(const LAVector & v, size_t index0 = 0) {
161 fCoordinates = CoordSystem ( v[index0], v[index0+1], v[index0+2] );
162 return *this;
163 }
164#endif
165
166 /**
167 Retrieve a copy of the coordinates object
168 */
169 const CoordSystem & Coordinates() const {
170 return fCoordinates;
171 }
172
173 /**
174 Set internal data based on a C-style array of 3 Scalar numbers
175 */
177 { fCoordinates.SetCoordinates(src); return *this; }
178
179 /**
180 Set internal data based on 3 Scalar numbers
181 */
183 { fCoordinates.SetCoordinates(a, b, c); return *this; }
184
185 /**
186 Set internal data based on 3 Scalars at *begin to *end
187 */
188 template <class IT>
190 { IT a = begin; IT b = ++begin; IT c = ++begin;
191 (void)end;
192 assert (++begin==end);
193 SetCoordinates (*a,*b,*c);
194 return *this;
195 }
196
197 /**
198 get internal data into 3 Scalar numbers
199 */
200 void GetCoordinates( Scalar& a, Scalar& b, Scalar& c ) const
201 { fCoordinates.GetCoordinates(a, b, c); }
202
203 /**
204 get internal data into a C-style array of 3 Scalar numbers
205 */
206 void GetCoordinates( Scalar dest[] ) const
207 { fCoordinates.GetCoordinates(dest); }
208
209 /**
210 get internal data into 3 Scalars at *begin to *end (3 past begin)
211 */
212 template <class IT>
213 void GetCoordinates( IT begin, IT end ) const
214 { IT a = begin; IT b = ++begin; IT c = ++begin;
215 (void)end;
216 assert (++begin==end);
217 GetCoordinates (*a,*b,*c);
218 }
219
220 /**
221 get internal data into 3 Scalars at *begin
222 */
223 template <class IT>
224 void GetCoordinates( IT begin ) const {
225 Scalar a = Scalar(0);
226 Scalar b = Scalar(0);
227 Scalar c = Scalar(0);
228 GetCoordinates(a, b, c);
229 *begin++ = a;
230 *begin++ = b;
231 *begin = c;
232 }
233
234 /**
235 set the values of the vector from the cartesian components (x,y,z)
236 (if the vector is held in polar or cylindrical eta coordinates,
237 then (x, y, z) are converted to that form)
238 */
240 fCoordinates.SetXYZ(a,b,c);
241 return *this;
242 }
243
244 // ------------------- Equality -----------------
245
246 /**
247 Exact equality
248 */
249 bool operator==(const PositionVector3D & rhs) const {
250 return fCoordinates==rhs.fCoordinates;
251 }
252 bool operator!= (const PositionVector3D & rhs) const {
253 return !(operator==(rhs));
254 }
255
256 // ------ Individual element access, in various coordinate systems ------
257
258 /**
259 Dimension
260 */
261 unsigned int Dimension() const
262 {
263 return fDimension;
264 };
265
266 /**
267 Cartesian X, converting if necessary from internal coordinate system.
268 */
269 Scalar X() const { return fCoordinates.X(); }
270
271 /**
272 Cartesian Y, converting if necessary from internal coordinate system.
273 */
274 Scalar Y() const { return fCoordinates.Y(); }
275
276 /**
277 Cartesian Z, converting if necessary from internal coordinate system.
278 */
279 Scalar Z() const { return fCoordinates.Z(); }
280
281 /**
282 Polar R, converting if necessary from internal coordinate system.
283 */
284 Scalar R() const { return fCoordinates.R(); }
285
286 /**
287 Polar theta, converting if necessary from internal coordinate system.
288 */
289 Scalar Theta() const { return fCoordinates.Theta(); }
290
291 /**
292 Polar phi, converting if necessary from internal coordinate system.
293 */
294 Scalar Phi() const { return fCoordinates.Phi(); }
295
296 /**
297 Polar eta, converting if necessary from internal coordinate system.
298 */
299 Scalar Eta() const { return fCoordinates.Eta(); }
300
301 /**
302 Cylindrical transverse component rho
303 */
304 Scalar Rho() const { return fCoordinates.Rho(); }
305
306 // ----- Other fundamental properties -----
307
308 /**
309 Magnitute squared ( r^2 in spherical coordinate)
310 */
311 Scalar Mag2() const { return fCoordinates.Mag2();}
312
313 /**
314 Transverse component squared (rho^2 in cylindrical coordinates.
315 */
316 Scalar Perp2() const { return fCoordinates.Perp2();}
317
318 // It is physically meaningless to speak of the unit vector corresponding
319 // to a point.
320
321 // ------ Setting individual elements present in coordinate system ------
322
323 /**
324 Change X - Cartesian3D coordinates only
325 */
327
328 /**
329 Change Y - Cartesian3D coordinates only
330 */
332
333 /**
334 Change Z - Cartesian3D coordinates only
335 */
337
338 /**
339 Change R - Polar3D coordinates only
340 */
342
343 /**
344 Change Theta - Polar3D coordinates only
345 */
347
348 /**
349 Change Phi - Polar3D or CylindricalEta3D coordinates
350 */
352
353 /**
354 Change Rho - CylindricalEta3D coordinates only
355 */
357
358 /**
359 Change Eta - CylindricalEta3D coordinates only
360 */
362
363 // ------ Operations combining two vectors ------
364 // need to specialize to exclude those with a different tags
365
366 /**
367 Return the scalar (Dot) product of this with a displacement vector in
368 any coordinate system, but with the same tag
369 */
370 template< class OtherCoords >
372 return X()*v.x() + Y()*v.y() + Z()*v.z();
373 }
374
375
376 /**
377 Return vector (Cross) product of this point with a displacement, as a
378 point vector in this coordinate system of the first.
379 */
380 template< class OtherCoords >
383 result.SetXYZ ( Y()*v.z() - v.y()*Z(),
384 Z()*v.x() - v.z()*X(),
385 X()*v.y() - v.x()*Y() );
386 return result;
387 }
388
389 // The Dot and Cross products of a pair of point vectors are physically
390 // meaningless concepts and thus are defined as private methods
391
392 // It is physically meaningless to speak of the Unit vector corresponding
393 // to a point.
394
395
396 /**
397 Self Addition with a displacement vector.
398 */
399 template <class OtherCoords>
401 {
402 SetXYZ( X() + v.X(), Y() + v.Y(), Z() + v.Z() );
403 return *this;
404 }
405
406 /**
407 Self Difference with a displacement vector.
408 */
409 template <class OtherCoords>
411 {
412 SetXYZ( X() - v.X(), Y() - v.Y(), Z() - v.Z() );
413 return *this;
414 }
415
416 /**
417 multiply this vector by a scalar quantity
418 */
420 fCoordinates.Scale(a);
421 return *this;
422 }
423
424 /**
425 divide this vector by a scalar quantity
426 */
428 fCoordinates.Scale(1/a);
429 return *this;
430 }
431
432 // The following methods (v*a and v/a) could instead be free functions.
433 // They were moved into the class to solve a problem on AIX.
434 /**
435 Multiply a vector by a real number
436 */
438 PositionVector3D tmp(*this);
439 tmp *= a;
440 return tmp;
441 }
442
443 /**
444 Division of a vector with a real number
445 */
447 PositionVector3D tmp(*this);
448 tmp /= a;
449 return tmp;
450 }
451
452 // Limited backward name compatibility with CLHEP
453
454 Scalar x() const { return fCoordinates.X(); }
455 Scalar y() const { return fCoordinates.Y(); }
456 Scalar z() const { return fCoordinates.Z(); }
457 Scalar r() const { return fCoordinates.R(); }
458 Scalar theta() const { return fCoordinates.Theta(); }
459 Scalar phi() const { return fCoordinates.Phi(); }
460 Scalar eta() const { return fCoordinates.Eta(); }
461 Scalar rho() const { return fCoordinates.Rho(); }
462 Scalar mag2() const { return fCoordinates.Mag2(); }
463 Scalar perp2() const { return fCoordinates.Perp2(); }
464
465 private:
466
467 CoordSystem fCoordinates;
468 static constexpr unsigned int fDimension = CoordinateType::Dimension;
469
470 // Prohibited methods
471
472 // this should not compile (if from a vector or points with different tag
473
474 template <class OtherCoords, class OtherTag>
476
477 template <class OtherCoords, class OtherTag>
479
480 template <class OtherCoords, class OtherTag>
482
483 template <class OtherCoords, class OtherTag>
485
486 template <class OtherCoords, class OtherTag>
488
489 template <class OtherCoords, class OtherTag>
491
492// /**
493// Dot product of two position vectors is inappropriate
494// */
495// template <class T2, class U>
496// PositionVector3D Dot( const PositionVector3D<T2,U> & v) const;
497
498// /**
499// Cross product of two position vectors is inappropriate
500// */
501// template <class T2, class U>
502// PositionVector3D Cross( const PositionVector3D<T2,U> & v) const;
503
504
505
506 };
507
508// ---------- PositionVector3D class template ends here ----------------
509// ---------------------------------------------------------------------
510
511 /**
512 Multiplication of a position vector by real number a*v
513 */
514 template <class CoordSystem, class U>
515 inline
519 return v *= a;
520 // Note - passing v by value and using operator *= may save one
521 // copy relative to passing v by const ref and creating a temporary.
522 }
523
524 /**
525 Difference between two PositionVector3D vectors.
526 The result is a DisplacementVector3D.
527 The (coordinate system) type of the returned vector is defined to
528 be identical to that of the first position vector.
529 */
530
531 template <class CoordSystem1, class CoordSystem2, class U>
532 inline
540
541 /**
542 Addition of a PositionVector3D and a DisplacementVector3D.
543 The return type is a PositionVector3D,
544 of the same (coordinate system) type as the input PositionVector3D.
545 */
546 template <class CoordSystem1, class CoordSystem2, class U>
547 inline
553
554 /**
555 Addition of a DisplacementVector3D and a PositionVector3D.
556 The return type is a PositionVector3D,
557 of the same (coordinate system) type as the input PositionVector3D.
558 */
559 template <class CoordSystem1, class CoordSystem2, class U>
560 inline
566
567 /**
568 Subtraction of a DisplacementVector3D from a PositionVector3D.
569 The return type is a PositionVector3D,
570 of the same (coordinate system) type as the input PositionVector3D.
571 */
572 template <class CoordSystem1, class CoordSystem2, class U>
573 inline
579
580 // Scaling of a position vector with a real number is not physically meaningful
581
582 // ------------- I/O to/from streams -------------
583
584 template <
585 class char_t, class traits_t, class T, class U,
586 typename std::enable_if<std::is_arithmetic<typename PositionVector3D<T, U>::Scalar>::value>::type * = nullptr>
587 std::basic_ostream<char_t, traits_t> &operator<<(std::basic_ostream<char_t, traits_t> &os,
589 {
590 if (os) {
591
592 typename T::Scalar a = 0;
593 typename T::Scalar b = 0;
594 typename T::Scalar c = 0;
595 v.GetCoordinates(a, b, c);
596
599 typedef GenVector_detail::BitReproducible BR;
600 BR::Output(os, a);
601 BR::Output(os, b);
602 BR::Output(os, c);
603 } else {
606 }
607 }
608 return os;
609 } // op<< <>()
610
611 template <
612 class char_t, class traits_t, class T, class U,
613 typename std::enable_if<!std::is_arithmetic<typename PositionVector3D<T, U>::Scalar>::value>::type * = nullptr>
614 std::basic_ostream<char_t, traits_t> &operator<<(std::basic_ostream<char_t, traits_t> &os,
616 {
617 if (os) {
618 os << "{ ";
619 for (std::size_t i = 0; i < PositionVector3D<T, U>::Scalar::Size; ++i) {
620 os << "(" << v.x()[i] << "," << v.y()[i] << "," << v.z()[i] << ") ";
621 }
622 os << "}";
623 }
624 return os;
625 } // op<< <>()
626
627 template< class char_t, class traits_t, class T, class U >
628 inline
629 std::basic_istream<char_t,traits_t> &
630 operator >> ( std::basic_istream<char_t,traits_t> & is
632 )
633 {
634 if( !is ) return is;
635
636 typename T::Scalar a, b, c;
637
641 BR::Input(is, a);
642 BR::Input(is, b);
643 BR::Input(is, c);
644 }
645 else {
650 }
651
652 if( is )
653 v.SetCoordinates(a, b, c);
654 return is;
655
656 } // op>> <>()
657
658
659
660
661 } // namespace Math
662
663} // namespace ROOT
664
665
666#endif /* ROOT_Math_GenVector_PositionVector3D */
#define b(i)
Definition RSha256.hxx:100
#define c(i)
Definition RSha256.hxx:101
#define a(i)
Definition RSha256.hxx:99
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t dest
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t src
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
Class describing a 3D cartesian coordinate system (x, y, z coordinates)
Definition Cartesian3D.h:46
Class describing a generic position vector (point) in 3 dimensions.
PositionVector3D & operator+=(const DisplacementVector3D< OtherCoords, Tag > &v)
Self Addition with a displacement vector.
unsigned int Dimension() const
Dimension.
constexpr PositionVector3D() noexcept=default
Default constructor.
PositionVector3D< CoordSystem, Tag > & SetZ(Scalar zz)
Change Z - Cartesian3D coordinates only.
Scalar Y() const
Cartesian Y, converting if necessary from internal coordinate system.
Scalar Z() const
Cartesian Z, converting if necessary from internal coordinate system.
constexpr PositionVector3D(const PositionVector3D< OtherCoords, OtherTag > &)
PositionVector3D< CoordSystem, Tag > & SetR(Scalar rr)
Change R - Polar3D coordinates only.
bool operator!=(const PositionVector3D &rhs) const
void GetCoordinates(Scalar dest[]) const
get internal data into a C-style array of 3 Scalar numbers
PositionVector3D< CoordSystem, Tag > & SetEta(Scalar etaval)
Change Eta - CylindricalEta3D coordinates only.
void GetCoordinates(IT begin, IT end) const
get internal data into 3 Scalars at *begin to *end (3 past begin)
PositionVector3D & operator-=(const DisplacementVector3D< OtherCoords, OtherTag > &)
PositionVector3D< CoordSystem, Tag > & SetPhi(Scalar ang)
Change Phi - Polar3D or CylindricalEta3D coordinates.
Scalar X() const
Cartesian X, converting if necessary from internal coordinate system.
PositionVector3D & operator-=(const DisplacementVector3D< OtherCoords, Tag > &v)
Self Difference with a displacement vector.
PositionVector3D< CoordSystem, Tag > & SetRho(Scalar rr)
Change Rho - CylindricalEta3D coordinates only.
PositionVector3D operator*(Scalar a) const
Multiply a vector by a real number.
PositionVector3D & operator=(const DisplacementVector3D< OtherCoords, OtherTag > &)
PositionVector3D & operator=(const PositionVector3D< OtherCoords, Tag > &v)
Assignment operator from a position vector of arbitrary type.
PositionVector3D< CoordSystem, Tag > & SetCoordinates(const Scalar src[])
Set internal data based on a C-style array of 3 Scalar numbers.
constexpr PositionVector3D(const DisplacementVector3D< OtherCoords, OtherTag > &)
PositionVector3D & operator+=(const DisplacementVector3D< OtherCoords, OtherTag > &)
PositionVector3D< CoordSystem, Tag > & SetY(Scalar yy)
Change Y - Cartesian3D coordinates only.
PositionVector3D & operator/=(Scalar a)
divide this vector by a scalar quantity
Scalar Theta() const
Polar theta, converting if necessary from internal coordinate system.
constexpr PositionVector3D(const PositionVector3D< T, Tag > &v)
Construct from a position vector expressed in different coordinates, or using a different Scalar type...
PositionVector3D< CoordSystem, Tag > & SetXYZ(Scalar a, Scalar b, Scalar c)
set the values of the vector from the cartesian components (x,y,z) (if the vector is held in polar or...
PositionVector3D operator/(Scalar a) const
Division of a vector with a real number.
constexpr PositionVector3D(const ForeignVector &v)
Construct from a foreign 3D vector type, for example, Hep3Vector Precondition: v must implement metho...
bool operator==(const PositionVector3D &rhs) const
Exact equality.
Scalar Phi() const
Polar phi, converting if necessary from internal coordinate system.
void GetCoordinates(Scalar &a, Scalar &b, Scalar &c) const
get internal data into 3 Scalar numbers
PositionVector3D< CoordSystem, Tag > & SetCoordinates(Scalar a, Scalar b, Scalar c)
Set internal data based on 3 Scalar numbers.
Scalar Rho() const
Cylindrical transverse component rho.
PositionVector3D Cross(const DisplacementVector3D< OtherCoords, Tag > &v) const
Return vector (Cross) product of this point with a displacement, as a point vector in this coordinate...
PositionVector3D & operator=(const PositionVector3D< OtherCoords, OtherTag > &)
Scalar Perp2() const
Transverse component squared (rho^2 in cylindrical coordinates.
Scalar Mag2() const
Magnitute squared ( r^2 in spherical coordinate)
PositionVector3D< CoordSystem, Tag > & SetTheta(Scalar ang)
Change Theta - Polar3D coordinates only.
PositionVector3D & operator*=(Scalar a)
multiply this vector by a scalar quantity
Scalar Eta() const
Polar eta, converting if necessary from internal coordinate system.
Scalar Dot(const DisplacementVector3D< OtherCoords, Tag > &v) const
Return the scalar (Dot) product of this with a displacement vector in any coordinate system,...
PositionVector3D< CoordSystem, Tag > & SetCoordinates(IT begin, IT end)
Set internal data based on 3 Scalars at *begin to *end.
PositionVector3D< CoordSystem, Tag > & SetX(Scalar xx)
Change X - Cartesian3D coordinates only.
void GetCoordinates(IT begin) const
get internal data into 3 Scalars at *begin
static constexpr unsigned int fDimension
const CoordSystem & Coordinates() const
Retrieve a copy of the coordinates object.
constexpr PositionVector3D(const DisplacementVector3D< T, Tag > &p)
Construct from an arbitrary displacement vector.
Scalar R() const
Polar R, converting if necessary from internal coordinate system.
Double_t y[n]
Definition legend1.C:17
Double_t x[n]
Definition legend1.C:17
Namespace for new Math classes and functions.
char_t get_manip(std::basic_ios< char_t, traits_t > &ios, manip_t m)
Definition GenVectorIO.h:54
std::basic_istream< char_t, traits_t > & require_delim(std::basic_istream< char_t, traits_t > &is, manip_t m)
void set_manip(std::basic_ios< char_t, traits_t > &ios, manip_t m, char_t ch)
Definition GenVectorIO.h:74
std::ostream & operator<<(std::ostream &os, const AxisAngle &a)
Stream Output and Input.
Definition AxisAngle.cxx:91
std::basic_istream< char_t, traits_t > & operator>>(std::basic_istream< char_t, traits_t > &is, DisplacementVector2D< T, U > &v)
DisplacementVector2D< CoordSystem1, U > operator+(DisplacementVector2D< CoordSystem1, U > v1, const DisplacementVector2D< CoordSystem2, U > &v2)
Addition of DisplacementVector2D vectors.
DisplacementVector2D< CoordSystem1, U > operator-(DisplacementVector2D< CoordSystem1, U > v1, DisplacementVector2D< CoordSystem2, U > const &v2)
Difference between two DisplacementVector2D vectors.
AxisAngle operator*(RotationX const &r1, AxisAngle const &r2)
Multiplication of an axial rotation by an AxisAngle.
Namespace for new ROOT classes and functions.