siscone is hosted by Hepforge, IPPP Durham

The SISCone Jet Algorithm

Version 3.0.6



SISCone 3.0.6
momentum.cpp
1
2// File: momentum.cpp //
3// Description: source file for 4-momentum class Cmomentum //
4// This file is part of the SISCone project. //
5// For more details, see http://projects.hepforge.org/siscone //
6// //
7// Copyright (c) 2006 Gavin Salam and Gregory Soyez //
8// //
9// This program is free software; you can redistribute it and/or modify //
10// it under the terms of the GNU General Public License as published by //
11// the Free Software Foundation; either version 2 of the License, or //
12// (at your option) any later version. //
13// //
14// This program is distributed in the hope that it will be useful, //
15// but WITHOUT ANY WARRANTY; without even the implied warranty of //
16// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
17// GNU General Public License for more details. //
18// //
19// You should have received a copy of the GNU General Public License //
20// along with this program; if not, write to the Free Software //
21// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA //
22// //
23// $Revision:: $//
24// $Date:: $//
26
27#include "momentum.h"
28#include <math.h>
29#include <stdlib.h>
30
31namespace siscone{
32
33/*************************************************************************
34 * class Cmomentum *
35 * This class contains the information for particle or group of *
36 * particles management. *
37 * It includes all Lorentz properties as well as tools for summing them. *
38 *************************************************************************/
39
40// default ctor
41//--------------
43 eta = 0.0;
44 phi = 0.0;
45 px = py = pz = E = 0.0;
46 ref = Creference();
47 index = -1;
48}
49
50// ctor with initialisation
51//--------------------------
52Cmomentum::Cmomentum(double _px, double _py, double _pz, double _E){
53 px = _px;
54 py = _py;
55 pz = _pz;
56 E = _E;
57
58 // compute eta and phi
60 ref = Creference();
61}
62
63// ctor with detailed initialisation
64//-----------------------------------
65Cmomentum::Cmomentum(double _eta, double _phi, Creference _ref){
66 eta = _eta;
67 phi = _phi;
68
69 ref = _ref;
70}
71
72// default dtor
73//--------------
75
76}
77
78// assignment of vectors
79//-----------------------
81 px = v.px;
82 py = v.py;
83 pz = v.pz;
84 E = v.E;
85
86 eta = v.eta;
87 phi = v.phi;
88
89 ref = v.ref;
90 return *this;
91}
92
93// addition of vectors
94// !!! WARNING !!! no updating of eta and phi !!!
95//------------------------------------------------
97 Cmomentum tmp = *this;
98 return tmp+=v;
99}
100
101// incrementation of vectors
102// !!! WARNING !!! no updating of eta and phi !!!
103//------------------------------------------------
105 px+=v.px;
106 py+=v.py;
107 pz+=v.pz;
108 E +=v.E;
109
110 ref+=v.ref;
111
112 return *this;
113}
114
115// incrementation of vectors
116// !!! WARNING !!! no updating of eta and phi !!!
117//------------------------------------------------
119 px-=v.px;
120 py-=v.py;
121 pz-=v.pz;
122 E -=v.E;
123
124 ref-=v.ref;
125 return *this;
126}
127
128// build eta-phi from 4-momentum info
129// !!! WARNING !!!
130// !!! computing eta and phi is time-consuming !!!
131// !!! use this whenever you need eta or phi !!!
132// !!! automatically called for single-particle !!!
133//--------------------------------------------------
135 // note: the factor n (ref.nb) cancels in all expressions !!
136 eta = 0.5*log((E+pz)/(E-pz));
137 phi = atan2(py,px);
138}
139
140
141// ordering of two vectors
142// the default ordering is w.r.t. their references
143//-------------------------------------------------
144bool operator < (const Cmomentum &v1, const Cmomentum &v2){
145 return v1.ref < v2.ref;
146}
147
148// ordering of vectors in eta (e.g. used in collinear tests)
149//-----------------------------------------------------------
150bool momentum_eta_less(const Cmomentum &v1, const Cmomentum &v2){
151 return v1.eta < v2.eta;
152}
153
154// ordering of vectors in pt
155//---------------------------
156bool momentum_pt_less(const Cmomentum &v1, const Cmomentum &v2){
157 return v1.perp2() < v2.perp2();
158}
159
160}
161
base class for dynamic coordinates management
Definition: momentum.h:49
Cmomentum & operator+=(const Cmomentum &v)
incrementation of vectors !!! WARNING !!! no updating of eta and phi !!!
Definition: momentum.cpp:104
~Cmomentum()
default dtor
Definition: momentum.cpp:74
const Cmomentum operator+(const Cmomentum &v)
addition of vectors !!! WARNING !!! no updating of eta and phi !!!
Definition: momentum.cpp:96
Creference ref
reference number for the vector
Definition: momentum.h:122
int index
internal particle number
Definition: momentum.h:117
double eta
particle pseudo-rapidity
Definition: momentum.h:114
Cmomentum & operator-=(const Cmomentum &v)
decrementation of vectors !!! WARNING !!! no updating of eta and phi !!!
Definition: momentum.cpp:118
void build_etaphi()
build eta-phi from 4-momentum info !!! WARNING !!! !!! computing eta and phi is time-consuming !...
Definition: momentum.cpp:134
double py
y-momentum
Definition: momentum.h:110
double px
x-momentum
Definition: momentum.h:109
Cmomentum & operator=(const Cmomentum &v)
assignment of vectors
Definition: momentum.cpp:80
double E
energy
Definition: momentum.h:112
double pz
z-momentum
Definition: momentum.h:111
Cmomentum()
default ctor
Definition: momentum.cpp:42
double phi
particle azimuthal angle
Definition: momentum.h:115
references used for checksums.
Definition: reference.h:43

The SISCone project has been developed by Gavin Salam and Gregory Soyez
Documentation generated on Tue Jun 20 2023 18:08:37 for SISCone by  Doxygen 1.9.4