ROOTPWA
massDependence.h
Go to the documentation of this file.
1 
2 //
3 // Copyright 2010
4 //
5 // This file is part of rootpwa
6 //
7 // rootpwa 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 // rootpwa 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 rootpwa. If not, see <http://www.gnu.org/licenses/>.
19 //
21 //-------------------------------------------------------------------------
22 // File and Version Information:
23 // $Rev:: $: revision of last commit
24 // $Author:: $: author of last commit
25 // $Date:: $: date of last commit
26 //
27 // Description:
28 // class hierarchy for mass-dependent part of the amplitude
29 //
30 //
31 // Author List:
32 // Boris Grube TUM (original author)
33 //
34 //
35 //-------------------------------------------------------------------------
36 
37 
38 #ifndef MASSDEPENDENCE_H
39 #define MASSDEPENDENCE_H
40 
41 
42 #include <iostream>
43 #include <complex>
44 
45 #include <boost/shared_ptr.hpp>
46 #include <boost/numeric/ublas/matrix.hpp>
47 
48 
49 namespace ublas = boost::numeric::ublas;
50 
51 
52 namespace rpwa {
53 
54  class isobarDecayVertex;
55  typedef boost::shared_ptr<isobarDecayVertex> isobarDecayVertexPtr;
56 
57 
61 
62  public:
63 
65  virtual ~massDependence() { }
66 
67  virtual std::complex<double> amp(const isobarDecayVertex& v) = 0;
68 
69  virtual std::complex<double> operator ()(const isobarDecayVertex& v) { return amp(v); }
70 
71  virtual std::string name() const { return "massDependence"; }
72 
73  bool operator ==(const massDependence& rhsMassDep) const { return this->isEqualTo(rhsMassDep); }
74  bool operator !=(const massDependence& rhsMassDep) const { return not (*this == rhsMassDep); }
75 
76  virtual std::ostream& print(std::ostream& out) const;
77 
78  static bool debug() { return _debug; }
79  static void setDebug(const bool debug = true) { _debug = debug; }
80 
81 
82  protected:
83 
84  virtual bool isEqualTo(const massDependence& massDep) const
85  { return typeid(massDep) == typeid(*this); }
86 
87  static bool _debug;
88 
89  };
90 
91 
92  typedef boost::shared_ptr<massDependence> massDependencePtr;
93 
94 
95  inline
96  std::ostream&
97  operator <<(std::ostream& out,
98  const massDependence& massDep)
99  {
100  return massDep.print(out);
101  }
102 
103 
107 
108  public:
109 
111  virtual ~flatMassDependence() { }
112 
113  virtual std::complex<double> amp(const isobarDecayVertex&);
114 
115  virtual std::string name() const { return "flatMassDependence"; }
116 
117  };
118 
119 
120  typedef boost::shared_ptr<flatMassDependence> flatMassDependencePtr;
121 
122 
123  inline
126  {
128  return massDep;
129  }
130 
131 
135 
136  public:
137 
140 
141  virtual std::complex<double> amp(const isobarDecayVertex& v);
142 
143  virtual std::string name() const { return "relativisticBreitWigner"; }
144 
145  };
146 
147 
148  typedef boost::shared_ptr<relativisticBreitWigner> relativisticBreitWignerPtr;
149 
150 
151  inline
154  {
156  return massDep;
157  }
158 
159 
163 
164  public:
165 
168 
169  virtual std::complex<double> amp(const isobarDecayVertex& v);
170 
171  virtual std::string name() const { return "constWidthBreitWigner"; }
172 
173  };
174 
175 
176  typedef boost::shared_ptr<constWidthBreitWigner> constWidthBreitWignerPtr;
177 
178 
179  inline
182  {
184  return massDep;
185  }
186 
187 
196 
197  public:
198 
200  virtual ~rhoBreitWigner() { }
201 
202  virtual std::complex<double> amp(const isobarDecayVertex& v);
203 
204  virtual std::string name() const { return "rhoBreitWigner"; }
205 
206  };
207 
208 
209  typedef boost::shared_ptr<rhoBreitWigner> rhoBreitWignerPtr;
210 
211 
212  inline
215  {
217  return massDep;
218  }
219 
220 
226 
227  public:
228 
230  virtual ~f0980BreitWigner() { }
231 
232  virtual std::complex<double> amp(const isobarDecayVertex& v);
233 
234  virtual std::string name() const { return "f0980BreitWigner"; }
235 
236  };
237 
238 
239  typedef boost::shared_ptr<f0980BreitWigner> f0980BreitWignerPtr;
240 
241 
242  inline
245  {
247  return massDep;
248  }
249 
250 
257 
258  public:
259 
262 
263  virtual std::complex<double> amp(const isobarDecayVertex& v);
264 
265  virtual std::string name() const { return "piPiSWaveAuMorganPenningtonM"; }
266 
267  protected:
268 
269  ublas::matrix<std::complex<double> > _T;
270  std::vector<ublas::matrix<std::complex<double> > > _a;
271  std::vector<ublas::matrix<std::complex<double> > > _c;
272  ublas::matrix<double> _sP;
274 
280 
281  };
282 
283 
284  typedef boost::shared_ptr<piPiSWaveAuMorganPenningtonM> piPiSWaveAuMorganPenningtonMPtr;
285 
286 
287  inline
290  {
292  return massDep;
293  }
294 
295 
301 
302  public:
303 
306 
307  virtual std::complex<double> amp(const isobarDecayVertex& v);
308 
309  virtual std::string name() const { return "piPiSWaveAuMorganPenningtonVes"; }
310 
311  };
312 
313 
314  typedef boost::shared_ptr<piPiSWaveAuMorganPenningtonVes> piPiSWaveAuMorganPenningtonVesPtr;
315 
316 
317  inline
320  {
322  return massDep;
323  }
324 
325 
341 
342  public:
343 
346 
347  virtual std::string name() const { return "piPiSWaveAuMorganPenningtonKachaev"; }
348 
349  };
350 
351 
352  typedef boost::shared_ptr<piPiSWaveAuMorganPenningtonKachaev> piPiSWaveAuMorganPenningtonKachaevPtr;
353 
354 
355  inline
358  {
360  return massDep;
361  }
362 
363 
368 
369  public:
370 
372  virtual ~rhoPrimeMassDep() { }
373 
374  virtual std::complex<double> amp(const isobarDecayVertex& v);
375 
376  virtual std::string name() const { return "rhoPrimeMassDep"; }
377 
378  };
379 
380 
381  typedef boost::shared_ptr<rhoPrimeMassDep> rhoPrimeMassDepPtr;
382 
383 
384  inline
387  {
389  return massDep;
390  }
391 
392 
393 } // namespace rpwa
394 
395 
396 #endif // MASSDEPENDENCE_H