// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #ifndef JFJOCH_GONIOMETERAXIS_H #define JFJOCH_GONIOMETERAXIS_H #include #include #include "Coord.h" class GoniometerAxis { std::string name; float start; float increment; Coord axis; std::optional helical_step; std::optional screening_wedge; public: GoniometerAxis(const std::string& name, float start, float increment, const Coord &axis, const std::optional &helical_step); GoniometerAxis& Axis(const Coord &input); GoniometerAxis& ScreeningWedge(const std::optional& input); [[nodiscard]] std::string GetName() const; [[nodiscard]] float GetStart_deg() const; [[nodiscard]] float GetIncrement_deg() const; [[nodiscard]] std::optional GetScreeningWedge() const; [[nodiscard]] float GetWedge_deg() const; [[nodiscard]] float GetAngle_deg(float image_number) const; [[nodiscard]] Coord GetAxis() const; [[nodiscard]] std::optional GetHelicalStep() const; [[nodiscard]] Coord GetPosition(int64_t image_number) const; [[nodiscard]] std::vector GetAngleContainer(int64_t max_image_number) const; [[nodiscard]] std::vector GetAngleContainerEnd(int64_t max_image_number) const; [[nodiscard]] std::vector GetXContainer_m(int64_t max_image_number) const; [[nodiscard]] std::vector GetYContainer_m(int64_t max_image_number) const; [[nodiscard]] std::vector GetZContainer_m(int64_t max_image_number) const; [[nodiscard]] std::vector GetAxisVector() const; [[nodiscard]] RotMatrix GetTransformationAngle(float angle_deg) const; }; #endif //JFJOCH_GONIOMETERAXIS_H