55{
   59  
   61  typedef JParallelFileScanner_t::multi_pointer_type               multi_pointer_type;
   65 
   66  JParallelFileScanner_t   inputFile;
   69  string                   detectorFile;
   70  JCalibration_t           calibrationFile;
   71  double                   Tmax_s;
   72  string                   pdfFile;
   75 
   76  try { 
   77 
   79 
   80    JParser<> zap(
"Program to perform compass calibration using reconstructed muon trajectories.");
 
   81    
   91    
   92    zap(argc, argv);
   93  }
   94  catch(const exception& error) {
   95    FATAL(error.what() << endl);
 
   96  }
   97 
   98 
  101  }
  102 
  104 
  105  try {
  107  }
  110  }
  111 
  112  unique_ptr<JDynamics> dynamics;
  113 
  114  if (!calibrationFile.empty()) {
  115 
  116    try {
  117 
  119 
  120      dynamics->load(calibrationFile);
  121    }
  122    catch(const exception& error) {
  124    }
  125  }
  126 
  128 
  130 
  131  const JMuonGandalf::storage_type storage(pdfFile, parameters.
TTS_ns);
 
  132 
  134 
  137 
  139 
  141  const int ny = 101;
  142 
  143  TH2D h2(
h2_t, NULL, nx, -0.5, nx - 0.5, ny, -PI, +PI);
 
  144 
  145  while (inputFile.hasNext()) {
  146 
  147    STATUS(
"event: " << setw(10) << inputFile.getCounter() << 
'\r'); 
DEBUG(endl);
 
  148 
  149    multi_pointer_type ps = inputFile.next();
  150 
  153 
  154    summary.update(*tev);
  155 
  156    if (dynamics) {
  157      dynamics->update(*tev);
  158    }
  159 
  161 
  162    JDataL0_t dataL0;
  163      
  164    buildL0(*tev, router, true, back_inserter(dataL0));
  165      
  166    for (JFIT::JEvt::const_iterator track = in->begin(); track != in->end(); ++track) {
  167 
  171 
  174      }
  175 
  177 
  178      
  179 
  181          
  182      for (JDataL0_t::const_iterator i = dataL0.begin(); i != dataL0.end(); ++i) {
  183            
  184        double rate_Hz = summary.getRate(*i);
  185 
  186        if (rate_Hz <= 0.0) {
  187          rate_Hz = summary.getRate();
  188        }
  189 
  191            
  192        hit.rotate(R);
  193 
  194        if (match(hit)) {
  195          data[hit.getModuleID()].push_back(hit);
 
  196        }
  197      }
  198          
  200 
  201      for (auto& i : data) {
  202 
  203        const JModule& module = router.getModule(i.first);
 
  204 
  205        
  206 
  208 
  209        JDataW0_t::iterator __end = unique(i.second.begin(), i.second.end(), equal_to<JDAQPMTIdentifier>());
  210 
  211        for (Int_t iy = 1; iy <= h2.GetYaxis()->GetNbins(); ++iy) {
  212 
  213          const double x = router.getIndex(i.first);
 
  214          const double y = h2.GetYaxis()->GetBinCenter(iy);
 
  215 
  217 
  218          double chi2 = 0.0;
  219 
  220          for (JDataW0_t::const_iterator p = i.second.begin(); p != __end; ++p) {
  221 
  223 
  224            hit.rotate_back(R);
  225 
  227            hit.rotate(Rz);
  229 
  230            hit.rotate(R);
  231 
  232            chi2 += fit(ta, hit);
  233          }
  234 
  235          h2.Fill(x, y, chi2);
  236        }
  237      }
  238    }
  239  }
  241 
  243 
  245 
  246  out << h2;
  247 
  248  out.Write();
  249  out.Close();
  250}
#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 set of track fit results.
 
void select(const JSelector_t &selector)
Select fits.
 
Data structure for fit of straight line paralel to z-axis.
 
Data structure for fit of straight line in positive z-direction.
 
JPosition3D & rotate(const JRotation3D &R)
Rotate.
 
const JPosition3D & getPosition() const
Get position.
 
Utility class to parse command line options.
 
Auxiliary class for a hit with background rate value.
 
General purpose class for object reading from a list of file names.
 
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.
 
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
 
JTOOLS::JRange< double > JZRange
 
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.
 
const char *const h2_t
Name of histogram with results from JMuonCompass.cc.
 
bool putObject(TDirectory &dir, const TObject &object)
Write object to ROOT directory.
 
static const JModuleCounter getNumberOfModules
Function object to count unique modules.
 
KM3NeT DAQ data structures and auxiliaries.
 
Dynamic detector calibration.
 
Auxiliary class to match data points with given model.
 
Auxiliary class for recursive type list generation.
 
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
 
Wrapper class to make final fit of muon trajectory.
 
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 sorting of hits.