mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-22 22:40:02 +02:00
gap pixels for 8, 16, 32 in receiver at udp level
This commit is contained in:
parent
e54767b69d
commit
2e5f64d9bc
@ -22,7 +22,6 @@ class BinaryFile : private virtual slsReceiverDefs, public File, public BinaryFi
|
|||||||
* creates the File Writer
|
* creates the File Writer
|
||||||
* @param ind self index
|
* @param ind self index
|
||||||
* @param maxf max frames per file
|
* @param maxf max frames per file
|
||||||
* @param ppf packets per frame
|
|
||||||
* @param nd pointer to number of detectors in each dimension
|
* @param nd pointer to number of detectors in each dimension
|
||||||
* @param fname pointer to file name prefix
|
* @param fname pointer to file name prefix
|
||||||
* @param fpath pointer to file path
|
* @param fpath pointer to file path
|
||||||
@ -35,7 +34,7 @@ class BinaryFile : private virtual slsReceiverDefs, public File, public BinaryFi
|
|||||||
* @param portno pointer to udp port number for logging
|
* @param portno pointer to udp port number for logging
|
||||||
* @param smode pointer to silent mode
|
* @param smode pointer to silent mode
|
||||||
*/
|
*/
|
||||||
BinaryFile(int ind, uint32_t maxf, const uint32_t* ppf,
|
BinaryFile(int ind, uint32_t maxf,
|
||||||
int* nd, char* fname, char* fpath, uint64_t* findex, bool* owenable,
|
int* nd, char* fname, char* fpath, uint64_t* findex, bool* owenable,
|
||||||
int* dindex, int* nunits, uint64_t* nf, uint32_t* dr, uint32_t* portno,
|
int* dindex, int* nunits, uint64_t* nf, uint32_t* dr, uint32_t* portno,
|
||||||
bool* smode);
|
bool* smode);
|
||||||
|
@ -28,12 +28,14 @@ class DataProcessor : private virtual slsReceiverDefs, public ThreadObject {
|
|||||||
* @param ftype pointer to file format type
|
* @param ftype pointer to file format type
|
||||||
* @param fwenable pointer to file writer enable
|
* @param fwenable pointer to file writer enable
|
||||||
* @param dsEnable pointer to data stream enable
|
* @param dsEnable pointer to data stream enable
|
||||||
|
* @param gpEnable pointer to gap pixels enable
|
||||||
|
* @param dr pointer to dynamic range
|
||||||
* @param freq pointer to streaming frequency
|
* @param freq pointer to streaming frequency
|
||||||
* @param timer pointer to timer if streaming frequency is random
|
* @param timer pointer to timer if streaming frequency is random
|
||||||
* @param dataReadycb pointer to data ready call back function
|
* @param dataReadycb pointer to data ready call back function
|
||||||
* @param pDataReadycb pointer to arguments of data ready call back function
|
* @param pDataReadycb pointer to arguments of data ready call back function
|
||||||
*/
|
*/
|
||||||
DataProcessor(Fifo*& f, fileFormat* ftype, bool* fwenable, bool* dsEnable,
|
DataProcessor(Fifo*& f, fileFormat* ftype, bool* fwenable, bool* dsEnable, bool* gpEnable, uint32_t* dr,
|
||||||
uint32_t* freq, uint32_t* timer,
|
uint32_t* freq, uint32_t* timer,
|
||||||
void (*dataReadycb)(uint64_t, uint32_t, uint32_t, uint64_t, uint64_t, uint16_t, uint16_t, uint16_t, uint16_t, uint32_t, uint16_t, uint8_t, uint8_t,
|
void (*dataReadycb)(uint64_t, uint32_t, uint32_t, uint64_t, uint64_t, uint16_t, uint16_t, uint16_t, uint16_t, uint32_t, uint16_t, uint8_t, uint8_t,
|
||||||
char*, uint32_t, void*),
|
char*, uint32_t, void*),
|
||||||
@ -200,6 +202,11 @@ class DataProcessor : private virtual slsReceiverDefs, public ThreadObject {
|
|||||||
*/
|
*/
|
||||||
void EndofAcquisition(uint64_t numf);
|
void EndofAcquisition(uint64_t numf);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update pixel dimensions in file writer
|
||||||
|
*/
|
||||||
|
void SetPixelDimension();
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
@ -269,6 +276,13 @@ class DataProcessor : private virtual slsReceiverDefs, public ThreadObject {
|
|||||||
*/
|
*/
|
||||||
bool CheckCount();
|
bool CheckCount();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Processing Function (inserting gap pixels) eiger specific
|
||||||
|
* @param buf pointer to image
|
||||||
|
* @param dr dynamic range
|
||||||
|
*/
|
||||||
|
void InsertGapPixels(char* buf, uint32_t dr);
|
||||||
|
|
||||||
/** type of thread */
|
/** type of thread */
|
||||||
static const std::string TypeName;
|
static const std::string TypeName;
|
||||||
|
|
||||||
@ -307,6 +321,13 @@ class DataProcessor : private virtual slsReceiverDefs, public ThreadObject {
|
|||||||
/** File Write Enable */
|
/** File Write Enable */
|
||||||
bool* fileWriteEnable;
|
bool* fileWriteEnable;
|
||||||
|
|
||||||
|
/** Gap Pixels Enable */
|
||||||
|
bool* gapPixelsEnable;
|
||||||
|
|
||||||
|
|
||||||
|
/** Dynamic Range */
|
||||||
|
uint32_t* dynamicRange;
|
||||||
|
|
||||||
/** Pointer to Streaming frequency, if 0, sending random images with a timer */
|
/** Pointer to Streaming frequency, if 0, sending random images with a timer */
|
||||||
uint32_t* streamingFrequency;
|
uint32_t* streamingFrequency;
|
||||||
|
|
||||||
@ -319,6 +340,9 @@ class DataProcessor : private virtual slsReceiverDefs, public ThreadObject {
|
|||||||
/** timer beginning stamp for random streaming */
|
/** timer beginning stamp for random streaming */
|
||||||
struct timespec timerBegin;
|
struct timespec timerBegin;
|
||||||
|
|
||||||
|
/** temporary buffer for processing */
|
||||||
|
char* tempBuffer;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//acquisition start
|
//acquisition start
|
||||||
|
@ -22,7 +22,6 @@ class File : private virtual slsReceiverDefs {
|
|||||||
* creates the File Writer
|
* creates the File Writer
|
||||||
* @param ind self index
|
* @param ind self index
|
||||||
* @param maxf max frames per file
|
* @param maxf max frames per file
|
||||||
* @param ppf packets per frame
|
|
||||||
* @param nd pointer to number of detectors in each dimension
|
* @param nd pointer to number of detectors in each dimension
|
||||||
* @param fname pointer to file name prefix
|
* @param fname pointer to file name prefix
|
||||||
* @param fpath pointer to file path
|
* @param fpath pointer to file path
|
||||||
@ -35,7 +34,7 @@ class File : private virtual slsReceiverDefs {
|
|||||||
* @param portno pointer to udp port number for logging
|
* @param portno pointer to udp port number for logging
|
||||||
* @param smode pointer to silent mode
|
* @param smode pointer to silent mode
|
||||||
*/
|
*/
|
||||||
File(int ind, uint32_t maxf, const uint32_t* ppf,
|
File(int ind, uint32_t maxf,
|
||||||
int* nd, char* fname, char* fpath, uint64_t* findex, bool* owenable,
|
int* nd, char* fname, char* fpath, uint64_t* findex, bool* owenable,
|
||||||
int* dindex, int* nunits, uint64_t* nf, uint32_t* dr, uint32_t* portno,
|
int* dindex, int* nunits, uint64_t* nf, uint32_t* dr, uint32_t* portno,
|
||||||
bool* smode);
|
bool* smode);
|
||||||
@ -84,12 +83,6 @@ class File : private virtual slsReceiverDefs {
|
|||||||
*/
|
*/
|
||||||
void SetMaxFramesPerFile(uint32_t maxf);
|
void SetMaxFramesPerFile(uint32_t maxf);
|
||||||
|
|
||||||
/**
|
|
||||||
* Set Packets per frame (called only for each generalData construction)
|
|
||||||
* @param ppf pointer to packets per frame
|
|
||||||
*/
|
|
||||||
void SetPacketsPerFrame(const uint32_t* ppf);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create file
|
* Create file
|
||||||
* @param fnum current frame index to include in file name
|
* @param fnum current frame index to include in file name
|
||||||
@ -172,10 +165,6 @@ class File : private virtual slsReceiverDefs {
|
|||||||
/** Maximum frames per file */
|
/** Maximum frames per file */
|
||||||
uint32_t maxFramesPerFile;
|
uint32_t maxFramesPerFile;
|
||||||
|
|
||||||
/** Packets per frame for logging */
|
|
||||||
//pointer because value in generalData could change
|
|
||||||
const uint32_t* packetsPerFrame;
|
|
||||||
|
|
||||||
/** Master File Name */
|
/** Master File Name */
|
||||||
std::string masterFileName;
|
std::string masterFileName;
|
||||||
|
|
||||||
|
@ -536,19 +536,19 @@ class EigerData : public GeneralData {
|
|||||||
/**
|
/**
|
||||||
* Enable Gap Pixels changes member variables
|
* Enable Gap Pixels changes member variables
|
||||||
* @param enable true if gap pixels enable, else false
|
* @param enable true if gap pixels enable, else false
|
||||||
|
* @param dr dynamic range
|
||||||
*/
|
*/
|
||||||
void SetGapPixelsEnable(bool b, int dr) {
|
void SetGapPixelsEnable(bool b, int dr) {
|
||||||
switch((int)b) {
|
switch((int)b) {
|
||||||
case 1:
|
case 1:
|
||||||
nPixelsX_Streamer = (256*2) + 3;
|
nPixelsX = (256 * 2) + 3;
|
||||||
nPixelsY_Streamer = 256 + 1;
|
nPixelsY = 256 + 1;
|
||||||
imageSize_Streamer = nPixelsX_Streamer * imageSize_Streamer *
|
imageSize = nPixelsX * nPixelsY * ((double)dr/(double)NUM_BITS_IN_ONE_BYTE);
|
||||||
((double)dr/(double)NUM_BITS_IN_ONE_BYTE);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
nPixelsX_Streamer = (256*2);
|
nPixelsX = (256*2);
|
||||||
nPixelsY_Streamer = 256;
|
nPixelsY = 256;
|
||||||
imageSize_Streamer = dataSize*packetsPerFrame;
|
imageSize = dataSize*packetsPerFrame;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -28,7 +28,6 @@ class HDF5File : private virtual slsReceiverDefs, public File, public HDF5FileSt
|
|||||||
* creates the File Writer
|
* creates the File Writer
|
||||||
* @param ind self index
|
* @param ind self index
|
||||||
* @param maxf max frames per file
|
* @param maxf max frames per file
|
||||||
* @param ppf packets per frame
|
|
||||||
* @param nd pointer to number of detectors in each dimension
|
* @param nd pointer to number of detectors in each dimension
|
||||||
* @param fname pointer to file name prefix
|
* @param fname pointer to file name prefix
|
||||||
* @param fpath pointer to file path
|
* @param fpath pointer to file path
|
||||||
@ -43,7 +42,7 @@ class HDF5File : private virtual slsReceiverDefs, public File, public HDF5FileSt
|
|||||||
* @param ny number of pixels in y direction
|
* @param ny number of pixels in y direction
|
||||||
* @param smode pointer to silent mode
|
* @param smode pointer to silent mode
|
||||||
*/
|
*/
|
||||||
HDF5File(int ind, uint32_t maxf, const uint32_t* ppf,
|
HDF5File(int ind, uint32_t maxf,
|
||||||
int* nd, char* fname, char* fpath, uint64_t* findex, bool* owenable,
|
int* nd, char* fname, char* fpath, uint64_t* findex, bool* owenable,
|
||||||
int* dindex, int* nunits, uint64_t* nf, uint32_t* dr, uint32_t* portno,
|
int* dindex, int* nunits, uint64_t* nf, uint32_t* dr, uint32_t* portno,
|
||||||
uint32_t nx, uint32_t ny,
|
uint32_t nx, uint32_t ny,
|
||||||
|
@ -14,11 +14,11 @@ using namespace std;
|
|||||||
|
|
||||||
FILE* BinaryFile::masterfd = 0;
|
FILE* BinaryFile::masterfd = 0;
|
||||||
|
|
||||||
BinaryFile::BinaryFile(int ind, uint32_t maxf, const uint32_t* ppf,
|
BinaryFile::BinaryFile(int ind, uint32_t maxf,
|
||||||
int* nd, char* fname, char* fpath, uint64_t* findex, bool* owenable,
|
int* nd, char* fname, char* fpath, uint64_t* findex, bool* owenable,
|
||||||
int* dindex, int* nunits, uint64_t* nf, uint32_t* dr, uint32_t* portno,
|
int* dindex, int* nunits, uint64_t* nf, uint32_t* dr, uint32_t* portno,
|
||||||
bool* smode):
|
bool* smode):
|
||||||
File(ind, maxf, ppf, nd, fname, fpath, findex, owenable, dindex, nunits, nf, dr, portno, smode),
|
File(ind, maxf, nd, fname, fpath, findex, owenable, dindex, nunits, nf, dr, portno, smode),
|
||||||
filefd(0),
|
filefd(0),
|
||||||
numFramesInFile(0),
|
numFramesInFile(0),
|
||||||
numActualPacketsInFile(0)
|
numActualPacketsInFile(0)
|
||||||
|
@ -33,7 +33,7 @@ pthread_mutex_t DataProcessor::Mutex = PTHREAD_MUTEX_INITIALIZER;
|
|||||||
bool DataProcessor::SilentMode(false);
|
bool DataProcessor::SilentMode(false);
|
||||||
|
|
||||||
|
|
||||||
DataProcessor::DataProcessor(Fifo*& f, fileFormat* ftype, bool* fwenable, bool* dsEnable,
|
DataProcessor::DataProcessor(Fifo*& f, fileFormat* ftype, bool* fwenable, bool* dsEnable, bool* gpEnable, uint32_t* dr,
|
||||||
uint32_t* freq, uint32_t* timer,
|
uint32_t* freq, uint32_t* timer,
|
||||||
void (*dataReadycb)(uint64_t, uint32_t, uint32_t, uint64_t, uint64_t, uint16_t, uint16_t, uint16_t, uint16_t, uint32_t, uint16_t, uint8_t, uint8_t,
|
void (*dataReadycb)(uint64_t, uint32_t, uint32_t, uint64_t, uint64_t, uint16_t, uint16_t, uint16_t, uint16_t, uint32_t, uint16_t, uint8_t, uint8_t,
|
||||||
char*, uint32_t, void*),
|
char*, uint32_t, void*),
|
||||||
@ -46,8 +46,11 @@ DataProcessor::DataProcessor(Fifo*& f, fileFormat* ftype, bool* fwenable, bool*
|
|||||||
dataStreamEnable(dsEnable),
|
dataStreamEnable(dsEnable),
|
||||||
fileFormatType(ftype),
|
fileFormatType(ftype),
|
||||||
fileWriteEnable(fwenable),
|
fileWriteEnable(fwenable),
|
||||||
|
gapPixelsEnable(gpEnable),
|
||||||
|
dynamicRange(dr),
|
||||||
streamingFrequency(freq),
|
streamingFrequency(freq),
|
||||||
streamingTimerInMs(timer),
|
streamingTimerInMs(timer),
|
||||||
|
tempBuffer(0),
|
||||||
currentFreqCount(0),
|
currentFreqCount(0),
|
||||||
acquisitionStartedFlag(false),
|
acquisitionStartedFlag(false),
|
||||||
measurementStartedFlag(false),
|
measurementStartedFlag(false),
|
||||||
@ -74,6 +77,7 @@ DataProcessor::DataProcessor(Fifo*& f, fileFormat* ftype, bool* fwenable, bool*
|
|||||||
|
|
||||||
DataProcessor::~DataProcessor() {
|
DataProcessor::~DataProcessor() {
|
||||||
if (file) delete file;
|
if (file) delete file;
|
||||||
|
if (tempBuffer) delete [] tempBuffer;
|
||||||
ThreadObject::DestroyThread();
|
ThreadObject::DestroyThread();
|
||||||
NumberofDataProcessors--;
|
NumberofDataProcessors--;
|
||||||
}
|
}
|
||||||
@ -165,6 +169,15 @@ void DataProcessor::ResetParametersforNewMeasurement(){
|
|||||||
numFramesCaught = 0;
|
numFramesCaught = 0;
|
||||||
firstMeasurementIndex = 0;
|
firstMeasurementIndex = 0;
|
||||||
measurementStartedFlag = false;
|
measurementStartedFlag = false;
|
||||||
|
|
||||||
|
if (tempBuffer) {
|
||||||
|
delete [] tempBuffer;
|
||||||
|
tempBuffer = 0;
|
||||||
|
}
|
||||||
|
if (*gapPixelsEnable >= 0) {
|
||||||
|
tempBuffer = new char[generalData->imageSize];
|
||||||
|
memset(tempBuffer, 0, generalData->imageSize);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -194,7 +207,6 @@ void DataProcessor::SetGeneralData(GeneralData* g) {
|
|||||||
generalData->Print();
|
generalData->Print();
|
||||||
#endif
|
#endif
|
||||||
if (file) {
|
if (file) {
|
||||||
file->SetPacketsPerFrame(&generalData->packetsPerFrame);
|
|
||||||
file->SetMaxFramesPerFile(generalData->maxFramesPerFile);
|
file->SetMaxFramesPerFile(generalData->maxFramesPerFile);
|
||||||
if (file->GetFileType() == HDF5) {
|
if (file->GetFileType() == HDF5) {
|
||||||
file->SetNumberofPixels(generalData->nPixelsX, generalData->nPixelsY);
|
file->SetNumberofPixels(generalData->nPixelsX, generalData->nPixelsY);
|
||||||
@ -240,14 +252,14 @@ void DataProcessor::SetupFileWriter(int* nd, char* fname, char* fpath, uint64_t*
|
|||||||
switch(*fileFormatType){
|
switch(*fileFormatType){
|
||||||
#ifdef HDF5C
|
#ifdef HDF5C
|
||||||
case HDF5:
|
case HDF5:
|
||||||
file = new HDF5File(index, generalData->maxFramesPerFile, &generalData->packetsPerFrame,
|
file = new HDF5File(index, generalData->maxFramesPerFile,
|
||||||
nd, fname, fpath, findex, owenable,
|
nd, fname, fpath, findex, owenable,
|
||||||
dindex, nunits, nf, dr, portno,
|
dindex, nunits, nf, dr, portno,
|
||||||
generalData->nPixelsX, generalData->nPixelsY, &SilentMode);
|
generalData->nPixelsX, generalData->nPixelsY, &SilentMode);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
file = new BinaryFile(index, generalData->maxFramesPerFile, &generalData->packetsPerFrame,
|
file = new BinaryFile(index, generalData->maxFramesPerFile,
|
||||||
nd, fname, fpath, findex, owenable,
|
nd, fname, fpath, findex, owenable,
|
||||||
dindex, nunits, nf, dr, portno, &SilentMode);
|
dindex, nunits, nf, dr, portno, &SilentMode);
|
||||||
break;
|
break;
|
||||||
@ -358,6 +370,8 @@ void DataProcessor::ProcessAnImage(char* buf) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (*gapPixelsEnable && (*dynamicRange!=4))
|
||||||
|
InsertGapPixels(buf + sizeof(sls_detector_header), *dynamicRange);
|
||||||
|
|
||||||
if (*fileWriteEnable)
|
if (*fileWriteEnable)
|
||||||
file->WriteToFile(buf, generalData->imageSize + sizeof(sls_detector_header), fnum-firstMeasurementIndex, nump);
|
file->WriteToFile(buf, generalData->imageSize + sizeof(sls_detector_header), fnum-firstMeasurementIndex, nump);
|
||||||
@ -424,3 +438,103 @@ bool DataProcessor::CheckCount() {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void DataProcessor::SetPixelDimension() {
|
||||||
|
if (file) {
|
||||||
|
if (file->GetFileType() == HDF5) {
|
||||||
|
file->SetNumberofPixels(generalData->nPixelsX, generalData->nPixelsY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** eiger specific */
|
||||||
|
void DataProcessor::InsertGapPixels(char* buf, uint32_t dr) {
|
||||||
|
|
||||||
|
memset(tempBuffer, 0xFF, generalData->imageSize);
|
||||||
|
|
||||||
|
const uint32_t nx = generalData->nPixelsX;
|
||||||
|
const uint32_t ny = generalData->nPixelsY;
|
||||||
|
const uint32_t npx = nx * ny;
|
||||||
|
|
||||||
|
char* srcptr = 0;
|
||||||
|
char* dstptr = 0;
|
||||||
|
|
||||||
|
const uint32_t b1px = generalData->imageSize / (npx); // not double as not dealing with 4 bit mode
|
||||||
|
const uint32_t b2px = 2 * b1px;
|
||||||
|
const uint32_t b1pxofst = (index ? b1px : 0); // left fpga (index 0) has no extra 1px offset, but right fpga has
|
||||||
|
const uint32_t b1chip = 256 * b1px;
|
||||||
|
const uint32_t b1line = (nx * b1px);
|
||||||
|
|
||||||
|
// copying line by line
|
||||||
|
srcptr = buf;
|
||||||
|
dstptr = tempBuffer + b1line + b1pxofst; // left fpga (index 0) has no extra 1px offset, but right fpga has
|
||||||
|
for (int i = 0; i < (ny-1); ++i) {
|
||||||
|
memcpy(dstptr, srcptr, b1chip);
|
||||||
|
srcptr += b1chip;
|
||||||
|
dstptr += (b1chip + b2px);
|
||||||
|
memcpy(dstptr, srcptr, b1chip);
|
||||||
|
srcptr += b1chip;
|
||||||
|
dstptr += (b1chip + b1px);
|
||||||
|
}
|
||||||
|
|
||||||
|
// vertical filling of values
|
||||||
|
{
|
||||||
|
char* srcgp1 = 0; char* srcgp2 = 0; char* srcgp3 = 0;
|
||||||
|
char* dstgp1 = 0; char* dstgp2 = 0; char* dstgp3 = 0;
|
||||||
|
const uint32_t b3px = 3 * b1px;
|
||||||
|
|
||||||
|
srcptr = tempBuffer + b1line;
|
||||||
|
dstptr = tempBuffer + b1line;
|
||||||
|
|
||||||
|
for (int i = 0; i < (ny-1); ++i) {
|
||||||
|
srcgp1 = srcptr + b1pxofst + b1chip - b1px;
|
||||||
|
dstgp1 = srcgp1 + b1px;
|
||||||
|
srcgp2 = srcgp1 + b3px;
|
||||||
|
dstgp2 = dstgp1 + b1px;
|
||||||
|
if (!index) {
|
||||||
|
srcgp3 = srcptr + b1line - b2px;
|
||||||
|
dstgp3 = srcgp3 + b1px;
|
||||||
|
} else {
|
||||||
|
srcgp3 = srcptr + b1px;
|
||||||
|
dstgp3 = srcptr;
|
||||||
|
}
|
||||||
|
switch (dr) {
|
||||||
|
case 8:
|
||||||
|
(*((uint8_t*)srcgp1)) = (*((uint8_t*)srcgp1))/2; (*((uint8_t*)dstgp1)) = (*((uint8_t*)srcgp1));
|
||||||
|
(*((uint8_t*)srcgp2)) = (*((uint8_t*)srcgp2))/2; (*((uint8_t*)dstgp2)) = (*((uint8_t*)srcgp2));
|
||||||
|
(*((uint8_t*)srcgp3)) = (*((uint8_t*)srcgp3))/2; (*((uint8_t*)dstgp3)) = (*((uint8_t*)srcgp3));
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
(*((uint16_t*)srcgp1)) = (*((uint16_t*)srcgp1))/2; (*((uint16_t*)dstgp1)) = (*((uint16_t*)srcgp1));
|
||||||
|
(*((uint16_t*)srcgp2)) = (*((uint16_t*)srcgp2))/2; (*((uint16_t*)dstgp2)) = (*((uint16_t*)srcgp2));
|
||||||
|
(*((uint16_t*)srcgp3)) = (*((uint16_t*)srcgp3))/2; (*((uint16_t*)dstgp3)) = (*((uint16_t*)srcgp3));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
(*((uint32_t*)srcgp1)) = (*((uint32_t*)srcgp1))/2; (*((uint32_t*)dstgp1)) = (*((uint32_t*)srcgp1));
|
||||||
|
(*((uint32_t*)srcgp2)) = (*((uint32_t*)srcgp2))/2; (*((uint32_t*)dstgp2)) = (*((uint32_t*)srcgp2));
|
||||||
|
(*((uint32_t*)srcgp3)) = (*((uint32_t*)srcgp3))/2; (*((uint32_t*)dstgp3)) = (*((uint32_t*)srcgp3));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
srcptr += b1line;
|
||||||
|
dstptr += b1line;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// horizontal filling of values
|
||||||
|
srcptr = tempBuffer + b1line;
|
||||||
|
dstptr = tempBuffer;
|
||||||
|
for (int i = 0; i < nx; ++i) {
|
||||||
|
switch (dr) {
|
||||||
|
case 8: (*((uint8_t*)srcptr)) = (*((uint8_t*)srcptr))/2; (*((uint8_t*)dstptr)) = (*((uint8_t*)srcptr)); break;
|
||||||
|
case 16:(*((uint16_t*)srcptr)) = (*((uint16_t*)srcptr))/2; (*((uint16_t*)dstptr)) = (*((uint16_t*)srcptr)); break;
|
||||||
|
default:(*((uint32_t*)srcptr)) = (*((uint32_t*)srcptr))/2; (*((uint32_t*)dstptr)) = (*((uint32_t*)srcptr)); break;
|
||||||
|
}
|
||||||
|
srcptr += b1px;
|
||||||
|
dstptr += b1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(buf, tempBuffer, generalData->imageSize);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
@ -54,7 +54,7 @@ DataStreamer::DataStreamer(Fifo*& f, uint32_t* dr, int* sEnable) :
|
|||||||
|
|
||||||
DataStreamer::~DataStreamer() {
|
DataStreamer::~DataStreamer() {
|
||||||
CloseZmqSocket();
|
CloseZmqSocket();
|
||||||
if (completeBuffer) delete completeBuffer;
|
if (completeBuffer) delete [] completeBuffer;
|
||||||
ThreadObject::DestroyThread();
|
ThreadObject::DestroyThread();
|
||||||
NumberofDataStreamers--;
|
NumberofDataStreamers--;
|
||||||
}
|
}
|
||||||
@ -117,7 +117,7 @@ void DataStreamer::ResetParametersforNewMeasurement(char* fname){
|
|||||||
measurementStartedFlag = false;
|
measurementStartedFlag = false;
|
||||||
strcpy(fileNametoStream, fname);
|
strcpy(fileNametoStream, fname);
|
||||||
if (completeBuffer) {
|
if (completeBuffer) {
|
||||||
delete completeBuffer;
|
delete [] completeBuffer;
|
||||||
completeBuffer = 0;
|
completeBuffer = 0;
|
||||||
}
|
}
|
||||||
if (*shortFrameEnable >= 0) {
|
if (*shortFrameEnable >= 0) {
|
||||||
@ -253,6 +253,8 @@ void DataStreamer::ProcessAnImage(char* buf) {
|
|||||||
bprintf(RED,"Error: Could not send zmq data for fnum %lld and streamer %d\n",
|
bprintf(RED,"Error: Could not send zmq data for fnum %lld and streamer %d\n",
|
||||||
(long long int) fnum, index);
|
(long long int) fnum, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//normal
|
//normal
|
||||||
else {
|
else {
|
||||||
|
|
||||||
|
@ -10,13 +10,12 @@
|
|||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
|
||||||
File::File(int ind, uint32_t maxf, const uint32_t* ppf,
|
File::File(int ind, uint32_t maxf,
|
||||||
int* nd, char* fname, char* fpath, uint64_t* findex, bool* owenable,
|
int* nd, char* fname, char* fpath, uint64_t* findex, bool* owenable,
|
||||||
int* dindex, int* nunits, uint64_t* nf, uint32_t* dr, uint32_t* portno,
|
int* dindex, int* nunits, uint64_t* nf, uint32_t* dr, uint32_t* portno,
|
||||||
bool* smode):
|
bool* smode):
|
||||||
index(ind),
|
index(ind),
|
||||||
maxFramesPerFile(maxf),
|
maxFramesPerFile(maxf),
|
||||||
packetsPerFrame(ppf),
|
|
||||||
numDetX(nd[0]),
|
numDetX(nd[0]),
|
||||||
numDetY(nd[1]),
|
numDetY(nd[1]),
|
||||||
fileNamePrefix(fname),
|
fileNamePrefix(fname),
|
||||||
@ -44,7 +43,6 @@ void File::PrintMembers() {
|
|||||||
FILE_LOG(logINFO) << "\nGeneral Writer Variables:" << endl
|
FILE_LOG(logINFO) << "\nGeneral Writer Variables:" << endl
|
||||||
<< "Index: " << index << endl
|
<< "Index: " << index << endl
|
||||||
<< "Max Frames Per File: " << maxFramesPerFile << endl
|
<< "Max Frames Per File: " << maxFramesPerFile << endl
|
||||||
<< "Packets per Frame: " << *packetsPerFrame << endl
|
|
||||||
<< "Number of Detectors in x dir: " << numDetX << endl
|
<< "Number of Detectors in x dir: " << numDetX << endl
|
||||||
<< "Number of Detectors in y dir: " << numDetY << endl
|
<< "Number of Detectors in y dir: " << numDetY << endl
|
||||||
<< "File Name Prefix: " << fileNamePrefix << endl
|
<< "File Name Prefix: " << fileNamePrefix << endl
|
||||||
@ -83,7 +81,3 @@ void File::SetMaxFramesPerFile(uint32_t maxf) {
|
|||||||
maxFramesPerFile = maxf;
|
maxFramesPerFile = maxf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void File::SetPacketsPerFrame(const uint32_t* ppf) {
|
|
||||||
packetsPerFrame = ppf;
|
|
||||||
}
|
|
||||||
|
@ -21,14 +21,14 @@ hid_t HDF5File::virtualfd = 0;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
HDF5File::HDF5File(int ind, uint32_t maxf, const uint32_t* ppf,
|
HDF5File::HDF5File(int ind, uint32_t maxf,
|
||||||
int* nd, char* fname, char* fpath, uint64_t* findex,
|
int* nd, char* fname, char* fpath, uint64_t* findex,
|
||||||
bool* frindexenable, bool* owenable,
|
bool* frindexenable, bool* owenable,
|
||||||
int* dindex, int* nunits, uint64_t* nf, uint32_t* dr, uint32_t* portno,
|
int* dindex, int* nunits, uint64_t* nf, uint32_t* dr, uint32_t* portno,
|
||||||
uint32_t nx, uint32_t ny,
|
uint32_t nx, uint32_t ny,
|
||||||
bool* smode):
|
bool* smode):
|
||||||
|
|
||||||
File(ind, maxf, ppf, nd, fname, fpath, findex, frindexenable, owenable, dindex, nunits, nf, dr, portno, smode),
|
File(ind, maxf, nd, fname, fpath, findex, frindexenable, owenable, dindex, nunits, nf, dr, portno, smode),
|
||||||
filefd(0),
|
filefd(0),
|
||||||
dataspace(0),
|
dataspace(0),
|
||||||
dataset(0),
|
dataset(0),
|
||||||
|
@ -117,6 +117,10 @@ int UDPStandardImplementation::setGapPixelsEnable(const bool b) {
|
|||||||
gapPixelsEnable = b;
|
gapPixelsEnable = b;
|
||||||
|
|
||||||
// side effects
|
// side effects
|
||||||
|
generalData->SetGapPixelsEnable(b, dynamicRange);
|
||||||
|
// to update npixelsx, npixelsy in file writer
|
||||||
|
for (vector<DataProcessor*>::const_iterator it = dataProcessor.begin(); it != dataProcessor.end(); ++it)
|
||||||
|
(*it)->SetPixelDimension();
|
||||||
|
|
||||||
numberofJobs = -1; //changes to imagesize has to be noted to recreate fifo structure
|
numberofJobs = -1; //changes to imagesize has to be noted to recreate fifo structure
|
||||||
if (SetupFifoStructure() == FAIL)
|
if (SetupFifoStructure() == FAIL)
|
||||||
@ -254,6 +258,10 @@ int UDPStandardImplementation::setDynamicRange(const uint32_t i) {
|
|||||||
|
|
||||||
//side effects
|
//side effects
|
||||||
generalData->SetDynamicRange(i,tengigaEnable);
|
generalData->SetDynamicRange(i,tengigaEnable);
|
||||||
|
generalData->SetGapPixelsEnable(gapPixelsEnable, dynamicRange);
|
||||||
|
// to update npixelsx, npixelsy in file writer
|
||||||
|
for (vector<DataProcessor*>::const_iterator it = dataProcessor.begin(); it != dataProcessor.end(); ++it)
|
||||||
|
(*it)->SetPixelDimension();
|
||||||
|
|
||||||
numberofJobs = -1; //changes to imagesize has to be noted to recreate fifo structure
|
numberofJobs = -1; //changes to imagesize has to be noted to recreate fifo structure
|
||||||
if (SetupFifoStructure() == FAIL)
|
if (SetupFifoStructure() == FAIL)
|
||||||
@ -350,7 +358,7 @@ int UDPStandardImplementation::setDetectorType(const detectorType d) {
|
|||||||
for ( int i=0; i < numThreads; ++i ) {
|
for ( int i=0; i < numThreads; ++i ) {
|
||||||
listener.push_back(new Listener(myDetectorType, fifo[i], &status, &udpPortNum[i], eth, &activated, &numberOfFrames, &dynamicRange));
|
listener.push_back(new Listener(myDetectorType, fifo[i], &status, &udpPortNum[i], eth, &activated, &numberOfFrames, &dynamicRange));
|
||||||
dataProcessor.push_back(new DataProcessor(fifo[i], &fileFormatType,
|
dataProcessor.push_back(new DataProcessor(fifo[i], &fileFormatType,
|
||||||
&fileWriteEnable, &dataStreamEnable, &frameToGuiFrequency, &frameToGuiTimerinMS,
|
&fileWriteEnable, &dataStreamEnable, &gapPixelsEnable, &dynamicRange, &frameToGuiFrequency, &frameToGuiTimerinMS,
|
||||||
rawDataReadyCallBack,pRawDataReady));
|
rawDataReadyCallBack,pRawDataReady));
|
||||||
if (Listener::GetErrorMask() || DataProcessor::GetErrorMask()) {
|
if (Listener::GetErrorMask() || DataProcessor::GetErrorMask()) {
|
||||||
FILE_LOG (logERROR) << "Error: Could not creates listener/dataprocessor threads (index:" << i << ")";
|
FILE_LOG (logERROR) << "Error: Could not creates listener/dataprocessor threads (index:" << i << ")";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user