79int main(
int argc,
char **argv)
86 typedef JTriggeredFileScanner_t::multi_pointer_type multi_pointer_type;
88 JTriggeredFileScanner_t inputFile;
91 size_t numberOfPrefits;
102 JParser<> zap(
"Example program to histogram fit results.");
112 zap[
'O'] =
make_field(option) =
"LINE",
"LOGE",
"LINN",
"LOGN";
118 catch(
const exception& error) {
119 FATAL(error.what() << endl);
127 catch(
const exception& error) {
128 FATAL(error.what() << endl);
131 JVolume volume(head, option !=
"LINE");
136 cylinder.
add(offset);
138 NOTICE(
"Offset: " << offset << endl);
139 NOTICE(
"Cylinder: " << cylinder << endl);
143 TH1D job(
"job", NULL, 100, 0.5, 100.5);
145 TH1D hn(
"hn", NULL, 250, -0.5, 249.5);
146 TH1D hq(
"hq", NULL, 300, 0.0, 600.0);
147 TH1D hi(
"hi", NULL, 101, -0.5, 100.5);
148 TH1D hc(
"hc", NULL, 200, -1.0, +1.0);
149 TH1D hu(
"hu", NULL, 400, -1.0e3, 1.0e3);
151 TH1D hx(
"hx", NULL, 70, -3.0, +2.3);
152 TH1D hd(
"hd", NULL, 100, 0.0, 10.0);
153 TH1D ht(
"ht", NULL, 100, -100.0, 100.0);
155 TH1D hz0(
"hz0[start]", NULL, 400, -200.0, 200.0);
156 TH1D hz1(
"hz1[end]", NULL, 400, -200.0, 200.0);
161 TH1D E_E(
"E_E", NULL, 100, -5.0, +5.0);
162 TH2D ExE(
"ExE", NULL,
166 const Int_t ny = 28800;
167 const Double_t ymin = 0.0;
168 const Double_t ymax = 180.0;
172 if (option ==
"LINN") {
174 const double xmin = log((
double) 3);
175 const double xmax = log((
double) 300);
177 for (
double x = xmin, dx = (xmax - xmin) / 20; x <= xmax; x += dx) {
178 X.push_back((
int) exp(x));
181 }
else if (option ==
"LOGN") {
183 const double xmin = log10((
double) 3);
184 const double xmax = log10((
double) 400);
186 for (
double x = xmin, dx = (xmax - xmin) / 20; x <= xmax; x += dx) {
197 TH2D h2(
"h2", NULL, X.size() - 1, X.data(), ny, ymin, ymax);
210 while (inputFile.hasNext()) {
212 STATUS(
"event: " << setw(10) << inputFile.getCounter() <<
'\r');
DEBUG(endl);
214 multi_pointer_type ps = inputFile.next();
233 vector<Trk>::const_iterator muon =
event->mc_trks.end();
235 for (vector<Trk>::const_iterator track = event->mc_trks.begin(); track != event->mc_trks.end(); ++track) {
241 if (track->E > Emax) {
248 if (muon == event->mc_trks.end()) {
260 const double E =
event->mc_trks[0].E;
263 if (option ==
"LINN")
265 else if (option ==
"LOGN")
276 if (evt->begin() == __end) {
282 if (numberOfPrefits > 0) {
284 JEvt::iterator __q = __end;
286 advance(__end = evt->begin(), min(numberOfPrefits, (
size_t)
distance(evt->begin(), __q)));
301 }
else if (
primary == neutrino_t) {
306 JEvt::iterator best = pointing(evt->begin(), __end);
307 const Double_t beta = pointing.
getAngle(*best);
308 const double Efit = best->getE();
309 const double Eraw = best->getW(
JENERGY_ENERGY, numeric_limits<double>::min());
313 bool ok = (Efit >= Emin_GeV);
319 hn.Fill((Double_t) best->getNDF());
320 hq.Fill(best->getQ());
321 hi.Fill((Double_t)
distance(evt->begin(), best));
322 hc.Fill(best->getDZ());
328 hu.Fill(atmosphere(evt->begin(), __end));
331 hx.Fill(max(log10(beta), hx.GetXaxis()->GetXmin()));
372 E_0.Fill(volume.
getX(E,
true));
373 E_1.Fill(volume.
getX(Eraw,
true));
374 E_2.Fill(volume.
getX(Efit,
true));
375 E_E.Fill(volume.
getX(Efit) - volume.
getX(E));
376 ExE.Fill(volume.
getX(E), volume.
getX(Efit));
384 NOTICE(
"Number of events input " << setw(8) << right << job.GetBinContent(1) << endl);
385 NOTICE(
"Number of events with muon " << setw(8) << right << job.GetBinContent(3) << endl);
386 NOTICE(
"Number of events with fit " << setw(8) << right << job.GetBinContent(4) << endl);
387 NOTICE(
"Number of events selected " << setw(8) << right << job.GetBinContent(5) << endl);
388 NOTICE(
"Number of events with neutrino " << setw(8) << right << job.GetBinContent(6) << endl);
389 NOTICE(
"Number of events contained " << setw(8) << right << job.GetBinContent(7) << endl);
391 if (Q.getCount() != 0) {
393 NOTICE(
"Median space angle [deg] " <<
FIXED (6,3) << Q.getQuantile(0.5) << endl);
395 for (
double q : {0.50, 0.90, 0.99}) {
396 NOTICE(
"Space angle " <<
FIXED(5,1) << (100.0 * q) <<
"% quantile [deg] " <<
FIXED(6,3) << Q.getQuantile(q) << endl);
int main(int argc, char **argv)