28 static const int JQUALITY = -1;
41 JKey(
const char*
name,
56 friend inline bool operator<(
const JKey&
first,
const JKey& second)
58 return first.index < second.index;
72 #define make_key(PARAMETER) JKey(#PARAMETER, PARAMETER)
121 void Fill(
const Double_t xA,
const Double_t xB,
const bool option)
123 hA->Fill(logx ?
log10(xA) : xA);
124 hB->Fill(logx ?
log10(xB) : xB);
126 hC->Fill(logx ?
log10(xB/xA) : xB - xA);
128 hD->Fill(logx ?
log10(xB/xA) : xB - xA);
137 if (hA->GetEntries() != 0) { hA->Scale(1.0/hA->GetEntries()); }
138 if (hB->GetEntries() != 0) { hB->Scale(1.0/hB->GetEntries()); }
139 if (hC->GetEntries() != 0) { hC->Scale(1.0/hC->GetEntries()); }
140 if (hD->GetEntries() != 0) { hD->Scale(1.0/hD->GetEntries()); }
149 void Write(TFile& out)
151 out.WriteTObject(hA);
152 out.WriteTObject(hB);
153 out.WriteTObject(hC);
154 out.WriteTObject(hD);
181 void insert(
const JKey& key,
185 const double logx =
false)
189 TH1D* hA =
new TH1D((
"[A]." + key.name).c_str(), NULL, nx,
xmin,
xmax);
190 TH1D* hB =
new TH1D((
"[B]." + key.name).c_str(), NULL, nx,
xmin,
xmax);
191 TH1D* hC =
new TH1D((
"[C]." + key.name).c_str(), NULL, nx, -
xmax,
xmax);
192 TH1D* hD =
new TH1D((
"[D]." + key.name).c_str(), NULL, nx, -
xmax,
xmax);
205 void Fill(
const JFit& fA,
const JFit& fB,
const bool option)
207 for (
iterator i = begin(); i != end(); ++i) {
209 const int index = i->first.index;
211 if (index == JQUALITY) {
212 i->second.Fill(fA.getQ(), fB.getQ(), option);
213 }
else if (fA.hasW(index) && fB.hasW(index)) {
214 i->second.Fill(fA.getW(index), fB.getW(index), option);
225 for (
iterator i = this->begin(); i != this->end(); ++i) {
236 void Write(TFile& out)
238 for (
iterator i = this->begin(); i != this->end(); ++i) {
239 i->second.Write(out);
249 void Write(
const char* file_name)
251 TFile out(file_name,
"RECREATE");
267 int main(
int argc,
char **argv)
273 typedef JTriggeredFileScanner_t::multi_pointer_type multi_pointer_type;
275 JTriggeredFileScanner_t inputFileA;
276 JTriggeredFileScanner_t inputFileB;
284 JParser<> zap(
"Example program to compare fit results from two files.");
289 zap[
'n'] =
make_field(numberOfEvents) = JLimit::max();
295 catch(
const exception& error) {
296 FATAL(error.what() << endl);
307 const double E_nu_min = head.cut_nu.E.getLowerLimit();
308 const double E_nu_max = head.cut_nu.E.getUpperLimit();
310 inputFileA.setLimit(numberOfEvents);
311 inputFileB.setLimit(numberOfEvents);
318 manager.insert(
make_key(JQUALITY), 501, 0.0, 1.0e3);
328 TH1D hA(
"h[A]", NULL, 100, -3.0, +2.3);
329 TH1D hB(
"h[B]", NULL, 100, -3.0, +2.3);
330 TH2D hA_angle_E(
"hA_angle_E", NULL, 20, E_nu_min, E_nu_max, 100, 0,90);
331 TH2D hB_angle_E(
"hB_angle_E", NULL, 20, E_nu_min, E_nu_max, 100, 0,90);
334 360, -180.0, +180.0);
336 while (inputFileA.hasNext() && inputFileB.hasNext()) {
338 STATUS(
"event: " << setw(10) << inputFileA.getCounter() <<
'\r');
DEBUG(endl);
340 multi_pointer_type psA = inputFileA.next();
341 multi_pointer_type psB = inputFileB.next();
345 while (psA.get<
Evt>()->
mc_id < psB.get<
Evt>()->
mc_id && inputFileA.hasNext()) { psA = inputFileA.next(); }
346 while (psB.get<
Evt>()->
mc_id < psA.get<
Evt>()->
mc_id && inputFileB.hasNext()) { psB = inputFileB.next(); }
348 if (!psA.is_valid()) {
continue; }
349 if (!psB.is_valid()) {
continue; }
351 if (psA.get<
Evt>()->
mc_id == psB.get<
Evt>()->mc_id) {
361 if (muon == event->mc_trks.end()) {
continue; }
363 if (evtA->empty()) {
continue; }
364 if (evtB->empty()) {
continue; }
366 JEvt::const_iterator fitA = evtA->begin();
367 JEvt::const_iterator fitB = evtB->begin();
372 hA.Fill(
log10(angleA));
373 hB.Fill(
log10(angleB));
375 h2.Fill(fitB->getQ() - fitA->getQ(), angleB - angleA);
377 const double Enu = neutrino.
E;
378 hA_angle_E.Fill(Enu, angleA);
379 hB_angle_E.Fill(Enu, angleB);
381 if (angleA >= angle_Deg) {
382 manager.Fill(*fitA, *fitB, angleB < angle_Deg);
Utility class to parse command line options.
double getAngle(const JQuaternion3D &first, const JQuaternion3D &second)
Get space angle between quanternions.
static const int JSTART_NPE_MIP_TOTAL
number of photo-electrons along the whole track from JStart.cc
int main(int argc, char *argv[])
ROOT TTree parameter settings of various packages.
static const int JENERGY_ENERGY
uncorrected energy [GeV] from JEnergy.cc
Synchronously read DAQ events and Monte Carlo events (and optionally other events).
bool operator<(const Head &first, const Head &second)
Less than operator.
bool is_muon(const Trk &track)
Test whether given track is a (anti-)muon.
then echo Enter input within $TIMEOUT_S seconds echo n User name
Auxiliary class to synchronously read DAQ events and Monte Carlo events (and optionally other events)...
static const int JGANDALF_BETA1_RAD
angular resolution [rad] from JGandalf.cc
static const int JENERGY_CHI2
chi2 from JEnergy.cc
double E
Energy [GeV] (either MC truth or reconstructed)
then echo The file $DIR KM3NeT_00000001_00000000 root already please rename or remove it first
static const int JSTART_NPE_MIP
number of photo-electrons up to the barycentre from JStart.cc
Head getHeader(const JMultipleFileScanner_t &file_list)
Get Monte Carlo header.
#define make_key(PARAMETER)
Make key.
Auxiliary class for defining the range of iterations of objects.
static const int JGANDALF_NUMBER_OF_HITS
number of hits from JGandalf.cc
Auxiliary class to manage set of compatible ROOT objects (e.g. histograms) using unique keys...
JDirection3D getDirection(const Vec &dir)
Get direction.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
set_variable E_E log10(E_{fit}/E_{#mu})"
int mc_id
identifier of the MC event (as found in ascii or antcc file).
static const int JGANDALF_BETA0_RAD
KM3NeT Data Definitions v2.2.0-12-ge740342 https://git.km3net.de/common/km3net-dataformat.
General purpose messaging.
static const int JSTART_LENGTH_METRES
distance between first and last hits in metres from JStart.cc
Utility class to parse command line options.
Wrapper class around template object.
const Trk & get_neutrino(const Evt &evt)
Get incoming neutrino.
The Trk class represents a Monte Carlo (MC) particle as well as a reconstructed track/shower.
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
#define DEBUG(A)
Message macros.