00001 #ifndef PSANA_CSPAD_DDL_H
00002 #define PSANA_CSPAD_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 CsPad {
00013 enum {
00014 MaxQuadsPerSensor = 4
00015 };
00016 enum {
00017 ASICsPerQuad = 16
00018 };
00019 enum {
00020 RowsPerBank = 26
00021 };
00022 enum {
00023 FullBanksPerASIC = 7
00024 };
00025 enum {
00026 BanksPerASIC = 8
00027 };
00028 enum {
00029 ColumnsPerASIC = 185
00030 };
00031 enum {
00032 MaxRowsPerASIC = 194
00033 };
00034 enum {
00035 PotsPerQuad = 80
00036 };
00037 enum {
00038 TwoByTwosPerQuad = 4
00039 };
00040 enum {
00041 SectorsPerQuad = 8
00042 };
00043
00044
00045 enum RunModes {
00046 NoRunning,
00047 RunButDrop,
00048 RunAndSendToRCE,
00049 RunAndSendTriggeredByTTL,
00050 ExternalTriggerSendToRCE,
00051 ExternalTriggerDrop,
00052 NumberOfRunModes,
00053 };
00054 std::ostream& operator<<(std::ostream& str, CsPad::RunModes enval);
00055
00056
00057 enum DataModes {
00058 normal = 0,
00059 shiftTest = 1,
00060 testData = 2,
00061 reserved = 3,
00062 };
00063 std::ostream& operator<<(std::ostream& str, CsPad::DataModes enval);
00064
00065
00066
00067
00068
00069
00070
00071 class CsPadDigitalPotsCfg {
00072 public:
00073 virtual ~CsPadDigitalPotsCfg();
00074 virtual ndarray<const uint8_t, 1> pots() const = 0;
00075 };
00076
00077
00078
00079
00080
00081
00082
00083 class CsPadReadOnlyCfg {
00084 public:
00085 CsPadReadOnlyCfg(uint32_t arg__shiftTest, uint32_t arg__version)
00086 : _shiftTest(arg__shiftTest), _version(arg__version)
00087 {
00088 }
00089 CsPadReadOnlyCfg() {}
00090 uint32_t shiftTest() const { return _shiftTest; }
00091 uint32_t version() const { return _version; }
00092 static uint32_t _sizeof() { return 8; }
00093 private:
00094 uint32_t _shiftTest;
00095 uint32_t _version;
00096 };
00097
00098
00099
00100
00101
00102
00103
00104 class ProtectionSystemThreshold {
00105 public:
00106 ProtectionSystemThreshold(uint32_t arg__adcThreshold, uint32_t arg__pixelCountThreshold)
00107 : _adcThreshold(arg__adcThreshold), _pixelCountThreshold(arg__pixelCountThreshold)
00108 {
00109 }
00110 ProtectionSystemThreshold() {}
00111 uint32_t adcThreshold() const { return _adcThreshold; }
00112 uint32_t pixelCountThreshold() const { return _pixelCountThreshold; }
00113 static uint32_t _sizeof() { return 8; }
00114 private:
00115 uint32_t _adcThreshold;
00116 uint32_t _pixelCountThreshold;
00117 };
00118
00119
00120
00121
00122
00123
00124
00125 class CsPadGainMapCfg {
00126 public:
00127 virtual ~CsPadGainMapCfg();
00128
00129 virtual ndarray<const uint16_t, 2> gainMap() const = 0;
00130 };
00131
00132
00133
00134
00135
00136
00137
00138 class ConfigV1QuadReg {
00139 public:
00140 virtual ~ConfigV1QuadReg();
00141 virtual ndarray<const uint32_t, 1> shiftSelect() const = 0;
00142 virtual ndarray<const uint32_t, 1> edgeSelect() const = 0;
00143 virtual uint32_t readClkSet() const = 0;
00144 virtual uint32_t readClkHold() const = 0;
00145 virtual uint32_t dataMode() const = 0;
00146 virtual uint32_t prstSel() const = 0;
00147 virtual uint32_t acqDelay() const = 0;
00148 virtual uint32_t intTime() const = 0;
00149 virtual uint32_t digDelay() const = 0;
00150 virtual uint32_t ampIdle() const = 0;
00151 virtual uint32_t injTotal() const = 0;
00152 virtual uint32_t rowColShiftPer() const = 0;
00153
00154 virtual const CsPad::CsPadReadOnlyCfg& ro() const = 0;
00155 virtual const CsPad::CsPadDigitalPotsCfg& dp() const = 0;
00156
00157 virtual const CsPad::CsPadGainMapCfg& gm() const = 0;
00158 };
00159
00160
00161
00162
00163
00164
00165
00166 class ConfigV2QuadReg {
00167 public:
00168 virtual ~ConfigV2QuadReg();
00169 virtual ndarray<const uint32_t, 1> shiftSelect() const = 0;
00170 virtual ndarray<const uint32_t, 1> edgeSelect() const = 0;
00171 virtual uint32_t readClkSet() const = 0;
00172 virtual uint32_t readClkHold() const = 0;
00173 virtual uint32_t dataMode() const = 0;
00174 virtual uint32_t prstSel() const = 0;
00175 virtual uint32_t acqDelay() const = 0;
00176 virtual uint32_t intTime() const = 0;
00177 virtual uint32_t digDelay() const = 0;
00178 virtual uint32_t ampIdle() const = 0;
00179 virtual uint32_t injTotal() const = 0;
00180 virtual uint32_t rowColShiftPer() const = 0;
00181 virtual uint32_t ampReset() const = 0;
00182 virtual uint32_t digCount() const = 0;
00183 virtual uint32_t digPeriod() const = 0;
00184
00185 virtual const CsPad::CsPadReadOnlyCfg& ro() const = 0;
00186 virtual const CsPad::CsPadDigitalPotsCfg& dp() const = 0;
00187
00188 virtual const CsPad::CsPadGainMapCfg& gm() const = 0;
00189 };
00190
00191
00192
00193
00194
00195
00196
00197 class ConfigV3QuadReg {
00198 public:
00199 virtual ~ConfigV3QuadReg();
00200 virtual ndarray<const uint32_t, 1> shiftSelect() const = 0;
00201 virtual ndarray<const uint32_t, 1> edgeSelect() const = 0;
00202 virtual uint32_t readClkSet() const = 0;
00203 virtual uint32_t readClkHold() const = 0;
00204 virtual uint32_t dataMode() const = 0;
00205 virtual uint32_t prstSel() const = 0;
00206 virtual uint32_t acqDelay() const = 0;
00207 virtual uint32_t intTime() const = 0;
00208 virtual uint32_t digDelay() const = 0;
00209 virtual uint32_t ampIdle() const = 0;
00210 virtual uint32_t injTotal() const = 0;
00211 virtual uint32_t rowColShiftPer() const = 0;
00212 virtual uint32_t ampReset() const = 0;
00213 virtual uint32_t digCount() const = 0;
00214 virtual uint32_t digPeriod() const = 0;
00215 virtual uint32_t biasTuning() const = 0;
00216 virtual uint32_t pdpmndnmBalance() const = 0;
00217
00218 virtual const CsPad::CsPadReadOnlyCfg& ro() const = 0;
00219 virtual const CsPad::CsPadDigitalPotsCfg& dp() const = 0;
00220
00221 virtual const CsPad::CsPadGainMapCfg& gm() const = 0;
00222 };
00223
00224
00225
00226
00227
00228
00229
00230 class ConfigV1 {
00231 public:
00232 enum { TypeId = Pds::TypeId::Id_CspadConfig };
00233 enum { Version = 1 };
00234 virtual ~ConfigV1();
00235 virtual uint32_t concentratorVersion() const = 0;
00236 virtual uint32_t runDelay() const = 0;
00237 virtual uint32_t eventCode() const = 0;
00238 virtual uint32_t inactiveRunMode() const = 0;
00239 virtual uint32_t activeRunMode() const = 0;
00240 virtual uint32_t tdi() const = 0;
00241 virtual uint32_t payloadSize() const = 0;
00242 virtual uint32_t badAsicMask0() const = 0;
00243 virtual uint32_t badAsicMask1() const = 0;
00244 virtual uint32_t asicMask() const = 0;
00245 virtual uint32_t quadMask() const = 0;
00246 virtual const CsPad::ConfigV1QuadReg& quads(uint32_t i0) const = 0;
00247 virtual uint32_t numAsicsRead() const = 0;
00248 virtual uint32_t numQuads() const = 0;
00249 virtual uint32_t numSect() const = 0;
00250
00251 virtual std::vector<int> quads_shape() const = 0;
00252 };
00253
00254
00255
00256
00257
00258
00259
00260 class ConfigV2 {
00261 public:
00262 enum { TypeId = Pds::TypeId::Id_CspadConfig };
00263 enum { Version = 2 };
00264 virtual ~ConfigV2();
00265 virtual uint32_t concentratorVersion() const = 0;
00266 virtual uint32_t runDelay() const = 0;
00267 virtual uint32_t eventCode() const = 0;
00268 virtual uint32_t inactiveRunMode() const = 0;
00269 virtual uint32_t activeRunMode() const = 0;
00270 virtual uint32_t tdi() const = 0;
00271 virtual uint32_t payloadSize() const = 0;
00272 virtual uint32_t badAsicMask0() const = 0;
00273 virtual uint32_t badAsicMask1() const = 0;
00274 virtual uint32_t asicMask() const = 0;
00275 virtual uint32_t quadMask() const = 0;
00276 virtual uint32_t roiMasks() const = 0;
00277 virtual const CsPad::ConfigV1QuadReg& quads(uint32_t i0) const = 0;
00278 virtual uint32_t numAsicsRead() const = 0;
00279
00280 virtual uint32_t roiMask(uint32_t iq) const = 0;
00281
00282 virtual uint32_t numAsicsStored(uint32_t iq) const = 0;
00283
00284 virtual uint32_t numQuads() const = 0;
00285
00286 virtual uint32_t numSect() const = 0;
00287
00288 virtual std::vector<int> quads_shape() const = 0;
00289 };
00290
00291
00292
00293
00294
00295
00296
00297 class ConfigV3 {
00298 public:
00299 enum { TypeId = Pds::TypeId::Id_CspadConfig };
00300 enum { Version = 3 };
00301 virtual ~ConfigV3();
00302 virtual uint32_t concentratorVersion() const = 0;
00303 virtual uint32_t runDelay() const = 0;
00304 virtual uint32_t eventCode() const = 0;
00305 virtual ndarray<const CsPad::ProtectionSystemThreshold, 1> protectionThresholds() const = 0;
00306 virtual uint32_t protectionEnable() const = 0;
00307 virtual uint32_t inactiveRunMode() const = 0;
00308 virtual uint32_t activeRunMode() const = 0;
00309 virtual uint32_t tdi() const = 0;
00310 virtual uint32_t payloadSize() const = 0;
00311 virtual uint32_t badAsicMask0() const = 0;
00312 virtual uint32_t badAsicMask1() const = 0;
00313 virtual uint32_t asicMask() const = 0;
00314 virtual uint32_t quadMask() const = 0;
00315 virtual uint32_t roiMasks() const = 0;
00316 virtual const CsPad::ConfigV1QuadReg& quads(uint32_t i0) const = 0;
00317 virtual uint32_t numAsicsRead() const = 0;
00318
00319 virtual uint32_t roiMask(uint32_t iq) const = 0;
00320
00321 virtual uint32_t numAsicsStored(uint32_t iq) const = 0;
00322
00323 virtual uint32_t numQuads() const = 0;
00324
00325 virtual uint32_t numSect() const = 0;
00326
00327 virtual std::vector<int> quads_shape() const = 0;
00328 };
00329
00330
00331
00332
00333
00334
00335
00336 class ConfigV4 {
00337 public:
00338 enum { TypeId = Pds::TypeId::Id_CspadConfig };
00339 enum { Version = 4 };
00340 virtual ~ConfigV4();
00341 virtual uint32_t concentratorVersion() const = 0;
00342 virtual uint32_t runDelay() const = 0;
00343 virtual uint32_t eventCode() const = 0;
00344 virtual ndarray<const CsPad::ProtectionSystemThreshold, 1> protectionThresholds() const = 0;
00345 virtual uint32_t protectionEnable() const = 0;
00346 virtual uint32_t inactiveRunMode() const = 0;
00347 virtual uint32_t activeRunMode() const = 0;
00348 virtual uint32_t tdi() const = 0;
00349 virtual uint32_t payloadSize() const = 0;
00350 virtual uint32_t badAsicMask0() const = 0;
00351 virtual uint32_t badAsicMask1() const = 0;
00352 virtual uint32_t asicMask() const = 0;
00353 virtual uint32_t quadMask() const = 0;
00354 virtual uint32_t roiMasks() const = 0;
00355 virtual const CsPad::ConfigV2QuadReg& quads(uint32_t i0) const = 0;
00356 virtual uint32_t numAsicsRead() const = 0;
00357
00358 virtual uint32_t roiMask(uint32_t iq) const = 0;
00359
00360 virtual uint32_t numAsicsStored(uint32_t iq) const = 0;
00361
00362 virtual uint32_t numQuads() const = 0;
00363
00364 virtual uint32_t numSect() const = 0;
00365
00366 virtual std::vector<int> quads_shape() const = 0;
00367 };
00368
00369
00370
00371
00372
00373
00374
00375 class ConfigV5 {
00376 public:
00377 enum { TypeId = Pds::TypeId::Id_CspadConfig };
00378 enum { Version = 5 };
00379 virtual ~ConfigV5();
00380 virtual uint32_t concentratorVersion() const = 0;
00381 virtual uint32_t runDelay() const = 0;
00382 virtual uint32_t eventCode() const = 0;
00383 virtual ndarray<const CsPad::ProtectionSystemThreshold, 1> protectionThresholds() const = 0;
00384 virtual uint32_t protectionEnable() const = 0;
00385 virtual uint32_t inactiveRunMode() const = 0;
00386 virtual uint32_t activeRunMode() const = 0;
00387 virtual uint32_t internalTriggerDelay() const = 0;
00388 virtual uint32_t tdi() const = 0;
00389 virtual uint32_t payloadSize() const = 0;
00390 virtual uint32_t badAsicMask0() const = 0;
00391 virtual uint32_t badAsicMask1() const = 0;
00392 virtual uint32_t asicMask() const = 0;
00393 virtual uint32_t quadMask() const = 0;
00394 virtual uint32_t roiMasks() const = 0;
00395 virtual const CsPad::ConfigV3QuadReg& quads(uint32_t i0) const = 0;
00396 virtual uint32_t numAsicsRead() const = 0;
00397
00398 virtual uint32_t roiMask(uint32_t iq) const = 0;
00399
00400 virtual uint32_t numAsicsStored(uint32_t iq) const = 0;
00401
00402 virtual uint32_t numQuads() const = 0;
00403
00404 virtual uint32_t numSect() const = 0;
00405
00406 virtual std::vector<int> quads_shape() const = 0;
00407 };
00408
00409
00410
00411
00412
00413
00414 class ConfigV1;
00415 class ConfigV2;
00416 class ConfigV3;
00417 class ConfigV4;
00418 class ConfigV5;
00419
00420 class ElementV1 {
00421 public:
00422 enum { Nsbtemp = 4 };
00423 virtual ~ElementV1();
00424
00425 virtual uint32_t virtual_channel() const = 0;
00426
00427 virtual uint32_t lane() const = 0;
00428 virtual uint32_t tid() const = 0;
00429 virtual uint32_t acq_count() const = 0;
00430 virtual uint32_t op_code() const = 0;
00431
00432 virtual uint32_t quad() const = 0;
00433
00434 virtual uint32_t seq_count() const = 0;
00435 virtual uint32_t ticks() const = 0;
00436 virtual uint32_t fiducials() const = 0;
00437 virtual ndarray<const uint16_t, 1> sb_temp() const = 0;
00438 virtual uint32_t frame_type() const = 0;
00439 virtual ndarray<const int16_t, 3> data() const = 0;
00440
00441
00442 virtual uint32_t sectionMask() const = 0;
00443
00444
00445 virtual float common_mode(uint32_t section) const = 0;
00446 };
00447
00448
00449
00450
00451
00452
00453 class ConfigV1;
00454 class ConfigV2;
00455 class ConfigV3;
00456 class ConfigV4;
00457 class ConfigV5;
00458
00459 class DataV1 {
00460 public:
00461 enum { TypeId = Pds::TypeId::Id_CspadElement };
00462 enum { Version = 1 };
00463 virtual ~DataV1();
00464
00465
00466 virtual const CsPad::ElementV1& quads(uint32_t i0) const = 0;
00467
00468 virtual std::vector<int> quads_shape() const = 0;
00469 };
00470
00471
00472
00473
00474
00475
00476 class ConfigV2;
00477 class ConfigV3;
00478 class ConfigV4;
00479 class ConfigV5;
00480
00481 class ElementV2 {
00482 public:
00483 enum { Nsbtemp = 4 };
00484 virtual ~ElementV2();
00485
00486 virtual uint32_t virtual_channel() const = 0;
00487
00488 virtual uint32_t lane() const = 0;
00489 virtual uint32_t tid() const = 0;
00490 virtual uint32_t acq_count() const = 0;
00491 virtual uint32_t op_code() const = 0;
00492
00493 virtual uint32_t quad() const = 0;
00494 virtual uint32_t seq_count() const = 0;
00495 virtual uint32_t ticks() const = 0;
00496 virtual uint32_t fiducials() const = 0;
00497 virtual ndarray<const uint16_t, 1> sb_temp() const = 0;
00498 virtual uint32_t frame_type() const = 0;
00499 virtual ndarray<const int16_t, 3> data() const = 0;
00500
00501
00502 virtual uint32_t sectionMask() const = 0;
00503
00504
00505 virtual float common_mode(uint32_t section) const = 0;
00506 };
00507
00508
00509
00510
00511
00512
00513 class ConfigV2;
00514 class ConfigV3;
00515 class ConfigV4;
00516 class ConfigV5;
00517
00518 class DataV2 {
00519 public:
00520 enum { TypeId = Pds::TypeId::Id_CspadElement };
00521 enum { Version = 2 };
00522 virtual ~DataV2();
00523
00524
00525 virtual const CsPad::ElementV2& quads(uint32_t i0) const = 0;
00526
00527 virtual std::vector<int> quads_shape() const = 0;
00528 };
00529 }
00530 }
00531 #endif // PSANA_CSPAD_DDL_H