#ifndef MECHANICALCALIBRATION_HPP_INCLUDED
#define MECHANICALCALIBRATION_HPP_INCLUDED

#include <iostream>
#include <memory>
#include <optional>
#include <set>
#include <string>
#include <vector>
#include <NBO/NBO/FocusStabilizationDeviceRef.h>
#include <NBO/NBO/LSID_Type.h>
#include <NBO/NBO/SamplePositioningRef.h>
#include <NBO/NBO/UnitsLength_Type.h>
#include <NBO/NBO/UnitsTime_Type.h>
#include <NBO/NBO/Reference_Type.h>
#include <NBO/NBO/ENBOType.h>
#include <NBO/NBOGlobal.h>
#include <NBO/Shared/Base/NBOBaseClass.h>


namespace Inscoper::NBO {

/*!
* \brief Represents the XML element MechanicalCalibration.
*
* This describes the procedures that were used for mechanical calibration and the resulting calibration results.
*/
class NBO_EXPORT MechanicalCalibration : public NBOBaseClass {

public:
	/*!
	* \brief Represents the XML element AnnotationRef.
	*
	* This is a simple multi-line comment or annotation describing this component.
	*/
	class NBO_EXPORT InlineAnnotationRef : public Reference_Type {
	
	public:
		
		InlineAnnotationRef();
		~InlineAnnotationRef();
	
		/*!
		* \brief Cast a NBOBaseClass to a InlineAnnotationRef.
		*
		* \param base The base class to cast
		* \return The casted element, or nullptr if the cast fails
		*/
		static std::shared_ptr<InlineAnnotationRef> fromBase(NBOBaseClassPtr base);
	
		/*!
		* \brief Returns the class type name.
		*
		* \return The class type name
		*/
		std::string getTypeName() const override;
	
		/*!
		* \brief Returns the XML element name corresponding to this class.
		*
		* \return The XML element name
		*/
		std::string getXMLName() const override;
	
		/*!
		* \brief Returns the NBO Type corresponding to this class.
		*
		* \return The NBO Type value
		*/
		ENBOType getNBOType() const override;
	
		/*!
		* \brief Returns a list of all classes derived from this class.
		*
		* \return The list of derived classes
		*/
		std::vector<NBOBaseClassPtr> getChildren() const override;
	
		/*!
		* \brief Returns a list of all child elements contained in this class.
		*
		* \return The list of child classes
		*/
		std::vector<NBOBaseClassPtr> getSubElements() const override;
	
		/*!
		* \brief Populates this object from a JSON file.
		*
		* \param path The path to the JSON file
		* \param validate If true, validates constraints on value. Default is true.
		*/
		void fromJsonFile(const std::string& path, bool validate = true);
	
		/*!
		* \brief Populates this object from a JSON string.
		*
		* \param json_string The JSON content as a string
		* \param validate If true, validates constraints on value. Default is true.
		*/
		void fromJsonString(const std::string& json_string, bool validate = true);
	
		/*!
		* \brief Populates this object from a XML file.
		*
		* \param path The path to the XML file
		* \param validate If true, validates constraints on value. Default is true.
		*/
		void fromXmlFile(const std::string& path, bool validate = true);
	
		/*!
		* \brief Populates this object from a XML string.
		*
		* \param xml_string The XML content as a string
		* \param validate If true, validates constraints on value. Default is true.
		*/
		void fromXmlString(const std::string& xml_string, bool validate = true);
	
		/*!
		* \brief Serializes this object to an XML file.
		*
		* \param filename The path to the output XML file
		* \param validate If true, validates constraints on value. Default is true.
		*/
		void toXmlFile(const std::string& filename, bool validate = true) const;
	
		/*!
		* \brief Serializes this object to an XML string.
		*
		* \param validate If true, validates constraints on value. Default is true.
		* \return A string containing the XML representation of this object
		*/
		std::string toXmlString(bool validate = true) const;
	
	
	private:
		class Impl;
		std::unique_ptr<Impl> pImpl;
	
	};
	
	/*! Shared pointer for InlineAnnotationRef*/
	typedef std::shared_ptr<InlineAnnotationRef> InlineAnnotationRefPtr;
	
	
	MechanicalCalibration();
	~MechanicalCalibration();

	/*!
	* \brief Cast a NBOBaseClass to a MechanicalCalibration.
	*
	* \param base The base class to cast
	* \return The casted element, or nullptr if the cast fails
	*/
	static std::shared_ptr<MechanicalCalibration> fromBase(NBOBaseClassPtr base);

	/*!
	* \brief Returns the class type name.
	*
	* \return The class type name
	*/
	std::string getTypeName() const override;

	/*!
	* \brief Returns the XML element name corresponding to this class.
	*
	* \return The XML element name
	*/
	std::string getXMLName() const override;

	/*!
	* \brief Returns the NBO Type corresponding to this class.
	*
	* \return The NBO Type value
	*/
	ENBOType getNBOType() const override;

	/*!
	* \brief Returns a list of all classes derived from this class.
	*
	* \return The list of derived classes
	*/
	std::vector<NBOBaseClassPtr> getChildren() const override;

	/*!
	* \brief Returns a list of all child elements contained in this class.
	*
	* \return The list of child classes
	*/
	std::vector<NBOBaseClassPtr> getSubElements() const override;

	/*!
	* \brief Populates this object from a JSON file.
	*
	* \param path The path to the JSON file
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void fromJsonFile(const std::string& path, bool validate = true);

	/*!
	* \brief Populates this object from a JSON string.
	*
	* \param json_string The JSON content as a string
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void fromJsonString(const std::string& json_string, bool validate = true);

	/*!
	* \brief Populates this object from a XML file.
	*
	* \param path The path to the XML file
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void fromXmlFile(const std::string& path, bool validate = true);

	/*!
	* \brief Populates this object from a XML string.
	*
	* \param xml_string The XML content as a string
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void fromXmlString(const std::string& xml_string, bool validate = true);

	/*!
	* \brief Serializes this object to an XML file.
	*
	* \param filename The path to the output XML file
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void toXmlFile(const std::string& filename, bool validate = true) const;

	/*!
	* \brief Serializes this object to an XML string.
	*
	* \param validate If true, validates constraints on value. Default is true.
	* \return A string containing the XML representation of this object
	*/
	std::string toXmlString(bool validate = true) const;

