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.