/// Private function to recalculate the rotation matrix of the goniometer void Goniometer::recalculateR() { std::vector<GoniometerAxis>::iterator it; std::vector<double> elements; Quat QGlobal, QCurrent; for (it = motors.begin(); it < motors.end(); ++it) { double ang = (*it).angle * (*it).sense; if ((*it).angleunit == angRadians) ang *= rad2deg; QCurrent = Quat(ang, (*it).rotationaxis); QGlobal *= QCurrent; } elements = QGlobal.getRotation(); R = DblMatrix(elements); }
/** Return Euler angles acording to a convention * @param convention :: the convention used to calculate Euler Angles. The * UniversalGoniometer is YZY, a triple axis goniometer at HFIR is YZX */ std::vector<double> Goniometer::getEulerAngles(std::string convention) { return Quat(getR()).getEulerAngles(convention); }