	/*!
	* \brief Sets the value of the ID attribute.
	*
	* A Unique Identifier for this component.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setID(const Inscoper::NBO::LSID_TypePtr& value, bool validate = true);

	/*!
	* \brief Returns the value of the ID attribute.
	*
	* A Unique Identifier for this component.
	*
	* \return The value of the attribute
	*/
	LSID_TypePtr getID() const;

	/*!
	* \brief Resets the ID attribute to an unset state.
	*
	* A Unique Identifier for this component.
	*/
	void resetID();

	/*!
	* \brief Checks whether the optional ID attribute is present.
	*
	* A Unique Identifier for this component.
	*
	* \return true if the optional attribute has been set, false otherwise
	*/
	bool hasID() const;

	/*!
	* \brief Sets the value of the Date attribute.
	*
	* Ths field records the Date in which this Calibration procedure was performed.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setDate(const std::string& value, bool validate = true);

	/*!
	* \brief Returns the value of the Date attribute.
	*
	* Ths field records the Date in which this Calibration procedure was performed.
	*
	* \return The value of the attribute
	*/
	std::string getDate() const;

	/*!
	* \brief Resets the Date attribute to an unset state.
	*
	* Ths field records the Date in which this Calibration procedure was performed.
	*/
	void resetDate();

	/*!
	* \brief Checks whether the Date attribute is present.
	*
	* Ths field records the Date in which this Calibration procedure was performed.
	*
	* \return true if the attribute has been set, false otherwise
	*/
	bool hasDate() const;

	/*!
	* \brief Returns the allowed values for this attribut.
	*
	* Ths field records the Date in which this Calibration procedure was performed.
	*
	* \return The list of allowed values
	*/
	static const std::set<std::string>& getDateAllowedValues();

	/*!
	* \brief Sets the value of the MeasuredXReproducibility attribute.
	*
	* This field captures the observed Precision with which this Instrument is capable of maintaining a given X-axis position over time during Image Acquisition and as measured by this Mechanical Calibration procedure. This metric is generally referred to as Reproducibility and it might also be referred to as X Lateral Drift. This metric is particularly relevant for Stereology systems and for the calibration of Sample Positioning devices.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setMeasuredXReproducibility(const float& value, bool validate = true);

	/*!
	* \brief Returns the value of the MeasuredXReproducibility attribute.
	*
	* This field captures the observed Precision with which this Instrument is capable of maintaining a given X-axis position over time during Image Acquisition and as measured by this Mechanical Calibration procedure. This metric is generally referred to as Reproducibility and it might also be referred to as X Lateral Drift. This metric is particularly relevant for Stereology systems and for the calibration of Sample Positioning devices.
	*
	* \return The value of the attribute
	*/
	float getMeasuredXReproducibility() const;

	/*!
	* \brief Resets the MeasuredXReproducibility attribute to an unset state.
	*
	* This field captures the observed Precision with which this Instrument is capable of maintaining a given X-axis position over time during Image Acquisition and as measured by this Mechanical Calibration procedure. This metric is generally referred to as Reproducibility and it might also be referred to as X Lateral Drift. This metric is particularly relevant for Stereology systems and for the calibration of Sample Positioning devices.
	*/
	void resetMeasuredXReproducibility();

	/*!
	* \brief Checks whether the MeasuredXReproducibility attribute is present.
	*
	* This field captures the observed Precision with which this Instrument is capable of maintaining a given X-axis position over time during Image Acquisition and as measured by this Mechanical Calibration procedure. This metric is generally referred to as Reproducibility and it might also be referred to as X Lateral Drift. This metric is particularly relevant for Stereology systems and for the calibration of Sample Positioning devices.
	*
	* \return true if the attribute has been set, false otherwise
	*/
	bool hasMeasuredXReproducibility() const;

	/*!
	* \brief Sets the value of the MeasuredXReproducibilityUnit attribute.
	*
	* No description available in the XSD standard.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setMeasuredXReproducibilityUnit(const Inscoper::NBO::UnitsLength_TypePtr& value, bool validate = true);

	/*!
	* \brief Returns the value of the MeasuredXReproducibilityUnit attribute.
	*
	* No description available in the XSD standard.
	*
	* \return The value of the attribute
	*/
	UnitsLength_TypePtr getMeasuredXReproducibilityUnit() const;

	/*!
	* \brief Resets the MeasuredXReproducibilityUnit attribute to an unset state.
	*
	* No description available in the XSD standard.
	*/
	void resetMeasuredXReproducibilityUnit();

	/*!
	* \brief Checks whether the optional MeasuredXReproducibilityUnit attribute is present.
	*
	* No description available in the XSD standard.
	*
	* \return true if the optional attribute has been set, false otherwise
	*/
	bool hasMeasuredXReproducibilityUnit() const;

	/*!
	* \brief Sets the value of the MeasuredYReproducibility attribute.
	*
	* This field captures the observed Precision with which this Instrument is capable of maintaining a given Y-axis position over time during Image Acquisition and as measured by this Mechanical Calibration procedure. This metric is generally referred to as Reproducibility and it might also be referred to as Y Lateral Drift. This metric is particularly relevant for Stereology systems and for the calibration of Sample Positioning devices.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setMeasuredYReproducibility(const float& value, bool validate = true);

	/*!
	* \brief Returns the value of the MeasuredYReproducibility attribute.
	*
	* This field captures the observed Precision with which this Instrument is capable of maintaining a given Y-axis position over time during Image Acquisition and as measured by this Mechanical Calibration procedure. This metric is generally referred to as Reproducibility and it might also be referred to as Y Lateral Drift. This metric is particularly relevant for Stereology systems and for the calibration of Sample Positioning devices.
	*
	* \return The value of the attribute
	*/
	float getMeasuredYReproducibility() const;

	/*!
	* \brief Resets the MeasuredYReproducibility attribute to an unset state.
	*
	* This field captures the observed Precision with which this Instrument is capable of maintaining a given Y-axis position over time during Image Acquisition and as measured by this Mechanical Calibration procedure. This metric is generally referred to as Reproducibility and it might also be referred to as Y Lateral Drift. This metric is particularly relevant for Stereology systems and for the calibration of Sample Positioning devices.
	*/
	void resetMeasuredYReproducibility();

