63{
67
69 typedef JParallelFileScanner_t::multi_pointer_type multi_pointer_type;
71
72 JParallelFileScanner_t inputFile;
75 string detectorFile;
76 string pdfFile;
77 double roadWidth_m;
78 double R_Hz;
79 size_t numberOfPrefits;
80 double TTS_ns;
81 double E_GeV;
83
84 try {
85
86 JParser<> zap(
"Program to perform fit of muon path to data.");
87
93 zap[
'R'] =
make_field(roadWidth_m) = numeric_limits<double>::max();
99
100 zap(argc, argv);
101 }
102 catch(const exception& error) {
103 FATAL(error.what() << endl);
104 }
105
106
108
109 try {
111 }
114 }
115
117
118
121
122
124
125 JRegressor_t::debug =
debug;
126 JRegressor_t::T_ns.setRange(-50.0, +50.0);
127 JRegressor_t::Vmax_npe = 10.0;
128 JRegressor_t::MAXIMUM_ITERATIONS = 10000;
129
131
132 fit.transform(JRegressor_t::transformer_type::getDefaultTransformer());
133
135
136 fit.parameters.resize(4);
137
142
143 if (fit.getRmax() < roadWidth_m) {
144
145 roadWidth_m = fit.getRmax();
146
147 WARNING(
"Set road width to [m] " << roadWidth_m << endl);
148 }
149
150 const double Rmax_m = 100.0;
151 const double Tmax_ns = 10.0;
152
153
155
157
158 while (inputFile.hasNext()) {
159
160 STATUS(
"event: " << setw(10) << inputFile.getCounter() <<
'\r');
DEBUG(endl);
161
162 multi_pointer_type ps = inputFile.next();
163
166
169
171
172
173 JDataL0_t dataL0;
174
175 buildL0(*tev, router, true, back_inserter(dataL0));
176
177
178 for (JEvt::const_iterator track = cp.begin(); track != cp.end(); ++track) {
179
183
184
185
187
189
190 for (JDataL0_t::const_iterator i = dataL0.begin(); i != dataL0.end(); ++i) {
191
193
194 hit.rotate(R);
195
196 if (match(hit)) {
197
198 top.insert(hit.getPMTIdentifier());
199
200 const double t1 = hit.getT() - tz.getT(hit);
201
202 if (tz.getDistance(hit) <= Rmax_m && t1 >= -Tmax_ns && t1 <= +Tmax_ns) {
203 Z.
include(hit.getZ() - tz.getDistance(hit) / getTanThetaC());
204 }
205 }
206 }
207
208
210
211 for (JDetector::const_iterator module =
detector.begin(); module !=
detector.end(); ++module) {
212
214
215 pos.rotate(R);
216
217 if (tz.getDistance(pos) <= roadWidth_m && Z(pos.getZ() - tz.getDistance(pos) / getTanThetaC())) {
218
219 for (unsigned int i = 0; i != module->size(); ++i) {
220
222
223 JPMT pmt(module->getPMT(i));
224
225 pmt.rotate(R);
226
227 buffer.push_back(
JPMTW0(pmt, R_Hz, top.count(
id)));
228 }
229 }
230 }
231
232
233 const int NDF = buffer.size() - fit.parameters.size();
234
235 if (NDF >= 0) {
236
237
238
239 if (track->getE() > 0.1)
240 fit.E_GeV = track->getE();
241 else
242 fit.E_GeV = E_GeV;
243
244 const double chi2 = fit(
JLine3Z(tz), buffer.begin(), buffer.end());
245
247
248 tb.rotate_back(R);
249
251
252 out.rbegin()->setW(track->getW());
253 }
254 }
255
256
257
259
261 }
263
265
267
269}
#define DEBUG(A)
Message macros.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Router for direct addressing of module data in detector data structure.
Data structure for PMT geometry, calibration and status.
Data structure for fit of straight line paralel to z-axis.
static parameter_type pY()
static parameter_type pX()
Data structure for fit of straight line in positive z-direction.
static parameter_type pDY()
static parameter_type pDX()
Data structure for position in three dimensions.
JPosition3D & rotate(const JRotation3D &R)
Rotate.
Utility class to parse command line options.
Auxiliary class for a hit with background rate value.
General purpose class for parallel reading of objects from a single file or multiple files.
Object reading from a list of files.
static const int JMUONPATH
JDirection3D getDirection(const Vec &dir)
Get direction.
JPosition3D getPosition(const Vec &pos)
Get position.
double getQuality(const double chi2, const int NDF)
Get quality of fit.
JFit getFit(const int id, const JMODEL::JString &string)
Get fit parameters of string.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
bool qualitySorter(const JFit &first, const JFit &second)
Comparison of fit results.
JFIT::JRegressor< JFIT::JLine3Z, JFIT::JGandalf > JRegressor_t
KM3NeT DAQ data structures and auxiliaries.
Model for fit to acoustics data.
Auxiliary class for handling PMT geometry, rate and response.
Template definition of a data regressor of given model.
Auxiliary class for defining the range of iterations of objects.
const JLimit & getLimit() const
Get limit.
static counter_type max()
Get maximum counter value.