ROOTPWA
pwa2000/libpp/particle.h
Go to the documentation of this file.
1 #ifndef __PARTICLE_H_
2 #define __PARTICLE_H_
3 
4 
5 #include <list>
6 #include <string>
7 #include <complex>
8 
9 #include "Vec.h"
10 #include "lorentz.h"
11 #include "particleData.h"
12 
13 
14 class massDep;
15 class event;
16 class decay;
17 
18 
19 class particle : public particleData {
20 
21 public:
22 
23  particle();
24  particle(const particle& p);
25  particle(const particleData& data, const int charge);
26  virtual ~particle();
27 
28  particle& operator = (const particle& p);
29  int operator == (const particle& p) { return Mass() == p.Mass(); }
30  int operator != (const particle& p) { return Mass() != p.Mass(); }
31  int operator < (const particle& p) { return Mass() < p.Mass(); }
33  friend particle operator * (const lorentzTransform& L,
34  const particle& p);
35 
36  particle& setCharge (const int charge);
37  particle& set4P (const fourVec& p4);
38  particle& set3P (const threeVec& p3);
39  particle& Index (const int i);
40  particle& setDecay (const decay& d);
42 
43  decay* Decay() const { return _decay; }
44  int Stable() const { return (_decay) ? 0 : 1; }
45  threeVec get3P() const { return _p.V(); }
46  int Index() const { return _index; }
47  int Charge() const { return _charge; }
48  fourVec get4P() const { return _p; }
50  const int debug = 0);
51 
52  std::list<int>& helicities ();
53  particle& addHelicity(const int lam);
54 
55  int is(const std::string& name) const;
56 
57  fourVec setupFrames(const int debug = 0);
58 
59  double q () const;
60  double q0() const;
61 
62  std::complex<double> breitWigner() const;
63 
64  std::complex<double> decayAmp(const int lambda,
65  const int debug = 0);
66 
67  std::string sprint (const std::string& space = " ") const;
68  void print () const;
69  void printFrames() const;
70 
71  static void debug(const int d = 1) { _particle_debug = d; }
72 
73 private:
74 
75  static int _particle_debug;
76  int _lambda;
77  int _charge;
80  int _index;
81  std::list<int> _helicities;
84 
85 };
86 
87 
88 class decay {
89 
90 public:
91 
92  decay();
93  decay(const decay&);
94  virtual ~decay();
95 
96  decay& addChild (const particle& p);
97  decay& setL (const int l);
98  decay& setS (const int s);
99  decay& calculateS();
100 
101  int L() const { return _l; }
102  int S() const { return _s; }
103  fourVec* get4P(particle* part,
104  const int debug = 0);
105 
106  decay& operator = (const decay& d);
108 
109  fourVec fill(const event& e,
110  const int debug = 0);
111 
113  const int debug = 0);
114 
115  std::complex<double> expt_amp(const double b,
116  const double t,
117  const int debug = 0);
118 
119  std::complex<double> amp(const int j,
120  const int m,
121  const int debug = 0);
122 
123  void print () const;
124  void printFrames() const;
125 
126  void debug(const int d = 1) { _decay_debug = d; }
127 
128  std::list<particle> _children;
129 
130 private:
131 
132  void _init(const std::list<particle>& children,
133  const int l,
134  const int s,
135  const double mass);
136 
137  static int _decay_debug;
138  std::list<particle> _childrenInFrames;
139  int _l;
140  int _s;
141  double _mass;
142 
143 };
144 
145 
146 #define _PARTICLE_H
147 #endif