/usr/include/siscone/momentum.h is in libsiscone-dev 2.0.6-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | // -*- C++ -*-
///////////////////////////////////////////////////////////////////////////////
// File: momentum.h //
// Description: header file for 4-momentum class Cmomentum //
// This file is part of the SISCone project. //
// For more details, see http://projects.hepforge.org/siscone //
// //
// Copyright (c) 2006 Gavin Salam and Gregory Soyez //
// //
// This program is free software; you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation; either version 2 of the License, or //
// (at your option) any later version. //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU General Public License for more details. //
// //
// You should have received a copy of the GNU General Public License //
// along with this program; if not, write to the Free Software //
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA //
// //
// $Revision:: 163 $//
// $Date:: 2007-04-26 22:31:02 +0200 (Thu, 26 Apr 2007) $//
///////////////////////////////////////////////////////////////////////////////
#ifndef __VECTOR_H__
#define __VECTOR_H__
#include <vector>
#include <math.h>
#include "reference.h"
#include "geom_2d.h"
#include "defines.h"
namespace siscone{
/**
* \class Cmomentum
* \brief base class for dynamic coordinates management
*
* This class contains the information for particle or group of
* particles management.
* It includes all Lorentz properties as well as tools for summing them.
* Note: 'sums' over phi angles are indeed averages. This allows to
* deal with periodicity at each step
*/
class Cmomentum{
public:
/// default ctor
Cmomentum();
/// ctor with initialisation
Cmomentum(double _px, double _py, double _pz, double _E);
/// ctor with detailed initialisation
Cmomentum(double _eta, double _phi, Creference _ref);
/// default dtor
~Cmomentum();
/// computes pT
inline double perp() const {return sqrt(perp2());}
/// computes pT^2
inline double perp2() const {return px*px+py*py;}
/// computes m
inline double mass() const {return sqrt(mass2());}
/// computes m^2
inline double mass2() const {return perpmass2()-perp2();}
/// transverse mass, mt = sqrt(pt^2+m^2) = sqrt(E^2 - pz^2)
inline double perpmass() const {return sqrt((E-pz)*(E+pz));}
/// transverse mass squared, mt^2 = pt^2+m^2 = E^2 - pz^2
inline double perpmass2() const {return (E-pz)*(E+pz);}
/// computes transverse energy
inline double Et() const {return E/sqrt(1.0+pz*pz/perp2());}
/// computes transverse energy (squared)
inline double Et2() const {return E*E/(1.0+pz*pz/perp2());}
/// assignment of vectors
Cmomentum& operator = (const Cmomentum &v);
/// addition of vectors
/// !!! WARNING !!! no updating of eta and phi !!!
const Cmomentum operator + (const Cmomentum &v);
/// incrementation of vectors
/// !!! WARNING !!! no updating of eta and phi !!!
Cmomentum& operator += (const Cmomentum &v);
/// decrementation of vectors
/// !!! WARNING !!! no updating of eta and phi !!!
Cmomentum& operator -= (const Cmomentum &v);
/// build eta-phi from 4-momentum info
/// !!! WARNING !!!
/// !!! computing eta and phi is time-consuming !!!
/// !!! use this whenever you need eta or phi !!!
/// !!! automatically called for single-particle !!!
void build_etaphi();
double px; ///< x-momentum
double py; ///< y-momentum
double pz; ///< z-momentum
double E; ///< energy
double eta; ///< particle pseudo-rapidity
double phi; ///< particle azimuthal angle
int parent_index; ///< particle number in the parent list
int index; ///< internal particle number
//////////////////////////////////////////////
// the following part is used for checksums //
//////////////////////////////////////////////
Creference ref; ///< reference number for the vector
};
/// ordering of two vectors
/// this is by default done w.r.t. their references
bool operator < (const Cmomentum &v1, const Cmomentum &v2);
/// ordering of vectors in eta (e.g. used in collinear tests)
bool momentum_eta_less(const Cmomentum &v1, const Cmomentum &v2);
/// ordering of vectors in pt
bool momentum_pt_less(const Cmomentum &v1, const Cmomentum &v2);
//////////////////////////
// some handy utilities //
//////////////////////////
/// get distance between to eta-phi points
/// \param eta eta coordinate of first point
/// \param phi phi coordinate of first point
/// \param v vector defining the second point
inline double get_distance(double eta, double phi, Cmomentum *v){
double dx, dy;
dx = eta - v->eta;
dy = fabs(phi - v->phi);
if (dy>M_PI)
dy -= twopi;
return dx*dx+dy*dy;
}
}
#endif
|