]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TEvtGen/EvtGen/EvtGenBase/EvtDalitzPlot.hh
Converting TEvtGen to native cmake
[u/mrichter/AliRoot.git] / TEvtGen / EvtGen / EvtGenBase / EvtDalitzPlot.hh
1 //-----------------------------------------------------------------------
2 // File and Version Information: 
3 //      $Id: EvtDalitzPlot.hh,v 1.2 2009-03-16 16:44:53 robbep 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