12 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkSpectrometer>(Instance.
InstrumentDataGetter());
13 StubPtr = InstrData->template GetStub<DynExpProto::NetworkSpectrometer::NetworkSpectrometer>();
16 auto Response =
InvokeStubFunc(StubPtr, &DynExpProto::NetworkSpectrometer::NetworkSpectrometer::Stub::GetDeviceInfo, {});
19 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkSpectrometer>(Instance.
InstrumentDataGetter());
23 InstrData->MinFrequency = Response.hardwareminfrequency();
24 InstrData->MaxFrequency = Response.hardwaremaxfrequency();
26 InstrData->SetMinExposureTime(Response.hardwareminexposuretime_ms());
27 InstrData->SetMaxExposureTime(Response.hardwaremaxexposuretime_ms());
37 ExitFuncImpl(dispatch_tag<ExitTask>(), Instance);
44 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkSpectrometer>(Instance.
InstrumentDataGetter());
45 StubPtr = InstrData->template GetStub<DynExpProto::NetworkSpectrometer::NetworkSpectrometer>();
48 InvokeStubFunc(StubPtr, &DynExpProto::NetworkSpectrometer::NetworkSpectrometer::Stub::Abort, {});
61 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkSpectrometer>(Instance.
InstrumentDataGetter());
62 StubPtr = InstrData->template GetStub<DynExpProto::NetworkSpectrometer::NetworkSpectrometer>();
65 auto StateResponse =
InvokeStubFunc(StubPtr, &DynExpProto::NetworkSpectrometer::NetworkSpectrometer::Stub::GetState, {});
66 auto ExposureTimeResponse =
InvokeStubFunc(StubPtr, &DynExpProto::NetworkSpectrometer::NetworkSpectrometer::Stub::GetExposureTime, {});
67 auto FrequencyRangeResponse =
InvokeStubFunc(StubPtr, &DynExpProto::NetworkSpectrometer::NetworkSpectrometer::Stub::GetFrequencyRange, {});
68 auto SilentModeResponse =
InvokeStubFunc(StubPtr, &DynExpProto::NetworkSpectrometer::NetworkSpectrometer::Stub::GetSilentMode, {});
70 DynExpProto::NetworkSpectrometer::SpectrumMessage SpectrumResponse;
71 if (StateResponse.spectrumavailable())
72 SpectrumResponse =
InvokeStubFunc(StubPtr, &DynExpProto::NetworkSpectrometer::NetworkSpectrometer::Stub::GetSpectrum, {});
75 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkSpectrometer>(Instance.
InstrumentDataGetter());
78 InstrData->CapturingProgress = StateResponse.has_progress() ? StateResponse.progress() : 0;
79 InstrData->SetCurrentExposureTime(ExposureTimeResponse.time_ms());
80 InstrData->SetCurrentLowerFrequency(FrequencyRangeResponse.lowerfrequency());
81 InstrData->SetCurrentUpperFrequency(FrequencyRangeResponse.upperfrequency());
82 InstrData->SetSilentModeEnabled(SilentModeResponse.enable());
84 if (StateResponse.spectrumavailable() && SpectrumResponse.spectrumavailable())
86 if (SpectrumResponse.resultmsg().result() != DynExpProto::NetworkSpectrometer::ResultType::OK)
91 for (decltype(SpectrumResponse.samples_size()) i = 0; i < SpectrumResponse.samples_size(); ++i)
92 Spectrum.
GetSpectrum().insert({ SpectrumResponse.samples(i).frequency(), SpectrumResponse.samples(i).value() });
94 InstrData->SetSpectrum(std::move(Spectrum));
100 UpdateFuncImpl(dispatch_tag<UpdateTask>(), Instance);
105 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkSpectrometer>(Instance.
InstrumentDataGetter());
109 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkSpectrometer>(Instance.
InstrumentDataGetter());
110 StubPtr = InstrData->template GetStub<DynExpProto::NetworkSpectrometer::NetworkSpectrometer>();
113 DynExpProto::NetworkSpectrometer::ExposureTimeMessage Message;
114 Message.set_time_ms(ExposureTime.count());
116 InvokeStubFunc(StubPtr, &DynExpProto::NetworkSpectrometer::NetworkSpectrometer::Stub::SetExposureTime, Message);
125 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkSpectrometer>(Instance.
InstrumentDataGetter());
126 StubPtr = InstrData->template GetStub<DynExpProto::NetworkSpectrometer::NetworkSpectrometer>();
129 DynExpProto::NetworkSpectrometer::FrequencyRangeMessage Message;
130 Message.set_lowerfrequency(LowerFrequency);
131 Message.set_upperfrequency(UpperFrequency);
133 InvokeStubFunc(StubPtr, &DynExpProto::NetworkSpectrometer::NetworkSpectrometer::Stub::SetFrequencyRange, Message);
142 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkSpectrometer>(Instance.
InstrumentDataGetter());
143 StubPtr = InstrData->template GetStub<DynExpProto::NetworkSpectrometer::NetworkSpectrometer>();
146 DynExpProto::NetworkSpectrometer::SilentModeMessage Message;
147 Message.set_enable(Enable);
149 InvokeStubFunc(StubPtr, &DynExpProto::NetworkSpectrometer::NetworkSpectrometer::Stub::SetSilentMode, Message);
158 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkSpectrometer>(Instance.
InstrumentDataGetter());
159 StubPtr = InstrData->template GetStub<DynExpProto::NetworkSpectrometer::NetworkSpectrometer>();
162 auto Response =
InvokeStubFunc(StubPtr, &DynExpProto::NetworkSpectrometer::NetworkSpectrometer::Stub::RecordSpectrumAsync, {});
163 if (Response.result() != DynExpProto::NetworkSpectrometer::ResultType::OK)
173 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkSpectrometer>(Instance.
InstrumentDataGetter());
174 StubPtr = InstrData->template GetStub<DynExpProto::NetworkSpectrometer::NetworkSpectrometer>();
177 InvokeStubFunc(StubPtr, &DynExpProto::NetworkSpectrometer::NetworkSpectrometer::Stub::Abort, {});
184 FrequencyUnit = FrequencyUnitType::Hz;
185 IntensityUnit = IntensityUnitType::Counts;
190 CapturingProgress = 0.0;
192 ResetImpl(dispatch_tag<NetworkSpectrometerData>());
202 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkSpectrometer>(
GetInstrumentData());
204 return InstrData->GetFrequencyUnit();
209 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkSpectrometer>(
GetInstrumentData());
211 return InstrData->GetIntensityUnit();
216 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkSpectrometer>(
GetInstrumentData());
218 return InstrData->GetMinFrequency();
223 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkSpectrometer>(
GetInstrumentData());
225 return InstrData->GetMaxFrequency();
Implementation of a gRPC client instrument to access a remote spectrometer meta instrument.
void ResetImpl(dispatch_tag< gRPCInstrumentData< Spectrometer, 0, DynExpProto::NetworkSpectrometer::NetworkSpectrometer >>) 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...
void ExitFuncImpl(dispatch_tag< gRPCInstrumentTasks::ExitTask< Spectrometer, 0, DynExpProto::NetworkSpectrometer::NetworkSpectrometer >>, DynExp::InstrumentInstance &Instance) override final
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...
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 UpdateFuncImpl(dispatch_tag< gRPCInstrumentTasks::UpdateTask< Spectrometer, 0, DynExpProto::NetworkSpectrometer::NetworkSpectrometer >>, DynExp::InstrumentInstance &Instance) override final
virtual SpectrometerData::IntensityUnitType GetIntensityUnit() const
Determines the intensity (y-axis) unit of the spectra acquired by the derived instrument.
void ResetImpl(dispatch_tag< gRPCInstrument< Spectrometer, 0, DynExpProto::NetworkSpectrometer::NetworkSpectrometer >>) override final
virtual SpectrometerData::FrequencyUnitType GetFrequencyUnit() const
Determines the frequency (x-axis) unit of the spectra acquired by the derived instrument.
virtual double GetMinFrequency() const
Determines the minimal lower frequency limit where the spectrum acquisition can begin.
virtual double GetMaxFrequency() const
Determines the maximal upper frequency limit where the spectrum acquisition can end.
NetworkSpectrometer(const std::thread::id OwnerThreadID, DynExp::ParamsBasePtrType &&Params)
Type describing a spectrum as acquired by the Spectrometer instrument.
auto & GetSpectrum() const noexcept
Getter for Samples.
FrequencyUnitType
Supported spectrometer frequency units.
IntensityUnitType
Supported spectrometer intensity units.
Meta instrument for a spectrometer.
Meta instrument template for transforming meta instruments into network instruments,...
InstrumentDataTypeSyncPtrType GetInstrumentData(const std::chrono::milliseconds Timeout=GetInstrumentDataTimeoutDefault)
Locks the mutex of the instrument data class instance InstrumentData assigned to this InstrumentBase ...
Defines data for a thread belonging to a InstrumentBase instance. Refer to RunnableInstance.
const InstrumentBase::InstrumentDataGetterType InstrumentDataGetter
Getter for instrument's data. Refer to InstrumentBase::InstrumentDataGetterType.
Refer to ParamsBase::dispatch_tag.
const auto & GetOwner() const noexcept
Returns Owner.
Defines the return type of task functions.
DynExp's instrument namespace contains the implementation of DynExp instruments which extend DynExp's...
constexpr SpectrometerData::FrequencyUnitType ToSpectrometerUnitType(DynExpProto::Common::FrequencyUnitType Unit)
ResponseMsgType InvokeStubFunc(StubPtrType< gRPCStub > StubPtr, StubFuncPtrType< gRPCStub, RequestMsgType, ResponseMsgType > StubFunc, const RequestMsgType &RequestMsg)
Invokes a gRPC stub function as a remote procedure call. Waits for a fixed amount of time (2 seconds)...
std::shared_ptr< typename gRPCStub::Stub > StubPtrType
Alias for a pointer to a gRPC stub.
constexpr SpectrometerData::CapturingStateType ToSpectrometerStateType(DynExpProto::NetworkSpectrometer::StateType State)
std::unique_ptr< ParamsBase > ParamsBasePtrType
Alias for a pointer to the parameter system base class ParamsBase.
Accumulates include statements to provide a precompiled header.