00001 #include <iostream>
00002 #include <memory>
00003 #include <boost/program_options.hpp>
00004 #include <boost/lexical_cast.hpp>
00005 #include "artdaq/DAQdata/Globals.hh"
00006 #include "artdaq/Application/TaskType.hh"
00007 #include "artdaq/Application/EventBuilderApp.hh"
00008 #include "artdaq/Application/LoadParameterSet.hh"
00009 #include "artdaq/ExternalComms/MakeCommanderPlugin.hh"
00010 #include "artdaq/Application/MPI2/MPISentry.hh"
00011 #include "artdaq/DAQrate/quiet_mpi.hh"
00012 #include "artdaq/BuildInfo/GetPackageBuildInfo.hh"
00013 #include "cetlib_except/exception.h"
00014
00015 int main(int argc, char* argv[])
00016 {
00017
00018
00019 int const wanted_threading_level{ MPI_THREAD_MULTIPLE };
00020 MPI_Comm local_group_comm;
00021 std::unique_ptr<artdaq::MPISentry> mpiSentry;
00022
00023 try
00024 {
00025 mpiSentry.reset(new artdaq::MPISentry(&argc, &argv, wanted_threading_level, artdaq::TaskType::EventBuilderTask, local_group_comm));
00026 }
00027 catch (cet::exception& errormsg)
00028 {
00029 TLOG_ERROR("EventBuilderMain") << errormsg << TLOG_ENDL;
00030 TLOG_ERROR("EventBuilderMain") << "MPISentry error encountered in EventBuilderMain; exiting..." << TLOG_ENDL;
00031 throw errormsg;
00032 }
00033
00034 fhicl::ParameterSet config = LoadParameterSet(argc, argv);
00035 app_name = config.get<std::string>("application_name", "EventBuilder");
00036 std::string mf_app_name = artdaq::setMsgFacAppName(app_name, config.get<int>("id"));
00037 artdaq::configureMessageFacility(mf_app_name.c_str());
00038 TLOG_DEBUG(app_name + "Main") << "Setting application name to " << mf_app_name << TLOG_ENDL;
00039
00040
00041 TLOG_INFO(app_name + "Main") << "artdaq version " <<
00042 artdaq::GetPackageBuildInfo::getPackageBuildInfo().getPackageVersion()
00043 << ", built " <<
00044 artdaq::GetPackageBuildInfo::getPackageBuildInfo().getBuildTimestamp() << TLOG_ENDL;
00045
00046
00047 artdaq::EventBuilderApp evb_app(mpiSentry->rank(), app_name);
00048
00049 TLOG_DEBUG(app_name + "Main") << "Creating EventBuilder Commander plugin" << TLOG_ENDL;
00050 auto commander = artdaq::MakeCommanderPlugin(config, evb_app);
00051
00052 TLOG_INFO(app_name + "Main") << "Running Commmander Server" << TLOG_ENDL;
00053 commander->run_server();
00054 TLOG_INFO(app_name + "Main") << "Commandable Server ended, exiting..." << TLOG_ENDL;
00055 }