#include "isdc.h" #include "math.h" #include "dal3gen.h" #include "jemx.h" #define JEMX_SHARED_ERROR_START (J_ERROR_CODE_START + JEMX_SHARED_ERR) #define JEMX_SHARED_OUT_OF_MEMORY (JEMX_SHARED_ERROR_START - 1) #define JEMX_SHARED_ILLEGAL_DETECTOR_NUMBER (JEMX_SHARED_ERROR_START - 2) #define JEMX_SHARED_BAD_DIMENSIONS (JEMX_SHARED_ERROR_START - 3) #define JEMX_SHARED_BAD_IMOD_DATA (JEMX_SHARED_ERROR_START - 4) #define JEMX_MAX_USEFUL_RADIUS 118.0 #define JEMX_RAW_CENTER_X 127 #define JEMX_RAW_CENTER_Y 127 /* * Several bits and pieces of detector information are grouped in * one struct to keep function APIs shorter, while maintaining * flexibility in the future. * NOTE: the pixelArea values are in cm^2. */ typedef struct { double area; unsigned short detMap[J_NUM_X_PIXELS][J_NUM_Y_PIXELS]; double CorX[J_NUM_X_PIXELS][J_NUM_Y_PIXELS]; double CorY[J_NUM_X_PIXELS][J_NUM_Y_PIXELS]; double pixelArea[J_NUM_X_PIXELS][J_NUM_Y_PIXELS]; double pixelLowerLeftX[J_NUM_X_PIXELS][J_NUM_Y_PIXELS]; double pixelLowerLeftY[J_NUM_X_PIXELS][J_NUM_Y_PIXELS]; } JEMXdetectorData; /* * Function prototypes */ /* --- Functions for general purpose ------------------------ */ int JEMXarrayGet(dal_element *group, char *arrayName, dal_dataType arrayType, int numAxes, long *dimAxes, dal_element **arrayPtr, void **array, int chatter, int callingStatus); /* --- Functions to access IMOD data ------------------------ */ int JEMXdetectorGetMap(dal_element *instModGrp, Instrument jemxInstr, unsigned short detMap[J_NUM_X_PIXELS][J_NUM_Y_PIXELS], double *onAxisArea, int chatter, int callingStatus); int JEMXdetectorGetCorXY(dal_element *instModGrp, Instrument jemxInstr, double detCorX[J_NUM_X_PIXELS][J_NUM_Y_PIXELS], double detCorY[J_NUM_X_PIXELS][J_NUM_Y_PIXELS], int chatter, int callingStatus); int JEMXdetectorPixelAreas(double detCorX[J_NUM_X_PIXELS][J_NUM_Y_PIXELS], double detCorY[J_NUM_X_PIXELS][J_NUM_Y_PIXELS], double pixelArea[J_NUM_X_PIXELS][J_NUM_Y_PIXELS], double pixelLowLeftX[J_NUM_X_PIXELS][J_NUM_Y_PIXELS], double pixelLowLeftY[J_NUM_X_PIXELS][J_NUM_Y_PIXELS], int chatter, int callingStatus); int JEMXdetectorGetData(dal_element *instModGrp, Instrument jemxInstr, JEMXdetectorData *detector, int chatter, int callingStatus); int JEMXdetectorCalcOnAxisArea(JEMXdetectorData detector, double radiusLimit, unsigned short excludeFlags, double *area, unsigned short usedMap[J_NUM_X_PIXELS][J_NUM_Y_PIXELS], int chatter, int callingStatus);