ROOTPWA
massDep.h
Go to the documentation of this file.
1 #ifndef MASSDEP_H
2 #define MASSDEP_H
3 
4 
5 #include <iostream>
6 #include <complex>
7 #include <vector>
8 
9 #include "particle.h"
10 #include "matrix.h"
11 
12 
13 class particle;
14 
15 
16 class massDep {
17 public:
18  massDep() { }
19  virtual ~massDep() { }
20  virtual massDep* create() const = 0;
21  virtual massDep* clone() const = 0;
22 
23  virtual void print() { std::cout << "massDep"; }
24  virtual std::complex<double> val(const particle& p) = 0;
25 };
26 
27 
28 class breitWigner : public massDep {
29 public:
31  virtual ~breitWigner() { }
33  breitWigner* create() const { return new breitWigner(); }
34  breitWigner* clone() const { return new breitWigner(*this); }
35 
36  virtual void print() { std::cout << "breitWigner"; }
37  std::complex<double> val(const particle& p);
38 };
39 
40 
41 class rhoPrime : public massDep {
42 public:
43  rhoPrime() { }
44  virtual ~rhoPrime() { }
45  rhoPrime(const rhoPrime&) { }
46  rhoPrime* create() const { return new rhoPrime(); }
47  rhoPrime* clone() const { return new rhoPrime(*this); }
48 
49  virtual void print() { std::cout << "rhoPrime"; }
50  std::complex<double> val(const particle& p);
51 };
52 
53 
54 class flatRange : public massDep {
55 public:
56  flatRange() : mlow(0),mhigh(10) { }
57  virtual ~flatRange() { }
58  flatRange(const flatRange& b) {mlow=b.mlow;mhigh=b.mhigh; }
59 
60  flatRange* create() const { std::cerr << "flatRange::create " << std::endl;return new flatRange(); }
61  flatRange* clone() const { return new flatRange(*this); }
62 
63  virtual void print() { std::cout << "flatRange"; }
64  std::complex<double> val(const particle& p);
65 
66  void setRange(double low, double high){
67  //std::cerr << low << "..." << high << std::endl;
68  mlow=low*0.001;mhigh=high*0.001;
69  //std::cerr << mlow << "..." << mhigh << std::endl;
70  }
71 
72 private:
73  double mlow;
74  double mhigh;
75 };
76 
77 
78 class flat : public massDep {
79 public:
80  flat() { }
81  virtual ~flat() { }
82  flat(const flat&) { }
83  flat* create() const { return new flat(); }
84  flat* clone() const { return new flat(*this); }
85 
86  virtual void print() { std::cout << "flat"; }
87  std::complex<double> val(const particle& p);
88 
89 };
90 
91 
97 class AMP_M : public massDep {
98 
99 protected:
100  int _Pmax;
101  int _Nmax;
106  std::vector<matrix<std::complex<double> > > _a;
107  std::vector<matrix<std::complex<double> > > _c;
109 
110 public:
112 
113  AMP_M();
114  virtual ~AMP_M() { }
115  AMP_M(const AMP_M&) { }
116  virtual massDep* create() const { return new AMP_M(); }
117  virtual massDep* clone() const { return new AMP_M(*this); }
118 
119  virtual void print() { std::cout << "AMP_M"; }
120  std::complex<double> val(const particle& p);
121 };
122 
123 
128 class AMP_ves : public AMP_M {
129 public:
130  AMP_ves() : AMP_M() { ves_sheet = 1; }
131  virtual ~AMP_ves() { }
132  AMP_ves(const AMP_ves&) { }
133  virtual massDep* create() const { return new AMP_ves(); }
134  virtual massDep* clone() const { return new AMP_ves(*this); }
135 
136  virtual void print() { std::cout << "AMP_ves"; }
137  std::complex<double> val(const particle& p);
138 };
139 
140 
155 class AMP_kach : public AMP_M {
156 public:
157  AMP_kach();
158  virtual ~AMP_kach() { }
159  AMP_kach(const AMP_kach&);
160  virtual massDep* create() const { return new AMP_kach(); }
161  virtual massDep* clone() const { return new AMP_kach(*this); }
162 
163  virtual void print() { std::cout << "AMP_kach"; }
164  //std::complex<double> val(const particle& p);
165 };
166 
167 //-------
168 // K-PI S-WAVE PARAMETRISATION
169 // SOURCE: NP B296 493 (see also Dima's fortran code)
170 // Here used formula exp(-i*a)*sin(a) + BW*exp(-2.*i*a)
171 // with BW parameters M=1.437 and W=0.355 .
172 // That gives amplitude and phase which coincide rouphly
173 // with pictures from article
174 //-------
175 // not properly implemented, so please don't use it yet
176 // take a simple BW for the K_0(1430) instead
177 class AMP_LASS : public massDep {
178 public:
179  AMP_LASS() { }
180  virtual ~AMP_LASS() { }
181  AMP_LASS(const AMP_LASS&) { }
182  AMP_LASS* create() const { return new AMP_LASS(); }
183  AMP_LASS* clone() const { return new AMP_LASS(*this); }
184 
185  virtual void print() { std::cout << "AMP_LASS"; }
186  std::complex<double> val(const particle& p);
187 };
188 
189 
190 #endif