AmpGen
2.1
Toggle main menu visibility
Loading...
Searching...
No Matches
FitFraction.h
Go to the documentation of this file.
1
#ifndef AMPGEN_FITFRACTION_H
2
#define AMPGEN_FITFRACTION_H
3
4
#include <memory>
5
#include <string>
6
#include <vector>
7
#include <algorithm>
8
#include "
AmpGen/Types.h
"
9
#include "
AmpGen/ErrorPropagator.h
"
10
#include "
AmpGen/AmplitudeRules.h
"
11
12
namespace
AmpGen
{
13
class
EventType
;
14
class
Particle
;
15
16
class
FitFraction
{
17
public
:
18
FitFraction
(
const
std::string &line);
19
FitFraction
(
const
std::string &
name
,
const
double
&frac,
const
double
&
err
);
20
FitFraction
() =
default
;
21
22
void
setFracErr
(
const
double
&f,
const
double
&e);
23
double
val
()
const
;
24
double
err
()
const
;
25
std::string
name
()
const
;
26
27
private
:
28
std::string m_name;
29
double
m_value;
30
double
m_error;
31
};
32
33
bool
operator<
(
const
FitFraction
&lhs,
const
FitFraction
&rhs);
34
bool
operator>
(
const
FitFraction
&lhs,
const
FitFraction
&rhs);
35
bool
operator==
(
const
FitFraction
&lhs,
const
FitFraction
&rhs);
36
std::ostream &
operator<<
(std::ostream &os,
const
FitFraction
&obj);
37
38
template
<
class
pdf_type>
struct
FitFractionCalculator
{
39
struct
fcalc
{
40
std::string
name
;
41
std::vector<size_t>
i
;
42
std::vector<size_t>
j
;
43
fcalc
(
const
std::string &
name
,
const
std::vector<size_t> &
i
) :
name
(
name
),
i
(
i
),
j
(
i
) {};
44
fcalc
(
const
std::string &
name
,
const
std::vector<size_t> &
i
,
const
std::vector<size_t> &
j
) :
name
(
name
),
i
(
i
),
j
(
j
) {};
45
};
46
pdf_type *
pdf
;
47
std::vector<fcalc>
calculators
;
48
std::vector<size_t>
normSet
;
49
bool
recalculateIntegrals
;
50
template
<
class
... ARGS>
void
emplace_back
(ARGS &&...args) {
calculators
.emplace_back(args...); }
51
52
FitFractionCalculator
(pdf_type *
pdf
,
const
std::vector<size_t> &
normSet
,
const
bool
&
recalculateIntegrals
=
false
)
53
:
pdf
(
pdf
),
normSet
(
normSet
),
recalculateIntegrals
(
recalculateIntegrals
) {}
54
std::vector<double>
operator()
() {
55
if
(
recalculateIntegrals
)
56
pdf
->prepare();
57
else
58
pdf
->transferParameters();
59
std::vector<double> rv;
60
double
sum = 0;
61
for
(
size_t
i = 0; i !=
calculators
.size(); ++i) {
62
auto
v =
getVal
(i);
63
rv.push_back(v);
64
sum += v;
65
}
66
rv.push_back(sum);
67
return
rv;
68
}
69
real_t
norm
()
const
{
70
complex_t
sum = 0;
71
for
(
auto
&i :
normSet
) {
72
for
(
auto
&j :
normSet
) { sum += (*pdf)[i].coefficient * std::conj((*
pdf
)[j].coefficient) * (j >= i ?
pdf
->norm(i, j) : std::conj(
pdf
->norm(j, i))); }
73
}
74
return
std::real(sum);
75
}
76
real_t
getVal
(
const
size_t
&index,
const
bool
&getImaginaryPart =
false
)
const
{
77
complex_t
sum = 0;
78
for
(
auto
&i :
calculators
[index].i) {
79
for
(
auto
&j :
calculators
[index].j) {
80
sum += (*pdf)[i].coefficient * std::conj((*
pdf
)[j].coefficient) * (j >= i ?
pdf
->norm(i, j) : std::conj(
pdf
->norm(j, i)));
81
}
82
}
83
return
(getImaginaryPart ? std::imag(sum) : std::real(sum)) /
norm
();
84
}
85
std::vector<FitFraction>
operator()
(
const
std::string &name,
const
LinearErrorPropagator
&linProp) {
86
auto
values = (*this)();
87
auto
errors = linProp.
getVectorError
(*
this
,
calculators
.size() + 1);
88
std::vector<FitFraction> fractions;
89
for
(
size_t
i = 0; i <
calculators
.size(); ++i) fractions.emplace_back(
calculators
[i].name, values[i], errors[i]);
90
std::sort(fractions.begin(), fractions.end());
91
std::reverse(fractions.begin(), fractions.end());
92
fractions.emplace_back(
"Sum_"
+ name, *values.rbegin(), *errors.rbegin());
93
return
fractions;
94
}
95
};
96
}
// namespace AmpGen
97
98
#endif
AmplitudeRules.h
ErrorPropagator.h
Types.h
AmpGen::EventType
Deals with final state configuration of events, specifically dealing with the ordering of particles i...
Definition
EventType.h:22
AmpGen::FitFraction
Definition
FitFraction.h:16
AmpGen::FitFraction::FitFraction
FitFraction(const std::string &name, const double &frac, const double &err)
AmpGen::FitFraction::name
std::string name() const
AmpGen::FitFraction::FitFraction
FitFraction(const std::string &line)
AmpGen::FitFraction::setFracErr
void setFracErr(const double &f, const double &e)
AmpGen::FitFraction::val
double val() const
AmpGen::FitFraction::err
double err() const
AmpGen::FitFraction::FitFraction
FitFraction()=default
AmpGen::LinearErrorPropagator
Propagates uncertainties on functors using either a MinuitParameterSet (thus assuming a diagonal cova...
Definition
ErrorPropagator.h:30
AmpGen::LinearErrorPropagator::getVectorError
std::vector< double > getVectorError(const std::function< std::vector< double >(void)> &fcn, size_t RANK) const
AmpGen::Particle
Describes a particle, its decay process and subsequent decay products, which are also Particles.
Definition
Particle.h:103
AmpGen
Definition
AddCPConjugate.h:2
AmpGen::real_t
double real_t
Definition
Types.h:6
AmpGen::complex_t
std::complex< real_t > complex_t
Definition
Types.h:7
AmpGen::operator<
Expression operator<(const Expression &A, const Expression &B)
AmpGen::operator<<
std::ostream & operator<<(std::ostream &os, const CompiledExpressionBase &expression)
AmpGen::operator==
Expression operator==(const Expression &A, const Expression &B)
AmpGen::operator>
Expression operator>(const Expression &A, const Expression &B)
AmpGen::FitFractionCalculator::fcalc::name
std::string name
Definition
FitFraction.h:40
AmpGen::FitFractionCalculator::fcalc::fcalc
fcalc(const std::string &name, const std::vector< size_t > &i, const std::vector< size_t > &j)
Definition
FitFraction.h:44
AmpGen::FitFractionCalculator::fcalc::fcalc
fcalc(const std::string &name, const std::vector< size_t > &i)
Definition
FitFraction.h:43
AmpGen::FitFractionCalculator::fcalc::i
std::vector< size_t > i
Definition
FitFraction.h:41
AmpGen::FitFractionCalculator::fcalc::j
std::vector< size_t > j
Definition
FitFraction.h:42
AmpGen::FitFractionCalculator::FitFractionCalculator
FitFractionCalculator(pdf_type *pdf, const std::vector< size_t > &normSet, const bool &recalculateIntegrals=false)
Definition
FitFraction.h:52
AmpGen::FitFractionCalculator::emplace_back
void emplace_back(ARGS &&...args)
Definition
FitFraction.h:50
AmpGen::FitFractionCalculator::pdf
pdf_type * pdf
Definition
FitFraction.h:46
AmpGen::FitFractionCalculator::norm
real_t norm() const
Definition
FitFraction.h:69
AmpGen::FitFractionCalculator::calculators
std::vector< fcalc > calculators
Definition
FitFraction.h:47
AmpGen::FitFractionCalculator::getVal
real_t getVal(const size_t &index, const bool &getImaginaryPart=false) const
Definition
FitFraction.h:76
AmpGen::FitFractionCalculator::recalculateIntegrals
bool recalculateIntegrals
Definition
FitFraction.h:49
AmpGen::FitFractionCalculator::normSet
std::vector< size_t > normSet
Definition
FitFraction.h:48
AmpGen::FitFractionCalculator::operator()
std::vector< double > operator()()
Definition
FitFraction.h:54
AmpGen::FitFractionCalculator::operator()
std::vector< FitFraction > operator()(const std::string &name, const LinearErrorPropagator &linProp)
Definition
FitFraction.h:85
AmpGen
FitFraction.h
Generated on
for AmpGen by
1.17.0