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