14 #include "NetworkTimeTagger.pb.h"
15 #include "NetworkTimeTagger.grpc.pb.h"
19 template <
typename BaseInstr,
typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>,
int>,
typename... gRPCStubs>
20 class NetworkTimeTaggerT;
22 namespace NetworkTimeTaggerTasks
24 template <
typename BaseInstr,
typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>,
int>,
typename... gRPCStubs>
32 StubPtr = InstrData->template GetStub<DynExpProto::NetworkTimeTagger::NetworkTimeTagger>();
35 auto HardwareInfoResponse =
InvokeStubFunc(StubPtr, &DynExpProto::NetworkTimeTagger::NetworkTimeTagger::Stub::GetHardwareInfo, {});
40 InstrData->MinThresholdInVolts = HardwareInfoResponse.mininputthresholdinvolts();
41 InstrData->MaxThresholdInVolts = HardwareInfoResponse.maxinputthresholdinvolts();
42 InstrData->Resolution =
Util::picoseconds(HardwareInfoResponse.timingresolutioninpicoseconds());
51 template <
typename BaseInstr,
typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>,
int>,
typename... gRPCStubs>
62 template <
typename BaseInstr,
typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>,
int>,
typename... gRPCStubs>
68 bool StreamModeChanged =
false;
73 StubPtr = InstrData->template GetStub<DynExpProto::NetworkTimeTagger::NetworkTimeTagger>();
75 StreamModeChanged = InstrData->GetStreamModeChanged();
76 StreamMode = InstrData->GetStreamMode();
77 InstrData->ClearStreamModeChanged();
80 if (StreamModeChanged)
82 DynExpProto::NetworkTimeTagger::StreamModeMessage StreamModeMsg;
83 StreamModeMsg.set_streammode(StreamMode == TimeTaggerData::StreamModeType::Counts ?
84 DynExpProto::NetworkTimeTagger::StreamModeType::Counts : DynExpProto::NetworkTimeTagger::StreamModeType::Events);
86 InvokeStubFunc(StubPtr, &DynExpProto::NetworkTimeTagger::NetworkTimeTagger::Stub::SetStreamMode, StreamModeMsg);
89 auto BufferInfoResponse =
InvokeStubFunc(StubPtr, &DynExpProto::NetworkTimeTagger::NetworkTimeTagger::Stub::GetBufferInfo, {});
90 auto StreamModeResponse =
InvokeStubFunc(StubPtr, &DynExpProto::NetworkTimeTagger::NetworkTimeTagger::Stub::GetStreamMode, {});
95 InstrData->BufferSizeInSamples = Util::NumToT<size_t>(BufferInfoResponse.buffersizeinsamples());
100 if (!InstrData->GetStreamModeChanged())
102 InstrData->SetStreamMode(StreamModeResponse.streammode() == DynExpProto::NetworkTimeTagger::StreamModeType::Counts ?
103 TimeTaggerData::StreamModeType::Counts : TimeTaggerData::StreamModeType::Events);
104 InstrData->ClearStreamModeChanged();
114 template <
typename BaseInstr,
typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>,
int>,
typename... gRPCStubs>
126 StubPtr = InstrData->template GetStub<DynExpProto::NetworkTimeTagger::NetworkTimeTagger>();
129 auto HBTResultsResponse =
InvokeStubFunc(StubPtr, &DynExpProto::NetworkTimeTagger::NetworkTimeTagger::Stub::GetHBTResults, {});
134 InstrData->GetHBTResults().Enabled = HBTResultsResponse.enabled();
135 InstrData->GetHBTResults().EventCounts = Util::NumToT<decltype(TimeTaggerData::HBTResultsType::EventCounts)>(HBTResultsResponse.eventcounts());
136 InstrData->GetHBTResults().IntegrationTime = std::chrono::microseconds(HBTResultsResponse.integrationtimeinmicroseconds());
138 InstrData->GetHBTResults().ResultVector.clear();
139 for (decltype(HBTResultsResponse.results_size()) i = 0; i < HBTResultsResponse.results_size(); ++i)
140 InstrData->GetHBTResults().ResultVector.emplace_back(HBTResultsResponse.results(i).value(), HBTResultsResponse.results(i).time());
147 template <
typename BaseInstr,
typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>,
int>,
typename... gRPCStubs>
159 StubPtr = InstrData->template GetStub<DynExpProto::NetworkTimeTagger::NetworkTimeTagger>();
162 InvokeStubFunc(StubPtr, &DynExpProto::NetworkTimeTagger::NetworkTimeTagger::Stub::ClearBuffer, {});
168 template <
typename BaseInstr,
typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>,
int>,
typename... gRPCStubs>
178 DynExpProto::NetworkTimeTagger::ConfigureInputMessage ConfigureInputMsg;
185 StubPtr = InstrData->template GetStub<DynExpProto::NetworkTimeTagger::NetworkTimeTagger>();
188 InvokeStubFunc(StubPtr, &DynExpProto::NetworkTimeTagger::NetworkTimeTagger::Stub::ConfigureInput, ConfigureInputMsg);
197 template <
typename BaseInstr,
typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>,
int>,
typename... gRPCStubs>
207 DynExpProto::NetworkTimeTagger::ExposureTimeMessage ExposureTimeMsg;
208 ExposureTimeMsg.set_exposuretimeinpicoseconds(
ExposureTime.count());
213 StubPtr = InstrData->template GetStub<DynExpProto::NetworkTimeTagger::NetworkTimeTagger>();
216 InvokeStubFunc(StubPtr, &DynExpProto::NetworkTimeTagger::NetworkTimeTagger::Stub::SetExposureTime, ExposureTimeMsg);
224 template <
typename BaseInstr,
typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>,
int>,
typename... gRPCStubs>
234 DynExpProto::NetworkTimeTagger::CoincidenceWindowMessage CoincidenceWindowMsg;
235 CoincidenceWindowMsg.set_coincidencewindowinpicoseconds(
CoincidenceWindow.count());
240 StubPtr = InstrData->template GetStub<DynExpProto::NetworkTimeTagger::NetworkTimeTagger>();
243 InvokeStubFunc(StubPtr, &DynExpProto::NetworkTimeTagger::NetworkTimeTagger::Stub::SetCoincidenceWindow, CoincidenceWindowMsg);
251 template <
typename BaseInstr,
typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>,
int>,
typename... gRPCStubs>
261 DynExpProto::NetworkTimeTagger::InputDelayMessage InputDelayMsg;
262 InputDelayMsg.set_delayinpicoseconds(
Delay.count());
267 StubPtr = InstrData->template GetStub<DynExpProto::NetworkTimeTagger::NetworkTimeTagger>();
270 InvokeStubFunc(StubPtr, &DynExpProto::NetworkTimeTagger::NetworkTimeTagger::Stub::SetInputDelay, InputDelayMsg);
278 template <
typename BaseInstr,
typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>,
int>,
typename... gRPCStubs>
288 DynExpProto::NetworkTimeTagger::HBTActiveMessage HBTActiveMsg;
289 HBTActiveMsg.set_enable(
Enable);
294 StubPtr = InstrData->template GetStub<DynExpProto::NetworkTimeTagger::NetworkTimeTagger>();
297 InvokeStubFunc(StubPtr, &DynExpProto::NetworkTimeTagger::NetworkTimeTagger::Stub::SetHBTActive, HBTActiveMsg);
305 template <
typename BaseInstr,
typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>,
int>,
typename... gRPCStubs>
315 DynExpProto::NetworkTimeTagger::ConfigureHBTMessage ConfigureHBTMsg;
316 ConfigureHBTMsg.set_binwidthinpicoseconds(
BinWidth.count());
317 ConfigureHBTMsg.set_bincount(Util::NumToT<google::protobuf::uint64>(
BinCount));
322 StubPtr = InstrData->template GetStub<DynExpProto::NetworkTimeTagger::NetworkTimeTagger>();
325 InvokeStubFunc(StubPtr, &DynExpProto::NetworkTimeTagger::NetworkTimeTagger::Stub::ConfigureHBT, ConfigureHBTMsg);
334 template <
typename BaseInstr,
typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>,
int>,
typename... gRPCStubs>
346 StubPtr = InstrData->template GetStub<DynExpProto::NetworkTimeTagger::NetworkTimeTagger>();
349 InvokeStubFunc(StubPtr, &DynExpProto::NetworkTimeTagger::NetworkTimeTagger::Stub::ResetHBT, {});
356 template <
typename BaseInstr,
typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>,
int>,
typename... gRPCStubs>
393 template <
typename BaseInstr,
typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>,
int>,
typename... gRPCStubs>
400 virtual const char*
GetParamClassTag() const noexcept
override {
return "NetworkTimeTaggerParams"; }
413 template <
typename BaseInstr,
typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>,
int>,
typename... gRPCStubs>
427 template <
typename BaseInstr,
typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>,
int>,
typename... gRPCStubs>
436 constexpr
static auto Name() noexcept {
return "Network Time Tagger"; }
446 auto InstrData = dynamic_InstrumentData_cast<NetworkTimeTaggerT>(this->GetInstrumentData());
447 return InstrData->GetMinThresholdInVolts();
452 auto InstrData = dynamic_InstrumentData_cast<NetworkTimeTaggerT>(this->GetInstrumentData());
453 return InstrData->GetMaxThresholdInVolts();
458 auto InstrData = dynamic_InstrumentData_cast<NetworkTimeTaggerT>(this->GetInstrumentData());
459 return InstrData->GetResolution();
464 auto InstrData = dynamic_InstrumentData_cast<NetworkTimeTaggerT>(this->GetInstrumentData());
465 return InstrData->GetBufferSizeInSamples();
Implementation of a gRPC client instrument to access a remote data stream meta instrument.
Data stream instrument for bidirectional gRPC communication.
virtual void ReadData(DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
DynExp's core class acts as the interface between the user interface and DynExp's internal data like ...
Refer to DynExp::ParamsBase::dispatch_tag.
Refer to DynExp::ParamsBase::dispatch_tag.
void MakeAndEnqueueTask(ArgTs &&...Args) const
Calls MakeTask() to construct a new task and subsequently enqueues the task into the instrument's tas...
Refer to ParamsBase::dispatch_tag.
Defines data for a thread belonging to a InstrumentBase instance. Refer to RunnableInstance.
const InstrumentBase::InstrumentDataGetterType InstrumentDataGetter
Getter for instrument's data. Refer to InstrumentBase::InstrumentDataGetterType.
Refer to ParamsBase::dispatch_tag.
Dummy parameter which is to be owned once by parameter classes that do not contain any other paramete...
Tag for function dispatching mechanism within this class used when derived classes are not intended t...
Base class for all tasks being processed by instruments. The class must not contain public virtual fu...
std::function< void(const TaskBase &, ExceptionContainer &)> CallbackType
Type of a callback function which is invoked when a task has finished, failed or has been aborted....
TaskBase(CallbackType CallbackFunc=nullptr) noexcept
Constructs an instrument task.
const CallbackType CallbackFunc
This callback function is called after the task has finished (either successfully or not) with a refe...
Defines the return type of task functions.
Refer to DynExp::ParamsBase::dispatch_tag.
DynExp's instrument namespace contains the implementation of DynExp instruments which extend DynExp's...
ResponseMsgType InvokeStubFunc(StubPtrType< gRPCStub > StubPtr, StubFuncPtrType< gRPCStub, RequestMsgType, ResponseMsgType > StubFunc, const RequestMsgType &RequestMsg)
Invokes a gRPC stub function as a remote procedure call. Waits for a fixed amount of time (2 seconds)...
NetworkTimeTaggerT< TimeTagger, 0, typename NetworkDataStreamInstrument::StubType, DynExpProto::NetworkTimeTagger::NetworkTimeTagger > NetworkTimeTagger
Explicit instantiation of derivable class NetworkTimeTaggerT to create the network time tagger instru...
std::shared_ptr< typename gRPCStub::Stub > StubPtrType
Alias for a pointer to a gRPC stub.
std::unique_ptr< TaskT > MakeTask(ArgTs &&...Args)
Factory function to create a task to be enqueued in an instrument's task queue.
auto dynamic_InstrumentData_cast(Util::SynchronizedPointer< From > &&InstrumentDataPtr)
Casts the data base class From into a derived InstrumentBase's (To) data class keeping the data locke...
std::unique_ptr< ParamsBase > ParamsBasePtrType
Alias for a pointer to the parameter system base class ParamsBase.
size_t ItemIDType
ID type of objects/items managed by DynExp.
std::chrono::duration< double, std::pico > picoseconds
Extends std::chrono by a duration data type for picoseconds.
Accumulates include statements to provide a precompiled header.