9#include "TApplication.h"
11#include "TRootCanvas.h"
82 inline void execute(
const std::string&
command,
int debug)
89 istream in(process.getInputStreamBuffer());
91 for (
string buffer;
getline(in, buffer); ) {
97 const char*
const arrow_t =
"arrow";
115 typedef JParallelFileScanner_t::multi_pointer_type multi_pointer_type;
121 JLimit_t& numberOfEvents = inputFile.getLimit();
162 zap[
'f'] =
make_field(inputFile,
"input file (output of JXXXMuonReconstruction.sh)");
179 catch(
const exception& error) {
212 catch(
const exception& error) {
218 const double Zbed = 0.0;
242 Vec offset(0.0, 0.0, 0.0);
246 }
catch(
const exception& error) {}
257 ((
TRootCanvas *) cv->GetCanvasImp())->
Connect(
"CloseWindow()",
"TApplication", tp,
"Terminate()");
262 gROOT->SetStyle(
"gplot");
267 cv->SetFillStyle(4000);
279 const double Rmin = 0.0;
281 const double Tmin = min(parameters.
TMin_ns, -10.0);
282 const double Tmax = max(parameters.
TMax_ns, +100.0);
283 const double Amin = 0.002 * (Tmax - Tmin);
284 const double Amax = 0.8 * (Tmax - Tmin);
295 Xs[i] = 0.003 * (Xmax[i] -
Xmin[i]) * (0.5 * NUMBER_OF_PMTS);
305 H2[i].GetXaxis()->SetTitle(
Xlabel[i].c_str());
306 H2[i].GetYaxis()->SetTitle(
"#Deltat [ns]");
308 H2[i].GetXaxis()->CenterTitle(
true);
309 H2[i].GetYaxis()->CenterTitle(
true);
327 cout <<
"event: " <<
setw(8) << inputFile.getCounter() <<
endl;
329 multi_pointer_type ps = inputFile.next();
339 if (
mc.getEntries() != 0) {
340 event =
mc.getEntry(
tev->getCounter());
358 summary.update(*
tev);
366 for (
const auto& t1 :
event->mc_trks) {
368 if (t1.E > muon.
getE()) {
375 muon =
getFit(0,
ta, 0.0, 0, t1.E, 1);
386 for (
bool next =
false; !next; ) {
413 for (JDataL0_t::const_iterator i = dataL0.begin(); i != dataL0.end(); ++i) {
415 JHitW0 hit(*i, summary.getRate(i->getPMTIdentifier(), parameters.
R_Hz));
426 sort(data.begin(), data.end(), JHitW0::compare);
430 double E_GeV = parameters.
E_GeV;
441 for (JDataW0_t::iterator
hit = data.begin();
hit != __end; ++
hit) {
443 const double x =
hit->getX() - tz.
getX();
444 const double y =
hit->getY() - tz.
getY();
445 const double z =
hit->getZ();
446 const double R = sqrt(x*x + y*y);
451 const double z0 = tz.
getZ();
452 const double z1 = 0.5 * (
zs.getLowerLimit() +
zs.getUpperLimit());
479 for (JDataW0_t::const_iterator
hit = data.begin();
hit != __end; ++
hit) {
481 const double x =
hit->getX() - tz.
getX();
482 const double y =
hit->getY() - tz.
getY();
483 const double z =
hit->getZ() - tz.
getZ();
484 const double R = sqrt(x*x + y*y);
492 const double theta = dir.
getTheta();
493 const double phi = fabs(dir.
getPhi());
496 const double E = E_GeV;
508 chi2 +=
H1.getChi2() -
H0.getChi2();
511 <<
setw(8) <<
hit->getModuleID() <<
'.' <<
FILL(2,
'0') << (
int)
hit->getPMTAddress() <<
FILL() <<
' '
513 <<
FIXED(7,2) << R <<
' '
514 <<
FIXED(7,4) << theta <<
' '
515 <<
FIXED(7,4) << phi <<
' '
517 <<
FIXED(7,3) <<
H1.getChi2() <<
' '
520 const double derivative =
H1.getDerivativeOfChi2() -
H0.getDerivativeOfChi2();
524 if (fabs(size) <
Amin) {
525 size = (size > 0.0 ? +
Amin : -
Amin);
526 }
else if (fabs(size) >
Amax) {
527 size = (size > 0.0 ? +
Amax : -
Amax);
538 a1.SetLineWidth(
graphics.lineWidth);
539 a1.SetLineStyle(
graphics.lineStyle);
541 arrow[i].push_back(a1);
551 zmax =
H2[i].GetMaximum();
558 H2[i].SetMaximum(zmax);
561 os <<
FILL(6,
'0') <<
tev->getRunNumber() <<
":" <<
tev->getFrameIndex() <<
"/" <<
tev->getCounter() <<
FILL();
562 os <<
" Q = " <<
FIXED(4,0) << fit.
getQ()
563 <<
'/' <<
FIXED(4,0) << -chi2;
565 os <<
" cos(#theta) = " <<
FIXED(6,3) << fit.
getDZ();
569 os <<
" Monte Carlo";
576 TLatex title(0.05, 0.5, os.str().c_str());
578 title.SetTextAlign(12);
579 title.SetTextFont(42);
580 title.SetTextSize(0.6);
592 for (
auto& a1 :
arrow[i]) {
596 for (
auto&
m1 : marker[i]) {
619 static int count = 0;
622 cout <<
endl <<
"Type '?' for possible options." <<
endl;
633 cout <<
"\n> " << flush;
639 cout <<
"possible options: " <<
endl;
640 cout <<
'p' <<
" -> " <<
"print information" <<
endl;
641 cout <<
'q' <<
" -> " <<
"exit application" <<
endl;
642 cout <<
'u' <<
" -> " <<
"update canvas" <<
endl;
643 cout <<
's' <<
" -> " <<
"save graphics to file" <<
endl;
644 cout <<
'+' <<
" -> " <<
"next fit" <<
endl;
645 cout <<
'-' <<
" -> " <<
"previous fit" <<
endl;
646 cout <<
'M' <<
" -> " <<
"Monte Carlo true muon information" <<
endl;
647 cout <<
'F' <<
" -> " <<
"fit information" <<
endl;
649 cout <<
'L' <<
" -> " <<
"reload event selector" <<
endl;
651 cout <<
'r' <<
" -> " <<
"rewind input file" <<
endl;
652 cout <<
'R' <<
" -> " <<
"switch to ROOT mode (quit ROOT to continue)" <<
endl;
653 cout <<
' ' <<
" -> " <<
"next event (as well as any other key)" <<
endl;
660 cout <<
"entry point: "
683 index = (index != in->size() - 1 ? index + 1 : 0);
689 index = (index != 0 ? index - 1 : in->size() - 1);
KM3NeT DAQ constants, bit handling, etc.
Data structure for detector geometry and calibration.
Dynamic detector calibration.
Basic data structure for L0 hit.
Keyboard settings for unbuffered input.
General purpose messaging.
#define DEBUG(A)
Message macros.
Direct access to module in detector data structure.
Auxiliary data structure for muon PDF.
Parallel scanning of objects from a single file or multiple files according a format that follows fro...
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
int main(int argc, char **argv)
ROOT TTree parameter settings of various packages.
Router for direct addressing of module data in detector data structure.
Utility class to parse parameter values.
Data structure for set of track fit results.
void select(const JSelector_t &selector)
Select fits.
Data structure for track fit results with history and optional associated values.
void setW(const std::vector< double > &W)
Set associated values.
double getDZ() const
Get Z-slope.
double getE() const
Get energy.
int getStatus() const
Get status of the fit; negative values should refer to a bad fit.
double getQ() const
Get quality.
const std::vector< double > & getW() const
Get associated values.
double getT() const
Get time.
bool hasW(const int i) const
Check availability of value.
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.
void move(const double step)
Move vertex along this axis.
Data structure for direction in three dimensions.
JDirection3D & rotate(const JRotation3D &R)
Rotate.
double getY() const
Get y position.
double getZ() const
Get z 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.
void load()
Load oscillation probability table.
Auxiliary class for a hit with background rate value.
Data structure for size of TCanvas.
Wrapper class around ROOT TStyle.
Object reading from a list of files.
File router for fast addressing of summary data.
Enable unbuffered terminal input.
Streaming of input and output from Linux command.
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 ...
JAxis3D getAxis(const Trk &track)
Get axis.
JDirection3D getDirection(const Vec &dir)
Get direction.
JTrack3E getTrack(const Trk &track)
Get track.
JPosition3D getPosition(const Vec &pos)
Get position.
bool is_muon(const Trk &track)
Test whether given track is a (anti-)muon.
Vec getOffset(const JHead &header)
Get offset.
JFit getFit(const int id, const JMODEL::JString &string)
Get fit parameters of string.
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
double getMaximalDistance(const JDetector &detector, const bool option=false)
Get maximal distance between modules in detector.
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).
bool qualitySorter(const JFit &first, const JFit &second)
Comparison of fit results.
JRECONSTRUCTION::JWeight getWeight
Head getHeader(const JMultipleFileScanner_t &file_list)
Get Monte Carlo header.
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.
Auxiliary data structure for sequence of same character.
Auxiliary data structure for floating point format specification.
Dynamic detector calibration.
Auxiliary class to test history.
Auxiliary class to match data points with given model.
Auxiliary class for recursive type list generation.
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 Vec class is a straightforward 3-d vector, which also works in pyroot.
Auxiliary include file for time conversion between DAQ/trigger hit and Monte Carlo hit.