17#include <FairSource.h>
23#include <ext_data_clnt.hh>
35 class UcesbServerLauncher;
41 std::string_view ntuple_options,
42 std::string_view ucesb_path,
44 size_t event_struct_size);
68 template <
typename ReaderType>
69 auto AddReader(std::unique_ptr<ReaderType> reader) -> ReaderType*;
70 template <
typename ReaderType,
typename... Args>
71 auto AddReader(Args&&... args) -> ReaderType*;
73 template <
typename UnaryOp>
76 template <
typename Predicate>
80 [[deprecated(
"Please use smart pointer method to add a reader")]]
auto*
AddReader(
R3BReader* a_reader)
82 return AddReader(std::unique_ptr<R3BReader>(a_reader));
93 std::vector<std::unique_ptr<R3BReader>>
readers_;
98 std::chrono::time_point<std::chrono::system_clock>
last_start_time_ = std::chrono::system_clock::now();
117 bool Init()
override;
123 ForEachReader([](
auto& reader) { reader->SetParContainers(); });
130 int ReadEvent(
unsigned int eventID = 0)
override;
139 template <
typename ReaderType>
142 auto& reader_ref =
readers_.emplace_back(std::move(reader));
143 return static_cast<ReaderType*
>(reader_ref.get());
146 template <
typename ReaderType,
typename... Args>
149 static_assert(std::is_base_of_v<R3BReader, ReaderType>,
"The reader type must be derived from R3BReader!");
150 return AddReader(std::make_unique<ReaderType>(std::forward<Args>(args)...));
153 template <
typename UnaryOp>
162 template <
typename Predicate>
165 auto res = std::find_if(
readers_.begin(),
readers_.end(), [&pred](
auto& reader) { return pred(reader.get()); });
166 return (res ==
readers_.end()) ? nullptr : res->get();
EXT_STR_h101_t EventStructType
R3B::UcesbSource R3BUcesbSource2
UcesbSource & operator=(const UcesbSource &)=delete
void SetEventStruct(EventStructType *event_struct)
std::string ntuple_options_
void SetLMDFileName(std::string_view lmdfile_name)
std::chrono::time_point< std::chrono::system_clock > last_start_time_
R3BEventHeader * event_header_
void SetEventStructSize(size_t event_size)
bool SpecifyRunId() override
ext_data_clnt ucesb_client_
std::unique_ptr< UcesbServerLauncher > ucesb_server_launcher_
std::mutex event_reader_mutex_
void restart_ucesb_server()
void SetUcesbPath(std::string_view ucesb_path)
bool InitUnpackers() override
bool has_raw_data_printing_
auto * AddReader(R3BReader *a_reader)
void RestartUcesbServer()
void SetMaxEvents(int max_event_num)
bool ReInitUnpackers() override
UcesbStructInfo ucesb_client_struct_info_
auto FindReaderIf(Predicate pred) -> R3BReader *
void SetNTupleOptions(std::string_view ntuple_options)
ClassDefOverride(R3B::UcesbSource, 1)
void FillEventHeader(FairEventHeader *feh) override
void AllowExtraMap(UcesbMap flag)
std::string lmdfile_name_
size_t event_struct_size_
int ReadEvent(unsigned int eventID=0) override
void restart_ucesb_server_delayed()
UcesbSource(const UcesbSource &)=delete
Source_Type GetSourceType() override
int CheckMaxEventNo(int EvtEnd=0) override
std::chrono::minutes waiting_time_
void SetInfiniteRun(bool is_infinite=true)
void SetRawDataPrint(bool print_raw_data)
void SetRunID(unsigned int run_id)
void ForEachReader(UnaryOp opt)
void SetParUnpackers() override
UcesbSource & operator=(UcesbSource &&)=delete
UcesbSource(UcesbSource &&)=delete
std::vector< std::unique_ptr< R3BReader > > readers_
EventStructType * event_struct_
auto AddReader(std::unique_ptr< ReaderType > reader) -> ReaderType *