AmpGen 2.1
Loading...
Searching...
No Matches
AmplitudeRules.h
Go to the documentation of this file.
1#ifndef AMPGEN_AMPLITUDERULES_H
2#define AMPGEN_AMPLITUDERULES_H
3
4#include <stddef.h>
5#include <complex>
6#include <map>
7#include <string>
8#include <utility>
9#include <vector>
10
11#include "AmpGen/EventType.h"
12#include "AmpGen/Expression.h"
14#include "AmpGen/Event.h"
15#include "AmpGen/Particle.h"
17#include "AmpGen/Property.h"
18#include "AmpGen/Configurable.h"
20
21namespace AmpGen {
22 class MinuitExpression;
24
25 class CouplingConstant : public Configurable<CouplingConstant> {
26 public:
27 CouplingConstant() = default;
28 virtual ~CouplingConstant() = default;
29
33 std::string name() const { return m_name; }
34 std::string head() const { return m_particle.name(); }
35 std::string prefix() const { return m_prefix; }
37 MinuitProxy x() const { return m_re; }
38 MinuitProxy y() const { return m_im; }
41 const Particle &particle() const { return m_particle; }
42 coordinateType coordinates() const { return m_coord; }
43 angType angularUnit() const { return m_angUnit; }
44
45 private:
46 std::string m_prefix{""};
47 std::string m_name{""};
48 MinuitProxy m_re{nullptr};
49 MinuitProxy m_im{nullptr};
50 MinuitExpression *m_expr{nullptr};
51 Particle m_particle;
52 Property<coordinateType> m_coord{this, "CouplingConstant::Coordinates", coordinateType::cartesian};
53 Property<angType> m_angUnit{this, "CouplingConstant::AngularUnits", angType::rad};
54 double m_sf{1};
55 };
56
58 public:
59 TotalCoupling() = default;
62 std::complex<double> operator()() const;
64 void print() const;
65 CouplingConstant operator[](const size_t &index) { return couplings[index]; }
66 bool isFixed() const;
67 bool contains(const std::string &name) const;
68 size_t size() const { return couplings.size(); }
69 std::vector<CouplingConstant>::const_iterator begin() const { return couplings.begin(); }
70 std::vector<CouplingConstant>::const_iterator end() const { return couplings.end(); }
71
72 private:
73 std::vector<CouplingConstant> couplings;
74 };
75
77 public:
78 static const AmplitudeRules *get();
80 AmplitudeRules() = default;
82 std::vector<CouplingConstant> rulesForDecay(const std::string &head, const std::string &prefix = "") const;
83 bool hasDecay(const std::string &head) const;
84 const std::map<std::string, std::vector<CouplingConstant>> &rules() const;
85 std::vector<std::pair<Particle, TotalCoupling>> getMatchingRules(const EventType &type, const std::string &prefix = "");
86 std::vector<CouplingConstant> processesThatProduce(const Particle &particle) const;
87
88 std::vector<std::pair<Particle, TotalCoupling>> expand(const CouplingConstant &coupling) const;
89 void add_rule(const Particle &p, double coupling);
90
91 private:
92 std::map<std::string, std::vector<CouplingConstant>> m_rules;
93 static AmplitudeRules *gAmplitudeRules;
94 };
95
96} // namespace AmpGen
97
98#endif
std::vector< std::pair< Particle, TotalCoupling > > getMatchingRules(const EventType &type, const std::string &prefix="")
bool hasDecay(const std::string &head) const
static const AmplitudeRules * get()
const std::map< std::string, std::vector< CouplingConstant > > & rules() const
static AmplitudeRules * create(const MinuitParameterSet &mps)
std::vector< CouplingConstant > rulesForDecay(const std::string &head, const std::string &prefix="") const
std::vector< std::pair< Particle, TotalCoupling > > expand(const CouplingConstant &coupling) const
AmplitudeRules(const MinuitParameterSet &mps)
void add_rule(const Particle &p, double coupling)
std::vector< CouplingConstant > processesThatProduce(const Particle &particle) const
MinuitProxy y() const
virtual ~CouplingConstant()=default
std::string prefix() const
CouplingConstant(MinuitExpression *expression)
const Particle & particle() const
CouplingConstant(const Particle &particle, double f)
std::string name() const
complex_t operator()() const
coordinateType coordinates() const
std::string head() const
MinuitProxy x() const
Expression to_expression() const
angType angularUnit() const
CouplingConstant(MinuitProxy re, MinuitProxy im)
EventType eventType() const
Deals with final state configuration of events, specifically dealing with the ordering of particles i...
Definition EventType.h:22
Wrapper class for shared_ptrs to virtual expressions for use in conjunction with operators to build e...
Definition Expression.h:135
Describes a particle, its decay process and subsequent decay products, which are also Particles.
Definition Particle.h:103
TotalCoupling(const CouplingConstant &pA)
bool isFixed() const
bool contains(const std::string &name) const
CouplingConstant operator[](const size_t &index)
TotalCoupling(const TotalCoupling &other, const CouplingConstant &pA)
std::vector< CouplingConstant >::const_iterator begin() const
std::complex< double > operator()() const
Expression to_expression() const
std::vector< CouplingConstant >::const_iterator end() const
std::complex< real_t > complex_t
Definition Types.h:7