71   using namespace JSUPPORT;
 
   72   using namespace KM3NETDAQ;
 
   73   using namespace JAANET;
 
   76   typedef JParallelFileScanner_t::multi_pointer_type               multi_pointer_type;
 
   79   JParallelFileScanner_t  inputFile;
 
   87   size_t         numberOfPrefits;  
 
   98     zap[
'F'] = 
make_field(pdfFile)             = 
"quickPDF_elec-CC.root";
 
   99     zap[
'n'] = 
make_field(numberOfEvents)      = JLimit::max();
 
  108   catch(
const exception& error) {
 
  109      FATAL(error.what() << endl);
 
  112    using namespace JTRIGGER;
 
  113    using namespace JDETECTOR;
 
  114    using namespace JGEOMETRY3D;
 
  115    using namespace JTOOLS;
 
  122   catch(
const JException& error) {
 
  135   JRegressor_t::T_ns.setRange(-Tmax_ns, Tmax_ns);
 
  136   JRegressor_t::Vmax_npe = 20.0;   
 
  137   JRegressor_t::MAXIMUM_ITERATIONS = 1000;
 
  138   JRegressor_t fit(pdfFile);
 
  145   while (inputFile.hasNext()) {
 
  147     STATUS(
"event: " << setw(10) << inputFile.getCounter() << 
'\r'); 
DEBUG(endl);
 
  149     multi_pointer_type ps = inputFile.next();
 
  157       JEvt::iterator __end = evt->end();
 
  159       copy(evt->begin(), __end, back_inserter(out));
 
  161       if (numberOfPrefits > 0) {
 
  162         advance(__end = evt->begin(), min(numberOfPrefits, evt->size()));
 
  165       partial_sort(evt->begin(), __end, evt->end(), 
qualitySorter);
 
  170       buildL0(*tev, moduleRouter, 
true, back_inserter(dataL0));
 
  172       for (JEvt::const_iterator shower = evt->begin(); shower != __end; ++shower) {
 
  180         double radius = pos.getDistance(DetC);
 
  186         for (JDataL0_t::const_iterator i = dataL0.begin(); i != dataL0.end(); ++i) {
 
  191           double t_res = hit.getT() - pt.getT(hit_pos);
 
  193           const double cosT = photonDir.
getDot(hit.getDirection());
 
  195           if(D < Dmax_m && (t_res >= -25 && t_res <= 25) && (cosT >= -1 && cosT <= 0.1)){  
 
  196           top.insert(hit.getPMTIdentifier());
 
  197           JVector3D d(photonDir.getDX(), photonDir.getDY(), photonDir.getDZ());
 
  200           if(D < Dmax_m && (t_res > -30 && t_res < 20)){
 
  205         double start_E = exp((Nhits + 26)/26);  
 
  206         if(start_E > 100) start_E = 100;
 
  212         double max_theta = 0, max_phi = 0, scan_step = 0;
 
  215         if(start_E > 10 && radius < 100){
 
  227         JAngle3D start_dir_angles(start_dir.getX(), start_dir.getY(), start_dir.getZ());
 
  229         for(
double E = -15; E <= 5; E += 7.5){  
 
  230           for(
double th = -max_theta; th <= max_theta; th += scan_step){
 
  231             for(
double ph = -max_phi; ph <= max_phi; ph += scan_step){
 
  236               double theta = th * 3.14 / 180;
 
  237               double phi = ph * 3.14 / 180;
 
  238               double scan_E = start_E + E;  
 
  240               JAngle3D dir_shifted_angles(start_dir_angles.getTheta() + theta, start_dir_angles.getPhi() + phi);
 
  241               JVector3D dir_shifted(dir_shifted_angles.getDX(), dir_shifted_angles.getDY(), dir_shifted_angles.getDZ()); 
 
  242               JDirection3D conversion(dir_shifted.getX(), dir_shifted.getY(), dir_shifted.getZ());
 
  246               for (JDetector::const_iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  249                 if (pt.getDistance(pos) < Dmax_m) {
 
  250                   for (
unsigned int i = 0; i != module->size(); ++i) {
 
  252                     JPMT pmt(module->getPMT(i));
 
  254                     buffer.push_back(
JPMTW0(pmt, R_Hz, top.count(
id)));
 
  259               for(JPMTW0_t::iterator pmt = buffer.begin(); pmt != buffer.end(); ++pmt ){
 
  263               LogLik.push_back(chi2);
 
  264               start_directions.push_back(dir_shifted);
 
  265               Energies.push_back(scan_E);
 
  272         while(LogLik.size() > Nmin){
 
  275           it = max_element(LogLik.begin(), LogLik.end());
 
  276           int pos = it - LogLik.begin();
 
  277           LogLik.erase(LogLik.begin() + pos);
 
  278           start_directions.erase(start_directions.begin() + pos);
 
  279           Energies.erase(Energies.begin() + pos);
 
  287           double dir_step = 0.05;
 
  292           double scan_E = Energies[n];
 
  296           JVersor3D startVersor(dir->getX(), dir->getY(), dir->getZ());
 
  298           JDirection3D conversion(startVersor.getDX(), startVersor.getDY(), startVersor.getDZ());
 
  302             for(JDetector::const_iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  305               if (pt.getDistance(pos) < Dmax_m) {
 
  306                 for (
unsigned int i = 0; i != module->size(); ++i) {
 
  308                   JPMT pmt(module->getPMT(i));
 
  310                   buffer.push_back(
JPMTW0(pmt, R_Hz, top.count(
id)));
 
  315             int NDF = buffer.size() - fit.step.size();
 
  322             JVersor3D resDir(fit.value.getDX(), fit.value.getDY(), fit.value.getDZ());  
 
  324             JTrack3D td(resPos, resDir, shower->getT());          
 
  325             double E_reco_corrected = fit.value.getE() - 4;
 
  330             out.rbegin()->setE(E_reco_corrected);
 
Data structure for angles in three dimensions. 
 
Utility class to parse command line options. 
 
Data structure for direction in three dimensions. 
 
Template specialisation of L0 builder for JHitL0 data type. 
 
Auxiliary class for handling PMT geometry, rate and response. 
 
Data structure for vertex fit. 
 
Router for direct addressing of module data in detector data structure. 
 
General purpose class for parallel reading of objects from a single file or multiple files...
 
Container for historical events. 
 
double getDistance(const JVector3D &pos) const 
Get distance to point. 
 
double getDot(const JAngle3D &angle) const 
Get dot product. 
 
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. 
 
Auxiliary class for defining the range of iterations of objects. 
 
Data structure for fit of straight line in positive z-direction with energy. 
 
JAxis3D & rotate(const JRotation3D &R)
Rotate axis. 
 
Data structure for vector in three dimensions. 
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object 
 
Data structure for PMT geometry and calibration. 
 
Auxiliary class for a hit with background rate value. 
 
void load(const JString &file_name, JDetector &detector)
Load detector from input file. 
 
Regressor function object for JShower3EZ fit using JSimplex minimiser. 
 
counter_type advance(counter_type &counter, const counter_type value, const counter_type limit=std::numeric_limits< counter_type >::max())
Advance counter. 
 
Data structure for set of track fit results. 
 
General purpose class for object reading from a list of file names. 
 
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. 
 
Data structure for fit of energy. 
 
Data structure for position in three dimensions. 
 
const JLimit & getLimit() const 
Get limit. 
 
Data structure for normalised vector in three dimensions. 
 
Data structure for normalised vector in positive z-direction. 
 
JPosition3D & rotate(const JRotation3D &R)
Rotate. 
 
JVector3D & add(const JVector3D &vector)
Add vector. 
 
#define DEBUG(A)
Message macros. 
 
JPosition3D getPosition(const Vec &v)
Get position.