11 #include "TApplication.h" 
   58 int main(
int argc, 
char **argv)
 
   64   JLimit_t&                numberOfEvents = inputFile.getLimit();
 
   78     JParser<> zap(
"Program to display strings.");
 
   80     zap[
'w'] = 
make_field(canvas,          
"size of canvas <nx>x<ny> [pixels]")  = 
JCanvas(1200, 600);
 
   81     zap[
'f'] = 
make_field(inputFile,       
"input file (output of JKatoomba[.sh])");
 
   82     zap[
'n'] = 
make_field(numberOfEvents)      = JLimit::max();
 
   87     zap[
'P'] = 
make_field(prescale,        
"prescale")                           = 1;
 
   88     zap[
'R'] = 
make_field(ratio,           
"aspect ratio")                       = 0.1;
 
   89     zap[
'B'] = 
make_field(batch,           
"batch processing");
 
   90     zap[
'N'] = 
make_field(Nmin,            
"minimum number of transmissions")    = 0;
 
   95   catch(
const exception& error) {
 
   96     FATAL(error.what() << endl);
 
  100     FATAL(
"Missing output file name " << 
outputFile << 
" in batch mode." << endl);
 
  127   for (JDetector::iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  128     status[module->getID()] = module->getStatus();
 
  133   gROOT->SetBatch(batch);
 
  135   TApplication* tp = 
new TApplication(
"user", NULL, NULL);
 
  136   TCanvas*      cv = 
new TCanvas(
"display", 
"", canvas.
x, canvas.
y);
 
  138   unique_ptr<TStyle> gStyle(
new JStyle(
"gplot", cv->GetWw(), cv->GetWh()));
 
  140   gROOT->SetStyle(
"gplot");
 
  143   const size_t NY = (size_t) (sqrt(geometry.size()) * 0.75 + 0.25);
 
  144   const size_t NX = (size_t) (geometry.size() + NY - 1) / NY;
 
  146   const size_t NUMBER_OF_PADS = NX * NY;
 
  148   cv->SetFillStyle(4000);
 
  149   cv->SetFillColor(kWhite);
 
  151   TPad* 
p1 = 
new TPad(
"p1", NULL, 0.0, 0.00, 1.0, 0.95);
 
  152   TPad* p2 = 
new TPad(
"p2", NULL, 0.0, 0.95, 1.0, 1.00);
 
  154   p1->Divide(NX, NY, 0.01, 0.001);
 
  164     if (i->second.getZ() < zmin) {
 
  165       zmin = i->second.getZ();
 
  168     if (i->second.rbegin()->getHeight() > zmax) {
 
  169       zmax = i->second.rbegin()->getHeight();
 
  176   double xmin = -ratio * (zmax - zmin);
 
  177   double xmax = +ratio * (zmax - zmin);
 
  179   TH2D   H2[NUMBER_OF_PADS];
 
  180   TText  T2[NUMBER_OF_PADS];
 
  182   for (
size_t i = 0; i != geometry.size(); ++i) {
 
  186     DEBUG(
"Pad " << setw(3) << i + 1 << 
' ' << H2[i].GetName() << endl);
 
  188     H2[i].GetXaxis()->SetTitle(
"x/y [m]");
 
  189     H2[i].GetYaxis()->SetTitle(
"z [m]");
 
  191     H2[i].GetXaxis()->CenterTitle(
true);
 
  192     H2[i].GetYaxis()->CenterTitle(
true);
 
  194     H2[i].SetStats(kFALSE);
 
  196     T2[i] = TText(0.0, zmax + 0.05 * (zmax - zmin), 
MAKE_CSTRING(
FILL(4,
'0') << geometry.at(i).first << 
FILL()));
 
  198     T2[i].SetTextAlign(21);
 
  199     T2[i].SetTextFont(42);
 
  200     T2[i].SetTextSize(0.05);
 
  212   JTreeScanner_t::iterator p = in.begin();
 
  216     cout << 
"\revent: " << setw(8) << inputFile.
getCounter() << flush;
 
  221     if (batch && inputFile.
getCounter()%prescale != 0) {
 
  227       for ( ; p != in.end() && p-> begin()->getToA() <  evt->
UNIXTimeStart - 0.5; ++p) {}
 
  229       JTreeScanner_t::iterator q = p;
 
  231       for ( ; q != in.end() && q->rbegin()->getToA() <= evt->
UNIXTimeStop  + 0.5; ++q) {}
 
  237         for (JTreeScanner_t::iterator evt = p; evt != q; ++evt) {
 
  238           for (JEvent::const_iterator i = evt->begin(); i != evt->end(); ++i) {
 
  239             buffer[i->getID()] += 1;
 
  243         for (JDetector::iterator module = 
detector.begin(); module != 
detector.end(); ++module) {
 
  245           module->setStatus(status[module->getID()]);
 
  247           if (buffer[module->getID()] < Nmin) {
 
  258     TText title(0.5, 0.5, utc.c_str());
 
  260     title.SetTextAlign(22);
 
  261     title.SetTextFont(42);
 
  262     title.SetTextSize(0.3);
 
  271     for (JEvt::const_iterator i = evt->begin(); i != evt->end(); ++i) {
 
  273       if (geometry.
has(i->id)) {
 
  275         const int index = geometry.
getIndex(i->id);
 
  278         const JMODEL   ::JString& parameters = 
model.string[i->id];
 
  280         X[index].push_back(TMarker(0.0, 
string.getZ(), kFullCircle));
 
  281         Y[index].push_back(TMarker(0.0, 
string.getZ(), kFullCircle));
 
  283         for (
size_t floor = 1; floor < 
string.size(); ++floor) {
 
  289             X[index].push_back(TMarker(position.
getX() - 
string.getX(), position.
getZ(), kFullCircle));
 
  290             Y[index].push_back(TMarker(position.
getY() - 
string.getY(), position.
getZ(), kFullCircle));
 
  298     for (
size_t i = 0; i != NUMBER_OF_PADS; ++i) {
 
  302       for (
auto& m1 : X[i]) { 
static_cast<TAttMarker&
>(m1) = TAttMarker(kBlack, kFullCircle, 0.7/sqrt(NY)); m1.Draw(); }
 
  303       for (
auto& m1 : Y[i]) { 
static_cast<TAttMarker&
>(m1) = TAttMarker(kRed,   kFullCircle, 0.7/sqrt(NY)); m1.Draw(); }
 
  316       static int count = 0;
 
  319         cout << endl << 
"Type '?' for possible options." << endl;
 
  322       for (
bool user = 
true; user; ) {
 
  324         cout << 
"\n> " << flush;
 
  330           cout << 
"possible options: " << endl;
 
  331           cout << 
'q' << 
" -> " << 
"exit application"                            << endl;
 
  332           cout << 
'u' << 
" -> " << 
"update canvas"                               << endl;
 
  333           cout << 
's' << 
" -> " << 
"save graphics to file"                       << endl;
 
  334           cout << 
'r' << 
" -> " << 
"rewind input file"                           << endl;
 
  335           cout << 
'R' << 
" -> " << 
"switch to ROOT mode (quit ROOT to continue)" << endl;
 
  336           cout << 
'p' << 
" -> " << 
"print event information"                     << endl;
 
  337           cout << 
' ' << 
" -> " << 
"next event (as well as any other key)"       << endl;
 
  357           cout << endl << *evt << endl;
 
int main(int argc, char **argv)
 
ROOT TTree parameter settings.
 
Data structure for detector geometry and calibration.
 
Keyboard settings for unbuffered input.
 
Direct access to location in detector data structure.
 
General purpose messaging.
 
#define DEBUG(A)
Message macros.
 
Scanning of objects from multiple files according a format that follows from the extension of each fi...
 
Utility class to parse command line options.
 
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
 
TString replace(const TString &target, const TRegexp ®exp, const T &replacement)
Replace regular expression in input by given replacement.
 
I/O formatting auxiliaries.
 
#define MAKE_CSTRING(A)
Make C-string.
 
#define MAKE_STRING(A)
Make string.
 
Router for direct addressing of location data in detector data structure.
 
bool hasLocation(const JLocation &location) const
Has module.
 
const JModule & getModule(const JLocation &location) const
Get module parameters.
 
Logical location of module.
 
bool has(const int bit) const
Test PMT status.
 
Data structure for position in three dimensions.
 
const JPosition3D & getPosition() const
Get position.
 
double getY() const
Get y position.
 
double getZ() const
Get z position.
 
double getX() const
Get x position.
 
Utility class to parse command line options.
 
Data structure for size of TCanvas.
 
int y
number of pixels in Y
 
int x
number of pixels in X
 
Wrapper class around ROOT TStyle.
 
General purpose class for object reading from a list of file names.
 
virtual void rewind() override
Rewind.
 
virtual bool hasNext() override
Check availability of next element.
 
counter_type getCounter() const
Get counter.
 
virtual const pointer_type & next() override
Get next element.
 
Base class for JTreeScanner.
 
Template definition for direct access of elements in ROOT TChain.
 
Enable unbuffered terminal input.
 
char get()
Get single character.
 
static const int HYDROPHONE_DISABLE
Enable (disable) use of hydrophone if this status bit is 0 (1);.
 
static const int PIEZO_DISABLE
Enable (disable) use of piezo if this status bit is 0 (1);.
 
static const JSoundVelocity getSoundVelocity(1541.0, -17.0e-3, -2000.0)
Function object for velocity of sound.
 
static JDetectorMechanics getMechanics
Function object to get string mechanics.
 
JModel getModel(const JEvt &evt)
Get model.
 
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
 
static const char WILDCARD
 
Auxiliary data structure for sequence of same character.
 
Auxiliary data structure for floating point format specification.
 
double UNIXTimeStop
stop time
 
double UNIXTimeStart
start time
 
Model for fit to acoustics data.
 
Implementation for depth dependend velocity of sound.
 
JSoundVelocity & set(const double z0)
Set depth.
 
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
 
Auxiliary class for defining the range of iterations of objects.
 
Auxiliary class for date and time.