12 #pragma implementation
15 #include "CLHEP/Vector/defs.h"
16 #include "CLHEP/Vector/LorentzVector.h"
17 #include "CLHEP/Vector/ZMxpv.h"
50 "A zero vector used as reference to LorentzVector plus-part"));
53 return ee + pp.
dot(ref)/r;
60 "A zero vector used as reference to LorentzVector minus-part"));
63 return ee - pp.
dot(ref)/r;
81 "beta computed for HepLorentzVector with t=0 -- infinite result"));
87 "beta computed for a non-timelike HepLorentzVector"));
90 return std::sqrt (pp.
mag2() / (ee*ee)) ;
94 double v2 = pp.
mag2();
101 "gamma computed for HepLorentzVector with t=0 -- zero result"));
107 "gamma computed for a spacelike HepLorentzVector -- imaginary result"));
110 }
else if ( t2 == v2 ) {
112 "gamma computed for a lightlike HepLorentzVector -- infinite result"));
114 return 1./std::sqrt(1. - v2/t2 );
125 register double z1 = pp.
getZ();
126 if (std::fabs(ee) == std::fabs(z1)) {
128 "rapidity for 4-vector with |E| = |Pz| -- infinite result"));
130 if (std::fabs(ee) < std::fabs(z1)) {
132 "rapidity for spacelike 4-vector with |E| < |Pz| -- undefined"));
135 double q = (ee + z1) / (ee - z1);
138 return .5 * std::log(q);
142 register double r = ref.
mag2();
145 "A zero vector used as reference to LorentzVector rapidity"));
148 register double vdotu = pp.
dot(ref)/std::sqrt(r);
149 if (std::fabs(ee) == std::fabs(vdotu)) {
151 "rapidity for 4-vector with |E| = |Pu| -- infinite result"));
153 if (std::fabs(ee) < std::fabs(vdotu)) {
155 "rapidity for spacelike 4-vector with |E| < |P*ref| -- undefined "));
158 double q = (ee + vdotu) / (ee - vdotu);
159 return .5 * std::log(q);
163 register double v1 = pp.
mag();
164 if (std::fabs(ee) == std::fabs(v1)) {
166 "co-Linear rapidity for 4-vector with |E| = |P| -- infinite result"));
168 if (std::fabs(ee) < std::fabs(v1)) {
170 "co-linear rapidity for spacelike 4-vector -- undefined"));
173 double q = (ee + v1) / (ee - v1);
174 return .5 * std::log(q);
185 if ( ee * w.ee < 0 ) {
187 "invariant mass meaningless: \n"
188 "a negative-mass input led to spacelike 4-vector sum" ));
193 "invariant mass meaningless because of spacelike input"));
204 return (ee+w.ee >=0 ) ? std::sqrt(m1) : - std::sqrt(m1);
216 double t1 = ee + w.ee;
219 if (v1.
mag2() == 0) {
223 "boostToCM computed for two 4-vectors with combined t=0 -- "
228 if (t1*t1 - v1.
mag2() <= 0) {
230 "boostToCM computed for pair of HepLorentzVectors with non-timelike sum"));
double invariantMass2() const
double invariantMass() const
static ZMpvMetric_t setMetric(ZMpvMetric_t a1)
Hep3Vector findBoostToCM() const
double dot(const Hep3Vector &) const
HepLorentzVector rest4Vector() const
static ZMpvMetric_t getMetric()
double coLinearRapidity() const
Hep3Vector boostVector() const
bool isLightlike(double epsilon=tolerance) const