Project
Loading...
Searching...
No Matches
LinkRecord.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 ALICEO2_TRD_LINKRECORD_H
13#define ALICEO2_TRD_LINKRECORD_H
14
15#include <iosfwd>
16#include "Rtypes.h"
20
21namespace o2
22{
23
24namespace trd
25{
26
31{
33
34 public:
35 LinkRecord() = default;
36 LinkRecord(const uint32_t linkid, int firstentry, int nentries) : mDataRange(firstentry, nentries) { mLinkId = linkid; }
37 // LinkRecord(const LinkRecord::LinkId linkid, int firstentry, int nentries) : mDataRange(firstentry, nentries) {mLinkId.word=linkid.word;}
38 LinkRecord(uint32_t sector, int stack, int layer, int side, int firstentry, int nentries) : mDataRange(firstentry, nentries) { setLinkId(sector, stack, layer, side); }
39
40 ~LinkRecord() = default;
41
42 void setLinkId(const uint32_t linkid) { mLinkId = linkid; }
43 void setLinkId(const uint32_t sector, const uint32_t stack, const uint32_t layer, const uint32_t side);
44 void setDataRange(int firstentry, int nentries) { mDataRange.set(firstentry, nentries); }
45 void setIndexFirstObject(int firstentry) { mDataRange.setFirstEntry(firstentry); }
46 void setNumberOfObjects(int nentries) { mDataRange.setEntries(nentries); }
47 void setSector(const int sector) { mLinkId |= ((sector << supermodulebs) & supermodulemask); }
48 void setStack(const int stack) { mLinkId |= ((stack << stackbs) & stackmask); }
49 void setLayer(const int layer) { mLinkId |= ((layer << layerbs) & layermask); }
50 void setSide(const int side) { mLinkId |= ((side << sidebs) & sidemask); }
51 void setSpare(const int spare = 0) { mLinkId |= ((spare << sparebs) & sparemask); }
52
53 uint32_t getLinkId() const { return mLinkId; }
54 //TODO come backwith a ccdb lookup. const uint32_t getLinkHCID() { return mLinkId & 0x7ff; } // the last 11 bits.
55 uint32_t getSector() const { return (mLinkId & supermodulemask) >> supermodulebs; }
56 uint32_t getStack() const { return (mLinkId & stackmask) >> stackbs; }
57 uint32_t getLayer() const { return (mLinkId & layermask) >> layerbs; }
58 uint32_t getSide() const { return (mLinkId & sidemask) >> sidebs; }
59 int getNumberOfObjects() const { return mDataRange.getEntries(); }
60 int getFirstEntry() const { return mDataRange.getFirstEntry(); }
61 static uint32_t getHalfChamberLinkId(uint32_t detector, uint32_t rob);
62 static uint32_t getHalfChamberLinkId(uint32_t sector, uint32_t stack, uint32_t layer, uint32_t side);
63
64 void printStream(std::ostream& stream);
65 // bit masks for the above raw data;
66 static constexpr uint64_t sparemask = 0x000f;
67 static constexpr uint64_t sidemask = 0x0010;
68 static constexpr uint64_t layermask = 0x00e0;
69 static constexpr uint64_t stackmask = 0x0700;
70 static constexpr uint64_t supermodulemask = 0xf800;
71 //bit shifts for the above raw data
72 static constexpr uint64_t sparebs = 0;
73 static constexpr uint64_t sidebs = 4;
74 static constexpr uint64_t layerbs = 5;
75 static constexpr uint64_t stackbs = 8;
76 static constexpr uint64_t supermodulebs = 11;
77
78 private:
79 uint16_t mLinkId;
80 DataRange mDataRange;
81 ClassDefNV(LinkRecord, 3);
82};
83
84std::ostream& operator<<(std::ostream& stream, LinkRecord& trg);
85
86extern void buildTrackletHCHeader(TrackletHCHeader& header, int sector, int stack, int layer, int side, int chipclock, int format);
87extern void buildTrakcletHCHeader(TrackletHCHeader& header, int detector, int rob, int chipclock, int format);
88
89} // namespace trd
90} // namespace o2
91
92#endif
uint16_t rob
Class to refer to the 1st entry and N elements of some group in the continuous container.
uint32_t side
Definition RawData.h:0
uint32_t stack
Definition RawData.h:1
Header for data corresponding to the indexing of the links in the raw data output adapted from DataFo...
Definition LinkRecord.h:31
static constexpr uint64_t layerbs
Definition LinkRecord.h:74
static constexpr uint64_t stackbs
Definition LinkRecord.h:75
void setSector(const int sector)
Definition LinkRecord.h:47
void setDataRange(int firstentry, int nentries)
Definition LinkRecord.h:44
static constexpr uint64_t stackmask
Definition LinkRecord.h:69
void setLinkId(const uint32_t linkid)
Definition LinkRecord.h:42
uint32_t getSector() const
Definition LinkRecord.h:55
void setNumberOfObjects(int nentries)
Definition LinkRecord.h:46
int getFirstEntry() const
Definition LinkRecord.h:60
uint32_t getLayer() const
Definition LinkRecord.h:57
uint32_t getStack() const
Definition LinkRecord.h:56
uint32_t getLinkId() const
Definition LinkRecord.h:53
void setLayer(const int layer)
Definition LinkRecord.h:49
void setIndexFirstObject(int firstentry)
Definition LinkRecord.h:45
uint32_t getSide() const
Definition LinkRecord.h:58
static constexpr uint64_t supermodulemask
Definition LinkRecord.h:70
LinkRecord(const uint32_t linkid, int firstentry, int nentries)
Definition LinkRecord.h:36
int getNumberOfObjects() const
Definition LinkRecord.h:59
static constexpr uint64_t layermask
Definition LinkRecord.h:68
static constexpr uint64_t sparebs
Definition LinkRecord.h:72
LinkRecord(uint32_t sector, int stack, int layer, int side, int firstentry, int nentries)
Definition LinkRecord.h:38
static uint32_t getHalfChamberLinkId(uint32_t detector, uint32_t rob)
void setSpare(const int spare=0)
Definition LinkRecord.h:51
static constexpr uint64_t sidemask
Definition LinkRecord.h:67
void printStream(std::ostream &stream)
static constexpr uint64_t sparemask
Definition LinkRecord.h:66
static constexpr uint64_t supermodulebs
Definition LinkRecord.h:76
void setSide(const int side)
Definition LinkRecord.h:50
static constexpr uint64_t sidebs
Definition LinkRecord.h:73
void setStack(const int stack)
Definition LinkRecord.h:48
GLenum GLuint GLint GLint layer
Definition glcorearb.h:1310
GLuint GLuint stream
Definition glcorearb.h:1806
GLint GLint GLsizei GLint GLenum format
Definition glcorearb.h:275
void buildTrackletHCHeader(TrackletHCHeader &header, int sector, int stack, int layer, int side, int chipclock, int format)
void buildTrakcletHCHeader(TrackletHCHeader &header, int detector, int rob, int chipclock, int format)
std::ostream & operator<<(std::ostream &stream, const Digit &d)
Definition Digit.cxx:78
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
Header for each half chamber.
Definition RawData.h:129