00001 #ifndef PSANA_ANDOR_DDL_H
00002 #define PSANA_ANDOR_DDL_H 1
00003
00004
00005
00006 #include <vector>
00007 #include <iosfwd>
00008 #include <cstring>
00009 #include "ndarray/ndarray.h"
00010 #include "pdsdata/xtc/TypeId.hh"
00011 namespace Psana {
00012 namespace Andor {
00013
00014
00015
00016
00017
00018
00019
00020 class ConfigV1 {
00021 public:
00022 enum { TypeId = Pds::TypeId::Id_AndorConfig };
00023 enum { Version = 1 };
00024 enum EnumFanMode {
00025 ENUM_FAN_FULL = 0,
00026 ENUM_FAN_LOW = 1,
00027 ENUM_FAN_OFF = 2,
00028 ENUM_FAN_ACQOFF = 3,
00029 ENUM_FAN_NUM = 4,
00030 };
00031 virtual ~ConfigV1();
00032 virtual uint32_t width() const = 0;
00033 virtual uint32_t height() const = 0;
00034 virtual uint32_t orgX() const = 0;
00035 virtual uint32_t orgY() const = 0;
00036 virtual uint32_t binX() const = 0;
00037 virtual uint32_t binY() const = 0;
00038 virtual float exposureTime() const = 0;
00039 virtual float coolingTemp() const = 0;
00040 virtual Andor::ConfigV1::EnumFanMode fanMode() const = 0;
00041 virtual uint8_t baselineClamp() const = 0;
00042 virtual uint8_t highCapacity() const = 0;
00043 virtual uint8_t gainIndex() const = 0;
00044 virtual uint16_t readoutSpeedIndex() const = 0;
00045 virtual uint16_t exposureEventCode() const = 0;
00046 virtual uint32_t numDelayShots() const = 0;
00047
00048 virtual uint32_t frameSize() const = 0;
00049
00050 virtual uint32_t numPixelsX() const = 0;
00051
00052 virtual uint32_t numPixelsY() const = 0;
00053
00054 virtual uint32_t numPixels() const = 0;
00055 };
00056 std::ostream& operator<<(std::ostream& str, Andor::ConfigV1::EnumFanMode enval);
00057
00058
00059
00060
00061
00062
00063
00064 class ConfigV2 {
00065 public:
00066 enum { TypeId = Pds::TypeId::Id_AndorConfig };
00067 enum { Version = 2 };
00068 enum EnumFanMode {
00069 ENUM_FAN_FULL = 0,
00070 ENUM_FAN_LOW = 1,
00071 ENUM_FAN_OFF = 2,
00072 ENUM_FAN_ACQOFF = 3,
00073 ENUM_FAN_NUM = 4,
00074 };
00075 enum EnumCropMode {
00076 ENUM_CROP_OFF = 0,
00077 ENUM_CROP_ON = 1,
00078 ENUM_CROP_EX = 2,
00079 ENUM_CROP_NUM = 3,
00080 };
00081 virtual ~ConfigV2();
00082 virtual uint32_t width() const = 0;
00083 virtual uint32_t height() const = 0;
00084 virtual uint32_t orgX() const = 0;
00085 virtual uint32_t orgY() const = 0;
00086 virtual uint32_t binX() const = 0;
00087 virtual uint32_t binY() const = 0;
00088 virtual float exposureTime() const = 0;
00089 virtual float coolingTemp() const = 0;
00090 virtual Andor::ConfigV2::EnumFanMode fanMode() const = 0;
00091 virtual Andor::ConfigV2::EnumCropMode cropMode() const = 0;
00092 virtual uint8_t baselineClamp() const = 0;
00093 virtual uint8_t highCapacity() const = 0;
00094 virtual uint8_t gainIndex() const = 0;
00095 virtual uint16_t readoutSpeedIndex() const = 0;
00096 virtual uint16_t exposureEventCode() const = 0;
00097 virtual uint32_t numDelayShots() const = 0;
00098
00099 virtual uint32_t frameSize() const = 0;
00100
00101 virtual uint32_t numPixelsX() const = 0;
00102
00103 virtual uint32_t numPixelsY() const = 0;
00104
00105 virtual uint32_t numPixels() const = 0;
00106 };
00107 std::ostream& operator<<(std::ostream& str, Andor::ConfigV2::EnumFanMode enval);
00108 std::ostream& operator<<(std::ostream& str, Andor::ConfigV2::EnumCropMode enval);
00109
00110
00111
00112
00113
00114
00115 class ConfigV1;
00116 class ConfigV2;
00117
00118 class FrameV1 {
00119 public:
00120 enum { TypeId = Pds::TypeId::Id_AndorFrame };
00121 enum { Version = 1 };
00122 virtual ~FrameV1();
00123 virtual uint32_t shotIdStart() const = 0;
00124 virtual float readoutTime() const = 0;
00125 virtual float temperature() const = 0;
00126 virtual ndarray<const uint16_t, 2> data() const = 0;
00127 };
00128 }
00129 }
00130 #endif // PSANA_ANDOR_DDL_H