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();
214 while (inputFile.hasNext()) {
216 cout <<
"\revent: " << setw(8) << inputFile.getCounter() << flush;
218 const JEvt* evt = inputFile.next();
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);
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) {
288 if (router.hasLocation(location) && !router.getModule(location).has(
PIEZO_DISABLE)) {
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;
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;
JModel getModel(const JEvt &evt)
Get model.
Utility class to parse command line options.
TString replace(const TString &target, const TRegexp ®exp, const T &replacement)
Replace regular expression in input by given replacement.
static JDetectorMechanics getMechanics
Function object to get string mechanics.
then wget no check certificate user
*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.
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
then fatal Wrong number of arguments fi set_variable STRING $argv[1] set_variable DETECTORXY_TXT $WORKDIR $DETECTORXY_TXT tail read X Y CHI2 RMS printf optimum n $X $Y $CHI2 $RMS awk v Y
Auxiliary data structure for floating point format specification.
V(JDAQEvent-JTriggerReprocessor)*1.0/(JDAQEvent+1.0e-10)
Template definition for direct access of elements in ROOT TChain.
#define MAKE_STRING(A)
Make string.
static const char WILDCARD
Model for fit to acoustics data.
double UNIXTimeStop
stop time
Auxiliary class for defining the range of iterations of objects.
static const JSoundVelocity getSoundVelocity(1541.0,-17.0e-3,-2000.0)
Function object for velocity of sound.
Router for direct addressing of location data in detector data structure.
Logical location of module.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Enable unbuffered terminal input.
double getY() const
Get y position.
const JPosition3D & getPosition() const
Get position.
Auxiliary data structure for sequence of same character.
Implementation for depth dependend velocity of sound.
Base class for JTreeScanner.
JACOUSTICS::JModel::string_type string
void load(const std::string &file_name, JDetector &detector)
Load detector from input file.
double UNIXTimeStart
start time
General purpose class for object reading from a list of file names.
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
Auxiliary class for date and time.
static const int PIEZO_DISABLE
Enable (disable) use of piezo if this status bit is 0 (1);.
double getX() const
Get x position.
no fit printf nominal n $STRING awk v X
static const int HYDROPHONE_DISABLE
Enable (disable) use of hydrophone if this status bit is 0 (1);.
Data structure for position in three dimensions.
const JLimit & getLimit() const
Get limit.
do set_variable DETECTOR_TXT $WORKDIR detector
double getZ() const
Get z position.
Wrapper class around ROOT TStyle.
Data structure for size of TCanvas.
#define DEBUG(A)
Message macros.