52#include <system_error>
55#if defined(R__LINUX) || defined(R__MACOSX)
59#include <nlohmann/json.hpp>
83size_t CurrentThreadStackSize()
88 if (pthread_getattr_np(pthread_self(), &
attr) == 0) {
89 pthread_attr_getstacksize(&
attr, &
size);
90 pthread_attr_destroy(&
attr);
93#elif defined(R__MACOSX)
94 return pthread_get_stacksize_np(pthread_self());
121REveManager::REveManager()
123 fExcHandler(nullptr), fVizDB(nullptr), fVizDBReplace(
kTRUE), fVizDBUpdate(
kTRUE), fGeometries(nullptr),
124 fGeometryAliases(nullptr),
132 throw eh +
"There can be only one REve!";
205 fWebWindow->SetDefaultPage(
"file:rootui5sys/eve7/index.html");
207 const char *gl_viewer =
gEnv->
GetValue(
"WebEve.GLViewer",
"RCore");
208 const char *gl_dblclick =
gEnv->
GetValue(
"WebEve.DblClick",
"Off");
211 fWebWindow->SetUserArgs(
Form(
"{ GLViewer: \"%s\", DblClick: \"%s\", HTimeout: %d, TableRowHeight: %d }", gl_viewer,
212 gl_dblclick, htimeout, table_row_height));
214 if (strcmp(gl_viewer,
"RCore") == 0)
219 [
this](
unsigned connid,
const std::string &arg) {
WindowData(connid, arg); },
289 printf(
"REveManager::RegisterRedraw3D() obsolete\n");
298 printf(
"REveManager::DoRedraw3D() obsolete\n");
306 printf(
"REveManager::FullRedraw3D() obsolete\n");
327 if (parent ==
nullptr) {
370 static const REveException eh(
"REveManager::AssignElementId ");
373 throw eh +
"ElementId map is full.";
395 nlohmann::json msg = {};
396 msg[
"content"] =
"BrowseElement";
421 const std::vector<std::string> &viewers)
423 std::string
dest(url);
425 dest =
gEnv->
GetValue(
"WebEve.ImageGatorUrl",
"http://localhost:3000/capture");
427 nlohmann::json msg = {};
429 msg[
"content"] =
"GrabImage";
430 msg[
"event_id"] = std::string(event_id);
432 msg[
"scale"] = scale;
433 msg[
"viewers"] = viewers;
448 sel->RemoveImpliedSelectedReferencesTo(el);
452 Error(
"REveManager::PreDeleteElement",
"ImpliedSelected not zero (%d) after cleanup of selections.",
460 if (it->second == el) {
464 Error(
"PreDeleteElement",
"element ptr in ElementIdMap does not match the argument element.");
466 Error(
"PreDeleteElement",
"element id %u was not registered in ElementIdMap.", el->
fElementId);
468 Error(
"PreDeleteElement",
"element with 0 ElementId passed in.");
490 model->IncDenyDestroy();
491 model->SetRnrChildren(
kFALSE);
511 model->IncDenyDestroy();
512 model->SetRnrChildren(
kFALSE);
575 Error(
"SaveVizDB",
"filename does not match required format '(.+)\\.\\w+'.");
582 std::ofstream out(exp_filename, std::ios::out | std::ios::trunc);
583 out <<
"void " << re[1] <<
"()\n";
585 out <<
" REveManager::Create();\n";
596 var_name.
Form(
"x%03d", var_id++);
619 printf(
"REveManager::GetGeometry loading: '%s' -> '%s'.\n",
filename.Data(), exp_filename.
Data());
627 Warning(
"REveManager::GetGeometry",
"TGeoManager is locked ... unlocking it.");
631 throw eh +
"TGeoManager::Import() failed for '" + exp_filename +
"'.";
641 TFile f(exp_filename,
"READ");
647 while ((vol = (
TGeoVolume *)next()) !=
nullptr) {
673 throw eh +
"geometry alias '" + alias +
"' not registered.";
704 fWebWindow->SetRequireAuthKey(requireAuthKey);
723 gROOT->ResetClassSaved();
732 fWebWindow->GetServer()->AddLocation(locationName.c_str(), path.c_str());
784 class XThreadTimer :
public TTimer {
785 std::function<void()> foo_;
787 XThreadTimer(std::function<
void()>
f) : foo_(
f)
802 new XThreadTimer(func);
827 static constexpr size_t kMinStackSize = 1024 * 1024;
829 size_t stack_size = CurrentThreadStackSize();
830 if (stack_size == 0 || stack_size >= kMinStackSize) {
836 std::exception_ptr exc;
839 thrd = std::thread([
this, connid, &exc] {
841 pthread_setname_np(pthread_self(),
"eve_connect");
846 exc = std::current_exception();
849 }
catch (
const std::system_error &
e) {
851 "could not start streaming thread (%s), streaming in the web-server thread with stack size %zu",
852 e.what(), stack_size);
858 std::rethrow_exception(exc);
874 printf(
"connection established %u\n", connid);
882 printf(
"\nEVEMNG ............. streaming the world scene.\n");
898 printf(
"\nEVEMNG ............. streaming scene %s [%s]\n", scene->
GetCTitle(), scene->
GetCName());
903 printf(
" sending json, len = %d\n", (
int)scene->
fOutputJson.size());
925 if (i->fId == connid) {
932 printf(
"error, connection not found!");
934 printf(
"connection closed %u\n", connid);
977 if (conn.fId == connid) {
985 R__LOG_ERROR(
REveLog()) <<
"Internal error - no connection with id " << connid <<
" found";
990 if (arg.compare(
"__REveDoneChanges") == 0)
996 if (conn.fId == connid) {
1021 R__LOG_INFO(
REveLog()) <<
"REveManager::WindowData, file dialog is not allowed in restriced public mode";
1029 else if (arg.compare(0, 11,
"SETCHANNEL:") == 0) {
1030 std::string s = arg.substr(11);
1031 auto p = s.find(
",");
1032 int eveid = std::stoi(s.substr(0,
p));
1033 int chid = std::stoi(s.substr(
p+1));
1042 nlohmann::json cj = nlohmann::json::parse(arg);
1044 ::Info(
"REveManager::WindowData",
"MIR test %s\n", cj.dump().c_str());
1046 std::string cmd = cj[
"mir"];
1047 int id = cj[
"fElementId"];
1048 std::string ctype = cj[
"class"];
1059 fMIRqueue.push(std::make_shared<MIR>(cmd,
id, ctype, connid));
1062 std::cout <<
"Warning, REveManager::ScheduleMIR(). queue size " <<
fMIRqueue.size() << std::endl;
1075 ::Info(
"REveManager::ExecuteCommand",
"MIR cmd %s", mir->fCmd.c_str());
1077 std::string tag = mir->fCtype +
"::<to-be-determined>";
1081 if ( ! el)
throw eh +
"Element with id " + mir->fId +
" not found";
1083 static const std::regex cmd_re(
"^(\\w[\\w\\d]*)\\(\\s*(.*)\\s*\\)\\s*;?\\s*$", std::regex::optimize);
1085 std::regex_search(mir->fCmd,
m, cmd_re);
1087 throw eh +
"Command string parse error: '" + mir->fCmd +
"'.";
1089 static const TClass *elem_cls = TClass::GetClass<REX::REveElement>();
1093 throw eh +
"Class '" + mir->fCtype +
"' not found.";
1095 void *el_casted = call_cls->
DynamicCast(elem_cls, el,
false);
1097 throw eh +
"Dynamic cast from REveElement to '" + mir->fCtype +
"' failed.";
1099 tag = mir->fCtype +
"::" +
m.str(1);
1101 std::shared_ptr<TMethodCall> mc;
1111 throw eh +
"Can not find TMethod matching '" +
m.str(1) +
"'.";
1112 mc = std::make_shared<TMethodCall>(meth);
1119 mc->Execute(el_casted,
m.str(2).c_str());
1133 }
catch (std::exception &
e) {
1170 nlohmann::json arr = nlohmann::json::array();
1182 nlohmann::json msg = {};
1184 msg[
"content"] =
"Motion";
1188 std::string
data = msg.dump();
1199 nlohmann::json jobj = {};
1200 jobj[
"content"] =
"BeginChanges";
1213 jobj[
"content"] =
"EndChanges";
1217 constexpr static std::array<const char *, numLevels> sTag{
1218 {
"{unset-error-level please report}",
"FATAL",
"Error",
"Warning",
"Info",
"Debug"}};
1220 jobj[
"log"] = nlohmann::json::array();
1221 std::stringstream strm;
1224 nlohmann::json item = {};
1225 item[
"lvl"] = entry.fLevel;
1226 int cappedLevel = std::min(
static_cast<int>(entry.fLevel), numLevels - 1);
1227 strm <<
"Server " << sTag[cappedLevel] <<
":";
1229 if (!entry.fLocation.fFuncName.empty())
1230 strm <<
" " << entry.fLocation.fFuncName;
1231 strm <<
" " << entry.fMessage;
1232 item[
"msg"] = strm.str();
1233 jobj[
"log"].push_back(item);
1244#if defined(R__LINUX)
1245 pthread_setname_np(pthread_self(),
"mir_exec");
1261 std::shared_ptr<MIR> mir =
fMIRqueue.front();
1290 scene->RemoveSubscriber(mir->fConnId);
1295 scene->AddSubscriber(std::make_unique<REveClient>(mir->fConnId,
fWebWindow));
1296 scene->StreamElements();
1297 Send(mir->fConnId, scene->fOutputJson);
1298 if (scene->fTotalBinarySize > 0)
1299 SendBinary(mir->fConnId, &scene->fOutputBinary[0], scene->fTotalBinarySize);
1358 if (s && s->IsChanged())
1380 if (conn.fId == cinnId)
1398 printf(
"EVE URL %s\n", url.c_str());
1463#if defined(_MSC_VER)
1514 Info(
"Handle",
"Exception %s",
ex->what());
thread_local std::vector< ROOT::RLogEntry > gEveLogEntries
thread_local MIR_TL_Data_t gMIRData
#define R__LOG_ERROR(...)
static void update(gsl_integration_workspace *workspace, double a1, double b1, double area1, double error1, double a2, double b2, double area2, double error2)
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
R__EXTERN TApplication * gApplication
void DefaultErrorHandler(Int_t level, Bool_t abort_bool, const char *location, const char *msg)
The default error handler function.
void Info(const char *location, const char *msgfmt,...)
Use this function for informational messages.
void Error(const char *location, const char *msgfmt,...)
Use this function in case an error occurred.
void Warning(const char *location, const char *msgfmt,...)
Use this function in warning situations.
ErrorHandlerFunc_t SetErrorHandler(ErrorHandlerFunc_t newhandler)
Set an errorhandler function. Returns the old handler.
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t dest
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char filename
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t sel
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize id
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t UChar_t len
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t attr
R__EXTERN TGeoManager * gGeoManager
R__EXTERN TGeoIdentity * gGeoIdentity
R__EXTERN TVirtualMutex * gInterpreterMutex
#define R__LOCKGUARD_CLING(mutex)
Int_t gDebug
Global variable setting the debug level. Set to 0 to disable, increase it in steps of 1 to increase t...
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
R__EXTERN TVirtualMutex * gSystemMutex
R__EXTERN TSystem * gSystem
#define R__LOCKGUARD2(mutex)
void DecDenyDestroy()
Decreases the deny-destroy count of the element.
const std::string & GetName() const
void SaveVizParams(std::ostream &out, const TString &tag, const TString &var)
Save visualization parameters for this element with given tag.
const char * GetCTitle() const
const char * GetCName() const
virtual void AddElement(REveElement *el)
Add el to the list of children.
static thread_local int stlMirError
virtual void DestroyElements()
Destroy all children of this element.
REveElement * FirstChild() const
Returns the first child element or 0 if the list is empty.
static void ClearMirContext()
Bool_t HasChildren() const
static void SetMirContext(REveElement *el)
void IncDenyDestroy()
Increases the deny-destroy count of the element.
static thread_local std::string stlMirErrorString
virtual void CopyVizParams(const REveElement *el)
Copy visualization parameters from element el.
void SetVizModel(REveElement *model)
Set visualization-parameter model element.
void SetChildClass(TClass *c)
virtual void RemoveElement(REveElement *el)
Remove el from the list of children.
virtual void PropagateVizParamsToProjecteds()
Propagate visualization parameters to dependent elements.
REveException Exception-type thrown by Eve classes.
void SetChannel(unsigned connid, int chid)
bool Emit(const RLogEntry &entry) override
Utility to stream loggs to client.
EStatus Handle(std::exception &exc) override
Handle exceptions deriving from REveException.
std::condition_variable fCV
void DisconnectEveViewer(REveViewer *)
void ScheduleMIR(const std::string &cmd, ElementId_t i, const std::string &ctype, unsigned connid)
void ClearROOTClassSaved()
Work-around uber ugly hack used in SavePrimitive and co.
void StreamToNewConnection(unsigned connid)
Register new connection and stream the world and the mandatory scenes to it.
ElementId_t fMaxElementIds
void SendToAllConnections(const std::string &data)
std::shared_ptr< ROOT::RWebWindow > fWebWindow
void RegisterGeometryAlias(const TString &alias, const TString &filename)
Register 'name' as an alias for geometry file 'filename'.
void PreDeleteElement(REveElement *element)
Called from REveElement prior to its destruction so the framework components (like object editor) can...
void ExecuteMIR(std::shared_ptr< MIR > mir)
ElementId_t fNumElementIds
REveSceneList * GetScenes() const
std::thread fMIRExecThread
void ClearAllSelections()
Clear all selection objects.
RExceptionHandler * fExcHandler
!< exception handler
REveSelection * fSelection
void AssignElementId(REveElement *element)
Assign a unique ElementId to given element.
TGeoManager * GetDefaultGeometry()
Get the default geometry.
static void ExecuteInMainThread(std::function< void()> func)
void GrabImages(std::string_view event_id, std::string_view url="", int scale=1, const std::vector< std::string > &viewers={})
Ask every connected client to grab its GL viewers and POST each image to an image collector.
void GetServerStatus(REveServerStatus &)
void SetDefaultHtmlPage(const std::string &path)
Set content of default window HTML page.
void AddLocation(const std::string &name, const std::string &path)
Register new directory to THttpServer.
void Send(unsigned connid, const std::string &data)
bool ClientConnectionsFree() const
static void Terminate()
Properly terminate global REveManager.
REveElement * FindElementById(ElementId_t id) const
Lookup ElementId in element map and return corresponding REveElement*.
void SaveVizDB(const TString &filename)
Save visualization-parameter database to file filename.
void EndChange()
Stop accepting changes and stream them.
TGeoManager * GetGeometryByAlias(const TString &alias)
Get geometry with given alias.
bool AnySceneChanged() const
Is there anything stamped and not yet streamed?
std::unordered_map< ElementId_t, REveElement * > fElementIdMap
static REveManager * Create()
If global REveManager* REX::gEve is not set initialize it.
std::unordered_map< std::string, std::shared_ptr< TMethodCall > > fMethCallMap
void WindowConnect(unsigned connid)
Process new connection from web window.
std::vector< Conn > fConnList
void AllowMultipleRemoteConnections(bool loopBack=true, bool useAuthKey=true)
Utility function to allow remote RWebWindow connections.
void SendMotionChanges()
Send transformation-only changes on the motion channel: the same websocket, outside the BeginChanges/...
REveElement * FindVizDBEntry(const TString &tag)
Find a visualization-parameter database entry corresponding to tag.
ElementId_t fLastElementId
TGeoManager * GetGeometry(const TString &filename)
Get geometry with given filename.
void ConnectEveViewer(REveViewer *)
static void ErrorHandler(Int_t level, Bool_t abort, const char *location, const char *msg)
bool fPendingSceneChanges
Changes are stamped but not yet streamed, because the clients had not acknowledged the previous scene...
REveSelection * fHighlight
std::queue< std::shared_ptr< MIR > > fMIRqueue
REveViewerList * fViewers
void LoadVizDB(const TString &filename, Bool_t replace, Bool_t update)
Load visualization-parameter database from file filename.
void DoRedraw3D()
Perform 3D redraw of scenes and viewers whose contents has changed.
void SendBinary(unsigned connid, const void *data, std::size_t len)
void AddElement(REveElement *element, REveElement *parent=nullptr)
Add an element.
void SetClientVersion(const std::string &version)
Set client version, used as prefix in scripts URL When changed, web browser will reload all related J...
void AddGlobalElement(REveElement *element, REveElement *parent=nullptr)
Add a global element, i.e.
void Redraw3D(Bool_t resetCameras=kFALSE, Bool_t dropLogicals=kFALSE)
void SceneSubscriberWaitingResponse(unsigned cinnId)
REveScene * SpawnNewScene(const char *name, const char *title="")
Create a new scene.
REveServerStatus fServerStatus
void SetHttpPublic(bool)
Restrict functionality for this server when open to public.
void RemoveElement(REveElement *element, REveElement *parent)
Remove element from parent.
virtual ~REveManager()
Destructor.
void WindowDisconnect(unsigned connid)
Process disconnect of web window.
void FullRedraw3D(Bool_t resetCameras=kFALSE, Bool_t dropLogicals=kFALSE)
Perform 3D redraw of all scenes and viewers.
REveElement * fSelectionList
REveViewer * SpawnNewViewer(const char *name, const char *title="")
Create a new GL viewer.
Bool_t InsertVizDBEntry(const TString &tag, REveElement *model, Bool_t replace, Bool_t update)
Insert a new visualization-parameter database entry.
void StreamSceneChangesToJson()
REveViewer * GetDefaultViewer() const
Get the default viewer.
REveScene * GetWorld() const
void BrowseElement(ElementId_t id)
Activate EVE browser (summary view) for specified element id.
void WindowData(unsigned connid, const std::string &arg)
Process data from web window.
void Show(const RWebDisplayArgs &args="")
Show eve manager in specified browser.
REveSceneInfo Scene in a viewer.
REveScene * GetScene() const
void EndAcceptingChanges()
void BeginAcceptingChanges()
Loop-wrapers over Scene children, element type checked on insertion.
void DestroyScenes()
Destroy all scenes and their contents.
void AddSubscriber(std::unique_ptr< REveClient > &&sub)
std::vector< char > fOutputBinary
!
void StreamRepresentationChanges()
Prepare data for sending element changes.
void SendChangesToSubscribers()
void BeginAcceptingChanges()
void StreamMotionChanges(nlohmann::json &arr)
Move every element whose only pending change is kCBTransBBox from the change list into arr,...
void EndAcceptingChanges()
void RemoveSubscriber(unsigned int)
REveSelection Container for selected and highlighted elements.
void SetIsHighlight(bool m)
static void Macro(const char *mac)
Execute macro 'mac'. Do not reload the macro.
REveViewerList List of Viewers providing common operations on REveViewer collections.
void AddElement(REveElement *el) override
Call base-class implementation.
REveViewer Reve representation of TGLViewer.
A diagnostic that can be emitted by the RLogManager.
Holds different arguments for starting browser with RWebDisplayHandle::Display() method.
static std::shared_ptr< RWebWindow > Create()
Create new RWebWindow Using default RWebWindowsManager.
static bool EmbedFileDialog(const std::shared_ptr< RWebWindow > &window, unsigned connid, const std::string &args)
Create dialog instance to use as embedded dialog inside provided widget Loads libROOTBrowserv7 and tr...
static bool IsFileDialogMessage(const std::string &msg)
Check if this could be the message send by client to start new file dialog If returns true,...
static void SetSingleConnMode(bool on=true)
Enable or disable single connection mode (default on) If enabled, one connection only with any web wi...
static void SetLoopbackMode(bool on=true)
Set loopback mode for THttpServer used for web widgets By default is on.
virtual void Terminate(Int_t status=0)
Terminate the application by call TSystem::Exit() unless application has been told to return from Run...
virtual Color_t GetLineColor() const
Return the line color.
TClass instances represent classes, structs and namespaces in the ROOT type system.
void * DynamicCast(const TClass *base, void *obj, Bool_t up=kTRUE)
Cast obj of this class type up to baseclass cl if up is true.
TMethod * GetMethodAllAny(const char *method)
Return pointer to method without looking at parameters.
static TClass * GetClass(const char *name, Bool_t load=kTRUE, Bool_t silent=kFALSE)
Static method returning pointer to TClass of the specified class name.
The color creation and management class.
virtual void GetRGB(Float_t &r, Float_t &g, Float_t &b) const
static Int_t GetColor(const char *hexcolor)
Static method returning color number for color specified by hex color string of form: "#rrggbb",...
static void SetColorThreshold(Float_t t)
This method specifies the color threshold used by GetColor to retrieve a color.
virtual Int_t GetValue(const char *name, Int_t dflt) const
Returns the integer value for a resource.
A file, usually with extension .root, that stores data and code in the form of serialized objects in ...
An identity transformation.
The manager class for any TGeo geometry.
static void UnlockGeometry()
Unlock current geometry.
TObjArray * GetListOfVolumes() const
TObjArray * GetListOfMatrices() const
static Bool_t IsLocked()
Check lock state.
static TGeoManager * Import(const char *filename, const char *name="", Option_t *option="")
static function Import a geometry from a gdml or ROOT file
static void LockGeometry()
Lock current geometry so that no other geometry can be imported.
TGeoVolume * GetTopVolume() const
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
void VisibleDaughters(Bool_t vis=kTRUE)
set visibility for daughters
void SetLineColor(Color_t lcolor) override
Set the line color.
TMap implements an associative array of (key,value) pairs using a THashTable for efficient retrieval ...
void Add(TObject *obj) override
This function may not be used (but we need to provide it since it is a pure virtual in TCollection).
virtual void SetOwnerKeyValue(Bool_t ownkeys=kTRUE, Bool_t ownvals=kTRUE)
Set ownership for keys and values.
TObject * FindObject(const char *keyname) const override
Check if a (key,value) pair exists with keyname as name of the key.
TObject * GetValue(const char *keyname) const
Returns a pointer to the value associated with keyname as name of the key.
Each ROOT class (see TClass) has a linked list of methods.
TObject * At(Int_t idx) const override
Collectable string class.
Mother of all ROOT objects.
Wrapper for PCRE library (Perl Compatible Regular Expressions).
Class used by TMap to store (key,value) pairs.
void SetValue(TObject *val)
const char * Data() const
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
void Beep(Int_t freq=-1, Int_t duration=-1, Bool_t setDefault=kFALSE)
Beep for duration milliseconds with a tone of frequency freq.
virtual Bool_t ExpandPathName(TString &path)
Expand a pathname getting rid of special shell characters like ~.
virtual int GetPid()
Get process id.
virtual void AddTimer(TTimer *t)
Add timer to list of system timers.
virtual int GetProcInfo(ProcInfo_t *info) const
Returns cpu and memory used by this process into the ProcInfo_t structure.
virtual TTimer * RemoveTimer(TTimer *t)
Remove timer from list of system timers.
Handles synchronous and a-synchronous timer events.
Namespace for ROOT features in testing.
ROOT::RLogChannel & REveLog()
Log channel for Eve diagnostics.
R__EXTERN REveManager * gEve
@ kDebug
Debug information; only useful for developers; can have added verbosity up to 255-kDebug.
std::vector< REveScene * > removedWatch
std::vector< REveScene * > addedWatch
std::time_t fTLastDisconnect
std::time_t fTLastConnect