]>
Commit | Line | Data |
---|---|---|
da0e9ce3 | 1 | //----------------------------------------------------------------------- |
2 | // File and Version Information: | |
3 | // $Id: EvtDalitzPlot.hh,v 1.16 2003/06/20 17:20:03 dvoretsk Exp $ | |
4 | // | |
5 | // Environment: | |
6 | // This software is part of the EvtGen package developed jointly | |
7 | // for the BaBar and CLEO collaborations. If you use all or part | |
8 | // of it, please give an appropriate acknowledgement. | |
9 | // | |
10 | // Copyright Information: | |
11 | // Copyright (C) 1998 Caltech, UCSB | |
12 | // | |
13 | // Module creator: | |
14 | // Alexei Dvoretskii, Caltech, 2001-2002. | |
15 | //----------------------------------------------------------------------- | |
16 | ||
17 | #ifndef EVT_DALITZ_PLOT_HH | |
18 | #define EVT_DALITZ_PLOT_HH | |
19 | ||
20 | #include <assert.h> | |
21 | #include "EvtGenBase/EvtCyclic3.hh" | |
22 | #include "EvtGenBase/EvtTwoBodyVertex.hh" | |
23 | #include "EvtGenBase/EvtDecayMode.hh" | |
24 | ||
25 | class EvtDalitzPlot { | |
26 | public: | |
27 | ||
28 | EvtDalitzPlot(); | |
29 | EvtDalitzPlot(double mA, double mB, double mC, double bigM, double ldel = 0., double rdel = 0.); | |
30 | EvtDalitzPlot(const EvtDecayMode& mode, double ldel = 0., double rdel = 0.); | |
31 | EvtDalitzPlot(const EvtDalitzPlot& other); | |
32 | ~EvtDalitzPlot(); | |
33 | bool operator==(const EvtDalitzPlot& other) const; | |
34 | const EvtDalitzPlot* clone() const; | |
35 | ||
36 | ||
37 | // Absolute limits for masses squared in the Dalitz plot | |
38 | // e.g. qAbsMin(0) is the lowest possible value | |
39 | // for m2 of particles {12} | |
40 | ||
41 | double qAbsMin(EvtCyclic3::Pair i) const; | |
42 | double qAbsMax(EvtCyclic3::Pair i) const; | |
43 | double mAbsMin(EvtCyclic3::Pair i) const; | |
44 | double mAbsMax(EvtCyclic3::Pair i) const; | |
45 | ||
46 | // Absolute limits for Zemach coordinate qres and qhel (approximate) | |
47 | // qHelAbsMin(BC,CA) means absolute minimum for (qCA-qAB)/2. | |
48 | ||
49 | double qResAbsMin(EvtCyclic3::Pair i) const; | |
50 | double qResAbsMax(EvtCyclic3::Pair i) const; | |
51 | double qHelAbsMin(EvtCyclic3::Pair i) const; | |
52 | double qHelAbsMax(EvtCyclic3::Pair i) const; | |
53 | inline double qSumMin() const { return sum() + _ldel; } | |
54 | inline double qSumMax() const { return sum() + _rdel; } | |
55 | inline bool fuzzy() const { return (_rdel - _ldel != 0.); } | |
56 | ||
57 | // Find the area of the Dalitz plot by numeric integration. (N bins for variable q(i) are used). | |
58 | // Very large numbers of N can result in a very long calculation. It should not | |
59 | // matter which two pairs f variables are used. The integral should eventually | |
60 | // converge to the same number | |
61 | ||
62 | double getArea(int N = 1000, EvtCyclic3::Pair i = EvtCyclic3::AB, EvtCyclic3::Pair j = EvtCyclic3::BC) const; | |
63 | ||
64 | // Limits for masses squared when one mass squared is known | |
65 | ||
66 | double qMin(EvtCyclic3::Pair i, EvtCyclic3::Pair j, double q) const; | |
67 | double qMax(EvtCyclic3::Pair i, EvtCyclic3::Pair j, double q) const; | |
68 | ||
69 | ||
70 | // Coordinate transformations | |
71 | ||
72 | double cosTh(EvtCyclic3::Pair i1, double q1, EvtCyclic3::Pair i2, double q2) const; | |
73 | double e(EvtCyclic3::Index i, EvtCyclic3::Pair j, double q) const; | |
74 | double p(EvtCyclic3::Index i, EvtCyclic3::Pair j, double q) const; | |
75 | ||
76 | double q(EvtCyclic3::Pair i1, double cosTh, EvtCyclic3::Pair i2, double q2) const; | |
77 | ||
78 | // |J| of transformation of qi to cosTh in the rest-frame of j | |
79 | ||
80 | double jacobian(EvtCyclic3::Pair i, double q) const; | |
81 | ||
82 | ||
83 | // Given resonance index and mass returns decay | |
84 | // and birth vertices | |
85 | ||
86 | EvtTwoBodyVertex vD(EvtCyclic3::Pair iRes, double m0, int L) const; | |
87 | EvtTwoBodyVertex vB(EvtCyclic3::Pair iRes, double m0, int L) const; | |
88 | ||
89 | // Accessors | |
90 | ||
91 | double sum() const; | |
92 | inline double bigM() const { return _bigM; } | |
93 | inline double mA() const { return _mA; } | |
94 | inline double mB() const { return _mB; } | |
95 | inline double mC() const { return _mC; } | |
96 | double m(EvtCyclic3::Index i) const; | |
97 | ||
98 | ||
99 | void print() const; | |
100 | ||
101 | void sanityCheck() const; | |
102 | ||
103 | protected: | |
104 | ||
105 | // Defines two dimensional dalitz plot | |
106 | ||
107 | double _mA; | |
108 | double _mB; | |
109 | double _mC; | |
110 | double _bigM; | |
111 | ||
112 | // Defines third dimension, or fuzziness. M^2 + ldel < M^2 < M^2 + rdel | |
113 | ||
114 | double _ldel; | |
115 | double _rdel; | |
116 | ||
117 | }; | |
118 | ||
119 | #endif | |
120 | ||
121 |