mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-07 02:20:42 +02:00
bug fix command line patnloops should print in decimal, receiver ctb: added p option to print data for debugging, fixed initializing of result in memory
This commit is contained in:
parent
67eef8ba75
commit
18558e1288
@ -5381,7 +5381,7 @@ std::string slsDetectorCommand::cmdPattern(int narg, char *args[], int action, i
|
|||||||
}
|
}
|
||||||
|
|
||||||
auto r = myDet->getPatternLoops(0, detPos);
|
auto r = myDet->getPatternLoops(0, detPos);
|
||||||
os << std::hex << r[2];
|
os << std::dec << r[2];
|
||||||
} else if (cmd == "patnloop1") {
|
} else if (cmd == "patnloop1") {
|
||||||
|
|
||||||
start = -1;
|
start = -1;
|
||||||
@ -5398,7 +5398,7 @@ std::string slsDetectorCommand::cmdPattern(int narg, char *args[], int action, i
|
|||||||
}
|
}
|
||||||
|
|
||||||
auto r = myDet->getPatternLoops(1, detPos);
|
auto r = myDet->getPatternLoops(1, detPos);
|
||||||
os << std::hex << r[2];
|
os << std::dec << r[2];
|
||||||
|
|
||||||
} else if (cmd == "patnloop2") {
|
} else if (cmd == "patnloop2") {
|
||||||
|
|
||||||
@ -5416,7 +5416,7 @@ std::string slsDetectorCommand::cmdPattern(int narg, char *args[], int action, i
|
|||||||
}
|
}
|
||||||
|
|
||||||
auto r = myDet->getPatternLoops(2, detPos);
|
auto r = myDet->getPatternLoops(2, detPos);
|
||||||
os << std::hex << r[2];
|
os << std::dec << r[2];
|
||||||
|
|
||||||
} else if (cmd == "patwait0") {
|
} else if (cmd == "patwait0") {
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
bool keeprunning;
|
bool keeprunning;
|
||||||
int ctbOffset = 0;
|
int ctbOffset = 0;
|
||||||
|
bool printData = false;
|
||||||
|
|
||||||
void sigInterruptHandler(int p){
|
void sigInterruptHandler(int p){
|
||||||
keeprunning = false;
|
keeprunning = false;
|
||||||
@ -32,13 +32,12 @@ void GetData(char* metadata, char* datapointer, uint32_t& datasize, void* p) {
|
|||||||
constexpr int numCounters = numSamples * 2; // 2 strips
|
constexpr int numCounters = numSamples * 2; // 2 strips
|
||||||
// validate datasize
|
// validate datasize
|
||||||
{
|
{
|
||||||
FILE_LOG(logDEBUG) << "Datasize after removing offset:" << datasize;
|
FILE_LOG(logDEBUG) << "Datasize:" << datasize;
|
||||||
const double dataNumSamples =
|
int wordsCaught = (datasize / sizeof(uint64_t)) - ctbOffset;
|
||||||
((double)(datasize - (ctbOffset * sizeof(uint64_t)))/ // datasize without offset
|
int expectedWordSize = numSamples * dynamicRange;
|
||||||
(double)sizeof(uint64_t)) / (double)dynamicRange; // 2304 / 24 = 96
|
if (expectedWordSize != wordsCaught) {
|
||||||
if (dataNumSamples - numSamples) {
|
FILE_LOG(logWARNING) << "Number of words do not match, Expected "
|
||||||
FILE_LOG(logERROR) << "Number of samples do not match, Expected "
|
<< expectedWordSize << ", got " << wordsCaught;
|
||||||
<< numSamples << ", got " << dataNumSamples;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -48,6 +47,7 @@ void GetData(char* metadata, char* datapointer, uint32_t& datasize, void* p) {
|
|||||||
ptr += ctbOffset;
|
ptr += ctbOffset;
|
||||||
// destination
|
// destination
|
||||||
auto result = new int[numCounters];
|
auto result = new int[numCounters];
|
||||||
|
memset((char*)result, 0, numCounters * sizeof(int));
|
||||||
auto strip0 = result;
|
auto strip0 = result;
|
||||||
auto strip1 = strip0 + numSamples;
|
auto strip1 = strip0 + numSamples;
|
||||||
constexpr int bit_index0 = 17;
|
constexpr int bit_index0 = 17;
|
||||||
@ -56,8 +56,8 @@ void GetData(char* metadata, char* datapointer, uint32_t& datasize, void* p) {
|
|||||||
constexpr int mask0 = (1 << bit_index0);
|
constexpr int mask0 = (1 << bit_index0);
|
||||||
constexpr int mask1 = (1 << bit_index1);
|
constexpr int mask1 = (1 << bit_index1);
|
||||||
|
|
||||||
for (int j = 0; j != numSamples; ++j) {
|
for (int j = 0; j < numSamples; ++j) {
|
||||||
for (int i = 0; i != dynamicRange; ++i) {
|
for (int i = 0; i < dynamicRange; ++i) {
|
||||||
int bit0 = (*ptr & mask0) >> bit_index0;
|
int bit0 = (*ptr & mask0) >> bit_index0;
|
||||||
int bit1 = (*ptr++ & mask1) >> bit_index1;
|
int bit1 = (*ptr++ & mask1) >> bit_index1;
|
||||||
*strip0 |= bit0 << i;
|
*strip0 |= bit0 << i;
|
||||||
@ -67,11 +67,16 @@ void GetData(char* metadata, char* datapointer, uint32_t& datasize, void* p) {
|
|||||||
strip1++;
|
strip1++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* for (int i = 0; i < numCounters; ++i) {
|
if (printData) {
|
||||||
cprintf(RED, "%d:%u\t", i, result[i]);
|
slsDetectorDefs::sls_receiver_header* header = (slsDetectorDefs::sls_receiver_header*)metadata;
|
||||||
|
slsDetectorDefs::sls_detector_header detectorHeader = header->detHeader;
|
||||||
|
FILE_LOG(logINFO) << "Frame Number: " << detectorHeader.frameNumber;
|
||||||
|
for (int i = 0; i < numCounters; ++i) {
|
||||||
|
cprintf(MAGENTA, "%d:%u\t", i, result[i]);
|
||||||
}
|
}
|
||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
*/
|
}
|
||||||
|
|
||||||
// update the size to be written to file & overwrite data in memory
|
// update the size to be written to file & overwrite data in memory
|
||||||
datasize = numCounters * sizeof(int);
|
datasize = numCounters * sizeof(int);
|
||||||
memcpy(datapointer, (char*)result, datasize);
|
memcpy(datapointer, (char*)result, datasize);
|
||||||
@ -88,6 +93,7 @@ int main(int argc, char *argv[]) {
|
|||||||
//parse command line for config
|
//parse command line for config
|
||||||
static struct option long_options[] = {
|
static struct option long_options[] = {
|
||||||
{"ctb_offset", required_argument, nullptr, 'o'},
|
{"ctb_offset", required_argument, nullptr, 'o'},
|
||||||
|
{"print_data", no_argument, nullptr, 'p'},
|
||||||
{nullptr, 0, nullptr, 0}
|
{nullptr, 0, nullptr, 0}
|
||||||
};
|
};
|
||||||
//initialize global optind variable (required when instantiating multiple receivers in the same process)
|
//initialize global optind variable (required when instantiating multiple receivers in the same process)
|
||||||
@ -96,7 +102,7 @@ int main(int argc, char *argv[]) {
|
|||||||
int option_index = 0;
|
int option_index = 0;
|
||||||
int c = 0;
|
int c = 0;
|
||||||
while ( c != -1 ) {
|
while ( c != -1 ) {
|
||||||
c = getopt_long (argc, argv, "hvf:t:o:", long_options, &option_index);
|
c = getopt_long (argc, argv, "hvf:t:o:p", long_options, &option_index);
|
||||||
// Detect the end of the options.
|
// Detect the end of the options.
|
||||||
if (c == -1)
|
if (c == -1)
|
||||||
break;
|
break;
|
||||||
@ -104,6 +110,9 @@ int main(int argc, char *argv[]) {
|
|||||||
case 'o':
|
case 'o':
|
||||||
sscanf(optarg, "%d", &ctbOffset);
|
sscanf(optarg, "%d", &ctbOffset);
|
||||||
break;
|
break;
|
||||||
|
case 'p':
|
||||||
|
printData = true;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -112,6 +121,7 @@ int main(int argc, char *argv[]) {
|
|||||||
#ifdef MYTHEN302
|
#ifdef MYTHEN302
|
||||||
FILE_LOG(logINFOGREEN) << "Mythen 302 Receiver";
|
FILE_LOG(logINFOGREEN) << "Mythen 302 Receiver";
|
||||||
FILE_LOG(logINFO) << "CTB Offset: " << ctbOffset;
|
FILE_LOG(logINFO) << "CTB Offset: " << ctbOffset;
|
||||||
|
FILE_LOG(logINFO) << "Print Data: " << printData;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
keeprunning = true;
|
keeprunning = true;
|
||||||
|
@ -44,7 +44,7 @@ slsReceiver::slsReceiver(int argc, char *argv[]):
|
|||||||
int c = 0;
|
int c = 0;
|
||||||
|
|
||||||
while ( c != -1 ){
|
while ( c != -1 ){
|
||||||
c = getopt_long (argc, argv, "hvf:t:o:", long_options, &option_index);
|
c = getopt_long (argc, argv, "hvf:t:o:p", long_options, &option_index);
|
||||||
|
|
||||||
// Detect the end of the options.
|
// Detect the end of the options.
|
||||||
if (c == -1)
|
if (c == -1)
|
||||||
@ -53,6 +53,7 @@ slsReceiver::slsReceiver(int argc, char *argv[]):
|
|||||||
switch(c){
|
switch(c){
|
||||||
// reserved for ctb receiver users
|
// reserved for ctb receiver users
|
||||||
case 'o':
|
case 'o':
|
||||||
|
case 'p':
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 't':
|
case 't':
|
||||||
|
Loading…
x
Reference in New Issue
Block a user