BmnRoot
26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Toggle main menu visibility
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
7
#include "
MicrosliceDescriptor.h
"
8
#include "
MicrosliceView.h
"
9
#include "
TimesliceComponentDescriptor.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
19
namespace
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
*/
28
class
Timeslice
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.
79
TimesliceDescriptor
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
fles::MicrosliceView
The MicrosliceView class provides read access to a microslice stored elsewhere.
Definition
MicrosliceView.h:21
fles::Timeslice
The Timeslice class provides read access to the data of a timeslice.
Definition
Timeslice.h:29
fles::Timeslice::num_components
uint64_t num_components() const
Retrieve the number of components (contributing input channels).
Definition
Timeslice.h:43
fles::Timeslice::~Timeslice
virtual ~Timeslice()=default
fles::Timeslice::num_microslices
uint64_t num_microslices(uint64_t component) const
Retrieve the total number of microslices.
Definition
Timeslice.h:40
fles::Timeslice::descriptor
const MicrosliceDescriptor & descriptor(uint64_t component, uint64_t microslice) const
Retrieve the descriptor of a given microslice.
Definition
Timeslice.h:53
fles::Timeslice::content
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
fles::Timeslice::timeslice_descriptor_
TimesliceDescriptor timeslice_descriptor_
The timeslice descriptor.
Definition
Timeslice.h:79
fles::Timeslice::data_ptr_
std::vector< uint8_t * > data_ptr_
A vector of pointers to the data content, one per timeslice component.
Definition
Timeslice.h:82
fles::Timeslice::num_core_microslices
uint64_t num_core_microslices() const
Retrieve the number of core microslices.
Definition
Timeslice.h:37
fles::Timeslice::desc_ptr_
std::vector< TimesliceComponentDescriptor * > desc_ptr_
A vector of pointers to the microslice descriptors, one per timeslice component.
Definition
Timeslice.h:86
fles::Timeslice::get_microslice
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
fles::Timeslice::index
uint64_t index() const
Retrieve the timeslice index.
Definition
Timeslice.h:34
MicrosliceDescriptor.h
Defines the fles::MicrosliceDescriptor struct and corresponding enums.
MicrosliceView.h
Defines the fles::MicrosliceView class.
TimesliceComponentDescriptor.h
Defines the fles::TimesliceComponentDescriptor serializable struct.
TimesliceDescriptor.h
Defines the fles::TimesliceDescriptor serializable struct.
fles
Main FLES namespace.
Definition
ArchiveDescriptor.h:15
fles::MicrosliceDescriptor
Microslice descriptor struct.
Definition
MicrosliceDescriptor.h:99
fles::MicrosliceDescriptor::offset
uint64_t offset
Offset in event buffer (bytes).
Definition
MicrosliceDescriptor.h:109
fles::TimesliceDescriptor
Timeslice descriptor struct.
Definition
TimesliceDescriptor.h:20
decoder
fles_ipc
Timeslice.h
Generated on
for BmnRoot by
1.17.0