Jpp 19.3.0-rc.3
the software that should make you happy
Loading...
Searching...
No Matches
JRate.cc File Reference

Example program to plot event rates using JASTRONOMY::JStarTrek. More...

#include <string>
#include <iostream>
#include "TROOT.h"
#include "TFile.h"
#include "TH1D.h"
#include "TProfile.h"
#include "km3net-dataformat/offline/Head.hh"
#include "km3net-dataformat/offline/Evt.hh"
#include "JAAnet/JHead.hh"
#include "JAAnet/JAAnetToolkit.hh"
#include "JDAQ/JDAQEventIO.hh"
#include "JAstronomy/JAstronomy.hh"
#include "JAstronomy/JAstronomyToolkit.hh"
#include "JSupport/JTriggeredFileScanner.hh"
#include "JSupport/JMonteCarloFileSupportkit.hh"
#include "JSupport/JSupport.hh"
#include "Jeep/JPrint.hh"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"

Go to the source code of this file.

Functions

int main (int argc, char **argv)
 

Detailed Description

Example program to plot event rates using JASTRONOMY::JStarTrek.

Author
mdejong

Definition in file JRate.cc.

Function Documentation

◆ main()

int main ( int argc,
char ** argv )

Definition at line 53 of file JRate.cc.

54{
55 using namespace std;
56 using namespace JPP;
57 using namespace KM3NETDAQ;
58
60 JLimit_t& numberOfEvents = inputFile.getLimit();
61 string outputFile;
62 double ct;
63 double numberOfBlocks;
64 bool join;
65 int debug;
66
67 try {
68
69 JParser<> zap("Example program to plot event rates using JASTRONOMY::JStarTrek.");
70
71 zap['f'] = make_field(inputFile);
72 zap['o'] = make_field(outputFile) = "volume.root";
73 zap['n'] = make_field(numberOfEvents) = JLimit::max();
74 zap['Z'] = make_field(ct) = -0.25;
75 zap['N'] = make_field(numberOfBlocks) = 1.0;
76 zap['J'] = make_field(join); // join neutrino and anti-neutrino
77 zap['d'] = make_field(debug) = 1;
78
79 zap(argc, argv);
80 }
81 catch(const exception &error) {
82 FATAL(error.what() << endl);
83 }
84 using namespace std;
85
86
87 const double radius = 1.0; // size of source [deg]
88 const double omega = 2*PI * (1.0 - cos(radius*PI/180)); // solid angle of source
89
90 const JStarTrek startrek(Sicily, RXJ1713);
91
92
93 Head head;
94
95 try {
96 head = getHeader(inputFile);
97 }
98 catch(const JException& error) {
99 FATAL(error);
100 }
101
102
103 double Wall = numberOfBlocks;
104
105 {
106 JHead buffer(head);
107
108 if (!buffer.is_valid(&JHead::genvol) || buffer.genvol.numberOfEvents == 0) {
109 FATAL("No generated events." << endl);
110 }
111
112 Wall /= buffer.genvol.numberOfEvents;
113
114 STATUS("Generation: " << buffer.genvol.numberOfEvents << endl);
115
116 if (buffer.is_valid(&JHead::cut_nu)) {
117 STATUS("Solid angle: " << 2 * buffer.cut_nu.cosT.getLength() << "pi" << endl);
118 }
119 }
120
121 if (join) {
122 Wall *= 0.5; // join neutrino and anti-neutrino
123 }
124
125
126 // output
127
128 TFile out(outputFile.c_str(), "recreate");
129
130 TH1D hc("ct [live time]", NULL, 1000, -1.0, +1.0);
131
132 for (int i = 1; i != hc.GetNbinsX(); ++i) {
133
134 const double x = hc.GetBinCenter(i);
135 const double y = startrek(x);
136
137 hc.SetBinContent(i, y);
138 }
139
140 TH1D h0("h0 [background]", NULL, 20, +1.0, +6.0);
141 TH1D h1("h1 [signal]", NULL, 20, +1.0, +6.0);
142
143 TH1D* H[] = { &h0, &h1 };
144 double W[] = { 0.0, 0.0 };
145
146 for (int i = 0; i != sizeof(H)/sizeof(H[0]); ++i) {
147 H[i]->Sumw2();
148 }
149
150
151 while (inputFile.hasNext()) {
152
153 STATUS("event: " << setw(10) << inputFile.getCounter() << '\r'); DEBUG(endl);
154
156
157 //const JDAQEvent* tev = ps;
158 const Evt* event = ps;
159
160 if (has_neutrino(*event)) {
161
162 const Trk& neutrino = get_neutrino(*event);
163
164 const double E = neutrino.E; // GeV
165 const double dz = neutrino.dir.z; // cos(zenith angle)
166 const double P = 1.0; // P(Earth)?
167 const double W2 = event->w[1]; // generation weight GeV x m^2 x sr x (sec/year)
168 const double W3 = event->w[2]; // number of atmospheric neutrino events / year
169
170 // number of events / year
171
172 const double x = log10(E);
173 const double y[] = { P * W3 * omega * startrek(dz),
174 P * W2 * rxj1713(E) * startrek(dz) };
175
176 if (dz >= ct) {
177 for (int i = 0; i != sizeof(H)/sizeof(H[0]); ++i) {
178 H[i]->Fill(x, y[i] * Wall);
179 W[i] += y[i] * Wall;
180 }
181 }
182 }
183 }
184 STATUS(endl);
185
186 for (int i = 0; i != sizeof(W)/sizeof(W[0]); ++i) {
187 NOTICE("W[" << i << "] = " << FIXED(9,2) << W[i] << endl);
188 }
189
190 out.Write();
191 out.Close();
192}
string outputFile
#define DEBUG(A)
Message macros.
Definition JMessage.hh:62
#define STATUS(A)
Definition JMessage.hh:63
#define NOTICE(A)
Definition JMessage.hh:64
#define FATAL(A)
Definition JMessage.hh:67
int debug
debug level
Definition JSirene.cc:72
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
Monte Carlo run header.
Definition JHead.hh:1236
JAANET::cut_nu cut_nu
Definition JHead.hh:1596
JAANET::genvol genvol
Definition JHead.hh:1600
General exception.
Definition JException.hh:24
Utility class to parse command line options.
Definition JParser.hh:1698
counter_type getCounter() const
Get counter.
bool has_neutrino(const Evt &evt)
Test whether given event has an incoming neutrino.
const Trk & get_neutrino(const Evt &evt)
Get incoming neutrino.
static const JGeographicalLocation Sicily(36, 16, 16, 06)
static const JSourceLocation RXJ1713(getRadians(-39, -46, 0.0), getHourAngle(17, 13, 7))
static const double H
Planck constant [eV s].
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Head getHeader(const JMultipleFileScanner_t &file_list)
Get Monte Carlo header.
JRange< T, JComparator_t > join(const JRange< T, JComparator_t > &first, const JRange< T, JComparator_t > &second)
Join ranges.
Definition JRange.hh:659
KM3NeT DAQ data structures and auxiliaries.
Definition DataQueue.cc:39
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
Definition Evt.hh:21
Auxiliary data structure for floating point format specification.
Definition JManip.hh:448
The Head class reflects the header of Monte-Carlo event files, which consists of keys (also referred ...
Definition Head.hh:65
Auxiliary class for source tracking.
General purpose class for multiple pointers.
Auxiliary class for defining the range of iterations of objects.
Definition JLimit.hh:45
static counter_type max()
Get maximum counter value.
Definition JLimit.hh:128
Auxiliary class to synchronously read DAQ events and Monte Carlo events (and optionally other events)...
virtual bool hasNext() override
Check availability of next element.
virtual const multi_pointer_type & next() override
Get next element.
The Trk class represents a Monte Carlo (MC) particle as well as a reconstructed track/shower.
Definition Trk.hh:15
Vec dir
track direction
Definition Trk.hh:18
double E
Energy [GeV] (either MC truth or reconstructed)
Definition Trk.hh:20
double z
Definition Vec.hh:14