139{
142
144 size_t numberOfTests;
145 size_t M;
146 double SNR;
147 bool add;
149 double testsignal;
150
151 try {
152
154
156
158 "quintuplets of signal and background histograms (generation then evaluation) and data, \n"
159 << "\teach of which defined by <file name>:<histogram name> and <type> (values), respectively, \n"
160 <<
"\twhere <type> can be:" <<
get_keys(nuisance_helper));
161 zap[
'n'] =
make_field(numberOfTests,
"number of tests for upper limit calculation") = 0;
162 zap[
'M'] =
make_field(M,
"lookup table for CDFs") = 0;
163 zap[
'R'] =
make_field(SNR,
"signal-to-noise ratio") = 0.0;
164 zap[
'A'] =
make_field(add,
"add remnant signal and noise");
165 zap[
's'] =
make_field(testsignal,
"signal to test") = -1.;
167
168 zap(argc, argv);
169 }
170 catch(const exception& error) {
171 FATAL(error.what() << endl);
172 }
173
174
175 JExperiment::setSNR(SNR);
176
179
180 for (const auto& i : setup) {
181
187
189
190 pi.nuisance = i.nuisance;
191
192 px.push_back(pi);
194
195 STATUS(printer(
"Signal for generation: ", pS) << endl);
196 STATUS(printer(
"Background for generation:", pB) << endl);
197 STATUS(printer(
"Signal for evaluation: ", ps) << endl);
198 STATUS(printer(
"Background for evaluation:", pb) << endl);
199 STATUS(printer(
"Data: ", pd) << endl);
200 STATUS(
"Nuisance: " << pi.nuisance << endl);
201 }
202
203 if (M != 0) {
205 }
206
207 if (add) {
210 }
211
212 const JRealExperiment::fit_type
result = rx();
213
214 cout <<
"signal: " <<
FIXED(9,3) << rx.
getSignal() <<
"/" << setw(6) << rx.size() << 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
223
224 for (double x : rx) {
225
226 cout <<
SCIENTIFIC(12,3) << 1.0/
x << ((
n + 1)%10 == 0 ?
"\n" :
" ");
227
229 }
230 cout << endl;
231 }
232
233 cout << "result: "
236
237 if (numberOfTests != 0) {
238
239 const double Q = 0.9;
240
242
243 cout <<
"upper limit: " <<
FIXED(12,5) << mu << endl;
244 }
245}
#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.
double getSignal() const
Get total signal strength.
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.
Auxiliary data structure to fit signal strength using likelihood ratio for multiple pseudo experiment...
void add()
Add remnant signal and background.
void configure(size_t N)
Configure lookup tables.
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).
Auxiliary data structure for floating point format specification.