9 #include "TApplication.h" 
  103     return (i >= 0 && i < (
int) trk.
fitinf.size());
 
  128   inline double getW(
const Trk& trk, 
const int i, 
const double value)
 
  144   void setW(
Trk& trk, 
const int i, 
const double value)
 
  146     if (i >= (
int) trk.
fitinf.size()) {
 
  147       trk.
fitinf.resize(i + 1, 0.0);
 
  174     istream 
in(process.getInputStreamBuffer());
 
  176     for (
string buffer; 
getline(
in, buffer); ) {
 
  177       DEBUG(buffer << endl);
 
  190 int main(
int argc, 
char **argv)
 
  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);
 
  245   if (
outputFile.find(WILDCARD) == string::npos) {
 
  246     FATAL(
"Output file name " << 
outputFile << 
" has no wild card '" << WILDCARD << 
"'" << 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) {
 
  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();
 
  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. 
 
int main(int argc, char *argv[])
 
ROOT TTree parameter settings of various packages. 
 
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 ) 
 
JEventSelector()
Default constructor. 
 
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. 
 
void update(const JDAQHeader &header)
Update router. 
 
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. 
 
double getRate() const 
Get default rate. 
 
*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. 
 
double getZ(const JPosition3D &pos) const 
Get point of emission of Cherenkov light along muon path. 
 
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
 
Basic data structure for L0 hit. 
 
result_type calculate(const double E, const double R, const double theta, const double phi, const double t1) const 
Get PDF. 
 
Scanning of objects from a single file according a format that follows from the extension of each fil...
 
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
 
I/O formatting auxiliaries. 
 
JAxis3D & rotate(const JRotation3D &R)
Rotate axis. 
 
char get()
Get single character. 
 
JDirection3D getDirection(const Vec &dir)
Get direction. 
 
JFunction1D_t::result_type result_type
 
JDirection3D & rotate(const JRotation3D &R)
Rotate. 
 
Keyboard settings for unbuffered input. 
 
#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. 
 
std::vector< double > fitinf
place to store additional fit info, see km3net-dataformat/definitions/fitparameters.csv 
 
std::istream & getline(std::istream &in, JString &object)
Read string from input stream until end of line. 
 
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. 
 
double getY() const 
Get y position. 
 
Auxiliary data structure for muon PDF. 
 
Vec dir
hit direction; i.e. direction of the PMT 
 
Data structure for fit parameters. 
 
General purpose messaging. 
 
Auxiliary data structure for sequence of same character. 
 
Auxiliary include file for time conversion between DAQ/trigger hit and Monte Carlo hit...
 
Auxiliary data structure for muon PDF. 
 
Streaming of input and output from Linux command. 
 
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. 
 
double getT(const JVector3D &pos) const 
Get arrival time of Cherenkov light at given position. 
 
static const int JMUONSIMPLEX
 
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY JAcoustics sh $DETECTOR_ID source JAcousticsToolkit sh CHECK_EXIT_CODE typeset A EMITTERS get_tripods $WORKDIR tripod txt EMITTERS get_transmitters $WORKDIR transmitter txt EMITTERS for EMITTER in
 
Utility class to parse command line options. 
 
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). 
 
void setZ(const double z, const double velocity)
Set z-position of vertex. 
 
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) 
 
double getX() const 
Get x position. 
 
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. 
 
KM3NeT DAQ constants, bit handling, etc. 
 
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 bool select(const Trk &trk, const Evt &evt)
Default event selection. 
 
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. 
 
#define DEBUG(A)
Message macros. 
 
bool hasW(const Trk &trk, const int i)
Check availability of value.