Jpp test-rotations-old-533-g2bdbdb559
the software that should make you happy
Loading...
Searching...
No Matches
JASTRONOMY::JAspera Struct Reference

Auxiliary data structure to fit signal strength using likelihood ratio. More...

#include <JAspera.hh>

Inheritance diagram for JASTRONOMY::JAspera:
std::vector< double > JASTRONOMY::JRealExperiment

Classes

struct  fit_type
 Result of fit. More...
 

Public Member Functions

void put (const double s, const double b)
 Put signal and background to list of pre-computed N/S values.
 
void put (const size_t n, const double s, const double b)
 Put signal and background to list of pre-computed N/S values.
 
double getLikelihood (const double p) const
 Get likelihood for given signal strength.
 
double getDerivative (const double p) const
 Get derivative of likelihood for given signal strength.
 
fit_type operator() () const
 Fit signal strength.
 
double getSignal () const
 Get total signal strength.
 
void setSignal (const double wS)
 Set signal strength.
 
void addSignal (const double wS)
 Add signal strength.
 

Static Public Attributes

static constexpr double EPSILON = 1.0e-3
 precision determination of signal strength
 

Protected Attributes

double ws = 0.0
 total signal strength
 

Detailed Description

Auxiliary data structure to fit signal strength using likelihood ratio.

Definition at line 22 of file JAspera.hh.

Member Function Documentation

◆ put() [1/2]

void JASTRONOMY::JAspera::put ( const double s,
const double b )
inline

Put signal and background to list of pre-computed N/S values.

Parameters
ssignal
bbackground

Definition at line 44 of file JAspera.hh.

46 {
47 push_back(b/s);
48
49 ws += s;
50 }
double ws
total signal strength
Definition JAspera.hh:227

◆ put() [2/2]

void JASTRONOMY::JAspera::put ( const size_t n,
const double s,
const double b )
inline

Put signal and background to list of pre-computed N/S values.

Parameters
ndata
ssignal
bbackground

Definition at line 60 of file JAspera.hh.

63 {
64 for (size_t i = 0; i != n; ++i) {
65 push_back(b/s);
66 }
67
68 ws += s;
69 }
const int n
Definition JPolint.hh:791

◆ getLikelihood()

double JASTRONOMY::JAspera::getLikelihood ( const double p) const
inline

Get likelihood for given signal strength.

Parameters
psignal strength
Returns
likelihood

Definition at line 78 of file JAspera.hh.

79 {
80 double y = -p * ws;
81
82 for (const auto& i : static_cast<const std::vector<double>&>(*this)) {
83 y += log1p(p/i);
84 }
85
86 if (y > 0.0)
87 return y;
88 else
89 return 0.0;
90 }

◆ getDerivative()

double JASTRONOMY::JAspera::getDerivative ( const double p) const
inline

Get derivative of likelihood for given signal strength.

Parameters
psignal strength
Returns
derivative of likelihood

Definition at line 99 of file JAspera.hh.

100 {
101 double y = -ws;
102
103 for (const auto& i : static_cast<const std::vector<double>&>(*this)) {
104 y += 1.0 / (p + i);
105 }
106
107 return y;
108 }

◆ operator()()

fit_type JASTRONOMY::JAspera::operator() ( ) const
inline

Fit signal strength.

Returns
result

Definition at line 116 of file JAspera.hh.

117 {
118 using namespace std;
119
120 double x1 = 0.0; // lower limit corresponds to no signal; less to under-fluctuation
121 double x2 = (double) this->size() / ws; // upper limit corresponds to no background (i.e. all N/S = 0)
122 // bisection
123 /*
124 if (getDerivative(x1) > 0.0) {
125
126 for ( ; ; ) {
127
128 const double x = 0.5 * (x1 + x2);
129
130 if (x2 - x1 <= EPSILON) {
131 return { getLikelihood(x), x };
132 }
133
134 if (getDerivative(x) < 0.0)
135 x2 = x;
136 else
137 x1 = x;
138 }
139 }
140 */
141 // Ridder's method
142 double f1 = getDerivative(x1);
143
144 if (f1 > 0.0) {
145
146 double f2 = getDerivative(x2);
147
148 while (x2 - x1 > EPSILON) {
149
150 const double xm = 0.5 * (x1 + x2);
151 const double fm = getDerivative(xm);
152
153 const double s = sqrt(fm*fm - f1*f2);
154
155 if (s == 0.0) {
156 break;
157 }
158
159 const double xn = xm + (xm - x1) * fm/s;
160 const double fn = getDerivative(xn);
161
162 if (signbit(fn) != signbit(fm)) {
163
164 x1 = xm;
165 f1 = fm;
166 x2 = xn;
167 f2 = fn;
168
169 } else {
170
171 if (signbit(fn)) {
172
173 x2 = xn;
174 f2 = fn;
175
176 } else {
177
178 x1 = xn;
179 f1 = fn;
180 }
181 }
182 }
183
184 const double x = 0.5 * (x1 + x2);
185
186 return { getLikelihood(x), x };
187 }
188 //
189 return { 0.0, 0.0 };
190 }
double getLikelihood(const double p) const
Get likelihood for given signal strength.
Definition JAspera.hh:78
static constexpr double EPSILON
precision determination of signal strength
Definition JAspera.hh:26
double getDerivative(const double p) const
Get derivative of likelihood for given signal strength.
Definition JAspera.hh:99

◆ getSignal()

double JASTRONOMY::JAspera::getSignal ( ) const
inline

Get total signal strength.

Returns
signal strength

Definition at line 198 of file JAspera.hh.

199 {
200 return ws;
201 }

◆ setSignal()

void JASTRONOMY::JAspera::setSignal ( const double wS)
inline

Set signal strength.

Parameters
wSsignal strength

Definition at line 209 of file JAspera.hh.

210 {
211 ws = wS;
212 }

◆ addSignal()

void JASTRONOMY::JAspera::addSignal ( const double wS)
inline

Add signal strength.

Parameters
wSsignal strength

Definition at line 220 of file JAspera.hh.

221 {
222 ws += wS;
223 }

Member Data Documentation

◆ EPSILON

double JASTRONOMY::JAspera::EPSILON = 1.0e-3
staticconstexpr

precision determination of signal strength

Definition at line 26 of file JAspera.hh.

◆ ws

double JASTRONOMY::JAspera::ws = 0.0
protected

total signal strength

Definition at line 227 of file JAspera.hh.


The documentation for this struct was generated from the following file: