DynExp
Highly flexible laboratory automation for dynamically changing experiments.
Loading...
Searching...
No Matches
NetworkTimeTagger.h
Go to the documentation of this file.
1// This file is part of DynExp.
2
8#pragma once
9
10#include "stdafx.h"
13
14#include "NetworkTimeTagger.pb.h"
15#include "NetworkTimeTagger.grpc.pb.h"
16
17namespace DynExpInstr
18{
19 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>, int>, typename... gRPCStubs>
20 class NetworkTimeTaggerT;
21
22 namespace NetworkTimeTaggerTasks
23 {
24 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>, int>, typename... gRPCStubs>
25 class InitTask : public NetworkDataStreamInstrumentTasks::InitTask<BaseInstr, 0, gRPCStubs...>
26 {
28 {
30 {
31 auto InstrData = dynamic_InstrumentData_cast<NetworkTimeTaggerT<BaseInstr, 0, gRPCStubs...>>(Instance.InstrumentDataGetter());
32 StubPtr = InstrData->template GetStub<DynExpProto::NetworkTimeTagger::NetworkTimeTagger>();
33 } // InstrData unlocked here.
34
35 auto HardwareInfoResponse = InvokeStubFunc(StubPtr, &DynExpProto::NetworkTimeTagger::NetworkTimeTagger::Stub::GetHardwareInfo, {});
36
37 {
38 auto InstrData = dynamic_InstrumentData_cast<NetworkTimeTaggerT<BaseInstr, 0, gRPCStubs...>>(Instance.InstrumentDataGetter());
39
40 InstrData->MinThresholdInVolts = HardwareInfoResponse.mininputthresholdinvolts();
41 InstrData->MaxThresholdInVolts = HardwareInfoResponse.maxinputthresholdinvolts();
42 InstrData->Resolution = Util::picoseconds(HardwareInfoResponse.timingresolutioninpicoseconds());
43 } // InstrData unlocked here.
44
46 }
47
49 };
50
51 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>, int>, typename... gRPCStubs>
61
62 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>, int>, typename... gRPCStubs>
63 class UpdateTask : public NetworkDataStreamInstrumentTasks::UpdateTask<BaseInstr, 0, gRPCStubs...>
64 {
66 {
68 bool StreamModeChanged = false;
70
71 {
72 auto InstrData = dynamic_InstrumentData_cast<NetworkTimeTaggerT<BaseInstr, 0, gRPCStubs...>>(Instance.InstrumentDataGetter());
73 StubPtr = InstrData->template GetStub<DynExpProto::NetworkTimeTagger::NetworkTimeTagger>();
74
75 StreamModeChanged = InstrData->GetStreamModeChanged();
76 StreamMode = InstrData->GetStreamMode();
77 InstrData->ClearStreamModeChanged();
78 } // InstrData unlocked here.
79
80 if (StreamModeChanged)
81 {
82 DynExpProto::NetworkTimeTagger::StreamModeMessage StreamModeMsg;
83 StreamModeMsg.set_streammode(StreamMode == TimeTaggerData::StreamModeType::Counts ?
84 DynExpProto::NetworkTimeTagger::StreamModeType::Counts : DynExpProto::NetworkTimeTagger::StreamModeType::Events);
85
86 InvokeStubFunc(StubPtr, &DynExpProto::NetworkTimeTagger::NetworkTimeTagger::Stub::SetStreamMode, StreamModeMsg);
87 }
88
89 auto BufferInfoResponse = InvokeStubFunc(StubPtr, &DynExpProto::NetworkTimeTagger::NetworkTimeTagger::Stub::GetBufferInfo, {});
90 auto StreamModeResponse = InvokeStubFunc(StubPtr, &DynExpProto::NetworkTimeTagger::NetworkTimeTagger::Stub::GetStreamMode, {});
91
92 {
93 auto InstrData = dynamic_InstrumentData_cast<NetworkTimeTaggerT<BaseInstr, 0, gRPCStubs...>>(Instance.InstrumentDataGetter());
94
95 InstrData->BufferSizeInSamples = Util::NumToT<size_t>(BufferInfoResponse.buffersizeinsamples());
96
97 // StreamMode might have changed in between since InstrData was unlocked during remote procedure call.
98 // Only update if this was not the case. SetStreamMode() sets the 'changed' flag which is reset by
99 // ClearStreamModeChanged(). This is necessary in order not to write the read stream mode back to the server.
100 if (!InstrData->GetStreamModeChanged())
101 {
102 InstrData->SetStreamMode(StreamModeResponse.streammode() == DynExpProto::NetworkTimeTagger::StreamModeType::Counts ?
104 InstrData->ClearStreamModeChanged();
105 }
106 } // InstrData unlocked here.
107
109 }
110
112 };
113
114 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>, int>, typename... gRPCStubs>
116 {
117 public:
119
120 private:
122 {
124 {
125 auto InstrData = dynamic_InstrumentData_cast<NetworkTimeTaggerT<BaseInstr, 0, gRPCStubs...>>(Instance.InstrumentDataGetter());
126 StubPtr = InstrData->template GetStub<DynExpProto::NetworkTimeTagger::NetworkTimeTagger>();
127 } // InstrData unlocked here.
128
129 auto HBTResultsResponse = InvokeStubFunc(StubPtr, &DynExpProto::NetworkTimeTagger::NetworkTimeTagger::Stub::GetHBTResults, {});
130
131 {
132 auto InstrData = dynamic_InstrumentData_cast<NetworkTimeTaggerT<BaseInstr, 0, gRPCStubs...>>(Instance.InstrumentDataGetter());
133
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());
137
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());
141 } // InstrData unlocked here.
142
143 return {};
144 }
145 };
146
147 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>, int>, typename... gRPCStubs>
149 {
150 public:
152
153 private:
155 {
157 {
158 auto InstrData = dynamic_InstrumentData_cast<NetworkTimeTaggerT<BaseInstr, 0, gRPCStubs...>>(Instance.InstrumentDataGetter());
159 StubPtr = InstrData->template GetStub<DynExpProto::NetworkTimeTagger::NetworkTimeTagger>();
160 } // InstrData unlocked here.
161
162 InvokeStubFunc(StubPtr, &DynExpProto::NetworkTimeTagger::NetworkTimeTagger::Stub::ClearBuffer, {});
163
164 return {};
165 }
166 };
167
168 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>, int>, typename... gRPCStubs>
170 {
171 public:
174
175 private:
177 {
178 DynExpProto::NetworkTimeTagger::ConfigureInputMessage ConfigureInputMsg;
179 ConfigureInputMsg.set_userisingedge(UseRisingEdge);
180 ConfigureInputMsg.set_thresholdinvolts(ThresholdInVolts);
181
183 {
184 auto InstrData = dynamic_InstrumentData_cast<NetworkTimeTaggerT<BaseInstr, 0, gRPCStubs...>>(Instance.InstrumentDataGetter());
185 StubPtr = InstrData->template GetStub<DynExpProto::NetworkTimeTagger::NetworkTimeTagger>();
186 } // InstrData unlocked here.
187
188 InvokeStubFunc(StubPtr, &DynExpProto::NetworkTimeTagger::NetworkTimeTagger::Stub::ConfigureInput, ConfigureInputMsg);
189
190 return {};
191 }
192
193 const bool UseRisingEdge;
194 const double ThresholdInVolts;
195 };
196
197 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>, int>, typename... gRPCStubs>
199 {
200 public:
203
204 private:
206 {
207 DynExpProto::NetworkTimeTagger::ExposureTimeMessage ExposureTimeMsg;
208 ExposureTimeMsg.set_exposuretimeinpicoseconds(ExposureTime.count());
209
211 {
212 auto InstrData = dynamic_InstrumentData_cast<NetworkTimeTaggerT<BaseInstr, 0, gRPCStubs...>>(Instance.InstrumentDataGetter());
213 StubPtr = InstrData->template GetStub<DynExpProto::NetworkTimeTagger::NetworkTimeTagger>();
214 } // InstrData unlocked here.
215
216 InvokeStubFunc(StubPtr, &DynExpProto::NetworkTimeTagger::NetworkTimeTagger::Stub::SetExposureTime, ExposureTimeMsg);
217
218 return {};
219 }
220
222 };
223
224 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>, int>, typename... gRPCStubs>
226 {
227 public:
230
231 private:
233 {
234 DynExpProto::NetworkTimeTagger::CoincidenceWindowMessage CoincidenceWindowMsg;
235 CoincidenceWindowMsg.set_coincidencewindowinpicoseconds(CoincidenceWindow.count());
236
238 {
239 auto InstrData = dynamic_InstrumentData_cast<NetworkTimeTaggerT<BaseInstr, 0, gRPCStubs...>>(Instance.InstrumentDataGetter());
240 StubPtr = InstrData->template GetStub<DynExpProto::NetworkTimeTagger::NetworkTimeTagger>();
241 } // InstrData unlocked here.
242
243 InvokeStubFunc(StubPtr, &DynExpProto::NetworkTimeTagger::NetworkTimeTagger::Stub::SetCoincidenceWindow, CoincidenceWindowMsg);
244
245 return {};
246 }
247
249 };
250
251 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>, int>, typename... gRPCStubs>
253 {
254 public:
257
258 private:
260 {
261 DynExpProto::NetworkTimeTagger::InputDelayMessage InputDelayMsg;
262 InputDelayMsg.set_delayinpicoseconds(Delay.count());
263
265 {
266 auto InstrData = dynamic_InstrumentData_cast<NetworkTimeTaggerT<BaseInstr, 0, gRPCStubs...>>(Instance.InstrumentDataGetter());
267 StubPtr = InstrData->template GetStub<DynExpProto::NetworkTimeTagger::NetworkTimeTagger>();
268 } // InstrData unlocked here.
269
270 InvokeStubFunc(StubPtr, &DynExpProto::NetworkTimeTagger::NetworkTimeTagger::Stub::SetInputDelay, InputDelayMsg);
271
272 return {};
273 }
274
276 };
277
278 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>, int>, typename... gRPCStubs>
280 {
281 public:
284
285 private:
287 {
288 DynExpProto::NetworkTimeTagger::HBTActiveMessage HBTActiveMsg;
289 HBTActiveMsg.set_enable(Enable);
290
292 {
293 auto InstrData = dynamic_InstrumentData_cast<NetworkTimeTaggerT<BaseInstr, 0, gRPCStubs...>>(Instance.InstrumentDataGetter());
294 StubPtr = InstrData->template GetStub<DynExpProto::NetworkTimeTagger::NetworkTimeTagger>();
295 } // InstrData unlocked here.
296
297 InvokeStubFunc(StubPtr, &DynExpProto::NetworkTimeTagger::NetworkTimeTagger::Stub::SetHBTActive, HBTActiveMsg);
298
299 return {};
300 }
301
302 const bool Enable;
303 };
304
305 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>, int>, typename... gRPCStubs>
307 {
308 public:
311
312 private:
314 {
315 DynExpProto::NetworkTimeTagger::ConfigureHBTMessage ConfigureHBTMsg;
316 ConfigureHBTMsg.set_binwidthinpicoseconds(BinWidth.count());
317 ConfigureHBTMsg.set_bincount(Util::NumToT<google::protobuf::uint64>(BinCount));
318
320 {
321 auto InstrData = dynamic_InstrumentData_cast<NetworkTimeTaggerT<BaseInstr, 0, gRPCStubs...>>(Instance.InstrumentDataGetter());
322 StubPtr = InstrData->template GetStub<DynExpProto::NetworkTimeTagger::NetworkTimeTagger>();
323 } // InstrData unlocked here.
324
325 InvokeStubFunc(StubPtr, &DynExpProto::NetworkTimeTagger::NetworkTimeTagger::Stub::ConfigureHBT, ConfigureHBTMsg);
326
327 return {};
328 }
329
331 const size_t BinCount;
332 };
333
334 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>, int>, typename... gRPCStubs>
336 {
337 public:
339
340 private:
342 {
344 {
345 auto InstrData = dynamic_InstrumentData_cast<NetworkTimeTaggerT<BaseInstr, 0, gRPCStubs...>>(Instance.InstrumentDataGetter());
346 StubPtr = InstrData->template GetStub<DynExpProto::NetworkTimeTagger::NetworkTimeTagger>();
347 } // InstrData unlocked here.
348
349 InvokeStubFunc(StubPtr, &DynExpProto::NetworkTimeTagger::NetworkTimeTagger::Stub::ResetHBT, {});
350
351 return {};
352 }
353 };
354 }
355
356 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>, int>, typename... gRPCStubs>
357 class NetworkTimeTaggerData : public NetworkDataStreamInstrumentData<BaseInstr, 0, gRPCStubs...>
358 {
359 friend class NetworkTimeTaggerTasks::InitTask<BaseInstr, 0, gRPCStubs...>;
360 friend class NetworkTimeTaggerTasks::UpdateTask<BaseInstr, 0, gRPCStubs...>;
361
362 public:
363 using InstrumentType = NetworkTimeTaggerT<BaseInstr, 0, gRPCStubs...>;
364
367 virtual ~NetworkTimeTaggerData() = default;
368
369 auto GetMinThresholdInVolts() const noexcept { return MinThresholdInVolts; }
370 auto GetMaxThresholdInVolts() const noexcept { return MaxThresholdInVolts; }
371 auto GetResolution() const noexcept { return Resolution; }
372 auto GetBufferSizeInSamples() const noexcept { return BufferSizeInSamples; }
373
374 private:
384
386
391 };
392
393 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>, int>, typename... gRPCStubs>
394 class NetworkTimeTaggerParams : public NetworkDataStreamInstrumentParams<BaseInstr, 0, gRPCStubs...>
395 {
396 public:
397 NetworkTimeTaggerParams(DynExp::ItemIDType ID, const DynExp::DynExpCore& Core) : NetworkDataStreamInstrumentParams<BaseInstr, 0, gRPCStubs...>(ID, Core) {}
398 virtual ~NetworkTimeTaggerParams() = default;
399
400 virtual const char* GetParamClassTag() const noexcept override { return "NetworkTimeTaggerParams"; }
401
402 private:
407
409
411 };
412
413 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>, int>, typename... gRPCStubs>
415 {
416 public:
417 using ObjectType = NetworkTimeTaggerT<BaseInstr, 0, gRPCStubs...>;
418 using ParamsType = NetworkTimeTaggerParams<BaseInstr, 0, gRPCStubs...>;
419
422
423 private:
424 virtual DynExp::ParamsBasePtrType MakeParams(DynExp::ItemIDType ID, const DynExp::DynExpCore& Core) const override { return DynExp::MakeParams<NetworkTimeTaggerConfigurator>(ID, Core); }
425 };
426
427 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>, int>, typename... gRPCStubs>
428 class NetworkTimeTaggerT : public NetworkDataStreamInstrumentT<BaseInstr, 0, gRPCStubs...>
429 {
430 public:
431 using ParamsType = NetworkTimeTaggerParams<BaseInstr, 0, gRPCStubs...>;
432 using ConfigType = NetworkTimeTaggerConfigurator<BaseInstr, 0, gRPCStubs...>;
433 using InstrumentDataType = NetworkTimeTaggerData<BaseInstr, 0, gRPCStubs...>;
434 using StubType = DynExpProto::NetworkTimeTagger::NetworkTimeTagger;
435
436 constexpr static auto Name() noexcept { return "Network Time Tagger"; }
437
438 NetworkTimeTaggerT(const std::thread::id OwnerThreadID, DynExp::ParamsBasePtrType&& Params)
439 : NetworkDataStreamInstrumentT<BaseInstr, 0, gRPCStubs...>(OwnerThreadID, std::move(Params)) {}
441
442 virtual std::string GetName() const override { return Name(); }
443
444 virtual double GetMinThresholdInVolts() const noexcept override
445 {
446 auto InstrData = dynamic_InstrumentData_cast<NetworkTimeTaggerT>(this->GetInstrumentData());
447 return InstrData->GetMinThresholdInVolts();
448 }
449
450 virtual double GetMaxThresholdInVolts() const noexcept override
451 {
452 auto InstrData = dynamic_InstrumentData_cast<NetworkTimeTaggerT>(this->GetInstrumentData());
453 return InstrData->GetMaxThresholdInVolts();
454 }
455
456 virtual Util::picoseconds GetResolution() const override
457 {
458 auto InstrData = dynamic_InstrumentData_cast<NetworkTimeTaggerT>(this->GetInstrumentData());
459 return InstrData->GetResolution();
460 }
461
462 virtual size_t GetBufferSize() const override
463 {
464 auto InstrData = dynamic_InstrumentData_cast<NetworkTimeTaggerT>(this->GetInstrumentData());
465 return InstrData->GetBufferSizeInSamples();
466 }
467
468 // Logical const-ness: const member functions to allow inserting tasks into task queue.
469 // void ResetStreamSize(DynExp::TaskBase::CallbackType) const implemented by base class NetworkDataStreamInstrument.
470 virtual void ReadData(DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override
471 {
473 DynExp::InstrumentBase::MakeAndEnqueueTask<NetworkTimeTaggerTasks::ReadTask<BaseInstr, 0, gRPCStubs...>>(CallbackFunc);
474 }
475
476 virtual void Clear(DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { DynExp::InstrumentBase::MakeAndEnqueueTask<NetworkTimeTaggerTasks::ClearTask<BaseInstr, 0, gRPCStubs...>>(CallbackFunc); }
477 virtual void ConfigureInput(bool UseRisingEdge, double ThresholdInVolts, DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { DynExp::InstrumentBase::MakeAndEnqueueTask<NetworkTimeTaggerTasks::ConfigureInputTask<BaseInstr, 0, gRPCStubs...>>(UseRisingEdge, ThresholdInVolts, CallbackFunc); }
478 virtual void SetExposureTime(Util::picoseconds ExposureTime, DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { DynExp::InstrumentBase::MakeAndEnqueueTask<NetworkTimeTaggerTasks::SetExposureTimeTask<BaseInstr, 0, gRPCStubs...>>(ExposureTime, CallbackFunc); }
479 virtual void SetCoincidenceWindow(Util::picoseconds CoincidenceWindow, DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { DynExp::InstrumentBase::MakeAndEnqueueTask<NetworkTimeTaggerTasks::SetCoincidenceWindowTask<BaseInstr, 0, gRPCStubs...>>(CoincidenceWindow, CallbackFunc); }
480 virtual void SetDelay(Util::picoseconds Delay, DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { DynExp::InstrumentBase::MakeAndEnqueueTask<NetworkTimeTaggerTasks::SetDelayTask<BaseInstr, 0, gRPCStubs...>>(Delay, CallbackFunc); }
481 virtual void SetHBTActive(bool Enable, DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { DynExp::InstrumentBase::MakeAndEnqueueTask<NetworkTimeTaggerTasks::SetHBTActiveTask<BaseInstr, 0, gRPCStubs...>>(Enable, CallbackFunc); }
482 virtual void ConfigureHBT(Util::picoseconds BinWidth, size_t BinCount, DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { DynExp::InstrumentBase::MakeAndEnqueueTask<NetworkTimeTaggerTasks::ConfigureHBTTask<BaseInstr, 0, gRPCStubs...>>(BinWidth, BinCount, CallbackFunc); }
483 virtual void ResetHBT(DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { DynExp::InstrumentBase::MakeAndEnqueueTask<NetworkTimeTaggerTasks::ResetHBTTask<BaseInstr, 0, gRPCStubs...>>(CallbackFunc); }
484
485 private:
490
492
493 virtual std::unique_ptr<DynExp::InitTaskBase> MakeInitTask() const override { return DynExp::MakeTask<NetworkTimeTaggerTasks::InitTask<BaseInstr, 0, gRPCStubs...>>(); }
494 virtual std::unique_ptr<DynExp::ExitTaskBase> MakeExitTask() const override { return DynExp::MakeTask<NetworkTimeTaggerTasks::ExitTask<BaseInstr, 0, gRPCStubs...>>(); }
495 virtual std::unique_ptr<DynExp::UpdateTaskBase> MakeUpdateTask() const override { return DynExp::MakeTask<NetworkTimeTaggerTasks::UpdateTask<BaseInstr, 0, gRPCStubs...>>(); }
496 };
497
502}
Implementation of a gRPC client instrument to access a remote data stream meta instrument.
Defines a time tagging meta instrument to assign timestamps to (e.g. photon) detection events.
Data stream instrument for bidirectional gRPC communication.
virtual void ReadData(DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
virtual DynExp::ParamsBasePtrType MakeParams(DynExp::ItemIDType ID, const DynExp::DynExpCore &Core) const override
Override to make derived classes call DynExp::MakeParams with the correct configurator type derived f...
auto GetBufferSizeInSamples() const noexcept
virtual void ResetImpl(DynExp::InstrumentDataBase::dispatch_tag< NetworkTimeTaggerData >)
NetworkTimeTaggerData(size_t BufferSizeInSamples=1)
auto GetMinThresholdInVolts() const noexcept
void ResetImpl(DynExp::InstrumentDataBase::dispatch_tag< NetworkDataStreamInstrumentData< BaseInstr, 0, gRPCStubs... > >) override final
virtual ~NetworkTimeTaggerData()=default
auto GetMaxThresholdInVolts() const noexcept
virtual const char * GetParamClassTag() const noexcept override
This function is intended to be overridden once in each derived class returning the name of the respe...
void ConfigureParamsImpl(DynExp::ParamsBase::dispatch_tag< NetworkDataStreamInstrumentParams< BaseInstr, 0, gRPCStubs... > >) override final
virtual void ConfigureParamsImpl(DynExp::ParamsBase::dispatch_tag< NetworkTimeTaggerParams >)
virtual ~NetworkTimeTaggerParams()=default
NetworkTimeTaggerParams(DynExp::ItemIDType ID, const DynExp::DynExpCore &Core)
DynExp::ParamsBase::DummyParam Dummy
virtual double GetMaxThresholdInVolts() const noexcept override
static constexpr auto Name() noexcept
virtual double GetMinThresholdInVolts() const noexcept override
virtual void ConfigureInput(bool UseRisingEdge, double ThresholdInVolts, DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
virtual void SetHBTActive(bool Enable, DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
virtual void SetExposureTime(Util::picoseconds ExposureTime, DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
virtual void ConfigureHBT(Util::picoseconds BinWidth, size_t BinCount, DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
virtual void ReadData(DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
virtual Util::picoseconds GetResolution() const override
NetworkTimeTaggerT(const std::thread::id OwnerThreadID, DynExp::ParamsBasePtrType &&Params)
DynExpProto::NetworkTimeTagger::NetworkTimeTagger StubType
virtual std::unique_ptr< DynExp::ExitTaskBase > MakeExitTask() const override
Factory function for an exit task (ExitTaskBase). Override to define the desired deinitialization tas...
virtual std::string GetName() const override
Returns the name of this Object type.
virtual void SetDelay(Util::picoseconds Delay, DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
virtual void SetCoincidenceWindow(Util::picoseconds CoincidenceWindow, DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
virtual std::unique_ptr< DynExp::InitTaskBase > MakeInitTask() const override
Factory function for an init task (InitTaskBase). Override to define the desired initialization task ...
void ResetImpl(DynExp::Object::dispatch_tag< NetworkDataStreamInstrumentT< BaseInstr, 0, gRPCStubs... > >) override final
virtual void Clear(DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
virtual void ResetHBT(DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
virtual std::unique_ptr< DynExp::UpdateTaskBase > MakeUpdateTask() const override
Factory function for an update task (UpdateTaskBase). Override to define the desired update task in d...
virtual size_t GetBufferSize() const override
virtual void ResetImpl(DynExp::Object::dispatch_tag< NetworkTimeTaggerT >)
virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance &Instance) override
Runs the task. Override RunChild() to define a derived task's action(s). Any exception leaving RunChi...
ClearTask(CallbackType CallbackFunc) noexcept
ConfigureHBTTask(Util::picoseconds BinWidth, size_t BinCount, CallbackType CallbackFunc) noexcept
virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance &Instance) override
Runs the task. Override RunChild() to define a derived task's action(s). Any exception leaving RunChi...
ConfigureInputTask(bool UseRisingEdge, double ThresholdInVolts, CallbackType CallbackFunc) noexcept
virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance &Instance) override
Runs the task. Override RunChild() to define a derived task's action(s). Any exception leaving RunChi...
virtual void ExitFuncImpl(DynExp::ExitTaskBase::dispatch_tag< ExitTask >, DynExp::InstrumentInstance &Instance)
void ExitFuncImpl(DynExp::ExitTaskBase::dispatch_tag< NetworkDataStreamInstrumentTasks::ExitTask< BaseInstr, 0, gRPCStubs... > >, DynExp::InstrumentInstance &Instance) override final
void InitFuncImpl(DynExp::InitTaskBase::dispatch_tag< NetworkDataStreamInstrumentTasks::InitTask< BaseInstr, 0, gRPCStubs... > >, DynExp::InstrumentInstance &Instance) override final
virtual void InitFuncImpl(DynExp::InitTaskBase::dispatch_tag< InitTask >, DynExp::InstrumentInstance &Instance)
virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance &Instance) override
Runs the task. Override RunChild() to define a derived task's action(s). Any exception leaving RunChi...
ReadTask(CallbackType CallbackFunc) noexcept
ResetHBTTask(CallbackType CallbackFunc) noexcept
virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance &Instance) override
Runs the task. Override RunChild() to define a derived task's action(s). Any exception leaving RunChi...
SetCoincidenceWindowTask(Util::picoseconds CoincidenceWindow, CallbackType CallbackFunc) noexcept
virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance &Instance) override
Runs the task. Override RunChild() to define a derived task's action(s). Any exception leaving RunChi...
SetDelayTask(Util::picoseconds Delay, CallbackType CallbackFunc) noexcept
virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance &Instance) override
Runs the task. Override RunChild() to define a derived task's action(s). Any exception leaving RunChi...
SetExposureTimeTask(Util::picoseconds ExposureTime, CallbackType CallbackFunc) noexcept
virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance &Instance) override
Runs the task. Override RunChild() to define a derived task's action(s). Any exception leaving RunChi...
virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance &Instance) override
Runs the task. Override RunChild() to define a derived task's action(s). Any exception leaving RunChi...
SetHBTActiveTask(bool Enable, CallbackType CallbackFunc) noexcept
void UpdateFuncImpl(DynExp::UpdateTaskBase::dispatch_tag< NetworkDataStreamInstrumentTasks::UpdateTask< BaseInstr, 0, gRPCStubs... > >, DynExp::InstrumentInstance &Instance) override final
virtual void UpdateFuncImpl(DynExp::UpdateTaskBase::dispatch_tag< UpdateTask >, DynExp::InstrumentInstance &Instance)
StreamModeType
Type to determine whether the instrument reads out all time-tagged events or summarized count rates....
Definition TimeTagger.h:134
@ Counts
Read out summarized count rates in Hz.
Definition TimeTagger.h:135
@ Events
Read out the timestamps of all time-tagged events.
Definition TimeTagger.h:136
DynExp's core class acts as the interface between the user interface and DynExp's internal data like ...
Definition DynExpCore.h:127
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...
Definition Instrument.h:627
Refer to ParamsBase::dispatch_tag.
Definition Instrument.h:146
Defines data for a thread belonging to a InstrumentBase instance. Refer to RunnableInstance.
Definition Instrument.h:772
const InstrumentBase::InstrumentDataGetterType InstrumentDataGetter
Getter for instrument's data. Refer to InstrumentBase::InstrumentDataGetterType.
Definition Instrument.h:791
Refer to ParamsBase::dispatch_tag.
Definition Object.h:2018
Dummy parameter which is to be owned once by parameter classes that do not contain any other paramete...
Definition Object.h:522
Tag for function dispatching mechanism within this class used when derived classes are not intended t...
Definition Object.h:349
Base class for all tasks being processed by instruments. The class must not contain public virtual fu...
Definition Instrument.h:892
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....
Definition Instrument.h:939
TaskBase(CallbackType CallbackFunc=nullptr) noexcept
Constructs an instrument task.
Definition Instrument.h:979
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.
Definition Instrument.h:824
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)...
std::shared_ptr< typename gRPCStub::Stub > StubPtrType
Alias for a pointer to a gRPC stub.
std::unique_ptr< ParamsBase > ParamsBasePtrType
Alias for a pointer to the parameter system base class ParamsBase.
Definition Object.h:1807
size_t ItemIDType
ID type of objects/items managed by DynExp.
std::unique_ptr< TaskT > MakeTask(ArgTs &&...Args)
Factory function to create a task to be enqueued in an instrument's task queue.
Definition Instrument.h:63
std::chrono::duration< double, std::pico > picoseconds
Extends std::chrono by a duration data type for picoseconds.
Definition Util.h:762
Accumulates include statements to provide a precompiled header.