00001 #ifndef artdaq_ArtModules_detail_RawEventQueueReader_hh
00002 #define artdaq_ArtModules_detail_RawEventQueueReader_hh
00003
00004 #include "art/Framework/Core/Frameworkfwd.h"
00005
00006 #include "art/Framework/Core/FileBlock.h"
00007 #include "art/Framework/Core/ProductRegistryHelper.h"
00008 #include "art/Framework/IO/Sources/SourceHelper.h"
00009 #include "art/Framework/IO/Sources/SourceTraits.h"
00010 #include "art/Framework/Principal/EventPrincipal.h"
00011 #include "art/Framework/Principal/RunPrincipal.h"
00012 #include "art/Framework/Principal/SubRunPrincipal.h"
00013 #include "artdaq-core/Core/GlobalQueue.hh"
00014 #include "fhiclcpp/ParameterSet.h"
00015
00016 #include <string>
00017 #include <map>
00018
00019 namespace artdaq
00020 {
00021 namespace detail
00022 {
00026 struct RawEventQueueReader
00027 {
00031 RawEventQueueReader(RawEventQueueReader const&) = delete;
00032
00037 RawEventQueueReader& operator=(RawEventQueueReader const&) = delete;
00038
00039 art::SourceHelper const pmaker;
00040 RawEventQueue& incoming_events;
00041 artdaq::detail::seconds waiting_time;
00042 bool resume_after_timeout;
00043 std::string pretend_module_name;
00044 std::string unidentified_instance_name;
00045 bool shutdownMsgReceived;
00046 bool outputFileCloseNeeded;
00047
00061 RawEventQueueReader(fhicl::ParameterSet const& ps,
00062 art::ProductRegistryHelper& help,
00063 art::SourceHelper const& pm);
00064
00073 RawEventQueueReader(fhicl::ParameterSet const& ps,
00074 art::ProductRegistryHelper& help,
00075 art::SourceHelper const& pm,
00076 art::MasterProductRegistry&) : RawEventQueueReader(ps, help, pm) {}
00077
00081 void closeCurrentFile();
00082
00087 void readFile(std::string const&, art::FileBlock*& fb);
00088
00093 bool hasMoreData() const { return (!shutdownMsgReceived); }
00094
00105 bool readNext(art::RunPrincipal* const & inR,
00106 art::SubRunPrincipal* const & inSR,
00107 art::RunPrincipal*& outR,
00108 art::SubRunPrincipal*& outSR,
00109 art::EventPrincipal*& outE);
00110
00111 std::map<Fragment::type_t, std::string> fragment_type_map_;
00112 unsigned readNext_calls_;
00113 };
00114 }
00115 }
00116
00117 namespace art
00118 {
00123 template <>
00124 struct Source_generator<artdaq::detail::RawEventQueueReader>
00125 {
00126 static constexpr bool value = true;
00127 };
00128 }
00129
00130 #endif