otsdaq  v2_04_01
ARTDAQDataManager.cc
1 #include "../ARTDAQDataManager/ARTDAQDataManager.h"
2 
3 #include "otsdaq-core/DataProcessorPlugins/ARTDAQConsumer.h"
4 #include "otsdaq-core/DataProcessorPlugins/ARTDAQProducer.h"
5 
6 #include "artdaq/BuildInfo/GetPackageBuildInfo.hh"
7 
8 #include <cassert>
9 #include <iostream>
10 
11 using namespace ots;
12 
13 //========================================================================================================================
14 ARTDAQDataManager::ARTDAQDataManager(const ConfigurationTree& theXDAQContextConfigTree,
15  const std::string& supervisorConfigurationPath)
16  : DataManager(theXDAQContextConfigTree, supervisorConfigurationPath)
17 {
18  INIT_MF("BoardReaderDataManager");
19  __CFG_COUT__ << "Constructor." << __E__;
20 
21  std::string name = "BoardReader";
22 
23  __CFG_MCOUT__("artdaq version " <<
24  // mf::LogDebug(supervisorApplicationUID_) << " artdaq version " <<
25  artdaq::GetPackageBuildInfo::getPackageBuildInfo().getPackageVersion()
26  << ", built "
27  << artdaq::GetPackageBuildInfo::getPackageBuildInfo()
28  .getBuildTimestamp());
29 
30  INIT_MF((name + "App").c_str());
31 
32  // artdaq::configureMessageFacility("boardreader");
33  // artdaq::configureMessageFacility(name.c_str());
34 
35  __CFG_COUT__ << "MF initialized" << __E__;
36 
37  rank_ = Configurable::getApplicationLID();
38 
39  __CFG_COUTV__(rank_);
40 
41  unsigned short port = 5100;
42 
43  // artdaq::setMsgFacAppName(name, port);
44 
45  // create the BoardReaderApp
46  // artdaq::BoardReaderApp br_app(local_group_comm, name);
47  __CFG_COUT__ << "END" << __E__;
48 
49  __CFG_COUT__ << "Constructed." << __E__;
50 }
51 
52 //========================================================================================================================
53 ARTDAQDataManager::~ARTDAQDataManager(void) {}
54 
55 //========================================================================================================================
56 void ARTDAQDataManager::configure(void)
57 {
58  __CFG_COUT__ << "ARTDAQDataManager configuring..." << __E__;
59 
60  DataManager::configure();
61 
62  // find the ARTDAQ processor (can only be 1)
63  // and initialize with rank info
64 
65  __CFG_COUT__ << "ARTDAQDataManager DataManager configured now pass the MPI stuff"
66  << __E__;
67  for(auto it = DataManager::buffers_.begin(); it != DataManager::buffers_.end(); it++)
68  for(auto& consumer : it->second.consumers_)
69  if(dynamic_cast<ARTDAQConsumer*>(consumer))
70  {
71  __CFG_COUT__ << "Found an ARTDAQ Consumer: " << consumer->getProcessorID()
72  << __E__;
73 
74  dynamic_cast<ARTDAQConsumer*>(consumer)->initLocalGroup(rank_);
75  return; // There can only be 1 ARTDAQConsumer for each
76  // ARTDAQDataManager!!!!!!!
77  }
78 
79  __CFG_SS__ << "There was no ARTDAQ Consumer found on a buffer!" << __E__;
80  __CFG_COUT__ << ss.str();
81 
82  __CFG_COUT__ << "Looking for an ARTDAQ Producer..." << __E__;
83 
84  for(auto it = DataManager::buffers_.begin(); it != DataManager::buffers_.end(); it++)
85  for(auto& producer : it->second.producers_)
86  if(dynamic_cast<ARTDAQProducer*>(producer))
87  {
88  __CFG_COUT__ << "Found an ARTDAQ Producer: " << producer->getProcessorID()
89  << __E__;
90 
91  dynamic_cast<ARTDAQProducer*>(producer)->initLocalGroup(rank_);
92  return; // There can only be 1 ARTDAQProducer for each
93  // ARTDAQDataManager!!!!!!!
94  }
95 
96  ss << "No ARTDAQ Producers found either... so error!" << __E__;
97  __CFG_COUT__ << ss.str();
98 
99  {
100  __CFG_SS__;
101  DataManager::dumpStatus((std::ostream*)&ss);
102  __COUT__ << ss.str() << __E__;
103  }
104 
105  __CFG_COUT_ERR__ << ss.str();
106  __CFG_SS_THROW__;
107 } // end configure()
108 
109 //========================================================================================================================
110 void ARTDAQDataManager::stop(void) { DataManager::stop(); } // end stop()