	/*!
	* \brief Checks whether the MeasuredYReproducibility attribute is present.
	*
	* This field captures the observed Precision with which this Instrument is capable of maintaining a given Y-axis position over time during Image Acquisition and as measured by this Mechanical Calibration procedure. This metric is generally referred to as Reproducibility and it might also be referred to as Y Lateral Drift. This metric is particularly relevant for Stereology systems and for the calibration of Sample Positioning devices.
	*
	* \return true if the attribute has been set, false otherwise
	*/
	bool hasMeasuredYReproducibility() const;

	/*!
	* \brief Sets the value of the MeasuredYReproducibilityUnit attribute.
	*
	* No description available in the XSD standard.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setMeasuredYReproducibilityUnit(const Inscoper::NBO::UnitsLength_TypePtr& value, bool validate = true);

	/*!
	* \brief Returns the value of the MeasuredYReproducibilityUnit attribute.
	*
	* No description available in the XSD standard.
	*
	* \return The value of the attribute
	*/
	UnitsLength_TypePtr getMeasuredYReproducibilityUnit() const;

	/*!
	* \brief Resets the MeasuredYReproducibilityUnit attribute to an unset state.
	*
	* No description available in the XSD standard.
	*/
	void resetMeasuredYReproducibilityUnit();

	/*!
	* \brief Checks whether the optional MeasuredYReproducibilityUnit attribute is present.
	*
	* No description available in the XSD standard.
	*
	* \return true if the optional attribute has been set, false otherwise
	*/
	bool hasMeasuredYReproducibilityUnit() const;

	/*!
	* \brief Sets the value of the MeasuredFocalReproducibility attribute.
	*
	* This field captures the observed Precision with which this Instrument is capable of maintaining a given Z-axis position over time during Image Acquisition and as measured by this Mechanical Calibration procedure. This metric is generally referred to as Reproducibility and it might also be referred to as Focal Drift. This metric is particularly relevant for Stereology systems and for the calibration of Sample Positioning devices.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setMeasuredFocalReproducibility(const float& value, bool validate = true);

	/*!
	* \brief Returns the value of the MeasuredFocalReproducibility attribute.
	*
	* This field captures the observed Precision with which this Instrument is capable of maintaining a given Z-axis position over time during Image Acquisition and as measured by this Mechanical Calibration procedure. This metric is generally referred to as Reproducibility and it might also be referred to as Focal Drift. This metric is particularly relevant for Stereology systems and for the calibration of Sample Positioning devices.
	*
	* \return The value of the attribute
	*/
	float getMeasuredFocalReproducibility() const;

	/*!
	* \brief Resets the MeasuredFocalReproducibility attribute to an unset state.
	*
	* This field captures the observed Precision with which this Instrument is capable of maintaining a given Z-axis position over time during Image Acquisition and as measured by this Mechanical Calibration procedure. This metric is generally referred to as Reproducibility and it might also be referred to as Focal Drift. This metric is particularly relevant for Stereology systems and for the calibration of Sample Positioning devices.
	*/
	void resetMeasuredFocalReproducibility();

	/*!
	* \brief Checks whether the MeasuredFocalReproducibility attribute is present.
	*
	* This field captures the observed Precision with which this Instrument is capable of maintaining a given Z-axis position over time during Image Acquisition and as measured by this Mechanical Calibration procedure. This metric is generally referred to as Reproducibility and it might also be referred to as Focal Drift. This metric is particularly relevant for Stereology systems and for the calibration of Sample Positioning devices.
	*
	* \return true if the attribute has been set, false otherwise
	*/
	bool hasMeasuredFocalReproducibility() const;

	/*!
	* \brief Sets the value of the MeasuredFocalReproducibilityUnit attribute.
	*
	* No description available in the XSD standard.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setMeasuredFocalReproducibilityUnit(const Inscoper::NBO::UnitsLength_TypePtr& value, bool validate = true);

	/*!
	* \brief Returns the value of the MeasuredFocalReproducibilityUnit attribute.
	*
	* No description available in the XSD standard.
	*
	* \return The value of the attribute
	*/
	UnitsLength_TypePtr getMeasuredFocalReproducibilityUnit() const;

	/*!
	* \brief Resets the MeasuredFocalReproducibilityUnit attribute to an unset state.
	*
	* No description available in the XSD standard.
	*/
	void resetMeasuredFocalReproducibilityUnit();

	/*!
	* \brief Checks whether the optional MeasuredFocalReproducibilityUnit attribute is present.
	*
	* No description available in the XSD standard.
	*
	* \return true if the optional attribute has been set, false otherwise
	*/
	bool hasMeasuredFocalReproducibilityUnit() const;

	/*!
	* \brief Sets the value of the MeasuredXRepeatability attribute.
	*
	* This field captures the observed X-axis Accuracy with which this Instrument is capable of returning to a previously visited position during Image Acquisition and as measured by this Mechanical Calibration Procedure. This metric is important for example for Tiling.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setMeasuredXRepeatability(const float& value, bool validate = true);

	/*!
	* \brief Returns the value of the MeasuredXRepeatability attribute.
	*
	* This field captures the observed X-axis Accuracy with which this Instrument is capable of returning to a previously visited position during Image Acquisition and as measured by this Mechanical Calibration Procedure. This metric is important for example for Tiling.
	*
	* \return The value of the attribute
	*/
	float getMeasuredXRepeatability() const;

	/*!
	* \brief Resets the MeasuredXRepeatability attribute to an unset state.
	*
	* This field captures the observed X-axis Accuracy with which this Instrument is capable of returning to a previously visited position during Image Acquisition and as measured by this Mechanical Calibration Procedure. This metric is important for example for Tiling.
	*/
	void resetMeasuredXRepeatability();

	/*!
	* \brief Checks whether the MeasuredXRepeatability attribute is present.
	*
	* This field captures the observed X-axis Accuracy with which this Instrument is capable of returning to a previously visited position during Image Acquisition and as measured by this Mechanical Calibration Procedure. This metric is important for example for Tiling.
	*
	* \return true if the attribute has been set, false otherwise
	*/
	bool hasMeasuredXRepeatability() const;

	/*!
	* \brief Sets the value of the MeasuredXRepeatabilityUnit attribute.
	*
	* No description available in the XSD standard.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setMeasuredXRepeatabilityUnit(const Inscoper::NBO::UnitsLength_TypePtr& value, bool validate = true);

	/*!
	* \brief Returns the value of the MeasuredXRepeatabilityUnit attribute.
	*
	* No description available in the XSD standard.
	*
	* \return The value of the attribute
	*/
	UnitsLength_TypePtr getMeasuredXRepeatabilityUnit() const;

