126{
129
132
134
137 size_t numberOfTests;
138 double Fs;
139 double Fb;
140 histogram_type X;
142 double P;
145
146 try {
147
149
151 "douplets of signal and background histograms, "
152 << "each of which defined by <file name>:<histogram name>");
154 zap[
'n'] =
make_field(numberOfTests,
"number of tests");
156 zap[
'b'] =
make_field(Fb,
"background strength") = 1.0;
158 "signal and background nuisances, "
159 << "each of which defined by <type> (values), \n"
160 << "\twhere <type> can be:"
162 zap[
'x'] =
make_field(X,
"x-axis likelihood histogram") = histogram_type(110, -10.0, +100.0);
163 zap[
'Q'] =
make_field(Q,
"minimal likelihood ratio") = 0.0;
164 zap[
'P'] =
make_field(P,
"maximal probability") = 0.0;
167
168 zap(argc, argv);
169 }
170 catch(const exception& error) {
171 FATAL(error.what() << endl);
172 }
173
174
175 seed.set(gRandom);
176
177
178 for (const auto& i : setup) {
179
182
183 STATUS(printer(
"Signal:", ps) << endl);
184 STATUS(printer(
"Background:", pb) << endl);
185
187 }
188
190
193 STATUS(
"Number of tests: " << setw(10) << numberOfTests << endl);
194
195
197
198 out << *gRandom;
199
200 TH1D hl("hl", NULL, X.getNumberOfBins(), X.getLowerLimit(), X.getUpperLimit());
201 TH1D hn("hn", NULL, 100, -15.0, +15.0);
202
203
204 if (P > 0.0 || Q > 0.0) {
205
207
208 {
209 const chrono::high_resolution_clock::time_point t0 = chrono::high_resolution_clock::now();
210
211 for (size_t i = 0; i != numberOfTests; ++i) {
212 storage.put(px().likelihood);
213 }
214
215 const chrono::high_resolution_clock::time_point t1 = chrono::high_resolution_clock::now();
216
217 STATUS(
"Average time: " << setw(6) << (t1 - t0) / chrono::nanoseconds(numberOfTests) <<
" [ns]" << endl);
218 }
219
220 for (const auto& result : storage) {
221 for (
const auto x :
result.second) {
222 hl.Fill(x);
223 }
224 }
225
226 const chrono::high_resolution_clock::time_point t0 = chrono::high_resolution_clock::now();
227
228 if (P > 0.0) {
229
230 const double x = storage.getValue(P);
231 const double p = storage.getProbability(x);
232
233 cout <<
"Minimal likelihood ratio: " <<
FIXED(9,5) <<
x <<
' ' <<
SCIENTIFIC(12,3) << p << endl;
234 }
235
236 if (Q > 0.0) {
237
238 const double p = storage.getProbability(Q);
239 const double x = storage.getValue(p);
240
241 cout <<
"Maximal probability: " <<
SCIENTIFIC(12,3) << p <<
' ' <<
FIXED(9,5) <<
x << endl;
242 }
243
244 const chrono::high_resolution_clock::time_point t1 = chrono::high_resolution_clock::now();
245
246 STATUS(
"Time to result: " << setw(6) << (t1 - t0) / chrono::microseconds(1) <<
" [us]" << endl);
247
248 } else {
249
251
252 const chrono::high_resolution_clock::time_point t0 = chrono::high_resolution_clock::now();
253
254 px(storage);
255
256 const chrono::high_resolution_clock::time_point t1 = chrono::high_resolution_clock::now();
257
258 STATUS(
"Average time: " << setw(6) << (t1 - t0) / chrono::nanoseconds(storage.size()) <<
" [ns]" << endl);
259
260 for (const auto& result : storage) {
261
263 << setw(3) <<
result.ns <<
' '
264 << setw(3) <<
result.nb <<
' '
267
268 hl.Fill(
result.likelihood);
270 }
271 }
272
273 out.Write();
274 out.Close();
275}
#define DEBUG(A)
Message macros.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Utility class to parse command line options.
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).
Auxiliary data structure for floating point format specification.
const dictionary_type & getDictionary() const
Get dictionary.
Pseudo experiment using CDF for combined generation and likelihood evaluation.
void add(const TObject *ps, const TObject *pb)
Add objects with PDFs of signal and background.
struct JASTRONOMY::JPseudoExperiment::parameters_type nuisance
double getSignal() const
Get total signal.
void set(const double fS, const double fB)
Set scaling factors of signal and background strengths.
double getBackground() const
Get total background.
Auxiliary container for statistical analysis of a large number of values.
Data structure for measured coincidence rates of all pairs of PMTs in optical module.
Auxiliary wrapper for I/O of container with optional comment (see JComment).
Template definition of random value generator.
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Auxiliary data structure for floating point format specification.