mirror of
https://github.com/paulscherrerinstitute/sf_daq_buffer.git
synced 2026-04-30 18:02:23 +02:00
eiger_packet definitions and initial related changes
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
[submodule "slsDetectorPackage"]
|
||||
path = slsDetectorPackage
|
||||
url = https://github.com/slsdetectorgroup/slsDetectorPackage.git
|
||||
@@ -0,0 +1,38 @@
|
||||
#ifndef EIGER_H
|
||||
#define EIGER_H
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
|
||||
#define EIGER_N_MODULES 1
|
||||
#define EIGER_BYTES_PER_PACKET 1072
|
||||
#define EIGER_DATA_BYTES_PER_PACKET 1024
|
||||
#define EIGER_N_PACKETS_PER_FRAME 128
|
||||
#define EIGER_DATA_BYTES_PER_FRAME 131072
|
||||
|
||||
// 48 bytes + 8192 bytes = 8240 bytes
|
||||
#pragma pack(push)
|
||||
#pragma pack(2)
|
||||
struct eiger_packet {
|
||||
uint64_t framenum;
|
||||
uint32_t exptime;
|
||||
uint32_t packetnum;
|
||||
|
||||
double bunchid;
|
||||
uint64_t timestamp;
|
||||
|
||||
uint16_t moduleID;
|
||||
uint16_t xCoord;
|
||||
uint16_t yCoord;
|
||||
uint16_t zCoord;
|
||||
|
||||
uint32_t debug;
|
||||
uint16_t roundRobin;
|
||||
uint8_t detectortype;
|
||||
uint8_t headerVersion;
|
||||
char data[EIGER_DATA_BYTES_PER_PACKET];
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
|
||||
#endif
|
||||
@@ -2,7 +2,7 @@
|
||||
#define SF_DAQ_BUFFER_FORMATS_HPP
|
||||
|
||||
#include "buffer_config.hpp"
|
||||
#include "jungfrau.hpp"
|
||||
#include "eiger.hpp"
|
||||
|
||||
#pragma pack(push)
|
||||
#pragma pack(1)
|
||||
@@ -27,7 +27,7 @@ struct ImageMetadata {
|
||||
#pragma pack(pop)
|
||||
|
||||
struct ModuleFrameBuffer {
|
||||
ModuleFrame module[JUNGFRAU_N_MODULES];
|
||||
ModuleFrame module[EIGER_N_MODULES];
|
||||
};
|
||||
|
||||
#pragma pack(push)
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include "RamBuffer.hpp"
|
||||
#include "buffer_config.hpp"
|
||||
|
||||
|
||||
using namespace std;
|
||||
using namespace buffer_config;
|
||||
|
||||
@@ -100,7 +101,7 @@ char* RamBuffer::read_image(const uint64_t pulse_id,
|
||||
ModuleFrame *frame_meta = src_meta + i_module;
|
||||
|
||||
auto is_good_frame =
|
||||
frame_meta->n_recv_packets == JF_N_PACKETS_PER_FRAME;
|
||||
frame_meta->n_recv_packets == EIGER_N_PACKETS_PER_FRAME;
|
||||
|
||||
if (!is_good_frame) {
|
||||
is_good_image = false;
|
||||
|
||||
@@ -13,7 +13,7 @@ TEST(RamBuffer, simple_store)
|
||||
frame_meta.pulse_id = 123523;
|
||||
frame_meta.daq_rec = 1234;
|
||||
frame_meta.frame_index = 12342300;
|
||||
frame_meta.n_recv_packets = JF_N_PACKETS_PER_FRAME;
|
||||
frame_meta.n_recv_packets = EIGER_N_PACKETS_PER_FRAME;
|
||||
|
||||
auto frame_buffer = make_unique<uint16_t[]>(MODULE_N_PIXELS);
|
||||
|
||||
@@ -25,7 +25,7 @@ TEST(RamBuffer, simple_store)
|
||||
for (int i_module=0; i_module<n_modules; i_module++) {
|
||||
frame_meta.module_id = i_module;
|
||||
|
||||
buffer.write_frame(&frame_meta, (char *) (frame_buffer.get()));
|
||||
buffer.write_frame(frame_meta, (char *) (frame_buffer.get()));
|
||||
}
|
||||
|
||||
ImageMetadata image_meta;
|
||||
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
hostname localhost:2050+
|
||||
0:udp_dstport 50100
|
||||
0:udp_dstport2 50101
|
||||
0:udp_dstip 127.0.0.1
|
||||
0:udp_dstmac 90:1b:0e:19:1c:ae
|
||||
|
||||
0:udp_srcip 129.129.130.177
|
||||
0:udp_srcmac 90:1b:0e:19:1c:ae
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"detector_name": "Eiger",
|
||||
"n_modules": 1,
|
||||
"start_udp_port": 50100
|
||||
}
|
||||
Executable
+30
@@ -0,0 +1,30 @@
|
||||
#!/bin/bash
|
||||
# usage ./start_eiger_detector.sh Eiger 1
|
||||
if [ $# -lt 1 ]
|
||||
then
|
||||
echo "Usage : $0 DETECTOR_NAME <number_of_cycles>"
|
||||
echo " DETECTOR_NAME: Eiger..."
|
||||
echo " number_of_cycles : optional, default 100"
|
||||
exit
|
||||
fi
|
||||
|
||||
SLS_DET_PACKAGE_PATH='/home/hax_l/software/sf_daq_buffer/slsDetectorPackage/build/bin/'
|
||||
|
||||
DETECTOR=$1
|
||||
|
||||
n_cycles=10
|
||||
if [ $# == 2 ]
|
||||
then
|
||||
n_cycles=$2
|
||||
fi
|
||||
|
||||
|
||||
${SLS_DET_PACKAGE_PATH}sls_detector_put timing trigger
|
||||
${SLS_DET_PACKAGE_PATH}sls_detector_put triggers ${n_cycles}
|
||||
${SLS_DET_PACKAGE_PATH}sls_detector_put exptime 0.000005
|
||||
${SLS_DET_PACKAGE_PATH}sls_detector_put frames 1
|
||||
${SLS_DET_PACKAGE_PATH}sls_detector_put dr 16
|
||||
#sls_detector_put ${D}-clearbit to 0x5d 0 # normal mode, not highG0
|
||||
${SLS_DET_PACKAGE_PATH}sls_detector_put start
|
||||
|
||||
echo "Now start trigger"
|
||||
Executable
+22
@@ -0,0 +1,22 @@
|
||||
#!/bin/bash
|
||||
# usage ./start_eiger_detector.sh Eiger 1
|
||||
if [ $# -lt 1 ]
|
||||
then
|
||||
echo "Usage : $0 <port>"
|
||||
echo " DETECTOR_NAME: Eiger"
|
||||
echo " tcp port : optional, default 2000"
|
||||
exit
|
||||
fi
|
||||
|
||||
SLS_DET_PACKAGE_PATH='/home/hax_l/software/sf_daq_buffer/slsDetectorPackage/build/bin/'
|
||||
|
||||
port=2000
|
||||
if [ $# == 2 ]
|
||||
then
|
||||
port=$1
|
||||
fi
|
||||
|
||||
echo "Starting the server..."
|
||||
${SLS_DET_PACKAGE_PATH}eigerDetectorServerMaster_virtual -p port
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ class FrameUdpReceiver {
|
||||
|
||||
PacketUdpReceiver udp_receiver_;
|
||||
|
||||
jungfrau_packet packet_buffer_[buffer_config::BUFFER_UDP_N_RECV_MSG];
|
||||
eiger_packet packet_buffer_[buffer_config::BUFFER_UDP_N_RECV_MSG];
|
||||
iovec recv_buff_ptr_[buffer_config::BUFFER_UDP_N_RECV_MSG];
|
||||
mmsghdr msgs_[buffer_config::BUFFER_UDP_N_RECV_MSG];
|
||||
sockaddr_in sock_from_[buffer_config::BUFFER_UDP_N_RECV_MSG];
|
||||
|
||||
@@ -25,8 +25,8 @@ void FrameStats::reset_counters()
|
||||
|
||||
void FrameStats::record_stats(const ModuleFrame &meta)
|
||||
{
|
||||
if (meta.n_recv_packets < JF_N_PACKETS_PER_FRAME) {
|
||||
n_missed_packets_ += JF_N_PACKETS_PER_FRAME - meta.n_recv_packets;
|
||||
if (meta.n_recv_packets < EIGER_N_PACKETS_PER_FRAME) {
|
||||
n_missed_packets_ += EIGER_N_PACKETS_PER_FRAME - meta.n_recv_packets;
|
||||
n_corrupted_frames_++;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
#include <cstring>
|
||||
#include <jungfrau.hpp>
|
||||
// #include <jungfrau.hpp>
|
||||
#include <eiger.hpp>
|
||||
#include "FrameUdpReceiver.hpp"
|
||||
#include <ostream>
|
||||
#include <iostream>
|
||||
|
||||
using namespace std;
|
||||
using namespace buffer_config;
|
||||
@@ -14,7 +17,7 @@ FrameUdpReceiver::FrameUdpReceiver(
|
||||
|
||||
for (int i = 0; i < BUFFER_UDP_N_RECV_MSG; i++) {
|
||||
recv_buff_ptr_[i].iov_base = (void*) &(packet_buffer_[i]);
|
||||
recv_buff_ptr_[i].iov_len = sizeof(jungfrau_packet);
|
||||
recv_buff_ptr_[i].iov_len = sizeof(eiger_packet);
|
||||
|
||||
msgs_[i].msg_hdr.msg_iov = &recv_buff_ptr_[i];
|
||||
msgs_[i].msg_hdr.msg_iovlen = 1;
|
||||
@@ -40,11 +43,11 @@ inline void FrameUdpReceiver::copy_packet_to_buffers(
|
||||
ModuleFrame& metadata, char* frame_buffer, const int i_packet)
|
||||
{
|
||||
size_t frame_buffer_offset =
|
||||
JUNGFRAU_DATA_BYTES_PER_PACKET * packet_buffer_[i_packet].packetnum;
|
||||
EIGER_DATA_BYTES_PER_PACKET * packet_buffer_[i_packet].packetnum;
|
||||
memcpy(
|
||||
(void*) (frame_buffer + frame_buffer_offset),
|
||||
packet_buffer_[i_packet].data,
|
||||
JUNGFRAU_DATA_BYTES_PER_PACKET);
|
||||
EIGER_DATA_BYTES_PER_PACKET);
|
||||
|
||||
metadata.n_recv_packets++;
|
||||
}
|
||||
@@ -73,10 +76,10 @@ inline uint64_t FrameUdpReceiver::process_packets(
|
||||
}
|
||||
|
||||
copy_packet_to_buffers(metadata, frame_buffer, i_packet);
|
||||
|
||||
|
||||
// Last frame packet received. Frame finished.
|
||||
if (packet_buffer_[i_packet].packetnum ==
|
||||
JF_N_PACKETS_PER_FRAME - 1)
|
||||
EIGER_N_PACKETS_PER_FRAME - 1)
|
||||
{
|
||||
// Buffer is loaded only if this is not the last message.
|
||||
if (i_packet+1 != packet_buffer_n_packets_) {
|
||||
@@ -86,6 +89,10 @@ inline uint64_t FrameUdpReceiver::process_packets(
|
||||
|
||||
// If i_packet is the last packet the buffer is empty.
|
||||
} else {
|
||||
cout << "[FrameUdpReceiver::process_packets] Received final packet of frame: ";
|
||||
cout << packet_buffer_[i_packet].framenum;
|
||||
cout << endl;
|
||||
|
||||
packet_buffer_loaded_ = false;
|
||||
packet_buffer_offset_ = 0;
|
||||
}
|
||||
@@ -106,7 +113,7 @@ uint64_t FrameUdpReceiver::get_frame_from_udp(
|
||||
// Reset the metadata and frame buffer for the next frame.
|
||||
metadata.pulse_id = 0;
|
||||
metadata.n_recv_packets = 0;
|
||||
memset(frame_buffer, 0, JUNGFRAU_DATA_BYTES_PER_FRAME);
|
||||
memset(frame_buffer, 0, EIGER_DATA_BYTES_PER_FRAME);
|
||||
|
||||
// Happens when last packet from previous frame was missed.
|
||||
if (packet_buffer_loaded_) {
|
||||
|
||||
Submodule
+1
Submodule slsDetectorPackage added at 64de9f3ad0
Reference in New Issue
Block a user