59 int main(
int argc,
char **argv)
63 using namespace KM3NETDAQ;
65 typedef JParallelFileScanner< JTypeList<JDAQEvent, JEvt> > JParallelFileScanner_t;
66 typedef JParallelFileScanner_t::multi_pointer_type multi_pointer_type;
69 JParallelFileScanner_t inputFile;
76 size_t numberOfPrefits;
83 JParser<> zap(
"Program to perform fit of muon path to data.");
88 zap[
'n'] =
make_field(numberOfEvents) = JLimit::max();
90 zap[
'R'] =
make_field(roadWidth_m) = numeric_limits<double>::max();
99 catch(
const exception& error) {
100 FATAL(error.what() << endl);
111 load(detectorFile, detector);
113 catch(
const JException& error) {
117 const JModuleRouter moduleRouter(detector);
121 const JBuildL0<JHitL0> buildL0;
124 typedef JRegressor<JLine3Z, JGandalf> JRegressor_t;
127 JRegressor_t::T_ns.setRange(-50.0, +50.0);
128 JRegressor_t::Vmax_npe = 10.0;
129 JRegressor_t::MAXIMUM_ITERATIONS = 10000;
131 JRegressor_t fit(pdfFile, TTS_ns);
133 fit.estimator.reset(
new JMEstimatorLorentzian());
135 fit.parameters.resize(4);
137 fit.parameters[0] = JLine3Z::pX();
138 fit.parameters[1] = JLine3Z::pY();
139 fit.parameters[2] = JLine3Z::pDX();
140 fit.parameters[3] = JLine3Z::pDY();
142 if (fit.getRmax() < roadWidth_m) {
144 roadWidth_m = fit.getRmax();
146 WARNING(
"Set road width to [m] " << roadWidth_m << endl);
149 const double Rmax_m = 100.0;
150 const double Tmax_ns = 10.0;
157 while (inputFile.hasNext()) {
159 STATUS(
"event: " << setw(10) << inputFile.getCounter() <<
'\r');
DEBUG(endl);
161 multi_pointer_type ps = inputFile.next();
169 JEvt::iterator __end = evt->
end();
171 if (numberOfPrefits > 0) {
172 advance(__end = evt->begin(), min(numberOfPrefits, evt->size()));
175 partial_sort(evt->begin(), __end, evt->end(),
qualitySorter);
180 buildL0(*tev, moduleRouter,
true, back_inserter(dataL0));
183 if (dataL0.size() >= fit.parameters.size()) {
185 for (JEvt::const_iterator track = evt->begin(); track != __end; ++track) {
189 const JModel<JLine1Z> match(tz, roadWidth_m, JRegressor_t::T_ns);
197 for (JDataL0_t::const_iterator i = dataL0.begin(); i != dataL0.end(); ++i) {
199 JHitW0 hit(*i, R_Hz);
205 top.insert(hit.getPMTIdentifier());
207 const double t1 = hit.getT() - tz.getT(hit);
209 if (tz.getDistance(hit) <= Rmax_m && t1 >= -Tmax_ns && t1 <= +Tmax_ns) {
210 Z.include(hit.getZ() - tz.getDistance(hit) /
getTanThetaC());
218 for (JDetector::const_iterator module = detector.begin(); module != detector.end(); ++module) {
220 JPosition3D pos(module->getPosition());
224 if (tz.getDistance(pos) <= roadWidth_m && Z(pos.getZ() - tz.getDistance(pos) /
getTanThetaC())) {
226 for (
unsigned int i = 0; i != module->size(); ++i) {
230 JPMT pmt(module->getPMT(i));
234 buffer.push_back(JPMTW0(pmt, R_Hz, top.count(
id)));
240 const int NDF = buffer.size() - fit.parameters.size();
246 if (track->getE() > 0.1)
247 fit.E_GeV = track->getE();
251 const double chi2 = fit(JLine3Z(tz), buffer.begin(), buffer.end());
253 JTrack3D tb(fit.value);
271 JSingleFileScanner<JRemove<typelist, JEvt>::typelist> io(inputFile);
Data regression method for JFIT::JLine3Z.
Utility class to parse command line options.
Recording of objects on file according a format that follows from the file name extension.
Data structure for detector geometry and calibration.
Various implementations of functional maps.
JFit getFit(const JHistory &history, const JTrack3D &track, const double Q, const int NDF, const double energy=0.0, const int status=0)
Get fit.
Basic data structure for L0 hit.
JLimit JLimit_t
Type definition of limit.
Definition of fit parameters from various applications.
Basic data structure for time and time over threshold information of hit.
const_iterator< T > end() const
Get end of data.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Parallel scanning of objects from a single file or multiple files according a format that follows fro...
void load(const JString &file_name, JDetector &detector)
Load detector from input file.
General purpose messaging.
counter_type advance(counter_type &counter, const counter_type value, const counter_type limit=std::numeric_limits< counter_type >::max())
Advance counter.
Scanning of objects from multiple files according a format that follows from the extension of each fi...
Direct access to module in detector data structure.
double getQuality(const double chi2, const int NDF)
Get quality of fit.
Utility class to parse command line options.
ROOT TTree parameter settings.
bool qualitySorter(const JFIT::JFit &first, const JFIT::JFit &second)
Comparison of fit results.
JDirection3D getDirection(const Vec &v)
Get direction.
const JLimit & getLimit() const
Get limit.
JPosition3D & rotate(const JRotation3D &R)
Rotate.
#define DEBUG(A)
Message macros.
JPosition3D getPosition(const Vec &v)
Get position.
int main(int argc, char *argv[])