CbmRoot
Loading...
Searching...
No Matches
trd/ReadoutConfig.h
Go to the documentation of this file.
1/* Copyright (C) 2022-2025 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Volker Friese [committer] */
4
5#pragma once
6
7#include "CbmYaml.h"
8
9#include <map>
10#include <sstream>
11#include <utility>
12#include <vector>
13
14namespace cbm::algo::trd
15{
16
17
29
31
32 public:
35
36
39
40
44 std::vector<uint16_t> GetEquipmentIds();
45
46
51 size_t GetNumCrobs(uint16_t equipmentId);
52
53
59 size_t GetNumElinks(uint16_t equipmentId, uint16_t crobId);
60
61
68 std::pair<int32_t, std::vector<uint32_t>> Map(uint16_t equipId, uint16_t crob, uint16_t elink);
69
73 void SetElinkTimeOffset(uint32_t criid, uint8_t elinkid, int32_t offsetNs);
74
75
79 int32_t GetElinkTimeOffset(uint32_t criid, uint8_t elinkid);
80
82 std::string PrintReadoutMap();
83
84
86 void Init(const std::map<size_t, std::map<size_t, std::map<size_t, size_t>>>& addressMap,
87 std::map<size_t, std::map<size_t, std::map<size_t, std::map<size_t, size_t>>>>& channelMap);
88
90 void SetSystemTimeOffset(int64_t offsetNs) { fSystemTimeOffset = offsetNs; };
91
94
95 private:
96 // --- System time offset
97 int64_t fSystemTimeOffset = 0;
98
99 // --- TRD readout map
100 // --- Map index: (equipment, crob, elink), map value: (ASIC address)
101 std::map<uint16_t, std::vector<std::vector<uint16_t>>> fReadoutMap = {};
102
103 // --- TRD channel map
104 // --- Map index: (equipment, crob, elink, chan), map value: (channel address)
105 std::map<uint16_t, std::vector<std::vector<std::vector<uint32_t>>>> fChannelMap = {};
106
108 std::map<uint32_t, std::vector<int32_t>> fElinkTimeOffsetMap;
109
111 yaml::Property(&ReadoutConfig::fSystemTimeOffset, "timeOffset", "System time offset for TRD1D"),
112 yaml::Property(&ReadoutConfig::fReadoutMap, "readoutMap", "TRD readout map", {}, YAML::Hex),
113 yaml::Property(&ReadoutConfig::fChannelMap, "channelMap", "TRD channel map"),
114 yaml::Property(&ReadoutConfig::fElinkTimeOffsetMap, "elinkTimeOffset", "TRD time offset per CRI&Elink combination")
115 );
116 };
117
118} // namespace cbm::algo::trd
119
#define CBM_YAML_EXTERN_DECL(type)
Declare the external instantiation of the Read and Dump functions for a type.
Definition CbmYaml.h:342
Provides the hardware-to-software address mapping for the CBM-TRD.
size_t GetNumCrobs(uint16_t equipmentId)
Number of CROBS of a component.
void Init(const std::map< size_t, std::map< size_t, std::map< size_t, size_t > > > &addressMap, std::map< size_t, std::map< size_t, std::map< size_t, std::map< size_t, size_t > > > > &channelMap)
Initialisation of readout map.
CBM_YAML_PROPERTIES(yaml::Property(&ReadoutConfig::fSystemTimeOffset, "timeOffset", "System time offset for TRD1D"), yaml::Property(&ReadoutConfig::fReadoutMap, "readoutMap", "TRD readout map", {}, YAML::Hex), yaml::Property(&ReadoutConfig::fChannelMap, "channelMap", "TRD channel map"), yaml::Property(&ReadoutConfig::fElinkTimeOffsetMap, "elinkTimeOffset", "TRD time offset per CRI&Elink combination"))
int32_t GetElinkTimeOffset(uint32_t criid, uint8_t elinkid)
Get the time offeset to be substracted from the digis which come from a specific CRI.
std::vector< uint16_t > GetEquipmentIds()
Equipment in the configuration.
size_t GetNumElinks(uint16_t equipmentId, uint16_t crobId)
Number of elinks of a component - CROB pair.
std::map< uint32_t, std::vector< int32_t > > fElinkTimeOffsetMap
Map to store time offsets for each CRI&Elink combination.
std::string PrintReadoutMap()
Debug output of readout map.
std::map< uint16_t, std::vector< std::vector< std::vector< uint32_t > > > > fChannelMap
void SetSystemTimeOffset(int64_t offsetNs)
Get system time offset.
std::map< uint16_t, std::vector< std::vector< uint16_t > > > fReadoutMap
void SetElinkTimeOffset(uint32_t criid, uint8_t elinkid, int32_t offsetNs)
Register a time offeset to be substracted from the digis which come from a specific CRI.
int64_t GetSystemTimeOffset()
Get system time offset.
std::pair< int32_t, std::vector< uint32_t > > Map(uint16_t equipId, uint16_t crob, uint16_t elink)
API: Mapping from component, crob and elink to pair (ASIC address, channel addresses)