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 InstrParams = DynExp::dynamic_Params_cast<NetworkTimeTaggerT<BaseInstr, 0, gRPCStubs...>>(Instance.ParamsGetter());
294 auto InstrData = dynamic_InstrumentData_cast<NetworkTimeTaggerT<BaseInstr, 0, gRPCStubs...>>(Instance.InstrumentDataGetter());
295 StubPtr = InstrData->template GetStub<DynExpProto::NetworkTimeTagger::NetworkTimeTagger>();
296
297 // On the remote site, activating the HBT can take several seconds, so delay the next task a bit.
298 InstrData->EnqueuePriorityTask(DynExp::MakeTask<DynExp::DefaultTask>(nullptr,
299 std::chrono::system_clock::now() + std::chrono::milliseconds(InstrParams->HeavyOperationWaitTime)));
300 } // InstrParams and InstrData unlocked here.
301
302 InvokeStubFunc(StubPtr, &DynExpProto::NetworkTimeTagger::NetworkTimeTagger::Stub::SetHBTActive, HBTActiveMsg);
303
304 return {};
305 }
306
307 const bool Enable;
308 };
309
310 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>, int>, typename... gRPCStubs>
312 {
313 public:
316
317 private:
319 {
320 DynExpProto::NetworkTimeTagger::ConfigureHBTMessage ConfigureHBTMsg;
321 ConfigureHBTMsg.set_binwidthinpicoseconds(BinWidth.count());
322 ConfigureHBTMsg.set_bincount(Util::NumToT<google::protobuf::uint64>(BinCount));
323
325 {
326 auto InstrData = dynamic_InstrumentData_cast<NetworkTimeTaggerT<BaseInstr, 0, gRPCStubs...>>(Instance.InstrumentDataGetter());
327 StubPtr = InstrData->template GetStub<DynExpProto::NetworkTimeTagger::NetworkTimeTagger>();
328 } // InstrData unlocked here.
329
330 InvokeStubFunc(StubPtr, &DynExpProto::NetworkTimeTagger::NetworkTimeTagger::Stub::ConfigureHBT, ConfigureHBTMsg);
331
332 return {};
333 }
334
336 const size_t BinCount;
337 };
338
339 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>, int>, typename... gRPCStubs>
341 {
342 public:
344
345 private:
347 {
349 {
350 auto InstrData = dynamic_InstrumentData_cast<NetworkTimeTaggerT<BaseInstr, 0, gRPCStubs...>>(Instance.InstrumentDataGetter());
351 StubPtr = InstrData->template GetStub<DynExpProto::NetworkTimeTagger::NetworkTimeTagger>();
352 } // InstrData unlocked here.
353
354 InvokeStubFunc(StubPtr, &DynExpProto::NetworkTimeTagger::NetworkTimeTagger::Stub::ResetHBT, {});
355
356 return {};
357 }
358 };
359 }
360
361 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>, int>, typename... gRPCStubs>
362 class NetworkTimeTaggerData : public NetworkDataStreamInstrumentData<BaseInstr, 0, gRPCStubs...>
363 {
364 friend class NetworkTimeTaggerTasks::InitTask<BaseInstr, 0, gRPCStubs...>;
365 friend class NetworkTimeTaggerTasks::UpdateTask<BaseInstr, 0, gRPCStubs...>;
366
367 public:
368 using InstrumentType = NetworkTimeTaggerT<BaseInstr, 0, gRPCStubs...>;
369
372 virtual ~NetworkTimeTaggerData() = default;
373
374 auto GetMinThresholdInVolts() const noexcept { return MinThresholdInVolts; }
375 auto GetMaxThresholdInVolts() const noexcept { return MaxThresholdInVolts; }
376 auto GetResolution() const noexcept { return Resolution; }
377 auto GetBufferSizeInSamples() const noexcept { return BufferSizeInSamples; }
378
379 private:
389
391
396 };
397
398 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>, int>, typename... gRPCStubs>
399 class NetworkTimeTaggerParams : public NetworkDataStreamInstrumentParams<BaseInstr, 0, gRPCStubs...>
400 {
401 public:
402 NetworkTimeTaggerParams(DynExp::ItemIDType ID, const DynExp::DynExpCore& Core) : NetworkDataStreamInstrumentParams<BaseInstr, 0, gRPCStubs...>(ID, Core) {}
403 virtual ~NetworkTimeTaggerParams() = default;
404
405 virtual const char* GetParamClassTag() const noexcept override { return "NetworkTimeTaggerParams"; }
406
408 "HeavyOperationWaitTime", "Heavy operation wait time in ms",
409 "Wait time in ms for heavy operations on the remote site, like enabling the HBT feature of qutools time taggers.",
410 false, 4000, 0 };
411
412 private:
417
419 };
420
421 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>, int>, typename... gRPCStubs>
423 {
424 public:
425 using ObjectType = NetworkTimeTaggerT<BaseInstr, 0, gRPCStubs...>;
426 using ParamsType = NetworkTimeTaggerParams<BaseInstr, 0, gRPCStubs...>;
427
430
431 private:
432 virtual DynExp::ParamsBasePtrType MakeParams(DynExp::ItemIDType ID, const DynExp::DynExpCore& Core) const override { return DynExp::MakeParams<NetworkTimeTaggerConfigurator>(ID, Core); }
433 };
434
435 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<TimeTagger, BaseInstr>, int>, typename... gRPCStubs>
436 class NetworkTimeTaggerT : public NetworkDataStreamInstrumentT<BaseInstr, 0, gRPCStubs...>
437 {
438 public:
439 using ParamsType = NetworkTimeTaggerParams<BaseInstr, 0, gRPCStubs...>;
440 using ConfigType = NetworkTimeTaggerConfigurator<BaseInstr, 0, gRPCStubs...>;
441 using InstrumentDataType = NetworkTimeTaggerData<BaseInstr, 0, gRPCStubs...>;
442 using StubType = DynExpProto::NetworkTimeTagger::NetworkTimeTagger;
443
444 constexpr static auto Name() noexcept { return "Network Time Tagger"; }
445
446 NetworkTimeTaggerT(const std::thread::id OwnerThreadID, DynExp::ParamsBasePtrType&& Params)
447 : NetworkDataStreamInstrumentT<BaseInstr, 0, gRPCStubs...>(OwnerThreadID, std::move(Params)) {}
449
450 virtual std::string GetName() const override { return Name(); }
451
452 virtual double GetMinThresholdInVolts() const noexcept override
453 {
454 auto InstrData = dynamic_InstrumentData_cast<NetworkTimeTaggerT>(this->GetInstrumentData());
455 return InstrData->GetMinThresholdInVolts();
456 }
457
458 virtual double GetMaxThresholdInVolts() const noexcept override
459 {
460 auto InstrData = dynamic_InstrumentData_cast<NetworkTimeTaggerT>(this->GetInstrumentData());
461 return InstrData->GetMaxThresholdInVolts();
462 }
463
464 virtual Util::picoseconds GetResolution() const override
465 {
466 auto InstrData = dynamic_InstrumentData_cast<NetworkTimeTaggerT>(this->GetInstrumentData());
467 return InstrData->GetResolution();
468 }
469
470 virtual size_t GetBufferSize() const override
471 {
472 auto InstrData = dynamic_InstrumentData_cast<NetworkTimeTaggerT>(this->GetInstrumentData());
473 return InstrData->GetBufferSizeInSamples();
474 }
475
476 // Logical const-ness: const member functions to allow inserting tasks into task queue.
477 // void ResetStreamSize(DynExp::TaskBase::CallbackType) const implemented by base class NetworkDataStreamInstrument.
478 virtual void ReadData(DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override
479 {
481 DynExp::InstrumentBase::MakeAndEnqueueTask<NetworkTimeTaggerTasks::ReadTask<BaseInstr, 0, gRPCStubs...>>(std::move(CallbackFunc));
482 }
483
484 virtual void Clear(DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { DynExp::InstrumentBase::MakeAndEnqueueTask<NetworkTimeTaggerTasks::ClearTask<BaseInstr, 0, gRPCStubs...>>(std::move(CallbackFunc)); }
485 virtual void ConfigureInput(bool UseRisingEdge, double ThresholdInVolts, DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { DynExp::InstrumentBase::MakeAndEnqueueTask<NetworkTimeTaggerTasks::ConfigureInputTask<BaseInstr, 0, gRPCStubs...>>(UseRisingEdge, ThresholdInVolts, std::move(CallbackFunc)); }
486 virtual void SetExposureTime(Util::picoseconds ExposureTime, DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { DynExp::InstrumentBase::MakeAndEnqueueTask<NetworkTimeTaggerTasks::SetExposureTimeTask<BaseInstr, 0, gRPCStubs...>>(ExposureTime, std::move(CallbackFunc)); }
487 virtual void SetCoincidenceWindow(Util::picoseconds CoincidenceWindow, DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { DynExp::InstrumentBase::MakeAndEnqueueTask<NetworkTimeTaggerTasks::SetCoincidenceWindowTask<BaseInstr, 0, gRPCStubs...>>(CoincidenceWindow, std::move(CallbackFunc)); }
488 virtual void SetDelay(Util::picoseconds Delay, DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { DynExp::InstrumentBase::MakeAndEnqueueTask<NetworkTimeTaggerTasks::SetDelayTask<BaseInstr, 0, gRPCStubs...>>(Delay, std::move(CallbackFunc)); }
489 virtual void SetHBTActive(bool Enable, DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { DynExp::InstrumentBase::MakeAndEnqueueTask<NetworkTimeTaggerTasks::SetHBTActiveTask<BaseInstr, 0, gRPCStubs...>>(Enable, std::move(CallbackFunc)); }
490 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, std::move(CallbackFunc)); }
491 virtual void ResetHBT(DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { DynExp::InstrumentBase::MakeAndEnqueueTask<NetworkTimeTaggerTasks::ResetHBTTask<BaseInstr, 0, gRPCStubs...>>(std::move(CallbackFunc)); }
492
493 private:
498
500
501 virtual std::unique_ptr<DynExp::InitTaskBase> MakeInitTask() const override { return DynExp::MakeTask<NetworkTimeTaggerTasks::InitTask<BaseInstr, 0, gRPCStubs...>>(); }
502 virtual std::unique_ptr<DynExp::ExitTaskBase> MakeExitTask() const override { return DynExp::MakeTask<NetworkTimeTaggerTasks::ExitTask<BaseInstr, 0, gRPCStubs...>>(); }
503 virtual std::unique_ptr<DynExp::UpdateTaskBase> MakeUpdateTask() const override { return DynExp::MakeTask<NetworkTimeTaggerTasks::UpdateTask<BaseInstr, 0, gRPCStubs...>>(); }
504 };
505
510}
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
DynExp::ParamsBase::Param< ParamsConfigDialog::NumberType > HeavyOperationWaitTime
virtual void ConfigureParamsImpl(DynExp::ParamsBase::dispatch_tag< NetworkTimeTaggerParams >)
virtual ~NetworkTimeTaggerParams()=default
NetworkTimeTaggerParams(DynExp::ItemIDType ID, const DynExp::DynExpCore &Core)
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:675
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:813
const InstrumentBase::InstrumentDataGetterType InstrumentDataGetter
Getter for instrument's data. Refer to InstrumentBase::InstrumentDataGetterType.
Definition Instrument.h:832
Refer to ParamsBase::dispatch_tag.
Definition Object.h:2018
Tag for function dispatching mechanism within this class used when derived classes are not intended t...
Definition Object.h:349
const Object::ParamsGetterType ParamsGetter
Invoke to obtain the parameters (derived from ParamsBase) of Owner.
Definition Object.h:3710
Type owning a callback function which is invoked when a task has finished, failed,...
Definition Instrument.h:978
Base class for all tasks being processed by instruments. The class must not contain public virtual fu...
Definition Instrument.h:929
CallbackType CallbackFunc
This callback function is called after the task has finished (either successfully or not) with a poin...
TaskBase(CallbackType CallbackFunc=nullptr, std::chrono::system_clock::time_point DeferUntil={}) noexcept
Constructs an instrument task.
Defines the return type of task functions.
Definition Instrument.h:865
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
T::ParamsType * dynamic_Params_cast(ParamsBasePtrType::element_type *Params)
Casts the parameter base class to a derived Object's parameter class.
Definition Object.h:1835
std::chrono::duration< double, std::pico > picoseconds
Extends std::chrono by a duration data type for picoseconds.
Definition Util.h:622
Accumulates include statements to provide a precompiled header.