80 typedef JTriggeredFileScanner_t::multi_pointer_type multi_pointer_type;
82 JTriggeredFileScanner_t inputFile;
85 size_t numberOfPrefits;
96 JParser<> zap(
"Example program to histogram fit results.");
100 zap[
'n'] =
make_field(numberOfEvents) = JLimit::max();
107 zap[
'O'] =
make_field(option) =
"E",
"N",
"LINE",
"LOGE";
112 catch(
const exception& error) {
113 FATAL(error.what() << endl);
125 const JVolume volume(head, option !=
"LINE");
129 cylinder.
add(center);
131 NOTICE(
"Reposition can [m]: " << cylinder << endl);
133 const double EMIN_GEV = 10;
139 TH1D job(
"job", NULL, 100, 0.5, 100.5);
141 TH1D hn(
"hn", NULL, 250, -0.5, 249.5);
142 TH1D hq(
"hq", NULL, 300, 0.0, 600.0);
143 TH1D hi(
"hi", NULL, 101, -0.5, 100.5);
144 TH1D hv(
"hv", NULL, 200, -6.0, 0.0);
145 TH1D h1(
"h1", NULL, 200, -2.0, +2.0);
146 TH1D hc(
"hc", NULL, 200, -1.0, +1.0);
147 TH1D hu(
"hu", NULL, 400, -1.0e3, 1.0e3);
149 TH1D hx(
"hx", NULL, 70, -3.0, +2.3);
150 TH1D hd(
"hd", NULL, 100, 0.0, 10.0);
151 TH1D hz(
"hz", NULL, 100, -200.0, 200.0);
152 TH1D ht(
"ht", NULL, 100, -100.0, 100.0);
154 TH1D e0(
"e0", NULL, 100, volume.getXmin(), volume.getXmax());
155 TH1D e1(
"e1", NULL, 100, volume.getXmin(), volume.getXmax());
156 TH1D e2(
"e2", NULL, 100, volume.getXmin(), volume.getXmax());
157 TH1D er(
"er", NULL, 100, -5.0, +5.0);
159 40, volume.getXmin(), volume.getXmax(),
160 40, volume.getXmin(), volume.getXmax());
162 TH2D muon_angle_Emu(
"muon_angle_Emu", NULL, 30, E_nu_min, E_nu_max, 100, 0,90);
163 TH2D muon_angle_Enu(
"muon_angle_Enu", NULL, 30, E_nu_min, E_nu_max, 100, 0,90);
164 TH2D neutrino_angle_Enu(
"neutrino_angle_Enu", NULL, 30, E_nu_min, E_nu_max, 100, 0,90);
165 TH2D MC_angle_Enu(
"MC_angle_Enu", NULL, 30, E_nu_min, E_nu_max, 100, 0,90);
167 const Int_t ny = 28800;
168 const Double_t ymin = 0.0;
169 const Double_t ymax = 180.0;
173 if (option.find(
'E') != string::npos) {
175 for (
double x = volume.getXmin(); x <= volume.getXmax(); x += (volume.getXmax() - volume.getXmin()) / 20) {
183 for ( ; x <= 15.5; x += 1.0) { X.push_back(x); }
184 for ( ; x <= 25.5; x += 2.0) { X.push_back(x); }
185 for ( ; x <= 50.5; x += 5.0) { X.push_back(x); }
186 for ( ; x <= 100.5; x += 10.0) { X.push_back(x); }
187 for ( ; x <= 250.5; x += 20.0) { X.push_back(x); }
190 TH2D h2(
"h2", NULL, X.size() - 1, X.data(), ny, ymin, ymax);
191 TProfile he(
"he", NULL, X.size() - 1, X.data());
193 TH2D ha(
"ha", NULL, 100, 0.0, 0.5e6, 100, -100.0, +900.0);
194 TH2D hb(
"hb", NULL, 100, 0.0, 0.5e6, 100, -100.0, +900.0);
200 while (inputFile.hasNext()) {
202 STATUS(
"event: " << setw(10) << inputFile.getCounter() <<
'\r');
DEBUG(endl);
204 multi_pointer_type ps = inputFile.next();
226 if (track->E > Emax) {
233 if (muon == event->mc_trks.end()) {
244 if (option.find(
'E') != string::npos)
245 x = volume.getX(event->mc_trks[0].E);
256 JEvt::iterator __end = partition(evt->begin(), evt->end(),
JHistory::is_event(application));
258 if (evt->begin() == __end) {
264 if (numberOfPrefits > 0) {
266 JEvt::iterator __q = __end;
268 advance(__end = evt->begin(), min(numberOfPrefits, (
size_t)
distance(evt->begin(), __q)));
279 JEvt::iterator best = pointing(evt->begin(), __end);
280 const Double_t beta = pointing.getAngle(*best);
281 const double Efit = best->getE();
282 const double Eraw = best->getW(
JENERGY_ENERGY, numeric_limits<double>::min());
283 const double mip = best->getW(
JSTART_NPE_MIP, numeric_limits<double>::max());
287 bool ok = (Efit >= Emin_GeV &&
296 hn.Fill((Double_t) best->getNDF());
297 hq.Fill(best->getQ());
298 hi.Fill((Double_t)
distance(evt->begin(), best));
299 hc.Fill(best->getDZ());
303 hu.Fill(atmosphere(evt->begin(), __end));
306 hx.Fill(max(log10(beta), hx.GetXaxis()->GetXmin()));
315 tb.
sub(converter.putTime());
336 ha.Fill(best->getX()*best->getX() + best->getY()*best->getY(), best->getZ());
341 if (best->getE() >= EMIN_GEV) {
342 hb.Fill(best->getX()*best->getX() + best->getY()*best->getY(), best->getZ());
346 e0.Fill(volume.getX(Emu,
true));
347 e1.Fill(volume.getX(Eraw,
true));
348 e2.Fill(volume.getX(Efit,
true));
349 er.Fill(volume.getX(Efit) - volume.getX(Emu));
350 ee.Fill(volume.getX(Emu), volume.getX(Efit));
353 const double Enu = neutrino.
E;
367 const double npe = best->getW(
JVETO_NPE);
369 const double pv = TMath::PoissonI(count, npe);
371 hv.Fill(max(log10(pv), hv.GetXaxis()->GetXmin()));
380 NOTICE(
"Number of events input " << setw(8) << right << job.GetBinContent(1) << endl);
381 NOTICE(
"Number of events with muon " << setw(8) << right << job.GetBinContent(3) << endl);
382 NOTICE(
"Number of events with fit " << setw(8) << right << job.GetBinContent(4) << endl);
383 NOTICE(
"Number of events selected " << setw(8) << right << job.GetBinContent(5) << endl);
384 NOTICE(
"Number of events with neutrino " << setw(8) << right << job.GetBinContent(6) << endl);
385 NOTICE(
"Number of events contained " << setw(8) << right << job.GetBinContent(7) << endl);
387 if (Q.getCount() != 0) {
388 NOTICE(
"Median space angle [deg] " <<
FIXED (6,3) << Q.getQuantile(0.5) << endl);