DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
WIBtoWIB2.hpp
Go to the documentation of this file.
1
9#ifndef RAWDATAUTILS_INCLUDE_WIBTOWIB2_HPP_
10#define RAWDATAUTILS_INCLUDE_WIBTOWIB2_HPP_
11
12#include <cstdint>
13#include <iostream>
14#include <fstream>
15#include <filesystem>
18
19namespace dunedaq {
20namespace rawdatautils {
21
22fddetdataformats::WIB2Frame
23wibtowib2(fddetdataformats::WIBFrame* fr, uint64_t timestamp=0) {
25 for (int i = 0; i < 256; ++i) {
26 res.set_adc(i, fr->get_channel(i));
27 }
28 auto header = fr->get_wib_header();
29 res.header.version = header->version;
30 res.header.crate = header->crate_no;
31 res.header.slot = header->slot_no;
32 res.header.link = header->fiber_no;
33 res.set_timestamp(timestamp);
34 return res;
35}
36
37void
38wib_binary_to_wib2_binary(std::string& filename, std::string& output) {
39 std::ifstream file(filename.c_str(), std::ios::binary);
40 std::ofstream out(output.c_str(), std::ios::binary);
41 std::cout << "Transforming " << filename << " to " << output << '\n';
42 auto size = std::filesystem::file_size(filename);
43 std::vector<char> v(size);
44 file.read(v.data(), size);
45 file.close();
46 int num_frames = size / sizeof(fddetdataformats::WIBFrame);
47 std::cout << "Number of frames found: "<< num_frames << '\n';
48 auto ptr = reinterpret_cast<fddetdataformats::WIBFrame*>(v.data());
49 uint64_t timestamp = ptr->get_timestamp();
50 while(num_frames--){
51 auto wib2fr = wibtowib2(ptr, timestamp);
52 timestamp += 32;
53 ptr++;
54 out.write(reinterpret_cast<char*>(&wib2fr), sizeof(wib2fr));
55 }
56 out.close();
57}
58
59void
60wib_hdf5_to_wib2_binary(std::string& /*filename*/, std::string& /*output*/) {
61}
62
63
64} // namespace dunedaq::rawdatautils
65}
66
67#endif // RAWDATAUTILS_INCLUDE_WIBTOWIB2_HPP_
Class for accessing raw WIB v2 frames, as used in ProtoDUNE-SP-II.
Definition WIB2Frame.hpp:31
void set_timestamp(const uint64_t new_timestamp)
Set the 64-bit timestamp of the frame.
void set_adc(int i, uint16_t val)
Set the ith ADC value in the frame to val.
const WIBHeader * get_wib_header() const
Definition WIBFrame.hpp:360
uint16_t get_channel(const uint8_t block_num, const uint8_t adc, const uint8_t ch) const
Definition WIBFrame.hpp:381
fddetdataformats::WIB2Frame wibtowib2(fddetdataformats::WIBFrame *fr, uint64_t timestamp=0)
Definition WIBtoWIB2.hpp:23
void wib_hdf5_to_wib2_binary(std::string &, std::string &)
Definition WIBtoWIB2.hpp:60
void wib_binary_to_wib2_binary(std::string &filename, std::string &output)
Definition WIBtoWIB2.hpp:38
Including Qt Headers.
FELIX Initialization std::string initerror FELIX queue timed out
FELIX Initialization std::string initerror FELIX queue timed std::string queuename Unexpected chunk size