40 for (
auto const& v : (*
this)) {
52 for (
auto const& v : (*
this))
82 if (
size() != 3 || obj.size() != 3)
84 throw GeoAlgoException(
"<<Cross>> only possible for 3-dimensional vectors!");
91 return (*
this)[0] == 0.0 && (*this)[1] == 0.0 ? 0.0 : atan2((*
this)[1], (*
this)[0]);
98 return (*this).Length() == 0.0 ? 0.0 : acos((*
this)[2] / (*this).Length());
105 throw GeoAlgoException(
"<<Angle>> only possible for 2 or 3-dimensional vectors!");
112 throw GeoAlgoException(
"<<ToTLorentsVector>> only possible for 3-dimensional vectors!");
113 return TLorentzVector((*
this)[0], (*
this)[1], (*
this)[2], 0.);
118 (*this) /= this->
Length();
130 if (
size() != obj.size()) {
131 std::ostringstream msg;
132 msg <<
"<<" << __FUNCTION__ <<
">>" 133 <<
" size mismatch: " <<
size() <<
" != " << obj.size() << std::endl;
141 for (
size_t i = 0; i <
size(); ++i)
142 dist += ((*
this)[i] - obj[i]) * ((*
this)[i] - obj[i]);
153 return (*
this) * obj;
159 res[0] = (*this)[1] * obj[2] - obj[1] * (*this)[2];
160 res[1] = (*this)[2] * obj[0] - obj[2] * (*this)[0];
161 res[2] = (*this)[0] * obj[1] - obj[0] * (*this)[1];
173 double c = cos(theta);
174 double s = sin(theta);
176 double ynew = (*this)[1] * c - (*this)[2] * s;
177 double znew = (*this)[1] * s + (*this)[2] * c;
188 double c = cos(theta);
189 double s = sin(theta);
191 double xnew = (*this)[0] * c + (*this)[2] * s;
192 double znew = -(*this)[0] * s + (*this)[2] * c;
203 double c = cos(theta);
204 double s = sin(theta);
206 double xnew = (*this)[0] * c - (*this)[1] * s;
207 double ynew = (*this)[0] * s + (*this)[1] * c;
double _Angle_(const Vector &obj) const
Compute the angle in degrees between 2 vectors w/o dimension check.
double _Dot_(const Vector &obj) const
Compute a dot product w/o dimention check.
Class def header for a class GeoAlgoException.
double Phi() const
Compute the angle Phi.
void compat(const Vector &obj) const
Dimensional check for a compatibility.
double _SqDist_(const Vector &obj) const
Compute the squared-distance to another vector w/o dimension check.
double Dist(const Vector &obj) const
Compute the distance to another vector.
void Normalize()
Normalize itself.
double SqLength() const
Compute the squared length of the vector.
Vector _Cross_(const Vector &obj) const
Compute a cross product w/o dimension check.
decltype(auto) constexpr size(T &&obj)
ADL-aware version of std::size.
double Length() const
Compute the length of the vector.
double Dot(const Vector &obj) const
Class def header for a class Point and Vector.
bool IsValid() const
Check if point is valid.
Vector Cross(const Vector &obj) const
Compute a dot product of two vectors.
void RotateY(const double &theta)
double SqDist(const Vector &obj) const
Compute the squared distance to another vector.
TLorentzVector ToTLorentzVector() const
Compute an opening angle w.r.t. the given vector.
constexpr double dist(const TReal *x, const TReal *y, const unsigned int dimension)
void RotateX(const double &theta)
rotation operations
Vector Dir() const
Return a direction unit vector.
double Theta() const
Compute the angle theta.
double _Dist_(const Vector &obj) const
Compute the distance to another vector w/o dimension check.
static const double kINVALID_DOUBLE
void RotateZ(const double &theta)
double Angle(const Vector &obj) const
Compute a cross product of two vectors.