Project
Loading...
Searching...
No Matches
Channel.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#ifndef ALICEO2_EMCAL_CHANNEL_H
12#define ALICEO2_EMCAL_CHANNEL_H
13
14#include <cstdint>
15#include <exception>
16#include <vector>
17#include "Rtypes.h"
19
20namespace o2
21{
22
23namespace emcal
24{
25
46{
47 public:
50 class HardwareAddressError : public std::exception
51 {
52 public:
55
57 ~HardwareAddressError() noexcept override = default;
58
61 const char* what() const noexcept override
62 {
63 return "Hardware address not initialized";
64 }
65 };
66
68 Channel() = default;
69
73 Channel(int32_t hardwareAddress, uint8_t payloadSize) : mHardwareAddress(hardwareAddress),
74 mPayloadSize(payloadSize),
75 mBunches()
76 {
77 }
78
80 ~Channel() = default;
81
84 bool isBadChannel() const { return mBadChannel; }
85
94 uint16_t getHardwareAddress() const { return mHardwareAddress; }
95
98 uint16_t getPayloadSize() const { return mPayloadSize; }
99
102 const std::vector<Bunch>& getBunches() const { return mBunches; }
103
107 int getBranchIndex() const;
108
112 int getFECIndex() const;
113
117 int getAltroIndex() const;
118
122 int getChannelIndex() const;
123
130 void addBunch(const Bunch& bunch) { mBunches.emplace_back(bunch); }
131
134 void setHardwareAddress(uint16_t hardwareAddress) { mHardwareAddress = hardwareAddress; }
135
138 void setPayloadSize(uint8_t payloadSize) { mPayloadSize = payloadSize; }
139
142 void setBadChannel(bool badchannel) { mBadChannel = badchannel; }
143
147 Bunch& createBunch(uint8_t bunchlength, uint8_t starttime);
148
151 static int getHardwareAddressFromChannelHeader(int channelheader) { return channelheader & 0xFFF; };
152
155 static int getPayloadSizeFromChannelHeader(int channelheader) { return (channelheader >> 16) & 0x3FF; }
156
159 static int getBranchIndexFromHwAddress(int hwaddress) { return ((hwaddress >> 11) & 0x1); }
160
163 static int getFecIndexFromHwAddress(int hwaddress) { return ((hwaddress >> 7) & 0xF); }
164
167 static int getAltroIndexFromHwAddress(int hwaddress) { return ((hwaddress >> 4) & 0x7); }
168
171 static int getChannelIndexFromHwAddress(int hwaddress) { return (hwaddress & 0xF); }
172
173 private:
174 int32_t mHardwareAddress = -1;
175 uint16_t mPayloadSize = 0;
176 bool mBadChannel;
177 std::vector<Bunch> mBunches;
178
179 ClassDefNV(Channel, 1);
180};
181
182} // namespace emcal
183} // namespace o2
184
185#endif
ALTRO bunch information.
Definition Bunch.h:40
Handling of uninitialized hardware addresses.
Definition Channel.h:51
const char * what() const noexcept override
Access to error message.
Definition Channel.h:61
~HardwareAddressError() noexcept override=default
Destructor.
HardwareAddressError()=default
Constructor.
ALTRO channel representation.
Definition Channel.h:46
void setPayloadSize(uint8_t payloadSize)
Set the size of the payload in number of 10-bit words.
Definition Channel.h:138
static int getAltroIndexFromHwAddress(int hwaddress)
Extracting ALTRO index from the hardware address.
Definition Channel.h:167
int getBranchIndex() const
Provide the branch index for the current hardware address.
Definition Channel.cxx:15
static int getChannelIndexFromHwAddress(int hwaddress)
Extracting Channel index in FEC from the hardware address.
Definition Channel.h:171
void addBunch(const Bunch &bunch)
Add bunch to the channel.
Definition Channel.h:130
int getChannelIndex() const
Provide the channel index for the current hardware address.
Definition Channel.cxx:39
static int getFecIndexFromHwAddress(int hwaddress)
Extracting FEC index in branch from the hardware address.
Definition Channel.h:163
void setBadChannel(bool badchannel)
Mark the channel status.
Definition Channel.h:142
bool isBadChannel() const
Check whether the channel is bad.
Definition Channel.h:84
uint16_t getPayloadSize() const
Get the size of the payload.
Definition Channel.h:98
static int getHardwareAddressFromChannelHeader(int channelheader)
Extrcting hardware address from the channel header word.
Definition Channel.h:151
uint16_t getHardwareAddress() const
Get the full hardware address.
Definition Channel.h:94
Channel(int32_t hardwareAddress, uint8_t payloadSize)
Constructor initializing hardware address and payload size.
Definition Channel.h:73
int getFECIndex() const
Provide the front-end card index (0-9) in branch for the current hardware address.
Definition Channel.cxx:23
static int getPayloadSizeFromChannelHeader(int channelheader)
Extrcting payload size from the channel header word.
Definition Channel.h:155
int getAltroIndex() const
Provide the altro chip index for the current hardware address.
Definition Channel.cxx:31
Channel()=default
Dummy constructor.
static int getBranchIndexFromHwAddress(int hwaddress)
Extracting branch index from the hardware address.
Definition Channel.h:159
~Channel()=default
Destructor.
const std::vector< Bunch > & getBunches() const
Get list of bunches in the channel.
Definition Channel.h:102
Bunch & createBunch(uint8_t bunchlength, uint8_t starttime)
Create and initialize a new bunch and return reference to it.
Definition Channel.cxx:47
void setHardwareAddress(uint16_t hardwareAddress)
Set the hardware address.
Definition Channel.h:134
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...