YAP
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ZemachFormalism.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_ZemachFormalism_h
22 #define yap_ZemachFormalism_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 "SpinAmplitude.h"
30 #include "SpinAmplitudeCache.h"
31 #include "UnitSpinAmplitude.h"
32 
33 #include <complex>
34 #include <memory>
35 
36 namespace yap {
37 
43 {
44 protected:
45 
52  ZemachSpinAmplitude(Model& m, unsigned two_J, const SpinVector& two_j, unsigned l, unsigned two_s);
53 
54 public:
55 
61  virtual const std::complex<double> amplitude(const DataPoint& d, const std::shared_ptr<ParticleCombination>& pc,
62  int two_M, const SpinProjectionVector& two_m) const override;
63 
67  virtual void calculate(DataPoint& d, StatusManager& sm) const override
68  { if (twoS() != 0) SpinAmplitude::calculate(d, sm); }
69 
75  virtual const std::complex<double> calc(int two_M, const SpinProjectionVector& two_m,
76  const DataPoint& d, const std::shared_ptr<ParticleCombination>& pc) const override;
77 
79  virtual bool equals(const SpinAmplitude& other) const override
80  { return dynamic_cast<const ZemachSpinAmplitude*>(&other) and SpinAmplitude::equals(other); }
81 
83  virtual std::string formalism() const override
84  { return "Zemach formalism"; }
85 
87  friend class ZemachFormalism;
88 
89 protected:
90 
92  virtual void addParticleCombination(std::shared_ptr<ParticleCombination> pc) override;
93 
94 };
95 
100 {
101 public:
102 
105 
106 private:
107 
115  virtual std::shared_ptr<SpinAmplitude> create(Model& m, unsigned two_J, const SpinVector& two_j, unsigned l, unsigned two_s) const override
116  { return std::shared_ptr<SpinAmplitude>(new ZemachSpinAmplitude(m, two_J, two_j, l, two_s)); }
117 
118 };
119 
120 
121 }
122 
123 #endif
Class implementing Zemach tensors.
Definition: ZemachFormalism.h:42
const unsigned twoS() const
Definition: SpinAmplitude.h:90
virtual void calculate(DataPoint &d, StatusManager &sm) const override
Definition: SpinAmplitude.cxx:29
virtual void calculate(DataPoint &d, StatusManager &sm) const override
Definition: ZemachFormalism.h:67
virtual bool equals(const SpinAmplitude &other) const override
check equality
Definition: ZemachFormalism.h:79
Class for holding data and cached values per data point for fast calculation.
Definition: DataPoint.h:35
virtual std::string formalism() const override
Definition: ZemachFormalism.h:83
ZemachFormalism()
Constructor.
Definition: ZemachFormalism.h:104
Caches SpinAmplitudes.
Definition: SpinAmplitudeCache.h:39
Definition: StatusManager.h:32
Class implementing a PWA model.
Definition: Model.h:56
virtual bool equals(const SpinAmplitude &other) const
check equality: calls equalTo and checks symmetrizationIndices
Definition: SpinAmplitude.cxx:113
virtual void addParticleCombination(std::shared_ptr< ParticleCombination > pc) override
call SpinAmplitude::addParticleCombination only if pc has more than 2 indices
Definition: ZemachFormalism.cxx:108
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: ZemachFormalism.cxx:121
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: ZemachFormalism.cxx:114
virtual std::shared_ptr< SpinAmplitude > create(Model &m, unsigned two_J, const SpinVector &two_j, unsigned l, unsigned two_s) const override
Definition: ZemachFormalism.h:115
ZemachSpinAmplitude(Model &m, unsigned two_J, const SpinVector &two_j, unsigned l, unsigned two_s)
Definition: ZemachFormalism.cxx:57
Abstract base class implementing a spin amplitude.
Definition: SpinAmplitude.h:46
Caches ZemachSpinAmplitude's.
Definition: ZemachFormalism.h:99