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
126
127 JRegressor_t::debug =
debug;
128 JRegressor_t::Vmax_npe = 10.0;
129 JRegressor_t::MAXIMUM_ITERATIONS = 10000;
130
132
133 fit.transform(JRegressor_t::transformer_type::getDefaultTransformer());
134
136
137 fit.parameters.resize(4);
138
143
144 if (fit.getRmax() < roadWidth_m) {
145
146 roadWidth_m = fit.getRmax();
147
148 WARNING(
"Set road width to [m] " << roadWidth_m << endl);
149 }
150
151 const double Rmax_m = 100.0;
152 const double Tmax_ns = 10.0;
153
154
156
158
159 while (inputFile.hasNext()) {
160
161 STATUS(
"event: " << setw(10) << inputFile.getCounter() <<
'\r');
DEBUG(endl);
162
163 multi_pointer_type ps = inputFile.next();
164
167
170
172
173
174 JDataL0_t dataL0;
175
176 buildL0(*tev, router, true, back_inserter(dataL0));
177
178
179 for (JEvt::const_iterator track = cp.begin(); track != cp.end(); ++track) {
180
184
185
186
188
190
191 for (JDataL0_t::const_iterator i = dataL0.begin(); i != dataL0.end(); ++i) {
192
194
195 hit.rotate(R);
196
197 if (match(hit)) {
198
199 top.insert(hit.getPMTIdentifier());
200
201 const double t1 = hit.getT() - tz.getT(hit);
202
203 if (tz.getDistance(hit) <= Rmax_m && t1 >= -Tmax_ns && t1 <= +Tmax_ns) {
204 Z.
include(hit.getZ() - tz.getDistance(hit) / getTanThetaC());
205 }
206 }
207 }
208
209
211
212 for (JDetector::const_iterator module =
detector.begin(); module !=
detector.end(); ++module) {
213
215
216 pos.rotate(R);
217
218 if (tz.getDistance(pos) <= roadWidth_m && Z(pos.getZ() - tz.getDistance(pos) / getTanThetaC())) {
219
220 for (unsigned int i = 0; i != module->size(); ++i) {
221
223
224 JPMT pmt(module->getPMT(i));
225
226 pmt.rotate(R);
227
228 buffer.push_back(
JPMTW0(pmt, R_Hz, top.count(
id)));
229 }
230 }
231 }
232
233
234 const int NDF = buffer.size() - fit.parameters.size();
235
236 if (NDF >= 0) {
237
238
239
240 if (track->getE() > 0.1)
241 fit.E_GeV = track->getE();
242 else
243 fit.E_GeV = E_GeV;
244
245 const double chi2 = fit(
JLine3Z(tz), buffer.begin(), buffer.end());
246
248
249 tb.rotate_back(R);
250
252
253 out.rbegin()->setW(track->getW());
254 }
255 }
256
257
258
260
262 }
264
266
268
270}
#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 JEvent &evt)
Get average quality.
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.