BioXASSSRLMonochromatorEnergyControl::BioXASSSRLMonochromatorEnergyControl(const QString &name, QObject *parent) :
	BioXASMonochromatorEnergyControl(name, parent)
{
	// Initialize inherited variables.

	value_ = 0;
	setpoint_ = 0;
	minimumValue_ = -1000000;
	maximumValue_ = 1000000;

	setAllowsMovesWhileMoving(false);
	setContextKnownDescription("Energy");
	setTolerance(0.05);

	// Initialize member variables.

	hc_ = 12398.42;
	crystal2D_ = 3.8403117;
	thetaBraggOffset_ = 180.0;
	regionOffset_ = 180;

	bragg_ = 0;
	region_ = 0;
	m1MirrorPitch_ = 0;

	// Current settings.

	setDisplayPrecision(3);
	setUnits("eV");
	updateStates();
}
AM3DCoordinatedSystemControl::AM3DCoordinatedSystemControl(AxisDesignation axis,
														   AMControl* globalXAxis,
														   AMControl* globalYAxis,
														   AMControl* globalZAxis,
														   const QString &name,
														   const QString &units,
														   QObject *parent,
														   const QString &description) :
	AMPseudoMotorControl(name, units, parent, description)
{
	axis_ = axis;
	globalXAxis_ = globalXAxis;
	globalYAxis_ = globalYAxis;
	globalZAxis_ = globalZAxis;

	setAllowsMovesWhileMoving(false);

	addChildControl(globalXAxis_);
	addChildControl(globalYAxis_);
	addChildControl(globalZAxis_);

	setTolerance(qMax(qMax(globalXAxis_->tolerance(), globalYAxis_->tolerance()), globalZAxis_->tolerance()));

	updateStates();
}
BioXASSSRLMonochromatorRegionControl::BioXASSSRLMonochromatorRegionControl(const QString &name, QObject *parent) :
	AMEnumeratedControl(name, "", parent)
{
	// Initialize local variables.

	maskUpperBlade_ = 0;
	maskLowerBlade_ = 0;
	maskBladesStatus_ = 0;
	paddle_ = 0;
	paddleStatus_ = 0;
	keyStatus_ = 0;
	brakeStatus_ = 0;
	bragg_ = 0;
	braggAtCrystalChangePositionStatus_ = 0;
	crystalChange_ = 0;
	crystalChangeCWLimitStatus_ = 0;
	crystalChangeCCWLimitStatus_ = 0;
	regionAStatus_ = 0;
	regionBStatus_ = 0;

	// Initialize inherited variables.

	addOption(BioXASSSRLMonochromator::Region::A, "A");
	addOption(BioXASSSRLMonochromator::Region::B, "B");
	addOption(BioXASSSRLMonochromator::Region::None, "None", true);

	setAllowsMovesWhileMoving(false);
	setContextKnownDescription("Region Control");

	// Current settings.

	updateStates();
}
BioXASXIAFiltersActuatorControl::BioXASXIAFiltersActuatorControl(const QString &name, QObject *parent) :
	AMExclusiveStatesEnumeratedControl(name, "", parent)
{
	// Initialize inherited variables.

	setContextKnownDescription("Actuator State");
	setAllowsMovesWhileMoving(false);
}
CLSMDriveMotorControl::CLSMDriveMotorControl(const QString &name, const QString &baseName, const QString& units, double unitsPerRev, double offset, int microsteps, const QString &description, double tolerance, double moveStartTimeoutSeconds, QObject *parent)
    : AMPVwStatusAndUnitConversionControl(name, baseName % ":enc:fbk", baseName % ":step", baseName % ":status", baseName % ":stop", new AMScaleAndOffsetUnitConverter(units, unitsPerRev/4000.0, offset), new AMScaleAndOffsetUnitConverter(units, unitsPerRev/(200.0*microsteps), offset), parent, tolerance, moveStartTimeoutSeconds, new AMControlStatusCheckerDefault(1), 1, description) {

    // Unlike MaxV controllers, these motors can support move updates while moving:
    setAllowsMovesWhileMoving(true);
    // Because of the polled communication, it can take a while for these motors to send MOVE ACTIVE then MOVE DONE for null moves. Recommend setting the moveStartTolerance() [in converted units, not microsteps] when setting up these motors. It should be set very small... equivalent to a few microsteps.
    // ex: setMoveStartTolerance(writeUnitConverter()->convertFromRaw(5))
    moveStartTolerance_ = 0;
    moveTimeoutTolerance_ = 0;
}
BioXASCarbonFilterFarmActuatorPositionControl::BioXASCarbonFilterFarmActuatorPositionControl(const QString &name, const QString &units, QObject *parent) :
	AMPseudoMotorControl(name, units, parent)
{
	// Initialize local variables.

	position_ = 0;
	status_ = 0;

	// Initialize inherited variables.

	value_ = 0;
	setpoint_ = 0;
	minimumValue_ = -1000;
	maximumValue_ = 1000;

	setTolerance(0.05);
	setContextKnownDescription("Actuator Control");
	setAllowsMovesWhileMoving(false);
}