BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
Timeslice.h
Go to the documentation of this file.
1// Copyright 2013 Jan de Cuveland <cmail@cuveland.de>
2/// \file
3/// \brief Defines the fles::Timeslice abstract base class.
4#ifndef FLES_TIMESLICE_H
5#define FLES_TIMESLICE_H
6
8#include "MicrosliceView.h"
10#include "TimesliceDescriptor.h"
11
12#include <boost/serialization/access.hpp>
13#include <fstream>
14#include <vector>
15// Note: <fstream> has to precede boost/serialization includes for non-obvious
16// reasons to avoid segfault similar to
17// http://lists.debian.org/debian-hppa/2009/11/msg00069.html
18
19namespace fles
20{
21
22/**
23 * \brief The Timeslice class provides read access to the data of a timeslice.
24 *
25 * This class is an abstract base class for all classes providing access to the
26 * contents of a single timeslice.
27 */
29{
30 public:
31 virtual ~Timeslice() = default;
32
33 /// Retrieve the timeslice index.
34 uint64_t index() const { return timeslice_descriptor_.index; }
35
36 /// Retrieve the number of core microslices.
37 uint64_t num_core_microslices() const { return timeslice_descriptor_.num_core_microslices; }
38
39 /// Retrieve the total number of microslices.
40 uint64_t num_microslices(uint64_t component) const { return desc_ptr_[component]->num_microslices; }
41
42 /// Retrieve the number of components (contributing input channels).
43 uint64_t num_components() const { return timeslice_descriptor_.num_components; }
44
45 /// Retrieve a pointer to the data content of a given microslice
46 const uint8_t* content(uint64_t component, uint64_t microslice) const
47 {
48 return data_ptr_[component] + desc_ptr_[component]->num_microslices * sizeof(MicrosliceDescriptor)
49 + descriptor(component, microslice).offset - descriptor(component, 0).offset;
50 }
51
52 /// Retrieve the descriptor of a given microslice
53 const MicrosliceDescriptor& descriptor(uint64_t component, uint64_t microslice) const
54 {
55 return reinterpret_cast<const MicrosliceDescriptor*>(data_ptr_[component])[microslice];
56 }
57
58 /// Retrieve the descriptor and pointer to the data of a given microslice
59 const MicrosliceView get_microslice(uint64_t component, uint64_t microslice_index) const
60 {
61 uint8_t* component_data_ptr = data_ptr_[component];
62
63 MicrosliceDescriptor& dd = reinterpret_cast<MicrosliceDescriptor*>(component_data_ptr)[microslice_index];
64
65 MicrosliceDescriptor& dd0 = reinterpret_cast<MicrosliceDescriptor*>(component_data_ptr)[0];
66
67 uint8_t* cc = component_data_ptr + desc_ptr_[component]->num_microslices * sizeof(MicrosliceDescriptor)
68 + dd.offset - dd0.offset;
69
70 return MicrosliceView(dd, cc);
71 }
72
73 protected:
74 // Timeslice(){};
75
76 // friend class StorableTimeslice;
77
78 /// The timeslice descriptor.
80
81 /// A vector of pointers to the data content, one per timeslice component.
82 std::vector<uint8_t*> data_ptr_;
83
84 /// \brief A vector of pointers to the microslice descriptors, one per
85 /// timeslice component.
86 std::vector<TimesliceComponentDescriptor*> desc_ptr_;
87};
88
89} // namespace fles
90
91#endif // FLES_TIMESLICE_H
The MicrosliceView class provides read access to a microslice stored elsewhere.
The Timeslice class provides read access to the data of a timeslice.
Definition Timeslice.h:29
uint64_t num_components() const
Retrieve the number of components (contributing input channels).
Definition Timeslice.h:43
virtual ~Timeslice()=default
uint64_t num_microslices(uint64_t component) const
Retrieve the total number of microslices.
Definition Timeslice.h:40
const MicrosliceDescriptor & descriptor(uint64_t component, uint64_t microslice) const
Retrieve the descriptor of a given microslice.
Definition Timeslice.h:53
const uint8_t * content(uint64_t component, uint64_t microslice) const
Retrieve a pointer to the data content of a given microslice.
Definition Timeslice.h:46
TimesliceDescriptor timeslice_descriptor_
The timeslice descriptor.
Definition Timeslice.h:79
std::vector< uint8_t * > data_ptr_
A vector of pointers to the data content, one per timeslice component.
Definition Timeslice.h:82
uint64_t num_core_microslices() const
Retrieve the number of core microslices.
Definition Timeslice.h:37
std::vector< TimesliceComponentDescriptor * > desc_ptr_
A vector of pointers to the microslice descriptors, one per timeslice component.
Definition Timeslice.h:86
const MicrosliceView get_microslice(uint64_t component, uint64_t microslice_index) const
Retrieve the descriptor and pointer to the data of a given microslice.
Definition Timeslice.h:59
uint64_t index() const
Retrieve the timeslice index.
Definition Timeslice.h:34
Defines the fles::MicrosliceDescriptor struct and corresponding enums.
Defines the fles::MicrosliceView class.
Defines the fles::TimesliceComponentDescriptor serializable struct.
Defines the fles::TimesliceDescriptor serializable struct.
Main FLES namespace.
Microslice descriptor struct.
uint64_t offset
Offset in event buffer (bytes).
Timeslice descriptor struct.