70{
   74  
   76  typedef JParallelFileScanner_t::multi_pointer_type               multi_pointer_type;
   77 
   78  JParallelFileScanner_t   inputFile;
   80  string                   detectorFile;
   81  string                   pdfFile;
   84 
   85  try { 
   86 
   88 
   89    JParser<> zap(
"Program to evaluate hit probabilities.");
 
   90    
   97    
   98    zap(argc, argv);
   99  }
  100  catch(const exception& error) {
  101    FATAL(error.what() << endl);
 
  102  }
  103 
  104  
  105 
  106 
  109  }
  110 
  112 
  113  try {
  115  }
  118  }
  119 
  121 
  123 
  126 
  128 
  131 
  133 
  134  while (inputFile.hasNext()) {
  135 
  136    STATUS(
"event: " << setw(10) << inputFile.getCounter() << 
'\r'); 
DEBUG(endl);
 
  137 
  138    multi_pointer_type ps = inputFile.next();
  139 
  142 
  143    DEBUG(
"event: " << *tev << endl);
 
  144 
  145    summary.update(*tev);
  146 
  148 
  149    JDataL0_t dataL0;
  150      
  151    buildL0(*tev, router, true, back_inserter(dataL0));
  152 
  153    for (JEvt::const_iterator track = in->begin(); track != in->end(); ++track) {
  154 
  155      DEBUG(
"track: " << *track << endl);
 
  156 
  160 
  163      }
  164 
  166 
  167      
  168 
  170          
  171      for (JDataL0_t::const_iterator i = dataL0.begin(); i != dataL0.end(); ++i) {
  172 
  173        JHitW0 hit(*i, summary.getRate(*i, parameters.
R_Hz));
 
  174            
  175        hit.rotate(R);
  176 
  177        if (match(hit)) {
  179        }
  180      }
  181          
  182      
  183          
  184      sort(
data.begin(), 
data.end(), compare);
 
  185 
  186      JDataW0_t::iterator __end = unique(
data.begin(), 
data.end(), equal_to<JDAQPMTIdentifier>());
 
  187          
  188 
  189      double E_GeV = parameters.
E_GeV;
 
  190      
  191
  192
  193
  194
  195 
  197            << 
FIXED(12,3) << tz.getX()     << 
' ' 
  198            << 
FIXED(12,3) << tz.getY()     << 
' ' 
  199            << 
FIXED(12,3) << tz.getZ()     << 
' ' 
  200            << 
FIXED(12,3) << tz.getT()     << 
' '  
  201            << 
FIXED(12,1) << E_GeV         << 
' ' 
  202            << 
FIXED( 8,3) << track->getQ() << endl);
 
  203 
  204      
  205      
  206
  207
  208 
  209
  210
  211
  212
  213 
  214
  215
  216
  217
  218 
  219      double Q = 0.0;
  220 
  221      for (JDataW0_t::const_iterator hit = 
data.begin(); hit != __end; ++hit) {
 
  222 
  223        const double x  = hit->getX() - tz.getX();
 
  224        const double y  = hit->getY() - tz.getY();
 
  225        const double z  = hit->getZ() - tz.getZ();
  226        const double R  = sqrt(x*x + y*y);
  227 
  229 
  230        JDirection3D u(hit->getDX(), hit->getDY(), hit->getDZ()); 
 
  231 
  233 
  234        const double theta = u.getTheta();
  235        const double phi   = fabs(u.getPhi());                    
  236 
  237        
  238        const double E  = E_GeV;
  239        const double dt = T_ns.constrain(hit->getT()  -  t1);
  240 
  243 
  244        H1 += H0;                                                 
  245 
  246        const double chi2 = H1.getChi2() - H0.getChi2();          
  247 
  249              << setw(10) << hit->getModuleID() << ':' << setw( 2) << setfill('0') << hit->getPMTAddress() << setfill(' ') << ' '
  250              << 
FIXED(12,1) << E           << 
' ' 
  251              << 
FIXED( 9,1) << R           << 
' ' 
  252              << 
FIXED( 6,4) << theta       << 
' ' 
  253              << 
FIXED( 6,4) << phi         << 
' ' 
  254              << 
FIXED( 8,3) << dt          << 
' ' 
  255              << 
FIXED(12,3) << chi2 << endl);
 
  256 
  258      }
  259 
  261 
  262 
  263      double Y = 0.0;
  264 
  265      for (JDetector::const_iterator i = 
detector.begin(); i != 
detector.end(); ++i) {
 
  266 
  268 
  269        pos.transform(R, tz.getPosition());
  270 
  272 
  274 
  275          module.transform(R, tz.getPosition());
  276 
  277          for (JModule::iterator pmt = module.begin(); pmt != module.end(); ++pmt) {
  278 
  279            const double R     = sqrt(pmt->getX()*pmt->getX() + pmt->getY()*pmt->getY());
  280            const double theta = pmt->getTheta();
  281            const double phi   = fabs(pmt->getPhi());
  282            const double y     = npe.calculate(1.0, R, theta, phi);   
 
  283 
  285                  << setw(10) << module.
getID() << 
':' << setw( 2) << setfill(
'0') << 
distance(module.begin(),pmt) << setfill(
' ') << 
' ' 
  286                  << 
FIXED(9,1)      << R      << 
' ' 
  287                  << 
FIXED(6,4)      << theta  << 
' ' 
  288                  << 
FIXED(6,4)      << phi    << 
' ' 
  290 
  292          }
  293        }
  294      }
  295 
  297    }
  298  }
  300}
#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 a composite optical module.
 
Data structure for fit of straight line paralel to z-axis.
 
Data structure for direction in three dimensions.
 
Data structure for position in three dimensions.
 
JPosition3D & rotate(const JRotation3D &R)
Rotate.
 
int getID() const
Get identifier.
 
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.
 
File router for fast addressing of summary data.
 
static const int JSTART_LENGTH_METRES
distance between projected positions on the track of optical modules for which the response does not ...
 
JDirection3D getDirection(const Vec &dir)
Get direction.
 
JPosition3D getPosition(const Vec &pos)
Get position.
 
double getQuality(const double chi2, const int NDF)
Get quality of fit.
 
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
 
const double getInverseSpeedOfLight()
Get inverse speed of light.
 
double getTanThetaC()
Get average tangent of Cherenkov angle of water corresponding to group velocity.
 
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.
 
KM3NeT DAQ data structures and auxiliaries.
 
Auxiliary data structure for floating point format specification.
 
Model for fit to acoustics data.
 
Auxiliary data structure for muon PDF.
 
JFunction1D_t::result_type result_type
 
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
 
Data structure for fit parameters.
 
double TTS_ns
transition-time spread [ns]
 
double TMin_ns
minimal time w.r.t. Cherenkov hypothesis [ns]
 
double roadWidth_m
road width [m]
 
double TMax_ns
maximal time w.r.t. Cherenkov hypothesis [ns]
 
double ZMax_m
maximal z-positon [m]
 
double ZMin_m
minimal z-positon [m]
 
double R_Hz
default rate [Hz]
 
size_t numberOfPrefits
number of prefits
 
Auxiliary class for defining the range of iterations of objects.
 
const JLimit & getLimit() const
Get limit.
 
static counter_type max()
Get maximum counter value.
 
Auxiliary data structure for floating point format specification.