9 #include "TApplication.h" 
   84     istream 
in(process.getInputStreamBuffer());
 
   86     for (
string buffer; 
getline(
in, buffer); ) {
 
   87       DEBUG(buffer << endl);
 
  100 int main(
int argc, 
char **argv)
 
  104   using namespace KM3NETDAQ;
 
  107   typedef JParallelFileScanner_t::multi_pointer_type               multi_pointer_type;
 
  109   JParallelFileScanner_t   inputFile;
 
  129     JParser<> zap(
"Program to display hit probabilities.");
 
  131     zap[
'w'] = 
make_field(canvas,       
"size of canvas <nx>x<ny> [pixels]")  = 
JCanvas(1200, 600);
 
  132     zap[
'f'] = 
make_field(inputFile,    
"input file (output of JXXXMuonReconstruction.sh)");
 
  134     zap[
'n'] = 
make_field(numberOfEvents)      = JLimit::max();
 
  143     zap[
'B'] = 
make_field(batch,        
"batch processing");
 
  148   catch(
const exception& error) {
 
  149     FATAL(error.what() << endl);
 
  153     FATAL(
"Missing output file name " << 
outputFile << 
" in batch mode." << endl);
 
  160   if (
outputFile.find(WILDCARD) == string::npos) {
 
  161     FATAL(
"Output file name " << 
outputFile << 
" has no wild card '" << WILDCARD << 
"'" << endl);
 
  193     center = get<JPosition3D>(
getHeader(inputFile));
 
  194   } 
catch(
const exception& error) {}
 
  199   gROOT->SetBatch(batch);
 
  201   TApplication* tp = 
new TApplication(
"user", NULL, NULL);
 
  202   TCanvas*      cv = 
new TCanvas(
"display", 
"", canvas.x, canvas.y);
 
  204   unique_ptr<TStyle> gStyle(
new JStyle(
"gplot", cv->GetWw(), cv->GetWh()));
 
  206   gROOT->SetStyle(
"gplot");
 
  209   const size_t NUMBER_OF_PADS = 3;
 
  211   cv->SetFillStyle(4000);
 
  212   cv->SetFillColor(kWhite);
 
  214   TPad* 
p1 = 
new TPad(
"p1", NULL, 0.0, 0.00, 1.0, 0.95);
 
  215   TPad* 
p2 = 
new TPad(
"p2", NULL, 0.0, 0.95, 1.0, 1.00);
 
  217   p1->Divide(NUMBER_OF_PADS, 1);
 
  223   const double Rmin = 0.0;
 
  224   const double Rmax = min(
parameters.roadWidth_m, 0.4 * Dmax);
 
  225   const double Tmin = min(
parameters.TMin_ns,  -10.0);
 
  226   const double Tmax = max(
parameters.TMax_ns, +100.0);
 
  227   const double Amin = 0.002 * (Tmax - Tmin);                               
 
  228   const double Amax = 0.8   * (Tmax - Tmin);                               
 
  229   const double ymin = min(-Amax, Tmin - 0.3 * Amax);
 
  230   const double ymax = max(+Amax, Tmax + 0.5 * Amax);
 
  232   const string Xlabel[NUMBER_OF_PADS] = { 
"R [m]", 
"#phi [rad]",   
"z [m]"  };
 
  233   const double Xmin  [NUMBER_OF_PADS] = {  Rmin,      -
PI,      -0.5 * Dmax };
 
  234   const double Xmax  [NUMBER_OF_PADS] = {  Rmax,      +
PI,      +0.5 * Dmax };
 
  236   double Xs[NUMBER_OF_PADS];
 
  238   for (
size_t i = 0; 
i != NUMBER_OF_PADS; ++
i) {
 
  242   TH2D   H2[NUMBER_OF_PADS];
 
  243   TGraph G2[NUMBER_OF_PADS];
 
  245   for (
size_t i = 0; 
i != NUMBER_OF_PADS; ++
i) {
 
  247     H2[
i] = TH2D(
MAKE_CSTRING(
"h" << 
i), NULL, 100, Xmin[
i] - Xs[
i], Xmax[i] + Xs[i], 100, ymin, ymax);
 
  249     H2[
i].GetXaxis()->SetTitle(Xlabel[i].c_str());
 
  250     H2[
i].GetYaxis()->SetTitle(
"#Deltat [ns]");
 
  252     H2[
i].GetXaxis()->CenterTitle(
true);
 
  253     H2[
i].GetYaxis()->CenterTitle(
true);
 
  255     H2[
i].SetStats(kFALSE);
 
  259     G2[
i].SetPoint(0, H2[i].GetXaxis()->GetXmin(), 0.0);
 
  260     G2[
i].SetPoint(1, H2[i].GetXaxis()->GetXmax(), 0.0);
 
  271     cout << 
"\revent: " << setw(8) << inputFile.getCounter() << flush;
 
  273     multi_pointer_type ps = inputFile.next();
 
  279     if (mc.getEntries() != 0) {
 
  289       if (!event_selector(*tev, *in, event)) {
 
  296       buildL0(*tev, router, 
true, back_inserter(dataL0));
 
  306         for (
const auto& t1 : event->mc_trks) {
 
  308             if (t1.E > muon.getE()) {
 
  315               muon = 
getFit(0, ta, 0.0, 0, t1.E, 1);
 
  323       bool   monte_carlo = 
false;                                          
 
  326       for (
bool next = 
false; !next; ) {
 
  349         for (JDataL0_t::const_iterator 
i = dataL0.begin(); 
i != dataL0.end(); ++
i) {
 
  362         sort(data.begin(), data.end(), JHitW0::compare);
 
  364         JDataW0_t::iterator __end = unique(data.begin(), data.end(), equal_to<JDAQPMTIdentifier>());      
 
  377         const double   z0 = tz.getZ();
 
  390           marker[2].push_back(TMarker(z0 - tz.getZ(), 0.0, kFullCircle));
 
  391           marker[2].push_back(TMarker(z0 - tz.getZ() + fit.getW(
JSTART_LENGTH_METRES), 0.0, kFullCircle));
 
  393           static_cast<TAttMarker&
>(marker[2][0]) = TAttMarker(kRed, kFullCircle, 0.7);
 
  394           static_cast<TAttMarker&
>(marker[2][1]) = TAttMarker(kRed, kFullCircle, 0.7);
 
  399         for (JDataW0_t::const_iterator hit = data.begin(); hit != __end; ++hit) {
 
  401           const double x  = hit->getX() - tz.getX();
 
  402           const double y  = hit->getY() - tz.getY();
 
  403           const double z  = hit->getZ() - tz.getZ();
 
  404           const double R  = sqrt(x*x + y*y);
 
  408           JDirection3D dir(hit->getDX(), hit->getDY(), hit->getDZ()); 
 
  412           const double theta = dir.
getTheta();
 
  413           const double phi   = fabs(dir.getPhi());                    
 
  416           const double E  = E_GeV;
 
  417           const double dt = T_ns.
constrain(hit->getT()  -  t1);
 
  428           chi2 += H1.getChi2() - H0.getChi2();
 
  430           const double derivative = H1.getDerivativeOfChi2() - H0.getDerivativeOfChi2();
 
  432           double size = derivative * arrowScale;                      
 
  434           if        (fabs(size) < Amin) { 
 
  435             size = (size > 0.0 ? +Amin : -Amin);
 
  436           } 
else if (fabs(size) > Amax) { 
 
  437             size = (size > 0.0 ? +Amax : -Amax);
 
  440           const double X[NUMBER_OF_PADS] = { 
R, atan2(y,x), z - R/
getTanThetaC() };
 
  444           for (
size_t i = 0; 
i != NUMBER_OF_PADS; ++
i) {
 
  445             arrow[
i].push_back(TArrow(X[
i] + xs*Xs[
i], dt, X[i] + xs*Xs[i], dt + size, arrowSize, arrowType.c_str()));
 
  451         os << 
"  E = "           << 
SCIENTIFIC(7,1) << fit.getE() << 
" [GeV]";
 
  452         os << 
"  cos(#theta) = " << 
FIXED(6,3)      << fit.getDZ();
 
  455           os << 
"  Monte Carlo";
 
  456         else if (muon.getStatus() >= 0)
 
  462         TLatex title(0.05, 0.5, os.str().c_str());
 
  464         title.SetTextAlign(12);
 
  465         title.SetTextFont(42);
 
  466         title.SetTextSize(0.6);
 
  472         for (
int i = 0; 
i != NUMBER_OF_PADS; ++
i) {
 
  476           for (
auto& a1 : arrow[
i]) {
 
  480           for (
auto& m1 : marker[i]) {
 
  498           static int count = 0;
 
  501             cout << endl << 
"Type '?' for possible options." << endl;
 
  506             cout << 
"\n> " << flush;
 
  512               cout << 
"possible options: " << endl;
 
  513               cout << 
'q' << 
" -> " << 
"exit application"                            << endl;
 
  514               cout << 
'u' << 
" -> " << 
"update canvas"                               << endl;
 
  515               cout << 
's' << 
" -> " << 
"save graphics to file"                       << endl;
 
  516               cout << 
'+' << 
" -> " << 
"next fit"                                    << endl;
 
  517               cout << 
'-' << 
" -> " << 
"previous fit"                                << endl;
 
  518               cout << 
'M' << 
" -> " << 
"Monte Carlo true muon information"           << endl;
 
  519               cout << 
'F' << 
" -> " << 
"fit information"                             << endl;
 
  520               if (event_selector.is_valid()) {
 
  521                 cout << 
'L' << 
" -> " << 
"reload event selector"                       << endl;
 
  523               cout << 
'r' << 
" -> " << 
"rewind input file"                           << endl;
 
  524               cout << 
'R' << 
" -> " << 
"switch to ROOT mode (quit ROOT to continue)" << endl;
 
  525               cout << 
' ' << 
" -> " << 
"next event (as well as any other key)"       << endl;
 
  542               index = (index != in->size() - 1 ? index + 1 : 0);
 
  548               index = (index != 0 ? index - 1 : in->size() - 1);
 
  553               if (muon.getStatus() >= 0)
 
  556                 ERROR(endl << 
"No Monte Carlo muon available." << endl);
 
  566               if (event_selector.is_valid()) {
 
  567                 execute(
MAKE_STRING(
"make -f " << 
getPath(argv[0]) << 
"/JMakeEventSelector libs"), 3);
 
  568                 event_selector.reload();
 
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 getQuality(const double chi2, const int NDF)
Get quality of fit. 
 
JTrack3E getTrack(const Trk &track)
Get track. 
 
Template specialisation of L0 builder for JHitL0 data type. 
 
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. 
 
Router for direct addressing of module data in detector data structure. 
 
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
 
General purpose class for parallel reading of objects from a single file or multiple files...
 
#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. 
 
int getRunNumber() const 
Get run number. 
 
Data structure for detector geometry and calibration. 
 
bool qualitySorter(const JFit &first, const JFit &second)
Comparison of fit results. 
 
#define MAKE_STRING(A)
Make string. 
 
int getFrameIndex() const 
Get frame index. 
 
JTime & add(const JTime &value)
Addition operator. 
 
static const char WILDCARD
 
Head getHeader(const JMultipleFileScanner_t &file_list)
Get Monte Carlo header. 
 
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. 
 
Auxiliary class for defining the range of iterations of objects. 
 
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
 
Data structure for vector in three dimensions. 
 
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. 
 
Auxiliary class to test history. 
 
static const int JMUONGANDALF
 
double getTheta() const 
Get theta angle. 
 
Parallel scanning of objects from a single file or multiple files according a format that follows fro...
 
JPosition3D getPosition(const Vec &pos)
Get position. 
 
std::istream & getline(std::istream &in, JString &object)
Read string from input stream until end of line. 
 
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. 
 
Auxiliary data structure for muon PDF. 
 
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. 
 
Direct access to module in detector data structure. 
 
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 
 
void load(const std::string &file_name, JDetector &detector)
Load detector from input file. 
 
JFit getFit(const int id, const JMODEL::JString &string)
Get fit parameters of string. 
 
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. 
 
const double getInverseSpeedOfLight()
Get inverse speed of light. 
 
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. 
 
double getMaximalDistance(const JDetector &detector, const bool option=false)
Get maximal distance between modules in detector. 
 
no fit printf nominal n $STRING awk v X
 
double getTanThetaC()
Get average tangent of Cherenkov angle of water corresponding to group velocity. 
 
const JLimit & getLimit() const 
Get limit. 
 
do set_variable DETECTOR_TXT $WORKDIR detector
 
KM3NeT DAQ constants, bit handling, etc. 
 
static const int NUMBER_OF_PMTS
Total number of PMTs in module. 
 
Auxiliary data structure for floating point format specification. 
 
JTriggerCounter_t getCounter() const 
Get trigger counter. 
 
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. 
 
#define DEBUG(A)
Message macros.