44 inline double getE0(
const Evt& evt)
48 if (!evt.mc_trks.empty() &&
is_neutrino(evt.mc_trks[0])) {
50 const Trk& neutrino = evt.mc_trks[0];
54 for (
size_t i = 1; i != evt.mc_trks.size(); ++i) {
56 const Trk& track = evt.mc_trks[i];
91 inline double getE1(
const Evt& evt)
95 if (!evt.mc_trks.empty() &&
is_neutrino(evt.mc_trks[0])) {
97 const Trk& neutrino = evt.mc_trks[0];
99 for (
size_t i = 1; i != evt.mc_trks.size(); ++i) {
101 const Trk& track = evt.mc_trks[i];
106 E1 +=
gWater(track.E, -(track.pos - neutrino.pos).len());
126 int main(
int argc,
char **argv)
132 JLimit_t& numberOfEvents = inputFile.getLimit();
139 JParser<> zap(
"Example program to verify generator data.");
143 zap[
'n'] =
make_field(numberOfEvents) = JLimit::max();
149 catch(
const exception &error) {
150 FATAL(error.what() << endl);
157 TH1D h0 (
"h0", NULL, 1001, -1.0, +1.0);
158 TH1D job(
"job", NULL, 10001, -5000.5, +5000.5);
160 TH1D hn (
"hn", NULL, 2001, -0.5, +2000.5);
161 TH1D he (
"he", NULL, 1000, 0.0, 10.0);
172 const Evt*
event = inputFile.
next();
175 job.Fill((
double) track->type);
180 const double E0 = getE0(*event);
181 const double E1 = getE1(*event);
185 const Trk& neutrino =
event->mc_trks[0];
187 cout << endl <<
"--------------------------------------------------------" << endl;
188 cout <<
"event: " << setw(8) <<
event->mc_id <<
" energy [GeV] distance [m]" << endl;
190 for (
size_t i = 0; i !=
event->mc_trks.size(); ++i) {
192 const Trk& track =
event->mc_trks[i];
195 cout << setw(32) << left << particle.
name <<
' ' <<
FIXED(7,3) << track.E <<
" " <<
FIXED(7,3) << (track.pos - neutrino.pos).len() << endl;
197 cout << setw(32) << left <<
"balance" <<
' ' <<
FIXED(7,3) << E0 - E1 << endl;
200 h0.Fill((E0 - E1)/E0);
210 he.Fill(log10(track->E));
211 h2.Fill(track->pos.x*track->pos.x + track->pos.y*track->pos.y, track->pos.z);
215 hn.Fill((Double_t)
n);