00001 #include "otsdaq-utilities/Visualization/VisualDataManager.h"
00002 #include "otsdaq-core/DataManager/DQMHistosConsumerBase.h"
00003 #include "otsdaq-core/DataManager/DataManager.h"
00004 #include "otsdaq-core/DataManager/DataProcessor.h"
00005 #include "otsdaq-core/ConfigurationInterface/ConfigurationManager.h"
00006
00007 #include "otsdaq-core/DataProcessorPlugins/RawDataVisualizerConsumer.h"
00008
00009 #include <iostream>
00010 #include <sstream>
00011 #include <cassert>
00012
00013 using namespace ots;
00014
00015
00016
00017 VisualDataManager::VisualDataManager(const ConfigurationTree& theXDAQContextConfigTree, const std::string& supervisorConfigurationPath)
00018 : DataManager (theXDAQContextConfigTree, supervisorConfigurationPath)
00019 , theLiveDQMHistos_ (nullptr)
00020 , theRawDataConsumer_ (nullptr)
00021
00022
00023
00024 {}
00025
00026
00027 VisualDataManager::~VisualDataManager(void)
00028 {}
00029
00030
00031 void VisualDataManager::configure(void)
00032 {
00033 DataManager::configure();
00034 }
00035
00036
00037 void VisualDataManager::halt(void)
00038 {
00039 theLiveDQMHistos_ = nullptr;
00040 DataManager::halt();
00041 }
00042
00043
00044 void VisualDataManager::pause(void)
00045 {
00046 __CFG_COUT__ << "Pausing..." << std::endl;
00047 DataManager::pause();
00048 }
00049
00050
00051 void VisualDataManager::resume(void)
00052 {
00053 DataManager::resume();
00054 }
00055
00056
00057 void VisualDataManager::start(std::string runNumber)
00058 {
00059 __CFG_COUT__ << "Start!" << __E__;
00060
00061 theLiveDQMHistos_ = nullptr;
00062 theRawDataConsumer_ = nullptr;
00063
00064 DataManager::start(runNumber);
00065
00066
00067 auto buffers = theXDAQContextConfigTree_.getNode(theConfigurationPath_+"/LinkToDataBufferTable").getChildren();
00068
00069 __CFG_COUT__ << "Buffer count " << buffers.size() << __E__;
00070
00071
00072 for(const auto& buffer:buffers)
00073 {
00074 __CFG_COUT__ << "Data Buffer Name: "<< buffer.first << std::endl;
00075 if(buffer.second.getNode(ViewColumnInfo::COL_NAME_STATUS).getValue<bool>())
00076 {
00077 std::vector<std::string> producers;
00078 std::vector<std::string> consumers;
00079 auto bufferConfigurationMap = buffer.second.getNode("LinkToDataProcessorTable").getChildren();
00080 for(const auto& bufferConfiguration: bufferConfigurationMap)
00081 {
00082 __CFG_COUT__ << "Processor id: " << bufferConfiguration.first << std::endl;
00083 if(bufferConfiguration.second.getNode(ViewColumnInfo::COL_NAME_STATUS).getValue<bool>()
00084 && (bufferConfiguration.second.getNode("ProcessorType").getValue<std::string>() == "Consumer")
00085 )
00086 {
00087 __CFG_COUT__ << "Consumer Plugin Type = " << bufferConfiguration.second.getNode("ProcessorPluginName") << __E__;
00088
00089 auto bufferIt = buffers_.at(buffer.first);
00090 for(const auto& consumer: bufferIt.consumers_)
00091 {
00092 __CFG_COUT__ << "CONSUMER PROCESSOR: " << consumer->getProcessorID() << std::endl;
00093 if(consumer->getProcessorID() == bufferConfiguration.second.getNode("ProcessorUID").getValue<std::string>())
00094 {
00095 __CFG_COUT__ << "CONSUMER: " << consumer->getProcessorID() << std::endl;
00096
00097 try
00098 {
00099 __CFG_COUT__ << "Trying for DQMHistosConsumerBase." << __E__;
00100 theLiveDQMHistos_ = dynamic_cast<DQMHistosConsumerBase*>(consumer);
00101
00102
00103 __CFG_COUT__ << "Did we succeed? " << theLiveDQMHistos_ <<
00104 __E__;
00105 }
00106 catch(...){}
00107
00108 if(theLiveDQMHistos_ == nullptr)
00109 {
00110 __CFG_COUT__ << "Trying for raw data consumer." << __E__;
00111
00112 try
00113 {
00114 theRawDataConsumer_ = dynamic_cast<RawDataVisualizerConsumer*>(consumer);
00115 }
00116 catch(...){}
00117
00118 __CFG_COUT__ << "Did we succeed? " << theRawDataConsumer_ <<
00119 __E__;
00120 }
00121
00122
00123 if(!theLiveDQMHistos_ && !theRawDataConsumer_)
00124 {
00125 __CFG_SS__ << "No valid visualizer consumer!" << __E__;
00126 __CFG_SS_THROW__;
00127 }
00128 }
00129 }
00130 }
00131 }
00132 }
00133 }
00134
00135 }
00136
00137
00138 void VisualDataManager::stop(void)
00139 {
00140 theLiveDQMHistos_ = nullptr;
00141 DataManager::stop();
00142 }
00143
00144
00145 void VisualDataManager::load(std::string fileName, std::string type)
00146 {
00147 if(type == "Histograms")
00148 theFileDQMHistos_.load(fileName);
00149
00150
00151
00152
00153
00154 }
00155
00156
00157 DQMHistosBase* VisualDataManager::getLiveDQMHistos(void)
00158 {
00159 return theLiveDQMHistos_;
00160 }
00161
00162
00163 DQMHistosBase& VisualDataManager::getFileDQMHistos(void)
00164 {
00165 return theFileDQMHistos_;
00166 }
00167
00168 const std::string& VisualDataManager::getRawData(void)
00169 {
00170
00171
00172 return theRawDataConsumer_->getLastRawDataBuffer();
00173 }
00174
00175
00177
00178
00179
00180
00181
00183
00184
00185
00186