tdaq-develop-2025-02-12
ARTDAQDataManager.cc
1 #include "../ARTDAQDataManager/ARTDAQDataManager.h"
2 
3 #include "otsdaq/DataProcessorPlugins/ARTDAQConsumer.h"
4 #include "otsdaq/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("." /*directory used is USER_DATA/LOG/.*/);
19 
20  __CFG_COUT__ << "Constructor." << __E__;
21 
22  std::string name = "BoardReader";
23 
24  __CFG_COUT__ << "artdaq version "
25  << artdaq::GetPackageBuildInfo::getPackageBuildInfo().getPackageVersion()
26  << ", built "
27  << artdaq::GetPackageBuildInfo::getPackageBuildInfo().getBuildTimestamp()
28  << __E__;
29 
30  // artdaq::configureMessageFacility("boardreader");
31  // artdaq::configureMessageFacility(name.c_str());
32 
33  __CFG_COUT__ << "MF initialized" << __E__;
34 
35  rank_ = Configurable::getApplicationLID();
36 
37  __CFG_COUTV__(rank_);
38 
39  // unsigned short port = 5100;
40 
41  // artdaq::setMsgFacAppName(name, port);
42 
43  // create the BoardReaderApp
44  // artdaq::BoardReaderApp br_app(local_group_comm, name);
45  __CFG_COUT__ << "END" << __E__;
46 
47  __CFG_COUT__ << "Constructed." << __E__;
48 }
49 
50 //==============================================================================
51 ARTDAQDataManager::~ARTDAQDataManager(void) {}
52 
53 //==============================================================================
55 {
56  __CFG_COUT__ << "ARTDAQDataManager configuring..." << __E__;
57 
59 
60  // find the ARTDAQ processor (can only be 1)
61  // and initialize with rank info
62 
63  __CFG_COUT__ << "ARTDAQDataManager DataManager configured now pass the MPI stuff"
64  << __E__;
65  for(auto it = DataManager::buffers_.begin(); it != DataManager::buffers_.end(); it++)
66  for(auto& consumer : it->second.consumers_)
67  if(dynamic_cast<ARTDAQConsumer*>(consumer))
68  {
69  __CFG_COUT__ << "Found an ARTDAQ Consumer: " << consumer->getProcessorID()
70  << __E__;
71 
72  dynamic_cast<ARTDAQConsumer*>(consumer)->initLocalGroup(rank_);
73  return; // There can only be 1 ARTDAQConsumer for each
74  // ARTDAQDataManager!!!!!!!
75  }
76 
77  __CFG_SS__ << "There was no ARTDAQ Consumer found on a buffer!" << __E__;
78  __CFG_COUT__ << ss.str();
79 
80  __CFG_COUT__ << "Looking for an ARTDAQ Producer..." << __E__;
81 
82  for(auto it = DataManager::buffers_.begin(); it != DataManager::buffers_.end(); it++)
83  for(auto& producer : it->second.producers_)
84  if(dynamic_cast<ARTDAQProducer*>(producer))
85  {
86  __CFG_COUT__ << "Found an ARTDAQ Producer: " << producer->getProcessorID()
87  << __E__;
88 
89  dynamic_cast<ARTDAQProducer*>(producer)->initLocalGroup(rank_);
90  return; // There can only be 1 ARTDAQProducer for each
91  // ARTDAQDataManager!!!!!!!
92  }
93 
94  ss << "No ARTDAQ Producers found either... so error!" << __E__;
95  __CFG_COUT__ << ss.str();
96 
97  {
98  __CFG_SS__;
99  DataManager::dumpStatus((std::ostream*)&ss);
100  __COUT__ << ss.str() << __E__;
101  }
102 
103  __CFG_COUT_ERR__ << ss.str();
104  __CFG_SS_THROW__;
105 } // end configure()
106 
107 //==============================================================================
108 void ARTDAQDataManager::stop(void) { DataManager::stop(); } // end stop()
< public DataConsumer, public Configurable
void configure(void)
State Machine Methods.
< public DataProducer, public Configurable
void dumpStatus(std::ostream *out=(std::ostream *)&(std::cout)) const
Definition: DataManager.cc:36
virtual void configure(void)
State Machine Methods.
Definition: DataManager.cc:65
void INIT_MF(const char *name)