Project
Loading...
Searching...
No Matches
testRawData.cxx
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
15
16#define BOOST_TEST_MODULE Test TRD_RawDataHeader
17#define BOOST_TEST_MAIN
18#define BOOST_TEST_DYN_LINK
19#include <boost/test/unit_test.hpp>
20#include <cstdlib>
21#include <fstream>
22#include <iostream>
23#include <sstream>
24#include <string>
27
28namespace o2
29{
30namespace trd
31{
32
34//
36BOOST_AUTO_TEST_CASE(TRDRawDataHeaderSizes)
37{
38 //check the sizes of header structs due to packing
43}
44
45BOOST_AUTO_TEST_CASE(TRDRawDataHeaderInternals)
46{
48 o2::trd::HalfCRUHeader halfcruheader;
49 // changed as now nothing spans a 32 or 16 bit boundary
50 halfcruheader.word0 = 0x22200; //bc is at 0x0000000fff00
51 BOOST_CHECK_EQUAL(halfcruheader.BunchCrossing, 0x222);
52 halfcruheader.word0 = 0x00000077; //headerversion is at 0x000000000
53 BOOST_CHECK_EQUAL(halfcruheader.HeaderVersion, 119);
54 //error flags
55 halfcruheader.word12[0] = 0xa02;
56 halfcruheader.word12[1] = 0xab0000;
57 BOOST_CHECK_EQUAL(halfcruheader.errorflags[0].errorflag, 2);
58 BOOST_CHECK_EQUAL(halfcruheader.errorflags[1].errorflag, 0xa);
59 halfcruheader.word12[1] = 0x00ed000000000000; // should link 14 error flags.
60 BOOST_CHECK_EQUAL(halfcruheader.errorflags[14].errorflag, 0xed);
61 BOOST_CHECK_EQUAL(halfcruheader.errorflags[14].errorflag, o2::trd::getHalfCRULinkErrorFlag(halfcruheader, 14));
62 //datasizes
63 halfcruheader.word47[0] = 0xbdbd;
64 BOOST_CHECK_EQUAL(halfcruheader.datasizes[0].size, 0xbdbd);
65 BOOST_CHECK_EQUAL(halfcruheader.datasizes[0].size, o2::trd::getHalfCRULinkDataSize(halfcruheader, 0));
66 halfcruheader.word47[1] = 0xabcd;
67 BOOST_CHECK_EQUAL(halfcruheader.datasizes[4].size, 0xabcd);
68 BOOST_CHECK_EQUAL(halfcruheader.datasizes[4].size, o2::trd::getHalfCRULinkDataSize(halfcruheader, 4));
69 halfcruheader.word47[2] = 0xaaade127;
70 BOOST_CHECK_EQUAL(halfcruheader.datasizes[8].size, 0xe127);
71 BOOST_CHECK_EQUAL(halfcruheader.datasizes[8].size, o2::trd::getHalfCRULinkDataSize(halfcruheader, 8));
72 halfcruheader.word47[3] = 0xefaadebc0000;
73 BOOST_CHECK_EQUAL(halfcruheader.datasizes[14].size, 0xefaa);
74 BOOST_CHECK_EQUAL(halfcruheader.datasizes[14].size, o2::trd::getHalfCRULinkDataSize(halfcruheader, 14));
75 o2::trd::TrackletMCMHeader mcmrawdataheader;
76 mcmrawdataheader.word = 0x78000000;
77 BOOST_CHECK_EQUAL(mcmrawdataheader.padrow, 15);
78 mcmrawdataheader.word = 0x06000000;
79 BOOST_CHECK_EQUAL(mcmrawdataheader.col, 3);
80 mcmrawdataheader.word = 0x01fe0000;
81 BOOST_CHECK_EQUAL(mcmrawdataheader.pid2, 0xff); // 8 bits
82 mcmrawdataheader.word = 0x01fe;
83 BOOST_CHECK_EQUAL(mcmrawdataheader.pid0, 0xff); // 8 bits
84 //check tracklet
85 tracklet.word = 0xffe00000;
86 BOOST_CHECK_EQUAL((uint32_t)tracklet.pos, 0x7ff);
87
88 // This will get expanded, for now just check the current changes to charges.
89 // build a tracklet package of ff00ff
90 TrackletHCHeader hcheader;
91 hcheader.word = 0;
92 constructTrackletHCHeader(hcheader, 42, 42, 3); //only thing important is the format of 3
93 // hcid=42, clock=42
94 TrackletMCMHeader header;
95 header.word = 0;
96 header.onea = 1;
97 header.oneb = 1;
98 header.padrow = 2;
99 header.col = 1;
100 header.pid0 = 0xff;
101 header.pid1 = 0x02;
102 header.pid2 = 0xff;
103 std::array<TrackletMCMData, 3> tracklets;
104 tracklets[0].word = 0;
105 tracklets[0].pos = 42;
106 tracklets[0].slope = 24;
107 tracklets[0].checkbit = 1;
108 tracklets[0].pid = 0xefe;
109 tracklets[1].word = 0;
110 tracklets[2].word = 0;
111 std::array<uint8_t, 3> charges;
112 // auto invalidheader = getChargesFromRawHeaders(hcheader, &header, tracklets, charges, 0);
113 // auto trackletcount = getNumberOfTrackletsFromHeader(&header);
114
115 // BOOST_CHECK(trackletcount == 1);
116 // BOOST_CHECK(invalidheader == 0);
117 // std::cout << std::hex << " charges[0]:0x"<<(int)charges[0];
118 // std::cout << std::hex << " charges[1]:0x"<<(int)charges[1];
119 // std::cout << std::hex << " charges[2]:0x"<<(int)charges[2];
120 // BOOST_CHECK((int)charges[2] == 0x02);
121}
122} // namespace trd
123} // namespace o2
uint8_t getHalfCRULinkErrorFlag(const HalfCRUHeader &cruhead, const uint32_t link)
Definition RawData.cxx:115
void constructTrackletHCHeader(TrackletHCHeader &header, int hcid, int chipclock, int format)
Definition RawData.cxx:170
uint16_t getHalfCRULinkDataSize(const HalfCRUHeader &cruhead, const uint32_t link)
Definition RawData.cxx:124
BOOST_AUTO_TEST_CASE(TRDDigit_test)
Definition testDigit.cxx:48
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
Header for half a cru, each cru has 2 output, 1 for each pciid.
Definition RawData.h:35
uint64_t BunchCrossing
Definition RawData.h:89
uint64_t word12[2]
Definition RawData.h:98
uint64_t HeaderVersion
Definition RawData.h:88
uint64_t word47[4]
Definition RawData.h:114
Header for each half chamber.
Definition RawData.h:129
Header for MCM tracklet data outuput.
Definition RawData.h:162
BOOST_CHECK_EQUAL(triggersD.size(), triggers.size())
std::vector< Tracklet64 > tracklets