From 7dce622ee3fd1281dd475c2a740de465237af462 Mon Sep 17 00:00:00 2001 From: "Heesterman, Peter J" Date: Wed, 25 Aug 2021 14:55:24 +0100 Subject: [PATCH] Corrected pixel index misunderstanding. areaDetector uses 0-based indexes, whereas the Andor API uses 1-based indexes. --- andorApp/src/andorCCD.cpp | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/andorApp/src/andorCCD.cpp b/andorApp/src/andorCCD.cpp index a9345e5..dbfa10c 100755 --- a/andorApp/src/andorCCD.cpp +++ b/andorApp/src/andorCCD.cpp @@ -901,17 +901,25 @@ void AndorCCD::setupTrackDefn(int minX, int sizeX, int binX) setIntegerParam(NDArraySizeY, mMultiTrack.DataHeight()); for (size_t TrackNo = 0; TrackNo < mMultiTrack.size(); TrackNo++) { - /* - Each track must be defined by a group of six integers. - - The top and bottom positions of the tracks. - - The left and right positions for the area of interest within each track - - The horizontal and vertical binning for each track. */ - TrackDefn[TrackNo * 6 + 0] = mMultiTrack.TrackStart(TrackNo); - TrackDefn[TrackNo * 6 + 1] = mMultiTrack.TrackEnd(TrackNo); - TrackDefn[TrackNo * 6 + 2] = minX + 1; - TrackDefn[TrackNo * 6 + 3] = minX + sizeX; - TrackDefn[TrackNo * 6 + 4] = binX; - TrackDefn[TrackNo * 6 + 5] = mMultiTrack.TrackBin(TrackNo); + /* + Each track must be defined by a group of six integers. + - The top and bottom positions of the tracks. + - The left and right positions for the area of interest within each track + - The horizontal and vertical binning for each track. */ + /* + Andor use 1-based exclusive co-ordinates. + e.g. from SDK manual: + 1 2 1 1024 1 1 + 3 4 1 1024 1 1 + 5 6 1 1024 1 1 + 7 8 1 1024 1 1 + 9 10 1 1024 1 1 */ + TrackDefn[TrackNo * 6 + 0] = mMultiTrack.TrackStart(TrackNo) + 1; + TrackDefn[TrackNo * 6 + 1] = mMultiTrack.TrackEnd(TrackNo) + 2; // CCDMultiTrack uses 0-based inlcusive co-ordinates. + TrackDefn[TrackNo * 6 + 2] = minX + 1; + TrackDefn[TrackNo * 6 + 3] = minX + sizeX; + TrackDefn[TrackNo * 6 + 4] = binX; + TrackDefn[TrackNo * 6 + 5] = mMultiTrack.TrackBin(TrackNo); } checkStatus(SetCustomTrackHBin(binX)); checkStatus(SetComplexImage(int(TrackDefn.size() / ValuesPerTrack), &TrackDefn[0]));