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 size_t bytesRead;
00048
00062 RawEventQueueReader(fhicl::ParameterSet const& ps,
00063 art::ProductRegistryHelper& help,
00064 art::SourceHelper const& pm);
00065
00074 RawEventQueueReader(fhicl::ParameterSet const& ps,
00075 art::ProductRegistryHelper& help,
00076 art::SourceHelper const& pm,
00077 art::MasterProductRegistry&) : RawEventQueueReader(ps, help, pm) {}
00078
00082 void closeCurrentFile();
00083
00088 void readFile(std::string const&, art::FileBlock*& fb);
00089
00094 bool hasMoreData() const { return (!shutdownMsgReceived); }
00095
00106 bool readNext(art::RunPrincipal* const & inR,
00107 art::SubRunPrincipal* const & inSR,
00108 art::RunPrincipal*& outR,
00109 art::SubRunPrincipal*& outSR,
00110 art::EventPrincipal*& outE);
00111
00112 std::map<Fragment::type_t, std::string> fragment_type_map_;
00113 unsigned readNext_calls_;
00114 };
00115 }
00116 }
00117
00118 namespace art
00119 {
00124 template <>
00125 struct Source_generator<artdaq::detail::RawEventQueueReader>
00126 {
00127 static constexpr bool value = true;
00128 };
00129 }
00130
00131 #endif