	/*!
	* \brief Resets the MeasuredXRepeatabilityUnit attribute to an unset state.
	*
	* No description available in the XSD standard.
	*/
	void resetMeasuredXRepeatabilityUnit();

	/*!
	* \brief Checks whether the optional MeasuredXRepeatabilityUnit attribute is present.
	*
	* No description available in the XSD standard.
	*
	* \return true if the optional attribute has been set, false otherwise
	*/
	bool hasMeasuredXRepeatabilityUnit() const;

	/*!
	* \brief Sets the value of the MeasuredYRepeatability attribute.
	*
	* This field captures the observed Y-axis Accuracy with which this Instrument is capable of returning to a previously visited position during Image Acquisition and as measured by this Mechanical Calibration Procedure. This metric is important for example for Tiling.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setMeasuredYRepeatability(const float& value, bool validate = true);

	/*!
	* \brief Returns the value of the MeasuredYRepeatability attribute.
	*
	* This field captures the observed Y-axis Accuracy with which this Instrument is capable of returning to a previously visited position during Image Acquisition and as measured by this Mechanical Calibration Procedure. This metric is important for example for Tiling.
	*
	* \return The value of the attribute
	*/
	float getMeasuredYRepeatability() const;

	/*!
	* \brief Resets the MeasuredYRepeatability attribute to an unset state.
	*
	* This field captures the observed Y-axis Accuracy with which this Instrument is capable of returning to a previously visited position during Image Acquisition and as measured by this Mechanical Calibration Procedure. This metric is important for example for Tiling.
	*/
	void resetMeasuredYRepeatability();

	/*!
	* \brief Checks whether the MeasuredYRepeatability attribute is present.
	*
	* This field captures the observed Y-axis Accuracy with which this Instrument is capable of returning to a previously visited position during Image Acquisition and as measured by this Mechanical Calibration Procedure. This metric is important for example for Tiling.
	*
	* \return true if the attribute has been set, false otherwise
	*/
	bool hasMeasuredYRepeatability() const;

	/*!
	* \brief Sets the value of the MeasuredYRepeatabilityUnit attribute.
	*
	* No description available in the XSD standard.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setMeasuredYRepeatabilityUnit(const Inscoper::NBO::UnitsLength_TypePtr& value, bool validate = true);

	/*!
	* \brief Returns the value of the MeasuredYRepeatabilityUnit attribute.
	*
	* No description available in the XSD standard.
	*
	* \return The value of the attribute
	*/
	UnitsLength_TypePtr getMeasuredYRepeatabilityUnit() const;

	/*!
	* \brief Resets the MeasuredYRepeatabilityUnit attribute to an unset state.
	*
	* No description available in the XSD standard.
	*/
	void resetMeasuredYRepeatabilityUnit();

	/*!
	* \brief Checks whether the optional MeasuredYRepeatabilityUnit attribute is present.
	*
	* No description available in the XSD standard.
	*
	* \return true if the optional attribute has been set, false otherwise
	*/
	bool hasMeasuredYRepeatabilityUnit() const;

	/*!
	* \brief Sets the value of the MeasuredFocalRepeatability attribute.
	*
	* This field captures the observed Z-axis Accuracy with which this Instrument is capable of returning to a previously visited position during Image Acquisition and as measured by this Mechanical Calibration Procedure. This metric is important for example for Tiling.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setMeasuredFocalRepeatability(const float& value, bool validate = true);

	/*!
	* \brief Returns the value of the MeasuredFocalRepeatability attribute.
	*
	* This field captures the observed Z-axis Accuracy with which this Instrument is capable of returning to a previously visited position during Image Acquisition and as measured by this Mechanical Calibration Procedure. This metric is important for example for Tiling.
	*
	* \return The value of the attribute
	*/
	float getMeasuredFocalRepeatability() const;

	/*!
	* \brief Resets the MeasuredFocalRepeatability attribute to an unset state.
	*
	* This field captures the observed Z-axis Accuracy with which this Instrument is capable of returning to a previously visited position during Image Acquisition and as measured by this Mechanical Calibration Procedure. This metric is important for example for Tiling.
	*/
	void resetMeasuredFocalRepeatability();

	/*!
	* \brief Checks whether the MeasuredFocalRepeatability attribute is present.
	*
	* This field captures the observed Z-axis Accuracy with which this Instrument is capable of returning to a previously visited position during Image Acquisition and as measured by this Mechanical Calibration Procedure. This metric is important for example for Tiling.
	*
	* \return true if the attribute has been set, false otherwise
	*/
	bool hasMeasuredFocalRepeatability() const;

	/*!
	* \brief Sets the value of the MeasuredFocalRepeatabilityUnit attribute.
	*
	* No description available in the XSD standard.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setMeasuredFocalRepeatabilityUnit(const Inscoper::NBO::UnitsLength_TypePtr& value, bool validate = true);

	/*!
	* \brief Returns the value of the MeasuredFocalRepeatabilityUnit attribute.
	*
	* No description available in the XSD standard.
	*
	* \return The value of the attribute
	*/
	UnitsLength_TypePtr getMeasuredFocalRepeatabilityUnit() const;

	/*!
	* \brief Resets the MeasuredFocalRepeatabilityUnit attribute to an unset state.
	*
	* No description available in the XSD standard.
	*/
	void resetMeasuredFocalRepeatabilityUnit();

	/*!
	* \brief Checks whether the optional MeasuredFocalRepeatabilityUnit attribute is present.
	*
	* No description available in the XSD standard.
	*
	* \return true if the optional attribute has been set, false otherwise
	*/
	bool hasMeasuredFocalRepeatabilityUnit() const;

	/*!
	* \brief Sets the value of the MeasuredXSettlingTime attribute.
	*
	* This field captures the observed Time it takes for this Instrument to stabilize at the target X-axis position during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setMeasuredXSettlingTime(const float& value, bool validate = true);

	/*!
	* \brief Returns the value of the MeasuredXSettlingTime attribute.
	*
	* This field captures the observed Time it takes for this Instrument to stabilize at the target X-axis position during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*
	* \return The value of the attribute
	*/
	float getMeasuredXSettlingTime() const;

