YAP
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
HelicityFormalism.h
Go to the documentation of this file.
1 /* YAP - Yet another PWA toolkit
2  Copyright 2015, Technische Universitaet Muenchen,
3  Authors: Daniel Greenwald, Johannes Rauch
4 
5  This program is free software: you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation, either version 3 of the License, or
8  (at your option) any later version.
9 
10  This program is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License
16  along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18 
20 
21 #ifndef yap_HelicityFormalism_h
22 #define yap_HelicityFormalism_h
23 
24 #include "fwd/DataPoint.h"
25 #include "fwd/Model.h"
26 #include "fwd/ParticleCombination.h"
27 #include "fwd/Spin.h"
28 
29 #include "RequiresHelicityAngles.h"
30 #include "SpinAmplitude.h"
31 #include "SpinAmplitudeCache.h"
32 
33 #include <complex>
34 #include <map>
35 #include <memory>
36 
37 namespace yap {
38 
44 {
45 protected:
46 
53  HelicitySpinAmplitude(Model& m, unsigned two_J, const SpinVector& two_j, unsigned l, unsigned two_s);
54 
55 public:
56 
62  virtual const std::complex<double> amplitude(const DataPoint& d, const std::shared_ptr<ParticleCombination>& pc,
63  int two_M, const SpinProjectionVector& two_m) const override
64  { return (initialTwoJ() == 0) ? Coefficients_.at(two_m) : SpinAmplitude::amplitude(d, pc, two_M, two_m); }
65 
69  virtual void calculate(DataPoint& d, StatusManager& sm) const override
70  { if (initialTwoJ() != 0) SpinAmplitude::calculate(d, sm); }
71 
77  virtual const std::complex<double> calc(int two_M, const SpinProjectionVector& two_m,
78  const DataPoint& d, const std::shared_ptr<ParticleCombination>& pc) const override;
79 
81  virtual bool equals(const SpinAmplitude& other) const override
82  { return dynamic_cast<const HelicitySpinAmplitude*>(&other) and SpinAmplitude::equals(other); }
83 
85  virtual std::string formalism() const override
86  { return "helicity formalism"; }
87 
89  friend class HelicityFormalism;
90 
91 private:
92 
95  std::map<SpinProjectionVector, double> Coefficients_;
96 
97 };
98 
103 {
104 public:
105 
108 
109 private:
110 
118  virtual std::shared_ptr<SpinAmplitude> create(Model& m, unsigned two_J, const SpinVector& two_j, unsigned l, unsigned two_s) const override
119  { return std::shared_ptr<SpinAmplitude>(new HelicitySpinAmplitude(m, two_J, two_j, l, two_s)); }
120 
121 };
122 
123 }
124 
125 #endif
virtual std::shared_ptr< SpinAmplitude > create(Model &m, unsigned two_J, const SpinVector &two_j, unsigned l, unsigned two_s) const override
Definition: HelicityFormalism.h:118
Base class to be inherited from to denote that an object requires a model calculate helicity angles...
Definition: RequiresHelicityAngles.h:29
HelicityFormalism()
Constructor.
Definition: HelicityFormalism.h:107
HelicitySpinAmplitude(Model &m, unsigned two_J, const SpinVector &two_j, unsigned l, unsigned two_s)
Definition: HelicityFormalism.cxx:14
virtual void calculate(DataPoint &d, StatusManager &sm) const override
Definition: SpinAmplitude.cxx:29
virtual void calculate(DataPoint &d, StatusManager &sm) const override
Definition: HelicityFormalism.h:69
virtual std::string formalism() const override
Definition: HelicityFormalism.h:85
virtual const std::complex< double > amplitude(const DataPoint &d, const std::shared_ptr< ParticleCombination > &pc, int two_M, const SpinProjectionVector &two_m) const
Definition: SpinAmplitude.h:121
Class for holding data and cached values per data point for fast calculation.
Definition: DataPoint.h:35
const unsigned initialTwoJ() const
Definition: SpinAmplitude.h:78
virtual const std::complex< double > amplitude(const DataPoint &d, const std::shared_ptr< ParticleCombination > &pc, int two_M, const SpinProjectionVector &two_m) const override
Definition: HelicityFormalism.h:62
Caches SpinAmplitudes.
Definition: SpinAmplitudeCache.h:39
Definition: StatusManager.h:32
virtual const std::complex< double > calc(int two_M, const SpinProjectionVector &two_m, const DataPoint &d, const std::shared_ptr< ParticleCombination > &pc) const override
Definition: HelicityFormalism.cxx:55
Class implementing a PWA model.
Definition: Model.h:56
Class implementing a canonical spin amplitude, i.e. with defined relative angular momentum...
Definition: HelicityFormalism.h:43
virtual bool equals(const SpinAmplitude &other) const
check equality: calls equalTo and checks symmetrizationIndices
Definition: SpinAmplitude.cxx:113
std::map< SpinProjectionVector, double > Coefficients_
Definition: HelicityFormalism.h:95
Caches HelicitySpinAmplitude's.
Definition: HelicityFormalism.h:102
virtual bool equals(const SpinAmplitude &other) const override
check equality
Definition: HelicityFormalism.h:81
Abstract base class implementing a spin amplitude.
Definition: SpinAmplitude.h:46