9#include "TApplication.h"
11#include "TRootCanvas.h"
105 return (i >= 0 && i < (
int)
trk.fitinf.size());
118 return trk.fitinf.at(i);
130 inline double getW(
const Trk&
trk,
const int i,
const double value)
133 return trk.fitinf.at(i);
148 if (i >= (
int)
trk.fitinf.size()) {
149 trk.fitinf.resize(i + 1, 0.0);
152 trk.fitinf[i] = value;
169 inline void execute(
const std::string&
command,
int debug)
176 istream in(process.getInputStreamBuffer());
178 for (
string buffer;
getline(in, buffer); ) {
184 const char*
const arrow_t =
"arrow";
202 JLimit_t& numberOfEvents = inputFile.getLimit();
240 zap[
'f'] =
make_field(inputFile,
"input file (output of JXXXMuonReconstruction.sh)");
254 catch(
const exception& error) {
290 ((
TRootCanvas *) cv->GetCanvasImp())->
Connect(
"CloseWindow()",
"TApplication", tp,
"Terminate()");
295 gROOT->SetStyle(
"gplot");
300 cv->SetFillStyle(4000);
311 const double Dmax = 1000.0;
312 const double Rmin = 0.0;
314 const double Tmin = min(parameters.
TMin_ns, -10.0);
315 const double Tmax = max(parameters.
TMax_ns, +100.0);
316 const double Amin = 0.002 * (Tmax - Tmin);
317 const double Amax = 0.8 * (Tmax - Tmin);
328 Xs[i] = 0.003 * (Xmax[i] -
Xmin[i]) * (0.5 * NUMBER_OF_PMTS);
338 H2[i].GetXaxis()->SetTitle(
Xlabel[i].c_str());
339 H2[i].GetYaxis()->SetTitle(
"#Deltat [ns]");
341 H2[i].GetXaxis()->CenterTitle(
true);
342 H2[i].GetYaxis()->CenterTitle(
true);
358 while (inputFile.hasNext()) {
360 cout <<
"event: " <<
setw(8) << inputFile.getCounter() <<
endl;
362 const Evt* evt = inputFile.next();
393 if (
trk.E > muon.
E) {
407 for (
bool next =
false; !next; ) {
434 for (JDataL0_t::const_iterator i = dataL0.begin(); i != dataL0.end(); ++i) {
447 sort(data.begin(), data.end(), JHitW0::compare);
451 double E_GeV = parameters.
E_GeV;
462 for (JDataW0_t::iterator
hit = data.begin();
hit != __end; ++
hit) {
464 const double x =
hit->getX() - tz.
getX();
465 const double y =
hit->getY() - tz.
getY();
466 const double z =
hit->getZ();
467 const double R = sqrt(x*x + y*y);
472 const double z0 = tz.
getZ();
473 const double z1 = 0.5 * (
zs.getLowerLimit() +
zs.getUpperLimit());
501 for (JDataW0_t::const_iterator
hit = data.begin();
hit != __end; ++
hit) {
503 const double x =
hit->getX() - tz.
getX();
504 const double y =
hit->getY() - tz.
getY();
505 const double z =
hit->getZ() - tz.
getZ();
506 const double R = sqrt(x*x + y*y);
514 const double theta = dir.
getTheta();
515 const double phi = fabs(dir.
getPhi());
518 const double E = E_GeV;
530 chi2 +=
H1.getChi2() -
H0.getChi2();
533 <<
setw(8) <<
hit->getModuleID() <<
'.' <<
FILL(2,
'0') << (
int)
hit->getPMTAddress() <<
FILL() <<
' '
535 <<
FIXED(7,2) << R <<
' '
536 <<
FIXED(7,4) << theta <<
' '
537 <<
FIXED(7,4) << phi <<
' '
539 <<
FIXED(7,3) <<
H1.getChi2() <<
' '
542 const double derivative =
H1.getDerivativeOfChi2() -
H0.getDerivativeOfChi2();
546 if (fabs(size) <
Amin) {
547 size = (size > 0.0 ? +
Amin : -
Amin);
548 }
else if (fabs(size) >
Amax) {
549 size = (size > 0.0 ? +
Amax : -
Amax);
560 a1.SetLineWidth(
graphics.lineWidth);
561 a1.SetLineStyle(
graphics.lineStyle);
563 arrow[i].push_back(a1);
573 zmax =
H2[i].GetMaximum();
580 H2[i].SetMaximum(zmax);
584 os <<
" Q = " <<
FIXED(4,0) <<
trk.lik
585 <<
'/' <<
FIXED(4,0) << -chi2;
587 os <<
" cos(#theta) = " <<
FIXED(6,3) <<
trk.dir.z;
591 os <<
" Monte Carlo";
598 TLatex title(0.05, 0.5, os.str().c_str());
600 title.SetTextAlign(12);
601 title.SetTextFont(42);
602 title.SetTextSize(0.6);
614 for (
auto& a1 :
arrow[i]) {
618 for (
auto&
m1 : marker[i]) {
641 static int count = 0;
644 cout <<
endl <<
"Type '?' for possible options." <<
endl;
649 cout <<
"\n> " << flush;
655 cout <<
"possible options: " <<
endl;
656 cout <<
'q' <<
" -> " <<
"exit application" <<
endl;
657 cout <<
'u' <<
" -> " <<
"update canvas" <<
endl;
658 cout <<
's' <<
" -> " <<
"save graphics to file" <<
endl;
659 cout <<
'M' <<
" -> " <<
"Monte Carlo true muon information" <<
endl;
660 cout <<
'F' <<
" -> " <<
"fit information" <<
endl;
662 cout <<
'L' <<
" -> " <<
"reload event selector" <<
endl;
664 cout <<
'r' <<
" -> " <<
"rewind input file" <<
endl;
665 cout <<
'R' <<
" -> " <<
"switch to ROOT mode (quit ROOT to continue)" <<
endl;
666 cout <<
'p' <<
" -> " <<
"print event information" <<
endl;
667 cout <<
' ' <<
" -> " <<
"next event (as well as any other key)" <<
endl;
713 for (
const auto&
trk : evt->
trks) {
716 for (
const auto&
hit : evt->
hits) {
int main(int argc, char **argv)
KM3NeT DAQ constants, bit handling, etc.
Basic data structure for L0 hit.
Keyboard settings for unbuffered input.
General purpose messaging.
#define DEBUG(A)
Message macros.
Auxiliary data structure for muon PDF.
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
I/O formatting auxiliaries.
#define MAKE_CSTRING(A)
Make C-string.
#define MAKE_STRING(A)
Make string.
Utility class to parse parameter values.
#define gmake_property(A)
macros to convert (template) parameter to JPropertiesElement object
Scanning of objects from a single file according a format that follows from the extension of each fil...
ROOT TTree parameter settings of various packages.
Utility class to parse parameter values.
Data structure for fit of straight line paralel to z-axis.
double getT(const JVector3D &pos) const
Get arrival time of Cherenkov light at given position.
double getZ(const JPosition3D &pos) const
Get point of emission of Cherenkov light along muon path.
void setZ(const double z, const double velocity)
Set z-position of vertex.
Data structure for direction in three dimensions.
JDirection3D & rotate(const JRotation3D &R)
Rotate.
double getY() const
Get y position.
double getX() const
Get x position.
double getTheta() const
Get theta angle.
double getPhi() const
Get phi angle.
Template definition of a multi-dimensional oscillation probability interpolation table.
JProperties getProperties(const JEquationParameters &eqpars=JOscProbInterface::getEquationParameters()) override final
Get properties of this class.
Auxiliary class for a hit with background rate value.
Data structure for size of TCanvas.
Wrapper class around ROOT TStyle.
File router for fast addressing of summary data.
void update(const JDAQHeader &header)
Update router.
double getRate(const JDAQPMTIdentifier &id) const
Get rate.
Enable unbuffered terminal input.
char get()
Get single character.
Streaming of input and output from Linux command.
Data structure for L0 hit.
static void setSlewing(const bool slewing)
Set slewing option.
Data structure for UTC time.
Auxiliary class to convert DAQ hit time to/from Monte Carlo hit time.
static const int JSTART_LENGTH_METRES
distance between projected positions on the track of optical modules for which the response does not ...
Extensions to Evt data format.
JDirection3D getDirection(const Vec &dir)
Get direction.
bool hasW(const Trk &trk, const int i)
Check availability of value.
bool has_muon(const Evt &evt)
Test whether given event has a muon.
void setW(Trk &trk, const int i, const double value)
Set associated value.
double getW(const Trk &track, const size_t index, const double value)
Get track information.
JPosition3D getPosition(const Vec &pos)
Get position.
bool is_muon(const Trk &track)
Test whether given track is a (anti-)muon.
std::string getPath(const std::string &file_name)
Get path, i.e. part before last JEEP::PATHNAME_SEPARATOR if any.
double getAngle(const JQuaternion3D &first, const JQuaternion3D &second)
Get space angle between quanternions.
std::istream & getline(std::istream &in, JString &object)
Read string from input stream until end of line.
std::string replace(const std::string &input, const std::string &target, const std::string &replacement)
Replace tokens in string.
static const double PI
Mathematical constants.
const double getInverseSpeedOfLight()
Get inverse speed of light.
double getTanThetaC()
Get average tangent of Cherenkov angle of water corresponding to group velocity.
const double getSpeedOfLight()
Get speed of light.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
KM3NeT DAQ data structures and auxiliaries.
static const char WILDCARD
static const int NUMBER_OF_PMTS
Total number of PMTs in module.
The Evt class respresent a Monte Carlo (MC) event as well as an offline event.
int frame_index
from the raw data
int run_id
DAQ run identifier.
std::vector< Hit > hits
list of hits
std::vector< Trk > mc_trks
MC: list of MC truth tracks.
int det_id
detector identifier from DAQ
ULong64_t trigger_counter
trigger counter
void print(std::ostream &out=std::cout) const
Print event.
std::vector< Trk > trks
list of reconstructed tracks (can be several because of prefits,showers, etc).
TTimeStamp t
UTC time of the timeslice, or the event_time for MC. (default: 01 Jan 1970 00:00:00)
Auxiliary data structure for sequence of same character.
Auxiliary data structure for floating point format specification.
JEventSelector()
Default constructor.
static bool select(const Trk &trk, const Evt &evt)
Default event selection.
Auxiliary data structure for muon PDF.
JFunction1D_t::result_type result_type
result_type calculate(const double E, const double R, const double theta, const double phi, const double t1) const
Get PDF.
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
Data structure for fit parameters.
double TTS_ns
transition-time spread [ns]
double TMin_ns
minimal time w.r.t. Cherenkov hypothesis [ns]
double roadWidth_m
road width [m]
double TMax_ns
maximal time w.r.t. Cherenkov hypothesis [ns]
double VMax_npe
maximum number of of photo-electrons
double R_Hz
default rate [Hz]
size_t numberOfPrefits
number of prefits
Auxiliary class for defining the range of iterations of objects.
static counter_type max()
Get maximum counter value.
Auxiliary data structure for floating point format specification.
The Trk class represents a Monte Carlo (MC) particle as well as a reconstructed track/shower.
double E
Energy [GeV] (either MC truth or reconstructed)
double t
track time [ns] (when the particle is at pos )
double len
length, if applicable [m]
Range of reconstruction stages.
Auxiliary include file for time conversion between DAQ/trigger hit and Monte Carlo hit.