#include #include #include #include "Jeep/JPrint.hh" #include "Jeep/JParser.hh" #include "Jeep/JMessage.hh" #include "JROOT/JManager.hh" #include "JGizmo/JRootObjectID.hh" #include "JSupport/JMeta.hh" #include "JDetector/JCalibration.hh" #include "JCalibrate/JFitToT.hh" #include "JCalibrate/JHVInterpolator.hh" /** * \file * * Example program to interpolate input high-voltage-gain data. * \author bjjung */ int main(int argc, char **argv) { using namespace std; using namespace JPP; using JCALIBRATE::JHVInterpolator; typedef map> map_t; typedef JRange JRange_t; map_t input; JRootObjectID output; double minDistanceHV = 2 * 3.14; JRange_t rangeHV = JRange_t(-1500 + 1e-2, -80 - 1e-2); JRange_t rangeGain = JRange_t(FITTOT_GAIN_MIN + 1e-2, FITTOT_GAIN_MAX - 1e-2); double targetGain = NOMINAL_GAIN; int debug; try { JParser<> zap("Example program to interpolate high-voltage versus gain ASCII data."); JProperties properties; properties.insert(gmake_property(minDistanceHV)); properties.insert(gmake_property(rangeHV)); properties.insert(gmake_property(rangeGain)); properties.insert(gmake_property(targetGain)); zap['f'] = make_field(input); zap['o'] = make_field(output) = JPARSER::initialised(); zap['@'] = make_field(properties) = JPARSER::initialised(); zap['d'] = make_field(debug) = 2; zap(argc, argv); } catch (const exception& error) { FATAL(error.what() << endl); } JHVInterpolator::setMinHVDistance(minDistanceHV); JHVInterpolator::setHVRange (rangeHV); JHVInterpolator::setGainRange (rangeGain); TMultiGraph graph (output.getObjectName(), NULL); JHVInterpolator interpolator(graph); NOTICE(RIGHT(35) << "High-Voltage [V]" << RIGHT(31) << "gain [-]" << endl); for (map_t::const_iterator i = input.cbegin(); i != input.cend(); ++i) { const double HV = i->first; const double gain = i->second.first; const double gainError = i->second.second; NOTICE(FIXED(35,2) << HV << FIXED(22,2) << gain << " +/- " << FIXED(3,2) << gainError << endl); interpolator.AddPoint(HV, gain, gainError); } TFile file(output.getFilename().c_str(), "RECREATE"); putObject(file, JMeta(argc, argv)); graph.Write(); file.Close(); NOTICE(FILL(100,'-') << " Interpolated high-voltage" << setfill(' ') << endl); try { interpolator.interpolateHV(targetGain); const double targetHV = interpolator.getHV (); const double targetHVError = interpolator.getHVError(); NOTICE(FIXED(35,2) << right << -targetHV << " +/- " << FIXED(8, 2) << left << targetHVError << FIXED(9, 2) << right << targetGain << endl); } catch (const exception& error) { FATAL(error.what() << endl); } }