DynExp
Highly flexible laboratory automation for dynamically changing experiments.
ZI_MFLI.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 "DynExpCore.h"
15 
16 namespace DynExpInstr
17 {
18  class ZI_MFLI;
19 
20  namespace ZI_MFLITasks
21  {
23  {
24  public:
27  virtual ~ZI_MFLITaskBase() {}
28 
29  auto GetUsedSignalInput() const noexcept { return UsedSignalInput; }
30  auto GetUsedDemodulator() const noexcept { return UsedDemodulator; }
31 
32  private:
34  const uint8_t UsedDemodulator;
35  };
36 
38  {
39  public:
42 
43  private:
44  void InitFuncImpl(dispatch_tag<LockinAmplifierTasks::InitTask>, DynExp::InstrumentInstance& Instance) override final;
46  };
47 
49  {
50  public:
53 
54  private:
55  void ExitFuncImpl(dispatch_tag<LockinAmplifierTasks::ExitTask>, DynExp::InstrumentInstance& Instance) override final;
57  };
58 
60  {
61  public:
64 
65  private:
66  void UpdateFuncImpl(dispatch_tag<LockinAmplifierTasks::UpdateTask>, DynExp::InstrumentInstance& Instance) override final;
68  };
69 
71  {
72  public:
75 
76  private:
78  };
79 
81  {
82  public:
85 
86  private:
88  };
89 
91  {
92  public:
95 
96  private:
98  };
99 
101  {
102  public:
105 
106  private:
107  virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance& Instance) override;
108  };
109 
111  {
112  public:
116 
117  private:
118  virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance& Instance) override;
119 
120  double Sensitivity;
121  };
122 
124  {
125  public:
128 
129  private:
130  virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance& Instance) override;
131  };
132 
134  {
135  public:
139 
140  private:
141  virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance& Instance) override;
142 
143  double Phase;
144  };
145 
147  {
148  public:
151 
152  private:
153  virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance& Instance) override;
154  };
155 
157  {
158  public:
162 
163  private:
164  virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance& Instance) override;
165 
166  double TimeConstant;
167  };
168 
170  {
171  public:
175 
176  private:
177  virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance& Instance) override;
178 
179  uint8_t FilterOrder;
180  };
181 
183  {
184  public:
188 
189  private:
190  virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance& Instance) override;
191 
193  uint8_t TriggerChannel;
194  };
195 
197  {
198  public:
202 
203  private:
204  virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance& Instance) override;
205 
207  };
208 
210  {
211  public:
215 
216  private:
217  virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance& Instance) override;
218 
220  };
221 
223  {
224  public:
228 
229  private:
230  virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance& Instance) override;
231 
232  double SamplingRate;
233  };
234 
236  {
237  public:
241 
242  private:
243  virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance& Instance) override;
244 
245  bool Enable;
246  };
247 
249  {
250  public:
253 
254  private:
255  virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance& Instance) override;
256  };
257  }
258 
260  {
262 
263  public:
264  ZI_MFLIData(size_t BufferSizeInSamples = 1) : LockinAmplifierData(BufferSizeInSamples) {}
265  virtual ~ZI_MFLIData() = default;
266 
267  virtual double GetSensitivity() const noexcept override { return Sensitivity; }
268  virtual void SetSensitivity(double Sensitivity) noexcept override { this->Sensitivity = Sensitivity; }
269  virtual double GetPhase() const noexcept override { return Phase; }
270  virtual void SetPhase(double Phase) noexcept override { this->Phase = Phase; }
271  virtual double GetTimeConstant() const noexcept override { return TimeConstant; }
272  virtual void SetTimeConstant(double TimeConstant) noexcept override { this->TimeConstant = TimeConstant; }
273  virtual uint8_t GetFilterOrder() const noexcept override { return FilterOrder; }
274  virtual void SetFilterOrder(uint8_t FilterOrder) noexcept override { this->FilterOrder = FilterOrder; }
275  virtual LockinAmplifierDefs::TriggerModeType GetTriggerMode() const noexcept override { return TriggerMode; }
277  virtual LockinAmplifierDefs::TriggerEdgeType GetTriggerEdge() const noexcept override { return TriggerEdge; }
279  virtual LockinAmplifierDefs::SignalType GetSignalType() const noexcept override { return Signal; }
281  virtual double GetSamplingRate() const noexcept override { return SamplingRate; }
282  virtual void SetSamplingRate(double SamplingRate) noexcept override { this->SamplingRate = SamplingRate; }
283  virtual bool IsEnabled() const noexcept override { return Enable; }
284  virtual void SetEnable(uint8_t Enable) noexcept override { this->Enable = Enable; }
285 
286  virtual bool IsOverloaded() const noexcept override { return Overload; }
287  virtual std::pair<double, double> GetInputLoad() const noexcept override { return std::make_pair(NegInputLoad, PosInputLoad); }
288  virtual double GetOscillatorFrequency() const noexcept override { return OscillatorFrequency; }
289  virtual double GetAcquisitionProgress() const noexcept override { return AcquisitionProgress; }
290 
292 
293  private:
294  void ResetImpl(dispatch_tag<LockinAmplifierData>) override final;
296 
297  // Reflecting parameters
298  double Sensitivity{};
299  double Phase{}; // in rad
300  double TimeConstant{}; // in s
301  uint8_t FilterOrder{};
305  double SamplingRate{}; // in samples/s
306  bool Enable{};
307 
308  // Other
309  bool Overload{};
310  double NegInputLoad{};
311  double PosInputLoad{};
314 
316  };
317 
319  {
320  public:
322 
324  virtual ~ZI_MFLIParams() = default;
325 
326  virtual const char* GetParamClassTag() const noexcept override { return "ZI_MFLIParams"; }
327 
329  "HardwareAdapter", "ZI LabOne instance", "Underlying hardware adapter of this instrument", DynExpUI::Icons::HardwareAdapter };
331  *this, SignalInputTypeStrList(), "SignalInput", "Input signal type",
332  "Determines which signal input to use", true, DynExpHardware::ZILabOneHardwareAdapter::SignalInputType::Voltage };
333  Param<ParamsConfigDialog::NumberType> Demodulator = { *this, "Demodulator", "Demodulator",
334  "Demodulator of the lock-in amplifier to read out", true, 0, 0, std::numeric_limits<uint8_t>::max(), 1, 0 };
335  Param<ParamsConfigDialog::NumberType> TriggerChannel = { *this, "TriggerChannel", "Trigger channel",
336  "Trigger channel to use for external trigger modes", true, 1, 1, std::numeric_limits<uint8_t>::max(), 1, 0 };
337 
338  private:
341  };
342 
344  {
345  public:
348 
349  ZI_MFLIConfigurator() = default;
350  virtual ~ZI_MFLIConfigurator() = default;
351 
352  private:
353  virtual DynExp::ParamsBasePtrType MakeParams(DynExp::ItemIDType ID, const DynExp::DynExpCore& Core) const override { return DynExp::MakeParams<ZI_MFLIConfigurator>(ID, Core); }
354  };
355 
356  class ZI_MFLI : public LockinAmplifier
357  {
358  public:
362 
363  constexpr static auto Name() noexcept { return "ZI MFLI"; }
364 
365  ZI_MFLI(const std::thread::id OwnerThreadID, DynExp::ParamsBasePtrType&& Params);
366  virtual ~ZI_MFLI() {}
367 
368  virtual std::string GetName() const override { return Name(); }
369 
370  // ZI MFLI does not like polling data too frequently...
371  virtual std::chrono::milliseconds GetTaskQueueDelay() const override { return std::chrono::milliseconds(200); }
372 
373  // Further information about the instrument
374  virtual DataStreamInstrumentData::UnitType GetValueUnit() const noexcept override { return SignalInput == DynExpHardware::ZILabOneHardwareAdapter::SignalInputType::Current ? DataStreamInstrumentData::UnitType::Ampere : DataStreamInstrumentData::UnitType::Volt; }
375  virtual const char* GetSensitivityUnitString() const noexcept override { return SignalInput == DynExpHardware::ZILabOneHardwareAdapter::SignalInputType::Current ? "A" : "V"; }
376 
377  virtual Util::OptionalBool HasFinished() const override;
378  virtual Util::OptionalBool IsRunning() const override;
379 
380  // Tasks
381  virtual void ReadData(DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<ZI_MFLITasks::ReadTask>(SignalInput, UsedDemodulator, CallbackFunc); }
382  virtual void ClearData(DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<ZI_MFLITasks::ClearDataTask>(SignalInput, UsedDemodulator, CallbackFunc); }
383  virtual void Start(DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<ZI_MFLITasks::StartTask>(SignalInput, UsedDemodulator, CallbackFunc); }
384  virtual void Stop(DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<ZI_MFLITasks::StopTask>(SignalInput, UsedDemodulator, CallbackFunc); }
385 
386  virtual void SetSensitivity(double Sensitivity, DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<ZI_MFLITasks::SetSensitivityTask>(Sensitivity, SignalInput, UsedDemodulator, CallbackFunc); }
387  virtual void AutoAdjustSensitivity(DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<ZI_MFLITasks::AutoAdjustSensitivityTask>(SignalInput, UsedDemodulator, CallbackFunc); }
388  virtual void SetPhase(double Phase, DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<ZI_MFLITasks::SetPhaseTask>(Phase, SignalInput, UsedDemodulator, CallbackFunc); }
389  virtual void AutoAdjustPhase(DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<ZI_MFLITasks::AutoAdjustPhaseTask>(SignalInput, UsedDemodulator, CallbackFunc); }
390  virtual void SetTimeConstant(double TimeConstant, DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<ZI_MFLITasks::SetTimeConstantTask>(TimeConstant, SignalInput, UsedDemodulator, CallbackFunc); }
391  virtual void SetFilterOrder(uint8_t FilterOrder, DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<ZI_MFLITasks::SetFilterOrderTask>(FilterOrder, SignalInput, UsedDemodulator, CallbackFunc); }
392  virtual void SetTriggerMode(LockinAmplifierDefs::TriggerModeType TriggerMode, DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<ZI_MFLITasks::SetTriggerModeTask>(TriggerMode, TriggerChannel, SignalInput, UsedDemodulator, CallbackFunc); }
393  virtual void SetTriggerEdge(LockinAmplifierDefs::TriggerEdgeType TriggerEdge, DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<ZI_MFLITasks::SetTriggerEdgeTask>(TriggerEdge, SignalInput, UsedDemodulator, CallbackFunc); }
394  virtual void SetSignalType(LockinAmplifierDefs::SignalType SignalType, DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<ZI_MFLITasks::SetSignalTypeTask>(SignalType, SignalInput, UsedDemodulator, CallbackFunc); }
395  virtual void SetSamplingRate(double SamplingRate, DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<ZI_MFLITasks::SetSamplingRateTask>(SamplingRate, SignalInput, UsedDemodulator, CallbackFunc); }
396  virtual void SetEnable(bool Enable, DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<ZI_MFLITasks::SetEnableTask>(Enable, SignalInput, UsedDemodulator, CallbackFunc); }
397  virtual void ForceTrigger(DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<ZI_MFLITasks::ForceTriggerTask>(SignalInput, UsedDemodulator, CallbackFunc); }
398 
399  private:
400  void ResetImpl(dispatch_tag<LockinAmplifier>) override final;
402 
403  virtual void ApplyFromParamsImpl(dispatch_tag<LockinAmplifier>) const override;
404 
405  virtual std::unique_ptr<DynExp::InitTaskBase> MakeInitTask() const override { return DynExp::MakeTask<ZI_MFLITasks::InitTask>(SignalInput, UsedDemodulator); }
406  virtual std::unique_ptr<DynExp::ExitTaskBase> MakeExitTask() const override { return DynExp::MakeTask<ZI_MFLITasks::ExitTask>(SignalInput, UsedDemodulator); }
407  virtual std::unique_ptr<DynExp::UpdateTaskBase> MakeUpdateTask() const override { return DynExp::MakeTask<ZI_MFLITasks::UpdateTask>(SignalInput, UsedDemodulator); }
408 
409  // atomic since used in GetValueUnit().
410  std::atomic<DynExpHardware::ZILabOneHardwareAdapter::SignalInputType> SignalInput;
411 
413  uint8_t TriggerChannel;
414  };
415 }
Defines DynExp's core module as an interface between the UI and DynExp objects.
Implementation of a hardware adapter to control Zurich Instruments MFLI hardware.
Defines a meta instrument for a lock-in amplifier.
UnitType
Units which can be used for data stream instruments.
@ Ampere
Electric current in Ampere (A)
Configurator class for LockinAmplifier.
Data class for LockinAmplifier.
Parameter class for LockinAmplifier.
Defines a task for deinitializing an instrument within an instrument inheritance hierarchy....
Defines a task for initializing an instrument within an instrument inheritance hierarchy....
Defines a task for updating an instrument within an instrument inheritance hierarchy....
Meta instrument for a lock-in amplifier based on the data stream meta instrument.
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...
Definition: ZI_MFLI.h:353
virtual ~ZI_MFLIConfigurator()=default
virtual void SetSamplingRate(double SamplingRate) noexcept override
Setter for the lock-in amplifier's sampling rate in samples/s.
Definition: ZI_MFLI.h:282
LockinAmplifierDefs::SignalType Signal
Definition: ZI_MFLI.h:304
virtual void SetTriggerMode(LockinAmplifierDefs::TriggerModeType TriggerMode) noexcept override
Setter for the lock-in amplifier's trigger mode.
Definition: ZI_MFLI.h:276
LockinAmplifierDefs::TriggerModeType TriggerMode
Definition: ZI_MFLI.h:302
size_t NumFailedStatusUpdateAttempts
Definition: ZI_MFLI.h:315
virtual bool IsOverloaded() const noexcept override
Indicates whether the lock-in amplifier's physical signal input is overloaded by e....
Definition: ZI_MFLI.h:286
virtual double GetOscillatorFrequency() const noexcept override
Indicates the oscillator frequency the lock-in amplifier demodulates the measured signal at.
Definition: ZI_MFLI.h:288
virtual double GetSamplingRate() const noexcept override
Getter for the lock-in amplifier's sampling rate in samples/s.
Definition: ZI_MFLI.h:281
virtual std::pair< double, double > GetInputLoad() const noexcept override
Indicates the load at the lock-in amplifier's physical signal input in negative and positive directio...
Definition: ZI_MFLI.h:287
virtual double GetSensitivity() const noexcept override
Getter for the lock-in amplifier's sensitivity/amplification setting.
Definition: ZI_MFLI.h:267
virtual double GetTimeConstant() const noexcept override
Getter for the time constant in seconds of the lock-in amplifier's low-poss filter.
Definition: ZI_MFLI.h:271
virtual LockinAmplifierDefs::SignalType GetSignalType() const noexcept override
Getter for the lock-in amplifier's signal coordinate type to write to the data stream.
Definition: ZI_MFLI.h:279
virtual void SetTimeConstant(double TimeConstant) noexcept override
Setter for the time constant in seconds of the lock-in amplifier's low-poss filter.
Definition: ZI_MFLI.h:272
virtual double GetAcquisitionProgress() const noexcept override
Determines the progress of the current data acquisition.
Definition: ZI_MFLI.h:289
virtual void SetTriggerEdge(LockinAmplifierDefs::TriggerEdgeType TriggerEdge) noexcept override
Setter for the lock-in amplifier's trigger edge.
Definition: ZI_MFLI.h:278
virtual double GetPhase() const noexcept override
Getter for the phase in rad of the lock-in amplifier's demodulator.
Definition: ZI_MFLI.h:269
void ResetImpl(dispatch_tag< LockinAmplifierData >) override final
Definition: ZI_MFLI.cpp:242
virtual uint8_t GetFilterOrder() const noexcept override
Getter for the filter order/quality of the lock-in amplifier's low-poss filter.
Definition: ZI_MFLI.h:273
virtual bool IsEnabled() const noexcept override
Returns true if the lock-in amplifier's demodulator is enabled, false otherwise.
Definition: ZI_MFLI.h:283
virtual void ResetImpl(dispatch_tag< ZI_MFLIData >)
Definition: ZI_MFLI.h:295
DynExp::LinkedObjectWrapperContainer< DynExpHardware::ZILabOneHardwareAdapter > HardwareAdapter
Definition: ZI_MFLI.h:291
virtual ~ZI_MFLIData()=default
virtual LockinAmplifierDefs::TriggerModeType GetTriggerMode() const noexcept override
Getter for the lock-in amplifier's trigger mode.
Definition: ZI_MFLI.h:275
virtual void SetFilterOrder(uint8_t FilterOrder) noexcept override
Setter for the filter order/quality of the lock-in amplifier's low-poss filter.
Definition: ZI_MFLI.h:274
LockinAmplifierDefs::TriggerEdgeType TriggerEdge
Definition: ZI_MFLI.h:303
virtual void SetSignalType(LockinAmplifierDefs::SignalType SignalType) noexcept override
Setter for the lock-in amplifier's signal coordinate type to write to the data stream.
Definition: ZI_MFLI.h:280
virtual void SetPhase(double Phase) noexcept override
Setter for the phase in rad of the lock-in amplifier's demodulator.
Definition: ZI_MFLI.h:270
ZI_MFLIData(size_t BufferSizeInSamples=1)
Definition: ZI_MFLI.h:264
virtual void SetEnable(uint8_t Enable) noexcept override
Enables (pass true) or disables (pass false) the lock-in amplifier's demodulator.
Definition: ZI_MFLI.h:284
virtual void SetSensitivity(double Sensitivity) noexcept override
Setter for the lock-in amplifier's sensitivity/amplification setting.
Definition: ZI_MFLI.h:268
virtual LockinAmplifierDefs::TriggerEdgeType GetTriggerEdge() const noexcept override
Getter for the lock-in amplifier's trigger edge.
Definition: ZI_MFLI.h:277
void ConfigureParamsImpl(dispatch_tag< LockinAmplifierParams >) override final
Called by DynExp::ParamsBase::ConfigureParams() as a starting point for the tag dispatch mechanism to...
Definition: ZI_MFLI.h:339
Param< DynExpHardware::ZILabOneHardwareAdapter::SignalInputType > SignalInput
Definition: ZI_MFLI.h:330
ZI_MFLIParams(DynExp::ItemIDType ID, const DynExp::DynExpCore &Core)
Definition: ZI_MFLI.h:323
static Util::TextValueListType< DynExpHardware::ZILabOneHardwareAdapter::SignalInputType > SignalInputTypeStrList()
Definition: ZI_MFLI.cpp:265
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...
Definition: ZI_MFLI.h:326
virtual ~ZI_MFLIParams()=default
Param< ParamsConfigDialog::NumberType > Demodulator
Definition: ZI_MFLI.h:333
Param< ParamsConfigDialog::NumberType > TriggerChannel
Definition: ZI_MFLI.h:335
Param< DynExp::ObjectLink< DynExpHardware::ZILabOneHardwareAdapter > > HardwareAdapter
Definition: ZI_MFLI.h:328
virtual void ConfigureParamsImpl(dispatch_tag< ZI_MFLIParams >)
Definition: ZI_MFLI.h:340
AutoAdjustPhaseTask(DynExpHardware::ZILabOneHardwareAdapter::SignalInputType UsedSignalInput, uint8_t UsedDemodulator, CallbackType CallbackFunc) noexcept
Definition: ZI_MFLI.h:149
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...
Definition: ZI_MFLI.cpp:161
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...
Definition: ZI_MFLI.cpp:143
AutoAdjustSensitivityTask(DynExpHardware::ZILabOneHardwareAdapter::SignalInputType UsedSignalInput, uint8_t UsedDemodulator, CallbackType CallbackFunc) noexcept
Definition: ZI_MFLI.h:126
ClearDataTask(DynExpHardware::ZILabOneHardwareAdapter::SignalInputType UsedSignalInput, uint8_t UsedDemodulator, CallbackType CallbackFunc) noexcept
Definition: ZI_MFLI.h:83
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...
Definition: ZI_MFLI.cpp:107
virtual void ExitFuncImpl(dispatch_tag< ExitTask >, DynExp::InstrumentInstance &Instance)
Definition: ZI_MFLI.h:56
ExitTask(DynExpHardware::ZILabOneHardwareAdapter::SignalInputType UsedSignalInput, uint8_t UsedDemodulator) noexcept
Definition: ZI_MFLI.h:51
void ExitFuncImpl(dispatch_tag< LockinAmplifierTasks::ExitTask >, DynExp::InstrumentInstance &Instance) override final
Deinitializes the respective instrument within the instrument inheritance hierarchy....
Definition: ZI_MFLI.cpp:20
ForceTriggerTask(DynExpHardware::ZILabOneHardwareAdapter::SignalInputType UsedSignalInput, uint8_t UsedDemodulator, CallbackType CallbackFunc) noexcept
Definition: ZI_MFLI.h:251
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...
Definition: ZI_MFLI.cpp:233
virtual void InitFuncImpl(dispatch_tag< InitTask >, DynExp::InstrumentInstance &Instance)
Definition: ZI_MFLI.h:45
InitTask(DynExpHardware::ZILabOneHardwareAdapter::SignalInputType UsedSignalInput, uint8_t UsedDemodulator) noexcept
Definition: ZI_MFLI.h:40
void InitFuncImpl(dispatch_tag< LockinAmplifierTasks::InitTask >, DynExp::InstrumentInstance &Instance) override final
Initializes the respective instrument within the instrument inheritance hierarchy....
Definition: ZI_MFLI.cpp:8
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...
Definition: ZI_MFLI.cpp:94
ReadTask(DynExpHardware::ZILabOneHardwareAdapter::SignalInputType UsedSignalInput, uint8_t UsedDemodulator, CallbackType CallbackFunc) noexcept
Definition: ZI_MFLI.h:73
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...
Definition: ZI_MFLI.cpp:224
SetEnableTask(bool Enable, DynExpHardware::ZILabOneHardwareAdapter::SignalInputType UsedSignalInput, uint8_t UsedDemodulator, CallbackType CallbackFunc) noexcept
Definition: ZI_MFLI.h:238
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...
Definition: ZI_MFLI.cpp:179
SetFilterOrderTask(uint8_t FilterOrder, DynExpHardware::ZILabOneHardwareAdapter::SignalInputType UsedSignalInput, uint8_t UsedDemodulator, CallbackType CallbackFunc) noexcept
Definition: ZI_MFLI.h:172
SetPhaseTask(double Phase, DynExpHardware::ZILabOneHardwareAdapter::SignalInputType UsedSignalInput, uint8_t UsedDemodulator, CallbackType CallbackFunc) noexcept
Definition: ZI_MFLI.h:136
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...
Definition: ZI_MFLI.cpp:152
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...
Definition: ZI_MFLI.cpp:215
SetSamplingRateTask(double SamplingRate, DynExpHardware::ZILabOneHardwareAdapter::SignalInputType UsedSignalInput, uint8_t UsedDemodulator, CallbackType CallbackFunc) noexcept
Definition: ZI_MFLI.h:225
SetSensitivityTask(double Sensitivity, DynExpHardware::ZILabOneHardwareAdapter::SignalInputType UsedSignalInput, uint8_t UsedDemodulator, CallbackType CallbackFunc) noexcept
Definition: ZI_MFLI.h:113
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...
Definition: ZI_MFLI.cpp:134
LockinAmplifierDefs::SignalType SignalType
Definition: ZI_MFLI.h:219
SetSignalTypeTask(LockinAmplifierDefs::SignalType SignalType, DynExpHardware::ZILabOneHardwareAdapter::SignalInputType UsedSignalInput, uint8_t UsedDemodulator, CallbackType CallbackFunc) noexcept
Definition: ZI_MFLI.h:212
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...
Definition: ZI_MFLI.cpp:206
SetTimeConstantTask(double TimeConstant, DynExpHardware::ZILabOneHardwareAdapter::SignalInputType UsedSignalInput, uint8_t UsedDemodulator, CallbackType CallbackFunc) noexcept
Definition: ZI_MFLI.h:159
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...
Definition: ZI_MFLI.cpp:170
SetTriggerEdgeTask(LockinAmplifierDefs::TriggerEdgeType TriggerEdge, DynExpHardware::ZILabOneHardwareAdapter::SignalInputType UsedSignalInput, uint8_t UsedDemodulator, CallbackType CallbackFunc) noexcept
Definition: ZI_MFLI.h:199
LockinAmplifierDefs::TriggerEdgeType TriggerEdge
Definition: ZI_MFLI.h:206
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...
Definition: ZI_MFLI.cpp:197
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...
Definition: ZI_MFLI.cpp:188
LockinAmplifierDefs::TriggerModeType TriggerMode
Definition: ZI_MFLI.h:192
SetTriggerModeTask(LockinAmplifierDefs::TriggerModeType TriggerMode, uint8_t TriggerChannel, DynExpHardware::ZILabOneHardwareAdapter::SignalInputType UsedSignalInput, uint8_t UsedDemodulator, CallbackType CallbackFunc) noexcept
Definition: ZI_MFLI.h:185
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...
Definition: ZI_MFLI.cpp:116
StartTask(DynExpHardware::ZILabOneHardwareAdapter::SignalInputType UsedSignalInput, uint8_t UsedDemodulator, CallbackType CallbackFunc) noexcept
Definition: ZI_MFLI.h:93
StopTask(DynExpHardware::ZILabOneHardwareAdapter::SignalInputType UsedSignalInput, uint8_t UsedDemodulator, CallbackType CallbackFunc) noexcept
Definition: ZI_MFLI.h:103
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...
Definition: ZI_MFLI.cpp:125
virtual void UpdateFuncImpl(dispatch_tag< UpdateTask >, DynExp::InstrumentInstance &Instance)
Definition: ZI_MFLI.h:67
UpdateTask(DynExpHardware::ZILabOneHardwareAdapter::SignalInputType UsedSignalInput, uint8_t UsedDemodulator) noexcept
Definition: ZI_MFLI.h:62
void UpdateFuncImpl(dispatch_tag< LockinAmplifierTasks::UpdateTask >, DynExp::InstrumentInstance &Instance) override final
Updates the respective instrument within the instrument inheritance hierarchy. Call UpdateFuncImpl() ...
Definition: ZI_MFLI.cpp:40
ZI_MFLITaskBase(DynExpHardware::ZILabOneHardwareAdapter::SignalInputType UsedSignalInput, uint8_t UsedDemodulator) noexcept
Definition: ZI_MFLI.h:25
auto GetUsedSignalInput() const noexcept
Definition: ZI_MFLI.h:29
const DynExpHardware::ZILabOneHardwareAdapter::SignalInputType UsedSignalInput
Definition: ZI_MFLI.h:33
auto GetUsedDemodulator() const noexcept
Definition: ZI_MFLI.h:30
uint8_t UsedDemodulator
Definition: ZI_MFLI.h:412
virtual void SetPhase(double Phase, DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Sets the phase of the lock-in amplifier's demodulator.
Definition: ZI_MFLI.h:388
virtual void SetTriggerMode(LockinAmplifierDefs::TriggerModeType TriggerMode, DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Sets the lock-in amplifier's trigger mode.
Definition: ZI_MFLI.h:392
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...
Definition: ZI_MFLI.h:407
virtual void ClearData(DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Enqueues a task to clear the underlying hardware adapter's buffer.
Definition: ZI_MFLI.h:382
virtual void SetEnable(bool Enable, DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Enables or disables the lock-in amplifier's demodulator.
Definition: ZI_MFLI.h:396
virtual std::unique_ptr< DynExp::InitTaskBase > MakeInitTask() const override
Factory function for an init task (InitTaskBase). Override to define the desired initialization task ...
Definition: ZI_MFLI.h:405
virtual std::chrono::milliseconds GetTaskQueueDelay() const override
Specifies in which time intervals the instrument's task queue runs to handle pending tasks.
Definition: ZI_MFLI.h:371
uint8_t TriggerChannel
Definition: ZI_MFLI.h:413
virtual void AutoAdjustPhase(DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Makes the lock-in amplifier automatically set its demodulator's phase.
Definition: ZI_MFLI.h:389
virtual void SetFilterOrder(uint8_t FilterOrder, DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Sets the filter order/quality of the lock-in amplifier's low-poss filter.
Definition: ZI_MFLI.h:391
constexpr static auto Name() noexcept
Definition: ZI_MFLI.h:363
virtual Util::OptionalBool HasFinished() const override
Determines whether the underlying hardware adapter finished data acquisition or writing data.
Definition: ZI_MFLI.cpp:282
virtual void ForceTrigger(DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Forces (starts) the data acquisition ignoring the trigger.
Definition: ZI_MFLI.h:397
virtual void SetSamplingRate(double SamplingRate, DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Sets the lock-in amplifier's sampling rate.
Definition: ZI_MFLI.h:395
virtual void ApplyFromParamsImpl(dispatch_tag< LockinAmplifier >) const override
Refer to ApplyFromParams(). Using tag dispatch mechanism to ensure that ApplyFromParamsImpl() of ever...
Definition: ZI_MFLI.cpp:307
ZI_MFLI(const std::thread::id OwnerThreadID, DynExp::ParamsBasePtrType &&Params)
Definition: ZI_MFLI.cpp:276
virtual std::string GetName() const override
Returns the name of this Object type.
Definition: ZI_MFLI.h:368
std::atomic< DynExpHardware::ZILabOneHardwareAdapter::SignalInputType > SignalInput
Definition: ZI_MFLI.h:410
virtual void AutoAdjustSensitivity(DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Makes the lock-in amplifier automatically set its sensitivity/amplification.
Definition: ZI_MFLI.h:387
virtual std::unique_ptr< DynExp::ExitTaskBase > MakeExitTask() const override
Factory function for an exit task (ExitTaskBase). Override to define the desired deinitialization tas...
Definition: ZI_MFLI.h:406
virtual void SetSignalType(LockinAmplifierDefs::SignalType SignalType, DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Sets the lock-in amplifier's signal coordinate type to read out.
Definition: ZI_MFLI.h:394
virtual void Start(DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Enqueues a task to make the underlying hardware adapter start data acquisition or writing data.
Definition: ZI_MFLI.h:383
virtual const char * GetSensitivityUnitString() const noexcept override
Determines the unit of the lock-in amplifier's sensitivity/amplification setting and returns a human-...
Definition: ZI_MFLI.h:375
virtual void Stop(DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Enqueues a task to make the underlying hardware adapter stop data acquisition or writing data.
Definition: ZI_MFLI.h:384
virtual void ReadData(DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Enqueues a task to read data from the hardware to the data stream. The default implementation does no...
Definition: ZI_MFLI.h:381
void ResetImpl(dispatch_tag< LockinAmplifier >) override final
Refer to DynExp::Object::Reset(). Using tag dispatch mechanism to ensure that ResetImpl() of every de...
Definition: ZI_MFLI.cpp:294
virtual void SetTimeConstant(double TimeConstant, DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Sets the time constant of the lock-in amplifier's low-poss filter.
Definition: ZI_MFLI.h:390
virtual void SetTriggerEdge(LockinAmplifierDefs::TriggerEdgeType TriggerEdge, DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Sets the lock-in amplifier's trigger edge.
Definition: ZI_MFLI.h:393
virtual void ResetImpl(dispatch_tag< ZI_MFLI >)
Definition: ZI_MFLI.h:401
virtual ~ZI_MFLI()
Definition: ZI_MFLI.h:366
virtual DataStreamInstrumentData::UnitType GetValueUnit() const noexcept override
Determines which unit corresponds to the values managed by this DataStreamInstrument instance....
Definition: ZI_MFLI.h:374
virtual Util::OptionalBool IsRunning() const override
Determines whether the underlying hardware adapter is running a data acquisition or writing data.
Definition: ZI_MFLI.cpp:289
virtual void SetSensitivity(double Sensitivity, DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Sets the lock-in amplifier's sensitivity/amplification.
Definition: ZI_MFLI.h:386
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
Base class for instruments. Instruments comprise virtual devices (meta instruments) and physial devic...
Definition: Instrument.h:451
Configurator class for InstrumentBase.
Definition: Instrument.h:435
Data structure to contain data which is synchronized in between different threads....
Definition: Instrument.h:135
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
Parameter class for InstrumentBase.
Definition: Instrument.h:401
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
const ItemIDType ID
ID of the Object this parameter class instance belongs to.
Definition: Object.h:1779
const auto & GetCore() const noexcept
Returns a reference to DynExp's core.
Definition: Object.h:1677
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
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
Data type which stores an optional bool value (unknown, false, true). The type evaluates to bool whil...
Definition: Util.h:549
TriggerEdgeType
Type to determine at which edge of a trigger signal to trigger. Not a strongly-typed enum to allow us...
SignalType
Type specifying different signal coordinates a lock-in amplifier can record. Not a strongly-typed enu...
TriggerModeType
Type to determine the trigger mode. Not a strongly-typed enum to allow using the enumeration in a Dyn...
DynExp's instrument namespace contains the implementation of DynExp instruments which extend DynExp's...
Definition: Instrument.h:1254
constexpr auto HardwareAdapter
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::vector< std::pair< TextType, ValueType > > TextValueListType
Type of a list containing key-value pairs where key is a text of type Util::TextType.
Definition: QtUtil.h:37
Accumulates include statements to provide a precompiled header.