1 #ifndef VEC_HH_INCLUDED
2 #define VEC_HH_INCLUDED
23 Vec(
double x_,
double y_,
double z_) :
x(x_),
y(y_),
z(z_) {}
109 Vec&
set(
double xx,
double yy,
double zz) {
x=xx;
y=yy;
z=zz;
return *
this;}
120 x = sin ( theta ) * cos( phi );
121 y = sin ( theta ) * sin( phi );
131 double phi()
const {
return atan2(
y,
x ); }
145 double len()
const {
double l =
dot(*
this);
return (l > 0)? sqrt(l) : 0; }
152 double lenxy()
const {
const double r2 =
x*
x +
y*
y;
return (r2>0) ? sqrt(r2) :0; }
166 void print( std::ostream& out = std::cout )
const
168 out <<
"Vec:" <<
x <<
" " <<
y <<
" " <<
z;
178 static std::string buffer;
180 std::ostringstream s;
186 return buffer.c_str();
238 x = o.
x *cos(ang) - o.
y * sin(ang);
239 y = o.
x *sin(ang) + o.
y * cos(ang);
254 y = o.
y *cos(ang) + o.
z * -sin(ang);
255 z = o.
y *sin(ang) + o.
z * cos(ang);
268 x = o.
x *cos(ang) + o.
z * sin(ang);
270 z = -o.
x *sin(ang) + o.
z * cos(ang);
286 out << v.
x <<
" " << v.
y <<
" " << v.
z <<
" ";
299 in >> v.
x >> v.
y >> v.
z ;
return in;
311 const double n = a.
len() * b.
len();
325 if ( c < -1 )
return M_PI;
326 if ( c > 1 )
return 0;
bool operator!=(const Vec &v) const
Check in-equality with given vector.
Vec __div__(double d) const
Divide vector.
Vec & set_angles(double theta, double phi)
Set vector according given zenith and azimuth angles.
Vec operator-(const Vec &a, const Vec &b)
Subtract two vectors.
Vec __sub__(const Vec &v) const
Subtract vector.
Vec __add__(const Vec &v) const
Add vector.
double cos_angle_between(const Vec &a, const Vec &b)
Get cosine of space angle between two vectors.
Vec __rmul__(double d) const
Multiply vector.
#define ClassDefNV(name, version)
Vec operator-() const
Negate vector.
double phi() const
Get azimuth angle.
Vec & rotate_z(double ang)
Rotate around z-axis with given angle.
double len() const
Get length.
Vec(double x_, double y_, double z_)
Constructor.
double dot(const Vec &v) const
Get dot product.
The Vec class is a straightforward 3-d vector, which also works in pyroot.
Vec()
Default constructor.
Vec & operator*=(double d)
Multiply vector.
double lenxy() const
Get length of (x,y) component.
Vec cross(const Vec r) const
Get cross product.
Vec __mul__(double d) const
Multiply vector.
const JCalculator< T, 1 > & operator*(const T &first, const T &second)
Product evaluation of objects.
Vec & normalize()
Normalise this vector.
Vec operator+(const Vec &a, const Vec &b)
Add two vectors.
bool operator==(const Vec &v) const
Check equality with given vector.
Vec & set(double xx, double yy, double zz)
Set vector.
Vec & operator/=(double d)
Divide vector.
Vec & rotate_x(double ang)
Rotate around x-axis with given angle.
std::istream & operator>>(std::istream &in, JAANET::JHead &header)
Read header from input.
Vec & operator-=(const Vec &v)
Subtract vector.
then JMuonMCEvt f $INPUT_FILE o $INTERMEDIATE_FILE d
double angle_between(const Vec &a, const Vec &b)
Get space angle between two vectors.
void print(std::ostream &out=std::cout) const
Print vector.
const char * __repr__() const
Get string representation of this vector.
double theta() const
Get zenith angle.
Vec operator/(const Vec &v, double a)
Divide vector.
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY source JAcoustics sh $DETECTOR_ID CHECK_EXIT_CODE typeset A TRIPODS get_tripods $WORKDIR tripod txt TRIPODS for EMITTER in
Vec & rotate_y(double ang)
Rotate around y-axis with given angle.
Vec & operator+=(const Vec &v)
Add vector.