CounterThread Node1 CounterThread + m_lowTimestamp + m_highTimestamp + m_globalLowTimestamp + m_globalHighTimestamp + CounterThread() + CounterThread() + ~CounterThread() + operator=() + CounterThread() + newEvent() + postProcess() + getLowTimestamp() + getHighTimestamp() + setAllThreadsTimestamps() Node2 CounterBase + CounterBase() + CounterBase() + ~CounterBase() + operator=() + CounterBase() + getName() + getParent() + variableExists() + getVariable() + fill() + fill() + increment() + setDenominator() + endEvent() + newEvent() # regHistogram() # regTProfile() # regHistogram() # bookGetPointer() # timeToMilliSec() Node2->Node1 Node3 MonitorBase # m_msgStream + MonitorBase() + MonitorBase() + ~MonitorBase() + operator=() + MonitorBase() + getName() + getParent() + bookGetPointer() + counterExists() + getCounter() + newEvent() + endEvent() + msg() + msg() + msgLvl() # newCounter() Node3->Node2 -m_parent Node4 MonitoredRange + MonitoredRange() + MonitoredRange() + ~MonitoredRange() + operator=() + MonitoredRange() + getName() + getParent() + bookGetPointer() + getMonitors() + addMonitor() + newEvent() Node4->Node3 -m_parent Node5 TH1 Node5->Node4 -m_cachedLifetimeHistPtr Node67 Variable - m_variableType - m_calls - m_xaccumulator - m_yaccumulator - m_weight - m_oneOverDenominator + Variable() + Variable() + ~Variable() + operator=() + Variable() + getName() + getCalls() + getAccumulator() + fill() + fill() and 6 more... Node5->Node67 -m_cacheHistoPtr Node6 std::set< uint32_t > + keys Node6->Node4 -m_seenLB Node21 std::string Node21->Node2 -m_name Node21->Node3 -m_name Node21->Node4 -m_name Node64 std::unordered_map < std::string, std:: unique_ptr< CounterBase > > Node21->Node64 +keys Node66 std::unordered_map < std::string, Variable > Node21->Node66 +keys Node21->Node67 -m_name Node64->Node3 #m_counters Node66->Node2 -m_variables Node67->Node66 +elements