Project
Loading...
Searching...
No Matches
DsElecId.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
12#ifndef O2_MCH_RAW_ELECMAP_DS_ELEC_ID_H
13#define O2_MCH_RAW_ELECMAP_DS_ELEC_ID_H
14
15#include <cstdint>
16#include <iosfwd>
17#include <optional>
18
19namespace o2::mch::raw
20{
24{
25 public:
26 explicit DsElecId(uint16_t solarId, uint8_t elinkGroupId, uint8_t elinkIndex);
27
30 constexpr uint8_t elinkIndexInGroup() const
31 {
32 return mElinkIndexInGroup;
33 }
34
37 constexpr uint8_t elinkGroupId() const
38 {
39 return mElinkGroupId;
40 }
41
44 constexpr uint8_t elinkId() const
45 {
46 return mElinkGroupId * 5 + mElinkIndexInGroup;
47 }
48
50 constexpr uint16_t solarId() const
51 {
52 return mSolarId;
53 }
54
55 bool operator<(const DsElecId& rhs) const
56 {
57 if (mSolarId < rhs.mSolarId) {
58 return true;
59 } else if (mElinkIndexInGroup < rhs.mElinkIndexInGroup) {
60 return true;
61 } else if (mElinkGroupId < rhs.mElinkGroupId) {
62 return true;
63 }
64 return false;
65 }
66
67 bool operator==(const DsElecId& rhs) const
68 {
69 return mSolarId == rhs.mSolarId &&
70 mElinkIndexInGroup == rhs.mElinkIndexInGroup &&
71 mElinkGroupId == rhs.mElinkGroupId;
72 }
73 bool operator!=(const DsElecId& rhs) const
74 {
75 return !(*this == rhs);
76 }
77
78 private:
79 uint16_t mSolarId;
80 uint8_t mElinkGroupId; // 0..7
81 uint8_t mElinkIndexInGroup; // 0..4
82};
83
84uint32_t encode(const DsElecId& id);
85
89std::optional<DsElecId> decodeDsElecId(uint32_t code);
90
94std::optional<DsElecId> decodeDsElecId(std::string rep);
95
99std::optional<uint8_t> decodeChannelId(std::string rep);
100
101std::ostream& operator<<(std::ostream& os, const DsElecId& id);
102
104std::string asString(DsElecId dsId);
105
107std::optional<uint8_t> groupFromElinkId(uint8_t elinkId);
108
110std::optional<uint8_t> indexFromElinkId(uint8_t elinkId);
111
112} // namespace o2::mch::raw
113
114#endif
constexpr uint8_t elinkId() const
Definition DsElecId.h:44
bool operator<(const DsElecId &rhs) const
Definition DsElecId.h:55
constexpr uint16_t solarId() const
solarId is an identifier that uniquely identify a solar board
Definition DsElecId.h:50
bool operator==(const DsElecId &rhs) const
Definition DsElecId.h:67
bool operator!=(const DsElecId &rhs) const
Definition DsElecId.h:73
constexpr uint8_t elinkIndexInGroup() const
Definition DsElecId.h:30
constexpr uint8_t elinkGroupId() const
Definition DsElecId.h:37
std::optional< uint8_t > indexFromElinkId(uint8_t elinkId)
Extracts the index from the elinkId.
Definition DsElecId.cxx:132
std::optional< uint8_t > decodeChannelId(std::string rep)
Definition DsElecId.cxx:84
std::optional< uint8_t > groupFromElinkId(uint8_t elinkId)
Extracts the group from the elinkId.
Definition DsElecId.cxx:124
std::string asString(const SampaCluster &sc)
std::optional< DsElecId > decodeDsElecId(uint32_t code)
Definition DsElecId.cxx:37
uint32_t encode(const DsDetId &id)
Create an integer code for the given id.
Definition DsDetId.cxx:28
std::ostream & operator<<(std::ostream &stream, o2::InteractionRecord const &ir)