This is an EPICS areaDetector driver for the Roper Scientific detectors, which includes all cameras from Photometrics and most but not all cameras from Princeton Instruments The driver is based upon the PVCAM library from Photometrics, and runs on Microsoft Windows and Linux. This driver is complementary to the areaDetector Roper driver. That driver uses the Microsoft COM interface to control the Roper WinView program. This driver works at a lower level, communicating instead with the PVCAM library layer. PVCAM supports all Photometrics cameras, and many, but not all, Princeton Instruments cameras.
ADD ADDTIONAL INTRODUCTORY TEXT HERE.
This driver inherits from ADDriver. It implements many of the parameters in asynNDArrayDriver.h and in ADArrayDriver.h. It also implements a number of parameters that are specific to the Roper detectors. The pvCam class documentation describes this class in detail.
The following table describes how the PVCAM driver implements some of the standard driver parameters.
DOCUMENT IMPLEMENTATION OF STANDARD DRIVER PARAMETERS IN THIS TABLE
Implementation of Parameters in asynNDArrayDriver.h and ADDriver.h, and EPICS Record Definitions in ADBase.template and NDFile.template | ||
Parameter index variable | EPICS record name | Description |
---|---|---|
ADNumImages | $(P)$(R)NumImages | Controls the number of images to acquire when ADImageMode is ADImageMultiple. |
The PVCAM driver implements the following parameters in addition to those in asynNDArrayDriver.h
and ADDriver.h. Note that to reduce the width of this table the parameter index
variable names have been split into 2 lines, but these are just a single name, for
example PVCamInitDetector
.
Parameter Definitions in pvcamSrc.h and EPICS Record Definitions in pvCam.template | ||||||
Parameter index variable | asyn interface | Access | Description | drvInfo string | EPICS record name | EPICS record type |
---|---|---|---|---|---|---|
PVCam InitDetector |
asynInt32 | r/w | Initializes the detector | PVCAM_INITIALIZE_DETECTOR |
$(P)$(R)Initialize $(P)$(R)Initialize_RBV |
longout longin |
PVCam InitSlot1Cam |
asynOctet | r | String describing 1st found detector | PVCAM_SLOT1 | $(P)$(R)Slot1_RBV | stringin |
PVCam Slot2Cam |
asynOctet | r | String describing 2nd found detector | PVCAM_SLOT2 | $(P)$(R)Slot2_RBV | stringin |
PVCam Slot3Cam |
asynOctet | r | String describing 3rd found detector | PVCAM_SLOT3 | $(P)$(R)Slot3_RBV | stringin |
PVCam DetectorSelected |
asynInt32 | r/w | Index of selected detector | PVCAM_DETECTORSELECTED |
$(P)$(R)DetecorSelected $(P)$(R)DetecorSelected_RBV |
longout longin |
PVCam ChipNameRBV |
asynOctet | r | String describing CCD chip | PVCAM_CHIPNAME | $(P)$(R)ChipName_RBV | stringin |
PVCam NumParallelPixelsRBV |
asynInt32 | r | Parallel size of the CCD in active rows | PVCAM_NUMPARALLELPIXELS | $(P)$(R)NumParallelPixels_RBV | longin |
PVCam NumSerialPixelsRBV |
asynInt32 | r | Serial size of the CCD | PVCAM_NUMSERIAL | $(P)$(R)NumSerialPixels_RBV | longin |
PVCam PixelParallelSizeRBV |
asynInt32 | r | Size of the pixel in parallel direction in nanometers | PVCAM_PIXELPARALLELSIZE | $(P)$(R)PixelParallelSize_RBV | longin |
PVCam PixelSerialSizeRBV |
asynInt32 | r | Size of the pixel in Serial direction in nanometers | PVCAM_PIXELSERIALSIZE | $(P)$(R)PixelSerialSize_RBV | longin |
PVCam ChipHeightRBV |
asynFloat64 | r | Height of CCD in mm | PVCAM_CHIPHEIGHT | $(P)$(R)ChipHeight_RBV | longin |
PVCam ChipWidthRBV |
asynFloat64 | r | Width of CCD in mm | PVCAM_CHIPWIDTH | $(P)$(R)ChipWidth_RBV | longin |
PVCam PixelParallelDistRBV |
asynInt32 | r | Pixel-to-pixel distance, in parallel direction, in nanometers | PVCAM_PIXELPARALLELDIST | $(P)$(R)PixelParallelDist_RBV | longin |
PVCam PixelSerialDistRBV |
asynInt32 | r | Pixel-to-pixel distance, in serial direction, in nanometers | PVCAM_PIXELSERIALDIST | $(P)$(R)PixelSerialDist_RBV | longin |
PVCam PostMaxRBV |
asynInt32 | r | PVCAM_POSTMASK | $(P)$(R)PostMask_RBV | longin | |
PVCam PreMaskRBV |
asynInt32 | r | PVCAM_PREMASK | $(P)$(R)PreMask_RBV | longin | |
PVCam PostScanRBV |
asynInt32 | r | PVCAM_POSTSCAN | $(P)$(R)PostScan_RBV | longin | |
PVCam PreScanRBV |
asynInt32 | r | PVCAM_PRESCAN | $(P)$(R)PreScan_RBV | longin | |
PVCam NumPortsRBV |
asynInt32 | r | PVCAM_NUMPORTS | $(P)$(R)NumPorts_RBV | longin | |
PVCam FullWellCapacityRBV |
asynInt32 | r | PVCAM_FULLWELLCAPACITY | $(P)$(R)FullWellCapacity_RBV | longin | |
PVCam FrameTransferCapableRBV |
asynInt32 | r | PVCAM_FRAMETRANSFERCAPABLE | $(P)$(R)FrameTransferCapable_RBV | longin | |
PVCam NumSpeedTableEntriesRBV |
asynInt32 | r | PVCAM_NUMSPEEDTABLEENTRIES | $(P)$(R)NumSpeedTableEntries_RBV | longin | |
PVCam SpeedTableIndex SpeedTableIndexRBV |
asynInt32 | r/w |
PVCAM_SPEEDTABLEINDEX PVCAM_SPEEDTABLEINDEX_RBV |
$(P)$(R)SpeedTableIndex $(P)$(R)SpeedTableIndex_RBV |
longout longin |
|
PVCam BitDepthRBV |
asynInt32 | r | PVCAM_BITDEPTH | $(P)$(R)BitDepth_RBV | longin | |
PVCam PixelTimeRBV |
asynInt32 | r | PVCAM_PIXELTIME | $(P)$(R)PixelTime_RBV | longin | |
PVCam GainIndex GainIndexRBV |
asynInt32 | r |
PVCAM_GAININDEX PVCAM_GAININDEX_RBV |
$(P)$(R)GainIndex $(P)$(R)GainIndex_RBV |
longin | |
PVCam MaxGainIndexRBV |
asynInt32 | r | PVCAM_MAXGAININDEX | $(P)$(R)MaxGainIndex_RBV | longin | |
PVCam MinShutterOpenDelayRBV |
asynInt32 | r | PVCAM_MINSHUTTEROPENDELAY | $(P)$(R)MinShutterOpenDelay_RBV | longin | |
PVCam MaxShutterOpenDelayRBV |
asynInt32 | r | PVCAM_MAXSHUTTEROPENDELAY | $(P)$(R)MaxShutterOpenDelay_RBV | longin | |
PVCam MinShutterCloseDelayRBV |
asynInt32 | r | PVCAM_MINSHUTTERCLOSEDELAY | $(P)$(R)MinShutterCloseDelay_RBV | longin | |
PVCam MaxShutterCloseDelayRBV |
asynInt32 | r | PVCAM_MAXSHUTTERCLOSEDELAY | $(P)$(R)MaxShutterCloseDelay_RBV | longin | |
PVCam ShutterOpenDelay ShutterOpenDelayRBV |
asynInt32 | r/w |
PVCAM_SHUTTEROPENDELAY PVCAM_SHUTTEROPENDELAY_RBV |
$(P)$(R)OpenDelay $(P)$(R)OpenDelay_RBV |
longout longin |
|
PVCam ShutterCloseDelay ShutterCloseDelayRBV |
asynInt32 | r/w |
PVCAM_SHUTTERCLOSEDELAY PVCAM_SHUTTERCLOSEDELAY_RBV |
$(P)$(R)CloseDelay $(P)$(R)CloseDelay_RBV |
longout longin |
|
PVCam MeasuredTemperatureRBV |
asynFloat64 | r | PVCAM_MEASUREDTEMPERATURE_RBV | $(P)$(R)MeasuredTemperature_RBV | longin | |
PVCam MinTemperatureRBV |
asynFloat64 | r | PVCAM_MINTEMPERATURE | $(P)$(R)MinSetTemperature | longin | |
PVCam MaxTemperatureRBV |
asynFloat64 | r | PVCAM_MAXTEMPERATURE | $(P)$(R)MaxSetTemperature | longin | |
PVCam SetTemperature SetTemperatureRBV |
asynFloat64 | r/w |
PVCAM_SETTEMPERATURE PVCAM_SETTEMPERATURE_RBV |
$(P)$(R)SetTemperature $(P)$(R)SetTemperature_RBV |
longin | |
PVCam DetectorMode DetectorModeRBV |
asynInt32 | r/w |
PVCAM_DETECTORMODE PVCAM_DETECTORMODE_RBV |
$(P)$(R)DetectorMode $(P)$(R)DetectorMode_RBV |
longin | |
PVCam TriggerMode TriggerModeRBV |
asynInt32 | r/w |
PVCAM_TRIGGERMODE_RBV PVCAM_TRIGGERMODE_RBV |
$(P)$(R)TriggerMode $(P)$(R)TriggerMode_RBV |
longin | |
PVCam TriggerEdge TriggerEdgeRBV |
asynInt32 | r/w |
PVCAM_TRIGGEREDGE_RBV PVCAM_TRIGGEREDGE_RBV |
$(P)$(R)TriggerEdge $(P)$(R)TriggerEdge_RBV |
longin | |
PVCam CamFirmwareVersRBV |
asynOctetRead | r | PVCAM_CAMFIRMWAREVERS_RBV | $(P)$(R)CameraFirmwareVers_RBV | longin | |
PVCam PCIFWVersRBV |
asynInt32 | r | PVCAM_PCIFWVERS_RBV | $(P)$(R)PCIFWVers_RBV | longin | |
PVCam HeadSerialNumRBV |
asynOctetRead | r | PVCAM_HEADSERIALNUM_RBV | $(P)$(R)HeadSerialNum_RBV | longin | |
PVCam SerialNumRBV |
asynInt32 | r | PVCAM_SERIALNUM_RBV | $(P)$(R)SerialNum_RBV | longin | |
PVCam PVCamVersRBV |
asynOctetRead | r | PVCAM_PVCAMVERS_RBV | $(P)$(R)PVCamVers_RBV | longin | |
PVCam DevDrvVersRBV |
asynOctetRead | r | PVCAM_DEVDRVVERS_RBV | $(P)$(R)DevDrvVers_RBV | longin |
The PVCAM driver does not support the following standard driver parameters because they are not supported in the PVCAM library:
The PVCAM driver is created with the pvCamConfig command, either from C/C++ or from the EPICS IOC shell.
int pvCamConfig(const char *portName, int maxSizeX, int maxSizeY, int dataType, int maxBuffers, size_t maxMemory, int priority, int stackSize )
For details on the meaning of the parameters to this function refer to the detailed documentation on the pvCamConfig function in the pvCam.cpp documentation and in the documentation for the constructor for the pvCam class.
There an example IOC boot directory and startup script (iocBoot/iocPVCam/st.cmd) provided with areaDetector.
The following shows the MEDM screens that are used to control the PVCAM detector. Note that the general purpose screen ADBase.adl can be used, but it exposes many controls that are not applicable to the PVCAM driver, and lacks some fields that are important for the PVCAM driver.
pvCam.adl
is the main screen used to control the PVCAM driver.
The following measurements were done to demonstrate the performance that can be obtained with the areaDetector PVCAM driver.
PUT A TABLE OF PERFORMANCE MEASUREMENTS HERE
The following are some current restrictions of the PVCAM driver: