mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-11 04:17:15 +02:00
Fixpositions (#436)
* fix positions on server side * wip * numports wip * wip * jungfrau top inner interface row increment * x, y detpos, wip * removed eiger row indices flipping in gui (bottom flipping maintained) * wip * wip, jungfrau numinterfaces2 * jungfrau virtual works * eiger, jungfrau, g2 virtual server works * eiger positions fix, wip * binaries in * minor printout * binaries in * pointer bug * comment to define test_mod_geometry define
This commit is contained in:
@ -17,12 +17,11 @@
|
||||
const std::string DataStreamer::TypeName = "DataStreamer";
|
||||
|
||||
DataStreamer::DataStreamer(int ind, Fifo *f, uint32_t *dr, ROI *r, uint64_t *fi,
|
||||
bool fr, slsDetectorDefs::xy nm, bool *qe,
|
||||
bool fr, slsDetectorDefs::xy np, bool *qe,
|
||||
uint64_t *tot)
|
||||
: ThreadObject(ind, TypeName), fifo(f), dynamicRange(dr), roi(r),
|
||||
fileIndex(fi), flipRows(fr), quadEnable(qe), totalNumFrames(tot) {
|
||||
numMods.x = nm.x;
|
||||
numMods.y = nm.y;
|
||||
fileIndex(fi), flipRows(fr), numPorts(np), quadEnable(qe),
|
||||
totalNumFrames(tot) {
|
||||
|
||||
LOG(logDEBUG) << "DataStreamer " << ind << " created";
|
||||
}
|
||||
@ -63,10 +62,7 @@ void DataStreamer::RecordFirstIndex(uint64_t fnum, char *buf) {
|
||||
|
||||
void DataStreamer::SetGeneralData(GeneralData *g) { generalData = g; }
|
||||
|
||||
void DataStreamer::SetNumberofModules(xy nm) {
|
||||
numMods.x = nm.x;
|
||||
numMods.y = nm.y;
|
||||
}
|
||||
void DataStreamer::SetNumberofPorts(xy np) { numPorts = np; }
|
||||
|
||||
void DataStreamer::SetFlipRows(bool fd) { flipRows = fd; }
|
||||
|
||||
@ -220,8 +216,8 @@ int DataStreamer::SendHeader(sls_receiver_header *rheader, uint32_t size,
|
||||
|
||||
zHeader.dynamicRange = *dynamicRange;
|
||||
zHeader.fileIndex = *fileIndex;
|
||||
zHeader.ndetx = numMods.x;
|
||||
zHeader.ndety = numMods.y;
|
||||
zHeader.ndetx = numPorts.x;
|
||||
zHeader.ndety = numPorts.y;
|
||||
zHeader.npixelsx = nx;
|
||||
zHeader.npixelsy = ny;
|
||||
zHeader.imageSize = size;
|
||||
|
@ -33,12 +33,12 @@ class DataStreamer : private virtual slsDetectorDefs, public ThreadObject {
|
||||
* @param r roi
|
||||
* @param fi pointer to file index
|
||||
* @param fr flip rows
|
||||
* @param nm number of modules in each dimension
|
||||
* @param nm number of ports in each dimension
|
||||
* @param qe pointer to quad Enable
|
||||
* @param tot pointer to total number of frames
|
||||
*/
|
||||
DataStreamer(int ind, Fifo *f, uint32_t *dr, ROI *r, uint64_t *fi, bool fr,
|
||||
xy nm, bool *qe, uint64_t *tot);
|
||||
xy np, bool *qe, uint64_t *tot);
|
||||
|
||||
/**
|
||||
* Destructor
|
||||
@ -46,39 +46,11 @@ class DataStreamer : private virtual slsDetectorDefs, public ThreadObject {
|
||||
*/
|
||||
~DataStreamer();
|
||||
|
||||
/**
|
||||
* Set Fifo pointer to the one given
|
||||
* @param f address of Fifo pointer
|
||||
*/
|
||||
void SetFifo(Fifo *f);
|
||||
|
||||
/**
|
||||
* Reset parameters for new acquisition
|
||||
*/
|
||||
void ResetParametersforNewAcquisition(const std::string &fname);
|
||||
|
||||
/**
|
||||
* Set GeneralData pointer to the one given
|
||||
* @param g address of GeneralData (Detector Data) pointer
|
||||
*/
|
||||
void SetGeneralData(GeneralData *g);
|
||||
|
||||
/**
|
||||
* Set number of detectors
|
||||
* @param nm number of modules/ports in both dimensions
|
||||
*/
|
||||
void SetNumberofModules(xy nm);
|
||||
|
||||
/**
|
||||
* Set Flipped rows
|
||||
* @param fd flip rows enable
|
||||
*/
|
||||
void SetNumberofPorts(xy np);
|
||||
void SetFlipRows(bool fd);
|
||||
|
||||
/**
|
||||
* Set additional json header
|
||||
* @param json additional json header
|
||||
*/
|
||||
void
|
||||
SetAdditionalJsonHeader(const std::map<std::string, std::string> &json);
|
||||
|
||||
@ -143,34 +115,16 @@ class DataStreamer : private virtual slsDetectorDefs, public ThreadObject {
|
||||
int SendHeader(sls_receiver_header *rheader, uint32_t size = 0,
|
||||
uint32_t nx = 0, uint32_t ny = 0, bool dummy = true);
|
||||
|
||||
/** type of thread */
|
||||
static const std::string TypeName;
|
||||
|
||||
/** GeneralData (Detector Data) object */
|
||||
const GeneralData *generalData{nullptr};
|
||||
|
||||
/** Fifo structure */
|
||||
Fifo *fifo;
|
||||
|
||||
/** ZMQ Socket - Receiver to Client */
|
||||
ZmqSocket *zmqSocket{nullptr};
|
||||
|
||||
/** Pointer to dynamic range */
|
||||
uint32_t *dynamicRange;
|
||||
|
||||
/** ROI */
|
||||
ROI *roi;
|
||||
|
||||
/** adc Configured */
|
||||
int adcConfigured{-1};
|
||||
|
||||
/** Pointer to file index */
|
||||
uint64_t *fileIndex;
|
||||
|
||||
/** flip rows */
|
||||
bool flipRows;
|
||||
|
||||
/** additional json header */
|
||||
std::map<std::string, std::string> additionalJsonHeader;
|
||||
|
||||
/** Used by streamer thread to update local copy (reduce number of locks
|
||||
@ -189,18 +143,12 @@ class DataStreamer : private virtual slsDetectorDefs, public ThreadObject {
|
||||
/** Frame Number of First Frame */
|
||||
uint64_t firstIndex{0};
|
||||
|
||||
/* File name to stream */
|
||||
std::string fileNametoStream;
|
||||
|
||||
/** Complete buffer used for roi, eg. shortGotthard */
|
||||
char *completeBuffer{nullptr};
|
||||
|
||||
/** Number of Modules in X and Y dimension */
|
||||
xy numMods{1, 1};
|
||||
|
||||
/** Quad Enable */
|
||||
xy numPorts{1, 1};
|
||||
bool *quadEnable;
|
||||
|
||||
/** Total number of frames */
|
||||
uint64_t *totalNumFrames;
|
||||
};
|
||||
|
@ -217,7 +217,7 @@ slsDetectorDefs::xy Implementation::GetPortGeometry() {
|
||||
xy portGeometry{1, 1};
|
||||
if (detType == EIGER)
|
||||
portGeometry.x = numUDPInterfaces;
|
||||
else // (jungfrau and gotthard2)
|
||||
else if (detType == JUNGFRAU)
|
||||
portGeometry.y = numUDPInterfaces;
|
||||
return portGeometry;
|
||||
}
|
||||
@ -226,18 +226,18 @@ void Implementation::setDetectorSize(const slsDetectorDefs::xy size) {
|
||||
xy portGeometry = GetPortGeometry();
|
||||
|
||||
std::string log_message = "Detector Size (ports): (";
|
||||
numModules.x = portGeometry.x * size.x;
|
||||
numModules.y = portGeometry.y * size.y;
|
||||
xy nm{numModules.x, numModules.y};
|
||||
numModules = size;
|
||||
numPorts.x = portGeometry.x * size.x;
|
||||
numPorts.y = portGeometry.y * size.y;
|
||||
if (quadEnable) {
|
||||
nm.x = 1;
|
||||
nm.y = 2;
|
||||
numPorts.x = 1;
|
||||
numPorts.y = 2;
|
||||
}
|
||||
for (const auto &it : dataStreamer) {
|
||||
it->SetNumberofModules(nm);
|
||||
it->SetNumberofPorts(numPorts);
|
||||
}
|
||||
|
||||
LOG(logINFO) << "Detector Size (ports): " << sls::ToString(numModules);
|
||||
LOG(logINFO) << "Detector Size (ports): " << sls::ToString(numPorts);
|
||||
}
|
||||
|
||||
int Implementation::getModulePositionId() const { return modulePos; }
|
||||
@ -254,8 +254,16 @@ void Implementation::setModulePositionId(const int id) {
|
||||
for (unsigned int i = 0; i < listener.size(); ++i) {
|
||||
uint16_t row = 0, col = 0;
|
||||
row = (modulePos % numModules.y) * portGeometry.y;
|
||||
col = (modulePos / numModules.y) * portGeometry.x + i;
|
||||
|
||||
col = (modulePos / numModules.y) * portGeometry.x;
|
||||
if (portGeometry.y == 2) {
|
||||
row += i;
|
||||
}
|
||||
if (portGeometry.x == 2) {
|
||||
col += i;
|
||||
}
|
||||
LOG(logDEBUG1) << i << ":numModules:" << numModules.x << ","
|
||||
<< numModules.y << " portGeometry:" << portGeometry.x
|
||||
<< "," << portGeometry.y;
|
||||
listener[i]->SetHardCodedPosition(row, col);
|
||||
}
|
||||
}
|
||||
@ -758,12 +766,7 @@ void Implementation::StartMasterWriter() {
|
||||
MasterAttributes masterAttributes;
|
||||
masterAttributes.detType = detType;
|
||||
masterAttributes.timingMode = timingMode;
|
||||
xy nm{numModules.x, numModules.y};
|
||||
if (quadEnable) {
|
||||
nm.x = 1;
|
||||
nm.y = 2;
|
||||
}
|
||||
masterAttributes.geometry = xy(nm.x, nm.y);
|
||||
masterAttributes.geometry = numPorts;
|
||||
masterAttributes.imageSize = generalData->imageSize;
|
||||
masterAttributes.nPixels =
|
||||
xy(generalData->nPixelsX, generalData->nPixelsY);
|
||||
@ -823,12 +826,12 @@ void Implementation::StartMasterWriter() {
|
||||
std::array<std::string, 2> virtualFileAndDatasetNames;
|
||||
// create virtual hdf5 file (if multiple files)
|
||||
if (dataProcessor[0]->GetFilesInAcquisition() > 1 ||
|
||||
(numModules.x * numModules.y) > 1) {
|
||||
(numPorts.x * numPorts.y) > 1) {
|
||||
virtualFileAndDatasetNames =
|
||||
dataProcessor[0]->CreateVirtualFile(
|
||||
filePath, fileName, fileIndex, overwriteEnable,
|
||||
silentMode, modulePos, numUDPInterfaces, framesPerFile,
|
||||
numberOfTotalFrames, numModules.x, numModules.y,
|
||||
numberOfTotalFrames, numPorts.x, numPorts.y,
|
||||
dynamicRange, &hdf5LibMutex);
|
||||
}
|
||||
// link file in master
|
||||
@ -879,12 +882,6 @@ void Implementation::setNumberofUDPInterfaces(const int n) {
|
||||
}
|
||||
|
||||
if (numUDPInterfaces != n) {
|
||||
|
||||
// reduce number of detectors to size with 1 interface
|
||||
xy portGeometry = GetPortGeometry();
|
||||
numModules.x /= portGeometry.x;
|
||||
numModules.y /= portGeometry.y;
|
||||
|
||||
// clear all threads and fifos
|
||||
listener.clear();
|
||||
dataProcessor.clear();
|
||||
@ -933,15 +930,12 @@ void Implementation::setNumberofUDPInterfaces(const int n) {
|
||||
if (dataStreamEnable) {
|
||||
try {
|
||||
bool flip = flipRows;
|
||||
xy nm{numModules.x, numModules.y};
|
||||
if (quadEnable) {
|
||||
flip = (i == 1 ? true : false);
|
||||
nm.x = 1;
|
||||
nm.y = 2;
|
||||
}
|
||||
dataStreamer.push_back(sls::make_unique<DataStreamer>(
|
||||
i, fifo[i].get(), &dynamicRange, &roi, &fileIndex, flip,
|
||||
nm, &quadEnable, &numberOfTotalFrames));
|
||||
numPorts, &quadEnable, &numberOfTotalFrames));
|
||||
dataStreamer[i]->SetGeneralData(generalData);
|
||||
dataStreamer[i]->CreateZmqSockets(
|
||||
&numUDPInterfaces, streamingPort, streamingSrcIP,
|
||||
@ -1063,15 +1057,12 @@ void Implementation::setDataStreamEnable(const bool enable) {
|
||||
for (int i = 0; i < numUDPInterfaces; ++i) {
|
||||
try {
|
||||
bool flip = flipRows;
|
||||
xy nm{numModules.x, numModules.y};
|
||||
if (quadEnable) {
|
||||
flip = (i == 1 ? true : false);
|
||||
nm.x = 1;
|
||||
nm.y = 2;
|
||||
}
|
||||
dataStreamer.push_back(sls::make_unique<DataStreamer>(
|
||||
i, fifo[i].get(), &dynamicRange, &roi, &fileIndex, flip,
|
||||
nm, &quadEnable, &numberOfTotalFrames));
|
||||
numPorts, &quadEnable, &numberOfTotalFrames));
|
||||
dataStreamer[i]->SetGeneralData(generalData);
|
||||
dataStreamer[i]->CreateZmqSockets(
|
||||
&numUDPInterfaces, streamingPort, streamingSrcIP,
|
||||
@ -1499,18 +1490,12 @@ bool Implementation::getQuad() const { return quadEnable; }
|
||||
void Implementation::setQuad(const bool b) {
|
||||
if (quadEnable != b) {
|
||||
quadEnable = b;
|
||||
|
||||
setDetectorSize(numModules);
|
||||
if (!quadEnable) {
|
||||
xy nm{numModules.x, numModules.y};
|
||||
for (const auto &it : dataStreamer) {
|
||||
it->SetNumberofModules(nm);
|
||||
it->SetFlipRows(flipRows);
|
||||
}
|
||||
} else {
|
||||
xy nm{1, 2};
|
||||
for (const auto &it : dataStreamer) {
|
||||
it->SetNumberofModules(nm);
|
||||
}
|
||||
if (dataStreamer.size() == 2) {
|
||||
dataStreamer[0]->SetFlipRows(false);
|
||||
dataStreamer[1]->SetFlipRows(true);
|
||||
|
@ -290,6 +290,7 @@ class Implementation : private virtual slsDetectorDefs {
|
||||
// config parameters
|
||||
detectorType detType{GENERIC};
|
||||
xy numModules{1, 1};
|
||||
xy numPorts{1, 1};
|
||||
int modulePos{0};
|
||||
std::string detHostname;
|
||||
bool silentMode{false};
|
||||
|
@ -210,6 +210,8 @@ void Listener::CreateDummySocketForUDPSocketBufferSize(int s) {
|
||||
void Listener::SetHardCodedPosition(uint16_t r, uint16_t c) {
|
||||
row = r;
|
||||
column = c;
|
||||
LOG(logDEBUG1) << "Setting hardcoded position [" << index
|
||||
<< "] (row: " << row << ", col: " << column << ")";
|
||||
}
|
||||
|
||||
void Listener::ThreadExecution() {
|
||||
|
@ -47,12 +47,12 @@ void printHelp() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Start Acquisition Call back (slsMultiReceiver writes data if file write enabled)
|
||||
* if registerCallBackRawDataReady or registerCallBackRawDataModifyReady registered,
|
||||
* users get data
|
||||
* Start Acquisition Call back (slsMultiReceiver writes data if file write
|
||||
* enabled) if registerCallBackRawDataReady or
|
||||
* registerCallBackRawDataModifyReady registered, users get data
|
||||
*/
|
||||
int StartAcq(const std::string & filePath, const std::string & fileName, uint64_t fileIndex,
|
||||
size_t imageSize, void *objectPointer) {
|
||||
int StartAcq(const std::string &filePath, const std::string &fileName,
|
||||
uint64_t fileIndex, size_t imageSize, void *objectPointer) {
|
||||
LOG(logINFOBLUE) << "#### StartAcq: filePath:" << filePath
|
||||
<< " fileName:" << fileName << " fileIndex:" << fileIndex
|
||||
<< " imageSize:" << imageSize << " ####";
|
||||
@ -61,8 +61,8 @@ int StartAcq(const std::string & filePath, const std::string & fileName, uint64_
|
||||
|
||||
/** Acquisition Finished Call back */
|
||||
void AcquisitionFinished(uint64_t framesCaught, void *objectPointer) {
|
||||
LOG(logINFOBLUE) << "#### AcquisitionFinished: framesCaught:" << framesCaught
|
||||
<< " ####";
|
||||
LOG(logINFOBLUE) << "#### AcquisitionFinished: framesCaught:"
|
||||
<< framesCaught << " ####";
|
||||
}
|
||||
|
||||
/**
|
||||
@ -76,16 +76,16 @@ void GetData(slsDetectorDefs::sls_receiver_header *header, char *dataPointer,
|
||||
|
||||
PRINT_IN_COLOR(
|
||||
detectorHeader.modId ? detectorHeader.modId : detectorHeader.row,
|
||||
"#### %d GetData: ####\n"
|
||||
"#### %d %d GetData: ####\n"
|
||||
"frameNumber: %lu\t\texpLength: %u\t\tpacketNumber: %u\t\tbunchId: %lu"
|
||||
"\t\ttimestamp: %lu\t\tmodId: %u\t\t"
|
||||
"row: %u\t\tcolumn: %u\t\treserved: %u\t\tdebug: %u"
|
||||
"\t\troundRNumber: %u\t\tdetType: %u\t\tversion: %u"
|
||||
//"\t\tpacketsMask:%s"
|
||||
"\t\tfirstbytedata: 0x%x\t\tdatsize: %zu\n\n",
|
||||
detectorHeader.row, (long unsigned int)detectorHeader.frameNumber,
|
||||
detectorHeader.expLength, detectorHeader.packetNumber,
|
||||
(long unsigned int)detectorHeader.bunchId,
|
||||
detectorHeader.column, detectorHeader.row,
|
||||
(long unsigned int)detectorHeader.frameNumber, detectorHeader.expLength,
|
||||
detectorHeader.packetNumber, (long unsigned int)detectorHeader.bunchId,
|
||||
(long unsigned int)detectorHeader.timestamp, detectorHeader.modId,
|
||||
detectorHeader.row, detectorHeader.column, detectorHeader.reserved,
|
||||
detectorHeader.debug, detectorHeader.roundRNumber,
|
||||
|
Reference in New Issue
Block a user