55{
58
61 double epsilon;
62 int function;
65
66 try {
67
68 JParser<> zap(
"Program to create interpolation tables of the PDF of the arrival time of the Cherenkov light from a bright point.");
69
72 zap[
'e'] =
make_field(epsilon,
"precision for integration") = 1.0e-10;
76 DIRECT_LIGHT_FROM_BRIGHT_POINT,
77 SCATTERED_LIGHT_FROM_BRIGHT_POINT;
80
82
84 }
85 catch(const exception &error) {
87 }
88
89
93
94
95
96
97 const double P_atm = NAMESPACE::getAmbientPressure();
100
101
103 pdf_c(NAMESPACE::getPhotocathodeArea(),
104 NAMESPACE::getQE,
105 NAMESPACE::getAngularAcceptance,
108 NAMESPACE::getScatteringProbability,
110 wmin,
111 wmax,
113 epsilon);
114
115
120
123
124 JPDF_t pdf;
125
126
127 NOTICE(
"building multi-dimensional function object <" << function <<
">... " << flush);
128
129 const double ng[] = {
pdf_c.getIndexOfRefractionGroup(wmax),
130 pdf_c.getIndexOfRefractionGroup(wmin) };
131
133
134 zmap[DIRECT_LIGHT_FROM_BRIGHT_POINT] =
make_pair((fcn) &JPDF::getDirectLightFromBrightPoint, JFunction2DTransformer_t(21.5, 2,
ng[0],
ng[1]));
135 zmap[SCATTERED_LIGHT_FROM_BRIGHT_POINT] =
make_pair((fcn) &JPDF::getScatteredLightFromBrightPoint, JFunction2DTransformer_t(21.5, 2,
ng[0], 0.0));
136
137 if (zmap.find(function) == zmap.end()) {
138 FATAL(
"illegal function specifier" <<
endl);
139 }
140
141 fcn f = zmap[function].first;
142 JFunction2DTransformer_t transformer = zmap[function].second;
143
144
145 if (D.empty()) {
146 D.insert( 0.10);
147 D.insert( 0.50);
148 D.insert( 1.00);
149 D.insert( 5.00);
150 D.insert( 10.00);
151 D.insert( 20.00);
152 D.insert( 30.00);
153 D.insert( 40.00);
154 D.insert( 50.00);
155 D.insert( 60.00);
156 D.insert( 70.00);
157 D.insert( 80.00);
158 D.insert( 90.00);
159 D.insert(100.00);
160 }
161
163
164 if (function == DIRECT_LIGHT_FROM_BRIGHT_POINT) {
165
166 for (
double buffer[] = { 0.0, 0.005, 0.01, 0.015, -1 }, *
x = buffer; *
x >= 0; ++
x) {
167 X.insert(0.0 + *x);
168 X.insert(1.0 - *x);
169 }
170
171 for (
double x = 0.02;
x < 0.99;
x += 0.01)
172 X.insert(x);
173
174 } else {
175
176 X.insert( 0.00);
177 X.insert( 0.10);
178 X.insert( 0.20);
179 X.insert( 0.30);
180 X.insert( 0.40);
181 X.insert( 0.50);
182 X.insert( 0.60);
183 X.insert( 0.70);
184 X.insert( 0.80);
185 X.insert( 0.90);
186 X.insert( 1.00);
187 X.insert( 1.00);
188 X.insert( 1.10);
189 X.insert( 1.20);
190 X.insert( 1.30);
191 X.insert( 1.40);
192 X.insert( 1.50);
193 X.insert( 1.60);
194 X.insert( 1.70);
195 X.insert( 1.80);
196 X.insert( 1.90);
197 X.insert( 2.00);
198 X.insert( 2.20);
199 X.insert( 2.40);
200 X.insert( 2.60);
201 X.insert( 2.80);
202 X.insert( 3.00);
203 X.insert( 3.25);
204 X.insert( 3.50);
205 X.insert( 3.75);
206 X.insert( 4.00);
207 X.insert( 4.25);
208 X.insert( 4.50);
209 X.insert( 4.75);
210 X.insert( 5.0);
211 X.insert( 6.0);
212 X.insert( 7.0);
213 X.insert( 8.0);
214 X.insert( 9.0);
215 X.insert( 10.0);
216 X.insert( 15.0);
217 X.insert( 20.0);
218 X.insert( 25.0);
219 X.insert( 30.0);
220 X.insert( 40.0);
221 X.insert( 50.0);
222 X.insert( 60.0);
223 X.insert( 70.0);
224 X.insert( 80.0);
225 X.insert( 90.0);
226 X.insert(100.0);
227 X.insert(120.0);
228 X.insert(140.0);
229 X.insert(160.0);
230 X.insert(180.0);
231 X.insert(200.0);
232 }
233
234
236
237 const double D_m = *d;
238
239 for (
double dc = 0.1, ct = -1.0; ct < +1.0 + 0.5*
dc; ct +=
dc) {
240
241 JFunction1D_t& f1 = pdf[
D_m][ct];
242
244
245 double t_old = transformer.getXn(
array, *X.begin());
247
249
250 const double t = transformer.getXn(
array, *x);
252
253 if (y != 0.0) {
254
255 if (*x < 0.0) {
256 WARNING(
"dt < 0 " << *x <<
' ' <<
D_m <<
' ' << t <<
' ' << y <<
endl);
257 }
258
261 }
262
264
265 } else {
266
269 }
270 }
271
274 }
275 }
276 }
277
278 pdf.transform(transformer);
279 pdf.compile();
280
282
283 try {
284
286
288
290 }
293 }
294}
double getAbsorptionLength(const double lambda)
double getScatteringLength(const double lambda)
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
virtual const char * what() const override
Get error message.
Template definition of a multi-dimensional oscillation probability interpolation table.
Utility class to parse command line options.
Probability Density Functions of the time response of a PMT with an implementation of the JAbstractPM...
double getMinimalWavelength()
Get minimal wavelength for PDF evaluations.
double getMaximalWavelength()
Get maximal wavelength for PDF evaluations.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Empty structure for specification of parser element that is not initialised (i.e. does require input)...
Auxiliary data structure for muon PDF.