194   using namespace KM3NETDAQ;
 
  215     JParser<> zap(
"Program to display hit probabilities.");
 
  217     zap[
'w'] = 
make_field(canvas,       
"size of canvas <nx>x<ny> [pixels]")  = 
JCanvas(1200, 600);
 
  218     zap[
'f'] = 
make_field(inputFile,    
"input file (output of JXXXMuonReconstruction.sh)");
 
  219     zap[
'n'] = 
make_field(numberOfEvents)      = JLimit::max();
 
  228     zap[
'B'] = 
make_field(batch,        
"batch processing");
 
  233   catch(
const exception& error) {
 
  234     FATAL(error.what() << endl);
 
  238     FATAL(
"Missing output file name " << 
outputFile << 
" in batch mode." << endl);
 
  262   gROOT->SetBatch(batch);
 
  264   TApplication* tp = 
new TApplication(
"user", NULL, NULL);
 
  265   TCanvas*      cv = 
new TCanvas(
"display", 
"", canvas.x, canvas.y);
 
  267   unique_ptr<TStyle> gStyle(
new JStyle(
"gplot", cv->GetWw(), cv->GetWh()));
 
  269   gROOT->SetStyle(
"gplot");
 
  272   const size_t NUMBER_OF_PADS = 3;
 
  274   cv->SetFillStyle(4000);
 
  275   cv->SetFillColor(kWhite);
 
  277   TPad* 
p1 = 
new TPad(
"p1", NULL, 0.0, 0.00, 1.0, 0.95);
 
  278   TPad* 
p2 = 
new TPad(
"p2", NULL, 0.0, 0.95, 1.0, 1.00);
 
  280   p1->Divide(NUMBER_OF_PADS, 1);
 
  285   const double Dmax = 1000.0;
 
  286   const double Rmin = 0.0;
 
  287   const double Rmax = min(
parameters.roadWidth_m, 0.4 * Dmax);
 
  288   const double Tmin = min(
parameters.TMin_ns,  -10.0);
 
  289   const double Tmax = max(
parameters.TMax_ns, +100.0);
 
  290   const double Amin = 0.002 * (Tmax - Tmin);                               
 
  291   const double Amax = 0.8   * (Tmax - Tmin);                               
 
  292   const double ymin = min(-Amax, Tmin - 0.3 * Amax);
 
  293   const double ymax = max(+Amax, Tmax + 0.5 * Amax);
 
  295   const string Xlabel[NUMBER_OF_PADS] = { 
"R [m]", 
"#phi [rad]",   
"z [m]"  };
 
  296   const double Xmin  [NUMBER_OF_PADS] = {  Rmin,      -
PI,      -0.5 * Dmax };
 
  297   const double Xmax  [NUMBER_OF_PADS] = {  Rmax,      +
PI,      +0.5 * Dmax };
 
  299   double Xs[NUMBER_OF_PADS];
 
  301   for (
size_t i = 0; 
i != NUMBER_OF_PADS; ++
i) {
 
  305   TH2D   H2[NUMBER_OF_PADS];
 
  306   TGraph G2[NUMBER_OF_PADS];
 
  308   for (
size_t i = 0; 
i != NUMBER_OF_PADS; ++
i) {
 
  310     H2[
i] = TH2D(
MAKE_CSTRING(
"h" << 
i), NULL, 100, Xmin[
i] - Xs[
i], Xmax[i] + Xs[i], 100, ymin, ymax);
 
  312     H2[
i].GetXaxis()->SetTitle(Xlabel[
i].c_str());
 
  313     H2[
i].GetYaxis()->SetTitle(
"#Deltat [ns]");
 
  315     H2[
i].GetXaxis()->CenterTitle(
true);
 
  316     H2[
i].GetYaxis()->CenterTitle(
true);
 
  318     H2[
i].SetStats(kFALSE);
 
  322     G2[
i].SetPoint(0, H2[
i].GetXaxis()->GetXmin(), 0.0);
 
  323     G2[
i].SetPoint(1, H2[
i].GetXaxis()->GetXmax(), 0.0);
 
  332   while (inputFile.hasNext()) {
 
  334     cout << 
"\revent: " << setw(8) << inputFile.getCounter() << flush;
 
  336     Evt* evt = inputFile.next();
 
  338     if (has_reconstructed_track<JPP_RECONSTRUCTION_TYPE>(*evt, 
rec_stages_range(application))) {
 
  340       Trk fit = get_best_reconstructed_track<JPP_RECONSTRUCTION_TYPE>(*evt, 
rec_stages_range(application));
 
  342       if (!event_selector(fit, *evt)) {
 
  349       for (
const Hit& hit : evt->hits) {
 
  366         for (
const auto& trk : evt->mc_trks) {
 
  368             if (trk.E > muon.
E) {
 
  380       bool   monte_carlo = 
false;                                          
 
  382       for (
bool next = 
false; !next; ) {
 
  405         for (JDataL0_t::const_iterator 
i = dataL0.begin(); 
i != dataL0.end(); ++
i) {
 
  407           JHitW0 hit(*
i, summary.getRate(
i->getPMTIdentifier()));
 
  418         sort(data.begin(), data.end(), JHitW0::compare);
 
  420         JDataW0_t::iterator __end = unique(data.begin(), data.end(), equal_to<JDAQPMTIdentifier>());      
 
  433         const double   z0 = tz.getZ();
 
  434         const double   z1 = 0.5 * (zs.getLowerLimit() + zs.getUpperLimit());
 
  447           marker[2].push_back(TMarker(z0 - tz.getZ(), 0.0, kFullCircle));
 
  450           static_cast<TAttMarker&
>(marker[2][0]) = TAttMarker(kRed, kFullCircle, 0.7);
 
  451           static_cast<TAttMarker&
>(marker[2][1]) = TAttMarker(kRed, kFullCircle, 0.7);
 
  456         for (JDataW0_t::const_iterator hit = data.begin(); hit != __end; ++hit) {
 
  458           const double x  = hit->getX() - tz.getX();
 
  459           const double y  = hit->getY() - tz.getY();
 
  460           const double z  = hit->getZ() - tz.getZ();
 
  461           const double R  = sqrt(x*x + y*y);
 
  465           JDirection3D dir(hit->getDX(), hit->getDY(), hit->getDZ()); 
 
  469           const double theta = dir.
getTheta();
 
  470           const double phi   = fabs(dir.getPhi());                    
 
  473           const double E  = E_GeV;
 
  474           const double dt = T_ns.constrain(hit->getT()  -  t1);
 
  485           chi2 += H1.getChi2() - H0.getChi2();
 
  487           const double derivative = H1.getDerivativeOfChi2() - H0.getDerivativeOfChi2();
 
  489           double size = derivative * arrowScale;                      
 
  491           if        (fabs(size) < Amin) { 
 
  492             size = (size > 0.0 ? +Amin : -Amin);
 
  493           } 
else if (fabs(size) > Amax) { 
 
  494             size = (size > 0.0 ? +Amax : -Amax);
 
  497           const double X[NUMBER_OF_PADS] = { 
R, atan2(y,x), z - R/
getTanThetaC() };
 
  501           for (
size_t i = 0; 
i != NUMBER_OF_PADS; ++
i) {
 
  502             arrow[
i].push_back(TArrow(X[
i] + xs*Xs[
i], dt, X[i] + xs*Xs[i], dt + size, arrowSize, arrowType.c_str()));
 
  506         os << 
FILL(6,
'0') << evt->run_id << 
":"  << evt->frame_index << 
"/" << evt->trigger_counter << 
FILL();
 
  508         os << 
"  E = "           << 
SCIENTIFIC(7,1) << trk.
E << 
" [GeV]";
 
  509         os << 
"  cos(#theta) = " << 
FIXED(6,3)      << trk.
dir.
z;
 
  512           os << 
"  Monte Carlo";
 
  519         TLatex title(0.05, 0.5, os.str().c_str());
 
  521         title.SetTextAlign(12);
 
  522         title.SetTextFont(42);
 
  523         title.SetTextSize(0.6);
 
  529         for (
int i = 0; 
i != NUMBER_OF_PADS; ++
i) {
 
  533           for (
auto& a1 : arrow[
i]) {
 
  537           for (
auto& m1 : marker[i]) {
 
  555           static int count = 0;
 
  558             cout << endl << 
"Type '?' for possible options." << endl;
 
  563             cout << 
"\n> " << flush;
 
  569               cout << 
"possible options: " << endl;
 
  570               cout << 
'q' << 
" -> " << 
"exit application"                            << endl;
 
  571               cout << 
'u' << 
" -> " << 
"update canvas"                               << endl;
 
  572               cout << 
's' << 
" -> " << 
"save graphics to file"                       << endl;
 
  573               cout << 
'M' << 
" -> " << 
"Monte Carlo true muon information"           << endl;
 
  574               cout << 
'F' << 
" -> " << 
"fit information"                             << endl;
 
  575               if (event_selector.is_valid()) {
 
  576                 cout << 
'L' << 
" -> " << 
"reload event selector"                       << endl;
 
  578               cout << 
'r' << 
" -> " << 
"rewind input file"                           << endl;
 
  579               cout << 
'R' << 
" -> " << 
"switch to ROOT mode (quit ROOT to continue)" << endl;
 
  580               cout << 
'p' << 
" -> " << 
"print event information"                     << endl;
 
  581               cout << 
' ' << 
" -> " << 
"next event (as well as any other key)"       << endl;
 
  600                 ERROR(endl << 
"No Monte Carlo muon available." << endl);
 
  610               if (event_selector.is_valid()) {
 
  611                 execute(
MAKE_STRING(
"make -f " << 
getPath(argv[0]) << 
"/JMakeEventSelector libs"), 3);
 
  612                 event_selector.reload();
 
  624                 for (
const auto& trk : evt->mc_trks) {
 
  625                   cout << 
"MC  "; trk.
print(cout); cout << endl;
 
  627                 for (
const auto& trk : evt->trks) {
 
  628                   cout << 
"fit "; trk.
print(cout); cout << endl;
 
  630                 for (
const auto& hit : evt->hits) {
 
  631                   cout << 
"hit "; hit.
print(cout); cout << endl;
 
static const int JMUONSTART
 
Utility class to parse command line options. 
 
double getAngle(const JQuaternion3D &first, const JQuaternion3D &second)
Get space angle between quanternions. 
 
TString replace(const TString &target, const TRegexp ®exp, const T &replacement)
Replace regular expression in input by given replacement. 
 
Data structure for direction in three dimensions. 
 
then usage $script< input file >[option[primary[working directory]]] nWhere option can be E
 
double t
track time [ns] (when the particle is at pos ) 
 
then wget no check certificate user
 
std::string getPath(const std::string &file_name)
Get path, i.e. part before last JEEP::PATHNAME_SEPARATOR if any. 
 
bool is_muon(const Trk &track)
Test whether given track is a (anti-)muon. 
 
void setW(Trk &trk, const int i, const double value)
Set associated value. 
 
*fatal Wrong number of arguments esac JCookie sh typeset Z DETECTOR typeset Z SOURCE_RUN typeset Z TARGET_RUN set_variable PARAMETERS_FILE $WORKDIR parameters
 
#define MAKE_CSTRING(A)
Make C-string. 
 
Template specialisation of class JModel to match hit with muon trajectory along z-axis. 
 
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
 
Auxiliary class to convert DAQ hit time to/from Monte Carlo hit time. 
 
Auxiliary data structure for floating point format specification. 
 
Data structure for UTC time. 
 
double E
Energy [GeV] (either MC truth or reconstructed) 
 
Range of reconstruction stages. 
 
#define MAKE_STRING(A)
Make string. 
 
void print(std::ostream &out=std::cout) const 
Print hit. 
 
static const char WILDCARD
 
double getW(const Trk &track, const size_t index, const double value)
Get track information. 
 
Auxiliary class for defining the range of iterations of objects. 
 
static const int JMUONPREFIT
 
char get()
Get single character. 
 
JDirection3D getDirection(const Vec &dir)
Get direction. 
 
JFunction1D_t::result_type result_type
 
JDirection3D & rotate(const JRotation3D &R)
Rotate. 
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object 
 
Enable unbuffered terminal input. 
 
const array_type< JValue_t > & make_array(const JValue_t(&array)[N])
Method to create array of values. 
 
static const int JMUONGANDALF
 
double getTheta() const 
Get theta angle. 
 
JPosition3D getPosition(const Vec &pos)
Get position. 
 
double len
length, if applicable [m] 
 
double putTime() const 
Get Monte Carlo time minus DAQ/trigger time. 
 
static const double PI
Mathematical constants. 
 
File router for fast addressing of summary data. 
 
Vec dir
hit direction; i.e. direction of the PMT 
 
Data structure for fit parameters. 
 
Auxiliary data structure for sequence of same character. 
 
Auxiliary data structure for muon PDF. 
 
then JCookie sh JDataQuality D $DETECTOR_ID R
 
Auxiliary class for a hit with background rate value. 
 
const double getSpeedOfLight()
Get speed of light. 
 
static const int JSTART_LENGTH_METRES
distance between first and last hits in metres from JStart.cc 
 
bool has_muon(const Evt &evt)
Test whether given event has a muon. 
 
static const int JMUONSIMPLEX
 
double t
hit time (from tdc+calibration or MC truth) 
 
Data structure for L0 hit. 
 
const double getInverseSpeedOfLight()
Get inverse speed of light. 
 
int dom_id
module identifier from the data (unique in the detector). 
 
then if[[!-f $DETECTOR]] then JDetector sh $DETECTOR fi cat $WORKDIR trigger_parameters txt<< EOFtrigger3DMuon.enabled=1;trigger3DMuon.numberOfHits=5;trigger3DMuon.gridAngle_deg=1;ctMin=0.0;TMaxLocal_ns=15.0;EOF set_variable TRIGGEREFFICIENCY_TRIGGERED_EVENTS_ONLY INPUT_FILES=() for((i=1;$i<=$NUMBER_OF_RUNS;++i));do JSirene.sh $DETECTOR $JPP_DATA/genhen.km3net_wpd_V2_0.evt.gz $WORKDIR/sirene_ ${i}.root JTriggerEfficiency.sh $DETECTOR $DETECTOR $WORKDIR/sirene_ ${i}.root $WORKDIR/trigger_efficiency_ ${i}.root $WORKDIR/trigger_parameters.txt $JPP_DATA/PMT_parameters.txt INPUT_FILES+=($WORKDIR/trigger_efficiency_ ${i}.root) done for ANGLE_DEG in $ANGLES_DEG[*];do set_variable SIGMA_NS 3.0 set_variable OUTLIERS 3 set_variable OUTPUT_FILE $WORKDIR/matrix\[${ANGLE_DEG}\deg\].root $JPP_DIR/examples/JReconstruction-f"$INPUT_FILES[*]"-o $OUTPUT_FILE-S ${SIGMA_NS}-A ${ANGLE_DEG}-O ${OUTLIERS}-d ${DEBUG}--!fiif[[$OPTION=="plot"]];then if((0));then for H1 in h0 h1;do JPlot1D-f"$WORKDIR/matrix["${^ANGLES_DEG}" deg].root:${H1}"-y"1 2e3"-Y-L TR-T""-\^"number of events [a.u.]"-> o chi2
 
Data structure for fit of straight line paralel to z-axis. 
 
unsigned int tot
tot value as stored in raw data (int for pyroot) 
 
no fit printf nominal n $STRING awk v X
 
double getTanThetaC()
Get average tangent of Cherenkov angle of water corresponding to group velocity. 
 
unsigned int channel_id
PMT channel id {0,1, .., 30} local to moduke. 
 
Object reading from a list of files. 
 
const JLimit & getLimit() const 
Get limit. 
 
void print(std::ostream &out=std::cout) const 
Print track. 
 
static const int NUMBER_OF_PMTS
Total number of PMTs in module. 
 
The Trk class represents a Monte Carlo (MC) particle as well as a reconstructed track/shower. 
 
Auxiliary data structure for floating point format specification. 
 
Wrapper class around ROOT TStyle. 
 
static const int JMUONENERGY
 
The Evt class respresent a Monte Carlo (MC) event as well as an offline event. 
 
Data structure for size of TCanvas. 
 
bool hasW(const Trk &trk, const int i)
Check availability of value.