2 #include "art/Framework/Core/EDProducer.h"
3 #include "art/Framework/Core/ModuleMacros.h"
4 #include "art/Framework/Principal/Event.h"
5 #include "art/Framework/Principal/Run.h"
6 #include "fhiclcpp/ParameterSet.h"
7 #include "messagefacility/MessageLogger/MessageLogger.h"
8 #include "artdaq-core/Data/PackageBuildInfo.hh"
15 template <std::string* instanceName,
typename... Pkgs>
18 explicit BuildInfo(fhicl::ParameterSet
const & p);
21 void beginRun(art::Run & r)
override;
22 void produce(art::Event & e)
override;
26 std::unique_ptr< std::vector<PackageBuildInfo> > packages_;
27 std::string instanceName_;
29 template <
typename... Args>
32 template <
typename Arg>
33 struct fill_packages<Arg> {
34 static void doit(std::vector<PackageBuildInfo>& packages) {
35 packages.emplace_back( Arg::getPackageBuildInfo() );
39 template <
typename Arg,
typename... Args>
40 struct fill_packages<Arg, Args...> {
41 static void doit(std::vector<PackageBuildInfo>& packages) {
42 packages.emplace_back( Arg::getPackageBuildInfo() );
43 fill_packages<Args...>::doit(packages);
49 template <std::string* instanceName,
typename... Pkgs>
52 instanceName_(ps.get<std::string>(
"instance_name", *instanceName ))
55 fill_packages<Pkgs...>::doit(*packages_);
57 produces<std::vector<PackageBuildInfo>, art::InRun>(instanceName_);
61 template <std::string* instanceName,
typename... Pkgs>
62 void BuildInfo<instanceName, Pkgs...>::beginRun(art::Run &e) {
75 auto packages_deep_copy_ptr = std::unique_ptr<std::vector<PackageBuildInfo>>(
76 new std::vector<PackageBuildInfo>(*packages_ ) );
78 e.put( std::move(packages_deep_copy_ptr), instanceName_ );
82 template <std::string* instanceName,
typename... Pkgs>
83 void BuildInfo<instanceName, Pkgs...>::produce(art::Event &)