CbmRoot
Loading...
Searching...
No Matches
CbmTbDaqBuffer.cxx
Go to the documentation of this file.
1
/* Copyright (C) 2013-2020 PI-UHd, GSI
2
SPDX-License-Identifier: GPL-3.0-only
3
Authors: Volker Friese, Norbert Herrmann [committer] */
4
9
10
#include "
CbmTbDaqBuffer.h
"
11
12
#include <Logger.h>
// for Logger, LOG
13
14
#include <boost/any.hpp>
15
16
#include <cstddef>
// for NULL
17
#include <iomanip>
// for setprecision, __iom_t5
18
#include <sstream>
// for basic_stringstream<>::string_type
19
20
// ----- Initialisation of static variables ------------------------------
21
CbmTbDaqBuffer
*
CbmTbDaqBuffer::fgInstance
=
nullptr
;
22
// ---------------------------------------------------------------------------
23
24
25
// ----- Constructor -----------------------------------------------------
26
CbmTbDaqBuffer::CbmTbDaqBuffer
() :
fData
() {}
27
// ---------------------------------------------------------------------------
28
29
30
// ----- Destructor ------------------------------------------------------
31
CbmTbDaqBuffer::~CbmTbDaqBuffer
() {}
32
// ---------------------------------------------------------------------------
33
34
Double_t
CbmTbDaqBuffer::GetTimeFirst
()
const
35
{
36
if
(!
GetSize
())
return
-1.;
37
// Return the key from the first element in the map
38
// The key of the map is the time of digi
39
return
fData
.begin()->first;
40
}
41
42
Double_t
CbmTbDaqBuffer::GetTimeLast
()
const
43
{
44
if
(!
GetSize
())
return
-1.;
45
// Return the key from the last element in the map
46
// The key of the map is the time of digi
47
return
(--
fData
.end())->first;
48
}
49
50
// ----- Access to next data ---------------------------------------------
51
CbmTbDaqBuffer::Data
CbmTbDaqBuffer::GetNextData
(Double_t time)
52
{
53
54
// --- Check for empty buffer
55
if
(!
fData
.size())
return
std::make_pair(boost::any(),
ECbmModuleId::kNotExist
);
56
57
// --- Get data from buffer
58
std::multimap<Double_t, std::pair<boost::any, ECbmModuleId>>::iterator it =
fData
.begin();
59
Double_t digi_time = it->first;
60
61
if
(digi_time < time) {
62
boost::any digi = it->second.first;
63
ECbmModuleId
sysID = it->second.second;
64
fData
.erase(it);
65
return
std::make_pair(digi, sysID);
66
}
67
return
std::make_pair(boost::any(),
ECbmModuleId::kNotExist
);
68
}
69
// ---------------------------------------------------------------------------
70
71
// ----- Instance --------------------------------------------------------
72
CbmTbDaqBuffer
*
CbmTbDaqBuffer::Instance
()
73
{
74
if
(!
fgInstance
)
fgInstance
=
new
CbmTbDaqBuffer
();
75
return
fgInstance
;
76
}
77
// ---------------------------------------------------------------------------
78
79
// ----- Print status ----------------------------------------------------
80
void
CbmTbDaqBuffer::PrintStatus
()
const
81
{
82
Int_t
size
=
GetSize
();
83
std::stringstream ss;
84
ss <<
"CbmTbDaqBuffer: Status "
;
85
if
(!
size
) {
86
LOG(info) << ss.str() <<
"empty"
;
87
return
;
88
}
89
LOG(info) << ss.str() <<
GetSize
() <<
" digis from "
<< std::fixed << std::setprecision(9) <<
GetTimeFirst
() * 1.e-9
90
<<
" s to "
<<
GetTimeLast
() * 1.e-9 <<
" s"
;
91
}
92
// ---------------------------------------------------------------------------
ECbmModuleId
ECbmModuleId
Enumerator for module Identifiers.
Definition
CbmDefs.h:45
ECbmModuleId::kNotExist
@ kNotExist
If not found.
Definition
CbmDefs.h:68
CbmTbDaqBuffer.h
size
static constexpr size_t size()
Definition
KfSimdPseudo.h:2
Int_t
int Int_t
Definition
RootTypesDef.h:16
CbmTbDaqBuffer
Singleton buffer class for CBM raw data.
Definition
CbmTbDaqBuffer.h:39
CbmTbDaqBuffer::GetTimeLast
Double_t GetTimeLast() const
Definition
CbmTbDaqBuffer.cxx:42
CbmTbDaqBuffer::CbmTbDaqBuffer
CbmTbDaqBuffer()
Definition
CbmTbDaqBuffer.cxx:26
CbmTbDaqBuffer::GetNextData
Data GetNextData(Double_t time)
Definition
CbmTbDaqBuffer.cxx:51
CbmTbDaqBuffer::fData
std::multimap< Double_t, Data > fData
Definition
CbmTbDaqBuffer.h:89
CbmTbDaqBuffer::Instance
static CbmTbDaqBuffer * Instance()
Definition
CbmTbDaqBuffer.cxx:72
CbmTbDaqBuffer::GetSize
Int_t GetSize() const
Definition
CbmTbDaqBuffer.h:61
CbmTbDaqBuffer::PrintStatus
void PrintStatus() const
Definition
CbmTbDaqBuffer.cxx:80
CbmTbDaqBuffer::GetTimeFirst
Double_t GetTimeFirst() const
Definition
CbmTbDaqBuffer.cxx:34
CbmTbDaqBuffer::fgInstance
static CbmTbDaqBuffer * fgInstance
Definition
CbmTbDaqBuffer.h:93
CbmTbDaqBuffer::~CbmTbDaqBuffer
~CbmTbDaqBuffer()
Definition
CbmTbDaqBuffer.cxx:31
CbmTbDaqBuffer::Data
std::pair< boost::any, ECbmModuleId > Data
Definition
CbmTbDaqBuffer.h:41
MQ
unpacker
CbmTbDaqBuffer.cxx
Generated on Fri Jan 30 2026 23:05:27 for CbmRoot by
1.13.2