Skip to content

Commit a93eebb

Browse files
Sebastian Klewinsawenzel
authored andcommitted
ADC clock check in RawReader
1 parent 6b27034 commit a93eebb

File tree

3 files changed

+78
-30
lines changed

3 files changed

+78
-30
lines changed

Detectors/TPC/monitor/macro/RunCompareMode3.C

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ void RunCompareMode3(TString fileInfo)
3131
logger->SetLogScreenLevel("INFO");
3232

3333
auto arrData = fileInfo.Tokenize("; ");
34+
uint64_t checkedAdcValues = 0;
3435
for (auto o : *arrData) {
3536
const TString& data = static_cast<TObjString*>(o)->String();
3637
LOG(INFO) << "Checking file " << data.Data() << FairLogger::endl;
@@ -80,38 +81,39 @@ void RunCompareMode3(TString fileInfo)
8081
PadPos padPos;
8182
while (std::shared_ptr<std::vector<uint16_t>> dataRaw = rawReaderRaw.getNextData(padPos)) {
8283
std::shared_ptr<std::vector<uint16_t>> dataDec = rawReaderDec.getData(padPos);
83-
if ( (*dataRaw) != (*dataDec) ){
84-
85-
if (dataDec->size() - dataRaw->size() == 2) {
86-
for (int i = 0; i < std::min(dataDec->size(),dataRaw->size()); ++i){
87-
if (dataRaw->at(i) - dataDec->at(i+1) != 0) {
88-
LOG(ERROR) << "Data is not equal in event " << ev
89-
<< " for pad " << (int)padPos.getPad()
90-
<< " in row " << (int)padPos.getRow()
91-
<< " in timebin " << i
92-
<< " RawVec size: " << dataRaw->size()
93-
<< " DecVec size: " << dataDec->size()
94-
<< FairLogger:: endl;
95-
LOG(ERROR) << "Raw: " << dataRaw->at(i) << " \tDec: " << dataDec->at(i) << FairLogger::endl;
96-
}
84+
if (dataDec->size() - dataRaw->size() == 2) {
85+
for (int i = 0; i < std::min(dataDec->size(),dataRaw->size()); ++i) {
86+
++checkedAdcValues;
87+
if (dataRaw->at(i) - dataDec->at(i+1) != 0) {
88+
LOG(ERROR) << "Data is not equal in event " << ev
89+
<< " for pad " << (int)padPos.getPad()
90+
<< " in row " << (int)padPos.getRow()
91+
<< " in timebin " << i
92+
<< " RawVec size: " << dataRaw->size()
93+
<< " DecVec size: " << dataDec->size()
94+
<< FairLogger:: endl;
95+
LOG(ERROR) << "Raw: " << dataRaw->at(i) << " \tDec: " << dataDec->at(i) << FairLogger::endl;
9796
}
98-
} else {
99-
for (int i = 0; i < std::min(dataDec->size(),dataRaw->size()); ++i){
100-
if (dataRaw->at(i) - dataDec->at(i) != 0) {
101-
LOG(ERROR) << "Data is not equal in event " << ev
102-
<< " for pad " << (int)padPos.getPad()
103-
<< " in row " << (int)padPos.getRow()
104-
<< " in timebin " << i
105-
<< " RawVec size: " << dataRaw->size()
106-
<< " DecVec size: " << dataDec->size()
107-
<< FairLogger:: endl;
108-
LOG(ERROR) << "Raw: " << dataRaw->at(i) << " \tDec: " << dataDec->at(i) << FairLogger::endl;
109-
}
97+
}
98+
} else {
99+
for (int i = 0; i < std::min(dataDec->size(),dataRaw->size()); ++i){
100+
++checkedAdcValues;
101+
if (dataRaw->at(i) - dataDec->at(i) != 0) {
102+
LOG(ERROR) << "Data is not equal in event " << ev
103+
<< " for pad " << (int)padPos.getPad()
104+
<< " in row " << (int)padPos.getRow()
105+
<< " in timebin " << i
106+
<< " RawVec size: " << dataRaw->size()
107+
<< " DecVec size: " << dataDec->size()
108+
<< FairLogger:: endl;
109+
LOG(ERROR) << "Raw: " << dataRaw->at(i) << " \tDec: " << dataDec->at(i) << FairLogger::endl;
110110
}
111111
}
112112
}
113113
}
114114
}
115+
LOG(INFO) << "Compared " << (double)checkedAdcValues/1000000 << "M ADC values in total" << FairLogger::endl;
115116
}
117+
LOG(INFO) << "Compared " << (double)checkedAdcValues/1000000 << "M ADC values in total" << FairLogger::endl;
116118
}
117119

Detectors/TPC/reconstruction/include/TPCReconstruction/RawReader.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,8 @@ class RawReader {
146146
void setApplyChannelMask(bool val) { mApplyChannelMask = val; };
147147
void setChannelMask(std::shared_ptr<CalDet<bool>> channelMask) { mChannelMask = channelMask; };
148148

149+
void setCheckAdcClock(bool val) { mCheckAdcClock = val; };
150+
149151
std::shared_ptr<std::vector<EventInfo>> getEventInfo(uint64_t event) const;
150152

151153
private:
@@ -157,6 +159,7 @@ class RawReader {
157159
int mLink; ///< FEC of the data
158160
bool mUseRawInMode3; ///< in readout mode 3 decode GBT frames
159161
bool mApplyChannelMask; ///< apply channel mask
162+
bool mCheckAdcClock; ///< check the ADC clock
160163
int64_t mLastEvent; ///< Number of last loaded event
161164
std::array<uint64_t,5> mTimestampOfFirstData; ///< Time stamp of first decoded ADC value, individually for each half sampa
162165
std::map<uint64_t, std::shared_ptr<std::vector<EventInfo>>> mEvents; ///< all "event data" - headers, file path, etc. NOT actual data

Detectors/TPC/reconstruction/src/RawReader.cxx

Lines changed: 47 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@
44
#include <boost/tokenizer.hpp>
55
#include <boost/lexical_cast.hpp>
66
#include <iostream>
7+
#include <bitset>
78
#include <queue>
89

910
#include "TPCReconstruction/RawReader.h"
1011
#include "TPCReconstruction/GBTFrame.h"
1112
#include "TPCReconstruction/SyncPatternMonitor.h"
13+
#include "TPCReconstruction/AdcClockMonitor.h"
1214
#include "TPCBase/Mapper.h"
1315

1416
#include "FairLogger.h"
@@ -21,6 +23,7 @@ RawReader::RawReader(int region, int link)
2123
, mLastEvent(-1)
2224
, mUseRawInMode3(true)
2325
, mApplyChannelMask(false)
26+
, mCheckAdcClock(true)
2427
, mTimestampOfFirstData({0,0,0,0,0})
2528
, mEvents()
2629
, mData()
@@ -291,10 +294,17 @@ bool RawReader::decodeRawGBTFrames(EventInfo eventInfo) {
291294

292295
std::array<SyncPatternMonitor,5> syncMon{
293296
SyncPatternMonitor(0,0),
294-
SyncPatternMonitor(0,1),
295-
SyncPatternMonitor(1,0),
296-
SyncPatternMonitor(1,1),
297-
SyncPatternMonitor(2,0)};
297+
SyncPatternMonitor(0,1),
298+
SyncPatternMonitor(1,0),
299+
SyncPatternMonitor(1,1),
300+
SyncPatternMonitor(2,0)};
301+
std::array<AdcClockMonitor,3> adcClockMon{
302+
AdcClockMonitor(0),
303+
AdcClockMonitor(1),
304+
AdcClockMonitor(2)};
305+
std::array<bool,3> adcClockFound{false, false, false};
306+
std::array<uint64_t,3> adcSequence{0,0,0};
307+
298308
std::array<short,5> lastSyncPos;
299309
std::array<std::queue<uint16_t>,5> adcValues;
300310
GBTFrame frame;
@@ -363,6 +373,39 @@ bool RawReader::decodeRawGBTFrames(EventInfo eventInfo) {
363373
frame.getHalfWord(2,2),
364374
frame.getHalfWord(2,3))) mSyncPos[4] = syncMon[4].getPosition();
365375

376+
if (mCheckAdcClock) {
377+
adcSequence[0] = (adcSequence[0] << 4) | (frame.getAdcClock(0) & 0xF);
378+
adcSequence[1] = (adcSequence[1] << 4) | (frame.getAdcClock(1) & 0xF);
379+
adcSequence[2] = (adcSequence[2] << 4) | (frame.getAdcClock(2) & 0xF);
380+
// std::cout << std::bitset<4>(frame.getAdcClock(0)) << "\t"
381+
// << std::bitset<4>(frame.getAdcClock(1)) << "\t"
382+
// << std::bitset<4>(frame.getAdcClock(2)) << std::endl;
383+
384+
bool adcCheckErr0 = adcClockMon[0].addSequence(frame.getAdcClock(0));
385+
bool adcCheckErr1 = adcClockMon[1].addSequence(frame.getAdcClock(1));
386+
bool adcCheckErr2 = adcClockMon[2].addSequence(frame.getAdcClock(2));
387+
// std::cout << adcCheckErr0 << " " << adcCheckErr1 << " " << adcCheckErr2 << std::endl;
388+
if (mSyncPos[0] >= 0) adcClockFound[0] = adcClockFound[0] | !adcCheckErr0;
389+
if (mSyncPos[2] >= 0) adcClockFound[1] = adcClockFound[1] | !adcCheckErr1;
390+
if (mSyncPos[4] >= 0) adcClockFound[2] = adcClockFound[2] | !adcCheckErr2;
391+
// std::cout << adcClockFound[0] << " " << adcClockFound[1] << " " << adcClockFound[2] << std::endl;
392+
if(adcClockFound[0] & adcCheckErr0) {
393+
// adcClockFound[0] = false;
394+
LOG(DEBUG) << "ADC clock 0 mon error in " << i << FairLogger::endl;
395+
std::cout << std::bitset<64>(adcSequence[0]) << std::endl;
396+
};
397+
if(adcClockFound[1] & adcCheckErr1) {
398+
// adcClockFound[1] = false;
399+
LOG(DEBUG) << "ADC clock 1 mon error in " << i << FairLogger::endl;
400+
std::cout << std::bitset<64>(adcSequence[1]) << std::endl;
401+
};
402+
if(adcClockFound[2] & adcCheckErr2) {
403+
// adcClockFound[2] = false;
404+
LOG(DEBUG) << "ADC clock 2 mon error in " << i << FairLogger::endl;
405+
std::cout << std::bitset<64>(adcSequence[2]) << std::endl;
406+
};
407+
}
408+
366409
short value1;
367410
short value2;
368411
for (short iHalfSampa = 0; iHalfSampa < 5; ++iHalfSampa) {

0 commit comments

Comments
 (0)