From 604b877d4c414ae3635cc033678976636fe1b707 Mon Sep 17 00:00:00 2001 From: Chiara Zampolli Date: Fri, 31 Jan 2020 10:47:46 +0100 Subject: [PATCH] Clang format on rdev-decomp branch --- .../include/DataFormatsTOF/RawDataFormat.h | 387 ++-- .../tofworkflow/src/tof-reco-workflow.cxx | 13 +- Detectors/TOF/base/include/TOFBase/Digit.h | 26 +- Detectors/TOF/base/include/TOFBase/Geo.h | 8 +- Detectors/TOF/base/include/TOFBase/Strip.h | 2 +- .../TOF/base/include/TOFBase/WindowFiller.h | 13 +- Detectors/TOF/base/src/Geo.cxx | 2 +- Detectors/TOF/base/src/WindowFiller.cxx | 95 +- .../include/TOFCalibration/CalibTOF.h | 4 +- .../TOFCompression/CompressedInspectorTask.h | 2 +- .../include/TOFCompression/Compressor.h | 9 +- .../include/TOFCompression/CompressorTask.h | 1 - .../src/CompressedInspectorTask.cxx | 126 +- .../compression/src/CompressedWriterTask.cxx | 6 +- Detectors/TOF/compression/src/Compressor.cxx | 1818 ++++++++--------- .../TOF/compression/src/CompressorTask.cxx | 7 +- .../TOF/compression/src/RawReaderTask.cxx | 4 +- .../TOF/prototyping/checkChannelMapping.C | 20 +- .../include/TOFReconstruction/Decoder.h | 2 +- .../include/TOFReconstruction/Encoder.h | 16 +- Detectors/TOF/reconstruction/src/Decoder.cxx | 157 +- Detectors/TOF/reconstruction/src/Encoder.cxx | 239 ++- .../include/TOFSimulation/Digitizer.h | 2 +- Detectors/TOF/simulation/src/Digitizer.cxx | 96 +- .../include/TOFWorkflow/RawReaderSpec.h | 4 +- .../include/TOFWorkflow/TOFDigitWriterSpec.h | 2 +- .../include/TOFWorkflow/TOFRawWriterSpec.h | 2 +- Detectors/TOF/workflow/src/RawReaderSpec.cxx | 15 +- .../TOF/workflow/src/TOFDigitWriterSpec.cxx | 8 +- .../TOF/workflow/src/TOFRawWriterSpec.cxx | 30 +- .../src/TOFDigitizerSpec.cxx | 6 +- macro/compareTOFDigits.C | 69 +- macro/run_clus_tof.C | 37 +- macro/run_cmp2digit_tof.C | 25 +- macro/run_digi2raw_tof.C | 24 +- 35 files changed, 1635 insertions(+), 1642 deletions(-) diff --git a/DataFormats/Detectors/TOF/include/DataFormatsTOF/RawDataFormat.h b/DataFormats/Detectors/TOF/include/DataFormatsTOF/RawDataFormat.h index d3999b5e2c3ba..b6be2491b026b 100644 --- a/DataFormats/Detectors/TOF/include/DataFormatsTOF/RawDataFormat.h +++ b/DataFormats/Detectors/TOF/include/DataFormatsTOF/RawDataFormat.h @@ -42,20 +42,18 @@ namespace raw */ /* GEO Ad assigned to TOF modules */ -#define DRM_GEOAD 1 -#define LTM_GEOAD 2 -#define TRM_GEOAD_MIN 3 -#define TRM_GEOAD_MAX 12 +#define DRM_GEOAD 1 +#define LTM_GEOAD 2 +#define TRM_GEOAD_MIN 3 +#define TRM_GEOAD_MAX 12 /* Symbols and macros valid for all slots */ -#define TOF_HEADER 4 -#define TOF_TRAILER 5 -#define TOF_FILLER 7 -#define FILLER_WORD (TOF_FILLER << 28) -#define TOF_GETGEO(x) (x & 0xF ) -#define TOF_GETDATAID(x) ((x>>28) & 0xF) - - +#define TOF_HEADER 4 +#define TOF_TRAILER 5 +#define TOF_FILLER 7 +#define FILLER_WORD (TOF_FILLER << 28) +#define TOF_GETGEO(x) (x & 0xF) +#define TOF_GETDATAID(x) ((x >> 28) & 0xF) /* TOF Data Header (former CDH) |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|09|08|07|06|05|04|03|02|01|00| @@ -67,13 +65,13 @@ Word 1 | LHC Orbit */ // TDH - TOF Data Header typedef struct { - uint32_t bytePayload : 18; - uint32_t mbz : 10; - uint32_t dataId : 4; + uint32_t bytePayload : 18; + uint32_t mbz : 10; + uint32_t dataId : 4; } __attribute__((__packed__)) TOFDataHeader_t; typedef struct { - uint32_t orbit : 32; + uint32_t orbit : 32; } __attribute__((__packed__)) TOFOrbit_t; typedef struct { @@ -81,16 +79,13 @@ typedef struct { TOFOrbit_t orbit; } __attribute__((__packed__)) TDH_t; -#define TDH_SIZE sizeof(TDH_t) // size is in bytes length is in words -#define TDH_LENGTH TDH_SIZE/4 - -#define TDH_HEADER(d) TOF_GETDATAID(d) -#define TDH_PAYLOAD(d) (d&0x3FFFF) -#define TDH_WORDS(d) TDH_PAYLOAD(d)/4 -#define TDH_ORBIT(d) (d&0xFFFFFFFF) //32 bit - - +#define TDH_SIZE sizeof(TDH_t) // size is in bytes length is in words +#define TDH_LENGTH TDH_SIZE / 4 +#define TDH_HEADER(d) TOF_GETDATAID(d) +#define TDH_PAYLOAD(d) (d & 0x3FFFF) +#define TDH_WORDS(d) TDH_PAYLOAD(d) / 4 +#define TDH_ORBIT(d) (d & 0xFFFFFFFF) //32 bit /* DRM headers & trailer @@ -114,115 +109,113 @@ Trailer | 0101 | 000 | Event Counter (Loca // DRMH - DRM Data Header and Trailer //----------------------------------- Word 0 typedef struct { - uint32_t slotId : 4; - uint32_t eventWords : 17; // meglio portarlo a 16 - uint32_t drmId : 7; // 0-71== 0x0-0x47 (Bit 8 > 0x100 announnce DRM generated payload, da cambiare in 0x80 e renderlo a 8 bit) - uint32_t dataId : 4; + uint32_t slotId : 4; + uint32_t eventWords : 17; // meglio portarlo a 16 + uint32_t drmId : 7; // 0-71== 0x0-0x47 (Bit 8 > 0x100 announnce DRM generated payload, da cambiare in 0x80 e renderlo a 8 bit) + uint32_t dataId : 4; } __attribute__((__packed__)) DRMDataHeader_t; //----------------------------------- Word 1 typedef struct { - uint32_t slotId : 4; - uint32_t partSlotMask : 11; // meglio mettere un mbz di 1 cosi' rispetta i byte boundaries - uint32_t clockStatus : 2; - uint32_t drmhVersion : 5; // currently set to 0x11 (Bit 4 identifies RUN3/4 data format), puo' essere diminuito a 6 - uint32_t drmHSize : 4; // it doesn't count previous word, so currently it is 5 - uint32_t mbz : 2; - uint32_t dataId : 4; + uint32_t slotId : 4; + uint32_t partSlotMask : 11; // meglio mettere un mbz di 1 cosi' rispetta i byte boundaries + uint32_t clockStatus : 2; + uint32_t drmhVersion : 5; // currently set to 0x11 (Bit 4 identifies RUN3/4 data format), puo' essere diminuito a 6 + uint32_t drmHSize : 4; // it doesn't count previous word, so currently it is 5 + uint32_t mbz : 2; + uint32_t dataId : 4; } __attribute__((__packed__)) DRMHeadW1_t; //----------------------------------- Word 2 typedef struct { - uint32_t slotId : 4; - uint32_t enaSlotMask : 11; - uint32_t mbz : 1; - uint32_t faultSlotMask : 11; - uint32_t readoutTimeOut : 1; - uint32_t dataId : 4; + uint32_t slotId : 4; + uint32_t enaSlotMask : 11; + uint32_t mbz : 1; + uint32_t faultSlotMask : 11; + uint32_t readoutTimeOut : 1; + uint32_t dataId : 4; } __attribute__((__packed__)) DRMHeadW2_t; //----------------------------------- Word 3 typedef struct { - uint32_t slotId : 4; - uint32_t gbtBunchCnt : 12; - uint32_t locBunchCnt : 12; - uint32_t dataId : 4; + uint32_t slotId : 4; + uint32_t gbtBunchCnt : 12; + uint32_t locBunchCnt : 12; + uint32_t dataId : 4; } __attribute__((__packed__)) DRMHeadW3_t; //----------------------------------- Word 4 typedef struct { - uint32_t slotId : 4; - uint32_t tempValue : 10; - uint32_t mbza : 2; - uint32_t tempAddress : 4; - uint32_t mbzb : 8; - uint32_t dataId : 4; + uint32_t slotId : 4; + uint32_t tempValue : 10; + uint32_t mbza : 2; + uint32_t tempAddress : 4; + uint32_t mbzb : 8; + uint32_t dataId : 4; } __attribute__((__packed__)) DRMHeadW4_t; //----------------------------------- Word 5 typedef struct { - uint32_t slotId : 4; - uint32_t eventCRC : 16; - uint32_t irq : 1; - uint32_t mbz : 7; - uint32_t dataId : 4; + uint32_t slotId : 4; + uint32_t eventCRC : 16; + uint32_t irq : 1; + uint32_t mbz : 7; + uint32_t dataId : 4; } __attribute__((__packed__)) DRMHeadW5_t; // full DRMH (header + 5 words) typedef struct { DRMDataHeader_t head; - DRMHeadW1_t w1; - DRMHeadW2_t w2; - DRMHeadW3_t w3; - DRMHeadW4_t w4; - DRMHeadW5_t w5; + DRMHeadW1_t w1; + DRMHeadW2_t w2; + DRMHeadW3_t w3; + DRMHeadW4_t w4; + DRMHeadW5_t w5; } __attribute__((__packed__)) DRMh_t; typedef struct { - uint32_t slotId : 4; - uint32_t locEvCnt : 12; - uint32_t mbz : 12; // qui si potrebbero mettere 8 bit di trigger received nell'orbita finora - uint32_t dataId : 4; + uint32_t slotId : 4; + uint32_t locEvCnt : 12; + uint32_t mbz : 12; // qui si potrebbero mettere 8 bit di trigger received nell'orbita finora + uint32_t dataId : 4; } __attribute__((__packed__)) DRMDataTrailer_t; - - -#define DRMH_SIZE sizeof(DRMh_t) -#define DRMH_LENGTH DRMH_SIZE/4 -#define DRM_HEAD_NW DRMH_LENGTH +#define DRMH_SIZE sizeof(DRMh_t) +#define DRMH_LENGTH DRMH_SIZE / 4 +#define DRM_HEAD_NW DRMH_LENGTH // Word 0 -#define DRM_DRMID(a) ((a & 0x007E00000)>>21) //was FE ///CHECK -#define DRM_EVWORDS(a) ((a & 0x0001FFFF0)>>4) ///CHECK +#define DRM_DRMID(a) ((a & 0x007E00000) >> 21) //was FE ///CHECK +#define DRM_EVWORDS(a) ((a & 0x0001FFFF0) >> 4) ///CHECK // Word 1 -#define DRM_SLOTID(a) ((a & 0x00007FF0)>>4) -#define DRM_CLKFLG(a) ((a & 0x00018000)>>15) //was 10000>>15 -#define DRM_VERSID(a) ((a & 0x003E0000)>>17) //waa 1E0000>>16 -#define DRM_HSIZE(a) ((a & 0x03C00000)>>22) //was 3E0000>>21 +#define DRM_SLOTID(a) ((a & 0x00007FF0) >> 4) +#define DRM_CLKFLG(a) ((a & 0x00018000) >> 15) //was 10000>>15 +#define DRM_VERSID(a) ((a & 0x003E0000) >> 17) //waa 1E0000>>16 +#define DRM_HSIZE(a) ((a & 0x03C00000) >> 22) //was 3E0000>>21 // Word 2 -#define DRM_ENABLEID(a) ((a & 0x00007FF0)>>4) -#define DRM_FAULTID(a) ((a & 0x07FF0000)>>16) -#define DRM_RTMO(a) ((a & 0x08000000)>>27) +#define DRM_ENABLEID(a) ((a & 0x00007FF0) >> 4) +#define DRM_FAULTID(a) ((a & 0x07FF0000) >> 16) +#define DRM_RTMO(a) ((a & 0x08000000) >> 27) // Word 3 -#define DRM_BCGBT(a) ((a & 0x0000FFF0)>>4) -#define DRM_BCLOC(a) ((a & 0x0FFF0000)>>16) +#define DRM_BCGBT(a) ((a & 0x0000FFF0) >> 4) +#define DRM_BCLOC(a) ((a & 0x0FFF0000) >> 16) // Word 4 -#define DRM_TEMP(a) ((a & 0x00003FF0)>>4) -#define DRM_SENSAD(a) ((a & 0x00070000)>>18) +#define DRM_TEMP(a) ((a & 0x00003FF0) >> 4) +#define DRM_SENSAD(a) ((a & 0x00070000) >> 18) // Word 5 -#define DRM_EVCRC(a) ((a & 0x000FFFF0)>>4) +#define DRM_EVCRC(a) ((a & 0x000FFFF0) >> 4) // Trailer -#define DRM_LOCEVCNT(a) ((a & 0x0000FFF0)>>4) +#define DRM_LOCEVCNT(a) ((a & 0x0000FFF0) >> 4) /* TRM headers & trailers */ -#define TRM_HEADER TOF_HEADER -#define TRM_TRAILER TOF_TRAILER -#define CHAIN_0_HEADER 0 -#define CHAIN_0_TRAILER 1 -#define CHAIN_1_HEADER 2 -#define CHAIN_1_TRAILER 3 -#define HIT_LEADING 0xA -#define HIT_TRAILING 0xC -#define REPORT_ERROR 6 -#define DEBERR REPORT_ERROR - -#define TRM_WORDID(a) TOF_GETDATAID(a) // legacy +#define TRM_HEADER TOF_HEADER +#define TRM_TRAILER TOF_TRAILER +#define CHAIN_0_HEADER 0 +#define CHAIN_0_TRAILER 1 +#define CHAIN_1_HEADER 2 +#define CHAIN_1_TRAILER 3 +#define HIT_LEADING 0xA +#define HIT_TRAILING 0xC +#define REPORT_ERROR 6 +#define DEBERR REPORT_ERROR + +#define TRM_WORDID(a) TOF_GETDATAID(a) // legacy /* TRM Global Header |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|09|08|07|06|05|04|03|02|01|00| @@ -231,16 +224,16 @@ typedef struct { | |__ Empty event */ -// TRM - TRM Data Global and Chain Header and Trailer +// TRM - TRM Data Global and Chain Header and Trailer typedef struct { - uint32_t slotId : 4; - uint32_t eventWords : 13; - uint32_t eventCnt : 10; - uint32_t emptyBit : 1; - uint32_t dataId : 4; + uint32_t slotId : 4; + uint32_t eventWords : 13; + uint32_t eventCnt : 10; + uint32_t emptyBit : 1; + uint32_t dataId : 4; } __attribute__((__packed__)) TRMDataHeader_t; -#define TRM_EVCNT_GH(a) ((a & 0x07FE0000)>>17) -#define TRM_EVWORDS(a) ((a & 0x0001FFF0)>>4) +#define TRM_EVCNT_GH(a) ((a & 0x07FE0000) >> 17) +#define TRM_EVWORDS(a) ((a & 0x0001FFF0) >> 4) /* TRM Chain Header |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|09|08|07|06|05|04|03|02|01|00| @@ -248,13 +241,12 @@ typedef struct { | 0000/0010 | RESERVED | BUNCH ID | SLOT ID | */ typedef struct { - uint32_t slotId : 4; - uint32_t bunchCnt : 12; - uint32_t mbz : 12; - uint32_t dataId : 4; // bit 29 flag the chain + uint32_t slotId : 4; + uint32_t bunchCnt : 12; + uint32_t mbz : 12; + uint32_t dataId : 4; // bit 29 flag the chain } __attribute__((__packed__)) TRMChainHeader_t; -#define TRM_BUNCHID(a) ((a & 0x0000FFF0)>>4) - +#define TRM_BUNCHID(a) ((a & 0x0000FFF0) >> 4) /* TRM Chain Trailer |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|09|08|07|06|05|04|03|02|01|00| @@ -262,15 +254,13 @@ typedef struct { | 0001/0011 | EVENT COUNTER | CHAIN_EVNT_WORD (12) | STATUS | */ typedef struct { - uint32_t status : 4; - uint32_t mbz : 12; - uint32_t eventCnt : 12; - uint32_t dataId : 4; // bit 29 flag the chain + uint32_t status : 4; + uint32_t mbz : 12; + uint32_t eventCnt : 12; + uint32_t dataId : 4; // bit 29 flag the chain } __attribute__((__packed__)) TRMChainTrailer_t; -#define TRM_EVCNT_CT(a) ((a & 0x0FFF0000)>>16) -#define TRM_CHAINSTAT(a) (a & 0xF) - - +#define TRM_EVCNT_CT(a) ((a & 0x0FFF0000) >> 16) +#define TRM_CHAINSTAT(a) (a & 0xF) /* TRM Global Trailer |31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|09|08|07|06|05|04|03|02|01|00| @@ -282,23 +272,23 @@ typedef struct { |__ Lut error */ typedef struct { - uint32_t trailerMark : 2; - uint32_t eventCRC : 12; - uint32_t tempValue : 8; - uint32_t tempAddress : 3; - uint32_t tempChain : 1; - uint32_t tempAck : 1; - uint32_t lutErrorBit : 1; - uint32_t dataId : 4; + uint32_t trailerMark : 2; + uint32_t eventCRC : 12; + uint32_t tempValue : 8; + uint32_t tempAddress : 3; + uint32_t tempChain : 1; + uint32_t tempAck : 1; + uint32_t lutErrorBit : 1; + uint32_t dataId : 4; } __attribute__((__packed__)) TRMDataTrailer_t; -#define TRM_LUTERRBIT(a) ((a & 0x08000000)>>27) -#define TRM_PB24TEMP(a) ((a & 0x003FC000)>>14) -#define TRM_PB24ID(a) ((a & 0x01C00000)>>22) -#define TRM_PB24CHAIN(a) ((a & 0x02000000)>>25) -#define TRM_PB24ACK(a) ((a & 0x04000000)>>26) -#define TRM_EVCRC2(a) ((a & 0x00003FFC)>>2) -#define TRM_TERM(a) (a & 0x3) +#define TRM_LUTERRBIT(a) ((a & 0x08000000) >> 27) +#define TRM_PB24TEMP(a) ((a & 0x003FC000) >> 14) +#define TRM_PB24ID(a) ((a & 0x01C00000) >> 22) +#define TRM_PB24CHAIN(a) ((a & 0x02000000) >> 25) +#define TRM_PB24ACK(a) ((a & 0x04000000) >> 26) +#define TRM_EVCRC2(a) ((a & 0x00003FFC) >> 2) +#define TRM_TERM(a) (a & 0x3) //#define TRM_EVCNT2(a) ((a & 0x07FE0000)>>17) //#define TRM_EVCRC(a) ((a & 0x0000FFF0)>>4) @@ -316,59 +306,58 @@ typedef struct { if bit 28 is on, both copies of LUT corrupted, wrong compensation applied */ typedef struct { - uint32_t time : 21; - uint32_t chanId : 3; - uint32_t tdcId : 4; - uint32_t dataId : 4; + uint32_t time : 21; + uint32_t chanId : 3; + uint32_t tdcId : 4; + uint32_t dataId : 4; } __attribute__((__packed__)) TRMDataHit_t; -#define TRM_TIME(a) (a&0x1FFFFF) -#define TRM_CHANID(a) ((a>>21)&0x7) -#define TRM_TDCID(a) ((a>>24)&0xF) - +#define TRM_TIME(a) (a & 0x1FFFFF) +#define TRM_CHANID(a) ((a >> 21) & 0x7) +#define TRM_TDCID(a) ((a >> 24) & 0xF) // LTM -// LTM - LTM Data Header and Trailer +// LTM - LTM Data Header and Trailer typedef struct { - uint32_t slotId : 4; - uint32_t eventWords : 13; - uint32_t cycloneErr : 1; - uint32_t fault : 6; - uint32_t mbz0 : 4; - uint32_t dataId : 4; + uint32_t slotId : 4; + uint32_t eventWords : 13; + uint32_t cycloneErr : 1; + uint32_t fault : 6; + uint32_t mbz0 : 4; + uint32_t dataId : 4; } __attribute__((__packed__)) LTMDataHeader_t; -#define LTM_HEAD_TAG(x) TOF_GETDATAID(x) -#define LTM_HEAD_FAULTFLAG(x) ( ((x) >> 18) & 0x1 ) -#define LTM_HEAD_CYCSTATUS(x) ( ((x) >> 17) & 0x1 ) -#define LTM_EVENTSIZE(x) ( ((x) >> 4) & 0x1FFF) // actual event size -#define LTM_HEAD_EVENTSIZE(x) ( ((x) >> 4) & 0x1FFF) -#define LTM_HEAD_GEOADDR(x) TOF_GETGEO(x) -#define LTM_HEADER TOF_HEADER +#define LTM_HEAD_TAG(x) TOF_GETDATAID(x) +#define LTM_HEAD_FAULTFLAG(x) (((x) >> 18) & 0x1) +#define LTM_HEAD_CYCSTATUS(x) (((x) >> 17) & 0x1) +#define LTM_EVENTSIZE(x) (((x) >> 4) & 0x1FFF) // actual event size +#define LTM_HEAD_EVENTSIZE(x) (((x) >> 4) & 0x1FFF) +#define LTM_HEAD_GEOADDR(x) TOF_GETGEO(x) +#define LTM_HEADER TOF_HEADER typedef struct { - uint32_t slotId : 4; - uint32_t eventCRC : 12; - uint32_t eventCnt : 12; - uint32_t dataId : 4; + uint32_t slotId : 4; + uint32_t eventCRC : 12; + uint32_t eventCnt : 12; + uint32_t dataId : 4; } __attribute__((__packed__)) LTMDataTrailer_t; -#define LTM_TAIL_TAG(x) TOF_GETDATAID(x) -#define LTM_TAIL_EVENTNUM(x) ( ((x) >> 16) & 0xFFF ) -#define LTM_TAIL_EVENTCRC(x) ( ((x) >> 4) & 0xFFF ) -#define LTM_TAIL_GEOADDR(x) TOF_GETGEO(x) -#define LTM_TRAILER TOF_TRAILER +#define LTM_TAIL_TAG(x) TOF_GETDATAID(x) +#define LTM_TAIL_EVENTNUM(x) (((x) >> 16) & 0xFFF) +#define LTM_TAIL_EVENTCRC(x) (((x) >> 4) & 0xFFF) +#define LTM_TAIL_GEOADDR(x) TOF_GETGEO(x) +#define LTM_TRAILER TOF_TRAILER typedef struct { - uint32_t pdl0 : 8; - uint32_t pdl1 : 8; - uint32_t pdl2 : 8; - uint32_t pdl3 : 8; + uint32_t pdl0 : 8; + uint32_t pdl1 : 8; + uint32_t pdl2 : 8; + uint32_t pdl3 : 8; } __attribute__((__packed__)) LTMPdlWord_t; typedef struct { - uint32_t adc0 : 10; - uint32_t adc1 : 10; - uint32_t adc2 : 10; - uint32_t mbz : 2; + uint32_t adc0 : 10; + uint32_t adc1 : 10; + uint32_t adc2 : 10; + uint32_t mbz : 2; } __attribute__((__packed__)) LTMAdcWord_t; typedef struct { @@ -385,31 +374,30 @@ typedef struct { // 34 words + 2 words = 36 words LTMDataTrailer_t trailer; } __attribute__((__packed__)) LTMPackedEvent_t; -#define LTM_EVSIZE sizeof(ltmPackedEvent_t) // fixed expected event size -#define LTM_PDL_FIELD(x,n) ( ((x) >> ((n) * 8)) & 0xFF ) -#define LTM_V_FIELD(x,n) ( ((x) >> ((n) * 10)) & 0x3FF ) -#define LTM_T_FIELD(x,n) ( ((x) >> ((n) * 10)) & 0x3FF ) -#define LTM_OR_FIELD(x,n) ( ((x) >> ((n) * 10)) & 0x3FF ) - +#define LTM_EVSIZE sizeof(ltmPackedEvent_t) // fixed expected event size +#define LTM_PDL_FIELD(x, n) (((x) >> ((n)*8)) & 0xFF) +#define LTM_V_FIELD(x, n) (((x) >> ((n)*10)) & 0x3FF) +#define LTM_T_FIELD(x, n) (((x) >> ((n)*10)) & 0x3FF) +#define LTM_OR_FIELD(x, n) (((x) >> ((n)*10)) & 0x3FF) -#define ltmint unsigned int //si puo' portarlo a uint32_t rendendo la struttura piu' piccola, da verificare se non ci sono overflow +#define ltmint unsigned int //si puo' portarlo a uint32_t rendendo la struttura piu' piccola, da verificare se non ci sono overflow typedef struct { - ltmint TagHead; - ltmint FaultFlag; - ltmint CycStatus; - ltmint EventSize; - ltmint HeadGeo; - ltmint PdlDelay[48]; - ltmint Vlv[16]; - ltmint Vth[16]; - ltmint GndFeac[8]; - ltmint FeacTemp[8]; - ltmint LocalTemp[12]; - ltmint OrRate[48]; - ltmint EventNum; - ltmint EventCrc; - ltmint TailGeo; - ltmint TagTail; + ltmint TagHead; + ltmint FaultFlag; + ltmint CycStatus; + ltmint EventSize; + ltmint HeadGeo; + ltmint PdlDelay[48]; + ltmint Vlv[16]; + ltmint Vth[16]; + ltmint GndFeac[8]; + ltmint FeacTemp[8]; + ltmint LocalTemp[12]; + ltmint OrRate[48]; + ltmint EventNum; + ltmint EventCrc; + ltmint TailGeo; + ltmint TagTail; } LTMEvent_t; /** union **/ @@ -430,8 +418,8 @@ typedef union { TRMChainHeader_t trmChainHeader; TRMChainTrailer_t trmChainTrailer; TRMDataHit_t trmDataHit; -} Union_t ; - +} Union_t; + #ifndef O2_TOF_RAWDATAFORMAT_NONAMESPACE } // namespace raw } // namespace tof @@ -439,4 +427,3 @@ typedef union { #endif #endif /** O2_TOF_RAWDATAFORMAT **/ - diff --git a/Detectors/GlobalTrackingWorkflow/tofworkflow/src/tof-reco-workflow.cxx b/Detectors/GlobalTrackingWorkflow/tofworkflow/src/tof-reco-workflow.cxx index 20cedbed00ae3..bd7a859025e85 100644 --- a/Detectors/GlobalTrackingWorkflow/tofworkflow/src/tof-reco-workflow.cxx +++ b/Detectors/GlobalTrackingWorkflow/tofworkflow/src/tof-reco-workflow.cxx @@ -126,32 +126,31 @@ WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) auto useMC = !cfgc.options().get("disable-mc"); auto useCCDB = cfgc.options().get("use-ccdb"); - if(clusterinput){ + if (clusterinput) { LOG(INFO) << "Insert TOF Cluster Reader"; specs.emplace_back(o2::tof::getClusterReaderSpec(useMC)); - } - else if (!rawinput) { + } else if (!rawinput) { // TOF clusterizer LOG(INFO) << "Insert TOF Digit reader from file"; specs.emplace_back(o2::tof::getDigitReaderSpec(useMC)); - if(writeraw){ + if (writeraw) { LOG(INFO) << "Insert TOF Raw writer"; specs.emplace_back(o2::tof::getTOFRawWriterSpec()); } } else { LOG(INFO) << "Insert TOF Raw Reader"; specs.emplace_back(o2::tof::getRawReaderSpec()); - useMC=0; + useMC = 0; - if(writedigit){ + if (writedigit) { // add TOF digit writer without mc labels LOG(INFO) << "Insert TOF Digit Writer"; specs.emplace_back(o2::tof::getTOFDigitWriterSpec(0)); } } - if(! clusterinput && writecluster){ + if (!clusterinput && writecluster) { LOG(INFO) << "Insert TOF Clusterizer"; specs.emplace_back(o2::tof::getTOFClusterizerSpec(useMC, useCCDB)); if (writecluster) { diff --git a/Detectors/TOF/base/include/TOFBase/Digit.h b/Detectors/TOF/base/include/TOFBase/Digit.h index 25bb83b44e55f..9273c794e329c 100644 --- a/Detectors/TOF/base/include/TOFBase/Digit.h +++ b/Detectors/TOF/base/include/TOFBase/Digit.h @@ -30,7 +30,7 @@ class Digit public: Digit() = default; - Digit(Int_t channel, Int_t tdc, Int_t tot, Int_t bc, Int_t label = -1, Int_t triggerorbit=0, Int_t triggerbunch=0); + Digit(Int_t channel, Int_t tdc, Int_t tot, Int_t bc, Int_t label = -1, Int_t triggerorbit = 0, Int_t triggerbunch = 0); ~Digit() = default; /// Get global ordering key made of @@ -78,11 +78,10 @@ class Digit void setIsProblematic(bool flag) { mIsProblematic = flag; } bool isProblematic() const { return mIsProblematic; } - void setTriggerOrbit(int value) {mTriggerOrbit = value;} - int getTriggerOrbit() const {return mTriggerOrbit;} - void setTriggerBunch(int value) {mTriggerBunch = value;} - int getTriggerBunch() const {return mTriggerBunch;} - + void setTriggerOrbit(int value) { mTriggerOrbit = value; } + int getTriggerOrbit() const { return mTriggerOrbit; } + void setTriggerBunch(int value) { mTriggerBunch = value; } + int getTriggerBunch() const { return mTriggerBunch; } private: friend class boost::serialization::access; @@ -96,8 +95,8 @@ class Digit Int_t mElectronIndex; //!/< index in electronic format Double_t mCalibratedTime; //!< time of the digits after calibration (not persistent; it will be filled during clusterization) Bool_t mIsProblematic = false; //!< flag to tell whether the channel of the digit was problemati; not persistent; default = ok - Int_t mTriggerOrbit = 0; //!< orbit id of trigger event - Int_t mTriggerBunch = 0; //!< bunch id of trigger event + Int_t mTriggerOrbit = 0; //!< orbit id of trigger event + Int_t mTriggerBunch = 0; //!< bunch id of trigger event ClassDefNV(Digit, 1); }; @@ -105,14 +104,15 @@ class Digit std::ostream& operator<<(std::ostream& stream, const Digit& dig); struct ReadoutWindowData { - // 1st entry and number of entries in the full vector of digits + // 1st entry and number of entries in the full vector of digits // for given trigger (or BC or RO frame) int firstEntry; int nEntries; gsl::span getBunchChannelData(const gsl::span tfdata) const { // extract the span of channel data for this readout window from the whole TF data - if(!nEntries) return gsl::span(nullptr, nEntries); + if (!nEntries) + return gsl::span(nullptr, nEntries); return gsl::span(&tfdata[firstEntry], nEntries); } @@ -120,11 +120,11 @@ struct ReadoutWindowData { ReadoutWindowData(int first, int ne) { firstEntry = first; - nEntries = ne ; + nEntries = ne; } - int first() const {return firstEntry;} - int size() const {return nEntries;} + int first() const { return firstEntry; } + int size() const { return nEntries; } ClassDefNV(ReadoutWindowData, 1); }; diff --git a/Detectors/TOF/base/include/TOFBase/Geo.h b/Detectors/TOF/base/include/TOFBase/Geo.h index fa9d9fb4f5599..d3072ae2f6341 100644 --- a/Detectors/TOF/base/include/TOFBase/Geo.h +++ b/Detectors/TOF/base/include/TOFBase/Geo.h @@ -103,7 +103,7 @@ class Geo static constexpr Float_t TDCBIN = o2::constants::lhc::LHCBunchSpacingNS * 1E3 / 1024; ///< TDC bin width [ps] static constexpr Float_t NTDCBIN_PER_PS = 1. / TDCBIN; ///< number of TDC bins in 1 ns - static constexpr Int_t RATIO_TOT_TDC_BIN = 2; // ratio between TDC and TOT bin sizes + static constexpr Int_t RATIO_TOT_TDC_BIN = 2; // ratio between TDC and TOT bin sizes static constexpr Float_t TOTBIN = TDCBIN * RATIO_TOT_TDC_BIN; // time-over-threshold bin width [ps] static constexpr Float_t TOTBIN_NS = TOTBIN * 1E-3; // time-over-threshold bin width [ns] static constexpr Float_t NTOTBIN_PER_NS = 1000. / TOTBIN; // number of time-over-threshold bin in 1 ns @@ -120,10 +120,10 @@ class Geo static constexpr double BC_IN_WINDOW_INV = 1. / BC_IN_WINDOW; static constexpr Double_t READOUTWINDOW_INV = 1. / READOUTWINDOW; // Readout window (ns) - static constexpr Int_t READOUTWINDOW_IN_BC = BC_IN_ORBIT / NWINDOW_IN_ORBIT; // round down in case + static constexpr Int_t READOUTWINDOW_IN_BC = BC_IN_ORBIT / NWINDOW_IN_ORBIT; // round down in case static constexpr Int_t LATENCYWINDOW_IN_BC = 1400; // Latency window in BC (larger than 1/3 orbit 1188 BC) static constexpr Int_t MATCHINGWINDOW_IN_BC = 1200; // Latency window in BC (larger than 1/3 orbit 1188 BC) - static constexpr Int_t OVERLAP_IN_BC = MATCHINGWINDOW_IN_BC - READOUTWINDOW_IN_BC; // overlap between two readout window in BC + static constexpr Int_t OVERLAP_IN_BC = MATCHINGWINDOW_IN_BC - READOUTWINDOW_IN_BC; // overlap between two readout window in BC static constexpr Double_t LATENCYWINDOW = LATENCYWINDOW_IN_BC * o2::constants::lhc::LHCBunchSpacingNS; // Latency window in ns static constexpr Double_t MATCHINGWINDOW = MATCHINGWINDOW_IN_BC * o2::constants::lhc::LHCBunchSpacingNS; // Matching window in ns static constexpr Double_t WINDOWOVERLAP = MATCHINGWINDOW - READOUTWINDOW; // overlap between two consecutive matchingwindow @@ -269,7 +269,7 @@ class Geo static Int_t getChainFromECH(int ech) { return (ech % 256) >> 7; } static Int_t getTDCFromECH(int ech) { return (ech % 128) >> 3; } static Int_t getTDCChFromECH(int ech) { return (ech % 8); } - static Int_t getECHFromIndexes(int crate, int trm, int chain, int tdc, int chan) { return (crate << 12) + ((trm-3) << 8) + (chain << 7) + (tdc << 3) + chan; } + static Int_t getECHFromIndexes(int crate, int trm, int chain, int tdc, int chan) { return (crate << 12) + ((trm - 3) << 8) + (chain << 7) + (tdc << 3) + chan; } static Int_t getECHFromCH(int chan) { return CHAN_TO_ELCHAN[chan]; } static Int_t getCHFromECH(int echan) { return ELCHAN_TO_CHAN[echan]; } diff --git a/Detectors/TOF/base/include/TOFBase/Strip.h b/Detectors/TOF/base/include/TOFBase/Strip.h index 1586572ccfa6d..f2e868023aa17 100644 --- a/Detectors/TOF/base/include/TOFBase/Strip.h +++ b/Detectors/TOF/base/include/TOFBase/Strip.h @@ -79,7 +79,7 @@ class Strip /// reset points container o2::tof::Digit* findDigit(ULong64_t key); - Int_t addDigit(Int_t channel, Int_t tdc, Int_t tot, Int_t bc, Int_t lbl=0, int triggerorbit=0, int triggerbunch=0); // returns the MC label + Int_t addDigit(Int_t channel, Int_t tdc, Int_t tot, Int_t bc, Int_t lbl = 0, int triggerorbit = 0, int triggerbunch = 0); // returns the MC label void fillOutputContainer(std::vector& digits); diff --git a/Detectors/TOF/base/include/TOFBase/WindowFiller.h b/Detectors/TOF/base/include/TOFBase/WindowFiller.h index 8e30f399252a0..a2433ee33fe1c 100644 --- a/Detectors/TOF/base/include/TOFBase/WindowFiller.h +++ b/Detectors/TOF/base/include/TOFBase/WindowFiller.h @@ -38,10 +38,10 @@ class WindowFiller void fillOutputContainer(std::vector& digits); void flushOutputContainer(std::vector& digits); // flush all residual buffered data - void setContinuous(bool value=true) {mContinuous=value;} - bool isContinuous() const {return mContinuous;} + void setContinuous(bool value = true) { mContinuous = value; } + bool isContinuous() const { return mContinuous; } - void resizeVectorFutureDigit(int size) {mFutureDigits.resize(size);} + void resizeVectorFutureDigit(int size) { mFutureDigits.resize(size); } protected: // info TOF timewindow @@ -71,15 +71,16 @@ class WindowFiller // arrays with digit and MCLabels out of the current readout windows (stored to fill future readout window) std::vector mFutureDigits; - void fillDigitsInStrip(std::vector* strips, int channel, int tdc, int tot, int nbc, UInt_t istrip, Int_t triggerorbit=0, Int_t triggerbunch=0); + void fillDigitsInStrip(std::vector* strips, int channel, int tdc, int tot, int nbc, UInt_t istrip, Int_t triggerorbit = 0, Int_t triggerbunch = 0); // void fillDigitsInStrip(std::vector* strips, o2::dataformats::MCTruthContainer* mcTruthContainer, int channel, int tdc, int tot, int nbc, UInt_t istrip, Int_t trackID, Int_t eventID, Int_t sourceID); void checkIfReuseFutureDigits(); void checkIfReuseFutureDigitsRO(); - void insertDigitInFuture(int digitInfo0, int digitInfo1, int digitInfo2, int digitInfo3, int lbl=0, int digitInfo4=0, int digitInfo5=0){ + void insertDigitInFuture(int digitInfo0, int digitInfo1, int digitInfo2, int digitInfo3, int lbl = 0, int digitInfo4 = 0, int digitInfo5 = 0) + { mFutureDigits.emplace_back(digitInfo0, digitInfo1, digitInfo2, digitInfo3, lbl, digitInfo4, digitInfo5); - mFutureToBeSorted=true; + mFutureToBeSorted = true; } bool isMergable(Digit digit1, Digit digit2) diff --git a/Detectors/TOF/base/src/Geo.cxx b/Detectors/TOF/base/src/Geo.cxx index 539f0f9609a88..67074d54ac11b 100644 --- a/Detectors/TOF/base/src/Geo.cxx +++ b/Detectors/TOF/base/src/Geo.cxx @@ -196,7 +196,7 @@ void Geo::getPos(Int_t* det, Float_t* pos) if (mToBeIntit) Init(); -// printf("TOFDBG: %d, %d, %d, %d, %d -> %f %f %f\n", det[0], det[1], det[2], det[3], det[4], mPadPosition[det[0]][det[1]][det[2]][det[3]][det[4]][0], mPadPosition[det[0]][det[1]][det[2]][det[3]][det[4]][1], mPadPosition[det[0]][det[1]][det[2]][det[3]][det[4]][2]); + // printf("TOFDBG: %d, %d, %d, %d, %d -> %f %f %f\n", det[0], det[1], det[2], det[3], det[4], mPadPosition[det[0]][det[1]][det[2]][det[3]][det[4]][0], mPadPosition[det[0]][det[1]][det[2]][det[3]][det[4]][1], mPadPosition[det[0]][det[1]][det[2]][det[3]][det[4]][2]); pos[0] = mPadPosition[det[0]][det[1]][det[2]][det[3]][det[4]][0]; pos[1] = mPadPosition[det[0]][det[1]][det[2]][det[3]][det[4]][1]; pos[2] = mPadPosition[det[0]][det[1]][det[2]][det[3]][det[4]][2]; diff --git a/Detectors/TOF/base/src/WindowFiller.cxx b/Detectors/TOF/base/src/WindowFiller.cxx index 3d02b6bfa5047..62802757ab5fb 100644 --- a/Detectors/TOF/base/src/WindowFiller.cxx +++ b/Detectors/TOF/base/src/WindowFiller.cxx @@ -97,8 +97,8 @@ void WindowFiller::fillOutputContainer(std::vector& digits) if (mContinuous) { int first = mDigitsPerTimeFrame.size(); int ne = digits.size(); - ReadoutWindowData info(first,ne); - if(digits.size()) + ReadoutWindowData info(first, ne); + if (digits.size()) mDigitsPerTimeFrame.insert(mDigitsPerTimeFrame.end(), digits.begin(), digits.end()); mReadoutWindowData.push_back(info); } @@ -122,14 +122,14 @@ void WindowFiller::fillOutputContainer(std::vector& digits) void WindowFiller::flushOutputContainer(std::vector& digits) { // flush all residual buffered data // TO be implemented - + printf("flushOutputContainer\n"); - for (Int_t i = 0; i < MAXWINDOWS; i++){ - int n=0; - for(int j=0; j < mStrips[i].size();j++) + for (Int_t i = 0; i < MAXWINDOWS; i++) { + int n = 0; + for (int j = 0; j < mStrips[i].size(); j++) n += ((mStrips[i])[j]).getNumberOfDigits(); - printf("ro #%d: digits = %d\n",i,n); + printf("ro #%d: digits = %d\n", i, n); } printf("Future digits = %d\n", mFutureDigits.size()); @@ -152,20 +152,20 @@ void WindowFiller::flushOutputContainer(std::vector& digits) for (Int_t i = 0; i < MAXWINDOWS; i++) { fillOutputContainer(digits); // fill last readout windows } - } } //______________________________________________________________________ void WindowFiller::checkIfReuseFutureDigits() { - if(! mFutureDigits.size()) return; + if (!mFutureDigits.size()) + return; // check if digits stored very far in future match the new readout windows currently available - if(mFutureToBeSorted){ + if (mFutureToBeSorted) { // sort digit in descending BC order: kept last as first std::sort(mFutureDigits.begin(), mFutureDigits.end(), - [](o2::tof::Digit a, o2::tof::Digit b) {return a.getBC() > b.getBC();}); - mFutureToBeSorted=false; + [](o2::tof::Digit a, o2::tof::Digit b) { return a.getBC() > b.getBC(); }); + mFutureToBeSorted = false; } int idigit = mFutureDigits.size() - 1; @@ -174,38 +174,37 @@ void WindowFiller::checkIfReuseFutureDigits() for (std::vector::reverse_iterator digit = mFutureDigits.rbegin(); digit != mFutureDigits.rend(); ++digit) { - if(digit->getBC() > bclimit) break; + if (digit->getBC() > bclimit) + break; - double timestamp = digit->getBC() * Geo::BC_TIME + digit->getTDC() * Geo::TDCBIN * 1E-3; // in ns - int isnext = Int_t(timestamp * Geo::READOUTWINDOW_INV) - (mReadoutWindowCurrent + 1); // to be replaced with uncalibrated time - - if (isnext < 0){ // we jump too ahead in future, digit will be not stored + double timestamp = digit->getBC() * Geo::BC_TIME + digit->getTDC() * Geo::TDCBIN * 1E-3; // in ns + int isnext = Int_t(timestamp * Geo::READOUTWINDOW_INV) - (mReadoutWindowCurrent + 1); // to be replaced with uncalibrated time + + if (isnext < 0) { // we jump too ahead in future, digit will be not stored LOG(INFO) << "Digit lost because we jump too ahead in future. Current RO window=" << isnext << "\n"; - + // remove digit from array in the future int labelremoved = digit->getLabel(); mFutureDigits.erase(mFutureDigits.begin() + idigit); - + idigit--; - + continue; } - - + if (isnext < MAXWINDOWS - 1) { // move from digit buffer array to the proper window std::vector* strips = mStripsCurrent; if (isnext) { - strips = mStripsNext[isnext - 1]; + strips = mStripsNext[isnext - 1]; } fillDigitsInStrip(strips, digit->getChannel(), digit->getTDC(), digit->getTOT(), digit->getBC(), digit->getChannel() / Geo::NPADS); - + // int labelremoved = digit->getLabel(); mFutureDigits.erase(mFutureDigits.begin() + idigit); - } - else{ + } else { bclimit = digit->getBC(); } idigit--; // go back to the next position in the reverse iterator @@ -214,18 +213,21 @@ void WindowFiller::checkIfReuseFutureDigits() //______________________________________________________________________ void WindowFiller::checkIfReuseFutureDigitsRO() // the same but using readout info information from raw { - if(! mFutureDigits.size()) return; + if (!mFutureDigits.size()) + return; // check if digits stored very far in future match the new readout windows currently available - if(mFutureToBeSorted){ + if (mFutureToBeSorted) { // sort digit in descending BC order: kept last as first std::sort(mFutureDigits.begin(), mFutureDigits.end(), - [](o2::tof::Digit a, o2::tof::Digit b) { - if(a.getTriggerOrbit() != b.getTriggerOrbit()) return a.getTriggerOrbit() > b.getTriggerOrbit(); - if(a.getTriggerBunch() != b.getTriggerBunch()) return a.getTriggerBunch() > b.getTriggerBunch(); - return a.getBC() > b.getBC(); - }); - mFutureToBeSorted=false; + [](o2::tof::Digit a, o2::tof::Digit b) { + if (a.getTriggerOrbit() != b.getTriggerOrbit()) + return a.getTriggerOrbit() > b.getTriggerOrbit(); + if (a.getTriggerBunch() != b.getTriggerBunch()) + return a.getTriggerBunch() > b.getTriggerBunch(); + return a.getBC() > b.getBC(); + }); + mFutureToBeSorted = false; } int idigit = mFutureDigits.size() - 1; @@ -234,40 +236,39 @@ void WindowFiller::checkIfReuseFutureDigitsRO() // the same but using readout in for (std::vector::reverse_iterator digit = mFutureDigits.rbegin(); digit != mFutureDigits.rend(); ++digit) { - int row = (digit->getTriggerOrbit() - mFirstOrbit) *Geo::BC_IN_ORBIT + (digit->getTriggerBunch() - mFirstBunch) + 100; // N bunch id of the trigger from timeframe start + 100 bunches + int row = (digit->getTriggerOrbit() - mFirstOrbit) * Geo::BC_IN_ORBIT + (digit->getTriggerBunch() - mFirstBunch) + 100; // N bunch id of the trigger from timeframe start + 100 bunches row *= Geo::BC_IN_WINDOW_INV; - if(row > rolimit) break; + if (row > rolimit) + break; int isnext = row - mReadoutWindowCurrent; - - if (isnext < 0){ // we jump too ahead in future, digit will be not stored + + if (isnext < 0) { // we jump too ahead in future, digit will be not stored LOG(INFO) << "Digit lost because we jump too ahead in future. Current RO window=" << isnext << "\n"; - + // remove digit from array in the future int labelremoved = digit->getLabel(); mFutureDigits.erase(mFutureDigits.begin() + idigit); - + idigit--; - + continue; } - - + if (isnext < MAXWINDOWS - 1) { // move from digit buffer array to the proper window std::vector* strips = mStripsCurrent; if (isnext) { - strips = mStripsNext[isnext - 1]; + strips = mStripsNext[isnext - 1]; } fillDigitsInStrip(strips, digit->getChannel(), digit->getTDC(), digit->getTOT(), digit->getBC(), digit->getChannel() / Geo::NPADS); - + // int labelremoved = digit->getLabel(); mFutureDigits.erase(mFutureDigits.begin() + idigit); - } - else{ + } else { rolimit = row; } idigit--; // go back to the next position in the reverse iterator diff --git a/Detectors/TOF/calibration/include/TOFCalibration/CalibTOF.h b/Detectors/TOF/calibration/include/TOFCalibration/CalibTOF.h index 57d23989e2f0e..bf96befa8c8a3 100644 --- a/Detectors/TOF/calibration/include/TOFCalibration/CalibTOF.h +++ b/Detectors/TOF/calibration/include/TOFCalibration/CalibTOF.h @@ -135,8 +135,8 @@ class CalibTOF // Data members - bool mInitDone = false; ///< flag init already done - bool mFillCCDB = false; ///< flag init already doneto decide whether to fill or not the CCDB + bool mInitDone = false; ///< flag init already done + bool mFillCCDB = false; ///< flag init already doneto decide whether to fill or not the CCDB std::string mCCDBpath = "http://ccdb-test.cern.ch:8080"; ///< path to CCDB ///========== Parameters to be set externally, e.g. from CCDB ==================== diff --git a/Detectors/TOF/compression/include/TOFCompression/CompressedInspectorTask.h b/Detectors/TOF/compression/include/TOFCompression/CompressedInspectorTask.h index ec0c6537b0c91..1f060615bb690 100644 --- a/Detectors/TOF/compression/include/TOFCompression/CompressedInspectorTask.h +++ b/Detectors/TOF/compression/include/TOFCompression/CompressedInspectorTask.h @@ -43,7 +43,7 @@ class CompressedInspectorTask : public Task private: bool mStatus = false; - TFile *mFile = nullptr; + TFile* mFile = nullptr; std::map mHistos1D; std::map mHistos2D; }; diff --git a/Detectors/TOF/compression/include/TOFCompression/Compressor.h b/Detectors/TOF/compression/include/TOFCompression/Compressor.h index 4a8fe11b89fec..6e9cdafbb7782 100644 --- a/Detectors/TOF/compression/include/TOFCompression/Compressor.h +++ b/Detectors/TOF/compression/include/TOFCompression/Compressor.h @@ -38,7 +38,8 @@ class Compressor inline bool run() { rewind(); - while (!processHBF()); + while (!processHBF()) + ; return false; }; @@ -73,7 +74,6 @@ class Compressor double mIntegratedTime = 0.; protected: - bool processHBF(); bool processDRM(); @@ -94,7 +94,7 @@ class Compressor }; int mJumpRDH = 0; - + std::ifstream mDecoderFile; char* mDecoderBuffer = nullptr; bool mOwnDecoderBuffer = false; @@ -111,7 +111,7 @@ class Compressor char mDecoderSaveBuffer[1048576]; uint32_t mDecoderSaveBufferDataSize = 0; uint32_t mDecoderSaveBufferDataLeft = 0; - + /** encoder private functions and data members **/ bool encoderInit(); @@ -198,7 +198,6 @@ class Compressor uint32_t nDiagnosticWords; uint32_t DiagnosticWord[12]; } mCheckerSummary = {0}; - }; } // namespace tof diff --git a/Detectors/TOF/compression/include/TOFCompression/CompressorTask.h b/Detectors/TOF/compression/include/TOFCompression/CompressorTask.h index fdc261c5546bc..dc7f1fb9e99fb 100644 --- a/Detectors/TOF/compression/include/TOFCompression/CompressorTask.h +++ b/Detectors/TOF/compression/include/TOFCompression/CompressorTask.h @@ -43,7 +43,6 @@ class CompressorTask : public Task Compressor mCompressor; int mTicks = 0; RawDataFrame mDataFrame; - }; } // namespace tof diff --git a/Detectors/TOF/compression/src/CompressedInspectorTask.cxx b/Detectors/TOF/compression/src/CompressedInspectorTask.cxx index b3e22be75e7a8..18916d7e791ee 100644 --- a/Detectors/TOF/compression/src/CompressedInspectorTask.cxx +++ b/Detectors/TOF/compression/src/CompressedInspectorTask.cxx @@ -59,15 +59,15 @@ void CompressedInspectorTask::init(InitContext& ic) mHistos1D["indexE"] = new TH1F("hIndexE", ";index EO", 172800, 0., 172800.); mHistos2D["slotEnableMask"] = new TH2F("hSlotEnableMask", ";crate;slot", 72, 0., 72., 12, 1., 13.); mHistos2D["diagnostic"] = new TH2F("hDiagnostic", ";crate;slot", 72, 0., 72., 12, 1., 13.); - + auto finishFunction = [this]() { - LOG(INFO) << "CompressedInspector finish"; - for (auto& histo : mHistos1D) - histo.second->Write(); - for (auto& histo : mHistos2D) - histo.second->Write(); - mFile->Close(); - }; + LOG(INFO) << "CompressedInspector finish"; + for (auto& histo : mHistos1D) + histo.second->Write(); + for (auto& histo : mHistos2D) + histo.second->Write(); + mFile->Close(); + }; ic.services().get().set(CallbackService::Id::Stop, finishFunction); // ic.services().get().set(CallbackService::Id::EndOfStream, finishFunction); } @@ -104,93 +104,91 @@ void CompressedInspectorTask::run(ProcessingContext& pc) std::cout << "--- RDH open detected" << std::endl; o2::utils::HBFUtils::printRDH(*rdh); #endif - + pointer += rdh->headerSize; - + while (pointer < (reinterpret_cast(rdh) + rdh->memorySize)) { - + auto word = reinterpret_cast(pointer); if (*word & 0x80000000 != 0x80000000) { - printf(" %08x [ERROR] \n ", *(uint32_t*)pointer); - return; + printf(" %08x [ERROR] \n ", *(uint32_t*)pointer); + return; } - + /** crate header detected **/ auto crateHeader = reinterpret_cast(pointer); #ifdef VERBOSE printf(" %08x CrateHeader (drmID=%d) \n ", *(uint32_t*)pointer, crateHeader->drmID); #endif for (int ibit = 0; ibit < 11; ++ibit) - if (crateHeader->slotEnableMask & (1 << ibit)) - mHistos2D["slotEnableMask"]->Fill(crateHeader->drmID, ibit + 2); + if (crateHeader->slotEnableMask & (1 << ibit)) + mHistos2D["slotEnableMask"]->Fill(crateHeader->drmID, ibit + 2); pointer += 4; - + /** crate orbit expected **/ auto crateOrbit = reinterpret_cast(pointer); #ifdef VERBOSE printf(" %08x CrateOrbit (orbit=0x%08x) \n ", *(uint32_t*)pointer, crateOrbit->orbitID); #endif pointer += 4; - + while (true) { - word = reinterpret_cast(pointer); - - /** crate trailer detected **/ - if (*word & 0x80000000) { - auto crateTrailer = reinterpret_cast(pointer); + word = reinterpret_cast(pointer); + + /** crate trailer detected **/ + if (*word & 0x80000000) { + auto crateTrailer = reinterpret_cast(pointer); #ifdef VERBOSE - printf(" %08x CrateTrailer (numberOfDiagnostics=%d) \n ", *(uint32_t*)pointer, crateTrailer->numberOfDiagnostics); + printf(" %08x CrateTrailer (numberOfDiagnostics=%d) \n ", *(uint32_t*)pointer, crateTrailer->numberOfDiagnostics); #endif - pointer += 4; - - /** loop over diagnostics **/ - for (int i = 0; i < crateTrailer->numberOfDiagnostics; ++i) { - auto diagnostic = reinterpret_cast(pointer); + pointer += 4; + + /** loop over diagnostics **/ + for (int i = 0; i < crateTrailer->numberOfDiagnostics; ++i) { + auto diagnostic = reinterpret_cast(pointer); #ifdef VERBOSE - printf(" %08x Diagnostic (slotId=%d) \n ", *(uint32_t*)pointer, diagnostic->slotID); + printf(" %08x Diagnostic (slotId=%d) \n ", *(uint32_t*)pointer, diagnostic->slotID); #endif - mHistos2D["diagnostic"]->Fill(crateHeader->drmID, diagnostic->slotID); - pointer += 4; - } - - break; - } - - /** frame header detected **/ - auto frameHeader = reinterpret_cast(pointer); + mHistos2D["diagnostic"]->Fill(crateHeader->drmID, diagnostic->slotID); + pointer += 4; + } + + break; + } + + /** frame header detected **/ + auto frameHeader = reinterpret_cast(pointer); #ifdef VERBOSE - printf(" %08x FrameHeader (numberOfHits=%d) \n ", *(uint32_t*)pointer, frameHeader->numberOfHits); + printf(" %08x FrameHeader (numberOfHits=%d) \n ", *(uint32_t*)pointer, frameHeader->numberOfHits); #endif - mHistos1D["hHisto"]->Fill(frameHeader->numberOfHits); - pointer += 4; - - /** loop over hits **/ - for (int i = 0; i < frameHeader->numberOfHits; ++i) { - auto packedHit = reinterpret_cast(pointer); + mHistos1D["hHisto"]->Fill(frameHeader->numberOfHits); + pointer += 4; + + /** loop over hits **/ + for (int i = 0; i < frameHeader->numberOfHits; ++i) { + auto packedHit = reinterpret_cast(pointer); #ifdef VERBOSE - printf(" %08x PackedHit (tdcID=%d) \n ", *(uint32_t*)pointer, packedHit->tdcID); + printf(" %08x PackedHit (tdcID=%d) \n ", *(uint32_t*)pointer, packedHit->tdcID); #endif - auto indexE = packedHit->channel + - 8 * packedHit->tdcID + - 120 * packedHit->chain + - 240 * (frameHeader->trmID - 3) + - 2400 * crateHeader->drmID; - int time = packedHit->time; - time += (frameHeader->frameID << 13); - - mHistos1D["indexE"]->Fill(indexE); - mHistos1D["time"]->Fill(time); - mHistos1D["tot"]->Fill(packedHit->tot); - pointer += 4; - } - + auto indexE = packedHit->channel + + 8 * packedHit->tdcID + + 120 * packedHit->chain + + 240 * (frameHeader->trmID - 3) + + 2400 * crateHeader->drmID; + int time = packedHit->time; + time += (frameHeader->frameID << 13); + + mHistos1D["indexE"]->Fill(indexE); + mHistos1D["time"]->Fill(time); + mHistos1D["tot"]->Fill(packedHit->tot); + pointer += 4; + } } - } - + pointer = reinterpret_cast(rdh) + rdh->offsetToNext; } - + /** write to file **/ // mFile.write(dataFrame->mBuffer, dataFrame->mSize); } diff --git a/Detectors/TOF/compression/src/CompressedWriterTask.cxx b/Detectors/TOF/compression/src/CompressedWriterTask.cxx index ce0f1adabe120..ee2bec1acf20f 100644 --- a/Detectors/TOF/compression/src/CompressedWriterTask.cxx +++ b/Detectors/TOF/compression/src/CompressedWriterTask.cxx @@ -43,9 +43,9 @@ void CompressedWriterTask::init(InitContext& ic) } auto finishFunction = [this]() { - LOG(INFO) << "CompressedWriter finish"; - mFile.close(); - }; + LOG(INFO) << "CompressedWriter finish"; + mFile.close(); + }; ic.services().get().set(CallbackService::Id::Stop, finishFunction); } diff --git a/Detectors/TOF/compression/src/Compressor.cxx b/Detectors/TOF/compression/src/Compressor.cxx index 794d03abd4485..d33df5a53ea7b 100644 --- a/Detectors/TOF/compression/src/Compressor.cxx +++ b/Detectors/TOF/compression/src/Compressor.cxx @@ -87,7 +87,7 @@ namespace tof Compressor::Compressor() { } - + Compressor::~Compressor() { if (mDecoderBuffer && mOwnDecoderBuffer) @@ -128,16 +128,16 @@ bool Compressor::decoderInit() #ifdef DECODER_VERBOSE if (mDecoderVerbose) { std::cout << colorBlue - << "--- INITIALISE DECODER BUFFER: " << mDecoderBufferSize << " bytes" - << colorReset - << std::endl; + << "--- INITIALISE DECODER BUFFER: " << mDecoderBufferSize << " bytes" + << colorReset + << std::endl; } #endif if (mDecoderBuffer && mOwnDecoderBuffer) { std::cout << colorYellow - << "--- a buffer was already allocated, cleaning" - << colorReset - << std::endl; + << "--- a buffer was already allocated, cleaning" + << colorReset + << std::endl; delete[] mDecoderBuffer; } mDecoderBuffer = new char[mDecoderBufferSize]; @@ -150,16 +150,16 @@ bool Compressor::encoderInit() #ifdef ENCODER_VERBOSE if (mEncoderVerbose) { std::cout << colorBlue - << "--- INITIALISE ENCODER BUFFER: " << mEncoderBufferSize << " bytes" - << colorReset - << std::endl; + << "--- INITIALISE ENCODER BUFFER: " << mEncoderBufferSize << " bytes" + << colorReset + << std::endl; } #endif if (mEncoderBuffer && mOwnEncoderBuffer) { std::cout << colorYellow - << "-W- a buffer was already allocated, cleaning" - << colorReset - << std::endl; + << "-W- a buffer was already allocated, cleaning" + << colorReset + << std::endl; delete[] mEncoderBuffer; } mEncoderBuffer = new char[mEncoderBufferSize]; @@ -172,17 +172,17 @@ bool Compressor::decoderOpen(std::string name) { if (mDecoderFile.is_open()) { std::cout << colorYellow - << "-W- a file was already open, closing" - << colorReset - << std::endl; + << "-W- a file was already open, closing" + << colorReset + << std::endl; mDecoderFile.close(); } mDecoderFile.open(name.c_str(), std::fstream::in | std::fstream::binary); if (!mDecoderFile.is_open()) { std::cerr << colorRed - << "-E- Cannot open input file: " << name - << colorReset - << std::endl; + << "-E- Cannot open input file: " << name + << colorReset + << std::endl; return true; } return false; @@ -192,21 +192,21 @@ bool Compressor::encoderOpen(std::string name) { if (mEncoderFile.is_open()) { std::cout << colorYellow - << "-W- a file was already open, closing" - << colorReset - << std::endl; + << "-W- a file was already open, closing" + << colorReset + << std::endl; mEncoderFile.close(); } mEncoderFile.open(name.c_str(), std::fstream::out | std::fstream::binary); if (!mEncoderFile.is_open()) { std::cerr << colorRed << "-E- Cannot open output file: " << name - << colorReset - << std::endl; + << colorReset + << std::endl; return true; } return false; } - + bool Compressor::decoderClose() { if (mDecoderFile.is_open()) { @@ -227,11 +227,11 @@ bool Compressor::decoderRead() { if (!mDecoderFile.is_open()) { std::cout << colorRed << "--- no input file is open" - << colorReset - << std::endl; + << colorReset + << std::endl; return true; } - + char* inputPointer = mDecoderBuffer; mDecoderFile.read(inputPointer, 64); mDecoderBufferSize = 64; @@ -244,35 +244,35 @@ bool Compressor::decoderRead() mDecoderBufferSize += 64; rdh = reinterpret_cast(inputPointer); } - + /** check end of file **/ if (mDecoderFile.eof()) { std::cout << colorRed << "--- Nothing else to read" - << colorReset - << std::endl; + << colorReset + << std::endl; return true; } - + #ifdef DECODER_VERBOSE if (mDecoderVerbose) { std::cout << colorBlue - << "--- DECODER READ HBF: " << mDecoderBufferSize << " bytes" - << colorReset - << std::endl; + << "--- DECODER READ HBF: " << mDecoderBufferSize << " bytes" + << colorReset + << std::endl; } #endif - + return false; } - + bool Compressor::encoderWrite() { #ifdef ENCODER_VERBOSE if (mEncoderVerbose) { std::cout << colorBlue - << "--- ENCODER WRITE BUFFER: " << getEncoderByteCounter() << " bytes" - << colorReset - << std::endl; + << "--- ENCODER WRITE BUFFER: " << getEncoderByteCounter() << " bytes" + << colorReset + << std::endl; } #endif mEncoderFile.write(mEncoderBuffer, getEncoderByteCounter()); @@ -296,25 +296,25 @@ bool Compressor::processHBF() #ifdef DECODER_VERBOSE if (mDecoderVerbose) { std::cout << colorBlue - << "--- PROCESS HBF" - << colorReset - << std::endl; + << "--- PROCESS HBF" + << colorReset + << std::endl; } #endif - + mDecoderRDH = reinterpret_cast(mDecoderPointer); mEncoderRDH = reinterpret_cast(mEncoderPointer); auto rdh = mDecoderRDH; - + /** loop until RDH close **/ while (!rdh->stop) { #ifdef DECODER_VERBOSE if (mDecoderVerbose) { std::cout << colorBlue - << "--- RDH open/continue detected" - << colorReset - << std::endl; + << "--- RDH open/continue detected" + << colorReset + << std::endl; o2::utils::HBFUtils::printRDH(*rdh); } #endif @@ -323,11 +323,11 @@ bool Compressor::processHBF() auto memorySize = rdh->memorySize; auto offsetToNext = rdh->offsetToNext; auto drmPayload = memorySize - headerSize; - + /** copy DRM payload to save buffer **/ std::memcpy(mDecoderSaveBuffer + mDecoderSaveBufferDataSize, reinterpret_cast(rdh) + headerSize, drmPayload); mDecoderSaveBufferDataSize += drmPayload; - + /** move to next RDH **/ rdh = reinterpret_cast(reinterpret_cast(rdh) + offsetToNext); @@ -338,21 +338,21 @@ bool Compressor::processHBF() /** otherwise return **/ return true; } - + #ifdef DECODER_VERBOSE if (mDecoderVerbose) { std::cout << colorBlue - << "--- RDH close detected" - << colorReset - << std::endl; + << "--- RDH close detected" + << colorReset + << std::endl; o2::utils::HBFUtils::printRDH(*rdh); } #endif - + /** copy RDH open to encoder buffer **/ std::memcpy(mEncoderPointer, mDecoderRDH, mDecoderRDH->headerSize); mEncoderPointer = reinterpret_cast(reinterpret_cast(mEncoderPointer) + rdh->headerSize); - + /** process DRM data **/ mDecoderPointer = reinterpret_cast(mDecoderSaveBuffer); mDecoderPointerMax = reinterpret_cast(mDecoderSaveBuffer + mDecoderSaveBufferDataSize); @@ -362,7 +362,7 @@ bool Compressor::processHBF() break; } mDecoderSaveBufferDataSize = 0; - + /** bring encoder pointer back if fatal error **/ if (mDecoderFatal) { mFatalCounter++; @@ -371,7 +371,7 @@ bool Compressor::processHBF() if (mDecoderError) mErrorCounter++; - + /** updated encoder RDH open **/ mEncoderRDH->memorySize = reinterpret_cast(mEncoderPointer) - reinterpret_cast(mEncoderRDH); mEncoderRDH->offsetToNext = mEncoderRDH->memorySize; @@ -387,1113 +387,1113 @@ bool Compressor::processHBF() #ifdef DECODER_VERBOSE if (mDecoderVerbose) { std::cout << colorBlue - << "--- END PROCESS HBF" - << colorReset - << std::endl; + << "--- END PROCESS HBF" + << colorReset + << std::endl; } #endif /** move to next RDH **/ mDecoderPointer = reinterpret_cast(reinterpret_cast(rdh) + rdh->offsetToNext); - + /** check next RDH is within buffer **/ if (reinterpret_cast(mDecoderPointer) < mDecoderBuffer + mDecoderBufferSize) return false; - + /** otherwise return **/ return true; } bool Compressor::processDRM() { - + #ifdef DECODER_VERBOSE - if (mDecoderVerbose) { - std::cout << colorBlue << "--- PROCESS DRM" - << colorReset - << std::endl; - } + if (mDecoderVerbose) { + std::cout << colorBlue << "--- PROCESS DRM" + << colorReset + << std::endl; + } #endif - /** init decoder **/ - mDecoderNextWord = 1; - mDecoderError = false; - mDecoderFatal = false; - mEncoderPointerStart = mEncoderPointer; - - /** check TOF Data Header **/ - if (!IS_DRM_COMMON_HEADER(*mDecoderPointer)) { + /** init decoder **/ + mDecoderNextWord = 1; + mDecoderError = false; + mDecoderFatal = false; + mEncoderPointerStart = mEncoderPointer; + + /** check TOF Data Header **/ + if (!IS_DRM_COMMON_HEADER(*mDecoderPointer)) { #ifdef DECODER_VERBOSE - printf("%s %08x [ERROR] fatal error %s \n", colorRed, *mDecoderPointer, colorReset); + printf("%s %08x [ERROR] fatal error %s \n", colorRed, *mDecoderPointer, colorReset); #endif - mDecoderFatal = true; - return true; - } - mDecoderSummary.tofDataHeader = *mDecoderPointer; + mDecoderFatal = true; + return true; + } + mDecoderSummary.tofDataHeader = *mDecoderPointer; #ifdef DECODER_VERBOSE - if (mDecoderVerbose) { - auto tofDataHeader = reinterpret_cast(mDecoderPointer); - auto bytePayload = tofDataHeader->bytePayload; - printf(" %08x TOF Data Header (bytePayload=%d) \n", *mDecoderPointer, bytePayload); - } + if (mDecoderVerbose) { + auto tofDataHeader = reinterpret_cast(mDecoderPointer); + auto bytePayload = tofDataHeader->bytePayload; + printf(" %08x TOF Data Header (bytePayload=%d) \n", *mDecoderPointer, bytePayload); + } #endif #ifdef DECODER_PARANOID - if (decoderParanoid()) - return true; -#endif - decoderNext(); - - /** TOF Orbit **/ - mDecoderSummary.tofOrbit = *mDecoderPointer; + if (decoderParanoid()) + return true; +#endif + decoderNext(); + + /** TOF Orbit **/ + mDecoderSummary.tofOrbit = *mDecoderPointer; #ifdef DECODER_VERBOSE - if (mDecoderVerbose) { - auto tofOrbit = reinterpret_cast(mDecoderPointer); - auto orbit = tofOrbit->orbit; - printf(" %08x TOF Orbit (orbit=%d) \n", *mDecoderPointer, orbit); - } + if (mDecoderVerbose) { + auto tofOrbit = reinterpret_cast(mDecoderPointer); + auto orbit = tofOrbit->orbit; + printf(" %08x TOF Orbit (orbit=%d) \n", *mDecoderPointer, orbit); + } #endif #ifdef DECODER_PARANOID - if (decoderParanoid()) - return true; -#endif - decoderNext(); + if (decoderParanoid()) + return true; +#endif + decoderNext(); - /** check DRM Data Header **/ - if (!IS_DRM_GLOBAL_HEADER(*mDecoderPointer)) { + /** check DRM Data Header **/ + if (!IS_DRM_GLOBAL_HEADER(*mDecoderPointer)) { #ifdef DECODER_VERBOSE - printf("%s %08x [ERROR] fatal error %s \n", colorRed, *mDecoderPointer, colorReset); + printf("%s %08x [ERROR] fatal error %s \n", colorRed, *mDecoderPointer, colorReset); #endif - mDecoderFatal = true; - return true; - } - mDecoderSummary.drmDataHeader = *mDecoderPointer; + mDecoderFatal = true; + return true; + } + mDecoderSummary.drmDataHeader = *mDecoderPointer; #ifdef DECODER_VERBOSE - if (mDecoderVerbose) { - auto drmDataHeader = reinterpret_cast(mDecoderPointer); - auto drmId = drmDataHeader->drmId; - printf(" %08x DRM Data Header (drmId=%d) \n", *mDecoderPointer, drmId); - } + if (mDecoderVerbose) { + auto drmDataHeader = reinterpret_cast(mDecoderPointer); + auto drmId = drmDataHeader->drmId; + printf(" %08x DRM Data Header (drmId=%d) \n", *mDecoderPointer, drmId); + } #endif #ifdef DECODER_PARANOID - if (decoderParanoid()) - return true; -#endif - decoderNext(); + if (decoderParanoid()) + return true; +#endif + decoderNext(); - /** DRM Header Word 1 **/ - mDecoderSummary.drmHeadW1 = *mDecoderPointer; + /** DRM Header Word 1 **/ + mDecoderSummary.drmHeadW1 = *mDecoderPointer; #ifdef DECODER_VERBOSE - if (mDecoderVerbose) { - auto drmHeadW1 = reinterpret_cast(mDecoderPointer); - auto partSlotMask = drmHeadW1->partSlotMask; - auto clockStatus = drmHeadW1->clockStatus; - auto drmHSize = drmHeadW1->drmHSize; - printf(" %08x DRM Header Word 1 (partSlotMask=0x%03x, clockStatus=%d, drmHSize=%d) \n", *mDecoderPointer, partSlotMask, clockStatus, drmHSize); - } + if (mDecoderVerbose) { + auto drmHeadW1 = reinterpret_cast(mDecoderPointer); + auto partSlotMask = drmHeadW1->partSlotMask; + auto clockStatus = drmHeadW1->clockStatus; + auto drmHSize = drmHeadW1->drmHSize; + printf(" %08x DRM Header Word 1 (partSlotMask=0x%03x, clockStatus=%d, drmHSize=%d) \n", *mDecoderPointer, partSlotMask, clockStatus, drmHSize); + } #endif #ifdef DECODER_PARANOID - if (decoderParanoid()) - return true; -#endif - decoderNext(); + if (decoderParanoid()) + return true; +#endif + decoderNext(); - /** DRM Header Word 2 **/ - mDecoderSummary.drmHeadW2 = *mDecoderPointer; + /** DRM Header Word 2 **/ + mDecoderSummary.drmHeadW2 = *mDecoderPointer; #ifdef DECODER_VERBOSE - if (mDecoderVerbose) { - auto drmHeadW2 = reinterpret_cast(mDecoderPointer); - auto enaSlotMask = drmHeadW2->enaSlotMask; - auto faultSlotMask = drmHeadW2->faultSlotMask; - auto readoutTimeOut = drmHeadW2->readoutTimeOut; - printf(" %08x DRM Header Word 2 (enaSlotMask=0x%03x, faultSlotMask=%d, readoutTimeOut=%d) \n", *mDecoderPointer, enaSlotMask, faultSlotMask, readoutTimeOut); - } + if (mDecoderVerbose) { + auto drmHeadW2 = reinterpret_cast(mDecoderPointer); + auto enaSlotMask = drmHeadW2->enaSlotMask; + auto faultSlotMask = drmHeadW2->faultSlotMask; + auto readoutTimeOut = drmHeadW2->readoutTimeOut; + printf(" %08x DRM Header Word 2 (enaSlotMask=0x%03x, faultSlotMask=%d, readoutTimeOut=%d) \n", *mDecoderPointer, enaSlotMask, faultSlotMask, readoutTimeOut); + } #endif #ifdef DECODER_PARANOID - if (decoderParanoid()) - return true; -#endif - decoderNext(); + if (decoderParanoid()) + return true; +#endif + decoderNext(); - /** DRM Header Word 3 **/ - mDecoderSummary.drmHeadW3 = *mDecoderPointer; + /** DRM Header Word 3 **/ + mDecoderSummary.drmHeadW3 = *mDecoderPointer; #ifdef DECODER_VERBOSE - if (mDecoderVerbose) { - auto drmHeadW3 = reinterpret_cast(mDecoderPointer); - auto gbtBunchCnt = drmHeadW3->gbtBunchCnt; - auto locBunchCnt = drmHeadW3->locBunchCnt; - printf(" %08x DRM Header Word 3 (gbtBunchCnt=%d, locBunchCnt=%d) \n", *mDecoderPointer, gbtBunchCnt, locBunchCnt); - } + if (mDecoderVerbose) { + auto drmHeadW3 = reinterpret_cast(mDecoderPointer); + auto gbtBunchCnt = drmHeadW3->gbtBunchCnt; + auto locBunchCnt = drmHeadW3->locBunchCnt; + printf(" %08x DRM Header Word 3 (gbtBunchCnt=%d, locBunchCnt=%d) \n", *mDecoderPointer, gbtBunchCnt, locBunchCnt); + } #endif #ifdef DECODER_PARANOID - if (decoderParanoid()) - return true; -#endif - decoderNext(); + if (decoderParanoid()) + return true; +#endif + decoderNext(); - /** DRM Header Word 4 **/ - mDecoderSummary.drmHeadW4 = *mDecoderPointer; + /** DRM Header Word 4 **/ + mDecoderSummary.drmHeadW4 = *mDecoderPointer; #ifdef DECODER_VERBOSE - if (mDecoderVerbose) { - printf(" %08x DRM Header Word 4 \n", *mDecoderPointer); - } + if (mDecoderVerbose) { + printf(" %08x DRM Header Word 4 \n", *mDecoderPointer); + } #endif #ifdef DECODER_PARANOID - if (decoderParanoid()) - return true; -#endif - decoderNext(); + if (decoderParanoid()) + return true; +#endif + decoderNext(); - /** DRM Header Word 5 **/ - mDecoderSummary.drmHeadW5 = *mDecoderPointer; + /** DRM Header Word 5 **/ + mDecoderSummary.drmHeadW5 = *mDecoderPointer; #ifdef DECODER_VERBOSE - if (mDecoderVerbose) { - printf(" %08x DRM Header Word 5 \n", *mDecoderPointer); - } + if (mDecoderVerbose) { + printf(" %08x DRM Header Word 5 \n", *mDecoderPointer); + } #endif #ifdef DECODER_PARANOID - if (decoderParanoid()) - return true; -#endif - decoderNext(); + if (decoderParanoid()) + return true; +#endif + decoderNext(); - /** encode Crate Header **/ - *mEncoderPointer = 0x80000000; - *mEncoderPointer |= GET_DRMHEADW2_ENASLOTMASK(mDecoderSummary.drmHeadW2) << 12; - *mEncoderPointer |= GET_DRMDATAHEADER_DRMID(mDecoderSummary.drmDataHeader) << 24; - *mEncoderPointer |= GET_DRMHEADW3_GBTBUNCHCNT(mDecoderSummary.drmHeadW3); + /** encode Crate Header **/ + *mEncoderPointer = 0x80000000; + *mEncoderPointer |= GET_DRMHEADW2_ENASLOTMASK(mDecoderSummary.drmHeadW2) << 12; + *mEncoderPointer |= GET_DRMDATAHEADER_DRMID(mDecoderSummary.drmDataHeader) << 24; + *mEncoderPointer |= GET_DRMHEADW3_GBTBUNCHCNT(mDecoderSummary.drmHeadW3); #ifdef ENCODER_VERBOSE - if (mEncoderVerbose) { - auto crateHeader = reinterpret_cast(mEncoderPointer); - auto bunchID = crateHeader->bunchID; - auto drmID = crateHeader->drmID; - auto slotEnableMask = crateHeader->slotEnableMask; - printf("%s %08x Crate header (drmID=%d, bunchID=%d, slotEnableMask=0x%x) %s \n", colorGreen, *mEncoderPointer, drmID, bunchID, slotEnableMask, colorReset); - } + if (mEncoderVerbose) { + auto crateHeader = reinterpret_cast(mEncoderPointer); + auto bunchID = crateHeader->bunchID; + auto drmID = crateHeader->drmID; + auto slotEnableMask = crateHeader->slotEnableMask; + printf("%s %08x Crate header (drmID=%d, bunchID=%d, slotEnableMask=0x%x) %s \n", colorGreen, *mEncoderPointer, drmID, bunchID, slotEnableMask, colorReset); + } #endif - encoderNext(); + encoderNext(); - /** encode Crate Orbit **/ - *mEncoderPointer = mDecoderSummary.tofOrbit; + /** encode Crate Orbit **/ + *mEncoderPointer = mDecoderSummary.tofOrbit; #ifdef ENCODER_VERBOSE - if (mEncoderVerbose) { - auto crateOrbit = reinterpret_cast(mEncoderPointer); - auto orbitID = crateOrbit->orbitID; - printf("%s %08x Crate orbit (orbitID=%d) %s \n", colorGreen, *mEncoderPointer, orbitID, colorReset); - } + if (mEncoderVerbose) { + auto crateOrbit = reinterpret_cast(mEncoderPointer); + auto orbitID = crateOrbit->orbitID; + printf("%s %08x Crate orbit (orbitID=%d) %s \n", colorGreen, *mEncoderPointer, orbitID, colorReset); + } #endif - encoderNext(); + encoderNext(); - /** loop over DRM payload **/ - while (true) { - /** LTM global header detected **/ - if (IS_LTM_GLOBAL_HEADER(*mDecoderPointer)) { + /** loop over DRM payload **/ + while (true) { + /** LTM global header detected **/ + if (IS_LTM_GLOBAL_HEADER(*mDecoderPointer)) { #ifdef DECODER_VERBOSE - if (mDecoderVerbose) { - printf(" %08x LTM Global Header \n", *mDecoderPointer); - } + if (mDecoderVerbose) { + printf(" %08x LTM Global Header \n", *mDecoderPointer); + } #endif #ifdef DECODER_PARANOID - if (decoderParanoid()) - return true; -#endif - decoderNext(); - - /** loop over LTM payload **/ - while (true) { - /** LTM global trailer detected **/ - if (IS_LTM_GLOBAL_TRAILER(*mDecoderPointer)) { + if (decoderParanoid()) + return true; +#endif + decoderNext(); + + /** loop over LTM payload **/ + while (true) { + /** LTM global trailer detected **/ + if (IS_LTM_GLOBAL_TRAILER(*mDecoderPointer)) { #ifdef DECODER_VERBOSE - if (mDecoderVerbose) { - printf(" %08x LTM Global Trailer \n", *mDecoderPointer); - } + if (mDecoderVerbose) { + printf(" %08x LTM Global Trailer \n", *mDecoderPointer); + } #endif #ifdef DECODER_PARANOID - if (decoderParanoid()) - return true; -#endif - decoderNext(); - break; - } + if (decoderParanoid()) + return true; +#endif + decoderNext(); + break; + } #ifdef DECODER_VERBOSE - if (mDecoderVerbose) { - printf(" %08x LTM data \n", *mDecoderPointer); - } + if (mDecoderVerbose) { + printf(" %08x LTM data \n", *mDecoderPointer); + } #endif #ifdef DECODER_PARANOID - if (decoderParanoid()) - return true; -#endif - decoderNext(); - } + if (decoderParanoid()) + return true; +#endif + decoderNext(); } + } - /** TRM Data Header detected **/ - if (IS_TRM_GLOBAL_HEADER(*mDecoderPointer) && GET_TRMDATAHEADER_SLOTID(*mDecoderPointer) > 2) { - uint32_t slotId = GET_TRMDATAHEADER_SLOTID(*mDecoderPointer); - int itrm = slotId - 3; - mDecoderSummary.trmDataHeader[itrm] = *mDecoderPointer; + /** TRM Data Header detected **/ + if (IS_TRM_GLOBAL_HEADER(*mDecoderPointer) && GET_TRMDATAHEADER_SLOTID(*mDecoderPointer) > 2) { + uint32_t slotId = GET_TRMDATAHEADER_SLOTID(*mDecoderPointer); + int itrm = slotId - 3; + mDecoderSummary.trmDataHeader[itrm] = *mDecoderPointer; #ifdef DECODER_VERBOSE - if (mDecoderVerbose) { - auto trmDataHeader = reinterpret_cast(mDecoderPointer); - auto eventWords = trmDataHeader->eventWords; - auto eventCnt = trmDataHeader->eventCnt; - auto emptyBit = trmDataHeader->emptyBit; - printf(" %08x TRM Data Header (slotId=%d, eventWords=%d, eventCnt=%d, emptyBit=%01x) \n", *mDecoderPointer, slotId, eventWords, eventCnt, emptyBit); - } + if (mDecoderVerbose) { + auto trmDataHeader = reinterpret_cast(mDecoderPointer); + auto eventWords = trmDataHeader->eventWords; + auto eventCnt = trmDataHeader->eventCnt; + auto emptyBit = trmDataHeader->emptyBit; + printf(" %08x TRM Data Header (slotId=%d, eventWords=%d, eventCnt=%d, emptyBit=%01x) \n", *mDecoderPointer, slotId, eventWords, eventCnt, emptyBit); + } #endif #ifdef DECODER_PARANOID - if (decoderParanoid()) - return true; -#endif - decoderNext(); - - /** loop over TRM payload **/ - while (true) { - /** TRM Chain-A Header detected **/ - if (IS_TRM_CHAINA_HEADER(*mDecoderPointer) && GET_TRMCHAINHEADER_SLOTID(*mDecoderPointer) == slotId) { - mDecoderSummary.trmChainHeader[itrm][0] = *mDecoderPointer; - mDecoderSummary.hasHits[itrm][0] = false; - mDecoderSummary.hasErrors[itrm][0] = false; + if (decoderParanoid()) + return true; +#endif + decoderNext(); + + /** loop over TRM payload **/ + while (true) { + /** TRM Chain-A Header detected **/ + if (IS_TRM_CHAINA_HEADER(*mDecoderPointer) && GET_TRMCHAINHEADER_SLOTID(*mDecoderPointer) == slotId) { + mDecoderSummary.trmChainHeader[itrm][0] = *mDecoderPointer; + mDecoderSummary.hasHits[itrm][0] = false; + mDecoderSummary.hasErrors[itrm][0] = false; #ifdef DECODER_VERBOSE - if (mDecoderVerbose) { - auto trmChainHeader = reinterpret_cast(mDecoderPointer); - auto bunchCnt = trmChainHeader->bunchCnt; - printf(" %08x TRM Chain-A Header (slotId=%d, bunchCnt=%d) \n", *mDecoderPointer, slotId, bunchCnt); - } + if (mDecoderVerbose) { + auto trmChainHeader = reinterpret_cast(mDecoderPointer); + auto bunchCnt = trmChainHeader->bunchCnt; + printf(" %08x TRM Chain-A Header (slotId=%d, bunchCnt=%d) \n", *mDecoderPointer, slotId, bunchCnt); + } #endif #ifdef DECODER_PARANOID - if (decoderParanoid()) - return true; -#endif - decoderNext(); - - /** loop over TRM Chain-A payload **/ - while (true) { - /** TDC hit detected **/ - if (IS_TDC_HIT(*mDecoderPointer)) { - mDecoderSummary.hasHits[itrm][0] = true; - auto itdc = GET_TRMDATAHIT_TDCID(*mDecoderPointer); - auto ihit = mDecoderSummary.trmDataHits[0][itdc]; - mDecoderSummary.trmDataHit[0][itdc][ihit] = *mDecoderPointer; - mDecoderSummary.trmDataHits[0][itdc]++; + if (decoderParanoid()) + return true; +#endif + decoderNext(); + + /** loop over TRM Chain-A payload **/ + while (true) { + /** TDC hit detected **/ + if (IS_TDC_HIT(*mDecoderPointer)) { + mDecoderSummary.hasHits[itrm][0] = true; + auto itdc = GET_TRMDATAHIT_TDCID(*mDecoderPointer); + auto ihit = mDecoderSummary.trmDataHits[0][itdc]; + mDecoderSummary.trmDataHit[0][itdc][ihit] = *mDecoderPointer; + mDecoderSummary.trmDataHits[0][itdc]++; #ifdef DECODER_VERBOSE - if (mDecoderVerbose) { - auto trmDataHit = reinterpret_cast(mDecoderPointer); - auto time = trmDataHit->time; - auto chanId = trmDataHit->chanId; - auto tdcId = trmDataHit->tdcId; - auto dataId = trmDataHit->dataId; - printf(" %08x TRM Data Hit (time=%d, chanId=%d, tdcId=%d, dataId=0x%x) \n", *mDecoderPointer, time, chanId, tdcId, dataId); - } + if (mDecoderVerbose) { + auto trmDataHit = reinterpret_cast(mDecoderPointer); + auto time = trmDataHit->time; + auto chanId = trmDataHit->chanId; + auto tdcId = trmDataHit->tdcId; + auto dataId = trmDataHit->dataId; + printf(" %08x TRM Data Hit (time=%d, chanId=%d, tdcId=%d, dataId=0x%x) \n", *mDecoderPointer, time, chanId, tdcId, dataId); + } #endif #ifdef DECODER_PARANOID - if (decoderParanoid()) - return true; -#endif - decoderNext(); - continue; - } - - /** TDC error detected **/ - if (IS_TDC_ERROR(*mDecoderPointer)) { - mDecoderSummary.hasErrors[itrm][0] = true; + if (decoderParanoid()) + return true; +#endif + decoderNext(); + continue; + } + + /** TDC error detected **/ + if (IS_TDC_ERROR(*mDecoderPointer)) { + mDecoderSummary.hasErrors[itrm][0] = true; #ifdef DECODER_VERBOSE - if (mDecoderVerbose) { - printf("%s %08x TDC error %s \n", colorRed, *mDecoderPointer, colorReset); - } + if (mDecoderVerbose) { + printf("%s %08x TDC error %s \n", colorRed, *mDecoderPointer, colorReset); + } #endif #ifdef DECODER_PARANOID - if (decoderParanoid()) - return true; -#endif - decoderNext(); - continue; - } - - /** TRM Chain-A Trailer detected **/ - if (IS_TRM_CHAINA_TRAILER(*mDecoderPointer)) { - mDecoderSummary.trmChainTrailer[itrm][0] = *mDecoderPointer; + if (decoderParanoid()) + return true; +#endif + decoderNext(); + continue; + } + + /** TRM Chain-A Trailer detected **/ + if (IS_TRM_CHAINA_TRAILER(*mDecoderPointer)) { + mDecoderSummary.trmChainTrailer[itrm][0] = *mDecoderPointer; #ifdef DECODER_VERBOSE - if (mDecoderVerbose) { - auto trmChainTrailer = reinterpret_cast(mDecoderPointer); - auto eventCnt = trmChainTrailer->eventCnt; - printf(" %08x TRM Chain-A Trailer (slotId=%d, eventCnt=%d) \n", *mDecoderPointer, slotId, eventCnt); - } + if (mDecoderVerbose) { + auto trmChainTrailer = reinterpret_cast(mDecoderPointer); + auto eventCnt = trmChainTrailer->eventCnt; + printf(" %08x TRM Chain-A Trailer (slotId=%d, eventCnt=%d) \n", *mDecoderPointer, slotId, eventCnt); + } #endif #ifdef DECODER_PARANOID - if (decoderParanoid()) - return true; -#endif - decoderNext(); - break; - } - - /** decode error **/ - mDecoderError = true; + if (decoderParanoid()) + return true; +#endif + decoderNext(); + break; + } + + /** decode error **/ + mDecoderError = true; #ifdef DECODER_VERBOSE - if (mDecoderVerbose) { - printf("%s %08x [ERROR] breaking TRM Chain-A decode stream %s \n", colorRed, *mDecoderPointer, colorReset); - } -#endif - /** decode error detected, be paranoid **/ - if (decoderParanoid()) - return true; - - decoderNext(); - break; - } - } /** end of loop over TRM chain-A payload **/ - - /** TRM Chain-B Header detected **/ - if (IS_TRM_CHAINB_HEADER(*mDecoderPointer) && GET_TRMCHAINHEADER_SLOTID(*mDecoderPointer) == slotId) { - mDecoderSummary.hasHits[itrm][1] = false; - mDecoderSummary.hasErrors[itrm][1] = false; - mDecoderSummary.trmChainHeader[itrm][1] = *mDecoderPointer; + if (mDecoderVerbose) { + printf("%s %08x [ERROR] breaking TRM Chain-A decode stream %s \n", colorRed, *mDecoderPointer, colorReset); + } +#endif + /** decode error detected, be paranoid **/ + if (decoderParanoid()) + return true; + + decoderNext(); + break; + } + } /** end of loop over TRM chain-A payload **/ + + /** TRM Chain-B Header detected **/ + if (IS_TRM_CHAINB_HEADER(*mDecoderPointer) && GET_TRMCHAINHEADER_SLOTID(*mDecoderPointer) == slotId) { + mDecoderSummary.hasHits[itrm][1] = false; + mDecoderSummary.hasErrors[itrm][1] = false; + mDecoderSummary.trmChainHeader[itrm][1] = *mDecoderPointer; #ifdef DECODER_VERBOSE - if (mDecoderVerbose) { - auto trmChainHeader = reinterpret_cast(mDecoderPointer); - auto bunchCnt = trmChainHeader->bunchCnt; - printf(" %08x TRM Chain-B Header (slotId=%d, bunchCnt=%d) \n", *mDecoderPointer, slotId, bunchCnt); - } + if (mDecoderVerbose) { + auto trmChainHeader = reinterpret_cast(mDecoderPointer); + auto bunchCnt = trmChainHeader->bunchCnt; + printf(" %08x TRM Chain-B Header (slotId=%d, bunchCnt=%d) \n", *mDecoderPointer, slotId, bunchCnt); + } #endif #ifdef DECODER_PARANOID - if (decoderParanoid()) - return true; -#endif - decoderNext(); - - /** loop over TRM Chain-B payload **/ - while (true) { - /** TDC hit detected **/ - if (IS_TDC_HIT(*mDecoderPointer)) { - mDecoderSummary.hasHits[itrm][1] = true; - auto itdc = GET_TRMDATAHIT_TDCID(*mDecoderPointer); - auto ihit = mDecoderSummary.trmDataHits[1][itdc]; - mDecoderSummary.trmDataHit[1][itdc][ihit] = *mDecoderPointer; - mDecoderSummary.trmDataHits[1][itdc]++; + if (decoderParanoid()) + return true; +#endif + decoderNext(); + + /** loop over TRM Chain-B payload **/ + while (true) { + /** TDC hit detected **/ + if (IS_TDC_HIT(*mDecoderPointer)) { + mDecoderSummary.hasHits[itrm][1] = true; + auto itdc = GET_TRMDATAHIT_TDCID(*mDecoderPointer); + auto ihit = mDecoderSummary.trmDataHits[1][itdc]; + mDecoderSummary.trmDataHit[1][itdc][ihit] = *mDecoderPointer; + mDecoderSummary.trmDataHits[1][itdc]++; #ifdef DECODER_VERBOSE - if (mDecoderVerbose) { - auto trmDataHit = reinterpret_cast(mDecoderPointer); - auto time = trmDataHit->time; - auto chanId = trmDataHit->chanId; - auto tdcId = trmDataHit->tdcId; - auto dataId = trmDataHit->dataId; - printf(" %08x TRM Data Hit (time=%d, chanId=%d, tdcId=%d, dataId=0x%x \n", *mDecoderPointer, time, chanId, tdcId, dataId); - } + if (mDecoderVerbose) { + auto trmDataHit = reinterpret_cast(mDecoderPointer); + auto time = trmDataHit->time; + auto chanId = trmDataHit->chanId; + auto tdcId = trmDataHit->tdcId; + auto dataId = trmDataHit->dataId; + printf(" %08x TRM Data Hit (time=%d, chanId=%d, tdcId=%d, dataId=0x%x \n", *mDecoderPointer, time, chanId, tdcId, dataId); + } #endif #ifdef DECODER_PARANOID - if (decoderParanoid()) - return true; -#endif - decoderNext(); - continue; - } - - /** TDC error detected **/ - if (IS_TDC_ERROR(*mDecoderPointer)) { - mDecoderSummary.hasErrors[itrm][1] = true; + if (decoderParanoid()) + return true; +#endif + decoderNext(); + continue; + } + + /** TDC error detected **/ + if (IS_TDC_ERROR(*mDecoderPointer)) { + mDecoderSummary.hasErrors[itrm][1] = true; #ifdef DECODER_VERBOSE - if (mDecoderVerbose) { - printf("%s %08x TDC error %s \n", colorRed, *mDecoderPointer, colorReset); - } + if (mDecoderVerbose) { + printf("%s %08x TDC error %s \n", colorRed, *mDecoderPointer, colorReset); + } #endif #ifdef DECODER_PARANOID - if (decoderParanoid()) - return true; -#endif - decoderNext(); - continue; - } - - /** TRM Chain-B trailer detected **/ - if (IS_TRM_CHAINB_TRAILER(*mDecoderPointer)) { - mDecoderSummary.trmChainTrailer[itrm][1] = *mDecoderPointer; + if (decoderParanoid()) + return true; +#endif + decoderNext(); + continue; + } + + /** TRM Chain-B trailer detected **/ + if (IS_TRM_CHAINB_TRAILER(*mDecoderPointer)) { + mDecoderSummary.trmChainTrailer[itrm][1] = *mDecoderPointer; #ifdef DECODER_VERBOSE - if (mDecoderVerbose) { - auto trmChainTrailer = reinterpret_cast(mDecoderPointer); - auto eventCnt = trmChainTrailer->eventCnt; - printf(" %08x TRM Chain-B Trailer (slotId=%d, eventCnt=%d) \n", *mDecoderPointer, slotId, eventCnt); - } + if (mDecoderVerbose) { + auto trmChainTrailer = reinterpret_cast(mDecoderPointer); + auto eventCnt = trmChainTrailer->eventCnt; + printf(" %08x TRM Chain-B Trailer (slotId=%d, eventCnt=%d) \n", *mDecoderPointer, slotId, eventCnt); + } #endif #ifdef DECODER_PARANOID - if (decoderParanoid()) - return true; -#endif - decoderNext(); - break; - } - - /** decode error **/ - mDecoderError = true; + if (decoderParanoid()) + return true; +#endif + decoderNext(); + break; + } + + /** decode error **/ + mDecoderError = true; #ifdef DECODER_VERBOSE - if (mDecoderVerbose) { - printf("%s %08x [ERROR] breaking TRM Chain-B decode stream %s \n", colorRed, *mDecoderPointer, colorReset); - } -#endif - /** decode error detected, be paranoid **/ - if (decoderParanoid()) - return true; - - decoderNext(); - break; - } - } /** end of loop over TRM chain-A payload **/ - - /** TRM Data Trailer detected **/ - if (IS_TRM_GLOBAL_TRAILER(*mDecoderPointer)) { - mDecoderSummary.trmDataTrailer[itrm] = *mDecoderPointer; + if (mDecoderVerbose) { + printf("%s %08x [ERROR] breaking TRM Chain-B decode stream %s \n", colorRed, *mDecoderPointer, colorReset); + } +#endif + /** decode error detected, be paranoid **/ + if (decoderParanoid()) + return true; + + decoderNext(); + break; + } + } /** end of loop over TRM chain-A payload **/ + + /** TRM Data Trailer detected **/ + if (IS_TRM_GLOBAL_TRAILER(*mDecoderPointer)) { + mDecoderSummary.trmDataTrailer[itrm] = *mDecoderPointer; #ifdef DECODER_VERBOSE - if (mDecoderVerbose) { - auto trmDataTrailer = reinterpret_cast(mDecoderPointer); - auto eventCRC = trmDataTrailer->eventCRC; - auto lutErrorBit = trmDataTrailer->lutErrorBit; - printf(" %08x TRM Data Trailer (slotId=%d, eventCRC=%d, lutErrorBit=%d) \n", *mDecoderPointer, slotId, eventCRC, lutErrorBit); - } + if (mDecoderVerbose) { + auto trmDataTrailer = reinterpret_cast(mDecoderPointer); + auto eventCRC = trmDataTrailer->eventCRC; + auto lutErrorBit = trmDataTrailer->lutErrorBit; + printf(" %08x TRM Data Trailer (slotId=%d, eventCRC=%d, lutErrorBit=%d) \n", *mDecoderPointer, slotId, eventCRC, lutErrorBit); + } #endif #ifdef DECODER_PARANOID - if (decoderParanoid()) - return true; -#endif - decoderNext(); + if (decoderParanoid()) + return true; +#endif + decoderNext(); - /** encoder Spider **/ - if (mDecoderSummary.hasHits[itrm][0] || mDecoderSummary.hasHits[itrm][1]) - encoderSpider(itrm); + /** encoder Spider **/ + if (mDecoderSummary.hasHits[itrm][0] || mDecoderSummary.hasHits[itrm][1]) + encoderSpider(itrm); - /** filler detected **/ - if (IS_FILLER(*mDecoderPointer)) { + /** filler detected **/ + if (IS_FILLER(*mDecoderPointer)) { #ifdef DECODER_VERBOSE - if (mDecoderVerbose) { - printf(" %08x Filler \n", *mDecoderPointer); - } + if (mDecoderVerbose) { + printf(" %08x Filler \n", *mDecoderPointer); + } #endif #ifdef DECODER_PARANOID - if (decoderParanoid()) - return true; -#endif - decoderNext(); - } + if (decoderParanoid()) + return true; +#endif + decoderNext(); + } - break; - } + break; + } - /** decode error **/ - mDecoderError = true; + /** decode error **/ + mDecoderError = true; #ifdef DECODER_VERBOSE - if (mDecoderVerbose) { - printf("%s %08x [ERROR] breaking TRM decode stream %s \n", colorRed, *mDecoderPointer, colorReset); - } + if (mDecoderVerbose) { + printf("%s %08x [ERROR] breaking TRM decode stream %s \n", colorRed, *mDecoderPointer, colorReset); + } #endif - /** decode error detected, be paranoid **/ - if (decoderParanoid()) - return true; - - decoderNext(); - break; + /** decode error detected, be paranoid **/ + if (decoderParanoid()) + return true; - } /** end of loop over TRM payload **/ + decoderNext(); + break; - continue; - } + } /** end of loop over TRM payload **/ - /** DRM Data Trailer detected **/ - if (IS_DRM_GLOBAL_TRAILER(*mDecoderPointer)) { - mDecoderSummary.drmDataTrailer = *mDecoderPointer; + continue; + } + + /** DRM Data Trailer detected **/ + if (IS_DRM_GLOBAL_TRAILER(*mDecoderPointer)) { + mDecoderSummary.drmDataTrailer = *mDecoderPointer; #ifdef DECODER_VERBOSE - if (mDecoderVerbose) { - auto drmDataTrailer = reinterpret_cast(mDecoderPointer); - auto locEvCnt = drmDataTrailer->locEvCnt; - printf(" %08x DRM Data Trailer (locEvCnt=%d) \n", *mDecoderPointer, locEvCnt); - } + if (mDecoderVerbose) { + auto drmDataTrailer = reinterpret_cast(mDecoderPointer); + auto locEvCnt = drmDataTrailer->locEvCnt; + printf(" %08x DRM Data Trailer (locEvCnt=%d) \n", *mDecoderPointer, locEvCnt); + } #endif #ifdef DECODER_PARANOID - if (decoderParanoid()) - return true; -#endif - decoderNext(); - - /** filler detected **/ - if (IS_FILLER(*mDecoderPointer)) { + if (decoderParanoid()) + return true; +#endif + decoderNext(); + + /** filler detected **/ + if (IS_FILLER(*mDecoderPointer)) { #ifdef DECODER_VERBOSE - if (mDecoderVerbose) { - printf(" %08x Filler \n", *mDecoderPointer); - } + if (mDecoderVerbose) { + printf(" %08x Filler \n", *mDecoderPointer); + } #endif #ifdef DECODER_PARANOID - if (decoderParanoid()) - return true; -#endif - decoderNext(); - } - - /** check event **/ - checkerCheck(); - - /** encode Crate Trailer **/ - *mEncoderPointer = 0x80000000; - *mEncoderPointer |= mCheckerSummary.nDiagnosticWords; - *mEncoderPointer |= GET_DRMDATATRAILER_LOCEVCNT(mDecoderSummary.drmDataTrailer) << 4; -#ifdef ENCODER_VERBOSE - if (mEncoderVerbose) { - auto CrateTrailer = reinterpret_cast(mEncoderPointer); - auto EventCounter = CrateTrailer->eventCounter; - auto NumberOfDiagnostics = CrateTrailer->numberOfDiagnostics; - printf("%s %08x Crate trailer (EventCounter=%d, NumberOfDiagnostics=%d) %s \n", colorGreen, *mEncoderPointer, EventCounter, NumberOfDiagnostics, colorReset); - } -#endif - encoderNext(); - - /** encode Diagnostic Words **/ - for (int iword = 0; iword < mCheckerSummary.nDiagnosticWords; ++iword) { - *mEncoderPointer = mCheckerSummary.DiagnosticWord[iword]; -#ifdef ENCODER_VERBOSE - if (mEncoderVerbose) { - auto Diagnostic = reinterpret_cast(mEncoderPointer); - auto slotId = Diagnostic->slotID; - auto FaultBits = Diagnostic->faultBits; - printf("%s %08x Diagnostic (slotId=%d, FaultBits=0x%x) %s \n", colorGreen, *mEncoderPointer, slotId, FaultBits, colorReset); - } + if (decoderParanoid()) + return true; #endif - encoderNext(); - } - - mCheckerSummary.nDiagnosticWords = 0; - - break; + decoderNext(); } -#ifdef DECODER_VERBOSE - if (mDecoderVerbose) { - printf("%s %08x [ERROR] trying to recover DRM decode stream %s \n", colorRed, *mDecoderPointer, colorReset); + /** check event **/ + checkerCheck(); + + /** encode Crate Trailer **/ + *mEncoderPointer = 0x80000000; + *mEncoderPointer |= mCheckerSummary.nDiagnosticWords; + *mEncoderPointer |= GET_DRMDATATRAILER_LOCEVCNT(mDecoderSummary.drmDataTrailer) << 4; +#ifdef ENCODER_VERBOSE + if (mEncoderVerbose) { + auto CrateTrailer = reinterpret_cast(mEncoderPointer); + auto EventCounter = CrateTrailer->eventCounter; + auto NumberOfDiagnostics = CrateTrailer->numberOfDiagnostics; + printf("%s %08x Crate trailer (EventCounter=%d, NumberOfDiagnostics=%d) %s \n", colorGreen, *mEncoderPointer, EventCounter, NumberOfDiagnostics, colorReset); } #endif + encoderNext(); - /** decode error detected, be paranoid **/ - if (decoderParanoid()) - return true; - - decoderNext(); + /** encode Diagnostic Words **/ + for (int iword = 0; iword < mCheckerSummary.nDiagnosticWords; ++iword) { + *mEncoderPointer = mCheckerSummary.DiagnosticWord[iword]; +#ifdef ENCODER_VERBOSE + if (mEncoderVerbose) { + auto Diagnostic = reinterpret_cast(mEncoderPointer); + auto slotId = Diagnostic->slotID; + auto FaultBits = Diagnostic->faultBits; + printf("%s %08x Diagnostic (slotId=%d, FaultBits=0x%x) %s \n", colorGreen, *mEncoderPointer, slotId, FaultBits, colorReset); + } +#endif + encoderNext(); + } - } /** end of loop over DRM payload **/ + mCheckerSummary.nDiagnosticWords = 0; - mIntegratedBytes += getDecoderByteCounter(); + break; + } #ifdef DECODER_VERBOSE if (mDecoderVerbose) { - std::cout << colorBlue - << "--- END PROCESS DRM" - << colorReset - << std::endl; + printf("%s %08x [ERROR] trying to recover DRM decode stream %s \n", colorRed, *mDecoderPointer, colorReset); } #endif - return false; + /** decode error detected, be paranoid **/ + if (decoderParanoid()) + return true; + + decoderNext(); + + } /** end of loop over DRM payload **/ + + mIntegratedBytes += getDecoderByteCounter(); + +#ifdef DECODER_VERBOSE + if (mDecoderVerbose) { + std::cout << colorBlue + << "--- END PROCESS DRM" + << colorReset + << std::endl; } +#endif + + return false; +} - void Compressor::encoderSpider(int itrm) - { - int slotId = itrm + 3; +void Compressor::encoderSpider(int itrm) +{ + int slotId = itrm + 3; - /** reset packed hits counter **/ - int firstFilledFrame = 255; - int lastFilledFrame = 0; + /** reset packed hits counter **/ + int firstFilledFrame = 255; + int lastFilledFrame = 0; - /** loop over TRM chains **/ - for (int ichain = 0; ichain < 2; ++ichain) { + /** loop over TRM chains **/ + for (int ichain = 0; ichain < 2; ++ichain) { + + if (!mDecoderSummary.hasHits[itrm][ichain]) + continue; - if (!mDecoderSummary.hasHits[itrm][ichain]) - continue; - - /** loop over TDCs **/ - for (int itdc = 0; itdc < 15; ++itdc) { - - auto nhits = mDecoderSummary.trmDataHits[ichain][itdc]; - if (nhits == 0) - continue; - - /** loop over hits **/ - for (int ihit = 0; ihit < nhits; ++ihit) { - - auto lhit = mDecoderSummary.trmDataHit[ichain][itdc][ihit]; - if (GET_TRMDATAHIT_PSBITS(lhit) != 0x1) // must be a leading hit - continue; - - auto chan = GET_TRMDATAHIT_CHANID(lhit); - auto hitTime = GET_TRMDATAHIT_TIME(lhit); - auto eBit = GET_TRMDATAHIT_EBIT(lhit); - uint32_t totWidth = 0; - - // check next hits for packing - for (int jhit = ihit + 1; jhit < nhits; ++jhit) { - auto thit = mDecoderSummary.trmDataHit[ichain][itdc][jhit]; - if (GET_TRMDATAHIT_PSBITS(thit) == 0x2 && GET_TRMDATAHIT_CHANID(thit) == chan) { // must be a trailing hit from same channel - totWidth = (GET_TRMDATAHIT_TIME(thit) - hitTime) / Geo::RATIO_TOT_TDC_BIN; // compute TOT - lhit = 0x0; // mark as used - break; - } - } - - auto iframe = hitTime >> 13; - auto phit = mSpiderSummary.nFramePackedHits[iframe]; - - mSpiderSummary.FramePackedHit[iframe][phit] = 0x00000000; - mSpiderSummary.FramePackedHit[iframe][phit] |= (totWidth & 0x7FF) << 0; - mSpiderSummary.FramePackedHit[iframe][phit] |= (hitTime & 0x1FFF) << 11; - mSpiderSummary.FramePackedHit[iframe][phit] |= chan << 24; - mSpiderSummary.FramePackedHit[iframe][phit] |= itdc << 27; - mSpiderSummary.FramePackedHit[iframe][phit] |= ichain << 31; - mSpiderSummary.nFramePackedHits[iframe]++; - - if (iframe < firstFilledFrame) - firstFilledFrame = iframe; - if (iframe > lastFilledFrame) - lastFilledFrame = iframe; - } - - mDecoderSummary.trmDataHits[ichain][itdc] = 0; + /** loop over TDCs **/ + for (int itdc = 0; itdc < 15; ++itdc) { + + auto nhits = mDecoderSummary.trmDataHits[ichain][itdc]; + if (nhits == 0) + continue; + + /** loop over hits **/ + for (int ihit = 0; ihit < nhits; ++ihit) { + + auto lhit = mDecoderSummary.trmDataHit[ichain][itdc][ihit]; + if (GET_TRMDATAHIT_PSBITS(lhit) != 0x1) // must be a leading hit + continue; + + auto chan = GET_TRMDATAHIT_CHANID(lhit); + auto hitTime = GET_TRMDATAHIT_TIME(lhit); + auto eBit = GET_TRMDATAHIT_EBIT(lhit); + uint32_t totWidth = 0; + + // check next hits for packing + for (int jhit = ihit + 1; jhit < nhits; ++jhit) { + auto thit = mDecoderSummary.trmDataHit[ichain][itdc][jhit]; + if (GET_TRMDATAHIT_PSBITS(thit) == 0x2 && GET_TRMDATAHIT_CHANID(thit) == chan) { // must be a trailing hit from same channel + totWidth = (GET_TRMDATAHIT_TIME(thit) - hitTime) / Geo::RATIO_TOT_TDC_BIN; // compute TOT + lhit = 0x0; // mark as used + break; + } + } + + auto iframe = hitTime >> 13; + auto phit = mSpiderSummary.nFramePackedHits[iframe]; + + mSpiderSummary.FramePackedHit[iframe][phit] = 0x00000000; + mSpiderSummary.FramePackedHit[iframe][phit] |= (totWidth & 0x7FF) << 0; + mSpiderSummary.FramePackedHit[iframe][phit] |= (hitTime & 0x1FFF) << 11; + mSpiderSummary.FramePackedHit[iframe][phit] |= chan << 24; + mSpiderSummary.FramePackedHit[iframe][phit] |= itdc << 27; + mSpiderSummary.FramePackedHit[iframe][phit] |= ichain << 31; + mSpiderSummary.nFramePackedHits[iframe]++; + + if (iframe < firstFilledFrame) + firstFilledFrame = iframe; + if (iframe > lastFilledFrame) + lastFilledFrame = iframe; } + + mDecoderSummary.trmDataHits[ichain][itdc] = 0; } + } + + /** loop over frames **/ + for (int iframe = firstFilledFrame; iframe < lastFilledFrame + 1; iframe++) { + + /** check if frame is empty **/ + if (mSpiderSummary.nFramePackedHits[iframe] == 0) + continue; - /** loop over frames **/ - for (int iframe = firstFilledFrame; iframe < lastFilledFrame + 1; iframe++) { - - /** check if frame is empty **/ - if (mSpiderSummary.nFramePackedHits[iframe] == 0) - continue; - - // encode Frame Header - *mEncoderPointer = 0x00000000; - *mEncoderPointer |= slotId << 24; - *mEncoderPointer |= iframe << 16; - *mEncoderPointer |= mSpiderSummary.nFramePackedHits[iframe]; + // encode Frame Header + *mEncoderPointer = 0x00000000; + *mEncoderPointer |= slotId << 24; + *mEncoderPointer |= iframe << 16; + *mEncoderPointer |= mSpiderSummary.nFramePackedHits[iframe]; +#ifdef ENCODER_VERBOSE + if (mEncoderVerbose) { + auto FrameHeader = reinterpret_cast(mEncoderPointer); + auto NumberOfHits = FrameHeader->numberOfHits; + auto FrameID = FrameHeader->frameID; + auto TRMID = FrameHeader->trmID; + printf("%s %08x Frame header (TRMID=%d, FrameID=%d, NumberOfHits=%d) %s \n", colorGreen, *mEncoderPointer, TRMID, FrameID, NumberOfHits, colorReset); + } +#endif + encoderNext(); + + // packed hits + for (int ihit = 0; ihit < mSpiderSummary.nFramePackedHits[iframe]; ++ihit) { + *mEncoderPointer = mSpiderSummary.FramePackedHit[iframe][ihit]; #ifdef ENCODER_VERBOSE if (mEncoderVerbose) { - auto FrameHeader = reinterpret_cast(mEncoderPointer); - auto NumberOfHits = FrameHeader->numberOfHits; - auto FrameID = FrameHeader->frameID; - auto TRMID = FrameHeader->trmID; - printf("%s %08x Frame header (TRMID=%d, FrameID=%d, NumberOfHits=%d) %s \n", colorGreen, *mEncoderPointer, TRMID, FrameID, NumberOfHits, colorReset); + auto PackedHit = reinterpret_cast(mEncoderPointer); + auto Chain = PackedHit->chain; + auto TDCID = PackedHit->tdcID; + auto Channel = PackedHit->channel; + auto Time = PackedHit->time; + auto TOT = PackedHit->tot; + printf("%s %08x Packed hit (Chain=%d, TDCID=%d, Channel=%d, Time=%d, TOT=%d) %s \n", colorGreen, *mEncoderPointer, Chain, TDCID, Channel, Time, TOT, colorReset); } #endif encoderNext(); - - // packed hits - for (int ihit = 0; ihit < mSpiderSummary.nFramePackedHits[iframe]; ++ihit) { - *mEncoderPointer = mSpiderSummary.FramePackedHit[iframe][ihit]; -#ifdef ENCODER_VERBOSE - if (mEncoderVerbose) { - auto PackedHit = reinterpret_cast(mEncoderPointer); - auto Chain = PackedHit->chain; - auto TDCID = PackedHit->tdcID; - auto Channel = PackedHit->channel; - auto Time = PackedHit->time; - auto TOT = PackedHit->tot; - printf("%s %08x Packed hit (Chain=%d, TDCID=%d, Channel=%d, Time=%d, TOT=%d) %s \n", colorGreen, *mEncoderPointer, Chain, TDCID, Channel, Time, TOT, colorReset); - } -#endif - encoderNext(); - } - - mSpiderSummary.nFramePackedHits[iframe] = 0; } - + + mSpiderSummary.nFramePackedHits[iframe] = 0; } +} + +bool Compressor::checkerCheck() +{ + mCheckerSummary.nDiagnosticWords = 0; + mCheckerSummary.DiagnosticWord[0] = 0x00000001; - bool Compressor::checkerCheck() - { - mCheckerSummary.nDiagnosticWords = 0; - mCheckerSummary.DiagnosticWord[0] = 0x00000001; - #ifdef CHECKER_VERBOSE - if (mCheckerVerbose) { - std::cout << colorBlue - << "--- CHECK EVENT" - << colorReset - << std::endl; - } + if (mCheckerVerbose) { + std::cout << colorBlue + << "--- CHECK EVENT" + << colorReset + << std::endl; + } #endif - /** increment check counter **/ - // mCheckerCounter++; + /** increment check counter **/ + // mCheckerCounter++; + + /** check TOF Data Header **/ - /** check TOF Data Header **/ - - /** check DRM Data Header **/ - if (!mDecoderSummary.drmDataHeader) { - mCheckerSummary.DiagnosticWord[0] |= DIAGNOSTIC_DRM_HEADER_MISSING; + /** check DRM Data Header **/ + if (!mDecoderSummary.drmDataHeader) { + mCheckerSummary.DiagnosticWord[0] |= DIAGNOSTIC_DRM_HEADER_MISSING; #ifdef CHECKER_COUNTER - mCheckerSummary.nDiagnosticWords++; + mCheckerSummary.nDiagnosticWords++; #endif #ifdef CHECKER_VERBOSE - if (mCheckerVerbose) { - printf(" Missing DRM Data Header \n"); - } -#endif - mDecoderSummary.tofDataHeader = 0x0; - return true; + if (mCheckerVerbose) { + printf(" Missing DRM Data Header \n"); } +#endif + mDecoderSummary.tofDataHeader = 0x0; + return true; + } - /** check DRM Data Trailer **/ - if (!mDecoderSummary.drmDataTrailer) { - mCheckerSummary.DiagnosticWord[0] |= DIAGNOSTIC_DRM_TRAILER_MISSING; + /** check DRM Data Trailer **/ + if (!mDecoderSummary.drmDataTrailer) { + mCheckerSummary.DiagnosticWord[0] |= DIAGNOSTIC_DRM_TRAILER_MISSING; #ifdef CHECKER_COUNTER - mCheckerSummary.nDiagnosticWords++; + mCheckerSummary.nDiagnosticWords++; #endif #ifdef CHECKER_VERBOSE - if (mCheckerVerbose) { - printf(" Missing DRM Data Trailer \n"); - } -#endif - mDecoderSummary.tofDataHeader = 0x0; - mDecoderSummary.drmDataHeader = 0x0; - mDecoderSummary.drmDataTrailer = 0x0; - return true; + if (mCheckerVerbose) { + printf(" Missing DRM Data Trailer \n"); } +#endif + mDecoderSummary.tofDataHeader = 0x0; + mDecoderSummary.drmDataHeader = 0x0; + mDecoderSummary.drmDataTrailer = 0x0; + return true; + } - /** increment DRM header counter **/ + /** increment DRM header counter **/ #ifdef CHECKER_COUNTER - mDRMCounters.Headers++; + mDRMCounters.Headers++; #endif - - /** get DRM relevant data **/ - uint32_t partSlotMask = GET_DRMHEADW1_PARTSLOTMASK(mDecoderSummary.drmHeadW1); - uint32_t enaSlotMask = GET_DRMHEADW2_ENASLOTMASK(mDecoderSummary.drmHeadW2); - uint32_t gbtBunchCnt = GET_DRMHEADW3_GBTBUNCHCNT(mDecoderSummary.drmHeadW3); - uint32_t locEvCnt = GET_DRMDATATRAILER_LOCEVCNT(mDecoderSummary.drmDataTrailer); - if (partSlotMask != enaSlotMask) { + /** get DRM relevant data **/ + uint32_t partSlotMask = GET_DRMHEADW1_PARTSLOTMASK(mDecoderSummary.drmHeadW1); + uint32_t enaSlotMask = GET_DRMHEADW2_ENASLOTMASK(mDecoderSummary.drmHeadW2); + uint32_t gbtBunchCnt = GET_DRMHEADW3_GBTBUNCHCNT(mDecoderSummary.drmHeadW3); + uint32_t locEvCnt = GET_DRMDATATRAILER_LOCEVCNT(mDecoderSummary.drmDataTrailer); + + if (partSlotMask != enaSlotMask) { #ifdef CHECKER_VERBOSE - if (mCheckerVerbose) { - printf(" Warning: enable/participating mask differ: %03x/%03x \n", enaSlotMask, partSlotMask); - } -#endif - mCheckerSummary.DiagnosticWord[0] |= DIAGNOSTIC_DRM_ENAPARTMASK_DIFFER; + if (mCheckerVerbose) { + printf(" Warning: enable/participating mask differ: %03x/%03x \n", enaSlotMask, partSlotMask); } +#endif + mCheckerSummary.DiagnosticWord[0] |= DIAGNOSTIC_DRM_ENAPARTMASK_DIFFER; + } - /** check DRM clock status **/ - if (GET_DRMHEADW1_CLOCKSTATUS(mDecoderSummary.drmHeadW1) != 2) { - mCheckerSummary.DiagnosticWord[0] |= DIAGNOSTIC_DRM_CLOCKSTATUS_WRONG; + /** check DRM clock status **/ + if (GET_DRMHEADW1_CLOCKSTATUS(mDecoderSummary.drmHeadW1) != 2) { + mCheckerSummary.DiagnosticWord[0] |= DIAGNOSTIC_DRM_CLOCKSTATUS_WRONG; #ifdef CHECKER_COUNTER - mDRMCounters.clockStatus++; + mDRMCounters.clockStatus++; #endif #ifdef CHECKER_VERBOSE - if (mCheckerVerbose) { - printf("%s DRM wrong clock status: %d %s\n", colorRed, GET_DRMHEADW1_CLOCKSTATUS(mDecoderSummary.drmHeadW1), colorReset); - } -#endif + if (mCheckerVerbose) { + printf("%s DRM wrong clock status: %d %s\n", colorRed, GET_DRMHEADW1_CLOCKSTATUS(mDecoderSummary.drmHeadW1), colorReset); } +#endif + } - /** check DRM fault mask **/ - if (GET_DRMHEADW2_FAULTSLOTMASK(mDecoderSummary.drmHeadW2)) { - mCheckerSummary.DiagnosticWord[0] |= DIAGNOSTIC_DRM_FAULTSLOTMASK_NOTZERO; + /** check DRM fault mask **/ + if (GET_DRMHEADW2_FAULTSLOTMASK(mDecoderSummary.drmHeadW2)) { + mCheckerSummary.DiagnosticWord[0] |= DIAGNOSTIC_DRM_FAULTSLOTMASK_NOTZERO; #ifdef CHECKER_COUNTER - mDRMCounters.Fault++; + mDRMCounters.Fault++; #endif #ifdef CHECKER_VERBOSE - if (mCheckerVerbose) { - printf(" DRM fault slot mask: %x \n", GET_DRMHEADW2_FAULTSLOTMASK(mDecoderSummary.drmHeadW2)); - } -#endif + if (mCheckerVerbose) { + printf(" DRM fault slot mask: %x \n", GET_DRMHEADW2_FAULTSLOTMASK(mDecoderSummary.drmHeadW2)); } +#endif + } - /** check DRM readout timeout **/ - if (GET_DRMHEADW2_READOUTTIMEOUT(mDecoderSummary.drmHeadW2)) { - mCheckerSummary.DiagnosticWord[0] |= DIAGNOSTIC_DRM_READOUTTIMEOUT_NOTZERO; + /** check DRM readout timeout **/ + if (GET_DRMHEADW2_READOUTTIMEOUT(mDecoderSummary.drmHeadW2)) { + mCheckerSummary.DiagnosticWord[0] |= DIAGNOSTIC_DRM_READOUTTIMEOUT_NOTZERO; #ifdef CHECKER_COUNTER - mDRMCounters.RTOBit++; + mDRMCounters.RTOBit++; #endif #ifdef CHECKER_VERBOSE - if (mCheckerVerbose) { - printf(" DRM readout timeout \n"); - } -#endif + if (mCheckerVerbose) { + printf(" DRM readout timeout \n"); } +#endif + } - /** loop over TRMs **/ - for (int itrm = 0; itrm < 10; ++itrm) { - uint32_t slotId = itrm + 3; + /** loop over TRMs **/ + for (int itrm = 0; itrm < 10; ++itrm) { + uint32_t slotId = itrm + 3; - /** check current diagnostic word **/ - auto iword = mCheckerSummary.nDiagnosticWords; - if (mCheckerSummary.DiagnosticWord[iword] & 0xFFFFFFF0) { - mCheckerSummary.nDiagnosticWords++; - iword++; - } + /** check current diagnostic word **/ + auto iword = mCheckerSummary.nDiagnosticWords; + if (mCheckerSummary.DiagnosticWord[iword] & 0xFFFFFFF0) { + mCheckerSummary.nDiagnosticWords++; + iword++; + } - /** set current slot id **/ - mCheckerSummary.DiagnosticWord[iword] = slotId; + /** set current slot id **/ + mCheckerSummary.DiagnosticWord[iword] = slotId; - /** check participating TRM **/ - if (!(partSlotMask & 1 << (itrm + 1))) { - if (mDecoderSummary.trmDataHeader[itrm] != 0x0) { - mCheckerSummary.DiagnosticWord[iword] |= DIAGNOSTIC_TRM_HEADER_UNEXPECTED; + /** check participating TRM **/ + if (!(partSlotMask & 1 << (itrm + 1))) { + if (mDecoderSummary.trmDataHeader[itrm] != 0x0) { + mCheckerSummary.DiagnosticWord[iword] |= DIAGNOSTIC_TRM_HEADER_UNEXPECTED; #ifdef CHECKER_VERBOSE - if (mCheckerVerbose) { - printf(" Non-participating header found (slotId=%d) \n", slotId); - } + if (mCheckerVerbose) { + printf(" Non-participating header found (slotId=%d) \n", slotId); + } #endif - } - continue; } + continue; + } - /** check TRM Data Header **/ - if (!mDecoderSummary.trmDataHeader[itrm]) { - mCheckerSummary.DiagnosticWord[iword] |= DIAGNOSTIC_TRM_HEADER_MISSING; + /** check TRM Data Header **/ + if (!mDecoderSummary.trmDataHeader[itrm]) { + mCheckerSummary.DiagnosticWord[iword] |= DIAGNOSTIC_TRM_HEADER_MISSING; #ifdef CHECKER_VERBOSE - if (mCheckerVerbose) { - printf(" Missing TRM Data Header (slotId=%d) \n", slotId); - } -#endif - continue; + if (mCheckerVerbose) { + printf(" Missing TRM Data Header (slotId=%d) \n", slotId); } +#endif + continue; + } - /** check TRM Data Trailer **/ - if (!mDecoderSummary.trmDataTrailer[itrm] ) { - mCheckerSummary.DiagnosticWord[iword] |= DIAGNOSTIC_TRM_TRAILER_MISSING; + /** check TRM Data Trailer **/ + if (!mDecoderSummary.trmDataTrailer[itrm]) { + mCheckerSummary.DiagnosticWord[iword] |= DIAGNOSTIC_TRM_TRAILER_MISSING; #ifdef CHECKER_VERBOSE - if (mCheckerVerbose) { - printf(" Missing TRM Trailer (slotId=%d) \n", slotId); - } -#endif - mDecoderSummary.trmDataHeader[itrm] = 0x0; - continue; + if (mCheckerVerbose) { + printf(" Missing TRM Trailer (slotId=%d) \n", slotId); } +#endif + mDecoderSummary.trmDataHeader[itrm] = 0x0; + continue; + } - /** increment TRM header counter **/ + /** increment TRM header counter **/ #ifdef CHECKER_COUNTER - mTRMCounters[itrm].Headers++; + mTRMCounters[itrm].Headers++; #endif - - /** check TRM empty flag **/ + + /** check TRM empty flag **/ #ifdef CHECKER_COUNTER - if (!mDecoderSummary.hasHits[itrm][0] && !mDecoderSummary.hasHits[itrm][1]) - mTRMCounters[itrm].Empty++; -#endif - - /** check TRM EventCounter **/ - uint32_t eventCnt = GET_TRMDATAHEADER_EVENTCNT(mDecoderSummary.trmDataHeader[itrm]); - if (eventCnt != locEvCnt % 1024) { - mCheckerSummary.DiagnosticWord[iword] |= DIAGNOSTIC_TRM_EVENTCNT_MISMATCH; + if (!mDecoderSummary.hasHits[itrm][0] && !mDecoderSummary.hasHits[itrm][1]) + mTRMCounters[itrm].Empty++; +#endif + + /** check TRM EventCounter **/ + uint32_t eventCnt = GET_TRMDATAHEADER_EVENTCNT(mDecoderSummary.trmDataHeader[itrm]); + if (eventCnt != locEvCnt % 1024) { + mCheckerSummary.DiagnosticWord[iword] |= DIAGNOSTIC_TRM_EVENTCNT_MISMATCH; #ifdef CHECKER_COUNTER - mTRMCounters[itrm].EventCounterMismatch++; + mTRMCounters[itrm].EventCounterMismatch++; #endif #ifdef CHECKER_VERBOSE - if (mCheckerVerbose) { - printf(" TRM EventCounter / DRM LocalEventCounter mismatch: %d / %d (slotId=%d) \n", eventCnt, locEvCnt, slotId); - } -#endif + if (mCheckerVerbose) { + printf(" TRM EventCounter / DRM LocalEventCounter mismatch: %d / %d (slotId=%d) \n", eventCnt, locEvCnt, slotId); } +#endif + } - /** check TRM empty bit **/ - if (GET_TRMDATAHEADER_EMPTYBIT(mDecoderSummary.trmDataHeader[itrm])) { - mCheckerSummary.DiagnosticWord[iword] |= DIAGNOSTIC_TRM_EMPTYBIT_NOTZERO; + /** check TRM empty bit **/ + if (GET_TRMDATAHEADER_EMPTYBIT(mDecoderSummary.trmDataHeader[itrm])) { + mCheckerSummary.DiagnosticWord[iword] |= DIAGNOSTIC_TRM_EMPTYBIT_NOTZERO; #ifdef CHECKER_COUNTER - mTRMCounters[itrm].EBit++; + mTRMCounters[itrm].EBit++; #endif #ifdef CHECKER_VERBOSE - if (mCheckerVerbose) { - printf(" TRM empty bit is on (slotId=%d) \n", slotId); - } -#endif + if (mCheckerVerbose) { + printf(" TRM empty bit is on (slotId=%d) \n", slotId); } +#endif + } - /** loop over TRM chains **/ - for (int ichain = 0; ichain < 2; ichain++) { + /** loop over TRM chains **/ + for (int ichain = 0; ichain < 2; ichain++) { - /** check TRM Chain Header **/ - if (!mDecoderSummary.trmChainHeader[itrm][ichain]) { - mCheckerSummary.DiagnosticWord[iword] |= DIAGNOSTIC_TRMCHAIN_HEADER_MISSING(ichain); + /** check TRM Chain Header **/ + if (!mDecoderSummary.trmChainHeader[itrm][ichain]) { + mCheckerSummary.DiagnosticWord[iword] |= DIAGNOSTIC_TRMCHAIN_HEADER_MISSING(ichain); #ifdef CHECKER_VERBOSE - if (mCheckerVerbose) { - printf(" Missing TRM Chain Header (slotId=%d, chain=%d) \n", slotId, ichain); - } + if (mCheckerVerbose) { + printf(" Missing TRM Chain Header (slotId=%d, chain=%d) \n", slotId, ichain); + } #endif - continue; - } + continue; + } - /** check TRM Chain Trailer **/ - if (!mDecoderSummary.trmChainTrailer[itrm][ichain]) { - mCheckerSummary.DiagnosticWord[iword] |= DIAGNOSTIC_TRMCHAIN_TRAILER_MISSING(ichain); + /** check TRM Chain Trailer **/ + if (!mDecoderSummary.trmChainTrailer[itrm][ichain]) { + mCheckerSummary.DiagnosticWord[iword] |= DIAGNOSTIC_TRMCHAIN_TRAILER_MISSING(ichain); #ifdef CHECKER_VERBOSE - if (mCheckerVerbose) { - printf(" Missing TRM Chain Trailer (slotId=%d, chain=%d) \n", slotId, ichain); - } + if (mCheckerVerbose) { + printf(" Missing TRM Chain Trailer (slotId=%d, chain=%d) \n", slotId, ichain); + } #endif - mDecoderSummary.trmChainHeader[itrm][ichain] = 0x0; - continue; - } + mDecoderSummary.trmChainHeader[itrm][ichain] = 0x0; + continue; + } - /** increment TRM Chain header counter **/ + /** increment TRM Chain header counter **/ #ifdef CHECKER_COUNTER - mTRMChainCounters[itrm][ichain].Headers++; + mTRMChainCounters[itrm][ichain].Headers++; #endif - - /** check TDC errors **/ - if (mDecoderSummary.hasErrors[itrm][ichain]) { - mCheckerSummary.DiagnosticWord[iword] |= DIAGNOSTIC_TRMCHAIN_TDCERROR_DETECTED(ichain); + + /** check TDC errors **/ + if (mDecoderSummary.hasErrors[itrm][ichain]) { + mCheckerSummary.DiagnosticWord[iword] |= DIAGNOSTIC_TRMCHAIN_TDCERROR_DETECTED(ichain); #ifdef CHECKER_COUNTER - mTRMChainCounters[itrm][ichain].TDCerror++; + mTRMChainCounters[itrm][ichain].TDCerror++; #endif #ifdef CHECKER_VERBOSE - if (mCheckerVerbose) { - printf(" TDC error detected (slotId=%d, chain=%d) \n", slotId, ichain); - } + if (mCheckerVerbose) { + printf(" TDC error detected (slotId=%d, chain=%d) \n", slotId, ichain); + } #endif - } + } - /** check TRM Chain event counter **/ - uint32_t eventCnt = GET_TRMCHAINTRAILER_EVENTCNT(mDecoderSummary.trmChainTrailer[itrm][ichain]); - if (eventCnt != locEvCnt) { - mCheckerSummary.DiagnosticWord[iword] |= DIAGNOSTIC_TRMCHAIN_EVENTCNT_MISMATCH(ichain); + /** check TRM Chain event counter **/ + uint32_t eventCnt = GET_TRMCHAINTRAILER_EVENTCNT(mDecoderSummary.trmChainTrailer[itrm][ichain]); + if (eventCnt != locEvCnt) { + mCheckerSummary.DiagnosticWord[iword] |= DIAGNOSTIC_TRMCHAIN_EVENTCNT_MISMATCH(ichain); #ifdef CHECKER_COUNTER - mTRMChainCounters[itrm][ichain].EventCounterMismatch++; + mTRMChainCounters[itrm][ichain].EventCounterMismatch++; #endif #ifdef CHECKER_VERBOSE - if (mCheckerVerbose) { - printf(" TRM Chain EventCounter / DRM LocalEventCounter mismatch: %d / %d (slotId=%d, chain=%d) \n", eventCnt, locEvCnt, slotId, ichain); - } + if (mCheckerVerbose) { + printf(" TRM Chain EventCounter / DRM LocalEventCounter mismatch: %d / %d (slotId=%d, chain=%d) \n", eventCnt, locEvCnt, slotId, ichain); + } #endif - } + } - /** check TRM Chain Status **/ - uint32_t status = GET_TRMCHAINTRAILER_STATUS(mDecoderSummary.trmChainTrailer[itrm][ichain]); - if (status != 0) { - mCheckerSummary.DiagnosticWord[iword] |= DIAGNOSTIC_TRMCHAIN_STATUS_NOTZERO(ichain); + /** check TRM Chain Status **/ + uint32_t status = GET_TRMCHAINTRAILER_STATUS(mDecoderSummary.trmChainTrailer[itrm][ichain]); + if (status != 0) { + mCheckerSummary.DiagnosticWord[iword] |= DIAGNOSTIC_TRMCHAIN_STATUS_NOTZERO(ichain); #ifdef CHECKER_COUNTER - mTRMChainCounters[itrm][ichain].BadStatus++; + mTRMChainCounters[itrm][ichain].BadStatus++; #endif #ifdef CHECKER_VERBOSE - if (mCheckerVerbose) { - printf(" TRM Chain bad Status: %d (slotId=%d, chain=%d) \n", status, slotId, ichain); - } + if (mCheckerVerbose) { + printf(" TRM Chain bad Status: %d (slotId=%d, chain=%d) \n", status, slotId, ichain); + } #endif - } + } - /** check TRM Chain BunchID **/ - uint32_t bunchCnt = GET_TRMCHAINHEADER_BUNCHCNT(mDecoderSummary.trmChainHeader[itrm][ichain]); - if (bunchCnt != gbtBunchCnt) { - mCheckerSummary.DiagnosticWord[iword] |= DIAGNOSTIC_TRMCHAIN_BUNCHCNT_MISMATCH(ichain); + /** check TRM Chain BunchID **/ + uint32_t bunchCnt = GET_TRMCHAINHEADER_BUNCHCNT(mDecoderSummary.trmChainHeader[itrm][ichain]); + if (bunchCnt != gbtBunchCnt) { + mCheckerSummary.DiagnosticWord[iword] |= DIAGNOSTIC_TRMCHAIN_BUNCHCNT_MISMATCH(ichain); #ifdef CHECKER_COUNTER - mTRMChainCounters[itrm][ichain].BunchIDMismatch++; + mTRMChainCounters[itrm][ichain].BunchIDMismatch++; #endif #ifdef CHECKER_VERBOSE - if (mCheckerVerbose) { - printf(" TRM Chain BunchID / DRM L0BCID mismatch: %d / %d (slotId=%d, chain=%d) \n", bunchCnt, gbtBunchCnt, slotId, ichain); - } + if (mCheckerVerbose) { + printf(" TRM Chain BunchID / DRM L0BCID mismatch: %d / %d (slotId=%d, chain=%d) \n", bunchCnt, gbtBunchCnt, slotId, ichain); + } #endif - } + } - /** clear TRM chain summary data **/ - mDecoderSummary.trmChainHeader[itrm][ichain] = 0x0; - mDecoderSummary.trmChainTrailer[itrm][ichain] = 0x0; - - } /** end of loop over TRM chains **/ + /** clear TRM chain summary data **/ + mDecoderSummary.trmChainHeader[itrm][ichain] = 0x0; + mDecoderSummary.trmChainTrailer[itrm][ichain] = 0x0; - /** clear TRM summary data **/ - mDecoderSummary.trmDataHeader[itrm] = 0x0; - mDecoderSummary.trmDataTrailer[itrm] = 0x0; - - } /** end of loop over TRMs **/ + } /** end of loop over TRM chains **/ - /** check current diagnostic word **/ - auto iword = mCheckerSummary.nDiagnosticWords; - if (mCheckerSummary.DiagnosticWord[iword] & 0xFFFFFFF0) - mCheckerSummary.nDiagnosticWords++; + /** clear TRM summary data **/ + mDecoderSummary.trmDataHeader[itrm] = 0x0; + mDecoderSummary.trmDataTrailer[itrm] = 0x0; + + } /** end of loop over TRMs **/ + + /** check current diagnostic word **/ + auto iword = mCheckerSummary.nDiagnosticWords; + if (mCheckerSummary.DiagnosticWord[iword] & 0xFFFFFFF0) + mCheckerSummary.nDiagnosticWords++; #ifdef CHECKER_VERBOSE - if (mCheckerVerbose) { - std::cout << colorBlue - << "--- END CHECK EVENT: " << mCheckerSummary.nDiagnosticWords << " diagnostic words" - << colorReset - << std::endl; - } + if (mCheckerVerbose) { + std::cout << colorBlue + << "--- END CHECK EVENT: " << mCheckerSummary.nDiagnosticWords << " diagnostic words" + << colorReset + << std::endl; + } #endif - /** clear DRM summary data **/ - mDecoderSummary.tofDataHeader = 0x0; - mDecoderSummary.drmDataHeader = 0x0; - mDecoderSummary.drmDataTrailer = 0x0; + /** clear DRM summary data **/ + mDecoderSummary.tofDataHeader = 0x0; + mDecoderSummary.drmDataHeader = 0x0; + mDecoderSummary.drmDataTrailer = 0x0; - return false; - } + return false; +} - void Compressor::resetCounters() - { - mEventCounter = 0; - mFatalCounter = 0; - mErrorCounter = 0; - mDRMCounters = {0}; - for (int itrm = 0; itrm < 10; ++itrm) { - mTRMCounters[itrm] = {0}; - for (int ichain = 0; ichain < 2; ++ichain) { - mTRMChainCounters[itrm][ichain] = {0}; - }} +void Compressor::resetCounters() +{ + mEventCounter = 0; + mFatalCounter = 0; + mErrorCounter = 0; + mDRMCounters = {0}; + for (int itrm = 0; itrm < 10; ++itrm) { + mTRMCounters[itrm] = {0}; + for (int ichain = 0; ichain < 2; ++ichain) { + mTRMChainCounters[itrm][ichain] = {0}; + } } - - void Compressor::checkSummary() - { - char chname[2] = {'a', 'b'}; +} - std::cout << colorBlue - << "--- SUMMARY COUNTERS: " << mEventCounter << " events " - << " | " << mFatalCounter << " decode fatals " - << " | " << mErrorCounter << " decode errors " - << colorReset - << std::endl; - if (mEventCounter == 0) - return; - printf("\n"); - printf(" DRM "); - float drmheaders = 100. * (float)mDRMCounters.Headers / (float)mEventCounter; - printf(" \033%sheaders: %5.1f %%\033[0m ", drmheaders < 100. ? "[1;31m" : "[0m", drmheaders); - if (mDRMCounters.Headers == 0) - return; - float cbit = 100. * (float)mDRMCounters.clockStatus / float(mDRMCounters.Headers); - printf(" \033%sCbit: %5.1f %%\033[0m ", cbit > 0. ? "[1;31m" : "[0m", cbit); - float fault = 100. * (float)mDRMCounters.Fault / float(mDRMCounters.Headers); - printf(" \033%sfault: %5.1f %%\033[0m ", fault > 0. ? "[1;31m" : "[0m", cbit); - float rtobit = 100. * (float)mDRMCounters.RTOBit / float(mDRMCounters.Headers); - printf(" \033%sRTObit: %5.1f %%\033[0m ", rtobit > 0. ? "[1;31m" : "[0m", cbit); +void Compressor::checkSummary() +{ + char chname[2] = {'a', 'b'}; + + std::cout << colorBlue + << "--- SUMMARY COUNTERS: " << mEventCounter << " events " + << " | " << mFatalCounter << " decode fatals " + << " | " << mErrorCounter << " decode errors " + << colorReset + << std::endl; + if (mEventCounter == 0) + return; + printf("\n"); + printf(" DRM "); + float drmheaders = 100. * (float)mDRMCounters.Headers / (float)mEventCounter; + printf(" \033%sheaders: %5.1f %%\033[0m ", drmheaders < 100. ? "[1;31m" : "[0m", drmheaders); + if (mDRMCounters.Headers == 0) + return; + float cbit = 100. * (float)mDRMCounters.clockStatus / float(mDRMCounters.Headers); + printf(" \033%sCbit: %5.1f %%\033[0m ", cbit > 0. ? "[1;31m" : "[0m", cbit); + float fault = 100. * (float)mDRMCounters.Fault / float(mDRMCounters.Headers); + printf(" \033%sfault: %5.1f %%\033[0m ", fault > 0. ? "[1;31m" : "[0m", cbit); + float rtobit = 100. * (float)mDRMCounters.RTOBit / float(mDRMCounters.Headers); + printf(" \033%sRTObit: %5.1f %%\033[0m ", rtobit > 0. ? "[1;31m" : "[0m", cbit); + printf("\n"); + // std::cout << "-----------------------------------------------------------" << std::endl; + // printf(" LTM | headers: %5.1f %% \n", 0.); + for (int itrm = 0; itrm < 10; ++itrm) { printf("\n"); - // std::cout << "-----------------------------------------------------------" << std::endl; - // printf(" LTM | headers: %5.1f %% \n", 0.); - for (int itrm = 0; itrm < 10; ++itrm) { + printf(" %2d TRM ", itrm + 3); + float trmheaders = 100. * (float)mTRMCounters[itrm].Headers / float(mDRMCounters.Headers); + printf(" \033%sheaders: %5.1f %%\033[0m ", trmheaders < 100. ? "[1;31m" : "[0m", trmheaders); + if (mTRMCounters[itrm].Headers == 0.) { printf("\n"); - printf(" %2d TRM ", itrm + 3); - float trmheaders = 100. * (float)mTRMCounters[itrm].Headers / float(mDRMCounters.Headers); - printf(" \033%sheaders: %5.1f %%\033[0m ", trmheaders < 100. ? "[1;31m" : "[0m", trmheaders); - if (mTRMCounters[itrm].Headers == 0.) { - printf("\n"); - continue; - } - float empty = 100. * (float)mTRMCounters[itrm].Empty / (float)mTRMCounters[itrm].Headers; - printf(" \033%sempty: %5.1f %%\033[0m ", empty > 0. ? "[1;31m" : "[0m", empty); - float evCount = 100. * (float)mTRMCounters[itrm].EventCounterMismatch / (float)mTRMCounters[itrm].Headers; - printf(" \033%sevCount: %5.1f %%\033[0m ", evCount > 0. ? "[1;31m" : "[0m", evCount); - float ebit = 100. * (float)mTRMCounters[itrm].EBit / (float)mTRMCounters[itrm].Headers; - printf(" \033%sEbit: %5.1f %%\033[0m ", ebit > 0. ? "[1;31m" : "[0m", ebit); - printf(" \n"); - for (int ichain = 0; ichain < 2; ++ichain) { - printf(" %c ", chname[ichain]); - float chainheaders = 100. * (float)mTRMChainCounters[itrm][ichain].Headers / (float)mTRMCounters[itrm].Headers; - printf(" \033%sheaders: %5.1f %%\033[0m ", chainheaders < 100. ? "[1;31m" : "[0m", chainheaders); - if (mTRMChainCounters[itrm][ichain].Headers == 0) { - printf("\n"); - continue; - } - float status = 100. * mTRMChainCounters[itrm][ichain].BadStatus / (float)mTRMChainCounters[itrm][ichain].Headers; - printf(" \033%sstatus: %5.1f %%\033[0m ", status > 0. ? "[1;31m" : "[0m", status); - float bcid = 100. * mTRMChainCounters[itrm][ichain].BunchIDMismatch / (float)mTRMChainCounters[itrm][ichain].Headers; - printf(" \033%sbcID: %5.1f %%\033[0m ", bcid > 0. ? "[1;31m" : "[0m", bcid); - float tdcerr = 100. * mTRMChainCounters[itrm][ichain].TDCerror / (float)mTRMChainCounters[itrm][ichain].Headers; - printf(" \033%sTDCerr: %5.1f %%\033[0m ", tdcerr > 0. ? "[1;31m" : "[0m", tdcerr); - printf("\n"); + continue; + } + float empty = 100. * (float)mTRMCounters[itrm].Empty / (float)mTRMCounters[itrm].Headers; + printf(" \033%sempty: %5.1f %%\033[0m ", empty > 0. ? "[1;31m" : "[0m", empty); + float evCount = 100. * (float)mTRMCounters[itrm].EventCounterMismatch / (float)mTRMCounters[itrm].Headers; + printf(" \033%sevCount: %5.1f %%\033[0m ", evCount > 0. ? "[1;31m" : "[0m", evCount); + float ebit = 100. * (float)mTRMCounters[itrm].EBit / (float)mTRMCounters[itrm].Headers; + printf(" \033%sEbit: %5.1f %%\033[0m ", ebit > 0. ? "[1;31m" : "[0m", ebit); + printf(" \n"); + for (int ichain = 0; ichain < 2; ++ichain) { + printf(" %c ", chname[ichain]); + float chainheaders = 100. * (float)mTRMChainCounters[itrm][ichain].Headers / (float)mTRMCounters[itrm].Headers; + printf(" \033%sheaders: %5.1f %%\033[0m ", chainheaders < 100. ? "[1;31m" : "[0m", chainheaders); + if (mTRMChainCounters[itrm][ichain].Headers == 0) { + printf("\n"); + continue; } + float status = 100. * mTRMChainCounters[itrm][ichain].BadStatus / (float)mTRMChainCounters[itrm][ichain].Headers; + printf(" \033%sstatus: %5.1f %%\033[0m ", status > 0. ? "[1;31m" : "[0m", status); + float bcid = 100. * mTRMChainCounters[itrm][ichain].BunchIDMismatch / (float)mTRMChainCounters[itrm][ichain].Headers; + printf(" \033%sbcID: %5.1f %%\033[0m ", bcid > 0. ? "[1;31m" : "[0m", bcid); + float tdcerr = 100. * mTRMChainCounters[itrm][ichain].TDCerror / (float)mTRMChainCounters[itrm][ichain].Headers; + printf(" \033%sTDCerr: %5.1f %%\033[0m ", tdcerr > 0. ? "[1;31m" : "[0m", tdcerr); + printf("\n"); } - printf("\n"); } + printf("\n"); +} } // namespace tof } // namespace o2 diff --git a/Detectors/TOF/compression/src/CompressorTask.cxx b/Detectors/TOF/compression/src/CompressorTask.cxx index f890a57eb1a59..1edfdc33e3c52 100644 --- a/Detectors/TOF/compression/src/CompressorTask.cxx +++ b/Detectors/TOF/compression/src/CompressorTask.cxx @@ -43,7 +43,7 @@ void CompressorTask::init(InitContext& ic) auto finishFunction = [this]() { mCompressor.checkSummary(); }; - + ic.services().get().set(CallbackService::Id::Stop, finishFunction); } @@ -58,14 +58,13 @@ void CompressorTask::run(ProcessingContext& pc) auto payloadSize = header->payloadSize; mCompressor.setDecoderBuffer(payload); mCompressor.setDecoderBufferSize(payloadSize); - + /** run **/ mCompressor.run(); - + /** push output **/ mDataFrame.mSize = mCompressor.getEncoderByteCounter(); pc.outputs().snapshot(Output{"TOF", "CMPDATAFRAME", 0, Lifetime::Timeframe}, mDataFrame); - } } diff --git a/Detectors/TOF/compression/src/RawReaderTask.cxx b/Detectors/TOF/compression/src/RawReaderTask.cxx index 30be6cc779a71..6dd88c594788b 100644 --- a/Detectors/TOF/compression/src/RawReaderTask.cxx +++ b/Detectors/TOF/compression/src/RawReaderTask.cxx @@ -30,7 +30,7 @@ void RawReaderTask::init(InitContext& ic) LOG(INFO) << "RawReader init"; auto filename = ic.options().get("tof-raw-filename"); mBuffer.reserve(1048576); - + /** open file **/ if (mFile.is_open()) { LOG(WARNING) << "a file was already open, closing"; @@ -73,7 +73,7 @@ void RawReaderTask::run(ProcessingContext& pc) auto freefct = [](void* data, void* hint) {}; // simply ignore the cleanup for the test pc.outputs().adoptChunk(Output{"TOF", "RAWDATAFRAME", 0, Lifetime::Timeframe}, mBuffer.data(), mBuffer.size(), freefct, nullptr); - + /** check eof **/ if (mFile.eof()) { LOG(WARNING) << "nothig else to read"; diff --git a/Detectors/TOF/prototyping/checkChannelMapping.C b/Detectors/TOF/prototyping/checkChannelMapping.C index 5cd49ddebdab4..e104800a034ff 100644 --- a/Detectors/TOF/prototyping/checkChannelMapping.C +++ b/Detectors/TOF/prototyping/checkChannelMapping.C @@ -4,18 +4,19 @@ using namespace o2::tof; -void checkChannelMapping(){ +void checkChannelMapping() +{ int nchannels = Geo::NCHANNELS; int volume[5]; - printf("N TOF channels = %d\n",nchannels); + printf("N TOF channels = %d\n", nchannels); int failed1 = 0; int failed2 = 0; - for(int i=0;i < nchannels;i++){ + for (int i = 0; i < nchannels; i++) { int echan = Geo::getECHFromCH(i); - if(i != Geo::getCHFromECH(echan)){ + if (i != Geo::getCHFromECH(echan)) { failed1++; - printf("check 1)%d %d\n",i,Geo::getCHFromECH(echan)); + printf("check 1)%d %d\n", i, Geo::getCHFromECH(echan)); } volume[0] = Geo::getCrateFromECH(echan); @@ -24,13 +25,12 @@ void checkChannelMapping(){ volume[3] = Geo::getTDCFromECH(echan); volume[4] = Geo::getTDCChFromECH(echan); - if(echan != Geo::getECHFromIndexes(volume[0],volume[1],volume[2],volume[3],volume[4])){ + if (echan != Geo::getECHFromIndexes(volume[0], volume[1], volume[2], volume[3], volume[4])) { failed2++; - printf("check2) %d %d (%d %d %d %d %d)\n",echan,Geo::getECHFromIndexes(volume[0],volume[1],volume[2],volume[3],volume[4]),volume[0],volume[1],volume[2],volume[3],volume[4]); + printf("check2) %d %d (%d %d %d %d %d)\n", echan, Geo::getECHFromIndexes(volume[0], volume[1], volume[2], volume[3], volume[4]), volume[0], volume[1], volume[2], volume[3], volume[4]); } } - printf("Check1 failed = %d\n",failed1); - printf("Check2 failed = %d\n",failed2); - + printf("Check1 failed = %d\n", failed1); + printf("Check2 failed = %d\n", failed2); } diff --git a/Detectors/TOF/reconstruction/include/TOFReconstruction/Decoder.h b/Detectors/TOF/reconstruction/include/TOFReconstruction/Decoder.h index 5b83180d9a36c..534c06b883757 100644 --- a/Detectors/TOF/reconstruction/include/TOFReconstruction/Decoder.h +++ b/Detectors/TOF/reconstruction/include/TOFReconstruction/Decoder.h @@ -57,7 +57,7 @@ class Decoder : public WindowFiller static void fromRawHit2Digit(int icrate, int itrm, int itdc, int ichain, int channel, int orbit, int bunchid, int tdc, int tot, std::array& digitInfo); // convert raw info in digit info (channel, tdc, tot, bc), tdc = packetHit.time + (frameHeader.frameID << 13) - char *nextPage(void *current,int shift=8192); + char* nextPage(void* current, int shift = 8192); protected: static const int NCRU = 4; diff --git a/Detectors/TOF/reconstruction/include/TOFReconstruction/Encoder.h b/Detectors/TOF/reconstruction/include/TOFReconstruction/Encoder.h index 7d06df331dd62..586aa99c57f6d 100644 --- a/Detectors/TOF/reconstruction/include/TOFReconstruction/Encoder.h +++ b/Detectors/TOF/reconstruction/include/TOFReconstruction/Encoder.h @@ -55,14 +55,14 @@ class Encoder bool close(); void setVerbose(bool val) { mVerbose = val; }; -char *nextPage(void *current, int step); - int getSize(void *first,void *last); + char* nextPage(void* current, int step); + int getSize(void* first, void* last); void nextWord(int icrate); void nextWordNoEmpty(int icrate); - void setContinuous(bool value) {mIsContinuous = value;} - bool isContinuous() const {return mIsContinuous;} + void setContinuous(bool value) { mIsContinuous = value; } + bool isContinuous() const { return mIsContinuous; } protected: // benchmarks @@ -71,7 +71,7 @@ char *nextPage(void *current, int step); double mIntegratedTime = 0.; static constexpr int NCRU = 4; - static constexpr int NLINKSPERCRU = 72/NCRU; + static constexpr int NLINKSPERCRU = 72 / NCRU; std::ofstream mFileCRU[NCRU]; bool mVerbose = false; @@ -84,7 +84,7 @@ char *nextPage(void *current, int step); TOFDataHeader_t* mTOFDataHeader[72]; DRMDataHeader_t* mDRMDataHeader[72]; bool mNextWordStatus[72]; - + bool mIsContinuous = true; o2::header::RAWDataHeader* mRDH[72]; @@ -94,8 +94,8 @@ char *nextPage(void *current, int step); bool mStartRun = true; // temporary variable for encoding - int mEventCounter; //! - o2::InteractionRecord mIR; //! + int mEventCounter; //! + o2::InteractionRecord mIR; //! }; } // namespace compressed diff --git a/Detectors/TOF/reconstruction/src/Decoder.cxx b/Detectors/TOF/reconstruction/src/Decoder.cxx index 95c6a956e8fe4..76c647383e00f 100644 --- a/Detectors/TOF/reconstruction/src/Decoder.cxx +++ b/Detectors/TOF/reconstruction/src/Decoder.cxx @@ -23,8 +23,9 @@ namespace tof { namespace compressed { -Decoder::Decoder(){ - for(int i=0;i < NCRU;i++){ +Decoder::Decoder() +{ + for (int i = 0; i < NCRU; i++) { mIntegratedBytes[i] = 0.; mBuffer[i] = nullptr; mCruIn[i] = false; @@ -36,13 +37,13 @@ bool Decoder::open(std::string name) int nfileopened = NCRU; int fullsize = 0; - for(int i=0;i < NCRU;i++){ + for (int i = 0; i < NCRU; i++) { std::string nametmp; - nametmp.append(Form("cru%02d",i)); + nametmp.append(Form("cru%02d", i)); nametmp.append(name); if (mFile[i].is_open()) { - std::cout << "Warning: a file (" << i << ") was already open, closing" << std::endl; + std::cout << "Warning: a file (" << i << ") was already open, closing" << std::endl; mFile[i].close(); } mFile[i].open(nametmp.c_str(), std::fstream::in | std::fstream::binary); @@ -51,8 +52,7 @@ bool Decoder::open(std::string name) nfileopened--; mSize[i] = 0; mCruIn[i] = false; - } - else{ + } else { mFile[i].seekg(0, mFile[i].end); mSize[i] = mFile[i].tellg(); mFile[i].seekg(0); @@ -63,21 +63,22 @@ bool Decoder::open(std::string name) } } - if(! nfileopened){ + if (!nfileopened) { std::cerr << "No streams available" << std::endl; return true; } // mBufferLocal.resize(fullsize); - - printf("Full input buffer size = %d byte\n",fullsize); - char* pos = new char[fullsize];//mBufferLocal.data(); - for(int i=0;i < NCRU;i++){ - if(!mCruIn[i]) continue; + printf("Full input buffer size = %d byte\n", fullsize); + + char* pos = new char[fullsize]; //mBufferLocal.data(); + for (int i = 0; i < NCRU; i++) { + if (!mCruIn[i]) + continue; mBuffer[i] = pos; - + // read content of infile mFile[i].read(mBuffer[i], mSize[i]); mUnion[i] = reinterpret_cast(mBuffer[i]); @@ -86,8 +87,7 @@ bool Decoder::open(std::string name) pos += mSize[i]; } - - printf("Number of TOF compressed streamers = %d/%d\n",nfileopened,NCRU); + printf("Number of TOF compressed streamers = %d/%d\n", nfileopened, NCRU); close(); @@ -96,22 +96,21 @@ bool Decoder::open(std::string name) bool Decoder::close() { - for(int i=0;i < NCRU;i++){ + for (int i = 0; i < NCRU; i++) { if (mFile[i].is_open()) mFile[i].close(); } return false; } - void Decoder::readTRM(int icru, int icrate, int orbit, int bunchid) +void Decoder::readTRM(int icru, int icrate, int orbit, int bunchid) { - if(orbit < mFirstOrbit || (orbit == mFirstOrbit && bunchid < mFirstBunch)){ + if (orbit < mFirstOrbit || (orbit == mFirstOrbit && bunchid < mFirstBunch)) { mFirstOrbit = orbit; mFirstBunch = bunchid; } - if (mVerbose) printTRMInfo(icru); int nhits = mUnion[icru]->frameHeader.numberOfHits; @@ -119,7 +118,8 @@ bool Decoder::close() int itrm = mUnion[icru]->frameHeader.trmID; int deltaBC = mUnion[icru]->frameHeader.deltaBC; - if(deltaBC != 0) printf("DeltaBC = %d\n",deltaBC); + if (deltaBC != 0) + printf("DeltaBC = %d\n", deltaBC); mUnion[icru]++; mIntegratedBytes[icru] += 4; @@ -142,17 +142,16 @@ bool Decoder::close() int isnext = digitInfo[3] * Geo::BC_IN_WINDOW_INV; - if(isnext >= MAXWINDOWS){ // accumulate all digits which are not in the first windows - + if (isnext >= MAXWINDOWS) { // accumulate all digits which are not in the first windows insertDigitInFuture(digitInfo[0], digitInfo[1], digitInfo[2], digitInfo[3], 0, digitInfo[4], digitInfo[5]); - } - else{ + } else { std::vector* cstrip = mStripsCurrent; // first window - if(isnext) cstrip = mStripsNext[isnext-1]; // next window - + if (isnext) + cstrip = mStripsNext[isnext - 1]; // next window + UInt_t istrip = digitInfo[0] / Geo::NPADS; - + // add digit fillDigitsInStrip(cstrip, digitInfo[0], digitInfo[1], digitInfo[2], digitInfo[3], istrip); } @@ -177,18 +176,18 @@ void Decoder::fromRawHit2Digit(int icrate, int itrm, int itdc, int ichain, int c digitInfo[4] = orbit; digitInfo[5] = bunchid; - } -char *Decoder::nextPage(void *current, int shift){ - char *point = reinterpret_cast(current); +char* Decoder::nextPage(void* current, int shift) +{ + char* point = reinterpret_cast(current); point += shift; return point; } bool Decoder::decode() // return a vector of digits in a TOF readout window -{ +{ mReadoutWindowCurrent = 0; mFirstOrbit = 0; mFirstBunch = 0; @@ -201,19 +200,20 @@ bool Decoder::decode() // return a vector of digits in a TOF readout window // start from the beginning of the timeframe mEventTime = 0; - + // loop over CRUs - for(int icru=0; icru < NCRU; icru++){ - if(! mCruIn[icru]) continue; // no data stream available for this cru + for (int icru = 0; icru < NCRU; icru++) { + if (!mCruIn[icru]) + continue; // no data stream available for this cru - printf("decoding cru %d\n",icru); + printf("decoding cru %d\n", icru); - while(mUnion[icru] < mUnionEnd[icru]){ // read all the buffer + while (mUnion[icru] < mUnionEnd[icru]) { // read all the buffer // read open RDH mRDH = reinterpret_cast(mUnion[icru]); if (mVerbose) - printRDH(); - + printRDH(); + // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! // note that RDH continue is not yet considered as option (to be added) // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -222,50 +222,51 @@ bool Decoder::decode() // return a vector of digits in a TOF readout window char* shift = reinterpret_cast(mRDH); mUnion[icru] = reinterpret_cast(shift + mRDH->headerSize); mIntegratedBytes[icru] += mRDH->headerSize; - - if(mUnion[icru] >= mUnionEnd[icru]) continue; // end of data stream reac - for(int window=0; window < Geo::NWINDOW_IN_ORBIT; window++){ - // read Crate Header - int bunchid = mUnion[icru]->crateHeader.bunchID; + + if (mUnion[icru] >= mUnionEnd[icru]) + continue; // end of data stream reac + for (int window = 0; window < Geo::NWINDOW_IN_ORBIT; window++) { + // read Crate Header + int bunchid = mUnion[icru]->crateHeader.bunchID; int icrate = mUnion[icru]->crateHeader.drmID; - if (mVerbose) - printCrateInfo(icru); - mUnion[icru]++; - mIntegratedBytes[icru] += 4; - - //read Orbit - int orbit = mUnion[icru]->crateOrbit.orbitID; - if (mVerbose) - printf("orbit ID = %d\n", orbit); - mUnion[icru]++; - mIntegratedBytes[icru] += 4; - - while (!mUnion[icru]->frameHeader.mustBeZero) { - readTRM(icru, icrate, orbit, bunchid); - } - - // read Crate Trailer - if (mVerbose) - printCrateTrailerInfo(icru); - auto ndw = mUnion[icru]->crateTrailer.numberOfDiagnostics; - mUnion[icru]++; - mIntegratedBytes[icru] += 4; - - // loop over number of diagnostic words - for (int idw = 0; idw < ndw; ++idw){ - mUnion[icru]++; - mIntegratedBytes[icru] += 4; - } + if (mVerbose) + printCrateInfo(icru); + mUnion[icru]++; + mIntegratedBytes[icru] += 4; + + //read Orbit + int orbit = mUnion[icru]->crateOrbit.orbitID; + if (mVerbose) + printf("orbit ID = %d\n", orbit); + mUnion[icru]++; + mIntegratedBytes[icru] += 4; + + while (!mUnion[icru]->frameHeader.mustBeZero) { + readTRM(icru, icrate, orbit, bunchid); + } + + // read Crate Trailer + if (mVerbose) + printCrateTrailerInfo(icru); + auto ndw = mUnion[icru]->crateTrailer.numberOfDiagnostics; + mUnion[icru]++; + mIntegratedBytes[icru] += 4; + + // loop over number of diagnostic words + for (int idw = 0; idw < ndw; ++idw) { + mUnion[icru]++; + mIntegratedBytes[icru] += 4; + } } // read close RDH - mRDH = reinterpret_cast(nextPage(mRDH,mRDH->memorySize)); + mRDH = reinterpret_cast(nextPage(mRDH, mRDH->memorySize)); if (mVerbose) - printRDH(); + printRDH(); mIntegratedBytes[icru] += mRDH->headerSize; - + // go to next page - mUnion[icru] = reinterpret_cast(nextPage(mRDH,mRDH->memorySize)); + mUnion[icru] = reinterpret_cast(nextPage(mRDH, mRDH->memorySize)); } } @@ -317,7 +318,8 @@ void Decoder::printHitInfo(int icru) const printf("___________________\n"); } -void Decoder::printRDH() const{ +void Decoder::printRDH() const +{ printf("______RDH_INFO_____\n"); printf("VERSION = %d\n", mRDH->version); printf("BLOCK LENGTH = %d\n", mRDH->blockLength); @@ -327,7 +329,6 @@ void Decoder::printRDH() const{ printf("CRU ID = %d\n", mRDH->cruID); printf("LINK ID = %d\n", mRDH->linkID); printf("___________________\n"); - } } // namespace compressed } // namespace tof diff --git a/Detectors/TOF/reconstruction/src/Encoder.cxx b/Detectors/TOF/reconstruction/src/Encoder.cxx index 893cefe8b23f2..89246e2b03296 100644 --- a/Detectors/TOF/reconstruction/src/Encoder.cxx +++ b/Detectors/TOF/reconstruction/src/Encoder.cxx @@ -30,7 +30,7 @@ namespace raw Encoder::Encoder() { // intialize 72 buffers (one per crate) - for(int i=0;i < 72;i++){ + for (int i = 0; i < 72; i++) { mIntegratedBytes[i] = 0; mBuffer[i] = nullptr; mUnion[i] = nullptr; @@ -39,8 +39,9 @@ Encoder::Encoder() } } -void Encoder::nextWord(int icrate){ - if(mNextWordStatus[icrate]){ +void Encoder::nextWord(int icrate) +{ + if (mNextWordStatus[icrate]) { nextWordNoEmpty(icrate); mUnion[icrate]->data = 0; nextWordNoEmpty(icrate); @@ -50,28 +51,28 @@ void Encoder::nextWord(int icrate){ mNextWordStatus[icrate] = !mNextWordStatus[icrate]; } -void Encoder::nextWordNoEmpty(int icrate){ +void Encoder::nextWordNoEmpty(int icrate) +{ mUnion[icrate]++; // check if you went over the buffer size - int csize = getSize(mRDH[icrate],mUnion[icrate]); - if(csize >= Geo::RAW_PAGE_MAX_SIZE){ + int csize = getSize(mRDH[icrate], mUnion[icrate]); + if (csize >= Geo::RAW_PAGE_MAX_SIZE) { addPage(icrate); - } - + } } bool Encoder::open(std::string name) { bool status = false; - for(int i=0;i < NCRU;i++){ + for (int i = 0; i < NCRU; i++) { std::string nametmp; - nametmp.append(Form("cru%02d",i)); + nametmp.append(Form("cru%02d", i)); nametmp.append(name); - printf("TOF Raw encoder: create stream to CRU: %s\n",nametmp.c_str()); + printf("TOF Raw encoder: create stream to CRU: %s\n", nametmp.c_str()); if (mFileCRU[i].is_open()) { - std::cout << "Warning: a file (" << i << ") was already open, closing" << std::endl; + std::cout << "Warning: a file (" << i << ") was already open, closing" << std::endl; mFileCRU[i].close(); } mFileCRU[i].open(nametmp.c_str(), std::fstream::out | std::fstream::binary); @@ -79,14 +80,14 @@ bool Encoder::open(std::string name) std::cerr << "Cannot open " << nametmp << std::endl; status = true; } - } return status; } -bool Encoder::flush(int icrate){ - if(mIntegratedBytes[icrate]){ +bool Encoder::flush(int icrate) +{ + if (mIntegratedBytes[icrate]) { mIntegratedAllBytes += mIntegratedBytes[icrate]; mIntegratedBytes[icrate] = 0; mUnion[icrate] = mStart[icrate]; @@ -95,29 +96,31 @@ bool Encoder::flush(int icrate){ bool Encoder::flush() { - bool allempty=true; - for(int i=0;i < 72;i++) - if(mIntegratedBytes[i]) allempty = false; + bool allempty = true; + for (int i = 0; i < 72; i++) + if (mIntegratedBytes[i]) + allempty = false; - if(allempty) return true; + if (allempty) + return true; // write superpages - for(int i=0;i < 72;i++){ - int icru = i/NLINKSPERCRU; + for (int i = 0; i < 72; i++) { + int icru = i / NLINKSPERCRU; mFileCRU[icru].write(mBuffer[i], mIntegratedBytes[i]); } - for(int i=0;i < 72;i++) + for (int i = 0; i < 72; i++) flush(i); - - memset(mBuffer[0], 0, mSize*72); + + memset(mBuffer[0], 0, mSize * 72); return false; } bool Encoder::close() { - for(int i=0;i < NCRU;i++) + for (int i = 0; i < NCRU; i++) if (mFileCRU[i].is_open()) mFileCRU[i].close(); return false; @@ -125,19 +128,20 @@ bool Encoder::close() bool Encoder::alloc(long size) { - if(size < 500000) size = 500000; + if (size < 500000) + size = 500000; mSize = size; - mBufferLocal.resize(size*72); + mBufferLocal.resize(size * 72); mBuffer[0] = mBufferLocal.data(); - memset(mBuffer[0], 0, mSize*72); + memset(mBuffer[0], 0, mSize * 72); mStart[0] = reinterpret_cast(mBuffer[0]); mUnion[0] = mStart[0]; // rewind - for(int i=1;i < 72;i++){ - mBuffer[i] = mBuffer[i-1]+size; + for (int i = 1; i < 72; i++) { + mBuffer[i] = mBuffer[i - 1] + size; mStart[i] = reinterpret_cast(mBuffer[i]); mUnion[i] = mStart[i]; // rewind } @@ -148,7 +152,8 @@ void Encoder::encodeTRM(const std::vector& summary, Int_t icrate, Int_t i // return next TRM index (-1 if not in the same crate) // start to convert digiti from istart --> then update istart to the starting position of the new TRM { - if(mVerbose) printf("Crate %d: encode TRM %d \n",icrate,itrm); + if (mVerbose) + printf("Crate %d: encode TRM %d \n", icrate, itrm); // TRM HEADER mUnion[icrate]->trmDataHeader.slotId = itrm; @@ -159,28 +164,31 @@ void Encoder::encodeTRM(const std::vector& summary, Int_t icrate, Int_t i nextWord(icrate); // LOOP OVER CHAINS - for(int ichain=0;ichain < 2; ichain++){ + for (int ichain = 0; ichain < 2; ichain++) { // CHAIN HEADER mUnion[icrate]->trmChainHeader.slotId = itrm; mUnion[icrate]->trmChainHeader.bunchCnt = mIR.bc; mUnion[icrate]->trmChainHeader.mbz = 0; - mUnion[icrate]->trmChainHeader.dataId = 2*ichain; + mUnion[icrate]->trmChainHeader.dataId = 2 * ichain; nextWord(icrate); - - while(istart < summary.size()){ // fill hits + + while (istart < summary.size()) { // fill hits /** loop over hits **/ int whatChain = summary[istart].getElChainIndex(); - if (whatChain != ichain) break; + if (whatChain != ichain) + break; int whatTRM = summary[istart].getElTRMIndex(); - if (whatTRM != itrm) break; + if (whatTRM != itrm) + break; int whatCrate = summary[istart].getElCrateIndex(); - if (whatCrate != icrate) break; - + if (whatCrate != icrate) + break; + int hittimeTDC = (summary[istart].getBC() - mEventCounter * Geo::BC_IN_WINDOW) * 1024 + summary[istart].getTDC(); // time in TDC bin within the TOF WINDOW - - if(hittimeTDC < 0){ - LOG(ERROR) << "Negative hit encoded " << hittimeTDC << ", something went wrong in filling readout window"; - printf("%d %d %d\n",summary[istart].getBC(), mEventCounter * Geo::BC_IN_WINDOW,summary[istart].getTDC()); + + if (hittimeTDC < 0) { + LOG(ERROR) << "Negative hit encoded " << hittimeTDC << ", something went wrong in filling readout window"; + printf("%d %d %d\n", summary[istart].getBC(), mEventCounter * Geo::BC_IN_WINDOW, summary[istart].getTDC()); } // leading time mUnion[icrate]->trmDataHit.time = hittimeTDC; @@ -188,14 +196,14 @@ void Encoder::encodeTRM(const std::vector& summary, Int_t icrate, Int_t i mUnion[icrate]->trmDataHit.tdcId = summary[istart].getElTDCIndex(); mUnion[icrate]->trmDataHit.dataId = 0xa; nextWord(icrate); - + // trailing time - mUnion[icrate]->trmDataHit.time = hittimeTDC + summary[istart].getTOT()*Geo::RATIO_TOT_TDC_BIN; + mUnion[icrate]->trmDataHit.time = hittimeTDC + summary[istart].getTOT() * Geo::RATIO_TOT_TDC_BIN; mUnion[icrate]->trmDataHit.chanId = summary[istart].getElChIndex(); mUnion[icrate]->trmDataHit.tdcId = summary[istart].getElTDCIndex(); mUnion[icrate]->trmDataHit.dataId = 0xc; nextWord(icrate); - + istart++; } @@ -203,7 +211,7 @@ void Encoder::encodeTRM(const std::vector& summary, Int_t icrate, Int_t i mUnion[icrate]->trmChainTrailer.status = 0; mUnion[icrate]->trmChainTrailer.mbz = 0; mUnion[icrate]->trmChainTrailer.eventCnt = mEventCounter; - mUnion[icrate]->trmChainTrailer.dataId = 1 + 2*ichain; + mUnion[icrate]->trmChainTrailer.dataId = 1 + 2 * ichain; nextWord(icrate); } @@ -221,39 +229,39 @@ void Encoder::encodeTRM(const std::vector& summary, Int_t icrate, Int_t i bool Encoder::encode(std::vector> digitWindow, int tofwindow) // pass a vector of digits in a TOF readout window, tof window is the entry in the vector-of-vector of digits needed to extract bunch id and orbit { - if(digitWindow.size() != Geo::NWINDOW_IN_ORBIT){ - printf("Something went wrong in encoding: digitWindow=%d different from %d\n",digitWindow.size(),Geo::NWINDOW_IN_ORBIT); + if (digitWindow.size() != Geo::NWINDOW_IN_ORBIT) { + printf("Something went wrong in encoding: digitWindow=%d different from %d\n", digitWindow.size(), Geo::NWINDOW_IN_ORBIT); return 999; } - for(int i=0;i < 72;i++){ - if(mIntegratedBytes[i] + 100000 > mSize) + for (int i = 0; i < 72; i++) { + if (mIntegratedBytes[i] + 100000 > mSize) flush(); } - for (int iwin=0; iwin < Geo::NWINDOW_IN_ORBIT; iwin++) { - std::vector &summary = digitWindow.at(iwin); + for (int iwin = 0; iwin < Geo::NWINDOW_IN_ORBIT; iwin++) { + std::vector& summary = digitWindow.at(iwin); // caching electronic indexes in digit array for (auto dig = summary.begin(); dig != summary.end(); dig++) { int digitchannel = dig->getChannel(); dig->setElectronicIndex(Geo::getECHFromCH(digitchannel)); } - + // sorting by electroni indexes std::sort(summary.begin(), summary.end(), - [](Digit a, Digit b) { return a.getElectronicIndex() < b.getElectronicIndex(); }); + [](Digit a, Digit b) { return a.getElectronicIndex() < b.getElectronicIndex(); }); } - + #ifdef VERBOSE if (mVerbose) std::cout << "-------- START ENCODE EVENT ----------------------------------------" << std::endl; #endif auto start = std::chrono::high_resolution_clock::now(); - mEventCounter = tofwindow; // tof window index - mIR.orbit = mEventCounter / Geo::NWINDOW_IN_ORBIT; // since 3 tof window = 1 orbit + mEventCounter = tofwindow; // tof window index + mIR.orbit = mEventCounter / Geo::NWINDOW_IN_ORBIT; // since 3 tof window = 1 orbit - for(int i=0;i < 72;i++){ + for (int i = 0; i < 72; i++) { // add RDH open mRDH[i] = reinterpret_cast(mUnion[i]); mNextWordStatus[i] = false; @@ -261,30 +269,30 @@ bool Encoder::encode(std::vector> digitWindow, int t } // encode all windows - for (int iwin=0; iwin < Geo::NWINDOW_IN_ORBIT; iwin++) { - mEventCounter = tofwindow+iwin; // tof window index + for (int iwin = 0; iwin < Geo::NWINDOW_IN_ORBIT; iwin++) { + mEventCounter = tofwindow + iwin; // tof window index - std::vector &summary = digitWindow.at(iwin); + std::vector& summary = digitWindow.at(iwin); mIR.bc = ((mEventCounter % Geo::NWINDOW_IN_ORBIT) * Geo::BC_IN_ORBIT) / Geo::NWINDOW_IN_ORBIT; // bunch crossing in the current orbit at the beginning of the window int icurrentdigit = 0; // TOF data header - for(int i=0;i < 72;i++){ + for (int i = 0; i < 72; i++) { mTOFDataHeader[i] = reinterpret_cast(mUnion[i]); - mTOFDataHeader[i]->bytePayload=0; // event length in byte (to be filled later) - mTOFDataHeader[i]->mbz=0; - mTOFDataHeader[i]->dataId=4; + mTOFDataHeader[i]->bytePayload = 0; // event length in byte (to be filled later) + mTOFDataHeader[i]->mbz = 0; + mTOFDataHeader[i]->dataId = 4; nextWord(i); mUnion[i]->tofOrbit.orbit = mIR.orbit; nextWord(i); mDRMDataHeader[i] = reinterpret_cast(mUnion[i]); - mDRMDataHeader[i]->slotId =1; - mDRMDataHeader[i]->eventWords =0; // event length in word (to be filled later) --> word = byte/4 - mDRMDataHeader[i]->drmId =i; - mDRMDataHeader[i]->dataId =4; + mDRMDataHeader[i]->slotId = 1; + mDRMDataHeader[i]->eventWords = 0; // event length in word (to be filled later) --> word = byte/4 + mDRMDataHeader[i]->drmId = i; + mDRMDataHeader[i]->dataId = 4; nextWord(i); mUnion[i]->drmHeadW1.slotId = 1; @@ -297,7 +305,7 @@ bool Encoder::encode(std::vector> digitWindow, int t nextWord(i); mUnion[i]->drmHeadW2.slotId = 1; - mUnion[i]->drmHeadW2.enaSlotMask = (i % 2 == 0 ? 0x7fc : 0x7fe); + mUnion[i]->drmHeadW2.enaSlotMask = (i % 2 == 0 ? 0x7fc : 0x7fe); mUnion[i]->drmHeadW2.mbz = 0; mUnion[i]->drmHeadW2.faultSlotMask = 0; mUnion[i]->drmHeadW2.readoutTimeOut = 0; @@ -325,11 +333,11 @@ bool Encoder::encode(std::vector> digitWindow, int t mUnion[i]->drmHeadW5.dataId = 4; nextWord(i); - int trm0 = 4 - (i%2); - for(int itrm=trm0;itrm < 13;itrm++){ - encodeTRM(summary,i,itrm,icurrentdigit); + int trm0 = 4 - (i % 2); + for (int itrm = trm0; itrm < 13; itrm++) { + encodeTRM(summary, i, itrm, icurrentdigit); } - + mUnion[i]->drmDataTrailer.slotId = 1; mUnion[i]->drmDataTrailer.locEvCnt = mEventCounter; mUnion[i]->drmDataTrailer.mbz = 0; @@ -338,26 +346,26 @@ bool Encoder::encode(std::vector> digitWindow, int t mUnion[i]->data = 0x70000000; nextWord(i); - mTOFDataHeader[i]->bytePayload = getSize(mTOFDataHeader[i],mUnion[i]); + mTOFDataHeader[i]->bytePayload = getSize(mTOFDataHeader[i], mUnion[i]); mDRMDataHeader[i]->eventWords = mTOFDataHeader[i]->bytePayload / 4; } - + // check that all digits were used - if(icurrentdigit < summary.size()){ + if (icurrentdigit < summary.size()) { LOG(ERROR) << "Not all digits are been used : only " << icurrentdigit << " of " << summary.size(); } } - for(int i=0;i < 72;i++){ + for (int i = 0; i < 72; i++) { // adjust RDH open with the size - mRDH[i]->memorySize = getSize(mRDH[i],mUnion[i]); + mRDH[i]->memorySize = getSize(mRDH[i], mUnion[i]); mRDH[i]->offsetToNext = mRDH[i]->memorySize; mIntegratedBytes[i] += mRDH[i]->offsetToNext; // add RDH close closeRDH(i); mIntegratedBytes[i] += mRDH[i]->offsetToNext; - mUnion[i] = reinterpret_cast(nextPage(mRDH[i],mRDH[i]->offsetToNext)); + mUnion[i] = reinterpret_cast(nextPage(mRDH[i], mRDH[i]->offsetToNext)); } mStartRun = false; @@ -368,7 +376,7 @@ bool Encoder::encode(std::vector> digitWindow, int t #ifdef VERBOSE int allBytes = mIntegratedAllBytes; - for(int i=0;i < 72;i++) + for (int i = 0; i < 72; i++) allBytes += mIntegratedBytes[i]; if (mVerbose && mIntegratedTime) std::cout << "-------- END ENCODE EVENT ------------------------------------------" @@ -381,31 +389,32 @@ bool Encoder::encode(std::vector> digitWindow, int t return false; } -void Encoder::openRDH(int icrate){ +void Encoder::openRDH(int icrate) +{ *mRDH[icrate] = mHBFSampler.createRDH(mIR); // word1 mRDH[icrate]->memorySize = mRDH[icrate]->headerSize; mRDH[icrate]->offsetToNext = mRDH[icrate]->memorySize; - mRDH[icrate]->linkID = icrate%NLINKSPERCRU; + mRDH[icrate]->linkID = icrate % NLINKSPERCRU; mRDH[icrate]->packetCounter = mNRDH[icrate]; - mRDH[icrate]->cruID = icrate/NCRU; + mRDH[icrate]->cruID = icrate / NCRU; mRDH[icrate]->feeId = icrate; // word2 mRDH[icrate]->triggerOrbit = 0; // to be checked mRDH[icrate]->heartbeatOrbit = mIR.orbit; - + // word4 mRDH[icrate]->triggerBC = 0; // to be checked (it should be constant) mRDH[icrate]->heartbeatBC = 0; - mRDH[icrate]->triggerType = o2::trigger::HB|o2::trigger::ORBIT; - if(mStartRun){ - // mRDH[icrate]->triggerType |= mIsContinuous ? o2::trigger::SOC : o2::trigger::SOT; - mRDH[icrate]->triggerType |= o2::trigger::SOT; + mRDH[icrate]->triggerType = o2::trigger::HB | o2::trigger::ORBIT; + if (mStartRun) { + // mRDH[icrate]->triggerType |= mIsContinuous ? o2::trigger::SOC : o2::trigger::SOT; + mRDH[icrate]->triggerType |= o2::trigger::SOT; } - if(!(mIR.orbit%256)) - mRDH[icrate]->triggerType |= o2::trigger::TF; + if (!(mIR.orbit % 256)) + mRDH[icrate]->triggerType |= o2::trigger::TF; // word6 mRDH[icrate]->pageCnt = 0; @@ -416,9 +425,10 @@ void Encoder::openRDH(int icrate){ mNRDH[icrate]++; } -void Encoder::addPage(int icrate){ +void Encoder::addPage(int icrate) +{ // adjust RDH open with the size - mRDH[icrate]->memorySize = getSize(mRDH[icrate],mUnion[icrate]); + mRDH[icrate]->memorySize = getSize(mRDH[icrate], mUnion[icrate]); mRDH[icrate]->offsetToNext = mRDH[icrate]->memorySize; mIntegratedBytes[icrate] += mRDH[icrate]->offsetToNext; @@ -427,59 +437,62 @@ void Encoder::addPage(int icrate){ int pgCnt = mRDH[icrate]->pageCnt + 1; // move to next RDH - mRDH[icrate] = reinterpret_cast(nextPage(mRDH[icrate],mRDH[icrate]->offsetToNext)); + mRDH[icrate] = reinterpret_cast(nextPage(mRDH[icrate], mRDH[icrate]->offsetToNext)); openRDH(icrate); mRDH[icrate]->pageCnt = pgCnt; } -void Encoder::closeRDH(int icrate){ +void Encoder::closeRDH(int icrate) +{ int pgCnt = mRDH[icrate]->pageCnt + 1; - mRDH[icrate] = reinterpret_cast(nextPage(mRDH[icrate],mRDH[icrate]->offsetToNext)); + mRDH[icrate] = reinterpret_cast(nextPage(mRDH[icrate], mRDH[icrate]->offsetToNext)); *mRDH[icrate] = mHBFSampler.createRDH(mIR); - mRDH[icrate]->stop = 0x1; + mRDH[icrate]->stop = 0x1; - // word1 + // word1 mRDH[icrate]->memorySize = mRDH[icrate]->headerSize; mRDH[icrate]->offsetToNext = mRDH[icrate]->memorySize; - mRDH[icrate]->linkID = icrate%NLINKSPERCRU; + mRDH[icrate]->linkID = icrate % NLINKSPERCRU; mRDH[icrate]->packetCounter = mNRDH[icrate]; - mRDH[icrate]->cruID = icrate/NCRU; + mRDH[icrate]->cruID = icrate / NCRU; mRDH[icrate]->feeId = icrate; // word2 mRDH[icrate]->triggerOrbit = 0; // to be checked mRDH[icrate]->heartbeatOrbit = mIR.orbit; - + // word4 mRDH[icrate]->triggerBC = 0; // to be checked (it should be constant) mRDH[icrate]->heartbeatBC = 0; - mRDH[icrate]->triggerType = o2::trigger::HB|o2::trigger::ORBIT; - if(mStartRun){ - // mRDH[icrate]->triggerType |= mIsContinuous ? o2::trigger::SOC : o2::trigger::SOT; - mRDH[icrate]->triggerType |= o2::trigger::SOT; + mRDH[icrate]->triggerType = o2::trigger::HB | o2::trigger::ORBIT; + if (mStartRun) { + // mRDH[icrate]->triggerType |= mIsContinuous ? o2::trigger::SOC : o2::trigger::SOT; + mRDH[icrate]->triggerType |= o2::trigger::SOT; } - if(!(mIR.orbit%256)) - mRDH[icrate]->triggerType |= o2::trigger::TF; + if (!(mIR.orbit % 256)) + mRDH[icrate]->triggerType |= o2::trigger::TF; // word6 mRDH[icrate]->pageCnt = pgCnt; mNRDH[icrate]++; } -char *Encoder::nextPage(void *current,int step){ - char *point = reinterpret_cast(current); +char* Encoder::nextPage(void* current, int step) +{ + char* point = reinterpret_cast(current); point += step; return point; } -int Encoder::getSize(void *first,void *last){ - char *in = reinterpret_cast(first); - char *out = reinterpret_cast(last); +int Encoder::getSize(void* first, void* last) +{ + char* in = reinterpret_cast(first); + char* out = reinterpret_cast(last); return int(out - in); } diff --git a/Detectors/TOF/simulation/include/TOFSimulation/Digitizer.h b/Detectors/TOF/simulation/include/TOFSimulation/Digitizer.h index 800df4c3286f0..c670a308a9865 100644 --- a/Detectors/TOF/simulation/include/TOFSimulation/Digitizer.h +++ b/Detectors/TOF/simulation/include/TOFSimulation/Digitizer.h @@ -30,7 +30,7 @@ class Digitizer : public WindowFiller using CalibApi = o2::tof::CalibTOFapi; public: - Digitizer(Int_t mode = 0) : WindowFiller(), mMode(mode) { init(); }; + Digitizer(Int_t mode = 0) : WindowFiller(), mMode(mode) { init(); }; ~Digitizer() = default; void init(); diff --git a/Detectors/TOF/simulation/src/Digitizer.cxx b/Detectors/TOF/simulation/src/Digitizer.cxx index 967e0964b80ce..5ddd87b16dad0 100644 --- a/Detectors/TOF/simulation/src/Digitizer.cxx +++ b/Detectors/TOF/simulation/src/Digitizer.cxx @@ -87,12 +87,12 @@ void Digitizer::process(const std::vector* hits, std::vector* di // hits array of TOF hits for a given simulated event // digits passed from external to be filled, in continuous readout mode we will push it on mDigitsPerTimeFrame vector of vectors of digits - Int_t readoutwindow = Int_t((mEventTime - Geo::BC_TIME* (Geo::OVERLAP_IN_BC+2))*Geo::READOUTWINDOW_INV); // event time shifted by 2 BC as safe margin before to change current readout window to account for decalibration + Int_t readoutwindow = Int_t((mEventTime - Geo::BC_TIME * (Geo::OVERLAP_IN_BC + 2)) * Geo::READOUTWINDOW_INV); // event time shifted by 2 BC as safe margin before to change current readout window to account for decalibration if (mContinuous && readoutwindow > mReadoutWindowCurrent) { // if we are moving in future readout windows flush previous ones (only for continuous readout mode) digits->clear(); - for(;mReadoutWindowCurrent < readoutwindow;) { // mReadoutWindowCurrent incremented in fillOutputContainer!!!! + for (; mReadoutWindowCurrent < readoutwindow;) { // mReadoutWindowCurrent incremented in fillOutputContainer!!!! fillOutputContainer(*digits); // fill all windows which are before (not yet stored) of the new current one checkIfReuseFutureDigits(); } // close loop readout window @@ -248,7 +248,7 @@ void Digitizer::addDigit(Int_t channel, UInt_t istrip, Double_t time, Float_t x, Float_t timewalkX = x * mTimeWalkeSlope; Float_t timewalkZ = (z - (padZfired - 0.5) * Geo::ZPAD) * mTimeWalkeSlope; - + if (border < 0) { // keep the effect onlu if hit out of pad border *= -1; Float_t extraTimeSmear = border * mTimeSlope; @@ -272,11 +272,10 @@ void Digitizer::addDigit(Int_t channel, UInt_t istrip, Double_t time, Float_t x, int tdc = int((time - Geo::BC_TIME_INPS * nbc) * Geo::NTDCBIN_PER_PS); // additional check to avoid very rare truncation - if(tdc < 0){ + if (tdc < 0) { nbc--; tdc += 1024; - } - else if(tdc >= 1024){ + } else if (tdc >= 1024) { nbc++; tdc -= 1024; } @@ -291,16 +290,16 @@ void Digitizer::addDigit(Int_t channel, UInt_t istrip, Double_t time, Float_t x, if (mContinuous) { isnext = nbc / Geo::BC_IN_WINDOW - mReadoutWindowCurrent; -// isnext = Int_t(time * 1E-3 * Geo::READOUTWINDOW_INV) - mReadoutWindowCurrent; // to be replaced with uncalibrated time + // isnext = Int_t(time * 1E-3 * Geo::READOUTWINDOW_INV) - mReadoutWindowCurrent; // to be replaced with uncalibrated time isIfOverlap = (nbc - Geo::OVERLAP_IN_BC) / Geo::BC_IN_WINDOW - mReadoutWindowCurrent; // isIfOverlap = Int_t((time - Geo::BC_TIME_INPS * Geo::OVERLAP_IN_BC) * 1E-3 * Geo::READOUTWINDOW_INV) - mReadoutWindowCurrent; // to be replaced with uncalibrated time; - if(isnext == isIfOverlap) isIfOverlap = -1; - else if(isnext < 0 && isIfOverlap >= 0){ + if (isnext == isIfOverlap) + isIfOverlap = -1; + else if (isnext < 0 && isIfOverlap >= 0) { isnext = isIfOverlap; isIfOverlap = -1; - } - else if (isnext >= MAXWINDOWS && isIfOverlap < MAXWINDOWS) { + } else if (isnext >= MAXWINDOWS && isIfOverlap < MAXWINDOWS) { isnext = isIfOverlap; isIfOverlap = MAXWINDOWS; } @@ -322,8 +321,7 @@ void Digitizer::addDigit(Int_t channel, UInt_t istrip, Double_t time, Float_t x, // fill temporary digits array insertDigitInFuture(channel, tdc, tot * Geo::NTOTBIN_PER_NS, nbc, lblCurrent); return; // don't fill if doesn't match any available readout window - } - else if(isIfOverlap == MAXWINDOWS){ // add in future digits but also in one of the current readout windows (beacuse of windows overlap) + } else if (isIfOverlap == MAXWINDOWS) { // add in future digits but also in one of the current readout windows (beacuse of windows overlap) lblCurrent = mFutureIevent.size(); mFutureIevent.push_back(mEventID); mFutureIsource.push_back(mSrcID); @@ -352,19 +350,21 @@ void Digitizer::addDigit(Int_t channel, UInt_t istrip, Double_t time, Float_t x, int eventcounter = mReadoutWindowCurrent + isnext; int hittimeTDC = (nbc - eventcounter * Geo::BC_IN_WINDOW) * 1024 + tdc; // time in TDC bin within the TOF WINDOW - if(hittimeTDC < 0) - LOG(ERROR) << "1) Negative hit " << hittimeTDC << ", something went wrong in filling readout window: isnext=" << isnext << ", isIfOverlap=" << isIfOverlap; + if (hittimeTDC < 0) + LOG(ERROR) << "1) Negative hit " << hittimeTDC << ", something went wrong in filling readout window: isnext=" << isnext << ", isIfOverlap=" << isIfOverlap; else fillDigitsInStrip(strips, mcTruthContainer, channel, tdc, tot, nbc, istrip, trackID, mEventID, mSrcID); - if(isIfOverlap > -1 && isIfOverlap < MAXWINDOWS){ // fill also a second readout window because of the overlap - if(!isIfOverlap) strips = mStripsCurrent; - else strips = mStripsNext[isIfOverlap - 1]; + if (isIfOverlap > -1 && isIfOverlap < MAXWINDOWS) { // fill also a second readout window because of the overlap + if (!isIfOverlap) + strips = mStripsCurrent; + else + strips = mStripsNext[isIfOverlap - 1]; int eventcounter = mReadoutWindowCurrent + isIfOverlap; int hittimeTDC = (nbc - eventcounter * Geo::BC_IN_WINDOW) * 1024 + tdc; // time in TDC bin within the TOF WINDOW - if(hittimeTDC < 0) - LOG(ERROR) << "2) Negative hit " << hittimeTDC << ", something went wrong in filling readout window: isnext=" << isnext << ", isIfOverlap=" << isIfOverlap; + if (hittimeTDC < 0) + LOG(ERROR) << "2) Negative hit " << hittimeTDC << ", something went wrong in filling readout window: isnext=" << isnext << ", isIfOverlap=" << isIfOverlap; else fillDigitsInStrip(strips, mcTruthContainer, channel, tdc, tot, nbc, istrip, trackID, mEventID, mSrcID); } @@ -789,7 +789,7 @@ void Digitizer::fillOutputContainer(std::vector& digits) // printf("%i) # TOF digits = %lu (%p)\n", mIcurrentReadoutWindow, digits.size(), mStripsCurrent); int first = mDigitsPerTimeFrame.size(); int ne = digits.size(); - ReadoutWindowData info(first,ne); + ReadoutWindowData info(first, ne); mDigitsPerTimeFrame.insert(mDigitsPerTimeFrame.end(), digits.begin(), digits.end()); mReadoutWindowData.push_back(info); } @@ -837,7 +837,7 @@ void Digitizer::flushOutputContainer(std::vector& digits) fillOutputContainer(digits); // fill all windows which are before (not yet stored) of the new current one checkIfReuseFutureDigits(); } - + while (mFutureDigits.size()) { fillOutputContainer(digits); // fill all windows which are before (not yet stored) of the new current one checkIfReuseFutureDigits(); @@ -846,7 +846,6 @@ void Digitizer::flushOutputContainer(std::vector& digits) for (Int_t i = 0; i < MAXWINDOWS; i++) { fillOutputContainer(digits); // fill last readout windows } - } // clear vector of label in future @@ -864,33 +863,33 @@ void Digitizer::checkIfReuseFutureDigits() for (std::vector::reverse_iterator digit = mFutureDigits.rbegin(); digit != mFutureDigits.rend(); ++digit) { - if(digit->getBC() > bclimit) break; + if (digit->getBC() > bclimit) + break; - double timestamp = digit->getBC() * Geo::BC_TIME + digit->getTDC() * Geo::TDCBIN * 1E-3; // in ns + double timestamp = digit->getBC() * Geo::BC_TIME + digit->getTDC() * Geo::TDCBIN * 1E-3; // in ns int isnext = Int_t(timestamp * Geo::READOUTWINDOW_INV) - (mReadoutWindowCurrent + 1); // to be replaced with uncalibrated time - int isIfOverlap = Int_t((timestamp - Geo::BC_TIME_INPS * Geo::OVERLAP_IN_BC * 1E-3) * Geo::READOUTWINDOW_INV) - (mReadoutWindowCurrent+1); // to be replaced with uncalibrated time; - - if(isnext == isIfOverlap) isIfOverlap = -1; - else if(isnext < 0 && isIfOverlap >= 0){ + int isIfOverlap = Int_t((timestamp - Geo::BC_TIME_INPS * Geo::OVERLAP_IN_BC * 1E-3) * Geo::READOUTWINDOW_INV) - (mReadoutWindowCurrent + 1); // to be replaced with uncalibrated time; + + if (isnext == isIfOverlap) + isIfOverlap = -1; + else if (isnext < 0 && isIfOverlap >= 0) { isnext = isIfOverlap; isIfOverlap = -1; - } - else if(isnext < 0 && isIfOverlap >= 0){ + } else if (isnext < 0 && isIfOverlap >= 0) { isnext = isIfOverlap; isIfOverlap = -1; - } - else if (isnext >= MAXWINDOWS && isIfOverlap < MAXWINDOWS) { + } else if (isnext >= MAXWINDOWS && isIfOverlap < MAXWINDOWS) { isnext = isIfOverlap; isIfOverlap = MAXWINDOWS; } - if (isnext < 0){ // we jump too ahead in future, digit will be not stored + if (isnext < 0) { // we jump too ahead in future, digit will be not stored LOG(INFO) << "Digit lost because we jump too ahead in future. Current RO window=" << isnext << "\n"; // remove digit from array in the future int labelremoved = digit->getLabel(); mFutureDigits.erase(mFutureDigits.begin() + idigit); - + /* NOT TO REMOVE LABELS TO SAVE CPU TIME (clear of vector when flushing) // remove also the element from the buffers mFutureItrackID.erase(mFutureItrackID.begin() + digit->getLabel()); @@ -909,27 +908,27 @@ void Digitizer::checkIfReuseFutureDigits() continue; } - + if (isnext < MAXWINDOWS - 1) { // move from digit buffer array to the proper window std::vector* strips = mStripsCurrent; o2::dataformats::MCTruthContainer* mcTruthContainer = mMCTruthContainerCurrent; - + if (isnext) { - strips = mStripsNext[isnext - 1]; - mcTruthContainer = mMCTruthContainerNext[isnext - 1]; + strips = mStripsNext[isnext - 1]; + mcTruthContainer = mMCTruthContainerNext[isnext - 1]; } - + int trackID = mFutureItrackID[digit->getLabel()]; int sourceID = mFutureIsource[digit->getLabel()]; int eventID = mFutureIevent[digit->getLabel()]; fillDigitsInStrip(strips, mcTruthContainer, digit->getChannel(), digit->getTDC(), digit->getTOT(), digit->getBC(), digit->getChannel() / Geo::NPADS, trackID, eventID, sourceID); - - if(isIfOverlap < 0){ // if there is no overlap candidate - // remove digit from array in the future - int labelremoved = digit->getLabel(); - mFutureDigits.erase(mFutureDigits.begin() + idigit); - - /* NOT TO REMOVE LABELS TO SAVE CPU TIME (clear of vector when flushing) + + if (isIfOverlap < 0) { // if there is no overlap candidate + // remove digit from array in the future + int labelremoved = digit->getLabel(); + mFutureDigits.erase(mFutureDigits.begin() + idigit); + + /* NOT TO REMOVE LABELS TO SAVE CPU TIME (clear of vector when flushing) // remove also the element from the buffers mFutureItrackID.erase(mFutureItrackID.begin() + digit->getLabel()); mFutureIsource.erase(mFutureIsource.begin() + digit->getLabel()); @@ -943,8 +942,7 @@ void Digitizer::checkIfReuseFutureDigits() } */ } - } - else{ + } else { bclimit = digit->getBC(); } diff --git a/Detectors/TOF/workflow/include/TOFWorkflow/RawReaderSpec.h b/Detectors/TOF/workflow/include/TOFWorkflow/RawReaderSpec.h index 26f86623a2c7f..730db07c50180 100644 --- a/Detectors/TOF/workflow/include/TOFWorkflow/RawReaderSpec.h +++ b/Detectors/TOF/workflow/include/TOFWorkflow/RawReaderSpec.h @@ -17,8 +17,8 @@ #include "Framework/DataProcessorSpec.h" #include "Framework/Task.h" -#include "TOFReconstruction/Decoder.h" -#include "TOFBase/Digit.h" +#include "TOFReconstruction/Decoder.h" +#include "TOFBase/Digit.h" #include "SimulationDataFormat/MCCompLabel.h" #include "SimulationDataFormat/MCTruthContainer.h" diff --git a/Detectors/TOF/workflow/include/TOFWorkflow/TOFDigitWriterSpec.h b/Detectors/TOF/workflow/include/TOFWorkflow/TOFDigitWriterSpec.h index 4c1147105ec68..b62ae8272d642 100644 --- a/Detectors/TOF/workflow/include/TOFWorkflow/TOFDigitWriterSpec.h +++ b/Detectors/TOF/workflow/include/TOFWorkflow/TOFDigitWriterSpec.h @@ -18,7 +18,7 @@ namespace o2 namespace tof { -o2::framework::DataProcessorSpec getTOFDigitWriterSpec(bool useMC=1); +o2::framework::DataProcessorSpec getTOFDigitWriterSpec(bool useMC = 1); } // end namespace tof } // end namespace o2 diff --git a/Detectors/TOF/workflow/include/TOFWorkflow/TOFRawWriterSpec.h b/Detectors/TOF/workflow/include/TOFWorkflow/TOFRawWriterSpec.h index 87d456a3188ef..e878e3a9908e1 100644 --- a/Detectors/TOF/workflow/include/TOFWorkflow/TOFRawWriterSpec.h +++ b/Detectors/TOF/workflow/include/TOFWorkflow/TOFRawWriterSpec.h @@ -18,7 +18,7 @@ #include "Framework/DataProcessorSpec.h" #include "Framework/Task.h" #include -#include "TOFReconstruction/Encoder.h" +#include "TOFReconstruction/Encoder.h" using namespace o2::framework; diff --git a/Detectors/TOF/workflow/src/RawReaderSpec.cxx b/Detectors/TOF/workflow/src/RawReaderSpec.cxx index de432fde4ea12..f977bf650134b 100644 --- a/Detectors/TOF/workflow/src/RawReaderSpec.cxx +++ b/Detectors/TOF/workflow/src/RawReaderSpec.cxx @@ -19,7 +19,7 @@ #include "TOFWorkflow/RawReaderSpec.h" #include "DataFormatsParameters/GRPObject.h" #include "TOFBase/Geo.h" -#include +#include using namespace o2::framework; using namespace o2::tof; @@ -35,7 +35,7 @@ void RawReader::init(InitContext& ic) mFilename = ic.options().get("tof-raw-infile"); mState = 1; -/* + /* std::ifstream f(mFilename.c_str(), std::ifstream::in); if(f.good()){ @@ -72,15 +72,14 @@ void RawReader::run(ProcessingContext& pc) decoder.decode(); printf("end decoding raw\n"); - std::vector *alldigits = decoder.getDigitPerTimeFrame(); - std::vector *row = decoder.getReadoutWindowData(); + std::vector* alldigits = decoder.getDigitPerTimeFrame(); + std::vector* row = decoder.getReadoutWindowData(); - int n_tof_window=row->size(); - int n_orbits=n_tof_window/3; + int n_tof_window = row->size(); + int n_orbits = n_tof_window / 3; int digit_size = alldigits->size(); - - LOG(INFO) << "TOF: N tof window decoded = " << n_tof_window << "(orbits = " << n_orbits << ") with " << digit_size<< " digits"; + LOG(INFO) << "TOF: N tof window decoded = " << n_tof_window << "(orbits = " << n_orbits << ") with " << digit_size << " digits"; // add digits in the output snapshot pc.outputs().snapshot(Output{"TOF", "DIGITS", 0, Lifetime::Timeframe}, *alldigits); diff --git a/Detectors/TOF/workflow/src/TOFDigitWriterSpec.cxx b/Detectors/TOF/workflow/src/TOFDigitWriterSpec.cxx index fdcd6f7e46a13..d567fa3411ec7 100644 --- a/Detectors/TOF/workflow/src/TOFDigitWriterSpec.cxx +++ b/Detectors/TOF/workflow/src/TOFDigitWriterSpec.cxx @@ -89,11 +89,11 @@ DataProcessorSpec getTOFDigitWriterSpec(bool useMC) brRow->Fill(); // retrieve labels from the input - if(useMC){ + if (useMC) { auto labeldata = pc.inputs().get>*>("tofdigitlabels"); -// for (int i = 0; i < labeldata->size(); i++) { -// LOG(INFO) << "TOF GOT " << labeldata->at(i).getNElements() << " LABELS "; -// } + // for (int i = 0; i < labeldata->size(); i++) { + // LOG(INFO) << "TOF GOT " << labeldata->at(i).getNElements() << " LABELS "; + // } auto labeldataraw = labeldata.get(); // connect this to a particular branch auto labelbr = getOrMakeBranch(*outputtree.get(), "TOFDigitMCTruth", &labeldataraw); diff --git a/Detectors/TOF/workflow/src/TOFRawWriterSpec.cxx b/Detectors/TOF/workflow/src/TOFRawWriterSpec.cxx index 4ac625a88b6d1..3d43bb30838a8 100644 --- a/Detectors/TOF/workflow/src/TOFRawWriterSpec.cxx +++ b/Detectors/TOF/workflow/src/TOFRawWriterSpec.cxx @@ -39,7 +39,7 @@ void RawWriter::run(ProcessingContext& pc) int nwindow = row->size(); LOG(INFO) << "Encoding " << nwindow << " TOF readout windows"; - int cache = 1024*1024; // 1 MB + int cache = 1024 * 1024; // 1 MB int verbosity = 0; o2::tof::raw::Encoder encoder; @@ -49,33 +49,33 @@ void RawWriter::run(ProcessingContext& pc) encoder.alloc(cache); int nwindowperorbit = Geo::NWINDOW_IN_ORBIT; - int nwindowintimeframe = 256*nwindowperorbit; - + int nwindowintimeframe = 256 * nwindowperorbit; + std::vector emptyWindow; std::vector digitRO; std::vector> digitWindows; - for(int i=0;i < nwindowintimeframe;i+=nwindowperorbit){ // encode 3 tof windows (1 orbit) - if(verbosity) printf("----------\nwindow = %d - %d\n----------\n",i,i+nwindowperorbit-1); + for (int i = 0; i < nwindowintimeframe; i += nwindowperorbit) { // encode 3 tof windows (1 orbit) + if (verbosity) + printf("----------\nwindow = %d - %d\n----------\n", i, i + nwindowperorbit - 1); digitWindows.clear(); // push all windows in the current orbit in the structure - for(int j=i;j < i+nwindowperorbit;j++){ - if(j < nwindow){ - digitRO.clear(); - for(int id=0; id < row->at(j).size(); id++) - digitRO.push_back((*digits)[row->at(j).first() + id]); - digitWindows.push_back(digitRO); - } - else{ - digitWindows.push_back(emptyWindow); + for (int j = i; j < i + nwindowperorbit; j++) { + if (j < nwindow) { + digitRO.clear(); + for (int id = 0; id < row->at(j).size(); id++) + digitRO.push_back((*digits)[row->at(j).first() + id]); + digitWindows.push_back(digitRO); + } else { + digitWindows.push_back(emptyWindow); } } - encoder.encode(digitWindows,i); + encoder.encode(digitWindows, i); } encoder.flush(); diff --git a/Steer/DigitizerWorkflow/src/TOFDigitizerSpec.cxx b/Steer/DigitizerWorkflow/src/TOFDigitizerSpec.cxx index 5732ed1e8a322..4d09f2f877855 100644 --- a/Steer/DigitizerWorkflow/src/TOFDigitizerSpec.cxx +++ b/Steer/DigitizerWorkflow/src/TOFDigitizerSpec.cxx @@ -139,7 +139,7 @@ DataProcessorSpec getTOFDigitizerSpec(int channel, bool useCCDB) hits.clear(); retrieveHits(*simChains.get(), "TOFHit", part.sourceID, part.entryID, &hits); -// LOG(INFO) << "For collision " << collID << " eventID " << part.entryID << " found " << hits.size() << " hits "; + // LOG(INFO) << "For collision " << collID << " eventID " << part.entryID << " found " << hits.size() << " hits "; // call actual digitization procedure labels->clear(); @@ -148,7 +148,7 @@ DataProcessorSpec getTOFDigitizerSpec(int channel, bool useCCDB) // copy digits into accumulator //std::copy(digits->begin(), digits->end(), std::back_inserter(*digitsAccum.get())); //labelAccum.mergeAtBack(*labels); -// LOG(INFO) << "Have " << digits->size() << " digits "; + // LOG(INFO) << "Have " << digits->size() << " digits "; } } if (digitizer->isContinuous()) { @@ -223,7 +223,7 @@ DataProcessorSpec getTOFDigitizerSpec(int channel, bool useCCDB) "TOFDigitizer", inputs, Outputs{OutputSpec{"TOF", "DIGITS", 0, Lifetime::Timeframe}, - OutputSpec{"TOF", "READOUTWINDOW", 0, Lifetime::Timeframe}, + OutputSpec{"TOF", "READOUTWINDOW", 0, Lifetime::Timeframe}, OutputSpec{"TOF", "DIGITSMCTR", 0, Lifetime::Timeframe}, OutputSpec{"TOF", "ROMode", 0, Lifetime::Timeframe}}, AlgorithmSpec{initIt}, diff --git a/macro/compareTOFDigits.C b/macro/compareTOFDigits.C index 9f02c1f3d78f8..acbcd6d122f2d 100644 --- a/macro/compareTOFDigits.C +++ b/macro/compareTOFDigits.C @@ -20,16 +20,17 @@ #endif -bool compareTOFDigits(std::string inpName1 = "tofdigits.root",std::string inpName2 = "tofdigitsFromRaw.root"){ - bool status = true; +bool compareTOFDigits(std::string inpName1 = "tofdigits.root", std::string inpName2 = "tofdigitsFromRaw.root") +{ + bool status = true; int ngood = 0; int nfake = 0; - TFile *f1 = TFile::Open(inpName1.c_str()); - TFile *f2 = TFile::Open(inpName2.c_str()); + TFile* f1 = TFile::Open(inpName1.c_str()); + TFile* f2 = TFile::Open(inpName2.c_str()); - TTree *t1 = (TTree *) f1->Get("o2sim"); - TTree *t2 = (TTree *) f2->Get("o2sim"); + TTree* t1 = (TTree*)f1->Get("o2sim"); + TTree* t2 = (TTree*)f2->Get("o2sim"); std::vector digits1, *pDigits1 = &digits1; std::vector row1, *pRow1 = &row1; @@ -46,21 +47,22 @@ bool compareTOFDigits(std::string inpName1 = "tofdigits.root",std::string inpNam int nro1 = row1.size(); int nro2 = row2.size(); + while (row1[nro1 - 1].size() == 0 && nro1 > 0) + nro1--; + while (row2[nro2 - 1].size() == 0 && nro2 > 0) + nro2--; - while(row1[nro1-1].size() == 0 && nro1>0) nro1--; - while(row2[nro2-1].size() == 0 && nro2>0) nro2--; - - if(nro1 != nro2){ - printf("N readout windows different!!!! %d != %d \n",nro1,nro2); + if (nro1 != nro2) { + printf("N readout windows different!!!! %d != %d \n", nro1, nro2); status = false; return status; } - printf("N readout windows = %d\n",nro1); + printf("N readout windows = %d\n", nro1); - for(int i=0; i < nro1; i++){ - if(row1[i].size() != row2[i].size()){ - printf("Readout window %d) different number of digits in this window!!!! %d != %d \n",i,int(row1[i].size()),int(row2[i].size())); + for (int i = 0; i < nro1; i++) { + if (row1[i].size() != row2[i].size()) { + printf("Readout window %d) different number of digits in this window!!!! %d != %d \n", i, int(row1[i].size()), int(row2[i].size())); status = false; return status; } @@ -68,34 +70,33 @@ bool compareTOFDigits(std::string inpName1 = "tofdigits.root",std::string inpNam auto digitsRO1 = row1.at(i).getBunchChannelData(digits1); auto digitsRO2 = row2.at(i).getBunchChannelData(digits2); - for(int j=0; j < row1[i].size();j++){ + for (int j = 0; j < row1[i].size(); j++) { bool digitstatus = true; - if(digitsRO1[j].getChannel() != digitsRO2[j].getChannel()){ - printf("RO %d - Digit %d/%d) Different channel number %d != %d \n",i,j,row1[i].size(),digitsRO1[j].getChannel(), digitsRO2[j].getChannel()); - digitstatus = false; - } - - if(digitsRO1[j].getTDC() != digitsRO2[j].getTDC()){ - printf("RO %d - Digit %d/%d) Different TDCs %d != %d \n",i,j,row1[i].size(),digitsRO1[j].getTDC(), digitsRO2[j].getTDC()); - digitstatus = false; + if (digitsRO1[j].getChannel() != digitsRO2[j].getChannel()) { + printf("RO %d - Digit %d/%d) Different channel number %d != %d \n", i, j, row1[i].size(), digitsRO1[j].getChannel(), digitsRO2[j].getChannel()); + digitstatus = false; } - if(digitsRO1[j].getBC() != digitsRO2[j].getBC()){ - printf("RO %d - Digit %d/%d) Different BCs %d != %d \n",i,j,row1[i].size(),digitsRO1[j].getBC(), digitsRO2[j].getBC()); - digitstatus = false; + if (digitsRO1[j].getTDC() != digitsRO2[j].getTDC()) { + printf("RO %d - Digit %d/%d) Different TDCs %d != %d \n", i, j, row1[i].size(), digitsRO1[j].getTDC(), digitsRO2[j].getTDC()); + digitstatus = false; } - if(! digitstatus){ - status = false; - nfake++; + if (digitsRO1[j].getBC() != digitsRO2[j].getBC()) { + printf("RO %d - Digit %d/%d) Different BCs %d != %d \n", i, j, row1[i].size(), digitsRO1[j].getBC(), digitsRO2[j].getBC()); + digitstatus = false; } - else - ngood++; + + if (!digitstatus) { + status = false; + nfake++; + } else + ngood++; } } - printf("Digits good = %d\n",ngood); - printf("Digits fake = %d\n",nfake); + printf("Digits good = %d\n", ngood); + printf("Digits fake = %d\n", nfake); return status; } diff --git a/macro/run_clus_tof.C b/macro/run_clus_tof.C index 1ecb0d1ce90b4..2cbb039499d95 100644 --- a/macro/run_clus_tof.C +++ b/macro/run_clus_tof.C @@ -51,12 +51,12 @@ void run_clus_tof(std::string outputfile = "tofclusters.root", std::string input o2::tof::DigitDataReader reader; ///< Digit reader // Load digits - TFile *file = new TFile(inputfile.c_str(), "OLD"); + TFile* file = new TFile(inputfile.c_str(), "OLD"); std::unique_ptr treeDig((TTree*)file->Get("o2sim")); if (treeDig) { treeDig->SetBranchAddress("TOFDigit", &mPdigits); treeDig->SetBranchAddress("TOFReadoutWindow", &mProw); - + if (isMC) { treeDig->SetBranchAddress("TOFDigitMCTruth", &mPlabels); } @@ -69,7 +69,7 @@ void run_clus_tof(std::string outputfile = "tofclusters.root", std::string input // calibration objects set to zero lhcPhaseObj.addLHCphase(0, 0); lhcPhaseObj.addLHCphase(2000000000, 0); - + for (int ich = 0; ich < o2::dataformats::CalibTimeSlewingParamTOF::NCHANNELS; ich++) { channelCalibObj.addTimeSlewingInfo(ich, 0, 0); int sector = ich / o2::dataformats::CalibTimeSlewingParamTOF::NCHANNELXSECTOR; @@ -77,34 +77,35 @@ void run_clus_tof(std::string outputfile = "tofclusters.root", std::string input channelCalibObj.setFractionUnderPeak(sector, channelInSector, 1); } o2::tof::CalibTOFapi calibapi(long(0), &lhcPhaseObj, &channelCalibObj); - + o2::tof::Clusterer clusterer; - std::vector clustersArray, *pClustersArray=&clustersArray; + std::vector clustersArray, *pClustersArray = &clustersArray; o2::dataformats::MCTruthContainer clsLabels, *pClsLabels = &clsLabels; clusterer.setCalibApi(&calibapi); - if(isMC) clusterer.setMCTruthContainer(pClsLabels); - + if (isMC) + clusterer.setMCTruthContainer(pClsLabels); + for (int i = 0; i < mRow.size(); i++) { printf("# TOF readout window for clusterization = %d/%d (N digits = %d)\n", i, int(mRow.size()), int(mRow.at(i).size())); auto digitsRO = mRow.at(i).getBunchChannelData(mDigits); - + reader.setDigitArray(&digitsRO); - + if (isMC) { clusterer.process(reader, clustersArray, &(mPlabels->at(i))); } else clusterer.process(reader, clustersArray, nullptr); } - + LOG(INFO) << "TOF CLUSTERER : TRANSFORMED " << mDigits.size() - << " DIGITS TO " << clustersArray.size() << " CLUSTERS"; - - - TFile *fout = new TFile(outputfile.c_str(),"RECREATE"); - TTree *tout = new TTree("o2sim","o2sim"); - tout->Branch("TOFCluster",&pClustersArray); - if(isMC) tout->Branch("TOFClusterMCTruth",&pClsLabels); + << " DIGITS TO " << clustersArray.size() << " CLUSTERS"; + + TFile* fout = new TFile(outputfile.c_str(), "RECREATE"); + TTree* tout = new TTree("o2sim", "o2sim"); + tout->Branch("TOFCluster", &pClustersArray); + if (isMC) + tout->Branch("TOFClusterMCTruth", &pClsLabels); tout->Fill(); tout->Write(); - fout->Close(); + fout->Close(); } diff --git a/macro/run_cmp2digit_tof.C b/macro/run_cmp2digit_tof.C index a9a6073ed6354..e59c3122f9d63 100644 --- a/macro/run_cmp2digit_tof.C +++ b/macro/run_cmp2digit_tof.C @@ -24,9 +24,9 @@ // example of TOF raw data encoding from digits -void run_cmp2digit_tof(std::string inName = "cmptof.bin", // name of the output binary file - std::string inpName = "tofdigitsFromRaw.root", // name of the input TOF digits - int verbosity = 0) // memory caching in Byte +void run_cmp2digit_tof(std::string inName = "cmptof.bin", // name of the output binary file + std::string inpName = "tofdigitsFromRaw.root", // name of the input TOF digits + int verbosity = 0) // memory caching in Byte { o2::tof::compressed::Decoder decoder; @@ -35,21 +35,20 @@ void run_cmp2digit_tof(std::string inName = "cmptof.bin", // name of the out decoder.decode(); - std::vector *alldigits = decoder.getDigitPerTimeFrame(); - printf("N digits -> %d\n",int(alldigits->size())); + std::vector* alldigits = decoder.getDigitPerTimeFrame(); + printf("N digits -> %d\n", int(alldigits->size())); - std::vector *row = decoder.getReadoutWindowData(); - printf("N readout window -> %d\n",int(row->size())); + std::vector* row = decoder.getReadoutWindowData(); + printf("N readout window -> %d\n", int(row->size())); - int n_tof_window=row->size(); - int n_orbits=n_tof_window/3; + int n_tof_window = row->size(); + int n_orbits = n_tof_window / 3; int digit_size = alldigits->size(); - // LOG(INFO) << "TOF: N tof window decoded = " << n_tof_window << "(orbits = " << n_orbits << ") with " << digit_size<< " digits"; - printf("Write %s\n",inpName.c_str()); - TFile* f = new TFile(inpName.c_str(),"RECREATE"); - TTree* t = new TTree("o2sim","o2sim"); + printf("Write %s\n", inpName.c_str()); + TFile* f = new TFile(inpName.c_str(), "RECREATE"); + TTree* t = new TTree("o2sim", "o2sim"); t->Branch("TOFDigit", &alldigits); t->Branch("TOFReadoutWindow", &row); t->Fill(); diff --git a/macro/run_digi2raw_tof.C b/macro/run_digi2raw_tof.C index 257212eadfb63..fd2e8f8f8c0b4 100644 --- a/macro/run_digi2raw_tof.C +++ b/macro/run_digi2raw_tof.C @@ -26,7 +26,7 @@ void run_digi2raw_tof(std::string outName = "rawtof.bin", // name of the output binary file std::string inpName = "tofdigits.root", // name of the input TOF digits int verbosity = 0, // set verbosity - int cache = 1024*1024) // memory caching in Byte + int cache = 1024 * 1024) // memory caching in Byte { TFile* f = new TFile(inpName.c_str()); TTree* t = (TTree*)f->Get("o2sim"); @@ -41,10 +41,10 @@ void run_digi2raw_tof(std::string outName = "rawtof.bin", // name of the out int nwindow = row.size(); int ndigits = digits.size(); - printf("Encoding %d tof window with %d digits\n", nwindow,ndigits); + printf("Encoding %d tof window with %d digits\n", nwindow, ndigits); int nwindowperorbit = o2::tof::Geo::NWINDOW_IN_ORBIT; - int nwindowintimeframe = 256*nwindowperorbit; + int nwindowintimeframe = 256 * nwindowperorbit; o2::tof::raw::Encoder encoder; encoder.setVerbose(verbosity); @@ -60,19 +60,17 @@ void run_digi2raw_tof(std::string outName = "rawtof.bin", // name of the out digitWindows.clear(); // push all windows in the current orbit in the structure - for(int j=i;j < i+nwindowperorbit;j++){ - if(j < nwindow){ - digitRO.clear(); - for(int id=0; id < row.at(j).size(); id++) - digitRO.push_back(digits[row.at(j).first() + id]); - digitWindows.push_back(digitRO); - } - else{ - digitWindows.push_back(emptyWindow); + for (int j = i; j < i + nwindowperorbit; j++) { + if (j < nwindow) { + digitRO.clear(); + for (int id = 0; id < row.at(j).size(); id++) + digitRO.push_back(digits[row.at(j).first() + id]); + digitWindows.push_back(digitRO); + } else { + digitWindows.push_back(emptyWindow); } } - if (verbosity) printf("----------\nwindow = %d\n----------\n", i); encoder.encode(digitWindows, i);