Jpp 20.0.0-rc.9
the software that should make you happy
Loading...
Searching...
No Matches
JRealExperiment.cc File Reference

Test application for pseudo experiment generation and likelihood ratio evaluations. More...

#include <string>
#include <iostream>
#include <iomanip>
#include <vector>
#include <exception>
#include <algorithm>
#include "TROOT.h"
#include "TFile.h"
#include "TH1D.h"
#include "TH2D.h"
#include "TH3D.h"
#include "TRandom3.h"
#include "JAstronomy/JRealExperiment.hh"
#include "JAstronomy/JGen2.hh"
#include "JAstronomy/JAstronomyToolkit.hh"
#include "JGizmo/JGizmoToolkit.hh"
#include "JTools/JAbstractHistogram.hh"
#include "JROOT/JRandom.hh"
#include "Jeep/JContainer.hh"
#include "Jeep/JParser.hh"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Test application for pseudo experiment generation and likelihood ratio evaluations.

Author
mdejong

Definition in file JRealExperiment.cc.

Function Documentation

◆ main()

int main ( int argc,
char ** argv )

Definition at line 139 of file JRealExperiment.cc.

140{
141 using namespace std;
142 using namespace JPP;
143
145 size_t numberOfTests;
146 size_t M;
147 double SNR;
148 bool add;
149 int debug;
150 double testsignal;
151
152 try {
153
154 JParser<> zap;
155
157
158 zap['E'] = make_field(setup,
159 "quintuplets of signal and background histograms (generation then evaluation) and data, \n"
160 << "\teach of which defined by <file name>:<histogram name> and <type> (values), respectively, \n"
161 << "\twhere <type> can be:" << get_keys(nuisance_helper));
162 zap['n'] = make_field(numberOfTests, "number of tests for upper limit calculation") = 0;
163 zap['M'] = make_field(M, "lookup table for CDFs") = 0;
164 zap['R'] = make_field(SNR, "signal-to-noise ratio") = 0.0;
165 zap['A'] = make_field(add, "add remnant signal and noise");
166 zap['s'] = make_field(testsignal, "signal to test") = -1.;
167 zap['d'] = make_field(debug) = 1;
168
169 zap(argc, argv);
170 }
171 catch(const exception& error) {
172 FATAL(error.what() << endl);
173 }
174
175
176 JExperiment::setSNR(SNR);
177
179 JGen2 px;
180
181 for (const auto& i : setup) {
182
183 const TObject* pS = getObject(i.HS);
184 const TObject* pB = getObject(i.HB);
185 const TObject* ps = getObject(i.Hs);
186 const TObject* pb = getObject(i.Hb);
187 const TObject* pd = getObject(i.Hd);
188
189 JPseudoExperiment pi(pS, pB, ps, pb);
190
191 pi.nuisance = i.nuisance;
192
193 px.push_back(pi);
194 rx.add(pd, ps, pb);
195
196 STATUS(printer("Signal for generation: ", pS) << endl);
197 STATUS(printer("Background for generation:", pB) << endl);
198 STATUS(printer("Signal for evaluation: ", ps) << endl);
199 STATUS(printer("Background for evaluation:", pb) << endl);
200 STATUS(printer("Data: ", pd) << endl);
201 STATUS( "Nuisance: " << pi.nuisance << endl);
202 }
203
204 if (M != 0) {
205 px.configure(M);
206 }
207
208 if (add) {
209 px.add();
210 }
211
212 const JRealExperiment::fit_type result = rx();
213
214 cout << "signal: " << FIXED(9,3) << rx.getSignal() << "/" << setw(6) << rx.size() << endl;
215 cout << "derivative: " << FIXED(9,3) << rx.getDerivative(0.0) << endl;
216 if (testsignal >= 0) {
217 cout << "check TS: " << FIXED(12,5) << rx.getLikelihood(testsignal) << ' ' << FIXED(12,5) << testsignal << endl;
218 }
219
220 if (debug >= debug_t) {
221
222 size_t n = 0;
223
224 for (double x : rx) {
225
226 cout << SCIENTIFIC(12,3) << 1.0/x << ((n + 1)%10 == 0 ? "\n" : " ");
227
228 n += 1;
229 }
230 cout << endl;
231 }
232
233 cout << "result: "
234 << FIXED(12,5) << result.likelihood << ' '
235 << FIXED(12,5) << result.signal << endl;
236
237 if (numberOfTests != 0) {
238
239 const double Q = 0.9; // probability limit
240
241 const double mu = px.getSignalStrengthForUpperLimit(rx, Q, numberOfTests);
242
243 cout << "upper limit: " << FIXED(12,5) << mu << endl;
244 }
245}
#define STATUS(A)
Definition JMessage.hh:63
#define FATAL(A)
Definition JMessage.hh:67
int debug
debug level
Definition JSirene.cc:72
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
Utility class to parse command line options.
Definition JParser.hh:1698
TObject * getObject(const JRootObjectID &id)
Get first TObject with given identifier.
const array_type< JKey_t > & get_keys(const std::map< JKey_t, JValue_t, JComparator_t, JAllocator_t > &data)
Method to create array of keys of map.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
const int n
Definition JPolint.hh:791
Auxiliary data structure for floating point format specification.
Definition JManip.hh:448
double getSignal() const
Get total signal strength.
Definition JAspera.hh:236
double getLikelihood(const double p) const
Get likelihood for given signal strength.
Definition JAspera.hh:78
double getDerivative(const double p) const
Get derivative of likelihood for given signal strength.
Definition JAspera.hh:96
Auxiliary data structure to fit signal strength using likelihood ratio for multiple pseudo experiment...
Definition JGen2.hh:28
void add()
Add remnant signal and background.
Definition JGen2.hh:32
void configure(size_t N)
Configure lookup tables.
Definition JGen2.hh:44
double getSignalStrengthForUpperLimit(const JAspera &aspera, const double Q, const size_t numberOfTests, const double precision=1.0e-4)
Get signal strength given result of experiment and probability of upper limit.
Pseudo experiment using CDF for combined generation and likelihood evaluation.
Real experiment using PDF of signal and background.
void add(const TObject *pd, const TObject *ps, const TObject *pb)
Add objects with data and PDFs of signal and background.
Auxiliary wrapper for I/O of container with optional comment (see JComment).
Definition JContainer.hh:42
Auxiliary data structure for floating point format specification.
Definition JManip.hh:488