DynExp
Highly flexible laboratory automation for dynamically changing experiments.
Loading...
Searching...
No Matches
NetworkLaser.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 "NetworkLaser.pb.h"
16#include "NetworkLaser.grpc.pb.h"
17
18namespace DynExpInstr
19{
20 class NetworkLaser;
21
22 constexpr DynExpProto::Common::FrequencyUnitType ToPrototUnitType(LaserData::FrequencyUnitType Unit)
23 {
24 switch (Unit)
25 {
26 case LaserData::FrequencyUnitType::Hz: return DynExpProto::Common::FrequencyUnitType::Hz;
27 case LaserData::FrequencyUnitType::nm: return DynExpProto::Common::FrequencyUnitType::nm;
28 default: throw Util::InvalidDataException("The given unit does not exist in the LaserData::FrequencyUnitType enumeration. Did you forget to adjust the FrequencyUnitType enumeration in class \"LaserData\"?");
29 }
30 }
31
32 constexpr LaserData::FrequencyUnitType ToLaserUnitType(DynExpProto::Common::FrequencyUnitType Unit)
33 {
34 switch (Unit)
35 {
36 case DynExpProto::Common::FrequencyUnitType::Hz: return LaserData::FrequencyUnitType::Hz;
37 case DynExpProto::Common::FrequencyUnitType::nm: return LaserData::FrequencyUnitType::nm;
38 default: throw Util::InvalidDataException("The given unit does not exist in the DynExpProto::Common::FrequencyUnitType enumeration or is not supported by this instrument. Did you forget to adjust the FrequencyUnitType enumeration in file \"Common.proto\"?");
39 }
40 }
41
42 constexpr DynExpProto::Common::IntensityUnitType ToPrototUnitType(LaserData::IntensityUnitType Unit)
43 {
44 switch (Unit)
45 {
46 case LaserData::IntensityUnitType::Power_W: return DynExpProto::Common::IntensityUnitType::Power_W;
47 default: throw Util::InvalidDataException("The given unit does not exist in the LaserData::IntensityUnitType enumeration. Did you forget to adjust the IntensityUnitType enumeration in class \"LaserData\"?");
48 }
49 }
50
51 constexpr LaserData::IntensityUnitType ToLaserUnitType(DynExpProto::Common::IntensityUnitType Unit)
52 {
53 switch (Unit)
54 {
55 case DynExpProto::Common::IntensityUnitType::Power_W: return LaserData::IntensityUnitType::Power_W;
56 default: throw Util::InvalidDataException("The given unit does not exist in the DynExpProto::Common::IntensityUnitType enumeration or is not supported by this instrument. Did you forget to adjust the IntensityUnitType enumeration in file \"Common.proto\"?");
57 }
58 }
59
60 constexpr LaserData::LaserStateType ToLaserStateType(DynExpProto::NetworkLaser::StateType State)
61 {
62 switch (State)
63 {
64 case DynExpProto::NetworkLaser::StateType::Ready: return LaserData::LaserStateType::Ready;
65 case DynExpProto::NetworkLaser::StateType::Startup: return LaserData::LaserStateType::Startup;
66 case DynExpProto::NetworkLaser::StateType::EnabledConstant: return LaserData::LaserStateType::EmissionEnabledConstant;
67 case DynExpProto::NetworkLaser::StateType::EnabledScanning: return LaserData::LaserStateType::EmissionEnabledScanning;
68 case DynExpProto::NetworkLaser::StateType::ErrorState: return LaserData::LaserStateType::Error;
69 default: throw Util::InvalidDataException("The given state does not exist in the DynExpProto::NetworkLaser::StateType enumeration.");
70 }
71 }
72
73 namespace NetworkLaserTasks
74 {
75 class InitTask : public gRPCInstrumentTasks::InitTask<Laser, 0, DynExpProto::NetworkLaser::NetworkLaser>
76 {
78
79 virtual void InitFuncImpl(dispatch_tag<InitTask>, DynExp::InstrumentInstance& Instance) {}
80 };
81
82 class ExitTask : public gRPCInstrumentTasks::ExitTask<Laser, 0, DynExpProto::NetworkLaser::NetworkLaser>
83 {
85
86 virtual void ExitFuncImpl(dispatch_tag<ExitTask>, DynExp::InstrumentInstance& Instance) {}
87 };
88
89 class UpdateTask : public gRPCInstrumentTasks::UpdateTask<Laser, 0, DynExpProto::NetworkLaser::NetworkLaser>
90 {
92
93 virtual void UpdateFuncImpl(dispatch_tag<UpdateTask>, DynExp::InstrumentInstance& Instance) {}
94 };
95
97 {
98 public:
100
101 private:
103
104 double Frequency;
105 };
106
108 {
109 public:
111
112 private:
114
115 double Intensity;
116 };
117
119 {
120 public:
122
123 private:
125
126 double ScanRange;
127 };
128
130 {
131 public:
133
134 private:
136
137 double ScanRate;
138 };
139
140 class EnableTask final : public DynExp::TaskBase
141 {
142 public:
144
145 private:
147 };
148
150 {
151 public:
153
154 private:
156 };
157
159 {
160 public:
162
163 private:
165 };
166
167 class DisableTask final : public DynExp::TaskBase
168 {
169 public:
171
172 private:
174 };
175 }
176
177 class NetworkLaserData : public gRPCInstrumentData<Laser, 0, DynExpProto::NetworkLaser::NetworkLaser>
178 {
181
182 public:
183 NetworkLaserData() = default;
184 virtual ~NetworkLaserData() = default;
185
186 auto GetFrequencyUnit() const noexcept { return FrequencyUnit; }
187 auto GetIntensityUnit() const noexcept { return IntensityUnit; }
188 auto GetMinFrequency() const noexcept { return HardwareMinFrequency; }
189 auto GetMaxFrequency() const noexcept { return HardwareMaxFrequency; }
190 auto GetMinIntensity() const noexcept { return HardwareMinIntensity; }
191 auto GetMaxIntensity() const noexcept { return HardwareMaxIntensity; }
192 auto GetMinScanRange() const noexcept { return HardwareMinScanRange; }
193 auto GetMaxScanRange() const noexcept { return HardwareMaxScanRange; }
194 auto GetMinScanRate() const noexcept { return HardwareMinScanRate; }
195 auto GetMaxScanRate() const noexcept { return HardwareMaxScanRate; }
197
198 private:
200 virtual void ResetImpl(dispatch_tag<NetworkLaserData>) {};
201
202 virtual LaserStateType GetLaserStateChild() const noexcept override { return LaserState; }
203
204 FrequencyUnitType FrequencyUnit = FrequencyUnitType::Hz;
205 IntensityUnitType IntensityUnit = IntensityUnitType::Power_W;
215
216 LaserStateType LaserState = LaserStateType::Ready;
217 };
218
219 class NetworkLaserParams : public gRPCInstrumentParams<Laser, 0, DynExpProto::NetworkLaser::NetworkLaser>
220 {
221 public:
223 virtual ~NetworkLaserParams() = default;
224
225 virtual const char* GetParamClassTag() const noexcept override { return "NetworkLaserParams"; }
226
227 private:
228 void ConfigureParamsImpl(dispatch_tag<gRPCInstrumentParams<Laser, 0, DynExpProto::NetworkLaser::NetworkLaser>>) override final { ConfigureParamsImpl(dispatch_tag<NetworkLaserParams>()); }
229 virtual void ConfigureParamsImpl(dispatch_tag<NetworkLaserParams>) {}
230
231 DummyParam Dummy = { *this };
232 };
233
234 class NetworkLaserConfigurator : public gRPCInstrumentConfigurator<Laser, 0, DynExpProto::NetworkLaser::NetworkLaser>
235 {
236 public:
239
241 virtual ~NetworkLaserConfigurator() = default;
242
243 private:
244 virtual DynExp::ParamsBasePtrType MakeParams(DynExp::ItemIDType ID, const DynExp::DynExpCore& Core) const override { return DynExp::MakeParams<NetworkLaserConfigurator>(ID, Core); }
245 };
246
247 class NetworkLaser : public gRPCInstrument<Laser, 0, DynExpProto::NetworkLaser::NetworkLaser>
248 {
249 public:
253
254 constexpr static auto Name() noexcept { return "Network Laser"; }
255
257 virtual ~NetworkLaser() {}
258
259 virtual std::string GetName() const override { return Name(); }
260
261 virtual LaserData::FrequencyUnitType GetFrequencyUnit() const override;
262 virtual LaserData::IntensityUnitType GetIntensityUnit() const override;
263 virtual double GetMinFrequency() const override;
264 virtual double GetMaxFrequency() const override;
265 virtual double GetMinIntensity() const override;
266 virtual double GetMaxIntensity() const override;
267 virtual double GetMinScanRange() const override;
268 virtual double GetMaxScanRange() const override;
269 virtual double GetMinScanRate() const override;
270 virtual double GetMaxScanRate() const override;
271 virtual double GetModeHopFreeTuningRange() const override;
272
273 // Logical const-ness: const member functions to allow inserting tasks into task queue.
274 virtual void SetFrequency(double Frequency, DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<NetworkLaserTasks::SetFrequencyTask>(Frequency, std::move(CallbackFunc)); }
275 virtual void SetIntensity(double Intensity, DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<NetworkLaserTasks::SetIntensityTask>(Intensity, std::move(CallbackFunc)); }
276 virtual void SetScanRange(double ScanRange, DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<NetworkLaserTasks::SetScanRangeTask>(ScanRange, std::move(CallbackFunc)); }
277 virtual void SetScanRate(double ScanRate, DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<NetworkLaserTasks::SetScanRateTask>(ScanRate, std::move(CallbackFunc)); }
278
279 virtual void Enable(DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<NetworkLaserTasks::EnableTask>(std::move(CallbackFunc)); }
280 virtual void Disable(DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<NetworkLaserTasks::DisableTask>(std::move(CallbackFunc)); }
281 virtual void ScanContinuously(DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<NetworkLaserTasks::ScanContinuouslyTask>(std::move(CallbackFunc)); }
282 virtual void DisableScan(DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { MakeAndEnqueueTask<NetworkLaserTasks::DisableScanTask>(std::move(CallbackFunc)); }
283
284 private:
287
288 virtual std::unique_ptr<DynExp::InitTaskBase> MakeInitTask() const override { return DynExp::MakeTask<NetworkLaserTasks::InitTask>(); }
289 virtual std::unique_ptr<DynExp::ExitTaskBase> MakeExitTask() const override { return DynExp::MakeTask<NetworkLaserTasks::ExitTask>(); }
290 virtual std::unique_ptr<DynExp::UpdateTaskBase> MakeUpdateTask() const override { return DynExp::MakeTask<NetworkLaserTasks::UpdateTask>(); }
291 };
292}
Defines DynExp's core module as an interface between the UI and DynExp objects.
Defines a meta instrument for a laser source.
FrequencyUnitType
Supported laser frequency units.
Definition Laser.h:74
LaserStateType
Possible laser states.
Definition Laser.h:106
@ Startup
The laser is warming up.
@ Error
The laser is in an error state.
@ EmissionEnabledConstant
The laser is emitting in constant mode.
@ EmissionEnabledScanning
The laser is emitting in scan mode.
@ Ready
The laser is ready for emission.
IntensityUnitType
Supported laser intensity units.
Definition Laser.h:85
Meta instrument for a laser.
Definition Laser.h:189
virtual ~NetworkLaserConfigurator()=default
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...
auto GetModeHopFreeTuningRange() const noexcept
auto GetMinIntensity() const noexcept
auto GetIntensityUnit() const noexcept
auto GetMaxFrequency() const noexcept
virtual ~NetworkLaserData()=default
auto GetMaxIntensity() const noexcept
void ResetImpl(dispatch_tag< gRPCInstrumentData< Laser, 0, DynExpProto::NetworkLaser::NetworkLaser > >) override final
auto GetMinScanRate() const noexcept
virtual LaserStateType GetLaserStateChild() const noexcept override
auto GetMinScanRange() const noexcept
auto GetMaxScanRange() const noexcept
IntensityUnitType IntensityUnit
FrequencyUnitType FrequencyUnit
auto GetMinFrequency() const noexcept
auto GetMaxScanRate() const noexcept
auto GetFrequencyUnit() const noexcept
virtual void ConfigureParamsImpl(dispatch_tag< NetworkLaserParams >)
virtual ~NetworkLaserParams()=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...
NetworkLaserParams(DynExp::ItemIDType ID, const DynExp::DynExpCore &Core)
void ConfigureParamsImpl(dispatch_tag< gRPCInstrumentParams< Laser, 0, DynExpProto::NetworkLaser::NetworkLaser > >) override final
DisableScanTask(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...
DisableTask(CallbackType CallbackFunc) noexcept
EnableTask(CallbackType CallbackFunc) noexcept
virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance &Instance) override
Runs the task. Override RunChild() to define a derived task's action(s). Any exception leaving RunChi...
virtual void ExitFuncImpl(dispatch_tag< ExitTask >, DynExp::InstrumentInstance &Instance)
void ExitFuncImpl(dispatch_tag< gRPCInstrumentTasks::ExitTask< Laser, 0, DynExpProto::NetworkLaser::NetworkLaser > >, DynExp::InstrumentInstance &Instance) override final
void InitFuncImpl(dispatch_tag< gRPCInstrumentTasks::InitTask< Laser, 0, DynExpProto::NetworkLaser::NetworkLaser > >, DynExp::InstrumentInstance &Instance) override final
virtual void InitFuncImpl(dispatch_tag< InitTask >, DynExp::InstrumentInstance &Instance)
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...
ScanContinuouslyTask(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...
SetFrequencyTask(double Frequency, CallbackType CallbackFunc) noexcept
SetIntensityTask(double Intensity, 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...
SetScanRangeTask(double ScanRange, 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...
SetScanRateTask(double ScanRate, CallbackType CallbackFunc) noexcept
virtual void UpdateFuncImpl(dispatch_tag< UpdateTask >, DynExp::InstrumentInstance &Instance)
void UpdateFuncImpl(dispatch_tag< gRPCInstrumentTasks::UpdateTask< Laser, 0, DynExpProto::NetworkLaser::NetworkLaser > >, DynExp::InstrumentInstance &Instance) override final
virtual void Disable(DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Disables emission.
virtual std::unique_ptr< DynExp::UpdateTaskBase > MakeUpdateTask() const override
Factory function for an update task (UpdateTaskBase). Override to define the desired update task in d...
virtual double GetMinScanRate() const override
Determines the minimal frequency scan rate. The default implementation returns 0.0,...
virtual double GetMinFrequency() const override
Determines the minimal emission frequency. The default implementation returns GetMaxFrequency() which...
virtual LaserData::FrequencyUnitType GetFrequencyUnit() const override
Determines the frequency unit.
virtual void SetFrequency(double Frequency, DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Sets the laser's emission frequency.
virtual double GetMaxScanRange() const override
Determines the maximal frequency scan range. The default implementation returns 0....
virtual void SetScanRate(double ScanRate, DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Sets the laser's frequency scan rate.
virtual std::unique_ptr< DynExp::InitTaskBase > MakeInitTask() const override
Factory function for an init task (InitTaskBase). Override to define the desired initialization task ...
virtual void SetIntensity(double Intensity, DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Sets the laser's output intensity.
virtual void DisableScan(DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Disables scan and changes to constant emission mode.
virtual double GetMaxScanRate() const override
Determines the maximal frequency scan rate. The default implementation returns 0.0,...
virtual std::string GetName() const override
Returns the name of this Object type.
virtual void ScanContinuously(DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Enables emission in scan mode.
virtual double GetMinScanRange() const override
Determines the minimal frequency scan range. The default implementation returns 0....
static constexpr auto Name() noexcept
virtual void SetScanRange(double ScanRange, DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Sets the laser's frequency scan range.
virtual LaserData::IntensityUnitType GetIntensityUnit() const override
Determines the intensity unit.
virtual std::unique_ptr< DynExp::ExitTaskBase > MakeExitTask() const override
Factory function for an exit task (ExitTaskBase). Override to define the desired deinitialization tas...
virtual double GetModeHopFreeTuningRange() const override
Determines the mode hop free tuning range. The default implementation returns 0.0,...
virtual double GetMinIntensity() const override
Determines the minimal emission intensity. The default implementation returns GetMaxIntensity() which...
virtual double GetMaxIntensity() const override
Determines the maximal emission intensity.
virtual void Enable(DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
Enables emission in constant mode.
virtual double GetMaxFrequency() const override
Determines the maximal emission frequency.
void ResetImpl(dispatch_tag< gRPCInstrument< Laser, 0, DynExpProto::NetworkLaser::NetworkLaser > >) override final
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: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
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 DynExpProto::Common::IntensityUnitType ToPrototUnitType(DataStreamInstrumentData::UnitType Unit)
constexpr LaserData::FrequencyUnitType ToLaserUnitType(DynExpProto::Common::FrequencyUnitType Unit)
constexpr LaserData::LaserStateType ToLaserStateType(DynExpProto::NetworkLaser::StateType State)
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.