YAP
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SpinAmplitude.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_SpinAmplitude_h
22 #define yap_SpinAmplitude_h
23 
24 #include "fwd/SpinAmplitude.h"
25 
26 #include "fwd/Model.h"
27 #include "fwd/ParticleCombination.h"
28 #include "fwd/Spin.h"
29 #include "fwd/StatusManager.h"
30 
31 #include "CachedValue.h"
32 #include "MathUtilities.h"
33 #include "StaticDataAccessor.h"
34 
35 #include <array>
36 #include <complex>
37 #include <iostream>
38 #include <memory>
39 
40 namespace yap {
41 
47 {
48 protected:
49 
58  SpinAmplitude(Model& m, unsigned two_J, const SpinVector& two_j, unsigned l, unsigned two_s,
59  const ParticleCombinationEqualTo& equal);
60 
61 public:
62 
65  using AmplitudeSubmap = std::map<SpinProjectionVector, std::shared_ptr<ComplexCachedValue> >;
66 
69  using AmplitudeMap = std::map<int, AmplitudeSubmap>;
70 
72  virtual operator std::string() const;
73 
76 
78  const unsigned initialTwoJ() const
79  { return InitialTwoJ_; }
80 
82  const SpinVector& finalTwoJ() const
83  { return FinalTwoJ_; }
84 
86  const unsigned L() const
87  { return L_; }
88 
90  const unsigned twoS() const
91  { return TwoS_; }
92 
94  const std::set<int> twoM() const;
95 
97  const std::set<SpinProjectionVector> twoM(int two_M) const;
98 
100 
107  virtual const std::complex<double> calc(int two_M, const SpinProjectionVector& two_m,
108  const DataPoint& d, const std::shared_ptr<ParticleCombination>& pc) const = 0;
109 
114  virtual void calculate(DataPoint& d, StatusManager& sm) const override;
115 
121  virtual const std::complex<double> amplitude(const DataPoint& d, const std::shared_ptr<ParticleCombination>& pc,
122  int two_M, const SpinProjectionVector& two_m) const
123  { return Amplitudes_.at(two_M).at(two_m)->value(d, symmetrizationIndex(pc)); }
124 
126  bool equalTo(const SpinAmplitude& other) const;
127 
129  virtual bool equals(const SpinAmplitude& other) const;
130 
132  virtual std::string formalism() const = 0;
133 
135  friend class DecayChannel;
136 
137 protected:
138 
144  void addAmplitude(int two_M, const SpinProjectionVector& two_m, bool store_null = false);
145 
146 private:
147 
149  unsigned InitialTwoJ_;
150 
152  SpinVector FinalTwoJ_;
153 
155  unsigned L_;
156 
158  unsigned TwoS_;
159 
162 
164  friend bool operator==(const SpinAmplitude& A, const SpinAmplitude& B)
165  { return typeid(A) == typeid(B) and A.equals(B); }
166 
167 };
168 
170 inline std::string to_string(const SpinAmplitude& sa)
171 { return (std::string)sa; }
172 
174 inline std::ostream& operator<< (std::ostream& os, const SpinAmplitude& sa)
175 { os << to_string(sa); return os; }
176 
178 std::string to_string(const SpinAmplitudeVector& saV);
179 
180 }
181 
182 #endif
const unsigned twoS() const
Definition: SpinAmplitude.h:90
std::map< SpinProjectionVector, std::shared_ptr< ComplexCachedValue > > AmplitudeSubmap
maps SpinProjectionVector to ComplexCachedValue
Definition: SpinAmplitude.h:65
bool equalTo(const SpinAmplitude &other) const
check equivalence: only check spins and angular momenta
Definition: SpinAmplitude.cxx:103
const ParticleCombinationEqualTo & equal() const
Definition: DataAccessor.h:47
virtual void calculate(DataPoint &d, StatusManager &sm) const override
Definition: SpinAmplitude.cxx:29
SpinVector FinalTwoJ_
SpinVector of daughters.
Definition: SpinAmplitude.h:152
friend bool operator==(const SpinAmplitude &A, const SpinAmplitude &B)
equality operator
Definition: SpinAmplitude.h:164
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
unsigned TwoS_
twice the total spin angular momentum
Definition: SpinAmplitude.h:158
std::map< int, AmplitudeSubmap > AmplitudeMap
maps parent spin projectin to AmplitudeSubmap
Definition: SpinAmplitude.h:69
Class for holding data and cached values per data point for fast calculation.
Definition: DataPoint.h:35
Base class for all data accessors that will only write to DataPoint once at initial data loading...
Definition: StaticDataAccessor.h:36
unsigned InitialTwoJ_
Initial-state spin * 2.
Definition: SpinAmplitude.h:149
std::ostream & operator<<(std::ostream &os, const DecayChannel &dc)
<< operator
Definition: DecayChannel.h:127
const unsigned initialTwoJ() const
Definition: SpinAmplitude.h:78
AmplitudeMap Amplitudes_
Cached complex spin amplitude.
Definition: SpinAmplitude.h:161
const std::set< int > twoM() const
Definition: SpinAmplitude.cxx:61
Definition: StatusManager.h:32
const SpinVector & finalTwoJ() const
Definition: SpinAmplitude.h:82
SpinAmplitude(Model &m, unsigned two_J, const SpinVector &two_j, unsigned l, unsigned two_s, const ParticleCombinationEqualTo &equal)
Definition: SpinAmplitude.cxx:13
Class implementing a PWA model.
Definition: Model.h:56
unsigned symmetrizationIndex(const std::shared_ptr< ParticleCombination > &c) const
Definition: DataAccessor.h:55
unsigned L_
orbital angular momentum
Definition: SpinAmplitude.h:155
const unsigned L() const
Definition: SpinAmplitude.h:86
virtual const std::complex< double > calc(int two_M, const SpinProjectionVector &two_m, const DataPoint &d, const std::shared_ptr< ParticleCombination > &pc) const =0
virtual bool equals(const SpinAmplitude &other) const
check equality: calls equalTo and checks symmetrizationIndices
Definition: SpinAmplitude.cxx:113
std::string to_string(const CachedValue::Status &S)
streaming operator for CachedValue::Status
Definition: CachedValue.cxx:27
void addAmplitude(int two_M, const SpinProjectionVector &two_m, bool store_null=false)
Definition: SpinAmplitude.cxx:86
Class implementing a decay channel.
Definition: DecayChannel.h:40
virtual std::string formalism() const =0
Abstract base class implementing a spin amplitude.
Definition: SpinAmplitude.h:46