The XPAD detector is based on the photon counting technology providing a quasi noiseless imaging as well as a very high dynamic range and a fast frame rate (500 images/s). This is a detector stemming from the collaboration of Soleil, CPPM and ESRF(D2AM). It is now supported by the ImXPAD company.
This plugin support the following models:
The XPAD runs under Linux, with the help of a PCI express board from PLDA.
The host where the PCI express board is installed, should have the PLDA driver installed.
Initialisation and Capabilities¶
Implementing a new plugin for new detector is driven by the LIMA framework but the developer has some freedoms to choose which standard and specific features will be made available. This section is supposed to give you the correct information regarding how the camera is exported within the LIMA framework.
The camera will be initialized within the
Xpad::Camera object. One should pass to the constructor, the Xpad type as a string. Possible values are:
Synchrone or Asynchrone acquisition should be selected with a call
This plugin has been implemented in respect of the mandatory capabilites but with some limitations according to some programmer’s choices. We only provide here extra information for a better understanding of the capabilities for the xpad camera.
16 or 32 bit unsigned type are supported
the size of the image will depend of the type of Xpad
Trigger type supported are:
ExtGate : 1 external trigger start N internal gates (gates being configured by software)
ExtTrigMult : N external trigger start N internal gates (gates being configured by software)
There are no optional capabilities.
No Specific hardware configuration is needed.
How to use¶
Here is a list of accessible fonctions to configure and use the Xpad detector:
//! Set all the config G void setAllConfigG(const std::vector<long>& allConfigG); //! Set the Acquisition type between synchrone and asynchrone void setAcquisitionType(short acq_type); //! Load of flat config of value: flat_value (on each pixel) void loadFlatConfig(unsigned flat_value); //! Load all the config G void loadAllConfigG(unsigned long modNum, unsigned long chipId , unsigned long* config_values); //! Load a wanted config G with a wanted value void loadConfigG(const std::vector<unsigned long>& reg_and_value); //! Load a known value to the pixel counters void loadAutoTest(unsigned known_value); //! Save the config L (DACL) to XPAD RAM void saveConfigL(unsigned long modMask, unsigned long calibId, unsigned long chipId, unsigned long curRow,unsigned long* values); //! Save the config G to XPAD RAM void saveConfigG(unsigned long modMask, unsigned long calibId, unsigned long reg,unsigned long* values); //! Load the config to detector chips void loadConfig(unsigned long modMask, unsigned long calibId); //! Get the modules config (Local aka DACL) unsigned short*& getModConfig(); //! Reset the detector void reset(); //! Set the exposure parameters void setExposureParameters( unsigned Texp,unsigned Twait,unsigned Tinit, unsigned Tshutter,unsigned Tovf,unsigned mode, unsigned n,unsigned p, unsigned nbImages,unsigned BusyOutSel,unsigned formatIMG,unsigned postProc, unsigned GP1,unsigned GP2,unsigned GP3,unsigned GP4); //! Calibrate over the noise Slow and save dacl and configg files in path void calibrateOTNSlow (const std::string& path); //! Calibrate over the noise Medium and save dacl and configg files in path void calibrateOTNMedium (const std::string& path); //! Calibrate over the noise High and save dacl and configg files in path void calibrateOTNHigh (const std::string& path); //! upload the calibration (dacl + config) that is stored in path void uploadCalibration(const std::string& path); //! upload the wait times between each images in case of a sequence of images (Twait from setExposureParameters should be 0) void uploadExpWaitTimes(unsigned long *pWaitTime, unsigned size); //! increment the ITHL void incrementITHL(); //! decrement the ITHL void decrementITHL(); //! set the specific parameters (deadTime,init time, shutter ... void setSpecificParameters( unsigned deadtime, unsigned init, unsigned shutter, unsigned ovf, unsigned n, unsigned p, unsigned busy_out_sel, bool geom_corr, unsigned GP1, unsigned GP2, unsigned GP3, unsigned GP4); //! Set the Calibration Adjusting number of iteration void setCalibrationAdjustingNumber(unsigned calibration_adjusting_number);