10 #include "evt/Head.hh"
68 int main(
int argc,
char **argv)
74 typedef JParallelFileScanner< JTypeList<JDAQEvent, JEvt> > JParallelFileScanner_t;
75 typedef JParallelFileScanner_t::multi_pointer_type multi_pointer_type;
78 JParallelFileScanner_t inputFile;
86 size_t numberOfPrefits;
93 JParser<> zap(
"Program to perform PDF fit of muon trajectory to data.");
98 zap[
'n'] =
make_field(numberOfEvents) = JLimit::max();
100 zap[
'R'] =
make_field(roadWidth_m) = numeric_limits<double>::max();
104 zap[
's'] =
make_field(start) = JStart(1.0e-3, 1.0e-2);
110 catch(
const exception& error) {
111 FATAL(error.what() << endl);
122 load(detectorFile, detector);
124 catch(
const JException& error) {
128 const JModuleRouter moduleRouter(detector);
131 const JBuildL0<JHitL0> buildL0;
134 typedef JRegressor<JEnergy> JRegressor_t;
137 JRegressor_t::T_ns = T_ns;
140 JRegressor_t fit(pdfFile);
142 if (fit.getRmax() < roadWidth_m) {
143 roadWidth_m = fit.getRmax();
151 while (inputFile.hasNext()) {
153 STATUS(
"event: " << setw(10) << inputFile.getCounter() <<
'\r');
DEBUG(endl);
155 multi_pointer_type ps = inputFile.next();
161 JEvt::iterator __end = evt->
end();
164 __end = partition(evt->begin(), __end, JHistory::is_not_event(
JMUONSTART));
167 if (evt->begin() != __end) {
169 copy(evt->begin(), __end, back_inserter(out));
171 if (numberOfPrefits > 0) {
172 advance(__end = evt->begin(), min(numberOfPrefits, out.size()));
175 partial_sort(evt->begin(), __end, evt->end(),
qualitySorter);
177 __end = partition(evt->begin(), __end, JHistory::is_event(evt->begin()->getHistory()));
182 buildL0(*tev, moduleRouter,
true, back_inserter(dataL0));
185 for (JEvt::iterator track = evt->begin(); track != __end; ++track) {
189 const JModel<JLine1Z> match(tz, roadWidth_m, T_ns);
194 for (JDataL0_t::const_iterator i = dataL0.begin(); i != dataL0.end(); ++i) {
201 top.insert(hit.getModuleIdentifier());
208 const JDetectorSubset_t subdetector(detector,
getAxis(*track), roadWidth_m);
210 for (JDetector::const_iterator module = subdetector.begin(); module != subdetector.end(); ++module) {
212 size_t count = top.count(module->getID());
215 data.push_back(JNPEHit(fit.getNPE(*module, rates_Hz), count));
223 double npe_total = 0.0;
233 if (track_start == data. end()) { track_start = data. begin(); }
234 if (track_end == data.rend()) { track_end = data.rbegin(); }
236 Zmin = track_start->getZ();
237 Zmax = track_end ->getZ();
241 if (i->getZ() <= 0.0) {
245 npe_total += i->getYA();
252 FIXED(6,4) << i->getY0() <<
' ' <<
253 FIXED(6,4) << i->getYA() <<
' ' <<
254 setw(1) << i->getN() <<
' ' <<
255 FIXED(6,4) << i->getP() << endl);
258 DEBUG(
" --> " <<
FIXED(6,1) << Zmin <<
' ' <<
FIXED(6,1) << Zmax << endl);
267 out.rbegin()->setW(track->getW());
282 JSingleFileScanner<JRemove<typelist, JEvt>::typelist> io(inputFile);