mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-22 17:47:59 +02:00
Quad (#39)
* making quad work in developer branch * binary added * minor changes * bug fix to set quad to 0 when more than 1 detector
This commit is contained in:
@ -514,6 +514,22 @@ int multiSlsDetector::setMaxNumberOfChannelsPerDetector(dimension d, int i) {
|
||||
return multi_shm()->maxNumberOfChannelsPerDetector[d];
|
||||
}
|
||||
|
||||
int multiSlsDetector::getQuad(int detPos) {
|
||||
int retval = detectors[0]->getQuad();
|
||||
if (retval && getNumberOfDetectors() > 1) {
|
||||
throw RuntimeError("Quad type is available only for 1 Eiger Quad Half module, but it Quad is enabled for 1st readout");
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
void multiSlsDetector::setQuad(const bool enable, int detPos) {
|
||||
if (enable && getNumberOfDetectors() > 1) {
|
||||
throw RuntimeError("Cannot set Quad type as it is available only for 1 Eiger Quad Half module.");
|
||||
}
|
||||
|
||||
detectors[0]->setQuad(enable);
|
||||
}
|
||||
|
||||
int multiSlsDetector::getDetectorOffset(dimension d, int detPos) {
|
||||
return detectors[detPos]->getDetectorOffset(d);
|
||||
}
|
||||
@ -3256,18 +3272,13 @@ int multiSlsDetector::createReceivingDataSockets(const bool destroy) {
|
||||
|
||||
void multiSlsDetector::readFrameFromReceiver() {
|
||||
|
||||
int nX = multi_shm()->numberOfDetector[X]; // to copy data in multi module
|
||||
int nY = multi_shm()->numberOfDetector[Y]; // for eiger, to reverse the data
|
||||
int nX = 0;
|
||||
int nY = 0;
|
||||
int nDetPixelsX = 0;
|
||||
int nDetPixelsY = 0;
|
||||
bool gappixelsenable = false;
|
||||
bool eiger = false;
|
||||
if (getDetectorTypeAsEnum() == EIGER) {
|
||||
eiger = true;
|
||||
nX *= 2;
|
||||
gappixelsenable = detectors[0]->enableGapPixels(-1) > 0;
|
||||
}
|
||||
if (getNumberofUDPInterfaces() == 2) {
|
||||
nY *= 2;
|
||||
}
|
||||
bool numInterfaces = getNumberofUDPInterfaces(); // cannot pick up from zmq
|
||||
|
||||
bool runningList[zmqSocket.size()], connectList[zmqSocket.size()];
|
||||
int numRunning = 0;
|
||||
@ -3344,14 +3355,29 @@ void multiSlsDetector::readFrameFromReceiver() {
|
||||
// shape
|
||||
nPixelsX = doc["shape"][0].GetUint();
|
||||
nPixelsY = doc["shape"][1].GetUint();
|
||||
|
||||
// detector shape
|
||||
nX = doc["detshape"][0].GetUint();
|
||||
nY = doc["detshape"][1].GetUint();
|
||||
nY *= numInterfaces;
|
||||
nDetPixelsX = nX * nPixelsX;
|
||||
nDetPixelsY = nY * nPixelsY;
|
||||
// det type
|
||||
eiger = (doc["detType"].GetUint() == static_cast<int>(3)) ? true : false; // to be changed to EIGER when firmware updates its header data
|
||||
// gap pixels enable
|
||||
gappixelsenable = (doc["gappixels"].GetUint() == 0) ? false : true;
|
||||
|
||||
FILE_LOG(logDEBUG1)
|
||||
<< "One Time Header Info:"
|
||||
"\n\tsize: "
|
||||
<< size << "\n\tmultisize: " << multisize
|
||||
<< "\n\tdynamicRange: " << dynamicRange
|
||||
<< "\n\tbytesPerPixel: " << bytesPerPixel
|
||||
<< "\n\tnPixelsX: " << nPixelsX << "\n\tnPixelsY: " << nPixelsY;
|
||||
<< "\n\tnPixelsX: " << nPixelsX
|
||||
<< "\n\tnPixelsY: " << nPixelsY
|
||||
<< "\n\tnX: " << nX
|
||||
<< "\n\tnY: " << nY
|
||||
<< "\n\teiger: " << eiger
|
||||
<< "\n\tgappixelsenable: " << gappixelsenable;
|
||||
}
|
||||
// each time, parse rest of header
|
||||
currentFileName = doc["fname"].GetString();
|
||||
@ -3414,20 +3440,16 @@ void multiSlsDetector::readFrameFromReceiver() {
|
||||
|
||||
// send data to callback
|
||||
if (data) {
|
||||
int nCompletePixelsX = multi_shm()->numberOfChannelInclGapPixels[X];
|
||||
int nCompletePixelsY = multi_shm()->numberOfChannelInclGapPixels[Y];
|
||||
setCurrentProgress(currentAcquisitionIndex + 1);
|
||||
// 4bit gap pixels
|
||||
if (dynamicRange == 4 && gappixelsenable) {
|
||||
int n = processImageWithGapPixels(multiframe, multigappixels);
|
||||
thisData =
|
||||
new detectorData(getCurrentProgress(), currentFileName.c_str(), nCompletePixelsX,
|
||||
nCompletePixelsY, multigappixels, n, dynamicRange, currentFileIndex);
|
||||
new detectorData(getCurrentProgress(), currentFileName.c_str(), nDetPixelsX, nDetPixelsY, multigappixels, n, dynamicRange, currentFileIndex);
|
||||
}
|
||||
// normal pixels
|
||||
else {
|
||||
thisData = new detectorData(getCurrentProgress(), currentFileName.c_str(), nCompletePixelsX,
|
||||
nCompletePixelsY, multiframe, multisize, dynamicRange,
|
||||
thisData = new detectorData(getCurrentProgress(), currentFileName.c_str(), nDetPixelsX, nDetPixelsY, multiframe, multisize, dynamicRange,
|
||||
currentFileIndex);
|
||||
}
|
||||
dataReady(thisData, currentFrameIndex,
|
||||
|
Reference in New Issue
Block a user