	/*!
	* \brief Resets the MeasuredXSettlingTime attribute to an unset state.
	*
	* This field captures the observed Time it takes for this Instrument to stabilize at the target X-axis position during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*/
	void resetMeasuredXSettlingTime();

	/*!
	* \brief Checks whether the MeasuredXSettlingTime attribute is present.
	*
	* This field captures the observed Time it takes for this Instrument to stabilize at the target X-axis position during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*
	* \return true if the attribute has been set, false otherwise
	*/
	bool hasMeasuredXSettlingTime() const;

	/*!
	* \brief Sets the value of the MeasuredXSettlingTimeUnit attribute.
	*
	* No description available in the XSD standard.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setMeasuredXSettlingTimeUnit(const Inscoper::NBO::UnitsTime_TypePtr& value, bool validate = true);

	/*!
	* \brief Returns the value of the MeasuredXSettlingTimeUnit attribute.
	*
	* No description available in the XSD standard.
	*
	* \return The value of the attribute
	*/
	UnitsTime_TypePtr getMeasuredXSettlingTimeUnit() const;

	/*!
	* \brief Resets the MeasuredXSettlingTimeUnit attribute to an unset state.
	*
	* No description available in the XSD standard.
	*/
	void resetMeasuredXSettlingTimeUnit();

	/*!
	* \brief Checks whether the optional MeasuredXSettlingTimeUnit attribute is present.
	*
	* No description available in the XSD standard.
	*
	* \return true if the optional attribute has been set, false otherwise
	*/
	bool hasMeasuredXSettlingTimeUnit() const;

	/*!
	* \brief Sets the value of the MeasuredYSettlingTime attribute.
	*
	* This field captures the observed Time it takes for this Instrument to stabilize at the target Y-axis position during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setMeasuredYSettlingTime(const float& value, bool validate = true);

	/*!
	* \brief Returns the value of the MeasuredYSettlingTime attribute.
	*
	* This field captures the observed Time it takes for this Instrument to stabilize at the target Y-axis position during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*
	* \return The value of the attribute
	*/
	float getMeasuredYSettlingTime() const;

	/*!
	* \brief Resets the MeasuredYSettlingTime attribute to an unset state.
	*
	* This field captures the observed Time it takes for this Instrument to stabilize at the target Y-axis position during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*/
	void resetMeasuredYSettlingTime();

	/*!
	* \brief Checks whether the MeasuredYSettlingTime attribute is present.
	*
	* This field captures the observed Time it takes for this Instrument to stabilize at the target Y-axis position during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*
	* \return true if the attribute has been set, false otherwise
	*/
	bool hasMeasuredYSettlingTime() const;

	/*!
	* \brief Sets the value of the MeasuredYSettlingTimeUnit attribute.
	*
	* No description available in the XSD standard.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setMeasuredYSettlingTimeUnit(const Inscoper::NBO::UnitsTime_TypePtr& value, bool validate = true);

	/*!
	* \brief Returns the value of the MeasuredYSettlingTimeUnit attribute.
	*
	* No description available in the XSD standard.
	*
	* \return The value of the attribute
	*/
	UnitsTime_TypePtr getMeasuredYSettlingTimeUnit() const;

	/*!
	* \brief Resets the MeasuredYSettlingTimeUnit attribute to an unset state.
	*
	* No description available in the XSD standard.
	*/
	void resetMeasuredYSettlingTimeUnit();

	/*!
	* \brief Checks whether the optional MeasuredYSettlingTimeUnit attribute is present.
	*
	* No description available in the XSD standard.
	*
	* \return true if the optional attribute has been set, false otherwise
	*/
	bool hasMeasuredYSettlingTimeUnit() const;

	/*!
	* \brief Sets the value of the MeasuredFocalSettlingTime attribute.
	*
	* This field captures the observed Time it takes for this Instrument to stabilize at the target Z-axis position during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setMeasuredFocalSettlingTime(const float& value, bool validate = true);

	/*!
	* \brief Returns the value of the MeasuredFocalSettlingTime attribute.
	*
	* This field captures the observed Time it takes for this Instrument to stabilize at the target Z-axis position during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*
	* \return The value of the attribute
	*/
	float getMeasuredFocalSettlingTime() const;

	/*!
	* \brief Resets the MeasuredFocalSettlingTime attribute to an unset state.
	*
	* This field captures the observed Time it takes for this Instrument to stabilize at the target Z-axis position during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*/
	void resetMeasuredFocalSettlingTime();

	/*!
	* \brief Checks whether the MeasuredFocalSettlingTime attribute is present.
	*
	* This field captures the observed Time it takes for this Instrument to stabilize at the target Z-axis position during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*
	* \return true if the attribute has been set, false otherwise
	*/
	bool hasMeasuredFocalSettlingTime() const;

	/*!
	* \brief Sets the value of the MeasuredFocalSettlingTimeUnit attribute.
	*
	* No description available in the XSD standard.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setMeasuredFocalSettlingTimeUnit(const Inscoper::NBO::UnitsTime_TypePtr& value, bool validate = true);

	/*!
	* \brief Returns the value of the MeasuredFocalSettlingTimeUnit attribute.
	*
	* No description available in the XSD standard.
	*
	* \return The value of the attribute
	*/
	UnitsTime_TypePtr getMeasuredFocalSettlingTimeUnit() const;

	/*!
	* \brief Resets the MeasuredFocalSettlingTimeUnit attribute to an unset state.
	*
	* No description available in the XSD standard.
	*/
	void resetMeasuredFocalSettlingTimeUnit();

	/*!
	* \brief Checks whether the optional MeasuredFocalSettlingTimeUnit attribute is present.
	*
	* No description available in the XSD standard.
	*
	* \return true if the optional attribute has been set, false otherwise
	*/
	bool hasMeasuredFocalSettlingTimeUnit() const;

	/*!
	* \brief Sets the value of the MeasuredXReproducibility_SD attribute.
	*
	* This field captures the Standard Deviation associated with the observed Precision with which this Instrument is capable of maintaining a given X-axis position over time during Image Acquisition and as measured by this Mechanical Calibration procedure.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setMeasuredXReproducibility_SD(const float& value, bool validate = true);

	/*!
	* \brief Returns the value of the MeasuredXReproducibility_SD attribute.
	*
	* This field captures the Standard Deviation associated with the observed Precision with which this Instrument is capable of maintaining a given X-axis position over time during Image Acquisition and as measured by this Mechanical Calibration procedure.
	*
	* \return The value of the attribute
	*/
	float getMeasuredXReproducibility_SD() const;

