00001 #ifndef PSANA_TIMEPIX_DDL_H
00002 #define PSANA_TIMEPIX_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 Timepix {
00013
00014
00015
00016
00017
00018
00019
00020 class ConfigV1 {
00021 public:
00022 enum { TypeId = Pds::TypeId::Id_TimepixConfig };
00023 enum { Version = 1 };
00024 enum { ChipCount = 4 };
00025 enum ReadoutSpeed {
00026 ReadoutSpeed_Slow = 0,
00027 ReadoutSpeed_Fast = 1,
00028 };
00029 enum TriggerMode {
00030 TriggerMode_ExtPos = 0,
00031 TriggerMode_ExtNeg = 1,
00032 TriggerMode_Soft = 2,
00033 };
00034 virtual ~ConfigV1();
00035 virtual Timepix::ConfigV1::ReadoutSpeed readoutSpeed() const = 0;
00036 virtual Timepix::ConfigV1::TriggerMode triggerMode() const = 0;
00037 virtual int32_t shutterTimeout() const = 0;
00038 virtual int32_t dac0Ikrum() const = 0;
00039 virtual int32_t dac0Disc() const = 0;
00040 virtual int32_t dac0Preamp() const = 0;
00041 virtual int32_t dac0BufAnalogA() const = 0;
00042 virtual int32_t dac0BufAnalogB() const = 0;
00043 virtual int32_t dac0Hist() const = 0;
00044 virtual int32_t dac0ThlFine() const = 0;
00045 virtual int32_t dac0ThlCourse() const = 0;
00046 virtual int32_t dac0Vcas() const = 0;
00047 virtual int32_t dac0Fbk() const = 0;
00048 virtual int32_t dac0Gnd() const = 0;
00049 virtual int32_t dac0Ths() const = 0;
00050 virtual int32_t dac0BiasLvds() const = 0;
00051 virtual int32_t dac0RefLvds() const = 0;
00052 virtual int32_t dac1Ikrum() const = 0;
00053 virtual int32_t dac1Disc() const = 0;
00054 virtual int32_t dac1Preamp() const = 0;
00055 virtual int32_t dac1BufAnalogA() const = 0;
00056 virtual int32_t dac1BufAnalogB() const = 0;
00057 virtual int32_t dac1Hist() const = 0;
00058 virtual int32_t dac1ThlFine() const = 0;
00059 virtual int32_t dac1ThlCourse() const = 0;
00060 virtual int32_t dac1Vcas() const = 0;
00061 virtual int32_t dac1Fbk() const = 0;
00062 virtual int32_t dac1Gnd() const = 0;
00063 virtual int32_t dac1Ths() const = 0;
00064 virtual int32_t dac1BiasLvds() const = 0;
00065 virtual int32_t dac1RefLvds() const = 0;
00066 virtual int32_t dac2Ikrum() const = 0;
00067 virtual int32_t dac2Disc() const = 0;
00068 virtual int32_t dac2Preamp() const = 0;
00069 virtual int32_t dac2BufAnalogA() const = 0;
00070 virtual int32_t dac2BufAnalogB() const = 0;
00071 virtual int32_t dac2Hist() const = 0;
00072 virtual int32_t dac2ThlFine() const = 0;
00073 virtual int32_t dac2ThlCourse() const = 0;
00074 virtual int32_t dac2Vcas() const = 0;
00075 virtual int32_t dac2Fbk() const = 0;
00076 virtual int32_t dac2Gnd() const = 0;
00077 virtual int32_t dac2Ths() const = 0;
00078 virtual int32_t dac2BiasLvds() const = 0;
00079 virtual int32_t dac2RefLvds() const = 0;
00080 virtual int32_t dac3Ikrum() const = 0;
00081 virtual int32_t dac3Disc() const = 0;
00082 virtual int32_t dac3Preamp() const = 0;
00083 virtual int32_t dac3BufAnalogA() const = 0;
00084 virtual int32_t dac3BufAnalogB() const = 0;
00085 virtual int32_t dac3Hist() const = 0;
00086 virtual int32_t dac3ThlFine() const = 0;
00087 virtual int32_t dac3ThlCourse() const = 0;
00088 virtual int32_t dac3Vcas() const = 0;
00089 virtual int32_t dac3Fbk() const = 0;
00090 virtual int32_t dac3Gnd() const = 0;
00091 virtual int32_t dac3Ths() const = 0;
00092 virtual int32_t dac3BiasLvds() const = 0;
00093 virtual int32_t dac3RefLvds() const = 0;
00094 };
00095 std::ostream& operator<<(std::ostream& str, Timepix::ConfigV1::ReadoutSpeed enval);
00096 std::ostream& operator<<(std::ostream& str, Timepix::ConfigV1::TriggerMode enval);
00097
00098
00099
00100
00101
00102
00103
00104 class ConfigV2 {
00105 public:
00106 enum { TypeId = Pds::TypeId::Id_TimepixConfig };
00107 enum { Version = 2 };
00108 enum { ChipCount = 4 };
00109 enum { ChipNameMax = 16 };
00110 enum { PixelThreshMax = 4*256*256 };
00111 enum ReadoutSpeed {
00112 ReadoutSpeed_Slow = 0,
00113 ReadoutSpeed_Fast = 1,
00114 };
00115 enum TriggerMode {
00116 TriggerMode_ExtPos = 0,
00117 TriggerMode_ExtNeg = 1,
00118 TriggerMode_Soft = 2,
00119 };
00120 virtual ~ConfigV2();
00121 virtual Timepix::ConfigV2::ReadoutSpeed readoutSpeed() const = 0;
00122 virtual Timepix::ConfigV2::TriggerMode triggerMode() const = 0;
00123 virtual int32_t timepixSpeed() const = 0;
00124 virtual int32_t dac0Ikrum() const = 0;
00125 virtual int32_t dac0Disc() const = 0;
00126 virtual int32_t dac0Preamp() const = 0;
00127 virtual int32_t dac0BufAnalogA() const = 0;
00128 virtual int32_t dac0BufAnalogB() const = 0;
00129 virtual int32_t dac0Hist() const = 0;
00130 virtual int32_t dac0ThlFine() const = 0;
00131 virtual int32_t dac0ThlCourse() const = 0;
00132 virtual int32_t dac0Vcas() const = 0;
00133 virtual int32_t dac0Fbk() const = 0;
00134 virtual int32_t dac0Gnd() const = 0;
00135 virtual int32_t dac0Ths() const = 0;
00136 virtual int32_t dac0BiasLvds() const = 0;
00137 virtual int32_t dac0RefLvds() const = 0;
00138 virtual int32_t dac1Ikrum() const = 0;
00139 virtual int32_t dac1Disc() const = 0;
00140 virtual int32_t dac1Preamp() const = 0;
00141 virtual int32_t dac1BufAnalogA() const = 0;
00142 virtual int32_t dac1BufAnalogB() const = 0;
00143 virtual int32_t dac1Hist() const = 0;
00144 virtual int32_t dac1ThlFine() const = 0;
00145 virtual int32_t dac1ThlCourse() const = 0;
00146 virtual int32_t dac1Vcas() const = 0;
00147 virtual int32_t dac1Fbk() const = 0;
00148 virtual int32_t dac1Gnd() const = 0;
00149 virtual int32_t dac1Ths() const = 0;
00150 virtual int32_t dac1BiasLvds() const = 0;
00151 virtual int32_t dac1RefLvds() const = 0;
00152 virtual int32_t dac2Ikrum() const = 0;
00153 virtual int32_t dac2Disc() const = 0;
00154 virtual int32_t dac2Preamp() const = 0;
00155 virtual int32_t dac2BufAnalogA() const = 0;
00156 virtual int32_t dac2BufAnalogB() const = 0;
00157 virtual int32_t dac2Hist() const = 0;
00158 virtual int32_t dac2ThlFine() const = 0;
00159 virtual int32_t dac2ThlCourse() const = 0;
00160 virtual int32_t dac2Vcas() const = 0;
00161 virtual int32_t dac2Fbk() const = 0;
00162 virtual int32_t dac2Gnd() const = 0;
00163 virtual int32_t dac2Ths() const = 0;
00164 virtual int32_t dac2BiasLvds() const = 0;
00165 virtual int32_t dac2RefLvds() const = 0;
00166 virtual int32_t dac3Ikrum() const = 0;
00167 virtual int32_t dac3Disc() const = 0;
00168 virtual int32_t dac3Preamp() const = 0;
00169 virtual int32_t dac3BufAnalogA() const = 0;
00170 virtual int32_t dac3BufAnalogB() const = 0;
00171 virtual int32_t dac3Hist() const = 0;
00172 virtual int32_t dac3ThlFine() const = 0;
00173 virtual int32_t dac3ThlCourse() const = 0;
00174 virtual int32_t dac3Vcas() const = 0;
00175 virtual int32_t dac3Fbk() const = 0;
00176 virtual int32_t dac3Gnd() const = 0;
00177 virtual int32_t dac3Ths() const = 0;
00178 virtual int32_t dac3BiasLvds() const = 0;
00179 virtual int32_t dac3RefLvds() const = 0;
00180 virtual int32_t driverVersion() const = 0;
00181 virtual uint32_t firmwareVersion() const = 0;
00182 virtual uint32_t pixelThreshSize() const = 0;
00183 virtual ndarray<const uint8_t, 1> pixelThresh() const = 0;
00184 virtual const char* chip0Name() const = 0;
00185 virtual const char* chip1Name() const = 0;
00186 virtual const char* chip2Name() const = 0;
00187 virtual const char* chip3Name() const = 0;
00188 virtual int32_t chip0ID() const = 0;
00189 virtual int32_t chip1ID() const = 0;
00190 virtual int32_t chip2ID() const = 0;
00191 virtual int32_t chip3ID() const = 0;
00192 virtual int32_t chipCount() const = 0;
00193 };
00194 std::ostream& operator<<(std::ostream& str, Timepix::ConfigV2::ReadoutSpeed enval);
00195 std::ostream& operator<<(std::ostream& str, Timepix::ConfigV2::TriggerMode enval);
00196
00197
00198
00199
00200
00201
00202
00203 class ConfigV3 {
00204 public:
00205 enum { TypeId = Pds::TypeId::Id_TimepixConfig };
00206 enum { Version = 3 };
00207 enum { ChipCount = 4 };
00208 enum { ChipNameMax = 16 };
00209 enum { PixelThreshMax = 4*256*256 };
00210 enum ReadoutSpeed {
00211 ReadoutSpeed_Slow = 0,
00212 ReadoutSpeed_Fast = 1,
00213 };
00214 enum TimepixMode {
00215 TimepixMode_Counting = 0,
00216 TimepixMode_TOT = 1,
00217 };
00218 virtual ~ConfigV3();
00219 virtual Timepix::ConfigV3::ReadoutSpeed readoutSpeed() const = 0;
00220 virtual Timepix::ConfigV3::TimepixMode timepixMode() const = 0;
00221 virtual int32_t timepixSpeed() const = 0;
00222 virtual int32_t dac0Ikrum() const = 0;
00223 virtual int32_t dac0Disc() const = 0;
00224 virtual int32_t dac0Preamp() const = 0;
00225 virtual int32_t dac0BufAnalogA() const = 0;
00226 virtual int32_t dac0BufAnalogB() const = 0;
00227 virtual int32_t dac0Hist() const = 0;
00228 virtual int32_t dac0ThlFine() const = 0;
00229 virtual int32_t dac0ThlCourse() const = 0;
00230 virtual int32_t dac0Vcas() const = 0;
00231 virtual int32_t dac0Fbk() const = 0;
00232 virtual int32_t dac0Gnd() const = 0;
00233 virtual int32_t dac0Ths() const = 0;
00234 virtual int32_t dac0BiasLvds() const = 0;
00235 virtual int32_t dac0RefLvds() const = 0;
00236 virtual int32_t dac1Ikrum() const = 0;
00237 virtual int32_t dac1Disc() const = 0;
00238 virtual int32_t dac1Preamp() const = 0;
00239 virtual int32_t dac1BufAnalogA() const = 0;
00240 virtual int32_t dac1BufAnalogB() const = 0;
00241 virtual int32_t dac1Hist() const = 0;
00242 virtual int32_t dac1ThlFine() const = 0;
00243 virtual int32_t dac1ThlCourse() const = 0;
00244 virtual int32_t dac1Vcas() const = 0;
00245 virtual int32_t dac1Fbk() const = 0;
00246 virtual int32_t dac1Gnd() const = 0;
00247 virtual int32_t dac1Ths() const = 0;
00248 virtual int32_t dac1BiasLvds() const = 0;
00249 virtual int32_t dac1RefLvds() const = 0;
00250 virtual int32_t dac2Ikrum() const = 0;
00251 virtual int32_t dac2Disc() const = 0;
00252 virtual int32_t dac2Preamp() const = 0;
00253 virtual int32_t dac2BufAnalogA() const = 0;
00254 virtual int32_t dac2BufAnalogB() const = 0;
00255 virtual int32_t dac2Hist() const = 0;
00256 virtual int32_t dac2ThlFine() const = 0;
00257 virtual int32_t dac2ThlCourse() const = 0;
00258 virtual int32_t dac2Vcas() const = 0;
00259 virtual int32_t dac2Fbk() const = 0;
00260 virtual int32_t dac2Gnd() const = 0;
00261 virtual int32_t dac2Ths() const = 0;
00262 virtual int32_t dac2BiasLvds() const = 0;
00263 virtual int32_t dac2RefLvds() const = 0;
00264 virtual int32_t dac3Ikrum() const = 0;
00265 virtual int32_t dac3Disc() const = 0;
00266 virtual int32_t dac3Preamp() const = 0;
00267 virtual int32_t dac3BufAnalogA() const = 0;
00268 virtual int32_t dac3BufAnalogB() const = 0;
00269 virtual int32_t dac3Hist() const = 0;
00270 virtual int32_t dac3ThlFine() const = 0;
00271 virtual int32_t dac3ThlCourse() const = 0;
00272 virtual int32_t dac3Vcas() const = 0;
00273 virtual int32_t dac3Fbk() const = 0;
00274 virtual int32_t dac3Gnd() const = 0;
00275 virtual int32_t dac3Ths() const = 0;
00276 virtual int32_t dac3BiasLvds() const = 0;
00277 virtual int32_t dac3RefLvds() const = 0;
00278 virtual int8_t dacBias() const = 0;
00279 virtual int8_t flags() const = 0;
00280 virtual int32_t driverVersion() const = 0;
00281 virtual uint32_t firmwareVersion() const = 0;
00282 virtual uint32_t pixelThreshSize() const = 0;
00283 virtual ndarray<const uint8_t, 1> pixelThresh() const = 0;
00284 virtual const char* chip0Name() const = 0;
00285 virtual const char* chip1Name() const = 0;
00286 virtual const char* chip2Name() const = 0;
00287 virtual const char* chip3Name() const = 0;
00288 virtual int32_t chip0ID() const = 0;
00289 virtual int32_t chip1ID() const = 0;
00290 virtual int32_t chip2ID() const = 0;
00291 virtual int32_t chip3ID() const = 0;
00292 virtual int32_t chipCount() const = 0;
00293 };
00294 std::ostream& operator<<(std::ostream& str, Timepix::ConfigV3::ReadoutSpeed enval);
00295 std::ostream& operator<<(std::ostream& str, Timepix::ConfigV3::TimepixMode enval);
00296
00297
00298
00299
00300
00301
00302
00303 class DataV1 {
00304 public:
00305 enum { TypeId = Pds::TypeId::Id_TimepixData };
00306 enum { Version = 1 };
00307 enum { Height = 512 };
00308 enum { Width = 512 };
00309 enum { Depth = 14 };
00310 enum { DepthBytes = 2 };
00311 enum { MaxPixelValue = 11810 };
00312 virtual ~DataV1();
00313 virtual uint32_t timestamp() const = 0;
00314 virtual uint16_t frameCounter() const = 0;
00315 virtual uint16_t lostRows() const = 0;
00316 virtual ndarray<const uint16_t, 2> data() const = 0;
00317 virtual uint32_t width() const = 0;
00318 virtual uint32_t height() const = 0;
00319 virtual uint32_t depth() const = 0;
00320 virtual uint32_t depth_bytes() const = 0;
00321
00322 virtual uint32_t data_size() const = 0;
00323 };
00324
00325
00326
00327
00328
00329
00330
00331 class DataV2 {
00332 public:
00333 enum { TypeId = Pds::TypeId::Id_TimepixData };
00334 enum { Version = 2 };
00335 enum { Depth = 14 };
00336 enum { MaxPixelValue = 11810 };
00337 virtual ~DataV2();
00338
00339 virtual uint16_t width() const = 0;
00340
00341 virtual uint16_t height() const = 0;
00342
00343 virtual uint32_t timestamp() const = 0;
00344
00345 virtual uint16_t frameCounter() const = 0;
00346
00347 virtual uint16_t lostRows() const = 0;
00348 virtual ndarray<const uint16_t, 2> data() const = 0;
00349 virtual uint32_t depth() const = 0;
00350 virtual uint32_t depth_bytes() const = 0;
00351
00352 virtual uint32_t data_size() const = 0;
00353 };
00354 }
00355 }
00356 #endif // PSANA_TIMEPIX_DDL_H