DynExp
Highly flexible laboratory automation for dynamically changing experiments.
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 
17 namespace 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>
52  class ExitTask : public NetworkDataStreamInstrumentTasks::ExitTask<BaseInstr, 0, gRPCStubs...>
53  {
55  {
57  }
58 
60  };
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;
69  TimeTaggerData::StreamModeType StreamMode{};
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 ?
103  TimeTaggerData::StreamModeType::Counts : TimeTaggerData::StreamModeType::Events);
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>
115  class ReadTask : public DynExp::TaskBase
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 
366  : NetworkDataStreamInstrumentData<BaseInstr, 0, gRPCStubs...>(BufferSizeInSamples) {}
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:
376  {
379  Resolution = {};
381 
383  }
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:
404  {
406  }
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 
421  virtual ~NetworkTimeTaggerConfigurator() = default;
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...>;
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)) {}
440  virtual ~NetworkTimeTaggerT() {}
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:
487  {
489  }
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...
void ResetImpl(DynExp::InstrumentDataBase::dispatch_tag< NetworkDataStreamInstrumentData< BaseInstr, 0, gRPCStubs... >>) override final
auto GetBufferSizeInSamples() const noexcept
virtual void ResetImpl(DynExp::InstrumentDataBase::dispatch_tag< NetworkTimeTaggerData >)
NetworkTimeTaggerData(size_t BufferSizeInSamples=1)
auto GetMinThresholdInVolts() const noexcept
virtual ~NetworkTimeTaggerData()=default
auto GetMaxThresholdInVolts() const noexcept
virtual void ConfigureParamsImpl(DynExp::ParamsBase::dispatch_tag< NetworkTimeTaggerParams >)
void ConfigureParamsImpl(DynExp::ParamsBase::dispatch_tag< NetworkDataStreamInstrumentParams< BaseInstr, 0, gRPCStubs... >>) override final
virtual ~NetworkTimeTaggerParams()=default
NetworkTimeTaggerParams(DynExp::ItemIDType ID, const DynExp::DynExpCore &Core)
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...
DynExp::ParamsBase::DummyParam Dummy
virtual double GetMaxThresholdInVolts() const noexcept 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 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 std::unique_ptr< DynExp::ExitTaskBase > MakeExitTask() const override
Factory function for an exit task (ExitTaskBase). Override to define the desired deinitialization tas...
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)
void ResetImpl(DynExp::Object::dispatch_tag< NetworkDataStreamInstrumentT< BaseInstr, 0, gRPCStubs... >>) override final
DynExpProto::NetworkTimeTagger::NetworkTimeTagger StubType
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 void Clear(DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
constexpr static auto Name() noexcept
virtual std::unique_ptr< DynExp::InitTaskBase > MakeInitTask() const override
Factory function for an init task (InitTaskBase). Override to define the desired initialization task ...
virtual void ResetHBT(DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
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
virtual void InitFuncImpl(DynExp::InitTaskBase::dispatch_tag< InitTask >, DynExp::InstrumentInstance &Instance)
void InitFuncImpl(DynExp::InitTaskBase::dispatch_tag< NetworkDataStreamInstrumentTasks::InitTask< BaseInstr, 0, gRPCStubs... >>, DynExp::InstrumentInstance &Instance) override final
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
virtual void UpdateFuncImpl(DynExp::UpdateTaskBase::dispatch_tag< UpdateTask >, DynExp::InstrumentInstance &Instance)
void UpdateFuncImpl(DynExp::UpdateTaskBase::dispatch_tag< NetworkDataStreamInstrumentTasks::UpdateTask< BaseInstr, 0, gRPCStubs... >>, DynExp::InstrumentInstance &Instance) override final
StreamModeType
Type to determine whether the instrument reads out all time-tagged events or summarized count rates....
Definition: TimeTagger.h:134
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.
Definition: Instrument.h:1151
Refer to DynExp::ParamsBase::dispatch_tag.
Definition: Instrument.h:1120
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...
Definition: Instrument.h:1072
Defines the return type of task functions.
Definition: Instrument.h:824
Refer to DynExp::ParamsBase::dispatch_tag.
Definition: Instrument.h:1182
DynExp's instrument namespace contains the implementation of DynExp instruments which extend DynExp's...
Definition: Instrument.h:1254
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.
Definition: Instrument.h:63
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...
Definition: Instrument.h:810
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::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.