#include "angularConversion.h" #include #include #include #include #include using namespace std; angularConversion::angularConversion(): angularConversionStatic(), currentPosition(0), currentPositionIndex(0) { //angleFunctionPointer=0; // registerAngleFunctionCallback(&defaultAngleFunction); } angularConversion::~angularConversion(){ } double* angularConversion::convertAngles(double pos) { int nmod=getNMods(); int *chansPerMod=new int[nmod]; angleConversionConstant **angOff=new angleConversionConstant*[nmod]; int *mF=new int[nmod]; double fo=*fineOffset; double go=*globalOffset; int angdir=*angDirection; for (int im=0; im0) { *binSize=v; nBins=(int)(360./(*binSize))+1; } return *binSize; case MOVE_FLAG: if (moveFlag) { if (v>0) *moveFlag=1; else if (v==0) *moveFlag=0; return *moveFlag; } return -1; case SAMPLE_X: if (sampleDisplacement) { sampleDisplacement[X]=v; return sampleDisplacement[X]; } return 0; case SAMPLE_Y: if (sampleDisplacement) { sampleDisplacement[Y]=v; return sampleDisplacement[Y]; } return 0; default: return 0; } } /** returns the value of an angular conversion parameter \param c can be ANGULAR_DIRECTION, GLOBAL_OFFSET, FINE_OFFSET, BIN_SIZE \returns the actual value */ double angularConversion::getAngularConversionParameter(angleConversionParameter c) { switch (c) { case ANGULAR_DIRECTION: return *angDirection; case GLOBAL_OFFSET: return *globalOffset; case FINE_OFFSET: return *fineOffset; case BIN_SIZE: if (*binSize>0) nBins=(int)(360./(*binSize))+1; else nBins=0; return *binSize; case MOVE_FLAG: if (moveFlag) return *moveFlag; else return -1; default: return 0; } } int angularConversion::setAngularConversionFile(string fname) { if (fname=="") { setAngularCorrectionMask(0); #ifdef VERBOSE std::cout << "Unsetting angular conversion" << std::endl; #endif } else { if (fname=="default") { fname=string(angConvFile); } #ifdef VERBOSE std::cout << "Setting angular conversion to " << fname << std:: endl; #endif if (readAngularConversionFile(fname)>=0) { setAngularCorrectionMask(1); strcpy(angConvFile,fname.c_str()); } } return setAngularCorrectionMask(); } /* set positions for the acquisition \param nPos number of positions \param pos array with the encoder positions \returns number of positions */ int angularConversion::setPositions(int nPos, double *pos){ if (nPos>=0) *numberOfPositions=nPos; for (int ip=0; ip