	/*!
	* \brief Resets the MeasuredXReproducibility_SD attribute to an unset state.
	*
	* This field captures the Standard Deviation associated with the observed Precision with which this Instrument is capable of maintaining a given X-axis position over time during Image Acquisition and as measured by this Mechanical Calibration procedure.
	*/
	void resetMeasuredXReproducibility_SD();

	/*!
	* \brief Checks whether the MeasuredXReproducibility_SD attribute is present.
	*
	* This field captures the Standard Deviation associated with the observed Precision with which this Instrument is capable of maintaining a given X-axis position over time during Image Acquisition and as measured by this Mechanical Calibration procedure.
	*
	* \return true if the attribute has been set, false otherwise
	*/
	bool hasMeasuredXReproducibility_SD() const;

	/*!
	* \brief Sets the value of the MeasuredYReproducibility_SD attribute.
	*
	* This field captures the Standard Deviation associated with the observed Precision with which this Instrument is capable of maintaining a given Y-axis position over time during Image Acquisition and as measured by this Mechanical Calibration procedure.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setMeasuredYReproducibility_SD(const float& value, bool validate = true);

	/*!
	* \brief Returns the value of the MeasuredYReproducibility_SD attribute.
	*
	* This field captures the Standard Deviation associated with the observed Precision with which this Instrument is capable of maintaining a given Y-axis position over time during Image Acquisition and as measured by this Mechanical Calibration procedure.
	*
	* \return The value of the attribute
	*/
	float getMeasuredYReproducibility_SD() const;

	/*!
	* \brief Resets the MeasuredYReproducibility_SD attribute to an unset state.
	*
	* This field captures the Standard Deviation associated with the observed Precision with which this Instrument is capable of maintaining a given Y-axis position over time during Image Acquisition and as measured by this Mechanical Calibration procedure.
	*/
	void resetMeasuredYReproducibility_SD();

	/*!
	* \brief Checks whether the MeasuredYReproducibility_SD attribute is present.
	*
	* This field captures the Standard Deviation associated with the observed Precision with which this Instrument is capable of maintaining a given Y-axis position over time during Image Acquisition and as measured by this Mechanical Calibration procedure.
	*
	* \return true if the attribute has been set, false otherwise
	*/
	bool hasMeasuredYReproducibility_SD() const;

	/*!
	* \brief Sets the value of the MeasuredFocalReproducibility_SD attribute.
	*
	* This field captures the Standard Deviation associated with the observed Precision with which this Instrument is capable of maintaining a given Z-axis position over time during Image Acquisition and as measured by this Mechanical Calibration procedure.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setMeasuredFocalReproducibility_SD(const float& value, bool validate = true);

	/*!
	* \brief Returns the value of the MeasuredFocalReproducibility_SD attribute.
	*
	* This field captures the Standard Deviation associated with the observed Precision with which this Instrument is capable of maintaining a given Z-axis position over time during Image Acquisition and as measured by this Mechanical Calibration procedure.
	*
	* \return The value of the attribute
	*/
	float getMeasuredFocalReproducibility_SD() const;

	/*!
	* \brief Resets the MeasuredFocalReproducibility_SD attribute to an unset state.
	*
	* This field captures the Standard Deviation associated with the observed Precision with which this Instrument is capable of maintaining a given Z-axis position over time during Image Acquisition and as measured by this Mechanical Calibration procedure.
	*/
	void resetMeasuredFocalReproducibility_SD();

	/*!
	* \brief Checks whether the MeasuredFocalReproducibility_SD attribute is present.
	*
	* This field captures the Standard Deviation associated with the observed Precision with which this Instrument is capable of maintaining a given Z-axis position over time during Image Acquisition and as measured by this Mechanical Calibration procedure.
	*
	* \return true if the attribute has been set, false otherwise
	*/
	bool hasMeasuredFocalReproducibility_SD() const;

	/*!
	* \brief Sets the value of the MeasuredXRepeatability_SD attribute.
	*
	* This field captures the Standard Deviation associated with the observed X-axis Accuracy with which this Instrument is capable of returning to a previously visited position (useful for tiling) during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setMeasuredXRepeatability_SD(const float& value, bool validate = true);

	/*!
	* \brief Returns the value of the MeasuredXRepeatability_SD attribute.
	*
	* This field captures the Standard Deviation associated with the observed X-axis Accuracy with which this Instrument is capable of returning to a previously visited position (useful for tiling) during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*
	* \return The value of the attribute
	*/
	float getMeasuredXRepeatability_SD() const;

	/*!
	* \brief Resets the MeasuredXRepeatability_SD attribute to an unset state.
	*
	* This field captures the Standard Deviation associated with the observed X-axis Accuracy with which this Instrument is capable of returning to a previously visited position (useful for tiling) during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*/
	void resetMeasuredXRepeatability_SD();

	/*!
	* \brief Checks whether the MeasuredXRepeatability_SD attribute is present.
	*
	* This field captures the Standard Deviation associated with the observed X-axis Accuracy with which this Instrument is capable of returning to a previously visited position (useful for tiling) during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*
	* \return true if the attribute has been set, false otherwise
	*/
	bool hasMeasuredXRepeatability_SD() const;

	/*!
	* \brief Sets the value of the MeasuredYRepeatability_SD attribute.
	*
	* This field captures the Standard Deviation associated with the observed Y-axis Accuracy with which this Instrument is capable of returning to a previously visited position (useful for tiling) during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setMeasuredYRepeatability_SD(const float& value, bool validate = true);

	/*!
	* \brief Returns the value of the MeasuredYRepeatability_SD attribute.
	*
	* This field captures the Standard Deviation associated with the observed Y-axis Accuracy with which this Instrument is capable of returning to a previously visited position (useful for tiling) during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*
	* \return The value of the attribute
	*/
	float getMeasuredYRepeatability_SD() const;

	/*!
	* \brief Resets the MeasuredYRepeatability_SD attribute to an unset state.
	*
	* This field captures the Standard Deviation associated with the observed Y-axis Accuracy with which this Instrument is capable of returning to a previously visited position (useful for tiling) during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*/
	void resetMeasuredYRepeatability_SD();

