Forked from
Air Shower Physics / corsika
4213 commits behind the upstream repository.
-
Maximilian Reininghaus authoredMaximilian Reininghaus authored
QuantityVector.h 1.35 KiB
#ifndef QUANTITYVECTOR_H_
#define QUANTITYVECTOR_H_
#include <phys/units/quantity.hpp>
#include <phys/units/io.hpp>
#include <Eigen/Dense>
#include <iostream>
template <typename dim>
class QuantityVector
{
protected:
using Quantity = phys::units::quantity<dim, double>;
public:
Eigen::Vector3d eVector;
QuantityVector(Quantity a, Quantity b, Quantity c) :
eVector{a.magnitude(), b.magnitude(), c.magnitude()}
{
}
QuantityVector(Eigen::Vector3d pBareVector) :
eVector(pBareVector)
{
}
Quantity operator[](size_t index) const
{
return Quantity(phys::units::detail::magnitude_tag, eVector[index]);
}
Quantity norm() const
{
return Quantity(phys::units::detail::magnitude_tag, eVector.norm());
}
auto operator+(QuantityVector<dim> const& pQVec) const
{
return QuantityVector<dim>(eVector + pQVec.eVector);
}
auto operator-(QuantityVector<dim> const& pQVec) const
{
return QuantityVector<dim>(eVector - pQVec.eVector);
}
//auto operator*(
};
template <typename dim>
auto& operator<<(std::ostream& os, QuantityVector<dim> qv)
{
os << '(' << qv.eVector(0) << ' ' << qv.eVector(1) << ' ' << qv.eVector(2)
<< ") " << phys::units::to_unit_symbol(phys::units::quantity<dim, double>());
return os;
}
#endif