DynExp
Highly flexible laboratory automation for dynamically changing experiments.
NetworkTimeTaggerModule.h
Go to the documentation of this file.
1 // This file is part of DynExp.
2 
9 #pragma once
10 
11 #include "stdafx.h"
12 #include "../MetaInstruments/TimeTagger.h"
14 
15 #include "NetworkTimeTagger.grpc.pb.h"
16 
17 namespace DynExpModule
18 {
19  template <typename... gRPCServices>
20  class NetworkTimeTaggerT;
21 
22  template <typename... gRPCServices>
24  {
25  public:
27 
29  virtual ~NetworkTimeTaggerData() = default;
30 
32  {
33  // Retry a couple of times since time tagger sometimes blocks
34  // for a while due to slow operations like activating the HBT.
35  for (int NumTries = 0; true; ++NumTries)
36  {
37  try
38  {
39  return DynExp::dynamic_Object_cast<InstrType>(NetworkDataStreamInstrumentData<gRPCServices...>::GetDataStreamInstrument().get());
40  }
41  catch ([[maybe_unused]] const Util::TimeoutException& e)
42  {
43  if (NumTries < 5)
44  continue;
45  else
46  throw;
47  }
48  }
49  }
50 
51  private:
54 
55  void Init() {}
56  };
57 
58  template <typename... gRPCServices>
60  {
61  public:
63  virtual ~NetworkTimeTaggerParams() = default;
64 
65  virtual const char* GetParamClassTag() const noexcept override { return "NetworkTimeTaggerParams"; }
66 
67  private:
70 
72  };
73 
74  template <typename... gRPCServices>
76  {
77  public:
78  using ObjectType = NetworkTimeTaggerT<gRPCServices...>;
79  using ParamsType = NetworkTimeTaggerParams<gRPCServices...>;
80 
82  virtual ~NetworkTimeTaggerConfigurator() = default;
83 
84  private:
85  virtual DynExp::ParamsBasePtrType MakeParams(DynExp::ItemIDType ID, const DynExp::DynExpCore& Core) const override { return DynExp::MakeParams<NetworkTimeTaggerConfigurator>(ID, Core); }
86  };
87 
88  template <typename... gRPCServices>
89  class NetworkTimeTaggerT : public NetworkDataStreamInstrumentT<gRPCServices...>
90  {
91  public:
92  using ParamsType = NetworkTimeTaggerParams<gRPCServices...>;
93  using ConfigType = NetworkTimeTaggerConfigurator<gRPCServices...>;
94  using ModuleDataType = NetworkTimeTaggerData<gRPCServices...>;
96 
97  constexpr static auto Name() noexcept { return "Network Time Tagger"; }
98 
100  : NetworkDataStreamInstrumentT<gRPCServices...>(OwnerThreadID, std::move(Params)) {}
101  virtual ~NetworkTimeTaggerT() = default;
102 
103  virtual std::string GetName() const override { return Name(); }
104 
105  protected:
107  : public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataGetHardwareInfo, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkTimeTagger::HardwareInfoMessage>
108  {
109  using Base = gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataGetHardwareInfo, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkTimeTagger::HardwareInfoMessage>;
110  using Base::ResponseMessage;
111 
112  public:
113  CallDataGetHardwareInfo(const gRPCModule<gRPCServices...>* const OwningModule) noexcept
114  : Base::TypedCallDataBase(OwningModule, &ThisServiceType::AsyncService::RequestGetHardwareInfo) {}
115  virtual ~CallDataGetHardwareInfo() = default;
116 
117  private:
118  virtual void ProcessChildImpl(DynExp::ModuleInstance& Instance) override
119  {
120  auto StreamSizeMsg = std::make_unique<DynExpProto::NetworkTimeTagger::HardwareInfoMessage>();
121  auto ModuleData = DynExp::dynamic_ModuleData_cast<NetworkTimeTaggerT>(Instance.ModuleDataGetter());
122  auto Instrument = ModuleData->GetTimeTagger();
123 
124  ResponseMessage.set_mininputthresholdinvolts(Instrument->GetMinThresholdInVolts());
125  ResponseMessage.set_maxinputthresholdinvolts(Instrument->GetMaxThresholdInVolts());
126  ResponseMessage.set_timingresolutioninpicoseconds(Instrument->GetResolution().count());
127  }
128  };
129 
131  : public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataGetBufferInfo, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkTimeTagger::BufferInfoMessage>
132  {
133  using Base = gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataGetBufferInfo, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkTimeTagger::BufferInfoMessage>;
134  using Base::ResponseMessage;
135 
136  public:
137  CallDataGetBufferInfo(const gRPCModule<gRPCServices...>* const OwningModule) noexcept
138  : Base::TypedCallDataBase(OwningModule, &ThisServiceType::AsyncService::RequestGetBufferInfo) {}
139  virtual ~CallDataGetBufferInfo() = default;
140 
141  private:
142  virtual void ProcessChildImpl(DynExp::ModuleInstance& Instance) override
143  {
144  auto StreamSizeMsg = std::make_unique<DynExpProto::NetworkTimeTagger::BufferInfoMessage>();
145  auto ModuleData = DynExp::dynamic_ModuleData_cast<NetworkTimeTaggerT>(Instance.ModuleDataGetter());
146  auto Instrument = ModuleData->GetTimeTagger();
147 
148  ResponseMessage.set_buffersizeinsamples(Instrument->GetBufferSize());
149  }
150  };
151 
153  : public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataGetStreamMode, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkTimeTagger::StreamModeMessage>
154  {
155  using Base = gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataGetStreamMode, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkTimeTagger::StreamModeMessage>;
156  using Base::ResponseMessage;
157 
158  public:
159  CallDataGetStreamMode(const gRPCModule<gRPCServices...>* const OwningModule) noexcept
160  : Base::TypedCallDataBase(OwningModule, &ThisServiceType::AsyncService::RequestGetStreamMode) {}
161  virtual ~CallDataGetStreamMode() = default;
162 
163  private:
164  virtual void ProcessChildImpl(DynExp::ModuleInstance& Instance) override
165  {
166  auto StreamSizeMsg = std::make_unique<DynExpProto::NetworkTimeTagger::StreamModeMessage>();
167  auto ModuleData = DynExp::dynamic_ModuleData_cast<NetworkTimeTaggerT>(Instance.ModuleDataGetter());
168  auto Instrument = ModuleData->GetTimeTagger();
169  auto InstrData = DynExp::dynamic_InstrumentData_cast<DynExpInstr::TimeTagger>(Instrument->GetInstrumentData());
170 
171  ResponseMessage.set_streammode(InstrData->GetStreamMode() == DynExpInstr::TimeTaggerData::StreamModeType::Counts ?
172  DynExpProto::NetworkTimeTagger::StreamModeType::Counts : DynExpProto::NetworkTimeTagger::StreamModeType::Events);
173  }
174  };
175 
177  : public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataSetStreamMode, ThisServiceType, DynExpProto::NetworkTimeTagger::StreamModeMessage, DynExpProto::Common::VoidMessage>
178  {
179  using Base = gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataSetStreamMode, ThisServiceType, DynExpProto::NetworkTimeTagger::StreamModeMessage, DynExpProto::Common::VoidMessage>;
180  using Base::RequestMessage;
181 
182  public:
183  CallDataSetStreamMode(const gRPCModule<gRPCServices...>* const OwningModule) noexcept
184  : Base::TypedCallDataBase(OwningModule, &ThisServiceType::AsyncService::RequestSetStreamMode) {}
185  virtual ~CallDataSetStreamMode() = default;
186 
187  private:
188  virtual void ProcessChildImpl(DynExp::ModuleInstance& Instance) override
189  {
190  auto ModuleData = DynExp::dynamic_ModuleData_cast<NetworkTimeTaggerT>(Instance.ModuleDataGetter());
191  auto Instrument = ModuleData->GetTimeTagger();
192  auto InstrData = DynExp::dynamic_InstrumentData_cast<DynExpInstr::TimeTagger>(Instrument->GetInstrumentData());
193 
194  InstrData->SetStreamMode(RequestMessage.streammode() == DynExpProto::NetworkTimeTagger::StreamModeType::Counts ?
195  DynExpInstr::TimeTaggerData::StreamModeType::Counts : DynExpInstr::TimeTaggerData::StreamModeType::Events);
196  }
197  };
198 
200  : public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataClearBuffer, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::Common::VoidMessage>
201  {
202  using Base = gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataClearBuffer, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::Common::VoidMessage>;
203 
204  public:
205  CallDataClearBuffer(const gRPCModule<gRPCServices...>* const OwningModule) noexcept
206  : Base::TypedCallDataBase(OwningModule, &ThisServiceType::AsyncService::RequestClearBuffer) {}
207  virtual ~CallDataClearBuffer() = default;
208 
209  private:
210  virtual void ProcessChildImpl(DynExp::ModuleInstance& Instance) override
211  {
212  auto ModuleData = DynExp::dynamic_ModuleData_cast<NetworkTimeTaggerT>(Instance.ModuleDataGetter());
213  auto Instrument = ModuleData->GetTimeTagger();
214 
215  Instrument->Clear();
216  }
217  };
218 
220  : public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataConfigureInput, ThisServiceType, DynExpProto::NetworkTimeTagger::ConfigureInputMessage, DynExpProto::Common::VoidMessage>
221  {
222  using Base = gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataConfigureInput, ThisServiceType, DynExpProto::NetworkTimeTagger::ConfigureInputMessage, DynExpProto::Common::VoidMessage>;
223  using Base::RequestMessage;
224 
225  public:
226  CallDataConfigureInput(const gRPCModule<gRPCServices...>* const OwningModule) noexcept
227  : Base::TypedCallDataBase(OwningModule, &ThisServiceType::AsyncService::RequestConfigureInput) {}
228  virtual ~CallDataConfigureInput() = default;
229 
230  private:
231  virtual void ProcessChildImpl(DynExp::ModuleInstance& Instance) override
232  {
233  auto ModuleData = DynExp::dynamic_ModuleData_cast<NetworkTimeTaggerT>(Instance.ModuleDataGetter());
234  auto Instrument = ModuleData->GetTimeTagger();
235 
236  Instrument->ConfigureInput(RequestMessage.userisingedge(), RequestMessage.thresholdinvolts());
237  }
238  };
239 
241  : public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataSetExposureTime, ThisServiceType, DynExpProto::NetworkTimeTagger::ExposureTimeMessage, DynExpProto::Common::VoidMessage>
242  {
243  using Base = gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataSetExposureTime, ThisServiceType, DynExpProto::NetworkTimeTagger::ExposureTimeMessage, DynExpProto::Common::VoidMessage>;
244  using Base::RequestMessage;
245 
246  public:
247  CallDataSetExposureTime(const gRPCModule<gRPCServices...>* const OwningModule) noexcept
248  : Base::TypedCallDataBase(OwningModule, &ThisServiceType::AsyncService::RequestSetExposureTime) {}
249  virtual ~CallDataSetExposureTime() = default;
250 
251  private:
252  virtual void ProcessChildImpl(DynExp::ModuleInstance& Instance) override
253  {
254  auto ModuleData = DynExp::dynamic_ModuleData_cast<NetworkTimeTaggerT>(Instance.ModuleDataGetter());
255  auto Instrument = ModuleData->GetTimeTagger();
256 
257  Instrument->SetExposureTime(Util::picoseconds(RequestMessage.exposuretimeinpicoseconds()));
258  }
259  };
260 
262  : public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataSetCoincidenceWindow, ThisServiceType, DynExpProto::NetworkTimeTagger::CoincidenceWindowMessage, DynExpProto::Common::VoidMessage>
263  {
264  using Base = gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataSetCoincidenceWindow, ThisServiceType, DynExpProto::NetworkTimeTagger::CoincidenceWindowMessage, DynExpProto::Common::VoidMessage>;
265  using Base::RequestMessage;
266 
267  public:
268  CallDataSetCoincidenceWindow(const gRPCModule<gRPCServices...>* const OwningModule) noexcept
269  : Base::TypedCallDataBase(OwningModule, &ThisServiceType::AsyncService::RequestSetCoincidenceWindow) {}
270  virtual ~CallDataSetCoincidenceWindow() = default;
271 
272  private:
273  virtual void ProcessChildImpl(DynExp::ModuleInstance& Instance) override
274  {
275  auto ModuleData = DynExp::dynamic_ModuleData_cast<NetworkTimeTaggerT>(Instance.ModuleDataGetter());
276  auto Instrument = ModuleData->GetTimeTagger();
277 
278  Instrument->SetCoincidenceWindow(Util::picoseconds(RequestMessage.coincidencewindowinpicoseconds()));
279  }
280  };
281 
283  : public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataSetInputDelay, ThisServiceType, DynExpProto::NetworkTimeTagger::InputDelayMessage, DynExpProto::Common::VoidMessage>
284  {
285  using Base = gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataSetInputDelay, ThisServiceType, DynExpProto::NetworkTimeTagger::InputDelayMessage, DynExpProto::Common::VoidMessage>;
286  using Base::RequestMessage;
287 
288  public:
289  CallDataSetInputDelay(const gRPCModule<gRPCServices...>* const OwningModule) noexcept
290  : Base::TypedCallDataBase(OwningModule, &ThisServiceType::AsyncService::RequestSetInputDelay) {}
291  virtual ~CallDataSetInputDelay() = default;
292 
293  private:
294  virtual void ProcessChildImpl(DynExp::ModuleInstance& Instance) override
295  {
296  auto ModuleData = DynExp::dynamic_ModuleData_cast<NetworkTimeTaggerT>(Instance.ModuleDataGetter());
297  auto Instrument = ModuleData->GetTimeTagger();
298 
299  Instrument->SetDelay(Util::picoseconds(RequestMessage.delayinpicoseconds()));
300  }
301  };
302 
304  : public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataSetHBTActive, ThisServiceType, DynExpProto::NetworkTimeTagger::HBTActiveMessage, DynExpProto::Common::VoidMessage>
305  {
306  using Base = gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataSetHBTActive, ThisServiceType, DynExpProto::NetworkTimeTagger::HBTActiveMessage, DynExpProto::Common::VoidMessage>;
307  using Base::RequestMessage;
308 
309  public:
310  CallDataSetHBTActive(const gRPCModule<gRPCServices...>* const OwningModule) noexcept
311  : Base::TypedCallDataBase(OwningModule, &ThisServiceType::AsyncService::RequestSetHBTActive) {}
312  virtual ~CallDataSetHBTActive() = default;
313 
314  private:
315  virtual void ProcessChildImpl(DynExp::ModuleInstance& Instance) override
316  {
317  auto ModuleData = DynExp::dynamic_ModuleData_cast<NetworkTimeTaggerT>(Instance.ModuleDataGetter());
318  auto Instrument = ModuleData->GetTimeTagger();
319 
320  Instrument->SetHBTActive(RequestMessage.enable());
321  }
322  };
323 
325  : public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataConfigureHBT, ThisServiceType, DynExpProto::NetworkTimeTagger::ConfigureHBTMessage, DynExpProto::Common::VoidMessage>
326  {
327  using Base = gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataConfigureHBT, ThisServiceType, DynExpProto::NetworkTimeTagger::ConfigureHBTMessage, DynExpProto::Common::VoidMessage>;
328  using Base::RequestMessage;
329 
330  public:
331  CallDataConfigureHBT(const gRPCModule<gRPCServices...>* const OwningModule) noexcept
332  : Base::TypedCallDataBase(OwningModule, &ThisServiceType::AsyncService::RequestConfigureHBT) {}
333  virtual ~CallDataConfigureHBT() = default;
334 
335  private:
336  virtual void ProcessChildImpl(DynExp::ModuleInstance& Instance) override
337  {
338  auto ModuleData = DynExp::dynamic_ModuleData_cast<NetworkTimeTaggerT>(Instance.ModuleDataGetter());
339  auto Instrument = ModuleData->GetTimeTagger();
340 
341  Instrument->ConfigureHBT(Util::picoseconds(RequestMessage.binwidthinpicoseconds()), RequestMessage.bincount());
342  }
343  };
344 
346  : public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataResetHBT, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::Common::VoidMessage>
347  {
348  using Base = gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataResetHBT, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::Common::VoidMessage>;
349 
350  public:
351  CallDataResetHBT(const gRPCModule<gRPCServices...>* const OwningModule) noexcept
352  : Base::TypedCallDataBase(OwningModule, &ThisServiceType::AsyncService::RequestResetHBT) {}
353  virtual ~CallDataResetHBT() = default;
354 
355  private:
356  virtual void ProcessChildImpl(DynExp::ModuleInstance& Instance) override
357  {
358  auto ModuleData = DynExp::dynamic_ModuleData_cast<NetworkTimeTaggerT>(Instance.ModuleDataGetter());
359  auto Instrument = ModuleData->GetTimeTagger();
360 
361  Instrument->ResetHBT();
362  }
363  };
364 
366  : public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataGetHBTResults, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkTimeTagger::HBTResultsMessage>
367  {
368  using Base = gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataGetHBTResults, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkTimeTagger::HBTResultsMessage>;
369  using Base::ResponseMessage;
370 
371  public:
372  CallDataGetHBTResults(const gRPCModule<gRPCServices...>* const OwningModule) noexcept
373  : Base::TypedCallDataBase(OwningModule, &ThisServiceType::AsyncService::RequestGetHBTResults) {}
374  virtual ~CallDataGetHBTResults() = default;
375 
376  private:
377  virtual void ProcessChildImpl(DynExp::ModuleInstance& Instance) override
378  {
379  auto StreamSizeMsg = std::make_unique<DynExpProto::NetworkTimeTagger::BufferInfoMessage>();
380  auto ModuleData = DynExp::dynamic_ModuleData_cast<NetworkTimeTaggerT>(Instance.ModuleDataGetter());
381  auto Instrument = ModuleData->GetTimeTagger();
382  auto InstrData = DynExp::dynamic_InstrumentData_cast<DynExpInstr::TimeTagger>(Instrument->GetInstrumentData());
383 
384  ResponseMessage.set_enabled(InstrData->GetHBTResults().Enabled);
385  ResponseMessage.set_eventcounts(Util::NumToT<google::protobuf::uint64>(InstrData->GetHBTResults().EventCounts));
386  ResponseMessage.set_integrationtimeinmicroseconds(Util::NumToT<google::protobuf::uint64>(InstrData->GetHBTResults().IntegrationTime.count()));
387 
388  for (const auto& Sample : InstrData->GetHBTResults().ResultVector)
389  {
390  auto BasicSampleMsg = ResponseMessage.add_results();
391  BasicSampleMsg->set_value(Sample.Value);
392  BasicSampleMsg->set_time(Sample.Time);
393  }
394  }
395  };
396 
397  private:
399  {
401  }
402 
404 
406  {
407  CallDataGetHardwareInfo::MakeCall(this, Instance);
408  CallDataGetBufferInfo::MakeCall(this, Instance);
409  CallDataGetStreamMode::MakeCall(this, Instance);
410  CallDataSetStreamMode::MakeCall(this, Instance);
411  CallDataClearBuffer::MakeCall(this, Instance);
412  CallDataConfigureInput::MakeCall(this, Instance);
413  CallDataSetExposureTime::MakeCall(this, Instance);
414  CallDataSetCoincidenceWindow::MakeCall(this, Instance);
415  CallDataSetInputDelay::MakeCall(this, Instance);
416  CallDataSetHBTActive::MakeCall(this, Instance);
417  CallDataConfigureHBT::MakeCall(this, Instance);
418  CallDataResetHBT::MakeCall(this, Instance);
419  CallDataGetHBTResults::MakeCall(this, Instance);
420 
422  }
423 
425 
426  virtual void ValidateInstrType(const DynExpInstr::DataStreamInstrument* Instr) const override { DynExp::dynamic_Object_cast<typename ModuleDataType::InstrType>(Instr); }
427  };
428 
433 }
Implementation of a gRPC server module to provide remote access to a data stream instrument meta inst...
Implementation of the data stream meta instrument, which is a base class for all instruments reading/...
Meta instrument for a time tagging device to assign timestamps to (e.g. photon) detection events base...
Definition: TimeTagger.h:255
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::ModuleDataBase::dispatch_tag< NetworkDataStreamInstrumentData< gRPCServices... >>) override final
virtual ~NetworkTimeTaggerData()=default
virtual void ResetImpl(DynExp::ModuleDataBase::dispatch_tag< NetworkTimeTaggerData >)
NetworkTimeTaggerParams(DynExp::ItemIDType ID, const DynExp::DynExpCore &Core)
void ConfigureParamsImpl(DynExp::ParamsBase::dispatch_tag< NetworkDataStreamInstrumentParams< gRPCServices... >>) override final
virtual ~NetworkTimeTaggerParams()=default
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...
virtual void ConfigureParamsImpl(DynExp::ParamsBase::dispatch_tag< NetworkTimeTaggerParams >)
DynExp::ParamsBase::DummyParam Dummy
virtual void ProcessChildImpl(DynExp::ModuleInstance &Instance) override
CallDataClearBuffer(const gRPCModule< gRPCServices... > *const OwningModule) noexcept
gRPCModule< gRPCServices... >::template TypedCallDataBase< CallDataClearBuffer, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::Common::VoidMessage > Base
gRPCModule< gRPCServices... >::template TypedCallDataBase< CallDataConfigureHBT, ThisServiceType, DynExpProto::NetworkTimeTagger::ConfigureHBTMessage, DynExpProto::Common::VoidMessage > Base
virtual void ProcessChildImpl(DynExp::ModuleInstance &Instance) override
CallDataConfigureHBT(const gRPCModule< gRPCServices... > *const OwningModule) noexcept
gRPCModule< gRPCServices... >::template TypedCallDataBase< CallDataConfigureInput, ThisServiceType, DynExpProto::NetworkTimeTagger::ConfigureInputMessage, DynExpProto::Common::VoidMessage > Base
CallDataConfigureInput(const gRPCModule< gRPCServices... > *const OwningModule) noexcept
virtual void ProcessChildImpl(DynExp::ModuleInstance &Instance) override
gRPCModule< gRPCServices... >::template TypedCallDataBase< CallDataGetBufferInfo, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkTimeTagger::BufferInfoMessage > Base
virtual void ProcessChildImpl(DynExp::ModuleInstance &Instance) override
CallDataGetBufferInfo(const gRPCModule< gRPCServices... > *const OwningModule) noexcept
gRPCModule< gRPCServices... >::template TypedCallDataBase< CallDataGetHBTResults, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkTimeTagger::HBTResultsMessage > Base
virtual void ProcessChildImpl(DynExp::ModuleInstance &Instance) override
CallDataGetHBTResults(const gRPCModule< gRPCServices... > *const OwningModule) noexcept
CallDataGetHardwareInfo(const gRPCModule< gRPCServices... > *const OwningModule) noexcept
gRPCModule< gRPCServices... >::template TypedCallDataBase< CallDataGetHardwareInfo, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkTimeTagger::HardwareInfoMessage > Base
virtual void ProcessChildImpl(DynExp::ModuleInstance &Instance) override
virtual void ProcessChildImpl(DynExp::ModuleInstance &Instance) override
gRPCModule< gRPCServices... >::template TypedCallDataBase< CallDataGetStreamMode, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkTimeTagger::StreamModeMessage > Base
CallDataGetStreamMode(const gRPCModule< gRPCServices... > *const OwningModule) noexcept
gRPCModule< gRPCServices... >::template TypedCallDataBase< CallDataResetHBT, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::Common::VoidMessage > Base
CallDataResetHBT(const gRPCModule< gRPCServices... > *const OwningModule) noexcept
virtual void ProcessChildImpl(DynExp::ModuleInstance &Instance) override
virtual void ProcessChildImpl(DynExp::ModuleInstance &Instance) override
CallDataSetCoincidenceWindow(const gRPCModule< gRPCServices... > *const OwningModule) noexcept
gRPCModule< gRPCServices... >::template TypedCallDataBase< CallDataSetCoincidenceWindow, ThisServiceType, DynExpProto::NetworkTimeTagger::CoincidenceWindowMessage, DynExpProto::Common::VoidMessage > Base
virtual void ProcessChildImpl(DynExp::ModuleInstance &Instance) override
gRPCModule< gRPCServices... >::template TypedCallDataBase< CallDataSetExposureTime, ThisServiceType, DynExpProto::NetworkTimeTagger::ExposureTimeMessage, DynExpProto::Common::VoidMessage > Base
CallDataSetExposureTime(const gRPCModule< gRPCServices... > *const OwningModule) noexcept
gRPCModule< gRPCServices... >::template TypedCallDataBase< CallDataSetHBTActive, ThisServiceType, DynExpProto::NetworkTimeTagger::HBTActiveMessage, DynExpProto::Common::VoidMessage > Base
virtual void ProcessChildImpl(DynExp::ModuleInstance &Instance) override
CallDataSetHBTActive(const gRPCModule< gRPCServices... > *const OwningModule) noexcept
gRPCModule< gRPCServices... >::template TypedCallDataBase< CallDataSetInputDelay, ThisServiceType, DynExpProto::NetworkTimeTagger::InputDelayMessage, DynExpProto::Common::VoidMessage > Base
virtual void ProcessChildImpl(DynExp::ModuleInstance &Instance) override
CallDataSetInputDelay(const gRPCModule< gRPCServices... > *const OwningModule) noexcept
virtual void ProcessChildImpl(DynExp::ModuleInstance &Instance) override
gRPCModule< gRPCServices... >::template TypedCallDataBase< CallDataSetStreamMode, ThisServiceType, DynExpProto::NetworkTimeTagger::StreamModeMessage, DynExpProto::Common::VoidMessage > Base
CallDataSetStreamMode(const gRPCModule< gRPCServices... > *const OwningModule) noexcept
virtual std::string GetName() const override
Returns the name of this Object type.
virtual void ValidateInstrType(const DynExpInstr::DataStreamInstrument *Instr) const override
virtual void CreateInitialCallDataObjectsImpl(DynExp::Object::dispatch_tag< NetworkTimeTaggerT >, DynExp::ModuleInstance &Instance) const
constexpr static auto Name() noexcept
virtual ~NetworkTimeTaggerT()=default
DynExpProto::NetworkTimeTagger::NetworkTimeTagger ThisServiceType
void CreateInitialCallDataObjectsImpl(DynExp::Object::dispatch_tag< NetworkDataStreamInstrumentT< gRPCServices... >>, DynExp::ModuleInstance &Instance) const override final
NetworkTimeTaggerT(const std::thread::id OwnerThreadID, DynExp::ParamsBasePtrType &&Params)
void ResetImpl(DynExp::Object::dispatch_tag< NetworkDataStreamInstrumentT< gRPCServices... >>) override final
virtual void ResetImpl(DynExp::Object::dispatch_tag< NetworkTimeTaggerT >)
Module template for building gRPC servers listening on TCP sockets for network instruments to connect...
Definition: gRPCModule.h:116
DynExp's core class acts as the interface between the user interface and DynExp's internal data like ...
Definition: DynExpCore.h:127
Base class for modules. Modules implement programs on their own (e.g. measurement protocols or server...
Definition: Module.h:392
const std::unique_ptr< ModuleDataType > ModuleData
Module data belonging to this ModuleBase instance.
Definition: Module.h:743
Configurator class for ModuleBase.
Definition: Module.h:374
Data structure to contain data which is synchronized in between different threads....
Definition: Module.h:171
Refer to ParamsBase::dispatch_tag.
Definition: Module.h:189
Defines data for a thread belonging to a ModuleBase instance. Refer to RunnableInstance.
Definition: Module.h:793
const ModuleBase::ModuleDataGetterType ModuleDataGetter
Getter for module's data. Refer to ModuleBase::ModuleDataGetterType.
Definition: Module.h:825
Parameter class for ModuleBase.
Definition: Module.h:337
const std::thread::id OwnerThreadID
Thread id of the thread which has constructed (and owns) this Object instance.
Definition: Object.h:2302
const ParamsBasePtrType Params
Pointer to the parameter class instance belonging to this Object instance.
Definition: Object.h:2303
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
const ItemIDType ID
ID of the Object this parameter class instance belongs to.
Definition: Object.h:1779
const DynExpCore & Core
Reference to DynExp's core.
Definition: Object.h:1780
Tag for function dispatching mechanism within this class used when derived classes are not intended t...
Definition: Object.h:349
Thrown when an operation timed out before it could be completed, especially used for locking shared d...
Definition: Exception.h:261
DynExp's module namespace contains the implementation of DynExp modules which extend DynExp's core fu...
NetworkTimeTaggerT< typename NetworkDataStreamInstrument::ThisServiceType, DynExpProto::NetworkTimeTagger::NetworkTimeTagger > NetworkTimeTagger
Explicit instantiation of derivable class NetworkTimeTaggerT to create the network time tagger module...
constexpr auto Instrument
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.