Skip to content

Commit 5337cba

Browse files
bazinskidavidrohr
authored andcommitted
TRD fix tracklethcheader in mc to raw
1 parent 3dacfca commit 5337cba

4 files changed

Lines changed: 46 additions & 27 deletions

File tree

DataFormats/Detectors/TRD/include/DataFormatsTRD/RawData.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ struct TrackletHCHeader {
133133
// | | | | | |--- 1-3 stack
134134
// | | | | |------ 4-6 layer
135135
// | | | |-------- 7-11 sector
136-
// | | |------------- 12 always 0
136+
// | | |------------- 12 always 1
137137
// | ----------------------------- 13-27 MCM Clock counter
138138
// --------------------------------- 28-31 tracklet data format number
139139
uint32_t word;
@@ -496,6 +496,7 @@ bool sanityCheckTrackletHCHeader(o2::trd::TrackletHCHeader& header, bool verbose
496496
bool sanityCheckDigitMCMHeader(o2::trd::DigitMCMHeader* header);
497497
bool sanityCheckDigitMCMADCMask(o2::trd::DigitMCMADCMask& mask, int numberofbitsset);
498498
bool sanityCheckDigitMCMWord(o2::trd::DigitMCMData* word, int adcchannel);
499+
void incrementADCMask(DigitMCMADCMask& mask, int channel);
499500
void printDigitMCMHeader(o2::trd::DigitMCMHeader& header);
500501
int getDigitHCHeaderWordType(uint32_t word);
501502
void printDigitHCHeaders(o2::trd::DigitHCHeader& header, uint32_t headers[3], int index, int offset, bool good);
@@ -504,7 +505,7 @@ int getNumberOfTrackletsFromHeader(o2::trd::TrackletMCMHeader* header, bool verb
504505
void setNumberOfTrackletsInHeader(o2::trd::TrackletMCMHeader& header, int numberoftracklets);
505506
int getNextMCMADCfromBP(uint32_t& bp, int channel);
506507

507-
inline bool isTrackletHCHeader(uint32_t& header) { return (((header >> 11) & 0x1) == 0x1); }
508+
inline bool isTrackletHCHeader(uint32_t& header) { return (((header >> 12) & 0x1) == 0x1); }
508509
inline bool isTrackletMCMHeader(uint32_t& header) { return ((header & 0x80000001) == 0x80000001); }
509510
}
510511
}

DataFormats/Detectors/TRD/src/RawData.cxx

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,10 @@ namespace trd
3333
std::ostream& operator<<(std::ostream& stream, const TrackletHCHeader halfchamberheader)
3434
{
3535
stream << "TrackletHCHeader : Raw:0x" << std::hex << halfchamberheader.word << " "
36-
<< halfchamberheader.format << " ;; " << halfchamberheader.MCLK << " :: "
37-
<< halfchamberheader.one << " :: (" << halfchamberheader.supermodule << ","
38-
<< halfchamberheader.stack << "," << halfchamberheader.layer << ") on side :"
39-
<< halfchamberheader.side << std::endl;
36+
<< (int)halfchamberheader.format << " ;; " << (int)halfchamberheader.MCLK << " :: "
37+
<< halfchamberheader.one << " :: (" << (int)halfchamberheader.supermodule << ","
38+
<< (int)halfchamberheader.stack << "," << (int)halfchamberheader.layer << ") on side :"
39+
<< (int)halfchamberheader.side << std::endl;
4040
return stream;
4141
}
4242

@@ -152,14 +152,13 @@ std::ostream& operator<<(std::ostream& stream, const HalfCRUHeader& halfcru)
152152
void constructTrackletHCHeader(TrackletHCHeader& header, int sector, int stack, int layer, int side, int chipclock, int format)
153153
{
154154
header.word = 0;
155-
156155
header.format = format;
157156
header.supermodule = ~sector;
158157
header.stack = ~stack;
159158
header.layer = ~layer;
160159
header.side = ~side;
161160
header.MCLK = chipclock;
162-
header.one = 0;
161+
header.one = 1;
163162
}
164163

165164
void constructTrackletHCHeaderd(TrackletHCHeader& header, int detector, int rob, int chipclock, int format)
@@ -315,7 +314,7 @@ DigitMCMADCMask constructBlankADCMask()
315314
void printTrackletHCHeader(o2::trd::TrackletHCHeader& halfchamber)
316315
{
317316
LOGF(info, "TrackletHCHeader: Raw:0x%08x SM : %d stack %d layer %d side : %d MCLK: 0x%0x Format: 0x%0x Always1:0x%0x",
318-
halfchamber.supermodule, halfchamber.stack, halfchamber.layer, halfchamber.side, halfchamber.MCLK, halfchamber.format, halfchamber.one);
317+
halfchamber.word, (int)(~halfchamber.supermodule) & 0x1f, (int)(~halfchamber.stack) & 0x7, (int)(~halfchamber.layer) & 0x7, (int)(~halfchamber.side) & 0x1, (int)halfchamber.MCLK, (int)halfchamber.format, (int)halfchamber.one);
319318
}
320319

