DynExp
Highly flexible laboratory automation for dynamically changing experiments.
Loading...
Searching...
No Matches
NetworkSpectrometer.h
Go to the documentation of this file.
1// This file is part of DynExp.
2
8#pragma once
9
10#include "stdafx.h"
11#include "DynExpCore.h"
14
15#include "NetworkSpectrometer.pb.h"
16#include "NetworkSpectrometer.grpc.pb.h"
17
18namespace DynExpInstr
19{
20 class NetworkSpectrometer;
21
22 constexpr DynExp::Units::UnitType ToSpectrometerUnitType(DynExpProto::Common::FrequencyUnitType Unit)
23 {
24 switch (Unit)
25 {
26 case DynExpProto::Common::FrequencyUnitType::Hz: return DynExp::Units::UnitType::Freq_Hz;
27 case DynExpProto::Common::FrequencyUnitType::nm: return DynExp::Units::UnitType::Wavelength_nm;
28 case DynExpProto::Common::FrequencyUnitType::Inv_cm: return DynExp::Units::UnitType::Inv_cm;
29 default: throw Util::InvalidDataException("The given unit is not supported here. Did you forget to adjust this function or the FrequencyUnitType enumeration in file \"Common.proto\"?");
30 }
31 }
32
33 constexpr DynExp::Units::UnitType ToSpectrometerUnitType(DynExpProto::Common::IntensityUnitType Unit)
34 {
35 switch (Unit)
36 {
37 case DynExpProto::Common::IntensityUnitType::Counts: return DynExp::Units::UnitType::Counts;
38 default: throw Util::InvalidDataException("The given unit is not supported here. Did you forget to adjust this function or the IntensityUnitType enumeration in file \"Common.proto\"?");
39 }
40 }
41
42 constexpr SpectrometerData::CapturingStateType ToSpectrometerStateType(DynExpProto::NetworkSpectrometer::StateType State)
43 {
44 switch (State)
45 {
46 case DynExpProto::NetworkSpectrometer::StateType::Ready: return SpectrometerData::CapturingStateType::Ready;
47 case DynExpProto::NetworkSpectrometer::StateType::WarningState: return SpectrometerData::CapturingStateType::Warning;
48 case DynExpProto::NetworkSpectrometer::StateType::ErrorState: return SpectrometerData::CapturingStateType::Error;
49 case DynExpProto::NetworkSpectrometer::StateType::Recording: return SpectrometerData::CapturingStateType::Capturing;
50 default: throw Util::InvalidDataException("The given state does not exist in the DynExpProto::NetworkSpectrometer::StateType enumeration.");
51 }
52 }
53
54 namespace NetworkSpectrometerTasks
55 {
56 class InitTask : public gRPCInstrumentTasks::InitTask<Spectrometer, 0, DynExpProto::NetworkSpectrometer::NetworkSpectrometer>
57 {
59
60 virtual void InitFuncImpl(dispatch_tag<InitTask>, DynExp::InstrumentInstance& Instance) {}
61 };
62
63 class ExitTask : public gRPCInstrumentTasks::ExitTask<Spectrometer, 0, DynExpProto::NetworkSpectrometer::NetworkSpectrometer>
64 {
66
67 virtual void ExitFuncImpl(dispatch_tag<ExitTask>, DynExp::InstrumentInstance& Instance) {}
68 };
69
70 class UpdateTask : public gRPCInstrumentTasks::UpdateTask<Spectrometer, 0, DynExpProto::NetworkSpectrometer::NetworkSpectrometer>
71 {
73
74 virtual void UpdateFuncImpl(dispatch_tag<UpdateTask>, DynExp::InstrumentInstance& Instance) {}
75 };
76
87
99
101 {
102 public:
104
105 private:
107
108 bool Enable;
109 };
110
111 class RecordTask final : public DynExp::TaskBase
112 {
113 public:
115
116 private:
118 };
119
120 class AbortTask final : public DynExp::TaskBase
121 {
122 public:
124
125 private:
127 };
128 }
129
130 class NetworkSpectrometerData : public gRPCInstrumentData<Spectrometer, 0, DynExpProto::NetworkSpectrometer::NetworkSpectrometer>
131 {
134
135 public:
137 virtual ~NetworkSpectrometerData() = default;
138
139 auto GetFrequencyUnit() const noexcept { return FrequencyUnit; }
140 auto GetIntensityUnit() const noexcept { return IntensityUnit; }
141 auto GetMinFrequency() const noexcept { return MinFrequency; }
142 auto GetMaxFrequency() const noexcept { return MaxFrequency; }
143
144 private:
146 virtual void ResetImpl(dispatch_tag<NetworkSpectrometerData>) {};
147
148 virtual CapturingStateType GetCapturingStateChild() const noexcept override { return CapturingState; }
149 virtual double GetCapturingProgressChild() const noexcept override { return CapturingProgress; }
150
153 double MinFrequency = 0.0;
154 double MaxFrequency = 0.0;
155
156 CapturingStateType CapturingState = CapturingStateType::Ready;
157 double CapturingProgress = 0.0;
158 };
159
160 class NetworkSpectrometerParams : public gRPCInstrumentParams<Spectrometer, 0, DynExpProto::NetworkSpectrometer::NetworkSpectrometer>
161 {
162 public:
164 virtual ~NetworkSpectrometerParams() = default;
165
166 virtual const char* GetParamClassTag() const noexcept override { return "NetworkSpectrometerParams"; }
167
168 private:
170 virtual void ConfigureParamsImpl(dispatch_tag<NetworkSpectrometerParams>) {}
171
172 DummyParam Dummy = { *this };
173 };
174
175 class NetworkSpectrometerConfigurator : public gRPCInstrumentConfigurator<Spectrometer, 0, DynExpProto::NetworkSpectrometer::NetworkSpectrometer>
176 {
177 public:
180
183
184 private:
185 virtual DynExp::ParamsBasePtrType MakeParams(DynExp::ItemIDType ID, const DynExp::DynExpCore& Core) const override { return DynExp::MakeParams<NetworkSpectrometerConfigurator>(ID, Core); }
186 };
187
188 class NetworkSpectrometer : public gRPCInstrument<Spectrometer, 0, DynExpProto::NetworkSpectrometer::NetworkSpectrometer>
189 {
190 public:
194
195 constexpr static auto Name() noexcept { return "Network Spectrometer"; }
196
199
200 virtual std::string GetName() const override { return Name(); }
201
202 virtual DynExp::Units::UnitType GetFrequencyUnit() const override;
203 virtual DynExp::Units::UnitType GetIntensityUnit() const override;
204 virtual double GetMinFrequency() const override;
205 virtual double GetMaxFrequency() const override;
206
207 // Logical const-ness: const member functions to allow inserting tasks into task queue.
208 virtual void SetExposureTime(SpectrometerData::TimeType ExposureTime, DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<NetworkSpectrometerTasks::SetExposureTimeTask>(ExposureTime, std::move(CallbackFunc)); }
209 virtual void SetFrequencyRange(double LowerFrequency, double UpperFrequency, DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<NetworkSpectrometerTasks::SetFrequencyRangeTask>(LowerFrequency, UpperFrequency, std::move(CallbackFunc)); }
210 virtual void SetSilentMode(bool Enable, DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<NetworkSpectrometerTasks::SetSetSilentModeTask>(Enable, std::move(CallbackFunc)); }
211
212 virtual void Record(DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<NetworkSpectrometerTasks::RecordTask>(std::move(CallbackFunc)); }
213 virtual void Abort(DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<NetworkSpectrometerTasks::AbortTask>(std::move(CallbackFunc)); }
214
215 private:
218
219 virtual std::unique_ptr<DynExp::InitTaskBase> MakeInitTask() const override { return DynExp::MakeTask<NetworkSpectrometerTasks::InitTask>(); }
220 virtual std::unique_ptr<DynExp::ExitTaskBase> MakeExitTask() const override { return DynExp::MakeTask<NetworkSpectrometerTasks::ExitTask>(); }
221 virtual std::unique_ptr<DynExp::UpdateTaskBase> MakeUpdateTask() const override { return DynExp::MakeTask<NetworkSpectrometerTasks::UpdateTask>(); }
222 };
223}
Defines DynExp's core module as an interface between the UI and DynExp objects.
Defines a meta instrument for a spectrometer.
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(dispatch_tag< gRPCInstrumentData< Spectrometer, 0, DynExpProto::NetworkSpectrometer::NetworkSpectrometer > >) override final
virtual double GetCapturingProgressChild() const noexcept override
virtual CapturingStateType GetCapturingStateChild() const noexcept override
virtual ~NetworkSpectrometerData()=default
virtual ~NetworkSpectrometerParams()=default
virtual void ConfigureParamsImpl(dispatch_tag< NetworkSpectrometerParams >)
virtual const char * GetParamClassTag() const noexcept override
This function is intended to be overridden once in each derived class returning the name of the respe...
void ConfigureParamsImpl(dispatch_tag< gRPCInstrumentParams< Spectrometer, 0, DynExpProto::NetworkSpectrometer::NetworkSpectrometer > >) override final
NetworkSpectrometerParams(DynExp::ItemIDType ID, const DynExp::DynExpCore &Core)
AbortTask(CallbackType CallbackFunc) noexcept
virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance &Instance) override
Runs the task. Override RunChild() to define a derived task's action(s). Any exception leaving RunChi...
void ExitFuncImpl(dispatch_tag< gRPCInstrumentTasks::ExitTask< Spectrometer, 0, DynExpProto::NetworkSpectrometer::NetworkSpectrometer > >, DynExp::InstrumentInstance &Instance) override final
virtual void ExitFuncImpl(dispatch_tag< ExitTask >, DynExp::InstrumentInstance &Instance)
virtual void InitFuncImpl(dispatch_tag< InitTask >, DynExp::InstrumentInstance &Instance)
void InitFuncImpl(dispatch_tag< gRPCInstrumentTasks::InitTask< Spectrometer, 0, DynExpProto::NetworkSpectrometer::NetworkSpectrometer > >, DynExp::InstrumentInstance &Instance) override final
virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance &Instance) override
Runs the task. Override RunChild() to define a derived task's action(s). Any exception leaving RunChi...
virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance &Instance) override
Runs the task. Override RunChild() to define a derived task's action(s). Any exception leaving RunChi...
SetExposureTimeTask(SpectrometerData::TimeType ExposureTime, CallbackType CallbackFunc) noexcept
SetFrequencyRangeTask(double LowerFrequency, double UpperFrequency, CallbackType CallbackFunc) noexcept
virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance &Instance) override
Runs the task. Override RunChild() to define a derived task's action(s). Any exception leaving RunChi...
virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance &Instance) override
Runs the task. Override RunChild() to define a derived task's action(s). Any exception leaving RunChi...
SetSetSilentModeTask(bool Enable, CallbackType CallbackFunc) noexcept
virtual void UpdateFuncImpl(dispatch_tag< UpdateTask >, DynExp::InstrumentInstance &Instance)
void UpdateFuncImpl(dispatch_tag< gRPCInstrumentTasks::UpdateTask< Spectrometer, 0, DynExpProto::NetworkSpectrometer::NetworkSpectrometer > >, DynExp::InstrumentInstance &Instance) override final
virtual void Abort(DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Aborts a currently running spectrum acquisition.
virtual DynExp::Units::UnitType GetIntensityUnit() const override
Determines the intensity (y-axis) unit of the spectra acquired by the derived instrument.
virtual void SetFrequencyRange(double LowerFrequency, double UpperFrequency, DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Sets the spectrometer's frequency range where the spectrum acquisition begins and ends.
virtual double GetMaxFrequency() const override
Determines the maximal upper frequency limit where the spectrum acquisition can end.
virtual void Record(DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Starts the acquisition of a single spectrum.
virtual std::unique_ptr< DynExp::InitTaskBase > MakeInitTask() const override
Factory function for an init task (InitTaskBase). Override to define the desired initialization task ...
virtual std::unique_ptr< DynExp::ExitTaskBase > MakeExitTask() const override
Factory function for an exit task (ExitTaskBase). Override to define the desired deinitialization tas...
virtual void SetSilentMode(bool Enable, DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Enables or disables the spectrometer's silent mode, i.e. disables or enables e.g. the spectrometer's ...
virtual DynExp::Units::UnitType GetFrequencyUnit() const override
Determines the frequency (x-axis) unit of the spectra acquired by the derived instrument.
virtual void SetExposureTime(SpectrometerData::TimeType ExposureTime, DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Sets the spectrometer's exposure time.
virtual std::string GetName() const override
Returns the name of this Object type.
static constexpr auto Name() noexcept
virtual double GetMinFrequency() const override
Determines the minimal lower frequency limit where the spectrum acquisition can begin.
void ResetImpl(dispatch_tag< gRPCInstrument< Spectrometer, 0, DynExpProto::NetworkSpectrometer::NetworkSpectrometer > >) override final
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...
CapturingStateType
Possible spectrometer states.
@ Warning
The spectrometer is in a warning state, but still ready to acquire a spectrum.
@ Capturing
The spectrometer is currently acquiring a spectrum.
@ Error
The spectrometer is in an error state.
@ Ready
The spectrometer is ready to acquire a spectrum.
std::chrono::milliseconds TimeType
Time type describing the spectrometer's times like its exposure time.
Meta instrument for a spectrometer.
Configurator class for gRPCInstrument.
Data class for gRPCInstrument.
Parameter class for gRPCInstrument.
Defines a task for deinitializing an instrument within an instrument inheritance hierarchy....
DynExp::ExitTaskBase::dispatch_tag< Type > dispatch_tag
Refer to DynExp::ParamsBase::dispatch_tag.
Defines a task for initializing an instrument within an instrument inheritance hierarchy....
DynExp::InitTaskBase::dispatch_tag< Type > dispatch_tag
Refer to DynExp::ParamsBase::dispatch_tag.
Defines a task for updating an instrument within an instrument inheritance hierarchy....
DynExp::UpdateTaskBase::dispatch_tag< Type > dispatch_tag
Refer to DynExp::ParamsBase::dispatch_tag.
Meta instrument template for transforming meta instruments into network instruments,...
DynExp's core class acts as the interface between the user interface and DynExp's internal data like ...
Definition DynExpCore.h:127
Defines data for a thread belonging to a InstrumentBase instance. Refer to RunnableInstance.
Definition Instrument.h:813
const std::thread::id OwnerThreadID
Thread id of the thread which has constructed (and owns) this Object instance.
Definition Object.h:2310
const ParamsBasePtrType Params
Pointer to the parameter class instance belonging to this Object instance.
Definition Object.h:2311
Refer to ParamsBase::dispatch_tag.
Definition Object.h:2026
Type owning a callback function which is invoked when a task has finished, failed,...
Definition Instrument.h:978
Base class for all tasks being processed by instruments. The class must not contain public virtual fu...
Definition Instrument.h:929
CallbackType CallbackFunc
This callback function is called after the task has finished (either successfully or not) with a poin...
TaskBase(CallbackType CallbackFunc=nullptr, std::chrono::system_clock::time_point DeferUntil={}) noexcept
Constructs an instrument task.
Defines the return type of task functions.
Definition Instrument.h:865
Data to operate on is invalid for a specific purpose. This indicates a corrupted data structure or fu...
Definition Exception.h:164
Defines a meta instrument template for transforming meta instruments into network instruments,...
DynExp's instrument namespace contains the implementation of DynExp instruments which extend DynExp's...
constexpr SpectrometerData::CapturingStateType ToSpectrometerStateType(DynExpProto::NetworkSpectrometer::StateType State)
constexpr DynExp::Units::UnitType ToSpectrometerUnitType(DynExpProto::Common::FrequencyUnitType Unit)
UnitType
Units which can be used with DynExp instruments.
Definition Units.h:28
@ Inv_cm
Wavenumber in 1/cm.
@ Freq_Hz
Frequency in Hz.
@ Wavelength_nm
Wavelength in nm.
@ Counts
Count rate in counts per second (cps)
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.
Accumulates include statements to provide a precompiled header.