areaDetector
3121
EPICS areaDetector framework

Library of functions to use for transforming the time of flight value into another parameter (for example dspace). More...
#include <ADnEDTransform.h>
Public Member Functions  
ADnEDTransform ()  
Constructor. More...  
virtual  ~ADnEDTransform () 
Destructor. More...  
epicsFloat64  calculate (epicsUInt32 type, epicsUInt32 pixelID, epicsUInt32 tof) const 
Transform the time of flight value into a another parameter. More...  
Public Member Functions inherited from ADnEDTransformBase  
ADnEDTransformBase ()  
ADnEDTransform base class. More...  
virtual  ~ADnEDTransformBase () 
Destructor. More...  
int  setIntParam (epicsUInt32 paramIndex, epicsUInt32 paramVal) 
Set integer param. More...  
int  setDoubleParam (epicsUInt32 paramIndex, epicsFloat64 paramVal) 
Set double param. More...  
int  setDoubleArray (epicsUInt32 paramIndex, const epicsFloat64 *pSource, epicsUInt32 size) 
Set array of doubles. More...  
void  printParams (void) const 
For debug, print all to stdout. More...  
void  setDebug (bool debug) 
Additional Inherited Members  
Protected Attributes inherited from ADnEDTransformBase  
epicsUInt32  m_intParam [ADNED_MAX_TRANSFORM_PARAMS] 
epicsFloat64  m_doubleParam [ADNED_MAX_TRANSFORM_PARAMS] 
epicsFloat64 *  p_Array [ADNED_MAX_TRANSFORM_PARAMS] 
epicsUInt32  m_ArraySize [ADNED_MAX_TRANSFORM_PARAMS] 
bool  m_debug 
Library of functions to use for transforming the time of flight value into another parameter (for example dspace).
The code is compiled into a seperate library and linked in with the ADnED IOC application. This makes it easy to modify or swap out with a different library. The library must be thread safe, and only one instance should be created per detector instance. It does depend on the ADnEDGlobals.h file.
Objects of this class have a range of parameters and arrays for use in the calculations. They are set by ADnED. Array storage is managed internally. The size of the arrays must be equal to the pixel ID range size for a particular detector.
The internal parameters that can be set, which are used in the calculations are: N * epicsUInt32 parameters N * epicsFloat64 parameters N * arrays of type epicsFloat64
The documentation for each calculation type will specify which parameter is used.
ADnEDTransform::ADnEDTransform  (  void  ) 
Constructor.

virtual 
Destructor.

virtual 
Transform the time of flight value into a another parameter.
The calculation used is specified by the type input param. The associated pixel ID is required for any calculation involving a pixelID based lookup in an array.
Note: this could be a static factory method, returning ADnEDTransformBase objects
Transform types are:
ADNED_TRANSFORM_TYPE1  multiply the TOF by a pixel ID lookup in doubleArray[0]. Can be used for fixed geometry instruments to calculate dspace. Can be used on Vulcan for example.
ADNED_TRANSFORM_TYPE2  calculate dspace where the theta angle changes. Used for direct geometry instruments like Hyspec. NOTE: not sure how this works yet.
ADNED_TRANSFORM_TYPE3  calculate deltaE for indirect geometry instruments for their inelastic detectors. This uses an equation which depends on the mass of the neutron, L1, an array of L2 and an array of Ef. The final energy perpixelID, Ef, is known because of the use of mirrors to select energy. We can calculate incident energy using the known final energy and the TOF. So we are calculating energy transfer for each event.
deltaE = (1/2)Mn * (L1 / (TOF  (L2*sqrt(Mn/(2*Ef))) ) )**2  Ef where: Mn = mass of neutron in 1.674954 × 1027 L1 = constant (in meters) Ef and L2 are double arrays based on pixelID. The Ef input array must be in units of MeV. The L2 array is in meters. TOF = time of flight (in seconds)
Energy must be in Joules (1 eV = 1.602176565(35) × 10−19 J)
Once the deltaE has been obtained in Joules, it is converted back to MeV.
Implements ADnEDTransformBase.