#include #include #include #include #include "JDetector/JDetector.hh" #include "JDetector/JDetectorToolkit.hh" #include "JSupport/JMultipleFileScanner.hh" #include "JSupport/JMeta.hh" #include "JDynamics/JDynamics.hh" #include "Jeep/JPrint.hh" #include "Jeep/JParser.hh" #include "Jeep/JMessage.hh" /** * \file * * Example program to apply dynamic position and orientation calibration. * \author mdejong */ int main(int argc, char **argv) { using namespace std; using namespace JPP; JMultipleFileScanner::typelist> calibrationFile; JLimit_t& numberOfEvents = calibrationFile.getLimit(); string detectorFile; string outputFile; double Tmax_s; double t1_s; int debug; try { JParser<> zap("Example program to apply dynamic position and orientation calibration."); zap['f'] = make_field(calibrationFile, "output of JBallarat[.sh] / JKatoomba[.sh]"); zap['n'] = make_field(numberOfEvents) = JLimit::max(); zap['a'] = make_field(detectorFile); zap['o'] = make_field(outputFile); zap['M'] = make_field(getMechanics, "mechanics data") = JPARSER::initialised(); zap['T'] = make_field(Tmax_s) = 0.0; zap['t'] = make_field(t1_s); zap['d'] = make_field(debug) = 2; zap(argc, argv); } catch(const exception &error) { FATAL(error.what() << endl); } JDetector detector; try { load(detectorFile, detector); } catch(const JException& error) { FATAL(error); } detector.comment.add(JMeta(argc, argv)); JDynamics dynamics(detector, Tmax_s); STATUS("loading calibration from file(s)" << endl); for (JMultipleFileScanner<>::const_iterator i = calibrationFile.begin(); i != calibrationFile.end(); ++i) { STATUS(*i << endl); } dynamics.load(calibrationFile); STATUS("OK" << endl); STATUS("Coverage position " << FIXED(5,1) << 100.0 * dynamics.position .getCoverage(detector, t1_s) << "%" << endl); STATUS("Coverage orientation " << FIXED(5,1) << 100.0 * dynamics.orientation.getCoverage(detector, t1_s) << "%" << endl); dynamics.update(t1_s); store(outputFile.c_str(), dynamics); }