21 #ifndef yap_SpinAmplitude_h
22 #define yap_SpinAmplitude_h
24 #include "fwd/SpinAmplitude.h"
26 #include "fwd/Model.h"
27 #include "fwd/ParticleCombination.h"
29 #include "fwd/StatusManager.h"
32 #include "MathUtilities.h"
58 SpinAmplitude(
Model& m,
unsigned two_J,
const SpinVector& two_j,
unsigned l,
unsigned two_s,
59 const ParticleCombinationEqualTo&
equal);
65 using AmplitudeSubmap = std::map<SpinProjectionVector, std::shared_ptr<ComplexCachedValue> >;
72 virtual operator std::string()
const;
86 const unsigned L()
const
90 const unsigned twoS()
const
94 const std::set<int>
twoM()
const;
97 const std::set<SpinProjectionVector>
twoM(
int two_M)
const;
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;
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
132 virtual std::string
formalism()
const = 0;
144 void addAmplitude(
int two_M,
const SpinProjectionVector& two_m,
bool store_null =
false);
165 {
return typeid(A) ==
typeid(B) and A.
equals(B); }
171 {
return (std::string)sa; }
178 std::string
to_string(
const SpinAmplitudeVector& saV);
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