1 #include "EvtGenBase/EvtPatches.hh"
2 /*******************************************************************************
3 * Project: BaBar detector at the SLAC PEP-II B-factory
5 * File: $Id: EvtDalitzPoint.cc,v 1.14 2004/12/21 19:58:42 ryd Exp $
6 * Author: Alexei Dvoretskii, dvoretsk@slac.stanford.edu, 2001-2002
8 * Copyright (C) 2002 Caltech
9 *******************************************************************************/
11 #include "EvtGenBase/EvtPatches.hh"
15 #include "EvtGenBase/EvtDalitzPoint.hh"
16 using namespace EvtCyclic3;
18 EvtDalitzPoint::EvtDalitzPoint()
19 : _mA(-1.), _mB(-1.), _mC(-1.), _qAB(-1.), _qBC(-1.), _qCA(-1.)
22 EvtDalitzPoint::EvtDalitzPoint(double mA, double mB, double mC, double qAB, double qBC, double qCA)
23 : _mA(mA), _mB(mB), _mC(mC), _qAB(qAB), _qBC(qBC), _qCA(qCA)
26 // Constructor from Zemach coordinates
28 EvtDalitzPoint::EvtDalitzPoint(double mA, double mB, double mC,
30 double qres, double qhel, double qsum)
31 : _mA(mA), _mB(mB), _mC(mC)
33 double qi = qres + qsum/3.;
34 double qj = -qres/2. + qhel + qsum/3.;
35 double qk = -qres/2. - qhel + qsum/3.;
37 if(i == AB) { _qAB = qi; _qBC = qj; _qCA = qk; }
38 else if(i == BC) { _qAB = qk; _qBC = qi; _qCA = qj; }
39 else if(i == CA) { _qAB = qj; _qBC = qk; _qCA = qi; }
42 EvtDalitzPoint::EvtDalitzPoint(const EvtDalitzPlot& dp, const EvtDalitzCoord& x)
43 : _mA(dp.m(A)), _mB(dp.m(B)), _mC(dp.m(C))
45 if(x.pair1() == AB) _qAB = x.q1();
47 if(x.pair2() == AB) _qAB = x.q2();
48 else _qAB = dp.sum() - x.q1() - x.q2();
50 if(x.pair1() == BC) _qBC = x.q1();
52 if(x.pair2() == BC) _qBC = x.q2();
53 else _qBC = dp.sum() - x.q1() - x.q2();
55 if(x.pair1() == CA) _qCA = x.q1();
57 if(x.pair2() == CA) _qCA = x.q2();
58 else _qCA = dp.sum() - x.q1() - x.q2();
62 EvtDalitzPoint::EvtDalitzPoint(const EvtDalitzPoint& other)
63 : _mA(other._mA), _mB(other._mB), _mC(other._mC),
64 _qAB(other._qAB), _qBC(other._qBC), _qCA(other._qCA)
67 EvtDalitzPoint::~EvtDalitzPoint()
70 double EvtDalitzPoint::q(EvtCyclic3::Pair i) const
73 if(BC == i) ret = _qBC;
75 if(CA == i) ret = _qCA;
80 double EvtDalitzPoint::m(EvtCyclic3::Index i) const
92 double EvtDalitzPoint::qres(EvtCyclic3::Pair i) const
94 return (2.*q(i) - q(EvtCyclic3::prev(i)) - q(EvtCyclic3::next(i)))/3.;
96 double EvtDalitzPoint::qhel(EvtCyclic3::Pair i) const
100 return (q(j) - q(k))/2.;
102 double EvtDalitzPoint::qsum() const
104 return _qAB + _qBC + _qCA;
108 double EvtDalitzPoint::qMin(EvtCyclic3::Pair i, EvtCyclic3::Pair j) const
110 EvtDalitzPlot dp = getDalitzPlot();
111 return dp.qMin(i,j,q(j));
114 double EvtDalitzPoint::qMax(EvtCyclic3::Pair i, EvtCyclic3::Pair j) const
116 EvtDalitzPlot dp = getDalitzPlot();
117 return dp.qMax(i,j,q(j));
120 double EvtDalitzPoint::pp(EvtCyclic3::Index i, EvtCyclic3::Index j) const
122 if(i == j) return m(i)*m(i);
123 else return (q(combine(i,j)) - m(i)*m(i) - m(j)*m(j))/2.;
126 double EvtDalitzPoint::e(EvtCyclic3::Index i, EvtCyclic3::Pair j) const
128 EvtDalitzPlot dp = getDalitzPlot();
129 return dp.e(i,j,q(j));
132 double EvtDalitzPoint::p(EvtCyclic3::Index i, EvtCyclic3::Pair j) const
134 EvtDalitzPlot dp = getDalitzPlot();
135 return dp.p(i,j,q(j));
138 double EvtDalitzPoint::cosTh(EvtCyclic3::Pair pairAng, EvtCyclic3::Pair pairRes) const
140 EvtDalitzPlot dp = getDalitzPlot();
141 return dp.cosTh(pairAng,q(pairAng),pairRes,q(pairRes));
145 EvtDalitzCoord EvtDalitzPoint::getDalitzPoint(EvtCyclic3::Pair i, EvtCyclic3::Pair j) const
147 return EvtDalitzCoord(i,q(i),j,q(j));
151 EvtDalitzPlot EvtDalitzPoint::getDalitzPlot() const
153 return EvtDalitzPlot(_mA,_mB,_mC,bigM());
156 bool EvtDalitzPoint::isValid() const
161 if(_mA < 0 || _mB < 0 || _mC < 0 || M <= 0) return false;
162 if(M < _mA + _mB + _mC) return false;
164 // Check that first coordinate is within absolute limits
167 EvtDalitzPlot dp = getDalitzPlot();
169 if(dp.qAbsMin(AB) <= _qAB && _qAB <= dp.qAbsMax(AB))
170 if(qMin(BC,AB) <= _qBC && _qBC <= qMax(BC,AB))
176 double EvtDalitzPoint::bigM() const
178 return sqrt(_qAB+_qBC+_qCA - _mA*_mA - _mB*_mB - _mC*_mC);
182 void EvtDalitzPoint::print() const
184 getDalitzPlot().print();
185 printf("%f %f %f\n",_qAB,_qBC,_qCA);