	/*!
	* \brief Checks whether the MeasuredYRepeatability_SD attribute is present.
	*
	* This field captures the Standard Deviation associated with the observed Y-axis Accuracy with which this Instrument is capable of returning to a previously visited position (useful for tiling) during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*
	* \return true if the attribute has been set, false otherwise
	*/
	bool hasMeasuredYRepeatability_SD() const;

	/*!
	* \brief Sets the value of the MeasuredFocalRepeatability_SD attribute.
	*
	* This field captures the Standard Deviation associated with the observed Z-axis Accuracy with which this Instrument is capable of returning to a previously visited position (useful for tiling) during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setMeasuredFocalRepeatability_SD(const float& value, bool validate = true);

	/*!
	* \brief Returns the value of the MeasuredFocalRepeatability_SD attribute.
	*
	* This field captures the Standard Deviation associated with the observed Z-axis Accuracy with which this Instrument is capable of returning to a previously visited position (useful for tiling) during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*
	* \return The value of the attribute
	*/
	float getMeasuredFocalRepeatability_SD() const;

	/*!
	* \brief Resets the MeasuredFocalRepeatability_SD attribute to an unset state.
	*
	* This field captures the Standard Deviation associated with the observed Z-axis Accuracy with which this Instrument is capable of returning to a previously visited position (useful for tiling) during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*/
	void resetMeasuredFocalRepeatability_SD();

	/*!
	* \brief Checks whether the MeasuredFocalRepeatability_SD attribute is present.
	*
	* This field captures the Standard Deviation associated with the observed Z-axis Accuracy with which this Instrument is capable of returning to a previously visited position (useful for tiling) during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*
	* \return true if the attribute has been set, false otherwise
	*/
	bool hasMeasuredFocalRepeatability_SD() const;

	/*!
	* \brief Sets the value of the MeasuredXSettlingTime_SD attribute.
	*
	* This field captures the Standard Deviation associated with the observed Time it takes for this Instrument to stabilize at the target X-axis position during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setMeasuredXSettlingTime_SD(const float& value, bool validate = true);

	/*!
	* \brief Returns the value of the MeasuredXSettlingTime_SD attribute.
	*
	* This field captures the Standard Deviation associated with the observed Time it takes for this Instrument to stabilize at the target X-axis position during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*
	* \return The value of the attribute
	*/
	float getMeasuredXSettlingTime_SD() const;

	/*!
	* \brief Resets the MeasuredXSettlingTime_SD attribute to an unset state.
	*
	* This field captures the Standard Deviation associated with the observed Time it takes for this Instrument to stabilize at the target X-axis position during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*/
	void resetMeasuredXSettlingTime_SD();

	/*!
	* \brief Checks whether the MeasuredXSettlingTime_SD attribute is present.
	*
	* This field captures the Standard Deviation associated with the observed Time it takes for this Instrument to stabilize at the target X-axis position during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*
	* \return true if the attribute has been set, false otherwise
	*/
	bool hasMeasuredXSettlingTime_SD() const;

	/*!
	* \brief Sets the value of the MeasuredYSettlingTime_SD attribute.
	*
	* This field captures the Standard Deviation associated with the observed Time it takes for this Instrument to stabilize at the target Y-axis position during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setMeasuredYSettlingTime_SD(const float& value, bool validate = true);

	/*!
	* \brief Returns the value of the MeasuredYSettlingTime_SD attribute.
	*
	* This field captures the Standard Deviation associated with the observed Time it takes for this Instrument to stabilize at the target Y-axis position during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*
	* \return The value of the attribute
	*/
	float getMeasuredYSettlingTime_SD() const;

	/*!
	* \brief Resets the MeasuredYSettlingTime_SD attribute to an unset state.
	*
	* This field captures the Standard Deviation associated with the observed Time it takes for this Instrument to stabilize at the target Y-axis position during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*/
	void resetMeasuredYSettlingTime_SD();

	/*!
	* \brief Checks whether the MeasuredYSettlingTime_SD attribute is present.
	*
	* This field captures the Standard Deviation associated with the observed Time it takes for this Instrument to stabilize at the target Y-axis position during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*
	* \return true if the attribute has been set, false otherwise
	*/
	bool hasMeasuredYSettlingTime_SD() const;

	/*!
	* \brief Sets the value of the MeasuredFocalSettlingTime_SD attribute.
	*
	* This field captures the Standard Deviation associated with the observed Time it takes for this Instrument to stabilize at the target Z-axis position during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setMeasuredFocalSettlingTime_SD(const float& value, bool validate = true);

	/*!
	* \brief Returns the value of the MeasuredFocalSettlingTime_SD attribute.
	*
	* This field captures the Standard Deviation associated with the observed Time it takes for this Instrument to stabilize at the target Z-axis position during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*
	* \return The value of the attribute
	*/
	float getMeasuredFocalSettlingTime_SD() const;

	/*!
	* \brief Resets the MeasuredFocalSettlingTime_SD attribute to an unset state.
	*
	* This field captures the Standard Deviation associated with the observed Time it takes for this Instrument to stabilize at the target Z-axis position during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*/
	void resetMeasuredFocalSettlingTime_SD();

	/*!
	* \brief Checks whether the MeasuredFocalSettlingTime_SD attribute is present.
	*
	* This field captures the Standard Deviation associated with the observed Time it takes for this Instrument to stabilize at the target Z-axis position during Image Acquisition and as measured by this Mechanical Calibration Procedure.
	*
	* \return true if the attribute has been set, false otherwise
	*/
	bool hasMeasuredFocalSettlingTime_SD() const;

	/*!
	* \brief Sets the value of the SamplePositioningRef element.
	*
	*  This empty element refers to the Sample Positioning device that was used for the Acquisition of the experimental Image this Mechanical Calibration procedure refers to.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setSamplePositioningRef(const Inscoper::NBO::SamplePositioningRefPtr& value, bool validate = true);

	/*!
	* \brief Returns the value of the SamplePositioningRef element.
	*
	*  This empty element refers to the Sample Positioning device that was used for the Acquisition of the experimental Image this Mechanical Calibration procedure refers to.
	*
	* \return The value of the element
	*/
	Inscoper::NBO::SamplePositioningRefPtr getSamplePositioningRef() const;

