diff --git a/slsDetectorGui/include/qDrawPlot.h b/slsDetectorGui/include/qDrawPlot.h index df96214bf..b13768037 100644 --- a/slsDetectorGui/include/qDrawPlot.h +++ b/slsDetectorGui/include/qDrawPlot.h @@ -91,8 +91,10 @@ class qDrawPlot : public QWidget, private Ui::PlotObject { void Update2dPlot(); void Update1dXYRange(); void Update2dXYRange(); + void rearrangeGotthard25data(double *data); static const int NUM_PEDESTAL_FRAMES = 20; + static const int NUM_GOTTHARD25_CHANS = 2560; sls::Detector *det; slsDetectorDefs::detectorType detType; @@ -164,4 +166,5 @@ class qDrawPlot : public QWidget, private Ui::PlotObject { uint32_t pixelMask{0}; uint32_t gainMask{0}; int gainOffset{0}; + bool gotthard25; }; diff --git a/slsDetectorGui/src/qDrawPlot.cpp b/slsDetectorGui/src/qDrawPlot.cpp index 40edc1538..54a4e129b 100644 --- a/slsDetectorGui/src/qDrawPlot.cpp +++ b/slsDetectorGui/src/qDrawPlot.cpp @@ -80,6 +80,10 @@ void qDrawPlot::SetupWidgetWindow() { fileSaveName = "Image"; } + gotthard25 = ((detType == slsDetectorDefs::GOTTHARD2 || + detType == slsDetectorDefs::GOTTHARD) && + det->size() == 2); + SetupPlots(); SetDataCallBack(true); det->registerAcquisitionFinishedCallback(&(GetAcquisitionFinishedCallBack), @@ -807,6 +811,11 @@ void qDrawPlot::GetData(detectorData *data, uint64_t frameIndex, isGainDataExtracted = false; } + // gotthard25um rearranging + if (gotthard25) { + rearrangeGotthard25data(rawData); + } + // title and frame index titles plotTitle = plotTitlePrefix + QString(data->fileName.c_str()).section('/', -1); @@ -1130,6 +1139,19 @@ void qDrawPlot::toDoublePixelData(double *dest, char *source, int size, } } +void qDrawPlot::rearrangeGotthard25data(double *data) { + const int nChans = NUM_GOTTHARD25_CHANS; + double temp[nChans] = {0.0}; + int nChansMod = nChans / 2; + for (int i = 0; i != nChansMod; ++i) { + // master module (interleave from front) + temp[i * 2] = data[i]; + // slave module (reverse interleave) + temp[(nChansMod - 1 - i) * 2 + 1] = data[nChansMod + i]; + } + memcpy(data, temp, nChans * sizeof(double)); +} + void qDrawPlot::UpdatePlot() { std::lock_guard lock(mPlots); LOG(logDEBUG) << "Update Plot";