66 int main(
int argc,
char **argv)
73 typedef JParallelFileScanner_t::multi_pointer_type multi_pointer_type;
79 JParallelFileScanner_t inputFile;
83 JCalibration_t calibrationFile;
87 histogram_type calibrate;
94 JParser<> zap(
"Program to perform detector calibration using reconstructed muon trajectories.");
101 zap[
'n'] =
make_field(numberOfEvents) = JLimit::max();
103 zap[
'c'] =
make_field(calibrate,
"Histogram for time calibration per optical module.");
109 catch(
const exception& error) {
110 FATAL(error.what() << endl);
114 if (!calibrate.is_valid()) {
115 FATAL(
"Invalid calibration data " << calibrate << endl);
131 unique_ptr<JDynamics> dynamics;
137 dynamics->load(calibrationFile);
139 catch(
const exception& error) {
140 if (!calibrationFile.empty()) {
159 TH2D ha(
"ha", NULL, 256, -0.5, 255.5,
160 calibrate.getNumberOfBins(), calibrate.getLowerLimit(), calibrate.getUpperLimit());
162 TProfile hb(
"hb", NULL, 256, -0.5, 255.5);
164 TProfile hr(
"hr", NULL, 60, 0.0, 150.0);
167 calibrate.getNumberOfBins(), calibrate.getLowerLimit(), calibrate.getUpperLimit());
169 JManager_t
g1(
new TProfile(
"%", NULL,
detector.size(), -0.5,
detector.size() - 0.5, -1.0, +1.0));
172 while (inputFile.hasNext()) {
174 STATUS(
"event: " << setw(10) << inputFile.getCounter() <<
'\r');
DEBUG(endl);
176 multi_pointer_type ps = inputFile.next();
184 dynamics->update(*tev);
191 buildL0(*tev, router,
true, back_inserter(dataL0));
193 for (JFIT::JEvt::const_iterator track = in->begin(); track != in->end(); ++track) {
209 for (JDataL0_t::const_iterator i = dataL0.begin(); i != dataL0.end(); ++i) {
211 double rate_Hz = summary.
getRate(*i);
213 if (rate_Hz <= 0.0) {
230 JDataW0_t::iterator __end = unique(
data.begin(),
data.end(), equal_to<JDAQPMTIdentifier>());
235 if (track->getE() > 0.1)
236 fit.JRegressor_t::E_GeV = track->getE();
238 fit.JRegressor_t::E_GeV = parameters.
E_GeV;
242 for (JDataW0_t::const_iterator hit =
data.begin(); hit != __end; ++hit) {
243 buffer.insert(hit->getModuleID());
252 if (
distance(
data.begin(), q) - fit.parameters.size() > 0) {
254 fit(ta,
data.begin(), q);
256 for (JDataW0_t::const_iterator hit = q; hit != __end; ++hit) {
258 const int index = router.
getIndex(*
id);
259 const double t1 = fit.value.getT(hit->getPosition());
260 JTrack3D gradient = fit(fit.value, *hit).gradient;
264 ha.Fill(hit->getToT(), hit->getT1() - t1);
265 hb.Fill(hit->getToT(), gradient.
getT());
267 hr.Fill(fit.value.getDistance(*hit), gradient.
getT());
269 h2.Fill(index, hit->getT() - t1);
271 g1[
"T"]->Fill(index, gradient.
getT());
272 g1[
"X"]->Fill(index, gradient.
getX());
273 g1[
"Y"]->Fill(index, gradient.
getY());
274 g1[
"Z"]->Fill(index, gradient.
getZ());
int main(int argc, char **argv)
Data structure for detector geometry and calibration.
Dynamic detector calibration.
Basic data structure for L0 hit.
Dynamic ROOT object management.
General purpose messaging.
#define DEBUG(A)
Message macros.
Direct access to module in detector data structure.
Parallel scanning of objects from a single file or multiple files according a format that follows fro...
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Double_t g1(const Double_t x)
Function.
ROOT TTree parameter settings of various packages.
Basic data structure for time and time over threshold information of hit.
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
Router for direct addressing of module data in detector data structure.
const int getIndex(const JObjectID &id) const
Get index of 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.
JAxis3D & rotate_back(const JRotation3D &R)
Rotate back axis.
JAxis3D & rotate(const JRotation3D &R)
Rotate axis.
JPosition3D & rotate(const JRotation3D &R)
Rotate.
double getT(const JVector3D &pos) const
Get arrival time of Cherenkov light at given position.
double getY() const
Get y position.
double getZ() const
Get z position.
double getX() const
Get x position.
Utility class to parse command line options.
Auxiliary class for a hit with background rate value.
Auxiliary class to manage set of compatible ROOT objects (e.g. histograms) using unique keys.
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.
void update(const JDAQHeader &header)
Update router.
double getRate() const
Get default rate.
Template specialisation of L0 builder for JHitL0 data type.
static const int JSTART_LENGTH_METRES
distance between first and last hits in metres from JStart.cc
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
JPredicate< JResult_t T::*, JComparison::eq > make_predicate(JResult_t T::*member, const JResult_t value)
Helper method to create predicate for data member.
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.
bool putObject(TDirectory &dir, const TObject &object)
Write object to ROOT directory.
KM3NeT DAQ data structures and auxiliaries.
Dynamic detector calibration.
Template specialisation of class JModel to match hit with muon trajectory along z-axis.
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 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.
Auxiliary data structure for sorting of hits.