#include #include #include #include "Jeep/JPrint.hh" #include "Jeep/JParser.hh" #include "Jeep/JMessage.hh" #include "JOscProb/JOscChannel.hh" #include "JOscProb/JOscParameters.hh" #include "JOscProb/JOscillogram.hh" #include "JOscProb/JOscProbToolkit.hh" #include "JOscProb/JOscProbInterpolator.hh" #include "JOscProb/JOscProbInterpolatorInterface.hh" #include "TFile.h" #include "TH2D.h" /** * \file * Example program to plot oscillogram. * * \author bjung */ int main(int argc, char **argv) { using namespace std; using namespace JPP; typedef JGrid JGrid_t; string inputFile; string outputFile; string abscissaType; JGrid_t abscissaGrid; string ordinateType; JGrid_t ordinateGrid; JOscParameters parameters; JOscChannel channel; int debug; try { JParser<> zap; zap['f'] = make_field(inputFile, "oscillation probability table file"); zap['o'] = make_field(outputFile, "output file"); zap['X'] = make_field(abscissaType, "abscissa type") = JOscVars::energy(), JOscVars::log10E(), JOscVars::LoE(); zap['x'] = make_field(abscissaGrid, "abscissa binning"); zap['Y'] = make_field(ordinateType, "ordinate type") = JOscVars::costh(), JOscVars::sinth(), JOscVars::L(); zap['y'] = make_field(ordinateGrid, "ordinate binning"); zap['@'] = make_field(parameters, "oscillation parameters") = JOscParameters(false); zap['#'] = make_field(channel, "oscillation channel") = JOscChannel(JFlavour_t::MUON, JFlavour_t::MUON, JChargeParity_t::PARTICLE); zap['d'] = make_field(debug) = 2; zap(argc, argv); } catch (const exception& error) { FATAL(error.what() << endl); } const JOscProbInterpolator<> interpolator(inputFile.c_str(), parameters); TH2D h0("h0", NULL, abscissaGrid.getSize(), abscissaGrid.getXmin(), abscissaGrid.getXmax(), ordinateGrid.getSize(), ordinateGrid.getXmin(), ordinateGrid.getXmax()); const JOscillogram oscillogram(abscissaType, abscissaGrid, ordinateType, ordinateGrid, channel, &interpolator); NOTICE(RIGHT(15) << abscissaType << RIGHT(15) << ordinateType << RIGHT(15) << "P" << endl); for (int ix = 0; ix < abscissaGrid.getSize(); ++ix) { for (int iy = 0; iy < ordinateGrid.getSize(); ++iy) { const double x = abscissaGrid.getX(ix); const double y = ordinateGrid.getX(iy); const double P = oscillogram.getP(ix, iy); NOTICE(FIXED(15,3) << x << FIXED(15,3) << y << FIXED(15,3) << P << '\r'); DEBUG(endl); h0.SetBinContent(ix+1, iy+1, P); } } TFile out(outputFile.c_str(), "recreate"); h0.Write(); out.Write(); out.Close(); }