	/*!
	* \brief Resets the SamplePositioningRef element to an unset state.
	*
	*  This empty element refers to the Sample Positioning device that was used for the Acquisition of the experimental Image this Mechanical Calibration procedure refers to.
	*/
	void resetSamplePositioningRef();

	/*!
	* \brief Checks whether the optional SamplePositioningRef element is present.
	*
	*  This empty element refers to the Sample Positioning device that was used for the Acquisition of the experimental Image this Mechanical Calibration procedure refers to.
	*
	* \return true if the optional attribute has been set, false otherwise
	*/
	bool hasSamplePositioningRef() const;

	/*!
	* \brief Sets the value of the FocusStabilizationDeviceRef element.
	*
	*  This empty element refers to the optional Focus Stabilization Device that was used for the Acquisition of the experimental Image this Mechanical Calibration procedure refers to.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setFocusStabilizationDeviceRef(const Inscoper::NBO::FocusStabilizationDeviceRefPtr& value, bool validate = true);

	/*!
	* \brief Returns the value of the FocusStabilizationDeviceRef element.
	*
	*  This empty element refers to the optional Focus Stabilization Device that was used for the Acquisition of the experimental Image this Mechanical Calibration procedure refers to.
	*
	* \return The value of the element
	*/
	Inscoper::NBO::FocusStabilizationDeviceRefPtr getFocusStabilizationDeviceRef() const;

	/*!
	* \brief Resets the FocusStabilizationDeviceRef element to an unset state.
	*
	*  This empty element refers to the optional Focus Stabilization Device that was used for the Acquisition of the experimental Image this Mechanical Calibration procedure refers to.
	*/
	void resetFocusStabilizationDeviceRef();

	/*!
	* \brief Checks whether the optional FocusStabilizationDeviceRef element is present.
	*
	*  This empty element refers to the optional Focus Stabilization Device that was used for the Acquisition of the experimental Image this Mechanical Calibration procedure refers to.
	*
	* \return true if the optional attribute has been set, false otherwise
	*/
	bool hasFocusStabilizationDeviceRef() const;

	/*!
	* \brief Sets the value of the AnnotationRef element.
	*
	* This is a simple multi-line comment or annotation describing this component.
	*
	* \param value The value to set
	* \param validate If true, validates constraints on value. Default is true.
	*/
	void setAnnotationRef(const Inscoper::NBO::MechanicalCalibration::InlineAnnotationRefPtr& value, bool validate = true);

	/*!
	* \brief Returns the value of the AnnotationRef element.
	*
	* This is a simple multi-line comment or annotation describing this component.
	*
	* \return The value of the element
	*/
	Inscoper::NBO::MechanicalCalibration::InlineAnnotationRefPtr getAnnotationRef() const;

	/*!
	* \brief Resets the AnnotationRef element to an unset state.
	*
	* This is a simple multi-line comment or annotation describing this component.
	*/
	void resetAnnotationRef();

	/*!
	* \brief Checks whether the optional AnnotationRef element is present.
	*
	* This is a simple multi-line comment or annotation describing this component.
	*
	* \return true if the optional attribute has been set, false otherwise
	*/
	bool hasAnnotationRef() const;


private:
	class Impl;
	std::unique_ptr<Impl> pImpl;

	LSID_TypePtr ID = nullptr; // Required attribute
    std::optional<std::string> Date; // Required attribute
    static const std::set<std::string> DateAllowedValues;
    std::optional<float> MeasuredXReproducibility; // Required attribute
	UnitsLength_TypePtr MeasuredXReproducibilityUnit = nullptr; // Optional attribute
    std::optional<float> MeasuredYReproducibility; // Required attribute
	UnitsLength_TypePtr MeasuredYReproducibilityUnit = nullptr; // Optional attribute
    std::optional<float> MeasuredFocalReproducibility; // Required attribute
	UnitsLength_TypePtr MeasuredFocalReproducibilityUnit = nullptr; // Optional attribute
    std::optional<float> MeasuredXRepeatability; // Required attribute
	UnitsLength_TypePtr MeasuredXRepeatabilityUnit = nullptr; // Optional attribute
    std::optional<float> MeasuredYRepeatability; // Required attribute
	UnitsLength_TypePtr MeasuredYRepeatabilityUnit = nullptr; // Optional attribute
    std::optional<float> MeasuredFocalRepeatability; // Required attribute
	UnitsLength_TypePtr MeasuredFocalRepeatabilityUnit = nullptr; // Optional attribute
    std::optional<float> MeasuredXSettlingTime; // Optional attribute
	UnitsTime_TypePtr MeasuredXSettlingTimeUnit = nullptr; // Optional attribute
    std::optional<float> MeasuredYSettlingTime; // Optional attribute
	UnitsTime_TypePtr MeasuredYSettlingTimeUnit = nullptr; // Optional attribute
    std::optional<float> MeasuredFocalSettlingTime; // Optional attribute
	UnitsTime_TypePtr MeasuredFocalSettlingTimeUnit = nullptr; // Optional attribute
    std::optional<float> MeasuredXReproducibility_SD; // Optional attribute
    std::optional<float> MeasuredYReproducibility_SD; // Optional attribute
    std::optional<float> MeasuredFocalReproducibility_SD; // Optional attribute
    std::optional<float> MeasuredXRepeatability_SD; // Optional attribute
    std::optional<float> MeasuredYRepeatability_SD; // Optional attribute
    std::optional<float> MeasuredFocalRepeatability_SD; // Optional attribute
    std::optional<float> MeasuredXSettlingTime_SD; // Optional attribute
    std::optional<float> MeasuredYSettlingTime_SD; // Optional attribute
    std::optional<float> MeasuredFocalSettlingTime_SD; // Optional attribute
    Inscoper::NBO::SamplePositioningRefPtr SamplePositioningRef = nullptr;
    Inscoper::NBO::FocusStabilizationDeviceRefPtr FocusStabilizationDeviceRef = nullptr;
    Inscoper::NBO::MechanicalCalibration::InlineAnnotationRefPtr AnnotationRef = nullptr;
};

/*! Shared pointer for MechanicalCalibration*/
typedef std::shared_ptr<MechanicalCalibration> MechanicalCalibrationPtr;

} // namespace Inscoper::NBO

#endif // MECHANICALCALIBRATION_HPP_INCLUDED