321320
void printTrackletMCMData(o2::trd::TrackletMCMData& tracklet)
@@ -498,6 +497,14 @@ bool sanityCheckDigitMCMADCMask(o2::trd::DigitMCMADCMask& mask, int numberofbits
498497
return goodadcmask;
499498
}
500499

500+
void incrementADCMask(DigitMCMADCMask& mask, int channel)
501+
{
502+
mask.adcmask |= 1UL << channel;
503+
int bitcount = (~mask.c) & 0x1f;
504+
bitcount++;
505+
mask.c = ~((bitcount)&0x1f);
506+
}
507+
501508
bool sanityCheckDigitMCMWord(o2::trd::DigitMCMData* word, int adcchannel)
502509
{
503510
bool gooddata = true;

Detectors/TRD/reconstruction/src/TrackletsParser.cxx

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,6 @@ int TrackletsParser::Parse()
212212
word = mEndParse;
213213
//TODO remove tracklets already added erroneously
214214
continue; // bail out
215-
216215
} else {
217216
if (ignoreDataTillTrackletEndMarker) {
218217
mWordsDumped++;
@@ -221,9 +220,16 @@ int TrackletsParser::Parse()
221220
}
222221
//fix to missing bit on supermodule 16 and 17, to set the uniquely identifying bit.
223222
if (mState == StateTrackletHCHeader) {
223+
if (mVerbose) {
224+
LOG(info) << "mFEEID : 0x" << std::hex << mFEEID.word << " supermodule : 0x" << (int)mFEEID.supermodule << " tracklethcheader : 0x" << *word;
225+
TrackletHCHeader a;
226+
a.word = *word;
227+
printTrackletHCHeader(a);
228+
}
224229
if ((mFEEID.supermodule > 15) && mOptions[TRDFixSM1617Bit] && mTrackletHCHeaderState == 2) {
225-
*word |= 1 << 11; //flip bit eleven for the tracklethcheader for the last 2 supermodules (bug/misconfiguration/broken/other) not sure why its like this yet, but it is.
230+
*word |= 1 << 12; //flip bit twelth bit for the tracklethcheader for the last 2 supermodules (bug/misconfiguration/broken/other) not sure why its like this yet, but it is.
226231
}
232+
//LOG(info) << "mFEEID : 0x"<< std::hex << mFEEID.word << " supermodule : 0x" << (int)mFEEID.supermodule << " tracklethcheader : 0x" << *word;
227233
}
228234
//now for Tracklet hc header
229235
if ((isTrackletHCHeader(*word)) && !mIgnoreTrackletHCHeader && mState == StateTrackletHCHeader) { //TrackletHCHeader has bit 11 set to 1 always. Check for state because raw data can have bit 11 set!
@@ -236,12 +242,12 @@ int TrackletsParser::Parse()
236242
}
237243
//we actually have a header word.
238244
mTrackletHCHeader.word = *word;
239-
// LOG(info) << "TrackletHCHeader : " << std::hex << mTrackletHCHeader.word;
240-
//mTrackletHCHeader = (TrackletHCHeader*)&word;
241245
//sanity check of trackletheader ??
242246
if (!sanityCheckTrackletHCHeader(mTrackletHCHeader)) {
243247
incParsingError(TRDParsingTrackletHCHeaderSanityCheckFailure);
244248
LOG(warn) << " sanity check failure on TracklHCHeader of 0x" << std::hex << mTrackletHCHeader.word;
249+
//sanityCheckTrackletHCHeader(mTrackletHCHeader,true);
250+
//now dump and run
245251
}
246252
mWordsRead++;
247253
mState = StateTrackletMCMHeader; // now we should read a MCMHeader next time through loop

Detectors/TRD/simulation/src/Trap2CRU.cxx

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,7 @@ int Trap2CRU::buildDigitRawData(const int digitstartindex, const int digitendind
446446
}
447447
int channel = d->getChannel();
448448
//set adcmask for the channel we currently have.
449-
adcmaskptr->adcmask |= 1UL << channel;
449+
incrementADCMask(*adcmaskptr, channel); //adcmaskptr->adcmask |= 1UL << channel;
450450
for (int timebin = 0; timebin < o2::trd::constants::TIMEBINS; timebin += 3) {
451451
data.z = adcdata[timebin];
452452
data.y = adcdata[timebin + 1];
@@ -538,9 +538,15 @@ int Trap2CRU::buildTrackletRawData(const int trackletindex, const int linkid)
538538
if (!destroytracklets) {
539539
setNumberOfTrackletsInHeader(header, trackletcounter);
540540
if (trackletcounter > 0) { // dont write header if there are no tracklets.
541+
if (mVerbosity) {
542+
LOG(info) << " TTT TrackletMCMHeader : 0x" << std::hex << header;
543+
}
541544
memcpy((char*)mRawDataPtr, (char*)&header, sizeof(TrackletMCMHeader));
542545
mRawDataPtr += sizeof(TrackletMCMHeader);
543546
for (int i = 0; i < trackletcounter; ++i) {
547+
if (mVerbosity) {
548+
LOG(info) << " TTTx TrackletMCMData : 0x" << std::hex << trackletdata[i];
549+
}
544550
memcpy((char*)mRawDataPtr, (char*)&trackletdata[i], sizeof(TrackletMCMData));
545551
mRawDataPtr += sizeof(TrackletMCMData);
546552
}
@@ -584,24 +590,23 @@ int Trap2CRU::writeTrackletHCHeader(const int eventcount)
584590
{
585591
int wordswritten = 0;
586592
//from linkid we can get supermodule, stack, layer, side
587-
int linkid = mTracklets[mCurrentTracklet].getHCID();
593+
int hcid = mTracklets[mCurrentTracklet].getHCID();
588594
int detector = mTracklets[mCurrentTracklet].getHCID() / 2;
589-
TrackletHCHeader trackletheader;
590-
trackletheader.supermodule = linkid / 60;
591-
trackletheader.stack = (detector % (o2::trd::constants::NLAYER * o2::trd::constants::NSTACK)) / o2::trd::constants::NLAYER;
592-
trackletheader.layer = (detector % o2::trd::constants::NLAYER);
593-
trackletheader.one = 1;
595+
TrackletHCHeader tracklethcheader;
596+
unsigned int supermodule = hcid / 60;
597+
unsigned int stack = (detector % (o2::trd::constants::NLAYER * o2::trd::constants::NSTACK)) / o2::trd::constants::NLAYER;
598+
unsigned int layer = (detector % o2::trd::constants::NLAYER);
599+
unsigned int side = (hcid % 2) ? 1 : 0;
600+
unsigned int chipclock = eventcount * 42; // just has to be a constant increasing number per event for our purposes in sim to raw.
601+
unsigned int format = 12;
602+
constructTrackletHCHeader(tracklethcheader, supermodule, stack, layer, side, chipclock, format);
594603
if (mVerbosity) {
595-
LOG(info) << "Tracklet linkid : " << linkid << ":"
596-
<< " " << trackletheader.supermodule << ":" << trackletheader.stack << ":" << trackletheader.layer << ":" << trackletheader.side;
604+
printTrackletHCHeader(tracklethcheader);
597605
}
598-
trackletheader.side = (linkid % 2) ? 1 : 0;
599-
trackletheader.MCLK = eventcount * 42; // just has to be a constant increasing number per event for our purposes in sim to raw.
600-
trackletheader.format = 12;
601606
if (mUseTrackletHCHeader) { // run 3 we also have a TrackletHalfChamber.
602-
memcpy(mRawDataPtr, (char*)&trackletheader, sizeof(TrackletHCHeader));
607+
memcpy(mRawDataPtr, (char*)&tracklethcheader, sizeof(TrackletHCHeader));
603608
if (mVerbosity) {
604-
LOG(info) << "writing tracklethcheader of 0x" << std::hex << trackletheader.word;
609+
LOG(info) << "writing tracklethcheader of 0x" << std::hex << tracklethcheader.word;
605610
}
606611
mRawDataPtr += 4;
607612
wordswritten++;

0 commit comments

Comments
 (0)