72   inline bool cmz(
const JHitR1& first, 
const JHitR1& second)
 
   91 int main(
int argc, 
char **argv)
 
  101   JLimit_t&      numberOfEvents = inputFile.getLimit();
 
  107   int            numberOfOutliers;
 
  108   double         gridAngle_deg;
 
  110   size_t         numberOfPrefits;
 
  115     JParser<> zap(
"Program to perform pre-fit of muon trajectory to data.");
 
  120     zap[
'n'] = 
make_field(numberOfEvents)      = JLimit::max();
 
  128     zap[
'N'] = 
make_field(numberOfPrefits)     = numeric_limits<size_t>::max();
 
  133   catch(
const exception& error) {
 
  134     FATAL(error.what() << endl);
 
  141   const int    FACTORY_LIMIT          =   8;                                
 
  142   const double STANDARD_DEVIATIONS    =   3.0;                              
 
  143   const double HIT_OFF                =   1.0e3 * sigma_ns * sigma_ns;      
 
  144   const int    NUMBER_OF_L1HITS       =  (useL0 ? 1 : 4);
 
  145   const int    MAXIMUM_NUMBER_OF_HITS =  50; 
 
  170   const JOmega3D             omega(gridAngle_deg * 
PI/180.0);
 
  190     buildL0(
JDAQTimeslice(*tev,  
true),  router, back_inserter(dataL0));
 
  191     buildL2(
JDAQTimeslice(*tev, !useL0), router, back_inserter(dataL1));
 
  196     JDataL1_t::iterator __end = unique(dataL1.begin(), dataL1.end(), equal_to<JDAQModuleIdentifier>());
 
  201     if (
distance(dataL1.begin(), __end) >= NUMBER_OF_L1HITS) {
 
  207       for (JOmega3D_t::const_iterator dir = omega.begin(); dir != omega.end(); ++dir) {
 
  213         copy(dataL1.begin(), __end, back_inserter(data));
 
  215         for (JDataR1_t::iterator i = data.begin(); i != data.end(); ++i) {
 
  220         JDataR1_t::iterator __end1 = data.end();
 
  225         if (
distance(data.begin(), __end1) > MAXIMUM_NUMBER_OF_HITS) {
 
  227           advance(__end1 = data.begin(), MAXIMUM_NUMBER_OF_HITS);
 
  229           partial_sort(data.begin(), __end1, data.end(), cmz);
 
  237         if (
distance(data.begin(), __end1) < NUMBER_OF_L1HITS) {
 
  244           data.erase(__end1, data.end());
 
  246           data.reserve(data.size() + dataL0.size());
 
  250           for (JDataL0_t::const_iterator i = dataL0.begin(); i != dataL0.end(); ++i) {
 
  252             if (find_if(data.begin(), __end1, bind2nd(equal_to<JDAQModuleIdentifier>(), i->getModuleID())) == __end1) {
 
  258               if (count_if(data.begin(), __end1, 
JBind2nd(match1D,hit)) >= NUMBER_OF_L1HITS) {
 
  264           __end1 = 
clusterize(__end1, data.end(), match1D);
 
  275         double   chi2 = numeric_limits<double>::max();
 
  282         if (
distance(data.begin(), __end1) <= FACTORY_LIMIT) {
 
  284           double ymin = numeric_limits<double>::max();
 
  286           JDataR1_t::iterator __end2 = __end1;
 
  290             sort(data.begin(), __end1, compare);
 
  298                 V.
set(fit, data.begin(), __end2, gridAngle_deg, sigma_ns);
 
  299                 Y.
set(fit, data.begin(), __end2);
 
  306                   WARNING(endl << 
"chi2(1) " << y << endl);
 
  307                 } 
else if (y < ymin) {
 
  319             ymin -= STANDARD_DEVIATIONS * STANDARD_DEVIATIONS;
 
  330             V.
set(fit, data.begin(), __end1, gridAngle_deg, sigma_ns);
 
  331             Y.
set(fit, data.begin(), __end1);
 
  338             for (
int n = 0; n <= number_of_outliers && NDF > 0; ++
n, --NDF) {
 
  343               for (
unsigned int i = 0; i != Y.size(); ++i) {
 
  348                   WARNING(endl << 
"chi2(2) " << y << endl);
 
  349                 } 
else if (y > ymax) {
 
  355               if (ymax < STANDARD_DEVIATIONS * STANDARD_DEVIATIONS) {
 
  361               fit.update(data.begin(), __end1, V);
 
  363               Y.
set(fit, data.begin(), __end1);
 
  384       if (numberOfPrefits > 0) {
 
  386         JEvt::iterator __end = out.end();
 
  388         advance(__end = out.begin(), min(numberOfPrefits, out.size()));
 
  396           JEvt::iterator __begin = __end;
 
  399           advance(__end = __begin, min(numberOfPrefits, (
size_t) 
distance(__begin, __q)));
 
  404         out.erase(__end, out.end());