diff --git a/slsDetectorCalibration/dataStructures/jungfrauLGADStrixelsData_new.h b/slsDetectorCalibration/dataStructures/jungfrauLGADStrixelsData_new.h index 531f4a092..30aa10cd6 100644 --- a/slsDetectorCalibration/dataStructures/jungfrauLGADStrixelsData_new.h +++ b/slsDetectorCalibration/dataStructures/jungfrauLGADStrixelsData_new.h @@ -9,7 +9,7 @@ #endif #include "slsDetectorData.h" -//#define VERSION_V2 +// #define VERSION_V2 /** @short structure for a Detector Packet or Image Header @li frameNumber is the frame number @@ -29,64 +29,66 @@ */ namespace strixelSingleChip { - constexpr int nc_rawimg = 1024; //for full images //256; - constexpr int nr_rawimg = 512; - constexpr int nr_chip = 256; - constexpr int gr = 9; +constexpr int nc_rawimg = 1024; // for full images //256; +constexpr int nr_rawimg = 512; +constexpr int nr_chip = 256; +constexpr int gr = 9; - //Group 1: 25um pitch, groups of 3, 1 column of square pixels - constexpr int g1_ncols{ (nc_rawimg-(2*gr)-1)/3 }; //79 - constexpr int g1_nrows{ ( (nr_chip/4)-gr )*3 }; //165 - - //Group 2: 15um pitch, groups of 5, 3 columns of square pixels - constexpr int g2_ncols{ (nc_rawimg-(2*gr)-3)/5 }; //47 - constexpr int g2_nrows{ (nr_chip/4)*5 }; //320 - - //Group 3: 18.75um pitch, groups of 4, 2 columns of square pixels (double the size of the other groups) - constexpr int g3_ncols{ (nc_rawimg-(2*gr)-2)/4 }; //59 - constexpr int g3_nrows{ ( ((nr_chip/4)*2)-gr )*4 }; //476 +// Group 1: 25um pitch, groups of 3, 1 column of square pixels +constexpr int g1_ncols{(nc_rawimg - (2 * gr) - 1) / 3}; // 79 +constexpr int g1_nrows{((nr_chip / 4) - gr) * 3}; // 165 - constexpr int nc_strixel = 2*gr + 1 + g1_ncols; //group 1 is the "longest" group in x and has one extra square pixel - constexpr int nr_strixel = 2*gr + g1_nrows + g2_nrows + g3_nrows; +// Group 2: 15um pitch, groups of 5, 3 columns of square pixels +constexpr int g2_ncols{(nc_rawimg - (2 * gr) - 3) / 5}; // 47 +constexpr int g2_nrows{(nr_chip / 4) * 5}; // 320 - //chip and group boundaries in ASIC coordinates (pixels at both bounds are included in the group) - //y does NOT take into account the shifts for M408! - constexpr int c1g1_xstart = 256 + gr + 1; //266 - constexpr int c1g2_xstart = 256 + gr + 3; //268 - constexpr int c1g3_xstart = 256 + gr + 2; //267 - constexpr int c1_xend = 255 + 256 - gr; //502 - constexpr int c1g1_ystart = gr; // 9 - constexpr int c1g1_yend = 63; // 63 - constexpr int c1g2_ystart = c1g1_yend + 1; // 64 - constexpr int c1g2_yend = c1g1_yend + 64; //127 - constexpr int c1g3_ystart = c1g2_yend + 1; //128 - constexpr int c1g3_yend = c1g2_yend + 2*64 - gr; //246 +// Group 3: 18.75um pitch, groups of 4, 2 columns of square pixels (double the +// size of the other groups) +constexpr int g3_ncols{(nc_rawimg - (2 * gr) - 2) / 4}; // 59 +constexpr int g3_nrows{(((nr_chip / 4) * 2) - gr) * 4}; // 476 - constexpr int c6_xstart = 256 + 256 + gr; //521 - constexpr int c6g1_xend = 255 + 2*256 - gr - 1; //757 - constexpr int c6g2_xend = 256 + 2*256 - gr - 3; //755 - constexpr int c6g3_xend = 256 + 2*256 - gr - 2; //756 - constexpr int c6g3_ystart = 256 + gr; //265 - constexpr int c6g3_yend = 255 + 2*64; //383 - constexpr int c6g2_ystart = c6g3_yend + 1; //384 - constexpr int c6g2_yend = c6g3_yend + 64; //447 - constexpr int c6g1_ystart = c6g2_yend + 1; //448 - constexpr int c6g1_yend = c6g2_yend + 64 - gr; //502 +constexpr int nc_strixel = + 2 * gr + 1 + g1_ncols; // group 1 is the "longest" group in x and has one + // extra square pixel +constexpr int nr_strixel = 2 * gr + g1_nrows + g2_nrows + g3_nrows; - //y shift due to faulty bonding (relevant for M408) - constexpr int bond_shift_y = 1; //CHANGE IF YOU CHANGE MODULE! +// chip and group boundaries in ASIC coordinates (pixels at both bounds are +// included in the group) y does NOT take into account the shifts for M408! +constexpr int c1g1_xstart = 256 + gr + 1; // 266 +constexpr int c1g2_xstart = 256 + gr + 3; // 268 +constexpr int c1g3_xstart = 256 + gr + 2; // 267 +constexpr int c1_xend = 255 + 256 - gr; // 502 +constexpr int c1g1_ystart = gr; // 9 +constexpr int c1g1_yend = 63; // 63 +constexpr int c1g2_ystart = c1g1_yend + 1; // 64 +constexpr int c1g2_yend = c1g1_yend + 64; // 127 +constexpr int c1g3_ystart = c1g2_yend + 1; // 128 +constexpr int c1g3_yend = c1g2_yend + 2 * 64 - gr; // 246 -} +constexpr int c6_xstart = 256 + 256 + gr; // 521 +constexpr int c6g1_xend = 255 + 2 * 256 - gr - 1; // 757 +constexpr int c6g2_xend = 256 + 2 * 256 - gr - 3; // 755 +constexpr int c6g3_xend = 256 + 2 * 256 - gr - 2; // 756 +constexpr int c6g3_ystart = 256 + gr; // 265 +constexpr int c6g3_yend = 255 + 2 * 64; // 383 +constexpr int c6g2_ystart = c6g3_yend + 1; // 384 +constexpr int c6g2_yend = c6g3_yend + 64; // 447 +constexpr int c6g1_ystart = c6g2_yend + 1; // 448 +constexpr int c6g1_yend = c6g2_yend + 64 - gr; // 502 + +// y shift due to faulty bonding (relevant for M408) +constexpr int bond_shift_y = 1; // CHANGE IF YOU CHANGE MODULE! + +} // namespace strixelSingleChip typedef struct { uint64_t bunchNumber; /**< is the frame number */ uint64_t pre; /**< something */ -} jf_header; //Aldo's header +} jf_header; // Aldo's header +using namespace strixelSingleChip; -using namespace strixelSingleChip; - class jungfrauLGADStrixelsData : public slsDetectorData { private: @@ -96,209 +98,235 @@ class jungfrauLGADStrixelsData : public slsDetectorData { int chip_y0; int x0, y0, x1, y1, shifty; - int getMultiplicator( const int group ) { - int multiplicator; - switch (group) { - default: - case 1: - multiplicator = 3; - break; - case 2: - multiplicator = 5; - break; - case 3: - multiplicator = 4; - break; - } - return multiplicator; + int getMultiplicator(const int group) { + int multiplicator; + switch (group) { + default: + case 1: + multiplicator = 3; + break; + case 2: + multiplicator = 5; + break; + case 3: + multiplicator = 4; + break; + } + return multiplicator; } - void setMappingShifts( const int group ) { + void setMappingShifts(const int group) { - if ( mchip == 1 ) { - - chip_x0=256; - chip_y0=bond_shift_y; //because of bump bonding issues(+1 row) on M408 - - switch (group) { - default: - case 1: - x0 = 10+chip_x0; //9 gr + 1 sq pixel - x1 = 246+chip_x0; - y0 = 9+chip_y0; - y1 = 63+chip_y0; - shifty = 0; - break; - case 2: - x0 = 12+chip_x0; - x1 = 247+chip_x0; - y0 = 64+chip_y0; - y1 = 127+chip_y0; - shifty = g1_nrows; - break; - case 3: - x0 = 11+chip_x0; - x1 = 247+chip_x0; - y0 = 128+chip_y0; - y1 = 246+chip_y0; - shifty = g2_nrows+g1_nrows; - break; - } - } + if (mchip == 1) { - if ( mchip == 6 ) { + chip_x0 = 256; + chip_y0 = + bond_shift_y; // because of bump bonding issues(+1 row) on M408 - chip_x0=512; - chip_y0=256-bond_shift_y; //should be 256 but is 255 because of bump bonding issues (+1 row) on M408 - - switch (group) { - default: - case 1: + switch (group) { + default: + case 1: + x0 = 10 + chip_x0; // 9 gr + 1 sq pixel + x1 = 246 + chip_x0; + y0 = 9 + chip_y0; + y1 = 63 + chip_y0; + shifty = 0; + break; + case 2: + x0 = 12 + chip_x0; + x1 = 247 + chip_x0; + y0 = 64 + chip_y0; + y1 = 127 + chip_y0; + shifty = g1_nrows; + break; + case 3: + x0 = 11 + chip_x0; + x1 = 247 + chip_x0; + y0 = 128 + chip_y0; + y1 = 246 + chip_y0; + shifty = g2_nrows + g1_nrows; + break; + } + } - x0 = 9+chip_x0; //9 gr sq pixel - x1 = 246+chip_x0; - y0 = 192+chip_y0; - y1 = 244+chip_y0; + if (mchip == 6) { - shifty = g1_nrows+2*g2_nrows+2*g3_nrows; - break; + chip_x0 = 512; + chip_y0 = + 256 - bond_shift_y; // should be 256 but is 255 because of bump + // bonding issues (+1 row) on M408 - case 2: - - x0 = 9+chip_x0; - x1 = 244+chip_x0; - y0 = 128+chip_y0; - y1 = 191+chip_y0; - + switch (group) { + default: + case 1: - shifty = g1_nrows+g2_nrows+2*g3_nrows;; - break; - case 3: + x0 = 9 + chip_x0; // 9 gr sq pixel + x1 = 246 + chip_x0; + y0 = 192 + chip_y0; + y1 = 244 + chip_y0; - x0 = 9+chip_x0; - x1 = 244+chip_x0; - y0 = 9+chip_y0; - y1 = 127+chip_y0; - shifty =g1_nrows+g2_nrows+g3_nrows; + shifty = g1_nrows + 2 * g2_nrows + 2 * g3_nrows; + break; - break; - } - } + case 2: + x0 = 9 + chip_x0; + x1 = 244 + chip_x0; + y0 = 128 + chip_y0; + y1 = 191 + chip_y0; + + shifty = g1_nrows + g2_nrows + 2 * g3_nrows; + ; + break; + case 3: + + x0 = 9 + chip_x0; + x1 = 244 + chip_x0; + y0 = 9 + chip_y0; + y1 = 127 + chip_y0; + shifty = g1_nrows + g2_nrows + g3_nrows; + + break; + } + } } - void remapGroup( const int group ) { - int multiplicator = getMultiplicator(group); - int shiftx; - int ix, iy=0; + void remapGroup(const int group) { + int multiplicator = getMultiplicator(group); + int shiftx; + int ix, iy = 0; - setMappingShifts(group); - - //remapping loop - for ( int ipy=y0; ipy<=y1;ipy++) { - for ( int ipx=x0; ipx<=x1; ipx++ ) { + setMappingShifts(group); - ix = int ((ipx-x0)/multiplicator); - for ( int m=0; mymax) std::cout << "Error ymax - normal for G3 since ROI only 64 row" << std::endl; - if (x0xmax) std::cout << "Error xmax" << std::endl; + // make sure loop bounds are correct + if (y0 < ymin) + std::cout << "Error ymin" << std::endl; + if (y1 > ymax) + std::cout << "Error ymax - normal for G3 since ROI only 64 row" + << std::endl; + if (x0 < xmin) + std::cout << "Error xmin" << std::endl; + if (x1 > xmax) + std::cout << "Error xmax" << std::endl; - //remapping loop - int ix, iy=0; - for ( int ipy=y0; ipy<=y1; ++ipy) { - for ( int ipx=x0; ipx<=x1; ++ipx ) { + // remapping loop + int ix, iy = 0; + for (int ipy = y0; ipy <= y1; ++ipy) { + for (int ipx = x0; ipx <= x1; ++ipx) { - ix = int ((ipx-x0/*-xmin*/)/multiplicator); - for ( int m=0; m( /*nc_strixel*/g1_ncols, /*nr_strixel*/ 2*g1_nrows+2*g2_nrows+2*g3_nrows, - g1_ncols* (2*g1_nrows+2*g2_nrows+2*g3_nrows) * 2 + sizeof(header) ) { - std::cout << "Jungfrau strixels 2X single chip with full module data " << std::endl; + jungfrauLGADStrixelsData(uint16_t xmin = 0, uint16_t xmax = 0, + uint16_t ymin = 0, uint16_t ymax = 0) + : slsDetectorData( + /*nc_strixel*/ g1_ncols, + /*nr_strixel*/ 2 * g1_nrows + 2 * g2_nrows + 2 * g3_nrows, + g1_ncols * (2 * g1_nrows + 2 * g2_nrows + 2 * g3_nrows) * 2 + + sizeof(header)) { + std::cout << "Jungfrau strixels 2X single chip with full module data " + << std::endl; + // Fill all strixels with dummy values + for (int ix = 0; ix != g1_ncols; ++ix) { + for (int iy = 0; iy != 2 * g1_nrows + 2 * g2_nrows + 2 * g3_nrows; + ++iy) { + dataMap[iy][ix] = sizeof(header); + } + } - - //Fill all strixels with dummy values - for (int ix = 0; ix != g1_ncols; ++ix) { - for (int iy = 0; iy != 2*g1_nrows+2*g2_nrows+2*g3_nrows; ++iy) { - dataMap[iy][ix] = sizeof(header); + std::cout << "sizeofheader = " << sizeof(header) << std::endl; + std::cout << "Jungfrau strixels 2X single chip with full module data " + << std::endl; - } - } + if (xmin < xmax && ymin < ymax) { - std::cout << "sizeofheader = "< { */ - int getFrameNumber(char *buff) { -#ifdef ALDO //VH - return ((header *)buff)->bunchNumber; //VH -#else //VH - return ((header *)buff)->detHeader.frameNumber; -#endif //VH +#ifdef ALDO // VH + return ((header *)buff)->bunchNumber; // VH +#else // VH + return ((header *)buff)->detHeader.frameNumber; +#endif // VH }; /** @@ -342,17 +369,16 @@ class jungfrauLGADStrixelsData : public slsDetectorData { */ int getPacketNumber(char *buff) { -#ifdef ALDO //VH - //uint32_t fakePacketNumber = 1000; - //return fakePacketNumber; //VH //TODO: Keep in mind in case of bugs! //This is definitely bad! - return 1000; -#else //VH - return ((header *)buff)->detHeader.packetNumber; -#endif //VH +#ifdef ALDO // VH + // uint32_t fakePacketNumber = 1000; + // return fakePacketNumber; //VH //TODO: Keep in mind in case of bugs! + // //This is definitely bad! + return 1000; +#else // VH + return ((header *)buff)->detHeader.packetNumber; +#endif // VH }; - - char *readNextFrame(std::ifstream &filebin) { int ff = -1, np = -1; return readNextFrame(filebin, ff, np); @@ -373,20 +399,20 @@ class jungfrauLGADStrixelsData : public slsDetectorData { return data; }; - char *readNextFrame(std::ifstream &filebin, int &ff, int &np,char *data) { + char *readNextFrame(std::ifstream &filebin, int &ff, int &np, char *data) { char *retval = 0; int nd; int fnum = -1; np = 0; int pn; - //std::cout << dataSize << std::endl; + // std::cout << dataSize << std::endl; if (ff >= 0) fnum = ff; if (filebin.is_open()) { if (filebin.read(data, dataSize)) { - std::cout << "*"; + std::cout << "*"; ff = getFrameNumber(data); np = getPacketNumber(data); return data; @@ -396,12 +422,18 @@ class jungfrauLGADStrixelsData : public slsDetectorData { }; /* Loops over a memory slot until a complete frame is found (i.e. all */ - /* packets 0 to nPackets, same frame number). purely virtual func \param */ - /* data pointer to the memory to be analyzed \param ndata reference to the */ - /* amount of data found for the frame, in case the frame is incomplete at */ - /* the end of the memory slot \param dsize size of the memory slot to be */ - /* analyzed \returns pointer to the beginning of the last good frame (might */ - /* be incomplete if ndata smaller than dataSize), or NULL if no frame is */ + /* packets 0 to nPackets, same frame number). purely virtual func \param + */ + /* data pointer to the memory to be analyzed \param ndata reference to + * the */ + /* amount of data found for the frame, in case the frame is incomplete at + */ + /* the end of the memory slot \param dsize size of the memory slot to be + */ + /* analyzed \returns pointer to the beginning of the last good frame + * (might */ + /* be incomplete if ndata smaller than dataSize), or NULL if no frame is + */ /* found */ /* *\/ */ diff --git a/slsDetectorCalibration/jungfrauExecutables/jungfrauRawDataProcess.cpp b/slsDetectorCalibration/jungfrauExecutables/jungfrauRawDataProcess.cpp index ddc44f686..c97ee702b 100644 --- a/slsDetectorCalibration/jungfrauExecutables/jungfrauRawDataProcess.cpp +++ b/slsDetectorCalibration/jungfrauExecutables/jungfrauRawDataProcess.cpp @@ -1,6 +1,6 @@ // SPDX-License-Identifier: LGPL-3.0-or-other // Copyright (C) 2021 Contributors to the SLS Detector Package -//#include "sls/ansi.h" +// #include "sls/ansi.h" #include #undef CORR @@ -10,7 +10,8 @@ #define RAWDATA -#if !defined JFSTRX && !defined JFSTRXOLD && !defined JFSTRXCHIP1 && !defined JFSTRXCHIP6 +#if !defined JFSTRX && !defined JFSTRXOLD && !defined JFSTRXCHIP1 && \ + !defined JFSTRXCHIP6 #ifndef MODULE #include "jungfrauHighZSingleChipData.h" #endif @@ -38,34 +39,38 @@ #include #include -//using namespace std; +// using namespace std; int main(int argc, char *argv[]) { if (argc < 5) { - std::cout << "Usage is " << argv[0] - << "indir outdir fname(with formatting, no extension) fextension [runmin] [runmax] [pedfile (raw or tiff)] [threshold] " - "[nframes] [xmin xmax ymin ymax] [gainmap]" - << std::endl; - std::cout << "threshold <0 means analog; threshold=0 means cluster finder; " - "threshold>0 means photon counting" - << std::endl; - std::cout << "nframes <0 means sum everything; nframes=0 means one file per " - "run; nframes>0 means one file every nframes" - << std::endl; + std::cout + << "Usage is " << argv[0] + << "indir outdir fname(with formatting, no extension) fextension " + "[runmin] [runmax] [pedfile (raw or tiff)] [threshold] " + "[nframes] [xmin xmax ymin ymax] [gainmap]" + << std::endl; + std::cout + << "threshold <0 means analog; threshold=0 means cluster finder; " + "threshold>0 means photon counting" + << std::endl; + std::cout + << "nframes <0 means sum everything; nframes=0 means one file per " + "run; nframes>0 means one file every nframes" + << std::endl; return 1; } int fifosize = 1000; int nthreads = 10; - int csize = 3; //3 + int csize = 3; // 3 int nsigma = 5; int nped = 10000; int cf = 0; double *gainmap = NULL; - //float *gm; + // float *gm; int ff, np; // cout << " data size is " << dsize; @@ -110,9 +115,9 @@ int main(int argc, char *argv[]) { char imgfname[10000]; char cfname[10000]; - - //Define decoders... -#if !defined JFSTRX && !defined JFSTRXOLD && !defined JFSTRXCHIP1 && !defined JFSTRXCHIP6 + // Define decoders... +#if !defined JFSTRX && !defined JFSTRXOLD && !defined JFSTRXCHIP1 && \ + !defined JFSTRXCHIP6 #ifndef MODULE jungfrauHighZSingleChipData *decoder = new jungfrauHighZSingleChipData(); int nx = 256, ny = 256; @@ -125,67 +130,71 @@ int main(int argc, char *argv[]) { #ifdef JFSTRX cout << "Jungfrau strixel full module readout" << endl; - //ROI - uint16_t xxmin=0; - uint16_t xxmax=0; - uint16_t yymin=0; - uint16_t yymax=0; + // ROI + uint16_t xxmin = 0; + uint16_t xxmax = 0; + uint16_t yymin = 0; + uint16_t yymax = 0; #ifndef ALDO using header = sls::defs::sls_receiver_header; - //check if there is a roi in the header + // check if there is a roi in the header typedef struct { - uint16_t xmin; - uint16_t xmax; - uint16_t ymin; - uint16_t ymax; + uint16_t xmin; + uint16_t xmax; + uint16_t ymin; + uint16_t ymax; } receiverRoi_compact; receiverRoi_compact croi; sprintf(ffname, "%s/%s.%s", indir, fformat, fext); - sprintf(fname, (const char*)ffname, runmin); - std::cout << "Reading header of file " << fname << " to check for ROI " << std::endl; + sprintf(fname, (const char *)ffname, runmin); + std::cout << "Reading header of file " << fname << " to check for ROI " + << std::endl; filebin.open((const char *)(fname), ios::in | ios::binary); if (filebin.is_open()) { - header hbuffer; - std::cout << "sizeof(header) = " << sizeof(header) << std::endl; - if ( filebin.read( (char *)&hbuffer, sizeof(header) ) ) { - memcpy(&croi, &hbuffer.detHeader.detSpec1, 8); - std::cout << "Read ROI [" << croi.xmin << ", " << croi.xmax << ", " << croi.ymin << ", " << croi.ymax << "]" << std::endl; - xxmin = croi.xmin; - xxmax = croi.xmax; - yymin = croi.ymin; - yymax = croi.ymax; - } else - std::cout << "reading error" << std::endl; - filebin.close(); + header hbuffer; + std::cout << "sizeof(header) = " << sizeof(header) << std::endl; + if (filebin.read((char *)&hbuffer, sizeof(header))) { + memcpy(&croi, &hbuffer.detHeader.detSpec1, 8); + std::cout << "Read ROI [" << croi.xmin << ", " << croi.xmax << ", " + << croi.ymin << ", " << croi.ymax << "]" << std::endl; + xxmin = croi.xmin; + xxmax = croi.xmax; + yymin = croi.ymin; + yymax = croi.ymax; + } else + std::cout << "reading error" << std::endl; + filebin.close(); } else - std::cout << "Could not open " << fname << " for reading " << std::endl; + std::cout << "Could not open " << fname << " for reading " << std::endl; #endif - jungfrauLGADStrixelsData *decoder = new jungfrauLGADStrixelsData( xxmin, xxmax, yymin, yymax ); - int nx = 1024/3, ny = 512*5; + jungfrauLGADStrixelsData *decoder = + new jungfrauLGADStrixelsData(xxmin, xxmax, yymin, yymax); + int nx = 1024 / 3, ny = 512 * 5; #endif #ifdef JFSTRXCHIP1 std::cout << "Jungfrau strixel LGAD single chip 1" << std::endl; - jungfrauLGADStrixelsDataSingleChip *decoder = new jungfrauLGADStrixelsDataSingleChip(1); - int nx = 256/3, ny = 256*5; + jungfrauLGADStrixelsDataSingleChip *decoder = + new jungfrauLGADStrixelsDataSingleChip(1); + int nx = 256 / 3, ny = 256 * 5; #endif #ifdef JFSTRXCHIP6 std::cout << "Jungfrau strixel LGAD single chip 6" << std::endl; - jungfrauLGADStrixelsDataSingleChip *decoder = new jungfrauLGADStrixelsDataSingleChip(6); - int nx = 256/3, ny = 256*5; + jungfrauLGADStrixelsDataSingleChip *decoder = + new jungfrauLGADStrixelsDataSingleChip(6); + int nx = 256 / 3, ny = 256 * 5; #endif #ifdef JFSTRXOLD std::cout << "Jungfrau strixels old design" << std::endl; - jungfrauStrixelsHalfModuleOldDesign *decoder = new jungfrauStrixelsHalfModuleOldDesign(); - int nx = 1024*3, ny = 512/3; + jungfrauStrixelsHalfModuleOldDesign *decoder = + new jungfrauStrixelsHalfModuleOldDesign(); + int nx = 1024 * 3, ny = 512 / 3; #endif - decoder->getDetectorSize(nx, ny); std::cout << "Detector size is " << nx << " " << ny << std::endl; - int xmin = 0, xmax = nx, ymin = 0, ymax = ny; if (argc >= 14) { xmin = atoi(argv[10]); @@ -193,12 +202,13 @@ int main(int argc, char *argv[]) { ymin = atoi(argv[12]); ymax = atoi(argv[13]); } - std::cout << xmin << " " << xmax << " " << ymin << " " << ymax << " " << std::endl; + std::cout << xmin << " " << xmax << " " << ymin << " " << ymax << " " + << std::endl; char *gainfname = NULL; if (argc > 14) { gainfname = argv[14]; - std::cout << "Gain map file name is: " << gainfname << std::endl; + std::cout << "Gain map file name is: " << gainfname << std::endl; } std::time_t end_time; @@ -210,34 +220,32 @@ int main(int argc, char *argv[]) { std::cout << "runmin is " << runmin << std::endl; std::cout << "runmax is " << runmax << std::endl; if (pedfile) - std::cout << "pedestal file is " << pedfile << std::endl; + std::cout << "pedestal file is " << pedfile << std::endl; if (thr > 0) - std::cout << "threshold is " << thr << std::endl; + std::cout << "threshold is " << thr << std::endl; std::cout << "Nframes is " << nframes << std::endl; - //std::cout << "HHHEEEEEEEEEEEEEEEEEEEEEEERE!!!!!" << std::endl; + // std::cout << "HHHEEEEEEEEEEEEEEEEEEEEEEERE!!!!!" << std::endl; uint32_t nnx, nny; - - singlePhotonDetector *filter = new singlePhotonDetector( decoder, 3, nsigma, 1, NULL, nped, 200, -1, -1, gainmap, NULL); if (gainfname) { if (filter->readGainMap(gainfname)) - std::cout << "using gain map " << gainfname << std::endl; + std::cout << "using gain map " << gainfname << std::endl; else - std::cout << "Could not open gain map " << gainfname << std::endl; + std::cout << "Could not open gain map " << gainfname << std::endl; } else thr = 0.15 * thr; filter->newDataSet(); - //int dsize = decoder->getDataSize(); + // int dsize = decoder->getDataSize(); if (thr > 0) { - std::cout << "threshold is " << thr << std::endl; - filter->setThreshold(thr); - cf = 0; + std::cout << "threshold is " << thr << std::endl; + filter->setThreshold(thr); + cf = 0; } else cf = 1; @@ -252,7 +260,7 @@ int main(int argc, char *argv[]) { // multiThreadedAnalogDetector(filter,nthreads,fifosize); multiThreadedCountingDetector *mt = new multiThreadedCountingDetector(filter, nthreads, fifosize); - mt->setClusterSize(csize,csize); + mt->setClusterSize(csize, csize); #ifndef ANALOG mt->setDetectorMode(ePhotonCounting); @@ -278,186 +286,193 @@ int main(int argc, char *argv[]) { int ifr = 0; char froot[1000]; - double *ped=new double[nx * ny];//, *ped1; + double *ped = new double[nx * ny]; //, *ped1; - int pos,pos1; + int pos, pos1; if (pedfile) { - if (string(pedfile).find(".dat") != std::string::npos) { - pos1=string(pedfile).rfind("/"); - strcpy(froot,pedfile+pos1); - pos=string(froot).find(".dat"); - froot[pos]='\0'; - } + if (string(pedfile).find(".dat") != std::string::npos) { + pos1 = string(pedfile).rfind("/"); + strcpy(froot, pedfile + pos1); + pos = string(froot).find(".dat"); + froot[pos] = '\0'; + } - std::cout << "PEDESTAL " << std::endl; - // sprintf(imgfname, "%s/pedestals.tiff", outdir); + std::cout << "PEDESTAL " << std::endl; + // sprintf(imgfname, "%s/pedestals.tiff", outdir); - if (string(pedfile).find(".tif") == std::string::npos) { - sprintf(fname, "%s", pedfile); - std::cout << fname << std::endl; - std::time(&end_time); - std::cout << "aaa" << std::ctime(&end_time) << std::endl; - - mt->setFrameMode(ePedestal); - // sprintf(fn,fformat,irun); - filebin.open((const char *)(fname), ios::in | ios::binary); - // //open file - if (filebin.is_open()) { - std::cout << "bbbb" << std::ctime(&end_time) << std::endl; - - ff = -1; - while (decoder->readNextFrame(filebin, ff, np, buff)) { - // if (np == 40) { - if ((ifr+1) % 100 == 0) { - std::cout << " ****" << decoder->getValue(buff,20,20);// << endl; - } - mt->pushData(buff); - mt->nextThread(); - mt->popFree(buff); - ifr++; - if (ifr % 100 == 0) { - std::cout << " ****" << ifr << " " << ff << " " << np << std::endl; - } //else - //cout << ifr << " " << ff << " " << np << endl; - if (ifr>=1000) - break; - ff = -1; - } - filebin.close(); - while (mt->isBusy()) { - ; - } - - sprintf(imgfname, "%s/%s_ped.tiff", outdir, froot); - mt->writePedestal(imgfname); - sprintf(imgfname, "%s/%s_rms.tiff", outdir, froot); - mt->writePedestalRMS(imgfname); - - } else - std::cout << "Could not open pedestal file " << fname - << " for reading " << std::endl; - } else { - float *pp = ReadFromTiff(pedfile, nny, nnx); - if (pp && (int)nnx == nx && (int)nny == ny) { - for (int i = 0; i < nx * ny; i++) { - ped[i] = pp[i]; - } - delete[] pp; - mt->setPedestal(ped); - std::cout << "Pedestal set from tiff file " << pedfile << std::endl; - } else { - std::cout << "Could not open pedestal tiff file " << pedfile - << " for reading " << std::endl; - } - } - std::time(&end_time); - std::cout << std::ctime(&end_time) << std::endl; + if (string(pedfile).find(".tif") == std::string::npos) { + sprintf(fname, "%s", pedfile); + std::cout << fname << std::endl; + std::time(&end_time); + std::cout << "aaa" << std::ctime(&end_time) << std::endl; + + mt->setFrameMode(ePedestal); + // sprintf(fn,fformat,irun); + filebin.open((const char *)(fname), ios::in | ios::binary); + // //open file + if (filebin.is_open()) { + std::cout << "bbbb" << std::ctime(&end_time) << std::endl; + + ff = -1; + while (decoder->readNextFrame(filebin, ff, np, buff)) { + // if (np == 40) { + if ((ifr + 1) % 100 == 0) { + std::cout + << " ****" + << decoder->getValue(buff, 20, 20); // << endl; + } + mt->pushData(buff); + mt->nextThread(); + mt->popFree(buff); + ifr++; + if (ifr % 100 == 0) { + std::cout << " ****" << ifr << " " << ff << " " << np + << std::endl; + } // else + // cout << ifr << " " << ff << " " << np << endl; + if (ifr >= 1000) + break; + ff = -1; + } + filebin.close(); + while (mt->isBusy()) { + ; + } + + sprintf(imgfname, "%s/%s_ped.tiff", outdir, froot); + mt->writePedestal(imgfname); + sprintf(imgfname, "%s/%s_rms.tiff", outdir, froot); + mt->writePedestalRMS(imgfname); + + } else + std::cout << "Could not open pedestal file " << fname + << " for reading " << std::endl; + } else { + float *pp = ReadFromTiff(pedfile, nny, nnx); + if (pp && (int)nnx == nx && (int)nny == ny) { + for (int i = 0; i < nx * ny; i++) { + ped[i] = pp[i]; + } + delete[] pp; + mt->setPedestal(ped); + std::cout << "Pedestal set from tiff file " << pedfile + << std::endl; + } else { + std::cout << "Could not open pedestal tiff file " << pedfile + << " for reading " << std::endl; + } + } + std::time(&end_time); + std::cout << std::ctime(&end_time) << std::endl; } - + ifr = 0; int ifile = 0; mt->setFrameMode(eFrame); for (int irun = runmin; irun <= runmax; irun++) { - std::cout << "DATA "; - // sprintf(fn,fformat,irun); - sprintf(ffname, "%s/%s.%s", indir, fformat, fext); - sprintf(fname, (const char*)ffname, irun); - sprintf(ffname, "%s/%s.tiff", outdir, fformat); - sprintf(imgfname, (const char*)ffname, irun); - sprintf(ffname, "%s/%s.clust", outdir, fformat); - sprintf(cfname, (const char*)ffname, irun); - std::cout << fname << " "; - std::cout << imgfname << std::endl; - std::time(&end_time); - std::cout << std::ctime(&end_time) << std::endl; - // cout << fname << " " << outfname << " " << imgfname << endl; - filebin.open((const char *)(fname), ios::in | ios::binary); - // //open file - ifile = 0; - if (filebin.is_open()) { - if (thr <= 0 && cf != 0) { // cluster finder - if (of == NULL) { - of = fopen(cfname, "w"); - if (of) { - mt->setFilePointer(of); - std::cout << "file pointer set " << std::endl; - } else { - std::cout << "Could not open " << cfname << " for writing " - << std::endl; - mt->setFilePointer(NULL); - return 1; - } - } - } - // //while read frame - ff = -1; - ifr = 0; - while (decoder->readNextFrame(filebin, ff, np, buff)) { - // if (np == 40) { - // //push - - if ((ifr+1) % 100 == 0) { - std::cout << " ****" << decoder->getValue(buff,20,20);// << endl; - } - mt->pushData(buff); - // // //pop - mt->nextThread(); - mt->popFree(buff); - - ifr++; - if (ifr % 100 == 0) - std::cout << " " << ifr << " " << ff << std::endl; - if (nframes > 0) { - if (ifr % nframes == 0) { - sprintf(ffname, "%s/%s_f%05d.tiff", outdir, fformat, - ifile); - sprintf(imgfname, (const char*)ffname, irun); - mt->writeImage(imgfname, thr1); - mt->clearImage(); - ifile++; - } - } - // } else - // cout << ifr << " " << ff << " " << np << endl; - ff = -1; - } - std::cout << "--" << std::endl; - filebin.close(); - while (mt->isBusy()) { - ; - } - if (nframes >= 0) { - if (nframes > 0) { - sprintf(ffname, "%s/%s_f%05d.tiff", outdir, fformat, ifile); - sprintf(imgfname, (const char*)ffname, irun); - } else { - sprintf(ffname, "%s/%s.tiff", outdir, fformat); - sprintf(imgfname, (const char*)ffname, irun); - } - std::cout << "Writing tiff to " << imgfname << " " << thr1 << std::endl; - mt->writeImage(imgfname, thr1); - mt->clearImage(); - if (of) { - fclose(of); - of = NULL; - mt->setFilePointer(NULL); - } - } - std::time(&end_time); - std::cout << std::ctime(&end_time) << std::endl; - } else - std::cout << "Could not open " << fname << " for reading " << std::endl; + std::cout << "DATA "; + // sprintf(fn,fformat,irun); + sprintf(ffname, "%s/%s.%s", indir, fformat, fext); + sprintf(fname, (const char *)ffname, irun); + sprintf(ffname, "%s/%s.tiff", outdir, fformat); + sprintf(imgfname, (const char *)ffname, irun); + sprintf(ffname, "%s/%s.clust", outdir, fformat); + sprintf(cfname, (const char *)ffname, irun); + std::cout << fname << " "; + std::cout << imgfname << std::endl; + std::time(&end_time); + std::cout << std::ctime(&end_time) << std::endl; + // cout << fname << " " << outfname << " " << imgfname << endl; + filebin.open((const char *)(fname), ios::in | ios::binary); + // //open file + ifile = 0; + if (filebin.is_open()) { + if (thr <= 0 && cf != 0) { // cluster finder + if (of == NULL) { + of = fopen(cfname, "w"); + if (of) { + mt->setFilePointer(of); + std::cout << "file pointer set " << std::endl; + } else { + std::cout << "Could not open " << cfname + << " for writing " << std::endl; + mt->setFilePointer(NULL); + return 1; + } + } + } + // //while read frame + ff = -1; + ifr = 0; + while (decoder->readNextFrame(filebin, ff, np, buff)) { + // if (np == 40) { + // //push + + if ((ifr + 1) % 100 == 0) { + std::cout << " ****" + << decoder->getValue(buff, 20, 20); // << endl; + } + mt->pushData(buff); + // // //pop + mt->nextThread(); + mt->popFree(buff); + + ifr++; + if (ifr % 100 == 0) + std::cout << " " << ifr << " " << ff << std::endl; + if (nframes > 0) { + if (ifr % nframes == 0) { + sprintf(ffname, "%s/%s_f%05d.tiff", outdir, fformat, + ifile); + sprintf(imgfname, (const char *)ffname, irun); + mt->writeImage(imgfname, thr1); + mt->clearImage(); + ifile++; + } + } + // } else + // cout << ifr << " " << ff << " " << np << endl; + ff = -1; + } + std::cout << "--" << std::endl; + filebin.close(); + while (mt->isBusy()) { + ; + } + if (nframes >= 0) { + if (nframes > 0) { + sprintf(ffname, "%s/%s_f%05d.tiff", outdir, fformat, ifile); + sprintf(imgfname, (const char *)ffname, irun); + } else { + sprintf(ffname, "%s/%s.tiff", outdir, fformat); + sprintf(imgfname, (const char *)ffname, irun); + } + std::cout << "Writing tiff to " << imgfname << " " << thr1 + << std::endl; + mt->writeImage(imgfname, thr1); + mt->clearImage(); + if (of) { + fclose(of); + of = NULL; + mt->setFilePointer(NULL); + } + } + std::time(&end_time); + std::cout << std::ctime(&end_time) << std::endl; + } else + std::cout << "Could not open " << fname << " for reading " + << std::endl; } if (nframes < 0) { - sprintf(ffname, "%s/%s.tiff", outdir, fformat); - strcpy(imgfname, ffname); - std::cout << "Writing tiff to " << imgfname << " " << thr1 << std::endl; - mt->writeImage(imgfname, thr1); + sprintf(ffname, "%s/%s.tiff", outdir, fformat); + strcpy(imgfname, ffname); + std::cout << "Writing tiff to " << imgfname << " " << thr1 << std::endl; + mt->writeImage(imgfname, thr1); } - + return 0; } diff --git a/slsDetectorServers/ctbDetectorServer/RegisterDefs.h b/slsDetectorServers/ctbDetectorServer/RegisterDefs.h index 4231c7377..734b09c9c 100644 --- a/slsDetectorServers/ctbDetectorServer/RegisterDefs.h +++ b/slsDetectorServers/ctbDetectorServer/RegisterDefs.h @@ -622,11 +622,9 @@ #define PATTERN_WAIT_TIMER_5_LSB_REG (0x91 << MEM_MAP_SHIFT) #define PATTERN_WAIT_TIMER_5_MSB_REG (0x92 << MEM_MAP_SHIFT) - /* Slow ADC SPI Value RO register */ #define ADC_SLOW_DATA_REG (0x93 << MEM_MAP_SHIFT) - /* Slow ADC SPI Value Config register */ #define ADC_SLOW_CFG_REG (0x94 << MEM_MAP_SHIFT) /** Read back CFG Register */ @@ -636,13 +634,13 @@ /** Channel sequencer */ #define ADC_SLOW_CFG_SEQ_OFST (3) #define ADC_SLOW_CFG_SEQ_MSK (0x00000003 << ADC_SLOW_CFG_SEQ_OFST) -#define ADC_SLOW_CFG_SEQ_DSBLE_VAL \ +#define ADC_SLOW_CFG_SEQ_DSBLE_VAL \ ((0x0 << ADC_SLOW_CFG_SEQ_OFST) & ADC_SLOW_CFG_SEQ_MSK) -#define ADC_SLOW_CFG_SEQ_UPDTE_DRNG_SQNCE_VAL \ +#define ADC_SLOW_CFG_SEQ_UPDTE_DRNG_SQNCE_VAL \ ((0x1 << ADC_SLOW_CFG_SEQ_OFST) & ADC_SLOW_CFG_SEQ_MSK) -#define ADC_SLOW_CFG_SEQ_SCN_WTH_TMP_VAL \ +#define ADC_SLOW_CFG_SEQ_SCN_WTH_TMP_VAL \ ((0x2 << ADC_SLOW_CFG_SEQ_OFST) & ADC_SLOW_CFG_SEQ_MSK) -#define ADC_SLOW_CFG_SEQ_SCN_WTHT_TMP_VAL \ +#define ADC_SLOW_CFG_SEQ_SCN_WTHT_TMP_VAL \ ((0x3 << ADC_SLOW_CFG_SEQ_OFST) & ADC_SLOW_CFG_SEQ_MSK) /** Reference/ buffer selection */ @@ -650,32 +648,33 @@ #define ADC_SLOW_CFG_REF_MSK (0x00000007 << ADC_SLOW_CFG_REF_OFST) /** Internal reference. REF = 2.5V buffered output. Temperature sensor enabled. */ -#define ADC_SLOW_CFG_REF_INT_2500MV_VAL \ +#define ADC_SLOW_CFG_REF_INT_2500MV_VAL \ ((0x0 << ADC_SLOW_CFG_REF_OFST) & ADC_SLOW_CFG_REF_OFST) /** Internal reference. REF = 4.096V buffered output. Temperature sensor * enabled. */ -#define ADC_SLOW_CFG_REF_INT_4096MV_VAL \ +#define ADC_SLOW_CFG_REF_INT_4096MV_VAL \ ((0x1 << ADC_SLOW_CFG_REF_OFST) & ADC_SLOW_CFG_REF_MSK) /** External reference. Temperature sensor enabled. Internal buffer disabled. */ -#define ADC_SLOW_CFG_REF_EXT_TMP_VAL \ +#define ADC_SLOW_CFG_REF_EXT_TMP_VAL \ ((0x2 << ADC_SLOW_CFG_REF_OFST) & ADC_SLOW_CFG_REF_MSK) /** External reference. Temperature sensor enabled. Internal buffer enabled. */ -#define ADC_SLOW_CFG_REF_EXT_TMP_INTBUF_VAL \ +#define ADC_SLOW_CFG_REF_EXT_TMP_INTBUF_VAL \ ((0x3 << ADC_SLOW_CFG_REF_OFST) & ADC_SLOW_CFG_REF_MSK) /** External reference. Temperature sensor disabled. Internal buffer disabled. */ -#define ADC_SLOW_CFG_REF_EXT_VAL \ +#define ADC_SLOW_CFG_REF_EXT_VAL \ ((0x6 << ADC_SLOW_CFG_REF_OFST) & ADC_SLOW_CFG_REF_MSK) /** External reference. Temperature sensor disabled. Internal buffer enabled. */ -#define ADC_SLOW_CFG_REF_EXT_INTBUF_VAL \ +#define ADC_SLOW_CFG_REF_EXT_INTBUF_VAL \ ((0x7 << ADC_SLOW_CFG_REF_OFST) & ADC_SLOW_CFG_REF_MSK) /** bandwidth of low pass filter */ #define ADC_SLOW_CFG_BW_OFST (8) #define ADC_SLOW_CFG_BW_MSK (0x00000001 << ADC_SLOW_CFG_REF_OFST) -#define ADC_SLOW_CFG_BW_ONE_FOURTH_VAL \ +#define ADC_SLOW_CFG_BW_ONE_FOURTH_VAL \ ((0x0 << ADC_SLOW_CFG_BW_OFST) & ADC_SLOW_CFG_BW_MSK) -#define ADC_SLOW_CFG_BW_FULL_VAL ((0x1 << ADC_SLOW_CFG_BW_OFST) & ADC_SLOW_CFG_BW_MSK) +#define ADC_SLOW_CFG_BW_FULL_VAL \ + ((0x1 << ADC_SLOW_CFG_BW_OFST) & ADC_SLOW_CFG_BW_MSK) /** input channel selection IN0 - IN7 */ #define ADC_SLOW_CFG_IN_OFST (9) @@ -684,28 +683,27 @@ /** input channel configuration */ #define ADC_SLOW_CFG_INCC_OFST (12) #define ADC_SLOW_CFG_INCC_MSK (0x00000007 << ADC_SLOW_CFG_INCC_OFST) -#define ADC_SLOW_CFG_INCC_BPLR_DFFRNTL_PRS_VAL \ +#define ADC_SLOW_CFG_INCC_BPLR_DFFRNTL_PRS_VAL \ ((0x0 << ADC_SLOW_CFG_INCC_OFST) & ADC_SLOW_CFG_INCC_MSK) -#define ADC_SLOW_CFG_INCC_BPLR_IN_COM_VAL \ +#define ADC_SLOW_CFG_INCC_BPLR_IN_COM_VAL \ ((0x2 << ADC_SLOW_CFG_INCC_OFST) & ADC_SLOW_CFG_INCC_MSK) -#define ADC_SLOW_CFG_INCC_TMP_VAL \ +#define ADC_SLOW_CFG_INCC_TMP_VAL \ ((0x3 << ADC_SLOW_CFG_INCC_OFST) & ADC_SLOW_CFG_INCC_MSK) -#define ADC_SLOW_CFG_INCC_UNPLR_DFFRNTL_PRS_VAL \ +#define ADC_SLOW_CFG_INCC_UNPLR_DFFRNTL_PRS_VAL \ ((0x4 << ADC_SLOW_CFG_INCC_OFST) & ADC_SLOW_CFG_INCC_MSK) -#define ADC_SLOW_CFG_INCC_UNPLR_IN_COM_VAL \ +#define ADC_SLOW_CFG_INCC_UNPLR_IN_COM_VAL \ ((0x6 << ADC_SLOW_CFG_INCC_OFST) & ADC_SLOW_CFG_INCC_MSK) -#define ADC_SLOW_CFG_INCC_UNPLR_IN_GND_VAL \ +#define ADC_SLOW_CFG_INCC_UNPLR_IN_GND_VAL \ ((0x7 << ADC_SLOW_CFG_INCC_OFST) & ADC_SLOW_CFG_INCC_MSK) /** configuration update */ #define ADC_SLOW_CFG_CFG_OFST (15) #define ADC_SLOW_CFG_CFG_MSK (0x00000001 << ADC_SLOW_CFG_CFG_OFST) -#define ADC_SLOW_CFG_CFG_NO_UPDATE_VAL \ +#define ADC_SLOW_CFG_CFG_NO_UPDATE_VAL \ ((0x0 << ADC_SLOW_CFG_CFG_OFST) & ADC_SLOW_CFG_CFG_MSK) -#define ADC_SLOW_CFG_CFG_OVRWRTE_VAL \ +#define ADC_SLOW_CFG_CFG_OVRWRTE_VAL \ ((0x1 << ADC_SLOW_CFG_CFG_OFST) & ADC_SLOW_CFG_CFG_MSK) - /* Slow ADC SPI Value Control register */ #define ADC_SLOW_CTRL_REG (0x95 << MEM_MAP_SHIFT) diff --git a/slsDetectorServers/ctbDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/ctbDetectorServer/slsDetectorFunctionList.c index 37b151869..3158a2050 100644 --- a/slsDetectorServers/ctbDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/ctbDetectorServer/slsDetectorFunctionList.c @@ -1487,31 +1487,33 @@ int getSlowADC(int ichan) { // configure for channel bus_w(ADC_SLOW_CFG_REG, - // don't read back config reg - ADC_SLOW_CFG_RB_MSK | - // disable sequencer (different from config) - ADC_SLOW_CFG_SEQ_DSBLE_VAL | - // Internal reference. REF = 2.5V buffered output. Temperature sensor - // enabled. - ADC_SLOW_CFG_REF_INT_2500MV_VAL | - // full bandwidth of low pass filter - ADC_SLOW_CFG_BW_FULL_VAL | - // specific channel (different from config) - ((ichan << ADC_SLOW_CFG_IN_OFST) & ADC_SLOW_CFG_IN_MSK) | - // input channel configuration (unipolar. inx to gnd) - ADC_SLOW_CFG_INCC_UNPLR_IN_GND_VAL | - // overwrite configuration - ADC_SLOW_CFG_CFG_OVRWRTE_VAL); - + // don't read back config reg + ADC_SLOW_CFG_RB_MSK | + // disable sequencer (different from config) + ADC_SLOW_CFG_SEQ_DSBLE_VAL | + // Internal reference. REF = 2.5V buffered output. Temperature + // sensor enabled. + ADC_SLOW_CFG_REF_INT_2500MV_VAL | + // full bandwidth of low pass filter + ADC_SLOW_CFG_BW_FULL_VAL | + // specific channel (different from config) + ((ichan << ADC_SLOW_CFG_IN_OFST) & ADC_SLOW_CFG_IN_MSK) | + // input channel configuration (unipolar. inx to gnd) + ADC_SLOW_CFG_INCC_UNPLR_IN_GND_VAL | + // overwrite configuration + ADC_SLOW_CFG_CFG_OVRWRTE_VAL); // start converting bus_w(ADC_SLOW_CTRL_REG, bus_r(ADC_SLOW_CTRL_REG) | ADC_SLOW_CTRL_STRT_MSK); - bus_w(ADC_SLOW_CTRL_REG, bus_r(ADC_SLOW_CTRL_REG) & ~ADC_SLOW_CTRL_STRT_MSK); + bus_w(ADC_SLOW_CTRL_REG, + bus_r(ADC_SLOW_CTRL_REG) & ~ADC_SLOW_CTRL_STRT_MSK); // wait for it to be done - volatile int done = ((bus_r(ADC_SLOW_CTRL_REG) & ADC_SLOW_CTRL_DONE_MSK) >> ADC_SLOW_CTRL_DONE_OFST); + volatile int done = ((bus_r(ADC_SLOW_CTRL_REG) & ADC_SLOW_CTRL_DONE_MSK) >> + ADC_SLOW_CTRL_DONE_OFST); while (!done) { - done = ((bus_r(ADC_SLOW_CTRL_REG) & ADC_SLOW_CTRL_DONE_MSK) >> ADC_SLOW_CTRL_DONE_OFST); + done = ((bus_r(ADC_SLOW_CTRL_REG) & ADC_SLOW_CTRL_DONE_MSK) >> + ADC_SLOW_CTRL_DONE_OFST); } // readout @@ -1522,16 +1524,18 @@ int getSlowADC(int ichan) { int regMinuv = 0; int maxSteps = 0xFFFF + 1; int retval = 0; - if (ConvertToDifferentRange(0, maxSteps, regMinuv, refMaxuv, regval, &retval) == FAIL) { - LOG(logERROR, ("Could not convert slow adc channel (regval:0x%x) to uv\n", regval)); - return -1; + if (ConvertToDifferentRange(0, maxSteps, regMinuv, refMaxuv, regval, + &retval) == FAIL) { + LOG(logERROR, + ("Could not convert slow adc channel (regval:0x%x) to uv\n", + regval)); + return -1; } LOG(logINFO, ("\tRead slow adc [%d]: %d uV (reg: 0x%x)\n", ichan, retval, regval)); return retval; - } int getSlowADCTemperature() { @@ -1539,30 +1543,33 @@ int getSlowADCTemperature() { // configure for channel bus_w(ADC_SLOW_CFG_REG, - // don't read back config reg - ADC_SLOW_CFG_RB_MSK | - // disable sequencer (different from config) - ADC_SLOW_CFG_SEQ_DSBLE_VAL | - // Internal reference. REF = 2.5V buffered output. Temperature sensor - // enabled. - ADC_SLOW_CFG_REF_INT_2500MV_VAL | - // full bandwidth of low pass filter - ADC_SLOW_CFG_BW_FULL_VAL | - // all channels - ADC_SLOW_CFG_IN_MSK | - // temp sensor - ADC_SLOW_CFG_INCC_TMP_VAL | - // overwrite configuration - ADC_SLOW_CFG_CFG_OVRWRTE_VAL); + // don't read back config reg + ADC_SLOW_CFG_RB_MSK | + // disable sequencer (different from config) + ADC_SLOW_CFG_SEQ_DSBLE_VAL | + // Internal reference. REF = 2.5V buffered output. Temperature + // sensor enabled. + ADC_SLOW_CFG_REF_INT_2500MV_VAL | + // full bandwidth of low pass filter + ADC_SLOW_CFG_BW_FULL_VAL | + // all channels + ADC_SLOW_CFG_IN_MSK | + // temp sensor + ADC_SLOW_CFG_INCC_TMP_VAL | + // overwrite configuration + ADC_SLOW_CFG_CFG_OVRWRTE_VAL); // start converting bus_w(ADC_SLOW_CTRL_REG, bus_r(ADC_SLOW_CTRL_REG) | ADC_SLOW_CTRL_STRT_MSK); - bus_w(ADC_SLOW_CTRL_REG, bus_r(ADC_SLOW_CTRL_REG) & ~ADC_SLOW_CTRL_STRT_MSK); + bus_w(ADC_SLOW_CTRL_REG, + bus_r(ADC_SLOW_CTRL_REG) & ~ADC_SLOW_CTRL_STRT_MSK); // wait for it to be done - volatile int done = ((bus_r(ADC_SLOW_CTRL_REG) & ADC_SLOW_CTRL_DONE_MSK) >> ADC_SLOW_CTRL_DONE_OFST); + volatile int done = ((bus_r(ADC_SLOW_CTRL_REG) & ADC_SLOW_CTRL_DONE_MSK) >> + ADC_SLOW_CTRL_DONE_OFST); while (!done) { - done = ((bus_r(ADC_SLOW_CTRL_REG) & ADC_SLOW_CTRL_DONE_MSK) >> ADC_SLOW_CTRL_DONE_OFST); + done = ((bus_r(ADC_SLOW_CTRL_REG) & ADC_SLOW_CTRL_DONE_MSK) >> + ADC_SLOW_CTRL_DONE_OFST); } // readout @@ -1574,9 +1581,10 @@ int getSlowADCTemperature() { int maxSteps = 0xFFFF + 1; int minmv = 0; int maxmv = 2500; - if (ConvertToDifferentRange(0, maxSteps, minmv, - maxmv, regval, &retval) == FAIL) { - LOG(logERROR, ("Could not convert slow adc temp (regval:0x%x) to uv\n", regval)); + if (ConvertToDifferentRange(0, maxSteps, minmv, maxmv, regval, &retval) == + FAIL) { + LOG(logERROR, + ("Could not convert slow adc temp (regval:0x%x) to uv\n", regval)); return -1; } LOG(logDEBUG1, ("voltage read for temp: %d mV\n", retval)); @@ -1585,7 +1593,7 @@ int getSlowADCTemperature() { double tempCFor1mv = (25.00 / 283.00); double tempValue = tempCFor1mv * (double)retval; LOG(logINFO, ("\tTemp slow adc : %f °C (reg: %d)\n", tempValue, regval)); - + return tempValue; }