mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-13 05:17:13 +02:00
m3: update deserializers except for deserializer reg
This commit is contained in:
@ -157,8 +157,9 @@ class GeneralData {
|
||||
* set number of counters (mythen3)
|
||||
* @param n number of counters
|
||||
* @param dr dynamic range
|
||||
* @param tgEnable ten giga enable
|
||||
*/
|
||||
virtual void SetNumberofCounters(const int n, const int dr) {
|
||||
virtual void SetNumberofCounters(const int n, const int dr, bool tgEnable) {
|
||||
LOG(logERROR) << "SetNumberofCounters is a generic function that "
|
||||
"should be overloaded by a derived class";
|
||||
}
|
||||
@ -440,8 +441,9 @@ class Mythen3Data : public GeneralData {
|
||||
* set number of counters (mythen3)
|
||||
* @param n number of counters
|
||||
* @param dr dynamic range
|
||||
* @param tgEnable ten giga enable
|
||||
*/
|
||||
virtual void SetNumberofCounters(const int n, const int dr) {
|
||||
virtual void SetNumberofCounters(const int n, const int dr, bool tgEnable) {
|
||||
if (n < 1 || n > 3) {
|
||||
throw sls::RuntimeError("Invalid number of counters " +
|
||||
std::to_string(n));
|
||||
@ -450,7 +452,26 @@ class Mythen3Data : public GeneralData {
|
||||
nPixelsX = NCHAN * ncounters;
|
||||
LOG(logINFO) << "nPixelsX: " << nPixelsX;
|
||||
imageSize = nPixelsX * nPixelsY * ((double)dr / 8.00);
|
||||
dataSize = imageSize / packetsPerFrame;
|
||||
// 10g
|
||||
if (tgEnable) {
|
||||
if (dr == 32 && n > 1) {
|
||||
packetsPerFrame = 2;
|
||||
} else {
|
||||
packetsPerFrame = 1;
|
||||
}
|
||||
dataSize = imageSize / packetsPerFrame;
|
||||
}
|
||||
// 1g
|
||||
else {
|
||||
if (n == 3) {
|
||||
dataSize = 768;
|
||||
} else {
|
||||
dataSize = 1280;
|
||||
}
|
||||
packetsPerFrame = imageSize / dataSize;
|
||||
}
|
||||
|
||||
LOG(logINFO) << "Packets Per Frame: " << packetsPerFrame;
|
||||
packetSize = headerSizeinPacket + dataSize;
|
||||
LOG(logINFO) << "PacketSize: " << packetSize;
|
||||
}
|
||||
@ -462,6 +483,7 @@ class Mythen3Data : public GeneralData {
|
||||
*/
|
||||
void SetDynamicRange(int dr, bool tgEnable) {
|
||||
imageSize = nPixelsX * nPixelsY * ((double)dr / 8.00);
|
||||
|
||||
packetsPerFrame = tgEnable ? 2 : 20;
|
||||
dataSize = imageSize / packetsPerFrame;
|
||||
packetSize = headerSizeinPacket + dataSize;
|
||||
|
@ -1628,7 +1628,8 @@ void Implementation::setCounterMask(const uint32_t i) {
|
||||
|
||||
if (myDetectorType == MYTHEN3) {
|
||||
int ncounters = __builtin_popcount(i);
|
||||
generalData->SetNumberofCounters(ncounters, dynamicRange);
|
||||
generalData->SetNumberofCounters(ncounters, dynamicRange,
|
||||
tengigaEnable);
|
||||
// to update npixelsx, npixelsy in file writer
|
||||
for (const auto &it : dataProcessor)
|
||||
it->SetPixelDimension();
|
||||
@ -1651,7 +1652,14 @@ void Implementation::setDynamicRange(const uint32_t i) {
|
||||
dynamicRange = i;
|
||||
|
||||
if (myDetectorType == EIGER || myDetectorType == MYTHEN3) {
|
||||
generalData->SetDynamicRange(i, tengigaEnable);
|
||||
|
||||
if (myDetectorType == EIGER) {
|
||||
generalData->SetDynamicRange(i, tengigaEnable);
|
||||
} else {
|
||||
int ncounters = __builtin_popcount(counterMask);
|
||||
generalData->SetNumberofCounters(ncounters, i, tengigaEnable);
|
||||
}
|
||||
|
||||
// to update npixelsx, npixelsy in file writer
|
||||
for (const auto &it : dataProcessor)
|
||||
it->SetPixelDimension();
|
||||
@ -1693,13 +1701,14 @@ bool Implementation::getTenGigaEnable() const {
|
||||
void Implementation::setTenGigaEnable(const bool b) {
|
||||
if (tengigaEnable != b) {
|
||||
tengigaEnable = b;
|
||||
int ncounters = __builtin_popcount(counterMask);
|
||||
// side effects
|
||||
switch (myDetectorType) {
|
||||
case EIGER:
|
||||
generalData->SetTenGigaEnable(b, dynamicRange);
|
||||
break;
|
||||
case MYTHEN3:
|
||||
generalData->SetDynamicRange(dynamicRange, b);
|
||||
generalData->SetNumberofCounters(ncounters, dynamicRange, b);
|
||||
break;
|
||||
case MOENCH:
|
||||
case CHIPTESTBOARD:
|
||||
|
Reference in New Issue
Block a user