208{
211
213
218 int stats;
219 JLegend legend;
220 JRange_t X;
221 JRange_t Y;
222 JRange_t Z;
224 bool logy;
225 bool logz;
227 string xLabel;
228 string yLabel;
230 int fillArea;
231 int lineWidth;
232 double markerSize;
233 string option;
235 bool batch;
236 string title;
238 size_t group;
240 string xTimeFormat;
241
242 try {
243
245
246 JParser<> zap(
"General purpose plot program for 1D ROOT objects.");
247
248 zap[
'f'] =
make_field(inputFile,
"<input file>:<object name>");
250 zap[
'w'] =
make_field(canvas,
"size of canvas <nx>x<ny> [pixels]") =
JCanvas(500, 500);
253 zap[
'L'] =
make_field(legend,
"position legend e.g. TR [factor]") = JLegend(), JLegend(
"TL"), JLegend(
"TR"), JLegend(
"BR"), JLegend(
"BL");
254 zap[
'x'] =
make_field(X,
"abscissa range") = JRange_t::DEFAULT_RANGE();
255 zap[
'y'] =
make_field(Y,
"ordinate range") = JRange_t::DEFAULT_RANGE();
256 zap[
'z'] =
make_field(Z,
"ordinate range of projection)") = JRange_t::DEFAULT_RANGE();
257 zap[
'X'] =
make_field(logx,
"logarithmic x-axis (-XX log10 axis)");
258 zap[
'Y'] =
make_field(logy,
"logarithmic y-axis");
259 zap[
'Z'] =
make_field(logz,
"logarithmic y-axis; after projection");
260 zap[
'P'] =
make_field(project,
"projection") =
'\0',
'x',
'X',
'y',
'Y';
261 zap[
'>'] =
make_field(xLabel,
"x-axis label") =
"";
262 zap[
'^'] =
make_field(yLabel,
"y-axis label") =
"";
263 zap[
'C'] =
make_field(drawLine,
"draw line (-C black-and-white -CC colour)");
264 zap[
'F'] =
make_field(fillArea,
"fill area") = 0;
265 zap[
'l'] =
make_field(lineWidth,
"line width") = 2;
266 zap[
'S'] =
make_field(markerSize,
"marker size") = 1.0;
267 zap[
'O'] =
make_field(option,
"plotting option") =
"";
269 zap[
'B'] =
make_field(batch,
"batch processing");
270 zap[
'T'] =
make_field(title,
"graphics title ("
271 << "\"" << JName_t << "\" -> ROOT name; "
272 << "\"" << JTitle_t << "\" -> ROOT title)") = "KM3NeT preliminary";
274 zap[
'g'] =
make_field(group,
"group colour codes of objects") = 1;
275 zap[
't'] =
make_field(xTimeFormat,
"set time format for x-axis, e.g. \%d\\/\%m\\/\\%y%F1970-01-01 00:00:00") =
"";
277
278 zap(argc, argv);
279 }
280 catch(const exception &error) {
281 FATAL(error.what() << endl);
282 }
283
284
285 gROOT->SetBatch(batch);
286
287 TApplication* tp = new TApplication("user", NULL, NULL);
288 TCanvas* cv =
new TCanvas(
"c1",
"c1", canvas.
x, canvas.
y);
289
290 unique_ptr<TStyle> gStyle(
new JStyle(
"gplot", cv->GetWw(), cv->GetWh(), parameters));
291
292 if (logy || logz) {
293 gStyle->SetTitleOffset(gStyle->GetTitleOffset() * 1.3, "Y");
294 }
295
296 gROOT->SetStyle("gplot");
297 gROOT->ForceStyle();
298
299 cv->SetFillStyle(4000);
300 cv->SetFillColor(kWhite);
301 cv->Divide(1,1);
302 cv->cd(1);
303
304
305 JMarkerAttributes::getInstance().setMarkerSize(markerSize);
306 JLineAttributes ::getInstance().setLineWidth (lineWidth);
307
308
309 Double_t
xmin = numeric_limits<double>::max();
310 Double_t
xmax = numeric_limits<double>::lowest();
311
312 Double_t ymin = numeric_limits<double>::max();
313 Double_t ymax = numeric_limits<double>::lowest();
314
315
317
321
322 logy = (logy || logz);
323
324 if (px) {
325 swap(Y, Z);
326 }
327
328 if (py) {
329 swap(X, Z);
330 swap(Y, X);
331 }
332
333 TH1* master = NULL;
334
335 for (vector<JRootObjectID>::const_iterator input = inputFile.begin(); input != inputFile.end(); ++input) {
336
337 DEBUG(
"Input: " << *input << endl);
338
340
341 if (dir == NULL) {
342 ERROR(
"File: " << input->getFullFilename() <<
" not opened." << endl);
343 continue;
344 }
345
346 const TRegexp regexp(input->getObjectName());
347
348 TIter iter(dir->GetListOfKeys());
349
350 for (TKey* key; (key = (TKey*) iter.Next()) != NULL; ) {
351
352 const TString tag(key->GetName());
353
354 DEBUG(
"Key: " << tag <<
" match = " << tag.Contains(regexp) << endl);
355
356
357
358 if (tag.Contains(regexp) &&
isTObject(key)) {
359
360 if (title == JName_t) {
361 title = key->GetName();
362 } else if (title == JTitle_t) {
363 title = key->GetTitle();
364 }
365
367
368 TAttMarker marker = JMarkerAttributes::getInstance().get(0);
369 TAttLine line = JLineAttributes ::getInstance().get(0);
370
371 if (group != 0) {
372 marker.SetMarkerColor(JMarkerAttributes::getInstance().get(listOfObjects.size()/group).GetMarkerColor());
373 }
374
375 if (drawLine == 1)
376 line = JLineAttributes::getInstance().get(listOfObjects.size());
377 else
378 line.SetLineColor(marker.GetMarkerColor());
379
380
381
382 try {
383
384 TProfile& h1 = dynamic_cast<TProfile&>(*object);
385
386 object = h1.ProjectionX();
387 }
388 catch(exception&) {}
389
390 try {
391
392 TH2& h2 = dynamic_cast<TH2&>(*object);
393
394 if (px) {
395
396 if (Z.is_valid())
397 object = h2.ProjectionX(
MAKE_CSTRING(h2.GetName() <<
"_px" << LABEL_TERMINATOR << listOfObjects.size()),
398 h2.GetYaxis()->FindBin(Z.getLowerLimit()),
399 h2.GetYaxis()->FindBin(Z.getUpperLimit()) - 1);
400 else
401 object = h2.ProjectionX(
MAKE_CSTRING(h2.GetName() <<
"_px" << LABEL_TERMINATOR << listOfObjects.size()),
402 1,
403 h2.GetYaxis()->GetNbins());
404
405 } else if (py) {
406
407 if (Z.is_valid())
408 object = h2.ProjectionY(
MAKE_CSTRING(h2.GetName() <<
"_py" << LABEL_TERMINATOR << listOfObjects.size()),
409 h2.GetXaxis()->FindBin(Z.getLowerLimit()),
410 h2.GetXaxis()->FindBin(Z.getUpperLimit()) - 1);
411 else
412 object = h2.ProjectionY(
MAKE_CSTRING(h2.GetName() <<
"_py" << LABEL_TERMINATOR << listOfObjects.size()),
413 1,
414 h2.GetXaxis()->GetNbins());
415
416 } else {
417
418 ERROR(
"For 2D histograms, use option option -P for projections or use JPlot2D" << endl);
419
420 continue;
421 }
422 }
423 catch(exception&) {}
424
425 try {
426
427 TH3& h3 = dynamic_cast<TH3&>(*object);
428
429 if (px) {
430
431 object = h3.ProjectionX(
MAKE_CSTRING(h3.GetName() <<
"_px" << LABEL_TERMINATOR << listOfObjects.size()));
432
433 } else if (py) {
434
435 object = h3.ProjectionY(
MAKE_CSTRING(h3.GetName() <<
"_py" << LABEL_TERMINATOR << listOfObjects.size()));
436
437 } else if (pz) {
438
439 object = h3.ProjectionZ(
MAKE_CSTRING(h3.GetName() <<
"_pz" << LABEL_TERMINATOR << listOfObjects.size()));
440
441 } else {
442
443 ERROR(
"For 3D histograms, use option option -P for projections or use JPlot2D -P <projection>" << endl);
444
445 continue;
446 }
447 }
448 catch(exception&) {}
449
450
451
452 try {
453 if (dynamic_cast<TMarker*>(object.get()) == NULL) {
454 dynamic_cast<TAttMarker&>(*object) = marker;
455 }
456 }
457 catch(exception&) {}
458
459 try {
460 if (dynamic_cast<TLine*>(object.get()) == NULL) {
461 dynamic_cast<TAttLine&> (*object) = line;
462 }
463 }
464 catch(exception&) {}
465
466 if (fillArea != 0) {
467
468 try {
469
470 TAttFill& fill = dynamic_cast<TAttFill&>(*object);
471
473 fill.SetFillColor(marker.GetMarkerColor());
474 fill.SetFillStyle(abs(fillArea));
475 }
476 }
477 catch(exception&) {}
478 }
479
480
481
482 if (drawLine) {
483
484 try {
485
486 TH1& h1 = dynamic_cast<TH1&>(*object);
487
488 for (int i = 1; i <= h1.GetNbinsX(); ++i) {
489 h1.SetBinError(i, 0.0);
490 }
491 }
492 catch(exception&) {}
493
494 try {
495
496 TGraphErrors&
g1 =
dynamic_cast<TGraphErrors&
>(*object);
497
498 for (Int_t i = 0; i !=
g1.GetN(); ++i) {
501 }
502 }
503 catch(exception&) {}
504 }
505
506
507
508 try {
509
510 TH1& h1 = dynamic_cast<TH1&>(*object);
511
512 h1.SetStats(stats != -1);
513
514 xmin = min(xmin, h1.GetXaxis()->GetXmin());
515 xmax = max(xmax, h1.GetXaxis()->GetXmax());
516 ymin = min(ymin, logy ? h1.GetMinimum(0.0) : h1.GetMinimum());
517 ymax = max(ymax, h1.GetMaximum());
518
519 if (!logy && h1.GetListOfFunctions() != NULL) {
520 for (unique_ptr<TIterator>
iterator(h1.GetListOfFunctions()->MakeIterator()); TF1* f1 = (TF1*)
iterator->Next(); ) {
521 ymin = min(ymin,
f1->GetMinimum(h1.GetXaxis()->GetXmin(), h1.GetXaxis()->GetXmax()));
522 ymax = max(ymax,
f1->GetMaximum(h1.GetXaxis()->GetXmin(), h1.GetXaxis()->GetXmax()));
523 }
524 }
525 }
526 catch(exception&) {}
527
528 try {
529
530 TGraph&
g1 =
dynamic_cast<TGraph&
>(*object);
531
532 for (Int_t i = 0; i !=
g1.GetN(); ++i) {
533
534 xmin = min(xmin,
g1.GetX()[i]);
535 xmax = max(xmax,
g1.GetX()[i]);
536
537 if (!logy ||
g1.GetY()[i] > 0.0) {
538 ymin = min(ymin,
g1.GetY()[i]);
539 ymax = max(ymax,
g1.GetY()[i]);
540 }
541 }
542 }
543 catch(exception&) {}
544
545 try {
546
547 TGraphErrors&
g1 =
dynamic_cast<TGraphErrors&
>(*object);
548
549 for (Int_t i = 0; i !=
g1.GetN(); ++i) {
550 if (!logy ||
g1.GetY()[i] -
g1.GetEY()[i] > 0.0) { ymin = min(ymin,
g1.GetY()[i] -
g1.GetEY()[i]); }
551 if (!logy ||
g1.GetY()[i] +
g1.GetEY()[i] > 0.0) { ymax = max(ymax,
g1.GetY()[i] +
g1.GetEY()[i]); }
552 }
553 }
554 catch(exception&) {}
555
556 try {
557
558 TMultiGraph& m1 = dynamic_cast<TMultiGraph&>(*object);
559
560 for (TIter i1(m1.GetListOfGraphs()); TGraph*
g1 =
dynamic_cast<TGraph*
>(i1()); ) {
561
562 for (Int_t i = 0; i !=
g1->GetN(); ++i) {
563
564 xmin = min(xmin,
g1->GetX()[i]);
565 xmax = max(xmax,
g1->GetX()[i]);
566
567 if (!logy ||
g1->GetY()[i] > 0.0) {
568 ymin = min(ymin,
g1->GetY()[i]);
569 ymax = max(ymax,
g1->GetY()[i]);
570 }
571 }
572 }
573 }
574 catch(exception&) {}
575
576 try {
577
578 TF2& f2 = dynamic_cast<TF2&>(*object);
580
581 TString formula = f2.GetExpFormula();
582 TString _z_ = TString::Format("%f", 0.5 * (Z.getLowerLimit() + Z.getUpperLimit()));
583
584 double __xmin;
585 double __xmax;
586 double __ymin;
587 double __ymax;
588
589 f2.GetRange(__xmin, __ymin, __xmax, __ymax);
590
591 if (px) {
592
593 formula.ReplaceAll("y", _z_);
594
595 f1 =
new TF1(
MAKE_CSTRING(f2.GetName() <<
"_px" << LABEL_TERMINATOR << listOfObjects.size()), formula);
596
597 f1->SetRange(__xmin, __xmax);
598
599 } else if (py) {
600
601 formula.ReplaceAll("x", _z_);
602 formula.ReplaceAll("y", "x");
603
604 f1 =
new TF1(
MAKE_CSTRING(f2.GetName() <<
"_py" << LABEL_TERMINATOR << listOfObjects.size()), formula);
605
606 f1->SetRange(__ymin, __ymax);
607
608 } else {
609
610 ERROR(
"For 2D functions, use option option -P for projections or use JPlot2D" << endl);
611
612 continue;
613 }
614
615 DEBUG(
"TF1: " <<
f1->GetExpFormula() << endl);
616
617 f1->SetParameters(f2.GetParameters());
618
620 }
621 catch(exception&) {}
622
623 try {
624
625 TF1&
f1 =
dynamic_cast<TF1&
>(*object);
626
627 double __xmin;
628 double __xmax;
629
630 f1.GetRange(__xmin, __xmax);
631
632 xmin = min(xmin, __xmin);
633 xmax = max(xmax, __xmax);
634 ymin = min(ymin,
f1.GetMinimum());
635 ymax = max(ymax,
f1.GetMaximum());
636 }
637 catch(exception&) {}
638
639 try {
640
641 THStack& hs = dynamic_cast<THStack&>(*object);
642
643 NOTICE(
"THStack" << endl);
644
645 unique_ptr<TIterator>
iterator(hs.GetHists()->MakeIterator());
646
648
649 TH1& h1 = dynamic_cast<TH1&>(*i);
650
651 NOTICE(
"TH1[" << index <<
"] " << h1.GetName() << endl);
652
653 xmin = min(xmin, h1.GetXaxis()->GetXmin());
654 xmax = max(xmax, h1.GetXaxis()->GetXmax());
655
656 ymin = min(ymin, logy ? h1.GetMinimum(0.0) : h1.GetMinimum());
657 ymax = max(ymax, h1.GetMaximum());
658
659 h1.SetLineWidth(1);
660 h1.SetLineColor(kBlack);
661
662 h1.SetFillColor(JMarkerAttributes::getInstance().get(index).GetMarkerColor());
663 }
664 }
665 catch(exception&) {}
666
667 try {
668
669 TLine& h1 = dynamic_cast<TLine&>(*object);
670
671 xmin = min(xmin, h1.GetX1());
672 xmax = max(xmax, h1.GetX2());
673 ymin = min(ymin, h1.GetY1());
674 ymax = max(ymax, h1.GetY2());
675 }
676 catch(exception&) {}
677
678
679
680 for (TString buffer[] = { object.getLabel(), input->getFilename().c_str(), "" }, *i = buffer; *i != ""; ++i) {
681
682 *i = (*i)(TRegexp("\\[.*\\]"));
683
684 if (i->Length() > 2) {
685 object.setLabel((*i)(1, i->Length() - 2));
686 }
687 }
688
689 DEBUG(
"Add object: " << tag <<
" with label <" <<
object.
getLabel() <<
">" << endl);
690
691 if (master == NULL) {
692 master = dynamic_cast<TH1*>(object.get());
693 }
694
695 listOfObjects.push_back(object);
696 }
697 }
698 }
699
700 if (listOfObjects.empty()) {
701 ERROR(
"Nothing to draw." << endl);
702 }
703
705
706
707
708
709
710 TH1* h1 = dynamic_cast<TH1*> (i->get());
711 TGraph*
g1 =
dynamic_cast<TGraph*
> (i->get());
712 TMultiGraph* m1 = dynamic_cast<TMultiGraph*>(i->get());
713 TAttLine*
ls =
dynamic_cast<TAttLine*
> (i->get());
714
716
718
719 if (h1 != NULL) {
720
721 iterator.reset(h1->GetListOfFunctions()->MakeIterator());
722
723 }
else if (
g1 != NULL) {
724
725 iterator.reset(
g1->GetListOfFunctions()->MakeIterator());
726
727 } else if (m1 != NULL) {
728
729 for (TIter i1(m1->GetListOfGraphs()); TGraph* gi = dynamic_cast<TGraph*>(i1()); ) {
730 for (TIter i2(gi->GetListOfFunctions()); TF1* fi = dynamic_cast<TF1*>(i2()); ) {
732 }
733 }
734
736 }
737
739
740 Double_t x1[] = { numeric_limits<Double_t>::max(), numeric_limits<Double_t>::max() };
741 Double_t x2[] = { numeric_limits<Double_t>::lowest(), numeric_limits<Double_t>::lowest() };
742
743 for (
int nf = 0, ns = 0, nc = 1; TF1*
f1 = (TF1*)
iterator->Next(); ++nf) {
744
745 f1->GetRange(x1[1], x2[1]);
747
748 dynamic_cast<TAttLine&>(*f1) = JLineAttributes::getInstance().get(0);
749
750 if (listOfObjects.size() == 1) {
751
752 if (x1[0] == x1[1] &&
753 x2[0] == x2[1])
754 ++nc;
755 else if (nf != 0)
757
758 f1->SetLineStyle(JLineAttributes ::getInstance().get(ns).GetLineStyle());
759 f1->SetLineColor(JMarkerAttributes::getInstance().get(nc).GetMarkerColor());
760
761 } else {
762
763
764
765 f1->SetLineColor(
ls->GetLineColor());
766 f1->SetLineStyle(JLineAttributes::getInstance().get(ns++).GetLineStyle());
767 }
768
769 x1[0] = x1[1];
770 x2[0] = x2[1];
771
772
773
774
775
776
777
778
779
780
781
782 }
783 }
784 }
785
786
787
788 if (X.is_valid()) {
789 xmin = X.getLowerLimit();
790 xmax = X.getUpperLimit();
791 }
792
793 if (Y.is_valid()) {
794 ymin = Y.getLowerLimit();
795 ymax = Y.getUpperLimit();
796 } else if (ymax > ymin) {
798 }
799
800 cv->cd(1);
801
802 if (!listOfObjects.empty()) {
803
804 if (master == NULL) {
805
806 master = new TH1D(MASTER.c_str(), NULL, 1000, xmin, xmax);
807
808 master->SetStats(kFALSE);
809
810 for (Int_t i = 1; i <= master->GetXaxis()->GetNbins(); ++i) {
811 master->SetBinContent(i, ymin);
812 }
813 }
814 }
815
816 if (master == NULL) {
817
818 TText* p =
new TText(0.5, 0.5,
MAKE_CSTRING(
"No data"));
819
820 p->SetTextAlign(21);
821 p->SetTextAngle(45);
822 p->Draw();
823
824 } else {
825
826 if (logx) { gPad->SetLogx(); }
827 if (logy) { gPad->SetLogy(); }
828
829 master->SetTitle(title.c_str());
830
831 master->GetXaxis()->SetRangeUser(xmin, xmax);
832
834
835 if (logx > 2) { master->GetXaxis()->SetNoExponent(); }
836
837 master->SetMinimum(ymin);
838 master->SetMaximum(ymax);
839
840 if (xLabel != "") { master->GetXaxis()->SetTitle(xLabel.c_str()); master->GetXaxis()->CenterTitle(true); }
841 if (yLabel != "") { master->GetYaxis()->SetTitle(yLabel.c_str()); master->GetYaxis()->CenterTitle(true); }
842
843 master->GetXaxis()->SetMoreLogLabels((logx == 1 && log10(xmax/xmin) < 2) ||
844 (logx > 1 && (xmax-xmin) < 2));
845
846 master->GetYaxis()->SetMoreLogLabels( logy && log10(ymax/ymin) < 2);
847 master->GetYaxis()->SetNoExponent ( logy && log10(ymax/ymin) < 2);
848
850 master->SetNdivisions(i->second, i->first.c_str());
851 }
852
853 if (xTimeFormat != "") {
854
855 master->GetXaxis()->SetTimeDisplay(1);
856
857 if (xTimeFormat == "utc") {
858 master->GetXaxis()->SetTimeFormat("#splitline{}{#splitline{%d-%m-%y}{ %H:%M}}");
859 master->GetXaxis()->SetTimeOffset(0.0, "gmt");
860 } else if (xTimeFormat == "UTC") {
861 master->GetXaxis()->SetTimeFormat("%d-%m-%y");
862 master->GetXaxis()->SetTimeOffset(0.0, "gmt");
863 } else {
864 master->GetXaxis()->SetTimeFormat(xTimeFormat.c_str());
865 }
866 }
867
868 master->Draw(option.c_str());
869 }
870
871 if (logx > 1) {
873 if (dynamic_cast<TH1*>(i->get()) != master) {
874 if (setLogX<TH1> (i->get())) {}
875 else if (setLogX<TF1> (i->get())) {}
876 else if (setLogX<TGraphErrors>(i->get())) {}
877 else if (setLogX<TGraph> (i->get())) {}
878 else if (setLogX<TMultiGraph> (i->get())) {}
879 else if (setLogX<TLine> (i->get())) {}
880 else if (setLogX<TEllipse> (i->get())) {}
881 }
882 }
883 }
884
885 if (grid.count('x') || grid.count('X')) { gPad->SetGridx(); }
886 if (grid.count('y') || grid.count('Y')) { gPad->SetGridy(); }
887
888 if (stats != -1)
889 gStyle->SetOptStat(stats);
890 else
891 gStyle->SetOptFit(kFALSE);
892
893
894 for (vector<JRootObject>::const_iterator i = listOfObjects.begin(); i != listOfObjects.end(); ++i) {
895
896 DEBUG(
"Draw " << (*i)->GetName() <<
' ' << (*i)->GetTitle() << endl);
897
898 string buffer(option);
899
900
901
902
903
904 buffer += "SAME";
905
906 TF1*
f1 =
dynamic_cast<TF1*
> (i->get());
907 TGraph*
g1 =
dynamic_cast<TGraph*
> (i->get());
908 TMultiGraph* q1 = dynamic_cast<TMultiGraph*>(i->get());
909
910 if (f1 != NULL) {
912 }
913
915 if (
g1->GetN() > 1 && drawLine)
916 buffer += "L";
917 else if (fillArea == 0 ||
918 (
dynamic_cast<TGraphErrors*
> (
g1) == NULL &&
919 dynamic_cast<TGraphAsymmErrors*
>(
g1) == NULL))
920 buffer += "P";
921 }
922
923 if (q1 != NULL) {
924
925 for (TIter i1(q1->GetListOfGraphs()); TGraph* gi = dynamic_cast<TGraph*>(i1()); ) {
926
927 string zbuf = buffer;
928
929 if (gi->GetN() > 1 && drawLine)
930 zbuf += "L";
931 else
932 zbuf += "P";
933
934 gi->Draw(zbuf.c_str());
935 }
936
937 } else {
938
939 (*i).Draw(buffer.c_str());
940 }
941 }
942
943
944
945 if (legend.is_valid()) {
946
947 if (group == 0) {
948 group = listOfObjects.size();
949 }
950
951 Ssiz_t height = listOfObjects.size()/group;
952 Ssiz_t width = 1;
953
954 for (vector<JRootObject>::const_iterator i = listOfObjects.begin(); i != listOfObjects.end(); ++i) {
955 width = max(width, getWidth(i->getLabel()));
956 }
957
958 TLegend* lg =
getLegend(width, height, legend.location, legend.factor);
959
960 for (size_t i = 0; i < listOfObjects.size(); i += group) {
961
963
964 if (dynamic_cast<TMarker*>(object.get()) == NULL &&
965 dynamic_cast<TLine*> (object.get()) == NULL &&
966 dynamic_cast<TText*> (object.get()) == NULL) {
968 }
969 }
970
971 lg->Draw();
972 }
973
974 cv->Update();
975
978 }
979
980 if (!batch) {
981 tp->Run();
982 }
983
984 return (master != NULL ? 0 : 1);
985}
#define DEBUG(A)
Message macros.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
#define MAKE_CSTRING(A)
Make C-string.
Double_t g1(const Double_t x)
Function.
Utility class to parse parameter values.
Auxiliary data structure for TObject with a user defined label.
Auxiliary class to handle multiple boolean-like I/O.
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.
const JPolynome f1(1.0, 2.0, 3.0)
Function.
std::string getLabel(const JLocation &location)
Get module label for monitoring and other applications.
void setLogarithmicX(TList *list)
Make x-axis of objects in list logarithmic (e.g. after using log10()).
void setRange(double &xmin, double &xmax, const bool logx)
Set axis range.
bool isTAttFill(const TObject *object)
Get drawing option of object.
TDirectory * getDirectory(const JRootObjectID &id)
Get TDirectory pointer.
bool isTObject(const TKey *key)
Check if given key corresponds to a TObject.
bool isTAttLine(const TObject *object)
Get drawing option of object.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
TLegend * getLegend(const Int_t width, const Int_t height, const std::string option, const Double_t factor=1.0)
Get legend.
Empty structure for specification of parser element that is initialised (i.e. does not require input)...
JProperties getProperties()
Get properties of this class.
Auxiliary data structure to list files in directory.