00001 #include "otsdaq-core/ARTDAQDataManager/ARTDAQDataManager.h"
00002 #include "otsdaq-core/DataProcessorPlugins/ARTDAQConsumer.h"
00003 #include "otsdaq-core/DataProcessorPlugins/ARTDAQProducer.h"
00004
00005 #include "artdaq/BuildInfo/GetPackageBuildInfo.hh"
00006
00007 #include <iostream>
00008 #include <cassert>
00009
00010 using namespace ots;
00011
00012
00013
00014 ARTDAQDataManager::ARTDAQDataManager(const ConfigurationTree& theXDAQContextConfigTree, const std::string& supervisorConfigurationPath)
00015 : DataManager (theXDAQContextConfigTree, supervisorConfigurationPath)
00016 {
00017 INIT_MF("BoardReaderDataManager");
00018 __COUT__ << "Begin!" << std::endl;
00019 __COUT__ << "Begin!" << std::endl;
00020 __COUT__ << "Begin!" << std::endl;
00021 __COUT__ << "Begin!" << std::endl;
00022 __COUT__ << "Begin!" << std::endl;
00023 mf::LogDebug("BoardReader") << "artdaq version " <<
00024
00025 artdaq::GetPackageBuildInfo::getPackageBuildInfo().getPackageVersion()
00026 << ", built " <<
00027 artdaq::GetPackageBuildInfo::getPackageBuildInfo().getBuildTimestamp();
00028 theMPIProcess_.init("BoardReader", artdaq::TaskType::BoardReaderTask);
00029 __COUT__ << "Initialized!" << std::endl;
00030 __COUT__ << "Initialized!" << std::endl;
00031 __COUT__ << "Initialized!" << std::endl;
00032 __COUT__ << "Initialized!" << std::endl;
00033 __COUT__ << "Initialized!" << std::endl;
00034 }
00035
00036
00037 ARTDAQDataManager::~ARTDAQDataManager(void)
00038 {}
00039
00040
00041 void ARTDAQDataManager::configure(void)
00042 {
00043 __COUT__ << "ARTDAQDataManager configuring..." << std::endl;
00044
00045 DataManager::configure();
00046
00047 __COUT__ << "ARTDAQDataManager DataManager configured now pass the MPI stuff" << std::endl;
00048 for(auto it=DataManager::buffers_.begin(); it!=DataManager::buffers_.end(); it++)
00049 for(auto& itc: it->second.consumers_)
00050 if(dynamic_cast<ARTDAQConsumer*>(itc.get()))
00051 {
00052 dynamic_cast<ARTDAQConsumer*>(itc.get())->initLocalGroup(theMPIProcess_.getRank());
00053 return;
00054 }
00055
00056 __SS__ << "There was no ARTDAQ Consumer found on a buffer!" << std::endl;
00057 __COUT__ << ss.str();
00058
00059 __COUT__ << "Looking for an ARTDAQ Producer..." << std::endl;
00060
00061 for(auto it=DataManager::buffers_.begin(); it!=DataManager::buffers_.end(); it++)
00062 for(auto& itc: it->second.producers_)
00063 if(dynamic_cast<ARTDAQProducer*>(itc.get()))
00064 {
00065 dynamic_cast<ARTDAQProducer*>(itc.get())->initLocalGroup(theMPIProcess_.getRank());
00066 return;
00067 }
00068
00069 __COUT__ << "No ARTDAQ Producers found either... so error!" << std::endl;
00070
00071 __COUT_ERR__ << ss.str();
00072 throw std::runtime_error(ss.str());
00073 }
00074
00075
00076
00077 void ARTDAQDataManager::stop(void)
00078 {
00079 DataManager::stop();
00080 }