otsdaq_utilities  v2_05_02_indev
VisualDataManager.cc
1 #include "otsdaq-utilities/Visualization/VisualDataManager.h"
2 #include "otsdaq/ConfigurationInterface/ConfigurationManager.h"
3 #include "otsdaq/DataManager/DQMHistosConsumerBase.h"
4 #include "otsdaq/DataManager/DataManager.h"
5 #include "otsdaq/DataManager/DataProcessor.h"
6 
7 #include "otsdaq/DataProcessorPlugins/RawDataVisualizerConsumer.h"
8 
9 #include <cassert>
10 #include <chrono> // std::chrono::seconds
11 #include <iostream>
12 #include <sstream>
13 #include <thread> // std::this_thread::sleep_for
14 
15 using namespace ots;
16 
17 //==============================================================================
18 VisualDataManager::VisualDataManager(const ConfigurationTree& theXDAQContextConfigTree,
19  const std::string& supervisorConfigurationPath)
20  : DataManager(theXDAQContextConfigTree, supervisorConfigurationPath)
21  , theLiveDQMHistos_(nullptr)
22  , theRawDataConsumer_(nullptr)
23 //, theFileDQMHistos_ (supervisorType, supervisorInstance, "VisualBuffer",
24 //"FileDQMHistos") , theFileDQMHistos_ (supervisorType, supervisorInstance,
25 //"VisualBuffer", "FileDQMHistos",0) , theFileDQMHistos_ ()
26 {
27 }
28 
29 //==============================================================================
30 VisualDataManager::~VisualDataManager(void) {}
31 
32 //==============================================================================
33 void VisualDataManager::configure(void) { DataManager::configure(); }
34 
35 //==============================================================================
36 void VisualDataManager::halt(void)
37 {
38  theLiveDQMHistos_ = nullptr;
39  DataManager::halt();
40 }
41 
42 //==============================================================================
43 void VisualDataManager::pause(void)
44 {
45  __CFG_COUT__ << "Pausing..." << std::endl;
46  DataManager::pause();
47 }
48 
49 //==============================================================================
50 void VisualDataManager::resume(void) { DataManager::resume(); }
51 
52 //==============================================================================
53 void VisualDataManager::start(std::string runNumber)
54 {
55  __CFG_COUT__ << "Start!" << __E__;
56 
57  theLiveDQMHistos_ = nullptr;
58  theRawDataConsumer_ = nullptr;
59 
60  DataManager::start(runNumber);
61 
62  auto buffers = theXDAQContextConfigTree_
63  .getNode(theConfigurationPath_ + "/LinkToDataBufferTable")
64  .getChildren();
65 
66  __CFG_COUT__ << "Buffer count " << buffers.size() << __E__;
67 
68  for(const auto& buffer : buffers)
69  {
70  __CFG_COUT__ << "Data Buffer Name: " << buffer.first << std::endl;
71  if(buffer.second.getNode(TableViewColumnInfo::COL_NAME_STATUS).getValue<bool>())
72  {
73  std::vector<std::string> producers;
74  std::vector<std::string> consumers;
75  auto bufferConfigurationMap =
76  buffer.second.getNode("LinkToDataProcessorTable").getChildren();
77  for(const auto& bufferConfiguration : bufferConfigurationMap)
78  {
79  __CFG_COUT__ << "Processor id: " << bufferConfiguration.first
80  << std::endl;
81  if(bufferConfiguration.second
82  .getNode(TableViewColumnInfo::COL_NAME_STATUS)
83  .getValue<bool>() &&
84  (bufferConfiguration.second.getNode("ProcessorType")
85  .getValue<std::string>() == "Consumer"))
86  {
87  __CFG_COUT__
88  << "Consumer Plugin Type = "
89  << bufferConfiguration.second.getNode("ProcessorPluginName")
90  << __E__;
91 
92  auto bufferIt = buffers_.at(buffer.first);
93  for(const auto& consumer : bufferIt.consumers_)
94  {
95  __CFG_COUT__
96  << "CONSUMER PROCESSOR: " << consumer->getProcessorID()
97  << std::endl;
98  if(consumer->getProcessorID() ==
99  bufferConfiguration.second.getNode("ProcessorUID")
100  .getValue<std::string>())
101  {
102  __CFG_COUT__ << "CONSUMER: " << consumer->getProcessorID()
103  << std::endl;
104 
105  try
106  {
107  __CFG_COUT__ << "Trying for DQMHistosConsumerBase."
108  << __E__;
109  theLiveDQMHistos_ =
110  dynamic_cast<DQMHistosConsumerBase*>(consumer);
111 
112  __CFG_COUT__ << "Did we succeed? " << theLiveDQMHistos_
113  << __E__;
114  }
115  catch(...)
116  {
117  } // ignore failures
118 
119  if(theLiveDQMHistos_ == nullptr)
120  {
121  __CFG_COUT__ << "Trying for raw data consumer." << __E__;
122 
123  try
124  {
125  theRawDataConsumer_ =
126  dynamic_cast<RawDataVisualizerConsumer*>(
127  consumer);
128  }
129  catch(...)
130  {
131  }
132 
133  __CFG_COUT__ << "Did we succeed? " << theRawDataConsumer_
134  << __E__;
135  }
136 
137  if(!theLiveDQMHistos_ && !theRawDataConsumer_)
138  {
139  __CFG_SS__ << "No valid visualizer consumer!" << __E__;
140  __CFG_SS_THROW__;
141  }
142  }
143  }
144  }
145  }
146  }
147  }
148 }
149 
150 //==============================================================================
151 void VisualDataManager::stop(void)
152 {
153  theLiveDQMHistos_ = nullptr;
154  DataManager::stop();
155 }
156 
157 //==============================================================================
158 void VisualDataManager::load(std::string fileName, std::string type)
159 {
160  if(type == "Histograms")
161  theFileDQMHistos_.load(fileName);
162  // else if(type == "Monicelli")
163  // theMonicelliEventAnalyzer_.load(fileName);
164  // else if(type == "Geometry")
165  // theMonicelliGeometryConverter_.loadGeometry(fileName);
166 }
167 
168 //==============================================================================
169 DQMHistosBase* VisualDataManager::getLiveDQMHistos(void) { return theLiveDQMHistos_; }
170 
171 //==============================================================================
172 DQMHistosBase& VisualDataManager::getFileDQMHistos(void) { return theFileDQMHistos_; }
173 //==============================================================================
174 const std::string& VisualDataManager::getRawData(void)
175 {
176  //__CFG_COUT__ << __E__;
177 
178  return theRawDataConsumer_->getLastRawDataBuffer();
179 }
180 
182 // const Visual3DEvents& VisualDataManager::getVisual3DEvents(void)
183 //{
184 // return theMonicelliEventAnalyzer_.getEvents();
185 //}
186 //
188 // const Visual3DGeometry& VisualDataManager::getVisual3DGeometry(void)
189 //{
190 // return theMonicelliGeometryConverter_.getGeometry();
191 //}