EvtGen 2.2.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
Loading...
Searching...
No Matches
EvtDalitzPlot.hh
Go to the documentation of this file.
1
2/***********************************************************************
3* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
4* *
5* This file is part of EvtGen. *
6* *
7* EvtGen is free software: you can redistribute it and/or modify *
8* it under the terms of the GNU General Public License as published by *
9* the Free Software Foundation, either version 3 of the License, or *
10* (at your option) any later version. *
11* *
12* EvtGen is distributed in the hope that it will be useful, *
13* but WITHOUT ANY WARRANTY; without even the implied warranty of *
14* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15* GNU General Public License for more details. *
16* *
17* You should have received a copy of the GNU General Public License *
18* along with EvtGen. If not, see <https://www.gnu.org/licenses/>. *
19***********************************************************************/
20
21#ifndef EVT_DALITZ_PLOT_HH
22#define EVT_DALITZ_PLOT_HH
23
27
28#include <assert.h>
29
31 public:
33 EvtDalitzPlot( double mA, double mB, double mC, double bigM,
34 double ldel = 0., double rdel = 0. );
35 EvtDalitzPlot( const EvtDecayMode& mode, double ldel = 0., double rdel = 0. );
36 bool operator==( const EvtDalitzPlot& other ) const;
37 const EvtDalitzPlot* clone() const;
38
39 // Absolute limits for masses squared in the Dalitz plot
40 // e.g. qAbsMin(0) is the lowest possible value
41 // for m2 of particles {12}
42
43 double qAbsMin( EvtCyclic3::Pair i ) const;
44 double qAbsMax( EvtCyclic3::Pair i ) const;
45 double mAbsMin( EvtCyclic3::Pair i ) const;
46 double mAbsMax( EvtCyclic3::Pair i ) const;
47
48 // Absolute limits for Zemach coordinate qres and qhel (approximate)
49 // qHelAbsMin(BC,CA) means absolute minimum for (qCA-qAB)/2.
50
51 double qResAbsMin( EvtCyclic3::Pair i ) const;
52 double qResAbsMax( EvtCyclic3::Pair i ) const;
53 double qHelAbsMin( EvtCyclic3::Pair i ) const;
54 double qHelAbsMax( EvtCyclic3::Pair i ) const;
55 inline double qSumMin() const { return sum() + m_ldel; }
56 inline double qSumMax() const { return sum() + m_rdel; }
57 inline bool fuzzy() const { return ( m_rdel - m_ldel != 0. ); }
58
59 // Find the area of the Dalitz plot by numeric integration. (N bins for variable q(i) are used).
60 // Very large numbers of N can result in a very long calculation. It should not
61 // matter which two pairs f variables are used. The integral should eventually
62 // converge to the same number
63
64 double getArea( int N = 1000, EvtCyclic3::Pair i = EvtCyclic3::AB,
66
67 // Limits for masses squared when one mass squared is known
68
69 double qMin( EvtCyclic3::Pair i, EvtCyclic3::Pair j, double q ) const;
70 double qMax( EvtCyclic3::Pair i, EvtCyclic3::Pair j, double q ) const;
71
72 // Coordinate transformations
73
74 double cosTh( EvtCyclic3::Pair i1, double q1, EvtCyclic3::Pair i2,
75 double q2 ) const;
76 double e( EvtCyclic3::Index i, EvtCyclic3::Pair j, double q ) const;
77 double p( EvtCyclic3::Index i, EvtCyclic3::Pair j, double q ) const;
78
79 double q( EvtCyclic3::Pair i1, double cosTh, EvtCyclic3::Pair i2,
80 double q2 ) const;
81
82 // |J| of transformation of qi to cosTh in the rest-frame of j
83
84 double jacobian( EvtCyclic3::Pair i, double q ) const;
85
86 // Given resonance index and mass returns decay
87 // and birth vertices
88
89 EvtTwoBodyVertex vD( EvtCyclic3::Pair iRes, double m0, int L ) const;
90 EvtTwoBodyVertex vB( EvtCyclic3::Pair iRes, double m0, int L ) const;
91
92 // Accessors
93
94 double sum() const;
95 inline double bigM() const { return m_bigM; }
96 inline double mA() const { return m_mA; }
97 inline double mB() const { return m_mB; }
98 inline double mC() const { return m_mC; }
99 double m( EvtCyclic3::Index i ) const;
100
101 void print() const;
102
103 void sanityCheck() const;
104
105 protected:
106 // Defines two dimensional dalitz plot
107
108 double m_mA;
109 double m_mB;
110 double m_mC;
111 double m_bigM;
112
113 // Defines third dimension, or fuzziness. M^2 + ldel < M^2 < M^2 + rdel
114
115 double m_ldel;
116 double m_rdel;
117};
118
119#endif
void sanityCheck() const
double qHelAbsMax(EvtCyclic3::Pair i) const
double getArea(int N=1000, EvtCyclic3::Pair i=EvtCyclic3::AB, EvtCyclic3::Pair j=EvtCyclic3::BC) const
double qAbsMin(EvtCyclic3::Pair i) const
double qSumMin() const
double jacobian(EvtCyclic3::Pair i, double q) const
double q(EvtCyclic3::Pair i1, double cosTh, EvtCyclic3::Pair i2, double q2) const
void print() const
double sum() const
double mB() const
double qSumMax() const
EvtTwoBodyVertex vD(EvtCyclic3::Pair iRes, double m0, int L) const
const EvtDalitzPlot * clone() const
double bigM() const
EvtTwoBodyVertex vB(EvtCyclic3::Pair iRes, double m0, int L) const
double m(EvtCyclic3::Index i) const
double qHelAbsMin(EvtCyclic3::Pair i) const
double mAbsMax(EvtCyclic3::Pair i) const
double mAbsMin(EvtCyclic3::Pair i) const
double p(EvtCyclic3::Index i, EvtCyclic3::Pair j, double q) const
double qMin(EvtCyclic3::Pair i, EvtCyclic3::Pair j, double q) const
double qAbsMax(EvtCyclic3::Pair i) const
double mA() const
double qMax(EvtCyclic3::Pair i, EvtCyclic3::Pair j, double q) const
bool operator==(const EvtDalitzPlot &other) const
bool fuzzy() const
double e(EvtCyclic3::Index i, EvtCyclic3::Pair j, double q) const
double cosTh(EvtCyclic3::Pair i1, double q1, EvtCyclic3::Pair i2, double q2) const
double mC() const
double qResAbsMin(EvtCyclic3::Pair i) const
double qResAbsMax(EvtCyclic3::Pair i) const