evtgen is hosted by Hepforge, IPPP Durham
EvtGen  2.0.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
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 
24 #include "EvtGenBase/EvtCyclic3.hh"
27 
28 #include <assert.h>
29 
31  public:
32  EvtDalitzPlot();
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() + _ldel; }
56  inline double qSumMax() const { return sum() + _rdel; }
57  inline bool fuzzy() const { return ( _rdel - _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,
65  EvtCyclic3::Pair j = EvtCyclic3::BC ) const;
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 _bigM; }
96  inline double mA() const { return _mA; }
97  inline double mB() const { return _mB; }
98  inline double mC() const { return _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 _mA;
109  double _mB;
110  double _mC;
111  double _bigM;
112 
113  // Defines third dimension, or fuzziness. M^2 + ldel < M^2 < M^2 + rdel
114 
115  double _ldel;
116  double _rdel;
117 };
118 
119 #endif
double q(EvtCyclic3::Pair i1, double cosTh, EvtCyclic3::Pair i2, double q2) const
double qResAbsMin(EvtCyclic3::Pair i) const
double qHelAbsMin(EvtCyclic3::Pair i) const
double qAbsMin(EvtCyclic3::Pair i) const
EvtTwoBodyVertex vD(EvtCyclic3::Pair iRes, double m0, int L) const
void sanityCheck() const
EvtTwoBodyVertex vB(EvtCyclic3::Pair iRes, double m0, int L) const
double mAbsMin(EvtCyclic3::Pair i) const
double mB() const
double m(EvtCyclic3::Index i) const
double qMin(EvtCyclic3::Pair i, EvtCyclic3::Pair j, double q) const
double mA() const
double sum() const
double getArea(int N=1000, EvtCyclic3::Pair i=EvtCyclic3::AB, EvtCyclic3::Pair j=EvtCyclic3::BC) const
double qSumMax() const
double qSumMin() const
bool fuzzy() const
double mC() const
double jacobian(EvtCyclic3::Pair i, double q) const
double e(EvtCyclic3::Index i, EvtCyclic3::Pair j, double q) const
double qHelAbsMax(EvtCyclic3::Pair i) const
double p(EvtCyclic3::Index i, EvtCyclic3::Pair j, double q) const
double qMax(EvtCyclic3::Pair i, EvtCyclic3::Pair j, double q) const
double qResAbsMax(EvtCyclic3::Pair i) const
double qAbsMax(EvtCyclic3::Pair i) const
bool operator==(const EvtDalitzPlot &other) const
double mAbsMax(EvtCyclic3::Pair i) const
double bigM() const
double cosTh(EvtCyclic3::Pair i1, double q1, EvtCyclic3::Pair i2, double q2) const
Index other(Index i, Index j)
Definition: EvtCyclic3.cpp:156
const EvtDalitzPlot * clone() const
void print() const