Readoutflags (#61)

* WIP

* eiger binary back wih versioning

* fixed readout flag in ctbgui, added speedLevel enum

* ctbgui: fixed a print out error

* ctb readout bug fix

* WIP

* WIP

* WIP
This commit is contained in:
Dhanya Thattil
2019-09-02 19:27:27 +02:00
committed by GitHub
parent 221bb65c0e
commit 5bcde789ac
39 changed files with 819 additions and 684 deletions

View File

@ -134,7 +134,6 @@ class BinaryFileStatic {
"Period (ns) : %lld\n"
"Gap Pixels Enable : %d\n"
"Quad Enable : %d\n"
"Parallel Flag : %d\n"
"Analog Flag : %d\n"
"Digital Flag : %d\n"
"ADC Mask : %d\n"
@ -174,7 +173,6 @@ class BinaryFileStatic {
(long long int)attr.periodNs,
attr.gapPixelsEnable,
attr.quadEnable,
attr.parallelFlag,
attr.analogFlag,
attr.digitalFlag,
attr.adcmask,

View File

@ -200,7 +200,7 @@ public:
* @param f readout flags
* @returns analog data bytes
*/
virtual int setImageSize(uint32_t a, uint64_t as, uint64_t ds, bool t, slsDetectorDefs::readOutFlags f = slsDetectorDefs::GET_READOUT_FLAGS) {
virtual int setImageSize(uint32_t a, uint64_t as, uint64_t ds, bool t, slsDetectorDefs::readoutMode) {
FILE_LOG(logERROR) << "setImageSize is a generic function that should be overloaded by a derived class";
return 0;
};
@ -576,37 +576,36 @@ public:
* @param f readout flags
* @returns analog data bytes
*/
int setImageSize(uint32_t a, uint64_t as, uint64_t ds, bool t, slsDetectorDefs::readOutFlags f = slsDetectorDefs::GET_READOUT_FLAGS) {
int setImageSize(uint32_t a, uint64_t as, uint64_t ds, bool t, slsDetectorDefs::readoutMode f) {
int nachans = 0, ndchans = 0;
int adatabytes = 0, ddatabytes = 0;
if (f != slsDetectorDefs::GET_READOUT_FLAGS) {
// analog channels (normal, analog/digital readout)
if (f == slsDetectorDefs::NORMAL_READOUT ||
f & slsDetectorDefs::ANALOG_AND_DIGITAL) {
if (a == BIT32_MASK) {
nachans = 32;
} else {
for (int ich = 0; ich < 32; ++ich) {
if (a & (1 << ich))
++nachans;
}
}
adatabytes = nachans * NUM_BYTES_PER_ANALOG_CHANNEL * as;
FILE_LOG(logDEBUG1) << " Number of Analog Channels:" << nachans
<< " Databytes: " << adatabytes;
}
// digital channels
if (f & slsDetectorDefs::DIGITAL_ONLY ||
f & slsDetectorDefs::ANALOG_AND_DIGITAL) {
ndchans = NCHAN_DIGITAL;
ddatabytes = (sizeof(uint64_t) * ds);
FILE_LOG(logDEBUG1) << "Number of Digital Channels:" << ndchans
<< " Databytes: " << ddatabytes;
}
FILE_LOG(logDEBUG1) << "Total Number of Channels:" << nachans + ndchans
<< " Databytes: " << adatabytes + ddatabytes;
}
// analog channels (normal, analog/digital readout)
if (f == slsDetectorDefs::ANALOG_ONLY ||
f == slsDetectorDefs::ANALOG_AND_DIGITAL) {
if (a == BIT32_MASK) {
nachans = 32;
} else {
for (int ich = 0; ich < 32; ++ich) {
if (a & (1 << ich))
++nachans;
}
}
adatabytes = nachans * NUM_BYTES_PER_ANALOG_CHANNEL * as;
FILE_LOG(logDEBUG1) << " Number of Analog Channels:" << nachans
<< " Databytes: " << adatabytes;
}
// digital channels
if (f == slsDetectorDefs::DIGITAL_ONLY ||
f == slsDetectorDefs::ANALOG_AND_DIGITAL) {
ndchans = NCHAN_DIGITAL;
ddatabytes = (sizeof(uint64_t) * ds);
FILE_LOG(logDEBUG1) << "Number of Digital Channels:" << ndchans
<< " Databytes: " << ddatabytes;
}
FILE_LOG(logDEBUG1) << "Total Number of Channels:" << nachans + ndchans
<< " Databytes: " << adatabytes + ddatabytes;
nPixelsX = nachans + ndchans;
nPixelsY = 1;
// 10G
@ -692,7 +691,7 @@ public:
* @param f readout flags
* @returns analog data bytes
*/
int setImageSize(uint32_t a, uint64_t as, uint64_t ds, bool t, slsDetectorDefs::readOutFlags f = slsDetectorDefs::GET_READOUT_FLAGS) {
int setImageSize(uint32_t a, uint64_t as, uint64_t ds, bool t, slsDetectorDefs::readoutMode) {
int nachans = 0;
int adatabytes = 0;

View File

@ -407,10 +407,6 @@ public:
dataset = group5.createDataSet ( "quad enable", PredType::NATIVE_INT, dataspace );
dataset.write ( &(attr.quadEnable), PredType::NATIVE_INT);
//Parallel Flag
dataset = group5.createDataSet ( "parallel flag", PredType::NATIVE_INT, dataspace );
dataset.write ( &(attr.gapPixelsEnable), PredType::NATIVE_INT);
//Analog Flag
dataset = group5.createDataSet ( "analog flag", PredType::NATIVE_INT, dataspace );
dataset.write ( &(attr.quadEnable), PredType::NATIVE_INT);

View File

@ -65,7 +65,6 @@ struct masterAttributes {
uint64_t periodNs;
uint32_t gapPixelsEnable;
uint32_t quadEnable;
uint32_t parallelFlag;
uint32_t analogFlag;
uint32_t digitalFlag;
uint32_t adcmask;

View File

@ -88,10 +88,10 @@ class slsReceiverImplementation : private virtual slsDetectorDefs {
int getReadNLines() const;
/**
* Get readout flags (Eiger, chiptestboard, moench)
* @return readout flags
* Get readout mode (chiptestboard)
* @return readout mode
*/
readOutFlags getReadOutFlags() const;
readoutMode getReadoutMode() const;
//***file parameters***
/**
@ -417,11 +417,11 @@ class slsReceiverImplementation : private virtual slsDetectorDefs {
void setReadNLines(const int value);
/**
* Set readout flags (eiger, chiptestboard, moench)
* @param f readout flag
* Set readout mode (chiptestboard)
* @param f readout mode
* @return OK or FAIL
*/
int setReadOutFlags(const readOutFlags f);
int setReadoutMode(const readoutMode f);
//***file parameters***
/**
@ -902,8 +902,8 @@ class slsReceiverImplementation : private virtual slsDetectorDefs {
bool quadEnable;
/** num lines readout */
int numLinesReadout;
/** readout flags*/
readOutFlags readoutFlags;
/** readout mode*/
readoutMode readoutType;
//*** receiver parameters ***
/** Number of Threads */

View File

@ -279,8 +279,8 @@ class slsReceiverTCPIPInterface : private virtual slsDetectorDefs {
/** set deactivated receiver padding enable */
int set_deactivated_padding_enable(sls::ServerInterface2 &socket);
/** set readout flags */
int set_readout_flags(sls::ServerInterface2 &socket);
/** set readout mode */
int set_readout_mode(sls::ServerInterface2 &socket);
/** set adc mask */
int set_adc_mask(sls::ServerInterface2 &socket);

View File

@ -71,7 +71,7 @@ void slsReceiverImplementation::InitializeMembers() {
gapPixelsEnable = false;
quadEnable = false;
numLinesReadout = MAX_EIGER_ROWS_PER_READOUT;
readoutFlags = GET_READOUT_FLAGS;
readoutType = ANALOG_ONLY;
//*** receiver parameters ***
numThreads = 1;
@ -168,10 +168,10 @@ int slsReceiverImplementation::getReadNLines() const {
return numLinesReadout;
}
slsDetectorDefs::readOutFlags
slsReceiverImplementation::getReadOutFlags() const {
slsDetectorDefs::readoutMode
slsReceiverImplementation::getReadoutMode() const {
FILE_LOG(logDEBUG3) << __SHORT_AT__ << " called";
return readoutFlags;
return readoutType;
}
/***file parameters***/
@ -546,48 +546,23 @@ void slsReceiverImplementation::setReadNLines(const int value) {
FILE_LOG(logINFO) << "Number of Lines to readout: " << numLinesReadout;
}
int slsReceiverImplementation::setReadOutFlags(const readOutFlags f) {
if (readoutFlags != f) {
readoutFlags = f;
int slsReceiverImplementation::setReadoutMode(const readoutMode f) {
if (readoutType != f) {
readoutType = f;
// side effects
if (myDetectorType == CHIPTESTBOARD) {
ctbAnalogDataBytes = generalData->setImageSize(
adcEnableMask, numberOfAnalogSamples, numberOfDigitalSamples,
tengigaEnable, readoutFlags);
for (const auto &it : dataProcessor)
it->SetPixelDimension();
if (SetupFifoStructure() == FAIL)
return FAIL;
}
ctbAnalogDataBytes = generalData->setImageSize(
adcEnableMask, numberOfAnalogSamples, numberOfDigitalSamples,
tengigaEnable, readoutType);
for (const auto &it : dataProcessor)
it->SetPixelDimension();
if (SetupFifoStructure() == FAIL)
return FAIL;
}
std::string flag;
if (f == NORMAL_READOUT)
flag = "normal(analog, no digital)";
else if (f & STORE_IN_RAM)
flag.append("storeinram ");
if (f & TOT_MODE)
flag.append("tot ");
if (f & CONTINOUS_RO)
flag.append("continous ");
if (f & PARALLEL)
flag.append("parallel ");
if (f & NONPARALLEL)
flag.append("nonparallel ");
if (f & DIGITAL_ONLY)
flag.append("digital ");
if (f & ANALOG_AND_DIGITAL)
flag.append("analog_digital ");
if (f & SHOW_OVERFLOW)
flag.append("overflow ");
if (f & NOOVERFLOW)
flag.append("nooverflow ");
FILE_LOG(logINFO) << "ReadoutFlags: " << flag;
if (myDetectorType == CHIPTESTBOARD) {
FILE_LOG(logINFO) << "Packets per Frame: "
FILE_LOG(logINFO) << "Readout Mode: " << getReadoutModeType(f);
FILE_LOG(logINFO) << "Packets per Frame: "
<< (generalData->packetsPerFrame);
}
return OK;
}
@ -874,19 +849,9 @@ int slsReceiverImplementation::setADCEnableMask(uint32_t mask) {
if (adcEnableMask != mask) {
adcEnableMask = mask;
switch (myDetectorType) {
case MOENCH:
generalData->setImageSize(mask, numberOfAnalogSamples,
numberOfDigitalSamples, tengigaEnable);
break;
case CHIPTESTBOARD:
ctbAnalogDataBytes = generalData->setImageSize(
mask, numberOfAnalogSamples, numberOfDigitalSamples,
tengigaEnable, readoutFlags);
break;
default:
break;
}
ctbAnalogDataBytes = generalData->setImageSize(
mask, numberOfAnalogSamples, numberOfDigitalSamples,
tengigaEnable, readoutType);
for (const auto &it : dataProcessor)
it->SetPixelDimension();
@ -1018,14 +983,10 @@ int slsReceiverImplementation::setNumberofAnalogSamples(const uint64_t i) {
if (numberOfAnalogSamples != i) {
numberOfAnalogSamples = i;
if (myDetectorType == MOENCH) {
generalData->setImageSize(adcEnableMask, numberOfAnalogSamples,
numberOfDigitalSamples, tengigaEnable);
} else if (myDetectorType == CHIPTESTBOARD) {
ctbAnalogDataBytes = generalData->setImageSize(
adcEnableMask, numberOfAnalogSamples, numberOfDigitalSamples,
tengigaEnable, readoutFlags);
}
ctbAnalogDataBytes = generalData->setImageSize(
adcEnableMask, numberOfAnalogSamples, numberOfDigitalSamples,
tengigaEnable, readoutType);
for (const auto &it : dataProcessor)
it->SetPixelDimension();
if (SetupFifoStructure() == FAIL)
@ -1041,14 +1002,10 @@ int slsReceiverImplementation::setNumberofDigitalSamples(const uint64_t i) {
if (numberOfDigitalSamples != i) {
numberOfDigitalSamples = i;
if (myDetectorType == MOENCH) {
generalData->setImageSize(adcEnableMask, numberOfAnalogSamples,
numberOfDigitalSamples, tengigaEnable);
} else if (myDetectorType == CHIPTESTBOARD) {
ctbAnalogDataBytes = generalData->setImageSize(
adcEnableMask, numberOfAnalogSamples, numberOfDigitalSamples,
tengigaEnable, readoutFlags);
}
ctbAnalogDataBytes = generalData->setImageSize(
adcEnableMask, numberOfAnalogSamples, numberOfDigitalSamples,
tengigaEnable, readoutType);
for (const auto &it : dataProcessor)
it->SetPixelDimension();
if (SetupFifoStructure() == FAIL)
@ -1087,13 +1044,10 @@ int slsReceiverImplementation::setTenGigaEnable(const bool b) {
generalData->SetGapPixelsEnable(gapPixelsEnable, dynamicRange, quadEnable);
break;
case MOENCH:
generalData->setImageSize(adcEnableMask, numberOfAnalogSamples,
numberOfDigitalSamples, tengigaEnable);
break;
case CHIPTESTBOARD:
ctbAnalogDataBytes = generalData->setImageSize(
adcEnableMask, numberOfAnalogSamples, numberOfDigitalSamples,
tengigaEnable, readoutFlags);
tengigaEnable, readoutType);
break;
default:
break;
@ -1653,9 +1607,8 @@ int slsReceiverImplementation::SetupWriter() {
attr.periodNs = acquisitionPeriod;
attr.gapPixelsEnable = gapPixelsEnable;
attr.quadEnable = quadEnable;
attr.parallelFlag = (readoutFlags & PARALLEL) ? 1 : 0;
attr.analogFlag = (readoutFlags == NORMAL_READOUT || readoutFlags & ANALOG_AND_DIGITAL) ? 1 : 0;
attr.digitalFlag = (readoutFlags & DIGITAL_ONLY || readoutFlags & ANALOG_AND_DIGITAL) ? 1 : 0;
attr.analogFlag = (readoutType == ANALOG_ONLY || readoutType == ANALOG_AND_DIGITAL) ? 1 : 0;
attr.digitalFlag = (readoutType == DIGITAL_ONLY || readoutType == ANALOG_AND_DIGITAL) ? 1 : 0;
attr.adcmask = adcEnableMask;
attr.dbitoffset = ctbDbitOffset;
attr.dbitlist = 0;

View File

@ -195,7 +195,7 @@ int slsReceiverTCPIPInterface::function_table(){
flist[F_RECEIVER_DISCARD_POLICY] = &slsReceiverTCPIPInterface::set_discard_policy;
flist[F_RECEIVER_PADDING_ENABLE] = &slsReceiverTCPIPInterface::set_padding_enable;
flist[F_RECEIVER_DEACTIVATED_PADDING_ENABLE] = &slsReceiverTCPIPInterface::set_deactivated_padding_enable;
flist[F_RECEIVER_SET_READOUT_FLAGS] = &slsReceiverTCPIPInterface::set_readout_flags;
flist[F_RECEIVER_SET_READOUT_MODE] = &slsReceiverTCPIPInterface::set_readout_mode;
flist[F_RECEIVER_SET_ADC_MASK] = &slsReceiverTCPIPInterface::set_adc_mask;
flist[F_SET_RECEIVER_DBIT_LIST] = &slsReceiverTCPIPInterface::set_dbit_list;
flist[F_GET_RECEIVER_DBIT_LIST] = &slsReceiverTCPIPInterface::get_dbit_list;
@ -1230,22 +1230,21 @@ int slsReceiverTCPIPInterface::set_deactivated_padding_enable(
return socket.sendResult(retval);
}
int slsReceiverTCPIPInterface::set_readout_flags(Interface &socket) {
auto arg = socket.Receive<readOutFlags>();
int slsReceiverTCPIPInterface::set_readout_mode(Interface &socket) {
auto arg = socket.Receive<readoutMode>();
if (myDetectorType == JUNGFRAU || myDetectorType == GOTTHARD ||
myDetectorType == MOENCH)
if (myDetectorType != CHIPTESTBOARD)
functionNotImplemented();
if (arg >= 0) {
VerifyIdle(socket);
FILE_LOG(logDEBUG1) << "Setting readout flag: " << arg;
impl()->setReadOutFlags(arg);
FILE_LOG(logDEBUG1) << "Setting readout mode: " << arg;
impl()->setReadoutMode(arg);
}
auto retval = impl()->getReadOutFlags();
validate(static_cast<int>(arg), static_cast<int>(retval & arg),
"set readout flags", HEX);
FILE_LOG(logDEBUG1) << "Readout flags: " << retval;
auto retval = impl()->getReadoutMode();
validate(static_cast<int>(arg), static_cast<int>(retval),
"set readout mode", DEC);
FILE_LOG(logDEBUG1) << "Readout mode: " << retval;
return socket.sendResult(retval);
}