DynExp
Highly flexible laboratory automation for dynamically changing experiments.
ODMR.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"
13 #include "../../MetaInstruments/FunctionGenerator.h"
14 #include "../../MetaInstruments/LockinAmplifier.h"
15 #include "../../MetaInstruments/AnalogIn.h"
16 #include "../../MetaInstruments/AnalogOut.h"
17 #include "../../MetaInstruments/DigitalOut.h"
18 
19 #include "ODMRWidget.h"
20 
21 namespace DynExpModule::ODMR
22 {
24  {
25  public:
28  enum class RFModulationType { None, Sine, Pulse };
30 
31  ODMRData() { Init(); }
32  virtual ~ODMRData() = default;
33 
34  template <size_t N>
35  bool TestFeature(const std::array<FeatureType, N>& Flags) const { return Features.Test(Flags); }
36 
37  bool TestFeature(FeatureType Flag) { return Features.Test(Flag); }
38  void SetFeature(FeatureType Flag) { Features.Set(Flag); }
39 
40  auto& GetRFGenerator() noexcept { return RFGenerator; }
41  auto& GetSignalDetector() noexcept { return SignalDetector; }
42  auto GetLockinAmplifier() { return DynExp::dynamic_Object_cast<DynExpInstr::LockinAmplifier>(GetSignalDetector().get()); }
43  auto GetAnalogIn() { return DynExp::dynamic_Object_cast<DynExpInstr::AnalogIn>(GetSignalDetector().get()); }
44  auto& GetTrigger() noexcept { return TriggerOut; }
45  auto& GetAuxAnalogOut() noexcept { return AuxAnalogOut; }
46 
47  double GetRFStartFreq() const noexcept { return std::abs(RFCenterFreq) - std::abs(RFFreqSpan) / 2; }
48  double GetRFStopFreq() const noexcept { return std::abs(RFCenterFreq) + std::abs(RFFreqSpan) / 2; }
49  unsigned long long GetNumSamples() const noexcept { return std::abs(RFFreqSpan / RFFreqSpacing); }
50  unsigned long long GetSweepNumberSteps() const noexcept;
51  std::stringstream AssembleCSVHeader(double RFPower, double RFModulationDepth, double AuxAnalogOutValue, bool IsRFOffResonance);
52 
53  double RFPower{}; // in units of RFGenerator
54  bool RFAutoEnabled{};
55  double RFCenterFreq{}; // in Hz
56  double RFFreqSpan{}; // in Hz
57  double RFFreqSpacing{}; // in Hz
58  double RFDwellTime{}; // in s
59 
61  double RFModulationFreq{}; // in Hz
62  double RFModulationDepth{}; // in Hz
63 
64  double ODMRSamplingRate{}; // in samples/s
65 
67  std::string SaveDataPath;
68  unsigned int CurrentSaveIndex{};
70 
74  double SensitivityResonanceFreq{}; // in Hz
75  double SensitivityOffResonanceFreq{}; // in Hz
76  double SensitivityResonanceSpan{}; // in Hz
77  double SensitivitySamplingRate{}; // in samples/s
78  double SensitivityDuration{}; // in s
79 
81  double GyromagneticRatio{}; // in Hz/T
82 
85  double SweepSeriesStart{}; // in kHz or units of RFGenerator
86  double SweepSeriesStop{}; // in kHz or units of RFGenerator
87  double SweepSeriesStep{}; // in kHz or units of RFGenerator
90  unsigned long long CurrentSweepIndex;
91 
95 
99 
100  double AcquisitionTime{}; // in s
101 
104 
105  private:
106  void ResetImpl(dispatch_tag<QModuleDataBase>) override final;
108 
109  void Init();
110 
115 
117  };
118 
120  {
121  public:
123  virtual ~ODMRParams() = default;
124 
125  virtual const char* GetParamClassTag() const noexcept override { return "ODMRParams"; }
126 
128  "RFGenerator", "RF generator", "RF generator to drive spin transitions", DynExpUI::Icons::Instrument };
130  "SignalDetector", "Signal detector", "Detector to record the ODMR signal (might be a lock-in amplifier or any DAQ device)", DynExpUI::Icons::Instrument };
132  "TriggerOut", "Trigger output (DO)", "Trigger output to synchronize an RF frequency sweep and the data acquisition", DynExpUI::Icons::Instrument };
134  "AuxAnalogOut", "Auxiliary analog output (AO)", "Auxiliary output to perform ODMR parameter sweeps with", DynExpUI::Icons::Instrument, true };
135 
136  private:
138  };
139 
141  {
142  public:
143  using ObjectType = ODMR;
145 
146  ODMRConfigurator() = default;
147  virtual ~ODMRConfigurator() = default;
148 
149  private:
150  virtual DynExp::ParamsBasePtrType MakeParams(DynExp::ItemIDType ID, const DynExp::DynExpCore& Core) const override final { return DynExp::MakeParams<ODMRConfigurator>(ID, Core); }
151  };
152 
153  class ODMR : public DynExp::QModuleBase
154  {
155  public:
159 
160  constexpr static auto Name() noexcept { return "ODMR"; }
161  constexpr static auto Category() noexcept { return "Experiments"; }
162 
163  ODMR(const std::thread::id OwnerThreadID, DynExp::ParamsBasePtrType&& Params);
164  virtual ~ODMR() = default;
165 
166  virtual std::string GetName() const override { return Name(); }
167  virtual std::string GetCategory() const override { return Category(); }
168 
169  std::chrono::milliseconds GetMainLoopDelay() const override final;
170  bool TreatModuleExceptionsAsWarnings() const override final { return StateMachine.GetCurrentState()->GetState() != StateType::Initializing; }
171 
172  private:
174 
175  void ResetImpl(dispatch_tag<QModuleBase>) override final;
176 
177  std::unique_ptr<DynExp::QModuleWidget> MakeUIWidget() override final;
178  void UpdateUIChild(const ModuleBase::ModuleDataGetterType& ModuleDataGetter) override final;
179 
180  // Helper functions
181  bool IsReadyState() const noexcept { return StateMachine.GetCurrentState()->GetState() == StateType::Ready; }
183  void InitRFGenerator(double Frequency, bool EnableRF, Util::SynchronizedPointer<ModuleDataType>& ModuleData) const;
186  void ConnectChartWidgets(QLineSeries* ODMRLineSeries);
187 
188  // Events, run in module thread
189  void OnInit(DynExp::ModuleInstance* Instance) const override final;
190  void OnExit(DynExp::ModuleInstance* Instance) const override final;
191 
192  void OnRFPowerChanged(DynExp::ModuleInstance* Instance, double Value) const;
193  void OnRFAutoEnableClicked(DynExp::ModuleInstance* Instance, int Checked) const;
194  void OnRFCenterFreqChanged(DynExp::ModuleInstance* Instance, double Value) const;
195  void OnRFFreqSpanChanged(DynExp::ModuleInstance* Instance, double Value) const;
196  void OnRFFreqSpacingChanged(DynExp::ModuleInstance* Instance, double Value) const;
197  void OnRFDwellTimeChanged(DynExp::ModuleInstance* Instance, double Value) const;
198 
199  void OnRFModNoneClicked(DynExp::ModuleInstance* Instance, bool Checked) const;
200  void OnRFModSineClicked(DynExp::ModuleInstance* Instance, bool Checked) const;
201  void OnRFModPulseClicked(DynExp::ModuleInstance* Instance, bool Checked) const;
202  void OnRFModFreqChanged(DynExp::ModuleInstance* Instance, double Value) const;
203  void OnRFModDepthChanged(DynExp::ModuleInstance* Instance, double Value) const;
204 
205  void OnODMRSamplingRateChanged(DynExp::ModuleInstance* Instance, double Value) const;
206 
207  void OnSavePathChanged(DynExp::ModuleInstance* Instance, QString Path) const;
208  void OnSaveIndexChanged(DynExp::ModuleInstance* Instance, int Index) const;
209  void OnAutosaveClicked(DynExp::ModuleInstance* Instance, int Checked) const;
210 
211  void OnRecordSensitivityClicked(DynExp::ModuleInstance* Instance, int Checked) const;
212  void OnRecordSensitivityOncePerSweepClicked(DynExp::ModuleInstance* Instance, int Checked) const;
213  void OnRecordSensitivityOffResonanceClicked(DynExp::ModuleInstance* Instance, int Checked) const;
214  void OnSensitivityResonanceFreqChanged(DynExp::ModuleInstance* Instance, double Value) const;
215  void OnSensitivityOffResonanceFreqChanged(DynExp::ModuleInstance* Instance, double Value) const;
216  void OnSensitivityResonanceSpanChanged(DynExp::ModuleInstance* Instance, double Value) const;
217  void OnSensitivitySamplingRateChanged(DynExp::ModuleInstance* Instance, double Value) const;
218  void OnSensitivityDurationChanged(DynExp::ModuleInstance* Instance, double Value) const;
219 
220  void OnEnableSensitivityAnalysisClicked(DynExp::ModuleInstance* Instance, bool Checked) const;
221  void OnGyromagneticRatioChanged(DynExp::ModuleInstance* Instance, double Value) const;
222 
223  void OnEnableSweepSeriesClicked(DynExp::ModuleInstance* Instance, int Checked) const;
224  void OnSweepSeriesParamChanged(DynExp::ModuleInstance* Instance, int Index) const;
225  void OnSweepSeriesStartChanged(DynExp::ModuleInstance* Instance, double Value) const;
226  void OnSweepSeriesStopChanged(DynExp::ModuleInstance* Instance, double Value) const;
227  void OnSweepSeriesStepChanged(DynExp::ModuleInstance* Instance, double Value) const;
228  void OnSweepSeriesRetraceClicked(DynExp::ModuleInstance* Instance, int Checked) const;
229  void OnSweepSeriesAdvanceLastValueClicked(DynExp::ModuleInstance* Instance, int Checked) const;
230 
231  void OnStartClicked(DynExp::ModuleInstance* Instance, bool) const;
232  void OnStartSensitivityClicked(DynExp::ModuleInstance* Instance, bool) const;
233  void OnStopClicked(DynExp::ModuleInstance* Instance, bool) const;
234  void OnRFOnClicked(DynExp::ModuleInstance* Instance, bool) const;
235  void OnRFOffClicked(DynExp::ModuleInstance* Instance, bool) const;
236 
237  void OnODMRChartHovered(DynExp::ModuleInstance* Instance, QPointF Point, bool State) const;
238  void OnODMRChartClicked(DynExp::ModuleInstance* Instance, QPointF Point) const;
239 
240  // State functions for state machine
251 
252  // States for state machine
254  &ODMR::InitializingStateFunc, "Initializing module...");
256  &ODMR::ReadyStateFunc, "Ready");
258  &ODMR::MeasurementSeriesInitFunc, "Measuring...");
260  &ODMR::MeasurementSeriesStepFunc, "Measuring...");
262  &ODMR::ODMRTraceInitFunc, "Acquiring ODMR trace...");
264  &ODMR::ODMRTraceWaitFunc, "Acquiring ODMR trace...");
266  &ODMR::ODMRTraceFinishFunc, "Processing and saving ODMR trace...");
268  &ODMR::SensitivityInitFunc, "Acquiring sensitivity series...");
270  &ODMR::SensitivityWaitFunc, "Acquiring sensitivity series...");
272  &ODMR::SensitivityFinishFunc, "Processing and saving sensitivity series...");
273 
274  // Contexts for state machine
275  const Util::StateMachineContext<StateMachineStateType> SensitivityOffResonanceContext = { {}, "Acquiring off-resonance sensitivity series..." };
276 
277  // Logical const-ness: allow events to set the state machine's current state.
279 
280  double NextRFPower{};
283 
285  };
286 }
Defines DynExp's core module as an interface between the UI and DynExp objects.
User interface belonging to the DynExpModule::ODMR::ODMR module.
UnitType
Units which can be used for data stream instruments.
double ValueType
Data type to represent hardware limits on the sample values to write to the hardware adapter assigned...
virtual DynExp::ParamsBasePtrType MakeParams(DynExp::ItemIDType ID, const DynExp::DynExpCore &Core) const override final
Override to make derived classes call DynExp::MakeParams with the correct configurator type derived f...
Definition: ODMR.h:150
bool SweepSeriesAdvanceLastValue
Definition: ODMR.h:89
DynExpInstr::DataStreamInstrumentData::ValueType AuxAnalogOutMinValue
Definition: ODMR.h:97
double SensitivityResonanceFreq
Definition: ODMR.h:74
bool TestFeature(FeatureType Flag)
Definition: ODMR.h:37
std::stringstream AssembleCSVHeader(double RFPower, double RFModulationDepth, double AuxAnalogOutValue, bool IsRFOffResonance)
Definition: ODMR.cpp:21
bool TestFeature(const std::array< FeatureType, N > &Flags) const
Definition: ODMR.h:35
double GetRFStopFreq() const noexcept
Definition: ODMR.h:48
DynExpInstr::DataStreamInstrumentData::UnitType AuxAnalogOutValueUnit
Definition: ODMR.h:96
SweepSeriesType SweepSeries
Definition: ODMR.h:84
std::string SaveDataPath
Definition: ODMR.h:67
double SensitivitySamplingRate
Definition: ODMR.h:77
DynExp::LinkedObjectWrapperContainer< DynExpInstr::DigitalOut > TriggerOut
Definition: ODMR.h:113
unsigned long long CurrentSweepIndex
Definition: ODMR.h:90
SensitivityPlotType SensitivityPlot
Definition: ODMR.h:103
DynExpInstr::FunctionGeneratorDefs::FunctionDescType RFGeneratorMaxFuncDesc
Definition: ODMR.h:93
double SensitivityResonanceSpan
Definition: ODMR.h:76
Util::FeatureTester< FeatureType > Features
Definition: ODMR.h:116
double SensitivityOffResonanceFreq
Definition: ODMR.h:75
unsigned long long GetSweepNumberSteps() const noexcept
Definition: ODMR.cpp:13
void SetFeature(FeatureType Flag)
Definition: ODMR.h:38
virtual void ResetImpl(dispatch_tag< ODMRData >)
Definition: ODMR.h:107
unsigned long long GetNumSamples() const noexcept
Definition: ODMR.h:49
auto & GetSignalDetector() noexcept
Definition: ODMR.h:41
DynExp::LinkedObjectWrapperContainer< DynExpInstr::DataStreamInstrument > SignalDetector
Definition: ODMR.h:112
DynExp::LinkedObjectWrapperContainer< DynExpInstr::FunctionGenerator > RFGenerator
Definition: ODMR.h:111
unsigned int CurrentSaveIndex
Definition: ODMR.h:68
double GetRFStartFreq() const noexcept
Definition: ODMR.h:47
MeasurementModeType MeasurementMode
Definition: ODMR.h:66
auto & GetTrigger() noexcept
Definition: ODMR.h:44
DynExp::LinkedObjectWrapperContainer< DynExpInstr::AnalogOut > AuxAnalogOut
Definition: ODMR.h:114
auto & GetRFGenerator() noexcept
Definition: ODMR.h:40
DynExpInstr::FunctionGeneratorDefs::FunctionDescType RFGeneratorDefaultFuncDesc
Definition: ODMR.h:94
ODMRPlotType ODMRPlot
Definition: ODMR.h:102
RFModulationType RFModulation
Definition: ODMR.h:60
DynExpInstr::FunctionGeneratorDefs::FunctionDescType RFGeneratorMinFuncDesc
Definition: ODMR.h:92
virtual ~ODMRData()=default
bool SensitivityOffResonanceEnabled
Definition: ODMR.h:73
auto & GetAuxAnalogOut() noexcept
Definition: ODMR.h:45
DynExpInstr::DataStreamInstrumentData::ValueType AuxAnalogOutMaxValue
Definition: ODMR.h:98
void ResetImpl(dispatch_tag< QModuleDataBase >) override final
Definition: ODMR.cpp:8
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: ODMR.h:125
Param< DynExp::ObjectLink< DynExpInstr::FunctionGenerator > > RFGenerator
Definition: ODMR.h:127
Param< DynExp::ObjectLink< DynExpInstr::DataStreamInstrument > > SignalDetector
Definition: ODMR.h:129
virtual ~ODMRParams()=default
ODMRParams(DynExp::ItemIDType ID, const DynExp::DynExpCore &Core)
Definition: ODMR.h:122
Param< DynExp::ObjectLink< DynExpInstr::AnalogOut > > AuxAnalogOut
Definition: ODMR.h:133
void ConfigureParamsImpl(dispatch_tag< QModuleParamsBase >) override final
Definition: ODMR.h:137
Param< DynExp::ObjectLink< DynExpInstr::DigitalOut > > TriggerOut
Definition: ODMR.h:131
std::unique_ptr< DynExp::QModuleWidget > MakeUIWidget() override final
Used by InitUI() as a factory function for the module's user interface widget. Create the widget here...
Definition: ODMR.cpp:209
size_t NumFailedUpdateAttempts
Definition: ODMR.h:284
static constexpr auto MeasurementSeriesInitState
Definition: ODMR.h:257
void InitRFGenerator(double Frequency, bool EnableRF, Util::SynchronizedPointer< ModuleDataType > &ModuleData) const
Definition: ODMR.cpp:327
virtual std::string GetCategory() const override
Returns the category of this Object type.
Definition: ODMR.h:167
constexpr static auto Name() noexcept
Definition: ODMR.h:160
void OnSweepSeriesStopChanged(DynExp::ModuleInstance *Instance, double Value) const
Definition: ODMR.cpp:600
void OnRFModDepthChanged(DynExp::ModuleInstance *Instance, double Value) const
Definition: ODMR.cpp:483
void ConnectChartWidgets(QLineSeries *ODMRLineSeries)
Definition: ODMR.cpp:368
static constexpr auto SensitivityWaitState
Definition: ODMR.h:269
static constexpr auto ODMRTraceFinishState
Definition: ODMR.h:265
void UpdateUIChild(const ModuleBase::ModuleDataGetterType &ModuleDataGetter) override final
Definition: ODMR.cpp:261
void OnExit(DynExp::ModuleInstance *Instance) const override final
This event is triggered right before the module thread terminates (not due to an exception,...
Definition: ODMR.cpp:407
Util::StateMachine< StateMachineStateType > StateMachine
Definition: ODMR.h:278
Util::DynExpErrorCodes::DynExpErrorCodes ModuleMainLoop(DynExp::ModuleInstance &Instance) override final
Module main loop. The function is executed periodically by the module thread. Also refer to GetMainLo...
Definition: ODMR.cpp:172
void WaitUntilReadyAndTrigger(Util::SynchronizedPointer< ModuleDataType > &ModuleData) const
Definition: ODMR.cpp:348
static constexpr auto ODMRTraceWaitState
Definition: ODMR.h:263
StateType MeasurementSeriesInitFunc(DynExp::ModuleInstance &Instance)
Definition: ODMR.cpp:695
void OnStopClicked(DynExp::ModuleInstance *Instance, bool) const
Definition: ODMR.cpp:646
void OnRFAutoEnableClicked(DynExp::ModuleInstance *Instance, int Checked) const
Definition: ODMR.cpp:423
StateType ODMRTraceWaitFunc(DynExp::ModuleInstance &Instance)
Definition: ODMR.cpp:771
void OnRFModNoneClicked(DynExp::ModuleInstance *Instance, bool Checked) const
Definition: ODMR.cpp:453
void OnRFFreqSpanChanged(DynExp::ModuleInstance *Instance, double Value) const
Definition: ODMR.cpp:435
void OnGyromagneticRatioChanged(DynExp::ModuleInstance *Instance, double Value) const
Definition: ODMR.cpp:567
virtual ~ODMR()=default
std::chrono::milliseconds GetMainLoopDelay() const override final
Specifies in which time intervals the module's event queue runs to handle pending events.
Definition: ODMR.cpp:161
void OnRecordSensitivityOffResonanceClicked(DynExp::ModuleInstance *Instance, int Checked) const
Definition: ODMR.cpp:525
bool IsReadyState() const noexcept
Definition: ODMR.h:181
void OnODMRSamplingRateChanged(DynExp::ModuleInstance *Instance, double Value) const
Definition: ODMR.cpp:489
void OnEnableSweepSeriesClicked(DynExp::ModuleInstance *Instance, int Checked) const
Definition: ODMR.cpp:573
void ResetImpl(dispatch_tag< QModuleBase >) override final
Definition: ODMR.cpp:198
void OnRFOnClicked(DynExp::ModuleInstance *Instance, bool) const
Definition: ODMR.cpp:658
double NextAuxAnalogOutValue
Definition: ODMR.h:282
void OnRFModPulseClicked(DynExp::ModuleInstance *Instance, bool Checked) const
Definition: ODMR.cpp:469
static constexpr auto SensitivityFinishState
Definition: ODMR.h:271
StateType ReadyStateFunc(DynExp::ModuleInstance &Instance)
Definition: ODMR.cpp:690
ODMR(const std::thread::id OwnerThreadID, DynExp::ParamsBasePtrType &&Params)
Definition: ODMR.cpp:152
void OnSavePathChanged(DynExp::ModuleInstance *Instance, QString Path) const
Definition: ODMR.cpp:495
void OnSweepSeriesStepChanged(DynExp::ModuleInstance *Instance, double Value) const
Definition: ODMR.cpp:606
void OnSensitivityResonanceSpanChanged(DynExp::ModuleInstance *Instance, double Value) const
Definition: ODMR.cpp:543
StateType SensitivityWaitFunc(DynExp::ModuleInstance &Instance)
Definition: ODMR.cpp:917
void OnRecordSensitivityClicked(DynExp::ModuleInstance *Instance, int Checked) const
Definition: ODMR.cpp:513
void OnSensitivityOffResonanceFreqChanged(DynExp::ModuleInstance *Instance, double Value) const
Definition: ODMR.cpp:537
StateType SensitivityFinishFunc(DynExp::ModuleInstance &Instance)
Definition: ODMR.cpp:924
static constexpr auto SensitivityInitState
Definition: ODMR.h:267
StateType ODMRTraceInitFunc(DynExp::ModuleInstance &Instance)
Definition: ODMR.cpp:740
StateType InitializingStateFunc(DynExp::ModuleInstance &Instance)
Definition: ODMR.cpp:685
double NextRFModulationDepth
Definition: ODMR.h:281
void OnSweepSeriesRetraceClicked(DynExp::ModuleInstance *Instance, int Checked) const
Definition: ODMR.cpp:612
void SetAuxAnalogOutValue(Util::SynchronizedPointer< ModuleDataType > &ModuleData) const
Definition: ODMR.cpp:342
void OnSaveIndexChanged(DynExp::ModuleInstance *Instance, int Index) const
Definition: ODMR.cpp:501
void OnODMRChartHovered(DynExp::ModuleInstance *Instance, QPointF Point, bool State) const
Definition: ODMR.cpp:670
StateType SensitivityInitFunc(DynExp::ModuleInstance &Instance)
Definition: ODMR.cpp:890
StateType MeasurementSeriesStepFunc(DynExp::ModuleInstance &Instance)
Definition: ODMR.cpp:713
void OnODMRChartClicked(DynExp::ModuleInstance *Instance, QPointF Point) const
Definition: ODMR.cpp:676
void OnRFFreqSpacingChanged(DynExp::ModuleInstance *Instance, double Value) const
Definition: ODMR.cpp:441
void OnRFModFreqChanged(DynExp::ModuleInstance *Instance, double Value) const
Definition: ODMR.cpp:477
void OnAutosaveClicked(DynExp::ModuleInstance *Instance, int Checked) const
Definition: ODMR.cpp:507
void OnRFDwellTimeChanged(DynExp::ModuleInstance *Instance, double Value) const
Definition: ODMR.cpp:447
static constexpr auto InitializingState
Definition: ODMR.h:253
void OnStartClicked(DynExp::ModuleInstance *Instance, bool) const
Definition: ODMR.cpp:624
void InitSweepValues(Util::SynchronizedPointer< ModuleDataType > &ModuleData)
Definition: ODMR.cpp:298
void OnSensitivitySamplingRateChanged(DynExp::ModuleInstance *Instance, double Value) const
Definition: ODMR.cpp:549
void OnSensitivityResonanceFreqChanged(DynExp::ModuleInstance *Instance, double Value) const
Definition: ODMR.cpp:531
void OnRFModSineClicked(DynExp::ModuleInstance *Instance, bool Checked) const
Definition: ODMR.cpp:461
void OnSweepSeriesAdvanceLastValueClicked(DynExp::ModuleInstance *Instance, int Checked) const
Definition: ODMR.cpp:618
static constexpr auto ODMRTraceInitState
Definition: ODMR.h:261
void OnStartSensitivityClicked(DynExp::ModuleInstance *Instance, bool) const
Definition: ODMR.cpp:635
static constexpr auto ReadyState
Definition: ODMR.h:255
virtual std::string GetName() const override
Returns the name of this Object type.
Definition: ODMR.h:166
static constexpr auto MeasurementSeriesStepState
Definition: ODMR.h:259
constexpr static auto Category() noexcept
Definition: ODMR.h:161
void OnRFOffClicked(DynExp::ModuleInstance *Instance, bool) const
Definition: ODMR.cpp:664
void OnSweepSeriesParamChanged(DynExp::ModuleInstance *Instance, int Index) const
Definition: ODMR.cpp:579
void OnEnableSensitivityAnalysisClicked(DynExp::ModuleInstance *Instance, bool Checked) const
Definition: ODMR.cpp:561
void OnRFPowerChanged(DynExp::ModuleInstance *Instance, double Value) const
Definition: ODMR.cpp:417
void OnInit(DynExp::ModuleInstance *Instance) const override final
This event is triggered right before the module thread starts. Override it to lock instruments this m...
Definition: ODMR.cpp:377
void OnRecordSensitivityOncePerSweepClicked(DynExp::ModuleInstance *Instance, int Checked) const
Definition: ODMR.cpp:519
void OnSweepSeriesStartChanged(DynExp::ModuleInstance *Instance, double Value) const
Definition: ODMR.cpp:594
StateType ODMRTraceFinishFunc(DynExp::ModuleInstance &Instance)
Definition: ODMR.cpp:778
const Util::StateMachineContext< StateMachineStateType > SensitivityOffResonanceContext
Definition: ODMR.h:275
bool TreatModuleExceptionsAsWarnings() const override final
Determines whether this module should be terminated if an exception leaves the module's main loop or ...
Definition: ODMR.h:170
void OnRFCenterFreqChanged(DynExp::ModuleInstance *Instance, double Value) const
Definition: ODMR.cpp:429
void OnSensitivityDurationChanged(DynExp::ModuleInstance *Instance, double Value) const
Definition: ODMR.cpp:555
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
Util::CallableMemberWrapper< ModuleBase, ModuleDataTypeSyncPtrType(ModuleBase::*)(const std::chrono::milliseconds)> ModuleDataGetterType
Invoking an instance of this alias is supposed to call ModuleBase::GetModuleData() of the instance th...
Definition: Module.h:587
const std::unique_ptr< ModuleDataType > ModuleData
Module data belonging to this ModuleBase instance.
Definition: Module.h:743
ModuleBase(const std::thread::id OwnerThreadID, ParamsBasePtrType &&Params)
Constructs a ModuleBase instance.
Definition: Module.cpp:189
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
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
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 modules with a Qt-based user interface. Derive from this class to implement modules wi...
Definition: Module.h:1344
Configurator class for QModuleBase.
Definition: Module.h:1330
Data class for QModuleBase.
Definition: Module.h:1220
Parameter class for QModuleBase.
Definition: Module.h:1306
QModuleParamsBase(ItemIDType ID, const DynExpCore &Core)
Constructs the parameters for a QModuleBase instance.
Definition: Module.h:1312
void Set(EnumType Flag)
Sets a flag.
Definition: Util.h:1281
bool Test(const std::array< EnumType, N > &Flags) const
Tests whether all of the flags passed as an array are set.
Definition: Util.h:1257
State machine context as used by class StateMachine. A state machine context holds a map with keys an...
Definition: Util.h:1362
State machine state as used by class StateMachine. A state mainly wraps a state function of the membe...
Definition: Util.h:1305
This class models a state machine. It keeps track of the current state and allows to invoke its assoc...
Definition: Util.h:1435
Pointer to lock a class derived from ISynchronizedPointerLockable for synchronizing between threads....
Definition: Util.h:170
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.
DynExpErrorCodes
DynExp's error codes
Definition: Exception.h:22
Accumulates include statements to provide a precompiled header.
Type describing a generic periodic function.