ROOTPWA
isobarAmplitude.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 // virtual base class for isobar decay amplitude independent of formalism
29 //
30 //
31 // Author List:
32 // Boris Grube TUM (original author)
33 //
34 //
35 //-------------------------------------------------------------------------
36 
37 
38 #ifndef ISOBARAMPLITUDE_H
39 #define ISOBARAMPLITUDE_H
40 
41 
42 #include <complex>
43 #include <map>
44 #include <vector>
45 
46 #include "isobarDecayTopology.h"
47 
48 
49 namespace rpwa {
50 
51 
53  typedef boost::shared_ptr<rpwa::isobarAmplitude> isobarAmplitudePtr;
54 
55 
57 
58  public:
59 
62  virtual ~isobarAmplitude();
63 
64  const isobarDecayTopologyPtr& decayTopology () const { return _decay; }
65  void setDecayTopology(const isobarDecayTopologyPtr& decay);
66 
67  virtual void init();
68 
69  bool reflectivityBasis () const { return _useReflectivityBasis; }
70  bool boseSymmetrization () const { return _boseSymmetrize; }
71  bool isospinSymmetrization() const { return _isospinSymmetrize; }
72  void enableReflectivityBasis (const bool flag = true) { _useReflectivityBasis = flag; }
73  void enableBoseSymmetrization (const bool flag = true) { _boseSymmetrize = flag; }
74  void enableIsospinSymmetrization(const bool flag = true) { _isospinSymmetrize = flag; }
75 
76  bool doSpaceInversion() const { return _doSpaceInversion; }
77  bool doReflection () const { return _doReflection; }
78  void enableSpaceInversion(const bool flag = true) { _doSpaceInversion = flag; }
79  void enableReflection (const bool flag = true) { _doReflection = flag; }
80 
81  static TLorentzRotation gjTransform(const TLorentzVector& beamLv,
82  const TLorentzVector& XLv);
83 
84  std::complex<double> amplitude() const;
85  std::complex<double> operator ()() const { return amplitude(); }
86 
87  virtual std::string name () const { return "isobarAmplitude"; }
88  virtual std::ostream& printParameters(std::ostream& out) const;
89  virtual std::ostream& print (std::ostream& out) const;
90 
91  static bool debug() { return _debug; }
92  static void setDebug(const bool debug = true) { _debug = debug; }
93 
94 
95  protected:
96 
97  void spaceInvertDecay() const;
98  void reflectDecay () const;
99 
100  virtual void transformDaughters() const = 0;
101 
102  virtual std::complex<double> twoBodyDecayAmplitude
103  (const isobarDecayVertexPtr& vertex,
104  const bool topVertex) const = 0;
105 
106  virtual std::complex<double> twoBodyDecayAmplitudeSum
107  (const isobarDecayVertexPtr& vertex,
108  const bool topVertex = false) const;
109 
110  virtual std::complex<double> symTermAmp(const std::vector<unsigned int>& fsPartPermMap) const;
111 
112  virtual bool initSymTermMaps();
113 
120  std::vector<symTermMap> _symTermMaps;
121 
122  static bool _debug;
123 
124  };
125 
126 
127  inline
128  std::ostream&
129  operator <<(std::ostream& out,
130  const isobarAmplitude& amp)
131  {
132  return amp.print(out);
133  }
134 
135 
136 } // namespace rpwa
137 
138 
139 #endif // ISOBARAMPLITUDE_H