61 using namespace KM3NETDAQ;
63 typedef JParallelFileScanner< JTypeList<JDAQEvent, JEvt> > JParallelFileScanner_t;
64 typedef JParallelFileScanner_t::multi_pointer_type multi_pointer_type;
67 JParallelFileScanner_t inputFile;
74 size_t numberOfPrefits;
82 JParser<> zap(
"Program to perform intermediate fit of muon trajectory to data.");
87 zap[
'n'] =
make_field(numberOfEvents) = JLimit::max();
99 catch(
const exception& error) {
100 FATAL(error.what() << endl);
108 const double TMAX_NS = 50.0;
113 load(detectorFile, detector);
115 catch(
const JException& error) {
119 const JModuleRouter moduleRouter(detector);
126 JSuperFrame2D<JHit> buffer;
127 const JBuildL0<JHitL0> buildL0;
128 const JBuildL2<JHitL1> buildL2(2, Tmax_ns, ctMin);
131 typedef JRegressor<JLine3Z, JSimplex> JRegressor_t;
133 JRegressor_t fit(sigma_ns);
135 fit.estimator.reset(
new JMEstimatorLorentzian());
138 JRegressor_t::MAXIMUM_ITERATIONS = 10000;
145 while (inputFile.hasNext()) {
147 STATUS(
"event: " << setw(10) << inputFile.getCounter() <<
'\r');
DEBUG(endl);
149 multi_pointer_type ps = inputFile.next();
155 JEvt::iterator __end = evt->
end();
158 __end = partition(evt->begin(), __end, JHistory::is_not_event(
JMUONSIMPLEX));
161 if (evt->begin() != __end) {
163 copy(evt->begin(), __end, back_inserter(out));
165 if (numberOfPrefits > 0) {
166 advance(__end = evt->begin(), min(numberOfPrefits, out.size()));
169 partial_sort(evt->begin(), __end, evt->end(),
qualitySorter);
171 __end = partition(evt->begin(), __end, JHistory::is_event(evt->begin()->getHistory()));
179 for (JDAQTimeslice::const_iterator i = timeslice.begin(); i != timeslice.end(); ++i) {
181 if (moduleRouter.hasModule(i->getModuleID())) {
183 buffer(*i, moduleRouter.getModule(i->getModuleID()));
185 buildL0(buffer, back_inserter(dataL0));
186 buildL2(buffer, back_inserter(dataL1));
193 for (JEvt::const_iterator track = evt->begin(); track != __end; ++track) {
197 const JModel<JLine1Z> match(tz, roadWidth_m,
JTimeRange(-TMAX_NS, +TMAX_NS));
201 for (JDataL1_t::const_iterator i = dataL1.begin(); i != dataL1.end(); ++i) {
214 data.reserve(data.size() + dataL0.size());
216 JDataR1_t::iterator __end1 = data.end();
218 for (JDataL0_t::iterator i = dataL0.begin(); i != dataL0.end(); ++i) {
220 if (find_if(data.begin(), __end1, bind2nd(equal_to<JDAQModuleIdentifier>(), i->getModuleID())) == __end1) {
236 fit.step[0] = JLine3Z(JLine1Z(JVector3D(0.5, 0.0, 0.0), 0.0));
237 fit.step[1] = JLine3Z(JLine1Z(JVector3D(0.0, 0.5, 0.0), 0.0));
238 fit.step[2] = JLine3Z(JLine1Z(JVector3D(0.0, 0.0, 0.0), 1.0));
239 fit.step[3] = JLine3Z(JLine1Z(JVector3D(), 0.0), JVersor3Z(0.005, 0.0));
240 fit.step[4] = JLine3Z(JLine1Z(JVector3D(), 0.0), JVersor3Z(0.0, 0.005));
242 const int NDF =
getCount(data.begin(), data.end()) - fit.step.size();
246 const double chi2 = fit(JLine3Z(tz), data.begin(), data.end());
248 JTrack3D tb(fit.value);
265 JSingleFileScanner<JRemove<typelist, JEvt>::typelist> io(inputFile);
Utility class to parse command line options.
double getCount(TH1D *hptr, int muon_threshold)
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.
JLimit JLimit_t
Type definition of limit.
const_iterator< T > end() const
Get end of data.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
void load(const JString &file_name, JDetector &detector)
Load detector from input file.
counter_type advance(counter_type &counter, const counter_type value, const counter_type limit=std::numeric_limits< counter_type >::max())
Advance counter.
double getQuality(const double chi2, const int NDF)
Get quality of fit.
bool qualitySorter(const JFIT::JFit &first, const JFIT::JFit &second)
Comparison of fit results.
void copy(const Head &from, JHead &to)
Copy header from from to to.
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.