00001 #ifndef PSANA_PRINCETON_DDL_H
00002 #define PSANA_PRINCETON_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 Princeton {
00013
00014
00015
00016
00017
00018
00019
00020 class ConfigV1 {
00021 public:
00022 enum { TypeId = Pds::TypeId::Id_PrincetonConfig };
00023 enum { Version = 1 };
00024 virtual ~ConfigV1();
00025 virtual uint32_t width() const = 0;
00026 virtual uint32_t height() const = 0;
00027 virtual uint32_t orgX() const = 0;
00028 virtual uint32_t orgY() const = 0;
00029 virtual uint32_t binX() const = 0;
00030 virtual uint32_t binY() const = 0;
00031 virtual float exposureTime() const = 0;
00032 virtual float coolingTemp() const = 0;
00033 virtual uint32_t readoutSpeedIndex() const = 0;
00034 virtual uint16_t readoutEventCode() const = 0;
00035 virtual uint16_t delayMode() const = 0;
00036
00037
00038 virtual uint32_t frameSize() const = 0;
00039
00040 virtual uint32_t numPixelsX() const = 0;
00041
00042 virtual uint32_t numPixelsY() const = 0;
00043
00044 virtual uint32_t numPixels() const = 0;
00045 };
00046
00047
00048
00049
00050
00051
00052
00053 class ConfigV2 {
00054 public:
00055 enum { TypeId = Pds::TypeId::Id_PrincetonConfig };
00056 enum { Version = 2 };
00057 virtual ~ConfigV2();
00058 virtual uint32_t width() const = 0;
00059 virtual uint32_t height() const = 0;
00060 virtual uint32_t orgX() const = 0;
00061 virtual uint32_t orgY() const = 0;
00062 virtual uint32_t binX() const = 0;
00063 virtual uint32_t binY() const = 0;
00064 virtual float exposureTime() const = 0;
00065 virtual float coolingTemp() const = 0;
00066 virtual uint16_t gainIndex() const = 0;
00067 virtual uint16_t readoutSpeedIndex() const = 0;
00068 virtual uint16_t readoutEventCode() const = 0;
00069 virtual uint16_t delayMode() const = 0;
00070
00071
00072 virtual uint32_t frameSize() const = 0;
00073
00074 virtual uint32_t numPixelsX() const = 0;
00075
00076 virtual uint32_t numPixelsY() const = 0;
00077
00078 virtual uint32_t numPixels() const = 0;
00079 };
00080
00081
00082
00083
00084
00085
00086
00087 class ConfigV3 {
00088 public:
00089 enum { TypeId = Pds::TypeId::Id_PrincetonConfig };
00090 enum { Version = 3 };
00091 virtual ~ConfigV3();
00092 virtual uint32_t width() const = 0;
00093 virtual uint32_t height() const = 0;
00094 virtual uint32_t orgX() const = 0;
00095 virtual uint32_t orgY() const = 0;
00096 virtual uint32_t binX() const = 0;
00097 virtual uint32_t binY() const = 0;
00098 virtual float exposureTime() const = 0;
00099 virtual float coolingTemp() const = 0;
00100 virtual uint8_t gainIndex() const = 0;
00101 virtual uint8_t readoutSpeedIndex() const = 0;
00102 virtual uint16_t exposureEventCode() const = 0;
00103 virtual uint32_t numDelayShots() const = 0;
00104
00105
00106 virtual uint32_t frameSize() const = 0;
00107
00108 virtual uint32_t numPixelsX() const = 0;
00109
00110 virtual uint32_t numPixelsY() const = 0;
00111
00112 virtual uint32_t numPixels() const = 0;
00113 };
00114
00115
00116
00117
00118
00119
00120
00121 class ConfigV4 {
00122 public:
00123 enum { TypeId = Pds::TypeId::Id_PrincetonConfig };
00124 enum { Version = 4 };
00125 virtual ~ConfigV4();
00126 virtual uint32_t width() const = 0;
00127 virtual uint32_t height() const = 0;
00128 virtual uint32_t orgX() const = 0;
00129 virtual uint32_t orgY() const = 0;
00130 virtual uint32_t binX() const = 0;
00131 virtual uint32_t binY() const = 0;
00132 virtual uint32_t maskedHeight() const = 0;
00133 virtual uint32_t kineticHeight() const = 0;
00134 virtual float vsSpeed() const = 0;
00135 virtual float exposureTime() const = 0;
00136 virtual float coolingTemp() const = 0;
00137 virtual uint8_t gainIndex() const = 0;
00138 virtual uint8_t readoutSpeedIndex() const = 0;
00139 virtual uint16_t exposureEventCode() const = 0;
00140 virtual uint32_t numDelayShots() const = 0;
00141
00142
00143 virtual uint32_t frameSize() const = 0;
00144
00145 virtual uint32_t numPixelsX() const = 0;
00146
00147 virtual uint32_t numPixelsY() const = 0;
00148
00149 virtual uint32_t numPixels() const = 0;
00150 };
00151
00152
00153
00154
00155
00156
00157
00158 class ConfigV5 {
00159 public:
00160 enum { TypeId = Pds::TypeId::Id_PrincetonConfig };
00161 enum { Version = 5 };
00162 virtual ~ConfigV5();
00163 virtual uint32_t width() const = 0;
00164 virtual uint32_t height() const = 0;
00165 virtual uint32_t orgX() const = 0;
00166 virtual uint32_t orgY() const = 0;
00167 virtual uint32_t binX() const = 0;
00168 virtual uint32_t binY() const = 0;
00169 virtual float exposureTime() const = 0;
00170 virtual float coolingTemp() const = 0;
00171 virtual uint16_t gainIndex() const = 0;
00172 virtual uint16_t readoutSpeedIndex() const = 0;
00173 virtual uint32_t maskedHeight() const = 0;
00174 virtual uint32_t kineticHeight() const = 0;
00175 virtual float vsSpeed() const = 0;
00176 virtual int16_t infoReportInterval() const = 0;
00177 virtual uint16_t exposureEventCode() const = 0;
00178 virtual uint32_t numDelayShots() const = 0;
00179
00180
00181 virtual uint32_t frameSize() const = 0;
00182
00183 virtual uint32_t numPixelsX() const = 0;
00184
00185 virtual uint32_t numPixelsY() const = 0;
00186
00187 virtual uint32_t numPixels() const = 0;
00188 };
00189
00190
00191
00192
00193
00194
00195 class ConfigV1;
00196 class ConfigV2;
00197 class ConfigV3;
00198 class ConfigV4;
00199 class ConfigV5;
00200
00201 class FrameV1 {
00202 public:
00203 enum { TypeId = Pds::TypeId::Id_PrincetonFrame };
00204 enum { Version = 1 };
00205 virtual ~FrameV1();
00206 virtual uint32_t shotIdStart() const = 0;
00207 virtual float readoutTime() const = 0;
00208 virtual ndarray<const uint16_t, 2> data() const = 0;
00209 };
00210
00211
00212
00213
00214
00215
00216 class ConfigV1;
00217 class ConfigV2;
00218 class ConfigV3;
00219 class ConfigV4;
00220 class ConfigV5;
00221
00222 class FrameV2 {
00223 public:
00224 enum { TypeId = Pds::TypeId::Id_PrincetonFrame };
00225 enum { Version = 2 };
00226 virtual ~FrameV2();
00227 virtual uint32_t shotIdStart() const = 0;
00228 virtual float readoutTime() const = 0;
00229 virtual float temperature() const = 0;
00230 virtual ndarray<const uint16_t, 2> data() const = 0;
00231 };
00232
00233
00234
00235
00236
00237
00238
00239 class InfoV1 {
00240 public:
00241 enum { TypeId = Pds::TypeId::Id_PrincetonInfo };
00242 enum { Version = 1 };
00243 InfoV1(float arg__fTemperature)
00244 : _fTemperature(arg__fTemperature)
00245 {
00246 }
00247 InfoV1() {}
00248 float temperature() const { return _fTemperature; }
00249 static uint32_t _sizeof() { return 4; }
00250 private:
00251 float _fTemperature;
00252 };
00253 }
00254 }
00255 #endif // PSANA_PRINCETON_DDL_H