Belle II Software development
PostRawCOPPERFormat_latest Class Reference

The Raw COPPER class ver. More...

#include <PostRawCOPPERFormat_latest.h>

Inheritance diagram for PostRawCOPPERFormat_latest:
RawCOPPERFormat_latest RawCOPPERFormat RawDataBlockFormat

Public Types

enum  {
  POS_B2LHSLB_MAGIC = 0 ,
  SIZE_B2LHSLB_HEADER = 1
}
 
enum  {
  POS_B2L_CTIME = 0 ,
  SIZE_B2LFEE_HEADER = 1
}
 
enum  {
  POS_B2LFEE_ERRCNT_CRC16 = 0 ,
  SIZE_B2LFEE_TRAILER = 1
}
 
enum  {
  POS_B2LHSLB_TRL_MAGIC = 0 ,
  SIZE_B2LHSLB_TRAILER = 1
}
 
enum  { DATA_FORMAT_VERSION = 4 }
 Format version number. More...
 
enum  {
  SIZE_COPPER_DRIVER_HEADER = 0 ,
  SIZE_COPPER_DRIVER_TRAILER = 0
}
 
enum  { SIZE_COPPER_HEADER = 0 }
 
enum  { SIZE_COPPER_TRAILER = 0 }
 
enum  { ONLINE_REMOVED_DATA = 15 }
 
enum  {
  POS_NWORDS = 0 ,
  POS_NODE_ID = 6
}
 
enum  {
  POS_FTSW_ID_OLD = 5 ,
  TEMP_POS_NWORDS_HEADER = 1 ,
  OLD_FTSW_NWORDS_HEADER = 6
}
 

Public Member Functions

 PostRawCOPPERFormat_latest ()
 Default constructor.
 
virtual ~PostRawCOPPERFormat_latest ()
 Constructor using existing pointer to raw data buffer.
 
int GetDetectorNwords (int n, int finesse_num) OVERRIDE_CPP17
 get Detector buffer length
 
unsigned int GetCOPPERCounter (int n) OVERRIDE_CPP17
 get posistion of COPPER block in unit of word
 
virtual int * GetExpRunSubrunBuf (int n) OVERRIDE_CPP17
 get b2l block from "FEE b2link header"
 
virtual unsigned int GetB2LFEE32bitEventNumber (int n) OVERRIDE_CPP17
 get b2l block from "FEE b2link header"
 
unsigned int GetMagicDriverHeader (int n) OVERRIDE_CPP17
 get magic word of COPPER driver header
 
unsigned int GetMagicFPGAHeader (int n) OVERRIDE_CPP17
 get magic word of COPPER FPGA header
 
unsigned int GetMagicFPGATrailer (int n) OVERRIDE_CPP17
 get magic word of COPPER FPGA trailer
 
unsigned int GetMagicDriverTrailer (int n) OVERRIDE_CPP17
 get magic word of COPPER driver trailer
 
unsigned int GetTrailerChksum (int n) OVERRIDE_CPP17
 Get checksum in RawTrailer.
 
int GetEventCRC16Value (int n, int finesse_num) OVERRIDE_CPP17
 Get CRC16 value for an event.
 
bool CheckCOPPERMagic (int n) OVERRIDE_CPP17
 Check if COPPER Magic words are correct.
 
unsigned int FillTopBlockRawHeader (unsigned int m_node_id, unsigned int prev_eve32, unsigned int prev_exprunsubrun_no, unsigned int *cur_exprunsubrun_no) OVERRIDE_CPP17
 should be called by DeSerializerCOPPER.cc and fill contents in RawHeader
 
unsigned int GetDriverChkSum (int n) OVERRIDE_CPP17
 read COPPER driver's checksum value
 
unsigned int CalcDriverChkSum (int n) OVERRIDE_CPP17
 calc COPPER driver's checksum value
 
void CheckData (int n, unsigned int prev_evenum, unsigned int *cur_evenum, unsigned int prev_copper_ctr, unsigned int *cur_copper_ctr, unsigned int prev_exprunsubrun_no, unsigned int *cur_exprunsubrun_no) OVERRIDE_CPP17
 check data contents
 
void CheckUtimeCtimeTRGType (int n) OVERRIDE_CPP17
 check data contents
 
int CheckB2LHSLBMagicWords (int *finesse_buf, int finesse_nwords)
 check magic words
 
int CheckCRC16 (int n, int finesse_num)
 check magic words
 
int * PackDetectorBuf (int *packed_buf_nwords, int *detector_buf_1st, int nwords_1st, int *detector_buf_2nd, int nwords_2nd, int *detector_buf_3rd, int nwords_3rd, int *detector_buf_4th, int nwords_4th, RawCOPPERPackerInfo rawcprpacker_info) OVERRIDE_CPP17
 Pack data (format ver. = -1 -> Select the latest format version)
 
int * PackDetectorBuf (int *packed_buf_nwords, int *const(&detector_buf_ch)[MAX_PCIE40_CH], int const(&nwords_ch)[MAX_PCIE40_CH], RawCOPPERPackerInfo rawcpr_info) OVERRIDE_CPP17
 Pack data for PCIe40 data-format.
 
int * GetDetectorBuffer (int n, int finesse_num) OVERRIDE_CPP17
 Get a pointer to detector buffer.
 
bool CheckOnlineRemovedDataBit (int n, int finesse_num) OVERRIDE_CPP17
 check if this channel's data has been removed on a readout PC for CDC online "masking" True : data contents was removed on a readout PC
 
int Get1stDetectorNwords (int n) OVERRIDE_CPP17 FINAL_CPP17
 get Detector buffer length of slot A
 
int Get2ndDetectorNwords (int n) OVERRIDE_CPP17 FINAL_CPP17
 get Detector buffer length of slot B
 
int Get3rdDetectorNwords (int n) OVERRIDE_CPP17 FINAL_CPP17
 get Detector buffer length of slot C
 
int Get4thDetectorNwords (int n) OVERRIDE_CPP17 FINAL_CPP17
 get Detector buffer length of slot D
 
int * Get1stDetectorBuffer (int n) OVERRIDE_CPP17 FINAL_CPP17
 get Detector buffer of slot A
 
int * Get2ndDetectorBuffer (int n) OVERRIDE_CPP17 FINAL_CPP17
 get Detector Buffer of slot B
 
int * Get3rdDetectorBuffer (int n) OVERRIDE_CPP17 FINAL_CPP17
 get Detector Buffer of slot C
 
int * Get4thDetectorBuffer (int n) OVERRIDE_CPP17 FINAL_CPP17
 get Detector Buffer of slot D
 
int * GetRawTrlBufPtr (int n) OVERRIDE_CPP17
 get buffer pointer of rawcopper trailer
 
int GetExpNo (int n) OVERRIDE_CPP17
 get Experimental # from header
 
unsigned int GetExpRunSubrun (int n) OVERRIDE_CPP17
 get Experimental # from header
 
int GetRunNo (int n) OVERRIDE_CPP17
 Exp# (10bit) run# (14bit) restart # (8bit)
 
int GetSubRunNo (int n) OVERRIDE_CPP17
 get run # (14bit)
 
unsigned int GetEveNo (int n) OVERRIDE_CPP17
 get subrun #(8bit)
 
int GetDataType (int n) OVERRIDE_CPP17
 get contents of header
 
int GetTruncMask (int n) OVERRIDE_CPP17
 get contents of header
 
unsigned int GetErrorBitFlag (int n) OVERRIDE_CPP17
 get contents of header
 
void AddErrorBitFlag (int n, unsigned int error_bit_flag) OVERRIDE_CPP17
 Add Detected Error bitflag.
 
int GetPacketCRCError (int n) OVERRIDE_CPP17
 check CRC packet Error
 
int GetEventCRCError (int n) OVERRIDE_CPP17
 check CRC event Error
 
unsigned int GetNodeID (int n) OVERRIDE_CPP17
 get node-ID from data
 
virtual int GetNumFINESSEBlock (int n) OVERRIDE_CPP17
 get # of FINNESEs which contains data
 
int Get1stFINESSENwords (int n) OVERRIDE_CPP17 FINAL_CPP17
 get data size of FINESSE slot A buffer
 
int Get2ndFINESSENwords (int n) OVERRIDE_CPP17 FINAL_CPP17
 get data size of FINESSE slot B buffer
 
int Get3rdFINESSENwords (int n) OVERRIDE_CPP17 FINAL_CPP17
 get data size of FINESSE slot C buffer
 
int Get4thFINESSENwords (int n) OVERRIDE_CPP17 FINAL_CPP17
 get data size of FINESSE slot D buffer
 
int GetOffset1stFINESSE (int n) OVERRIDE_CPP17 FINAL_CPP17
 get # of offset words for FINESSE slot A buffer position
 
int GetOffset2ndFINESSE (int n) OVERRIDE_CPP17 FINAL_CPP17
 get # of offset words for FINESSE slot B buffer position
 
int GetOffset3rdFINESSE (int n) OVERRIDE_CPP17 FINAL_CPP17
 get # of offset words for FINESSE slot C buffer position
 
int GetOffset4thFINESSE (int n) OVERRIDE_CPP17 FINAL_CPP17
 get # of offset words for FINESSE slot D buffer position
 
unsigned int GetTTCtimeTRGType (int n) OVERRIDE_CPP17
 get b2l block from "FEE b2link header"
 
unsigned int GetTTUtime (int n) OVERRIDE_CPP17
 Check if COPPER Magic words are correct.
 
int GetTTCtime (int n) OVERRIDE_CPP17
 Get ctime.
 
int GetTRGType (int n) OVERRIDE_CPP17
 Get trgtype.
 
void GetTTTimeVal (int n, struct timeval *tv) OVERRIDE_CPP17
 Get timeval.
 
int GetMaxNumOfCh (int n) OVERRIDE_CPP17
 Get the max number of channels in a readout board.
 
int * GetFINESSEBuffer (int n, int finesse_num) OVERRIDE_CPP17
 Get a pointer to a FINESSE buffer.
 
int GetFINESSENwords (int n, int finesse_num) OVERRIDE_CPP17
 Get the size of a finesse buffer.
 
void CompareHeaderValue (int n, const unsigned int(&input_val)[MAX_PCIE40_CH], std::vector< std::vector< unsigned int > > &summary_table) OVERRIDE_CPP17
 Check header value of all channels.
 
virtual int * GetRawHdrBufPtr (int n)
 get buffer pointer of rawcopper header(Currently same as GetBufferPos)
 
virtual int * Get1stFINESSEBuffer (int n)
 get FINESSE buffer pointer for slot A
 
virtual int * Get2ndFINESSEBuffer (int n)
 get FINESSE buffer pointer for slot B
 
virtual int * Get3rdFINESSEBuffer (int n)
 get FINESSE buffer pointer for slot C
 
virtual int * Get4thFINESSEBuffer (int n)
 get FINESSE buffer pointer for slot D
 
virtual int GetOffsetFINESSE (int n, int finesse)
 get # of offset words
 
virtual unsigned int CalcXORChecksum (int *buf, int nwords)
 calc XOR checksum
 
virtual void GetNodeName (int n, char *node_name, int bufsize)
 Get hostname of a node from the RawCOPPER header.
 
virtual void GetNodeName (char *node_name, unsigned int node_id, int bufsize)
 Get hostname of a node from an argument.
 
virtual void SetBuffer (int *bufin, int nwords, int delete_flag, int num_events, int num_nodes)
 set buffer ( delete_flag : m_buffer is freeed( = 0 )/ not freeed( = 1 ) in Destructer )
 
virtual int TotalBufNwords ()
 Get total length of m_buffer.
 
virtual int GetBufferPos (int n)
 get position of data block in word
 
virtual int * GetBuffer (int n)
 get nth buffer pointer
 
virtual int * GetWholeBuffer ()
 get pointer to buffer(m_buffer)
 
virtual int GetNumEntries ()
 get # of data blocks = (# of nodes)*(# of events)
 
virtual int GetNumNodes ()
 get # of data sources(e.g. # of COPPER boards) in m_buffer
 
virtual int GetNumEvents ()
 get # of events in m_buffer
 
virtual int GetPreAllocFlag ()
 get malloc_flag
 
virtual int GetBlockNwords (int n)
 get size of a data block
 
virtual int CheckFTSWID (int n)
 get FTSW ID to check whether this data block is FTSW data or not
 
virtual int CheckTLUID (int n)
 get FTSW ID to check whether this data block is FTSW data or not
 
virtual void CopyBlock (int n, int *buf_to)
 Copy one datablock to buffer.
 
virtual void PrintData (int *buf, int nwords)
 print data
 

Public Attributes

RawHeader_latest tmp_header
 header ( not recorded )
 
RawTrailer_latest tmp_trailer
 trailer ( not recorded )
 

Protected Attributes

int m_nwords
 number of words of buffer
 
int m_num_nodes
 number of nodes in this object
 
int m_num_events
 number of events in this object
 
int * m_buffer
 Buffer.
 
int m_use_prealloc_buf
 not recorded
 

Detailed Description

The Raw COPPER class ver.

4 (the 1st ver. for PCIe40 data format) This class stores data received by PCIe40 via belle2linkt Data from all detectors except PXD are stored in this class

Definition at line 37 of file PostRawCOPPERFormat_latest.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum

Definition at line 172 of file PostRawCOPPERFormat_latest.h.

172 {
173 POS_B2LHSLB_MAGIC = 0,
174 SIZE_B2LHSLB_HEADER = 1
175 };

◆ anonymous enum

anonymous enum

Definition at line 179 of file PostRawCOPPERFormat_latest.h.

179 {
180 POS_B2L_CTIME = 0,
181 SIZE_B2LFEE_HEADER = 1
182 };

◆ anonymous enum

anonymous enum

Definition at line 185 of file PostRawCOPPERFormat_latest.h.

185 {
186 POS_B2LFEE_ERRCNT_CRC16 = 0,
187 SIZE_B2LFEE_TRAILER = 1
188 };

◆ anonymous enum

anonymous enum

Definition at line 193 of file PostRawCOPPERFormat_latest.h.

193 {
194 POS_B2LHSLB_TRL_MAGIC = 0,
195 SIZE_B2LHSLB_TRAILER = 1
196 };

◆ anonymous enum

anonymous enum
inherited

Format version number.

Definition at line 230 of file RawCOPPERFormat_latest.h.

230 {
231 DATA_FORMAT_VERSION = 4
232 };

◆ anonymous enum

anonymous enum
inherited

Definition at line 237 of file RawCOPPERFormat_latest.h.

237 {
238 SIZE_COPPER_DRIVER_HEADER = 0,
239 SIZE_COPPER_DRIVER_TRAILER = 0
240 };

◆ anonymous enum

anonymous enum
inherited

Definition at line 243 of file RawCOPPERFormat_latest.h.

243 {
244 SIZE_COPPER_HEADER = 0
245 };

◆ anonymous enum

anonymous enum
inherited

Definition at line 248 of file RawCOPPERFormat_latest.h.

248 {
249 SIZE_COPPER_TRAILER = 0
250 };

◆ anonymous enum

anonymous enum
inherited

Definition at line 255 of file RawCOPPERFormat_latest.h.

255 {
256 ONLINE_REMOVED_DATA = 15
257 };

◆ anonymous enum

anonymous enum
inherited

Definition at line 75 of file RawDataBlockFormat.h.

75 {
76 POS_NWORDS = 0,
77 POS_NODE_ID = 6
78 };

◆ anonymous enum

anonymous enum
inherited

Definition at line 80 of file RawDataBlockFormat.h.

80 {
81 // Tentatively needed to distinguish new and old FTSW format, which will be changed in Nov. 2013
82 POS_FTSW_ID_OLD = 5,
83 TEMP_POS_NWORDS_HEADER = 1,
84 OLD_FTSW_NWORDS_HEADER = 6
85 };

Constructor & Destructor Documentation

◆ PostRawCOPPERFormat_latest()

Default constructor.

Definition at line 19 of file PostRawCOPPERFormat_latest.cc.

20{
21}

◆ ~PostRawCOPPERFormat_latest()

Constructor using existing pointer to raw data buffer.

Destructor

Definition at line 23 of file PostRawCOPPERFormat_latest.cc.

24{
25}

Member Function Documentation

◆ CalcDriverChkSum()

unsigned int CalcDriverChkSum ( int  n)
virtual

calc COPPER driver's checksum value

Implements RawCOPPERFormat.

Definition at line 27 of file PostRawCOPPERFormat_latest.cc.

28{
29 char err_buf[500];
30 sprintf(err_buf, "[FATAL] This function is not supported.(block %d) Exiting...: \n%s %s %d\n",
31 n, __FILE__, __PRETTY_FUNCTION__, __LINE__);
32 printf("[DEBUG] %s\n", err_buf);
33 B2FATAL(err_buf);
34 return 0;
35}

◆ CalcXORChecksum()

unsigned int CalcXORChecksum ( int *  buf,
int  nwords 
)
virtualinherited

calc XOR checksum

Definition at line 24 of file RawCOPPERFormat.cc.

25{
26 unsigned int checksum = 0;
27 for (int i = 0; i < nwords; i++) {
28 checksum = checksum ^ buf[ i ];
29 }
30 return checksum;
31}

◆ CheckB2LHSLBMagicWords()

int CheckB2LHSLBMagicWords ( int *  finesse_buf,
int  finesse_nwords 
)

check magic words

Definition at line 152 of file PostRawCOPPERFormat_latest.cc.

153{
154 char err_buf[500];
155 sprintf(err_buf, "[FATAL] This function should be called by PrePostRawCOPPERFormat_***. Exiting...\n %s %s %d\n",
156 __FILE__, __PRETTY_FUNCTION__, __LINE__);
157 printf("Print out variables to reduce unused-variables-warnings : %p %d\n", finesse_buf, finesse_nwords);
158 printf("[DEBUG] %s\n", err_buf);
159 B2FATAL(err_buf);
160}

◆ CheckCOPPERMagic()

bool CheckCOPPERMagic ( int  n)
virtual

Check if COPPER Magic words are correct.

Implements RawCOPPERFormat.

Definition at line 113 of file PostRawCOPPERFormat_latest.cc.

114{
115 char err_buf[500];
116 char hostname[128];
117 GetNodeName(n, hostname, sizeof(hostname));
118 sprintf(err_buf,
119 "[FATAL] %s ch=%d : ERROR_EVENT : No magic word # in COPPER header (block %d). Exiting...: eve 0x%x exp %d run %d sub %d\n%s %s %d\n",
120 hostname, -1,
121 n,
122 GetEveNo(n), GetExpNo(n), GetRunNo(n), GetSubRunNo(n),
123 __FILE__, __PRETTY_FUNCTION__, __LINE__);
124 printf("[DEBUG] %s\n", err_buf);
125 B2FATAL(err_buf);
126 return false;
127}
virtual void GetNodeName(int n, char *node_name, int bufsize)
Get hostname of a node from the RawCOPPER header.
unsigned int GetEveNo(int n) OVERRIDE_CPP17
get subrun #(8bit)
int GetExpNo(int n) OVERRIDE_CPP17
get Experimental # from header
int GetRunNo(int n) OVERRIDE_CPP17
Exp# (10bit) run# (14bit) restart # (8bit)
int GetSubRunNo(int n) OVERRIDE_CPP17
get run # (14bit)

◆ CheckCRC16()

int CheckCRC16 ( int  n,
int  finesse_num 
)

check magic words

Definition at line 162 of file PostRawCOPPERFormat_latest.cc.

163{
164
165 //
166 // Calculate CRC16
167 //
168 int finesse_nwords = GetFINESSENwords(n, finesse_num);
169 if (finesse_nwords <= 0) {
170 char err_buf[500];
171 char hostname[128];
172 GetNodeName(n, hostname, sizeof(hostname));
173 sprintf(err_buf,
174 "[FATAL] %s ch=%d : ERROR_EVENT : The specified finesse(%c) seems to be empty(nwords = %d). Cannot calculate CRC16. Exiting...: eve 0x%x exp %d run %d sub %d\n %s %s %d\n",
175 hostname, finesse_num,
176 65 + finesse_num, finesse_nwords,
177 GetEveNo(n), GetExpNo(n), GetRunNo(n), GetSubRunNo(n),
178 __FILE__, __PRETTY_FUNCTION__, __LINE__);
179 printf("%s", err_buf); fflush(stdout);
180 B2FATAL(err_buf);
181 }
182
183 int* copper_buf = GetBuffer(n);
184
185
186 unsigned short temp_crc16 = CalcCRC16LittleEndian(0xffff, &(copper_buf[ tmp_header.POS_TTCTIME_TRGTYPE ]), 1);
187 temp_crc16 = CalcCRC16LittleEndian(temp_crc16, &(copper_buf[ tmp_header.POS_EVE_NO ]), 1);
188 temp_crc16 = CalcCRC16LittleEndian(temp_crc16, &(copper_buf[ tmp_header.POS_TTUTIME ]), 1);
189 temp_crc16 = CalcCRC16LittleEndian(temp_crc16, &(copper_buf[ tmp_header.POS_EXP_RUN_NO ]), 1);
190 int* buf = GetFINESSEBuffer(n, finesse_num) + SIZE_B2LHSLB_HEADER + POS_B2L_CTIME;
191 int pos_nwords = finesse_nwords - (static_cast<int>(SIZE_B2LHSLB_HEADER) + POS_B2L_CTIME + SIZE_B2LFEE_TRAILER +
192 SIZE_B2LHSLB_TRAILER);
193 temp_crc16 = CalcCRC16LittleEndian(temp_crc16, buf, pos_nwords);
194
195 //
196 // Compare CRC16 with B2LCRC16
197 //
198 buf = GetFINESSEBuffer(n, finesse_num) + GetFINESSENwords(n,
199 finesse_num) - ((SIZE_B2LFEE_TRAILER - POS_B2LFEE_ERRCNT_CRC16) + SIZE_B2LHSLB_TRAILER) ;
200
201 if (GetEveNo(n) % 100000 == 0) {
202 printf("#### PostRawCOPPER : Eve %.8x block %d finesse %d B2LCRC16 %.8x calculated CRC16 %.8x\n", GetEveNo(n), n, finesse_num,
203 *buf, temp_crc16);
204 }
205
206 // if ( false ) {
207 if ((unsigned short)(*buf & 0xFFFF) != temp_crc16) {
208
209 // dump an event
210 int copper_nwords = copper_buf[ tmp_header.POS_NWORDS ];
211 PrintData(copper_buf, copper_nwords);
212 // Check whether packet-CRC error has occcured or not.
213 if (copper_buf[ tmp_header.POS_TRUNC_MASK_DATATYPE ] & tmp_header.B2LINK_PACKET_CRC_ERROR) {
214 //
215 // Do not stop data
216 //
217 char err_buf[600];
218 char hostname[128];
219 GetNodeName(n, hostname, sizeof(hostname));
220 if ((GetNodeID(n) & DETECTOR_MASK) == ARICH_ID) {
221 sprintf(err_buf,
222 "[WARNING] %s ch=%d : ARICH : POST B2link event CRC16 error with B2link Packet CRC error. data(%x) calc(%x) fns nwords %d type 0x%.8x : This error is ignored and the error event will be recorded in .sroot file acording to request from ARICH group: slot%c eve 0x%x exp %d run %d sub %d\n%s %s %d\n",
223 hostname, finesse_num,
224 *buf, temp_crc16, GetFINESSENwords(n, finesse_num), copper_buf[ tmp_header.POS_TRUNC_MASK_DATATYPE ],
225 65 + finesse_num, GetEveNo(n), GetExpNo(n), GetRunNo(n), GetSubRunNo(n),
226 __FILE__, __PRETTY_FUNCTION__, __LINE__);
227 printf("%s", err_buf); fflush(stdout);
228 PrintData(GetFINESSEBuffer(n, finesse_num), GetFINESSENwords(n, finesse_num));
229 } else {
230 sprintf(err_buf,
231 "[FATAL] %s ch=%d : ERROR_EVENT : POST B2link event CRC16 error with B2link Packet CRC error. data(%x) calc(%x) fns nwords %d type 0x%.8x : slot%c eve 0x%x exp %d run %d sub %d\n%s %s %d\n",
232 hostname, finesse_num,
233 *buf, temp_crc16, GetFINESSENwords(n, finesse_num), copper_buf[ tmp_header.POS_TRUNC_MASK_DATATYPE ],
234 65 + finesse_num, GetEveNo(n), GetExpNo(n), GetRunNo(n), GetSubRunNo(n),
235 __FILE__, __PRETTY_FUNCTION__, __LINE__);
236 printf("%s", err_buf); fflush(stdout);
237 PrintData(GetFINESSEBuffer(n, finesse_num), GetFINESSENwords(n, finesse_num));
238#ifndef NO_ERROR_STOP
239 B2FATAL(err_buf);
240#endif
241 }
242
243
244
245 } else {
246 //
247 // Stop taking data
248 //
249 char err_buf[500];
250 char hostname[128];
251 GetNodeName(n, hostname, sizeof(hostname));
252 sprintf(err_buf,
253 "[FATAL] %s ch=%d : ERROR_EVENT : POST B2link event CRC16 error without B2link Packet CRC error. data(%x) calc(%x) fns nwords %d type 0x%.8x: slot%c eve 0x%x exp %d run %d sub %d\n%s %s %d\n",
254 hostname, finesse_num,
255 *buf, temp_crc16, GetFINESSENwords(n, finesse_num), copper_buf[ tmp_header.POS_TRUNC_MASK_DATATYPE ],
256 65 + finesse_num, GetEveNo(n), GetExpNo(n), GetRunNo(n), GetSubRunNo(n),
257 __FILE__, __PRETTY_FUNCTION__, __LINE__);
258 printf("%s", err_buf); fflush(stdout);
259 PrintData(GetFINESSEBuffer(n, finesse_num), GetFINESSENwords(n, finesse_num));
260#ifndef NO_ERROR_STOP
261 B2FATAL(err_buf);
262#endif
263 }
264 // Modify XOR checksum due to adding a bit flag
265 copper_buf[ copper_nwords - tmp_trailer.RAWTRAILER_NWORDS + tmp_trailer.POS_CHKSUM ]
266 ^= copper_buf[ tmp_header.POS_TRUNC_MASK_DATATYPE ];
267 copper_buf[ tmp_header.POS_TRUNC_MASK_DATATYPE ] |= tmp_header.B2LINK_EVENT_CRC_ERROR;
268 copper_buf[ copper_nwords - tmp_trailer.RAWTRAILER_NWORDS + tmp_trailer.POS_CHKSUM ]
269 ^= copper_buf[ tmp_header.POS_TRUNC_MASK_DATATYPE ];
270 }
271
272 return 1;
273
274
275}
RawTrailer_latest tmp_trailer
trailer ( not recorded )
RawHeader_latest tmp_header
header ( not recorded )
virtual int * GetBuffer(int n)
get nth buffer pointer
virtual void PrintData(int *buf, int nwords)
print data
int * GetFINESSEBuffer(int n, int finesse_num) OVERRIDE_CPP17
Get a pointer to a FINESSE buffer.
unsigned int GetNodeID(int n) OVERRIDE_CPP17
get node-ID from data
int GetFINESSENwords(int n, int finesse_num) OVERRIDE_CPP17
Get the size of a finesse buffer.

◆ CheckData()

void CheckData ( int  n,
unsigned int  prev_evenum,
unsigned int *  cur_evenum,
unsigned int  prev_copper_ctr,
unsigned int *  cur_copper_ctr,
unsigned int  prev_exprunsubrun_no,
unsigned int *  cur_exprunsubrun_no 
)
virtual

check data contents

Implements RawCOPPERFormat.

Definition at line 59 of file PostRawCOPPERFormat_latest.cc.

63{
64 char err_buf[500];
65 int err_flag = 0;
66
67 //
68 // Check incrementation of event #
69 //
70 *cur_evenum_rawcprhdr = GetEveNo(n);
71 *cur_exprunsubrun_no = GetExpRunSubrun(n);
72
73 if (prev_exprunsubrun_no == *cur_exprunsubrun_no) {
74 if ((unsigned int)(prev_evenum + 1) != *cur_evenum_rawcprhdr) {
75 sprintf(err_buf, "CORRUPTED DATA: Event # jump : i %d prev 0x%x cur 0x%x : Exiting...\n%s %s %d\n",
76 n, prev_evenum, *cur_evenum_rawcprhdr,
77 __FILE__, __PRETTY_FUNCTION__, __LINE__);
78 err_flag = 1;
79 }
80 }
81
82
83 //
84 // Check checksum calculated by DeSerializerCOPPER()
85 //
87 unsigned int xor_chksum = CalcXORChecksum(GetBuffer(n), GetBlockNwords(n) - tmp_trailer.GetTrlNwords());
88 if (tmp_trailer.GetChksum() != xor_chksum) {
89 char hostname[128];
90 GetNodeName(n, hostname, sizeof(hostname));
91 sprintf(err_buf,
92 "[FATAL] %s ch=%d : ERROR_EVENT : checksum error : block %d : length %d eve 0x%x : Trailer chksum 0x%.8x : calcd. now 0x%.8x : eve 0x%x exp %d run %d sub %d\n %s %s %d\n",
93 hostname, -1,
94 n, GetBlockNwords(n), *cur_evenum_rawcprhdr, tmp_trailer.GetChksum(), xor_chksum,
96 __FILE__, __PRETTY_FUNCTION__, __LINE__);
97 err_flag = 1;
98 }
99
100
101 if (err_flag == 1) {
102 printf("[DEBUG] %s\n", err_buf);
103 printf("[DEBUG] ========== dump a data blcok : block # %d==========\n", n);
105 printf("Print out variables to reduce unused-variables-warnings : %u %u\n", prev_copper_ctr, *cur_copper_ctr);
106 B2FATAL(err_buf);
107 }
108
109 return;
110
111}
virtual unsigned int CalcXORChecksum(int *buf, int nwords)
calc XOR checksum
virtual int GetBlockNwords(int n)
get size of a data block
int GetTrlNwords()
Set magic word.
unsigned int GetExpRunSubrun(int n) OVERRIDE_CPP17
get Experimental # from header
unsigned int GetChksum()
Set # of trailer words.
void SetBuffer(int *bufin)
return buffer
int * GetRawTrlBufPtr(int n) OVERRIDE_CPP17
get buffer pointer of rawcopper trailer

◆ CheckFTSWID()

int CheckFTSWID ( int  n)
virtualinherited

get FTSW ID to check whether this data block is FTSW data or not

Definition at line 73 of file RawDataBlockFormat.cc.

74{
75 int pos = POS_NODE_ID;
76 if (m_buffer[ GetBufferPos(n) + TEMP_POS_NWORDS_HEADER ] == OLD_FTSW_NWORDS_HEADER) {
77 pos = POS_FTSW_ID_OLD;
78 }
79
80 if ((m_buffer[ GetBufferPos(n) + pos ] & 0xffffff00) == 0x54544400) { // "TTD" + format version ( 0x20=DESY, 0x31=2018/7/11)
81 return 1;
82 } else {
83 return 0;
84 }
85}
virtual int GetBufferPos(int n)
get position of data block in word

◆ CheckTLUID()

int CheckTLUID ( int  n)
virtualinherited

get FTSW ID to check whether this data block is FTSW data or not

Definition at line 88 of file RawDataBlockFormat.cc.

89{
90 int pos = POS_NODE_ID;
91 if (m_buffer[ GetBufferPos(n) + TEMP_POS_NWORDS_HEADER ] == OLD_FTSW_NWORDS_HEADER) {
92 pos = POS_FTSW_ID_OLD;
93 }
94 if (m_buffer[ GetBufferPos(n) + pos ] == 0x544c5520) { // "TLU "
95 return 1;
96 } else {
97 return 0;
98 }
99}

◆ CheckUtimeCtimeTRGType()

void CheckUtimeCtimeTRGType ( int  n)
virtual

check data contents

Implements RawCOPPERFormat.

Definition at line 129 of file PostRawCOPPERFormat_latest.cc.

130{
131 char err_buf[500];
132 sprintf(err_buf, "[FATAL] This function is not supported (block %d). Exiting...\n%s %s %d\n",
133 n, __FILE__, __PRETTY_FUNCTION__, __LINE__);
134 printf("[DEBUG] %s\n", err_buf);
135 B2FATAL(err_buf);
136}

◆ CompareHeaderValue()

void CompareHeaderValue ( int  n,
const unsigned int(&)  input_val[MAX_PCIE40_CH],
std::vector< std::vector< unsigned int > > &  summary_table 
)
virtualinherited

Check header value of all channels.

Reimplemented from RawCOPPERFormat.

Definition at line 256 of file RawCOPPERFormat_latest.cc.

258{
259
260 //
261 // Format of summary_table
262 // <The 1st channel of a value> <# of channels of the value> <the value>
263 //
264 std::vector<std::vector<unsigned int>> temp;
265 for (int i = 0; i < MAX_PCIE40_CH; i++) {
266 if (GetFINESSENwords(n, i) > 0) {
267
268 int same_flag = 0;
269 for (unsigned j = 0; j < summary_table.size(); ++j) {
270 if (input_val[i] == summary_table.at(j).at(2)) {
271 summary_table.at(j).at(1)++;
272 same_flag = 1;
273 break;
274 }
275 }
276 if (same_flag == 0) {
277 summary_table.push_back({ static_cast<unsigned int>(i), 1, input_val[i] });
278 }
279 }
280 }
281 sort(summary_table.begin(), summary_table.end(), [](const std::vector<unsigned int>& alpha,
282 const std::vector<unsigned int>& beta) {return alpha.at(1) < beta.at(1);});
283 return;
284}

◆ CopyBlock()

void CopyBlock ( int  n,
int *  buf_to 
)
virtualinherited

Copy one datablock to buffer.

Definition at line 173 of file RawDataBlockFormat.cc.

174{
175 memcpy(buf_to, GetBuffer(n), GetBlockNwords(n) * sizeof(int));
176 return;
177}

◆ FillTopBlockRawHeader()

unsigned int FillTopBlockRawHeader ( unsigned int  m_node_id,
unsigned int  prev_eve32,
unsigned int  prev_exprunsubrun_no,
unsigned int *  cur_exprunsubrun_no 
)
virtual

should be called by DeSerializerCOPPER.cc and fill contents in RawHeader

Implements RawCOPPERFormat.

Definition at line 138 of file PostRawCOPPERFormat_latest.cc.

141{
142 char err_buf[500];
143 sprintf(err_buf, "[FATAL] This function should be called by PrePostRawCOPPERFormat_***. Exiting...\n %s %s %d\n",
144 __FILE__, __PRETTY_FUNCTION__, __LINE__);
145 printf("Print out variables to reduce unused-variables-warnings : %u %u %u %u\n",
146 m_node_id, prev_eve32, prev_exprunsubrun_no, *cur_exprunsubrun_no);
147 printf("[DEBUG] %s\n", err_buf);
148 B2FATAL(err_buf);
149}

◆ Get1stDetectorBuffer()

int * Get1stDetectorBuffer ( int  n)
virtualinherited

get Detector buffer of slot A

Implements RawCOPPERFormat.

Definition at line 174 of file RawCOPPERFormat_latest.cc.

175{
176 char err_buf[500];
177 sprintf(err_buf, "[FATAL] This function is not supported.(block %d) Exiting...: \n%s %s %d\n",
178 n, __FILE__, __PRETTY_FUNCTION__, __LINE__);
179 printf("[DEBUG] %s\n", err_buf);
180 B2FATAL(err_buf);
181 return NULL;
182}

◆ Get1stDetectorNwords()

int Get1stDetectorNwords ( int  n)
virtualinherited

get Detector buffer length of slot A

Implements RawCOPPERFormat.

Definition at line 92 of file RawCOPPERFormat_latest.cc.

93{
94 char err_buf[500];
95 sprintf(err_buf, "[FATAL] This function is not supported.(block %d) Exiting...: \n%s %s %d\n",
96 n, __FILE__, __PRETTY_FUNCTION__, __LINE__);
97 printf("[DEBUG] %s\n", err_buf);
98 B2FATAL(err_buf);
99 return 0;
100}

◆ Get1stFINESSENwords()

int Get1stFINESSENwords ( int  n)
virtualinherited

get data size of FINESSE slot A buffer

Implements RawCOPPERFormat.

Definition at line 133 of file RawCOPPERFormat_latest.cc.

134{
135 char err_buf[500];
136 sprintf(err_buf, "[FATAL] This function is not supported.(block %d) Exiting...: \n%s %s %d\n",
137 n, __FILE__, __PRETTY_FUNCTION__, __LINE__);
138 printf("[DEBUG] %s\n", err_buf);
139 B2FATAL(err_buf);
140 return 0;
141}

◆ Get2ndDetectorBuffer()

int * Get2ndDetectorBuffer ( int  n)
virtualinherited

get Detector Buffer of slot B

Implements RawCOPPERFormat.

Definition at line 184 of file RawCOPPERFormat_latest.cc.

185{
186 char err_buf[500];
187 sprintf(err_buf, "[FATAL] This function is not supported.(block %d) Exiting...: \n%s %s %d\n",
188 n, __FILE__, __PRETTY_FUNCTION__, __LINE__);
189 printf("[DEBUG] %s\n", err_buf);
190 B2FATAL(err_buf);
191 return NULL;
192}

◆ Get2ndDetectorNwords()

int Get2ndDetectorNwords ( int  n)
virtualinherited

get Detector buffer length of slot B

Implements RawCOPPERFormat.

Definition at line 102 of file RawCOPPERFormat_latest.cc.

103{
104 char err_buf[500];
105 sprintf(err_buf, "[FATAL] This function is not supported.(block %d) Exiting...: \n%s %s %d\n",
106 n, __FILE__, __PRETTY_FUNCTION__, __LINE__);
107 printf("[DEBUG] %s\n", err_buf);
108 B2FATAL(err_buf);
109 return 0;
110}

◆ Get2ndFINESSENwords()

int Get2ndFINESSENwords ( int  n)
virtualinherited

get data size of FINESSE slot B buffer

Implements RawCOPPERFormat.

Definition at line 143 of file RawCOPPERFormat_latest.cc.

144{
145 char err_buf[500];
146 sprintf(err_buf, "[FATAL] This function is not supported.(block %d) Exiting...: \n%s %s %d\n",
147 n, __FILE__, __PRETTY_FUNCTION__, __LINE__);
148 printf("[DEBUG] %s\n", err_buf);
149 B2FATAL(err_buf);
150 return 0;
151}

◆ Get3rdDetectorBuffer()

int * Get3rdDetectorBuffer ( int  n)
virtualinherited

get Detector Buffer of slot C

Implements RawCOPPERFormat.

Definition at line 194 of file RawCOPPERFormat_latest.cc.

195{
196 char err_buf[500];
197 sprintf(err_buf, "[FATAL] This function is not supported.(block %d) Exiting...: \n%s %s %d\n",
198 n, __FILE__, __PRETTY_FUNCTION__, __LINE__);
199 printf("[DEBUG] %s\n", err_buf);
200 B2FATAL(err_buf);
201 return NULL;
202}

◆ Get3rdDetectorNwords()

int Get3rdDetectorNwords ( int  n)
virtualinherited

get Detector buffer length of slot C

Implements RawCOPPERFormat.

Definition at line 112 of file RawCOPPERFormat_latest.cc.

113{
114 char err_buf[500];
115 sprintf(err_buf, "[FATAL] This function is not supported.(block %d) Exiting...: \n%s %s %d\n",
116 n, __FILE__, __PRETTY_FUNCTION__, __LINE__);
117 printf("[DEBUG] %s\n", err_buf);
118 B2FATAL(err_buf);
119 return 0;
120}

◆ Get3rdFINESSENwords()

int Get3rdFINESSENwords ( int  n)
virtualinherited

get data size of FINESSE slot C buffer

Implements RawCOPPERFormat.

Definition at line 153 of file RawCOPPERFormat_latest.cc.

154{
155 char err_buf[500];
156 sprintf(err_buf, "[FATAL] This function is not supported.(block %d) Exiting...: \n%s %s %d\n",
157 n, __FILE__, __PRETTY_FUNCTION__, __LINE__);
158 printf("[DEBUG] %s\n", err_buf);
159 B2FATAL(err_buf);
160 return 0;
161}

◆ Get4thDetectorBuffer()

int * Get4thDetectorBuffer ( int  n)
virtualinherited

get Detector Buffer of slot D

Implements RawCOPPERFormat.

Definition at line 204 of file RawCOPPERFormat_latest.cc.

205{
206 char err_buf[500];
207 sprintf(err_buf, "[FATAL] This function is not supported.(block %d) Exiting...: \n%s %s %d\n",
208 n, __FILE__, __PRETTY_FUNCTION__, __LINE__);
209 printf("[DEBUG] %s\n", err_buf);
210 B2FATAL(err_buf);
211 return NULL;
212}

◆ Get4thDetectorNwords()

int Get4thDetectorNwords ( int  n)
virtualinherited

get Detector buffer length of slot D

Implements RawCOPPERFormat.

Definition at line 122 of file RawCOPPERFormat_latest.cc.

123{
124 char err_buf[500];
125 sprintf(err_buf, "[FATAL] This function is not supported.(block %d) Exiting...: \n%s %s %d\n",
126 n, __FILE__, __PRETTY_FUNCTION__, __LINE__);
127 printf("[DEBUG] %s\n", err_buf);
128 B2FATAL(err_buf);
129 return 0;
130}

◆ Get4thFINESSENwords()

int Get4thFINESSENwords ( int  n)
virtualinherited

get data size of FINESSE slot D buffer

Implements RawCOPPERFormat.

Definition at line 163 of file RawCOPPERFormat_latest.cc.

164{
165 char err_buf[500];
166 sprintf(err_buf, "[FATAL] This function is not supported.(block %d) Exiting...: \n%s %s %d\n",
167 n, __FILE__, __PRETTY_FUNCTION__, __LINE__);
168 printf("[DEBUG] %s\n", err_buf);
169 B2FATAL(err_buf);
170 return 0;
171}

◆ GetB2LFEE32bitEventNumber()

unsigned int GetB2LFEE32bitEventNumber ( int  n)
virtual

get b2l block from "FEE b2link header"

Implements RawCOPPERFormat.

Definition at line 41 of file PostRawCOPPERFormat_latest.cc.

42{
43 char err_buf[500];
44 char hostname[128];
45 GetNodeName(n, hostname, sizeof(hostname));
46 sprintf(err_buf,
47 "[FATAL] %s ch=%d : ERROR_EVENT : No event # in B2LFEE header. (block %d) Exiting... : eve 0x%x exp %d run %d sub %d\n%s %s %d\n",
48 hostname, -1,
49 n,
51 __FILE__, __PRETTY_FUNCTION__, __LINE__);
52 printf("[DEBUG] %s\n", err_buf);
53 B2FATAL(err_buf);
54 return 0;
55}

◆ GetBlockNwords()

int GetBlockNwords ( int  n)
virtualinherited

get size of a data block

Definition at line 107 of file RawDataBlockFormat.cc.

108{
109 int size;
110 if (n == (m_num_events * m_num_nodes) - 1) {
111 size = m_nwords - GetBufferPos(n);
112 } else {
113 size = GetBufferPos(n + 1) - GetBufferPos(n);
114 }
115 return size;
116}
int m_num_events
number of events in this object
int m_num_nodes
number of nodes in this object
int m_nwords
number of words of buffer

◆ GetBuffer()

int * GetBuffer ( int  n)
virtualinherited

get nth buffer pointer

Definition at line 124 of file RawDataBlockFormat.cc.

125{
126 int pos_nwords = GetBufferPos(n);
127 return &(m_buffer[ pos_nwords ]);
128}

◆ GetBufferPos()

int GetBufferPos ( int  n)
virtualinherited

get position of data block in word

Definition at line 30 of file RawDataBlockFormat.cc.

31{
32 if (m_buffer == NULL || m_nwords <= 0) {
33 char err_buf[500];
34 sprintf(err_buf, "[FATAL] RawPacket buffer(%p) is not available or length(%d) is not set.\n %s %s %d\n",
35 m_buffer, m_nwords, __FILE__, __PRETTY_FUNCTION__, __LINE__);
36 printf("%s", err_buf); fflush(stdout);
37 B2FATAL(err_buf);
38 }
39
40 if (n >= (m_num_events * m_num_nodes)) {
41 char err_buf[500];
42 sprintf(err_buf, "[FATAL] Invalid COPPER block No. (%d : max %d ) is specified. Exiting... \n %s %s %d\n",
43 n, (m_num_events * m_num_nodes), __FILE__, __PRETTY_FUNCTION__, __LINE__);
44 printf("%s", err_buf); fflush(stdout);
45 B2FATAL(err_buf);
46 }
47
48 int pos_nwords = 0;
49 for (int i = 1; i <= n ; i++) {
50 if (m_buffer[ pos_nwords ] <= 0) {
51 char err_buf[500];
52 sprintf(err_buf,
53 "[FATAL] ERROR_EVENT : length of this data block is strange ( %d words ). Maybe data is corrupted or RawHeader info has not been filled yet. Exiting...",
54 m_buffer[ pos_nwords ]);
55 printf("%s", err_buf);
56 B2FATAL(err_buf);
57 } else {
58 pos_nwords += m_buffer[ pos_nwords ];
59 }
60 if (pos_nwords >= m_nwords) {
61 char err_buf[500];
62 sprintf(err_buf, "[FATAL] ERROR_EVENT : value of pos_nwords(%d) is larger than m_nwords(%d). Exiting...\n %s %s %d\n",
63 pos_nwords, m_nwords, __FILE__, __PRETTY_FUNCTION__, __LINE__);
64 printf("%s", err_buf); fflush(stdout);
65 B2FATAL(err_buf); // to reduce multiple error messages
66 }
67 }
68 return pos_nwords;
69
70}

◆ GetNodeName() [1/2]

void GetNodeName ( char *  node_name,
unsigned int  node_id,
int  bufsize 
)
virtualinherited

Get hostname of a node from an argument.

Definition at line 200 of file RawCOPPERFormat.cc.

201{
202 if (node_name == NULL || node_id == 0 || bufsize < 20) {
203 char err_buf[500];
204 sprintf(err_buf,
205 "[FATAL] Null pointer or strange node_id(%.8x)in an argument of this function. Exiting... : \n%s %s %d\n",
206 node_id,
207 __FILE__, __PRETTY_FUNCTION__, __LINE__);
208 printf("%s", err_buf); fflush(stdout);
209 B2FATAL(err_buf); // to reduce multiple error messages
210 } else {
211 sprintf(node_name, "cpr%u",
212 (10 * (node_id >> 28) + (node_id >> 24)) * 1000 +
213 (node_id & COPPERID_MASK));
214 }
215}

◆ GetNodeName() [2/2]

void GetNodeName ( int  n,
char *  node_name,
int  bufsize 
)
virtualinherited

Get hostname of a node from the RawCOPPER header.

Definition at line 182 of file RawCOPPERFormat.cc.

183{
184 unsigned int node_id = GetNodeID(n);
185 if (node_name == NULL || node_id == 0 || bufsize < 20) {
186 char err_buf[500];
187 sprintf(err_buf,
188 "[FATAL] Null pointer or strange node_id(%.8x)in an argument of this function. Exiting... : \n%s %s %d\n",
189 node_id,
190 __FILE__, __PRETTY_FUNCTION__, __LINE__);
191 printf("%s", err_buf); fflush(stdout);
192 B2FATAL(err_buf); // to reduce multiple error messages
193 } else {
194 sprintf(node_name, "cpr%u",
195 (10 * (node_id >> 28) + (node_id >> 24)) * 1000 +
196 (node_id & COPPERID_MASK));
197 }
198}
virtual unsigned int GetNodeID(int n)=0
get node-ID from data

◆ GetNumEntries()

virtual int GetNumEntries ( )
inlinevirtualinherited

get # of data blocks = (# of nodes)*(# of events)

Definition at line 49 of file RawDataBlockFormat.h.

49{ return m_num_events * m_num_nodes; }

◆ GetNumEvents()

virtual int GetNumEvents ( )
inlinevirtualinherited

get # of events in m_buffer

Definition at line 55 of file RawDataBlockFormat.h.

55{ return m_num_events; }

◆ GetNumFINESSEBlock()

int GetNumFINESSEBlock ( int  n)
virtualinherited

get # of FINNESEs which contains data

Implements RawCOPPERFormat.

Definition at line 30 of file RawCOPPERFormat_latest.cc.

31{
32 int cnt = 0;
33 for (int i = 0; i < 4; i++) {
34 if (GetFINESSENwords(n, i) > 0) {
35 cnt++;
36 }
37 }
38 return cnt;
39}

◆ GetNumNodes()

virtual int GetNumNodes ( )
inlinevirtualinherited

get # of data sources(e.g. # of COPPER boards) in m_buffer

Definition at line 52 of file RawDataBlockFormat.h.

52{ return m_num_nodes; }

◆ GetOffset1stFINESSE()

int GetOffset1stFINESSE ( int  n)
virtualinherited

get # of offset words for FINESSE slot A buffer position

Implements RawCOPPERFormat.

Definition at line 214 of file RawCOPPERFormat_latest.cc.

215{
216 char err_buf[500];
217 sprintf(err_buf, "[FATAL] This function is not supported.(block %d) Exiting...: \n%s %s %d\n",
218 n, __FILE__, __PRETTY_FUNCTION__, __LINE__);
219 printf("[DEBUG] %s\n", err_buf);
220 B2FATAL(err_buf);
221 return 0;
222}

◆ GetOffset2ndFINESSE()

int GetOffset2ndFINESSE ( int  n)
virtualinherited

get # of offset words for FINESSE slot B buffer position

Reimplemented from RawCOPPERFormat.

Definition at line 225 of file RawCOPPERFormat_latest.cc.

226{
227 char err_buf[500];
228 sprintf(err_buf, "[FATAL] This function is not supported.(block %d) Exiting...: \n%s %s %d\n",
229 n, __FILE__, __PRETTY_FUNCTION__, __LINE__);
230 printf("[DEBUG] %s\n", err_buf);
231 B2FATAL(err_buf);
232 return 0;
233}

◆ GetOffset3rdFINESSE()

int GetOffset3rdFINESSE ( int  n)
virtualinherited

get # of offset words for FINESSE slot C buffer position

Reimplemented from RawCOPPERFormat.

Definition at line 236 of file RawCOPPERFormat_latest.cc.

237{
238 char err_buf[500];
239 sprintf(err_buf, "[FATAL] This function is not supported.(block %d) Exiting...: \n%s %s %d\n",
240 n, __FILE__, __PRETTY_FUNCTION__, __LINE__);
241 printf("[DEBUG] %s\n", err_buf);
242 B2FATAL(err_buf);
243 return 0;
244}

◆ GetOffset4thFINESSE()

int GetOffset4thFINESSE ( int  n)
virtualinherited

get # of offset words for FINESSE slot D buffer position

Reimplemented from RawCOPPERFormat.

Definition at line 246 of file RawCOPPERFormat_latest.cc.

247{
248 char err_buf[500];
249 sprintf(err_buf, "[FATAL] This function is not supported.(block %d) Exiting...: \n%s %s %d\n",
250 n, __FILE__, __PRETTY_FUNCTION__, __LINE__);
251 printf("[DEBUG] %s\n", err_buf);
252 B2FATAL(err_buf);
253 return 0;
254}

◆ GetOffsetFINESSE()

int GetOffsetFINESSE ( int  n,
int  finesse 
)
virtualinherited

get # of offset words

Definition at line 36 of file RawCOPPERFormat.cc.

37{
38 switch (finesse_num) {
39 case 0 :
40 return GetOffset1stFINESSE(n);
41 break;
42 case 1 :
43 return GetOffset2ndFINESSE(n);
44 break;
45 case 2 :
46 return GetOffset3rdFINESSE(n);
47 break;
48 case 3 :
49 return GetOffset4thFINESSE(n);
50 break;
51 default :
52 break;
53 }
54
55 char err_buf[500];
56 sprintf(err_buf, "[FATAL] Specifined FINESSE number( = %d ) is invalid. Exiting...\n%s %s %d\n", finesse_num,
57 __FILE__, __PRETTY_FUNCTION__, __LINE__);
58 printf("%s", err_buf); fflush(stdout);
59 B2FATAL(err_buf);
60}
virtual int GetOffset1stFINESSE(int n)=0
get # of offset words for FINESSE slot A buffer position
virtual int GetOffset2ndFINESSE(int n)
get # of offset words for FINESSE slot B buffer position
virtual int GetOffset4thFINESSE(int n)
get # of offset words for FINESSE slot D buffer position
virtual int GetOffset3rdFINESSE(int n)
get # of offset words for FINESSE slot C buffer position

◆ GetPreAllocFlag()

virtual int GetPreAllocFlag ( )
inlinevirtualinherited

get malloc_flag

Definition at line 58 of file RawDataBlockFormat.h.

58{ return m_use_prealloc_buf; }

◆ GetWholeBuffer()

int * GetWholeBuffer ( )
virtualinherited

get pointer to buffer(m_buffer)

Definition at line 119 of file RawDataBlockFormat.cc.

120{
121 return m_buffer;
122}

◆ PackDetectorBuf() [1/2]

int * PackDetectorBuf ( int *  packed_buf_nwords,
int *const(&)  detector_buf_ch[MAX_PCIE40_CH],
int const(&)  nwords_ch[MAX_PCIE40_CH],
RawCOPPERPackerInfo  rawcpr_info 
)
virtual

Pack data for PCIe40 data-format.

Reimplemented from RawCOPPERFormat.

Definition at line 295 of file PostRawCOPPERFormat_latest.cc.

299{
300 int* packed_buf = NULL;
301 int poswords_to = 0;
302
303 // calculate the event length
304 int length_nwords = tmp_header.GetHdrNwords() + tmp_trailer.GetTrlNwords();
305
306 for (int i = 0; i < MAX_PCIE40_CH; i++) {
307 if (detector_buf_ch[ i ] == NULL || nwords_ch[ i ] <= 0) continue; // for an empty FINESSE slot
308 length_nwords += nwords_ch[ i ];
309 length_nwords += static_cast<int>(SIZE_B2LHSLB_HEADER) + SIZE_B2LFEE_HEADER + SIZE_B2LFEE_TRAILER + SIZE_B2LHSLB_TRAILER;
310 }
311
312 // allocate buffer
313 packed_buf = new int[ length_nwords ];
314 memset(packed_buf, 0, sizeof(int) * length_nwords);
315
316 //
317 // Fill RawHeader
318 //
319 tmp_header.SetBuffer(packed_buf);
320
321 packed_buf[ tmp_header.POS_NWORDS ] = length_nwords; // total length
322 packed_buf[ tmp_header.POS_VERSION_HDRNWORDS ] =
323 0x7f7f0000
324 | ((DATA_FORMAT_VERSION << tmp_header.FORMAT_VERSION_SHIFT) & tmp_header.FORMAT_VERSION__MASK)
325 | tmp_header.RAWHEADER_NWORDS; // ver.#, header length
326 packed_buf[ tmp_header.POS_EXP_RUN_NO ] = (rawcpr_info.exp_num << 22)
327 | (rawcpr_info.run_subrun_num & 0x003FFFFF); // exp. and run #
328 packed_buf[ tmp_header.POS_EVE_NO ] = rawcpr_info.eve_num; // eve #
329 packed_buf[ tmp_header.POS_TTCTIME_TRGTYPE ] = (rawcpr_info.tt_ctime & 0x7FFFFFF) << 4; // tt_ctime
330 packed_buf[ tmp_header.POS_TTUTIME ] = rawcpr_info.tt_utime; // tt_utime
331 packed_buf[ tmp_header.POS_NODE_ID ] = rawcpr_info.node_id; // node ID
332
333 // fill the positions of finesse buffers
334 int ch = 0;
335 packed_buf[ tmp_header.POS_CH_POS_TABLE + ch ] = tmp_header.RAWHEADER_NWORDS;
336 for (int i = 1; i < MAX_PCIE40_CH; i++) {
337 ch = i;
338 if (nwords_ch[ ch - 1 ] == 0) {
339 packed_buf[ tmp_header.POS_CH_POS_TABLE + ch ] = packed_buf[ tmp_header.POS_CH_POS_TABLE + (ch - 1) ];
340 } else {
341 packed_buf[ tmp_header.POS_CH_POS_TABLE + ch ] = packed_buf[ tmp_header.POS_CH_POS_TABLE + (ch - 1) ] +
342 nwords_ch[ ch - 1 ] + SIZE_B2LHSLB_HEADER + SIZE_B2LFEE_HEADER + SIZE_B2LFEE_TRAILER + SIZE_B2LHSLB_TRAILER;
343 }
344 }
345 poswords_to += tmp_header.GetHdrNwords();
346
347 // Fill FINESSE buffer
348 for (int i = 0; i < MAX_PCIE40_CH; i++) {
349 if (detector_buf_ch[ i ] == NULL || nwords_ch[ i ] <= 0) continue; // for an empty FINESSE slot
350
351 // Fill b2link HSLB header
352 packed_buf[ poswords_to + POS_B2LHSLB_MAGIC ] = 0xffaa0000 | (0xffff & rawcpr_info.eve_num);
353 poswords_to += SIZE_B2LHSLB_HEADER;
354
355 // Fill b2link FEE header
356 packed_buf[ poswords_to + POS_B2L_CTIME ] = (rawcpr_info.b2l_ctime & 0x7FFFFFF) << 4;
357 poswords_to += SIZE_B2LFEE_HEADER;
358
359 // copy the 1st Detector Buffer
360 memcpy(packed_buf + poswords_to, detector_buf_ch[ i ], nwords_ch[ i ]*sizeof(int));
361 poswords_to += nwords_ch[ i ];
362
363 // Fill b2link FEE trailer
364 unsigned int crc16 = 0;
365 packed_buf[ poswords_to + POS_B2LFEE_ERRCNT_CRC16 ] =
366 ((0xffff & rawcpr_info.eve_num) << 16) | (crc16 &
367 0xffff); // Error count is stored in this buffer for ver.2 format but it is set to zero here.
368 poswords_to += SIZE_B2LFEE_TRAILER;
369
370 // Fill b2link HSLB trailer
371 packed_buf[ poswords_to + POS_B2LHSLB_TRL_MAGIC ] = 0xff550000;
372 poswords_to += SIZE_B2LHSLB_TRAILER;
373
374 }
375
376 // Fill RawTrailer
377 packed_buf[ poswords_to + tmp_trailer.POS_TERM_WORD ] = tmp_trailer.MAGIC_WORD_TERM_TRAILER;
378 poswords_to += tmp_trailer.GetTrlNwords();
379
380 *packed_buf_nwords = poswords_to;
381
382 return packed_buf;
383}
unsigned int b2l_ctime
32bit unitx time at trigger timing distributed by FTSW. For details, see Nakao-san's belle2link user ...
unsigned int eve_num
Run # and subrun # ( 22bit )
unsigned int tt_ctime
Node ID (32bit)
unsigned int tt_utime
27bit clock ticks at trigger timing distributed by FTSW. For details, see Nakao-san's belle2link user...
unsigned int node_id
Event Number (32bit)
unsigned int run_subrun_num
Experiment number (10bit)
unsigned int exp_num
Experiment number (10bit)
void SetBuffer(int *bufin)
set buffer
int GetHdrNwords()
get contents of header

◆ PackDetectorBuf() [2/2]

int * PackDetectorBuf ( int *  packed_buf_nwords,
int *  detector_buf_1st,
int  nwords_1st,
int *  detector_buf_2nd,
int  nwords_2nd,
int *  detector_buf_3rd,
int  nwords_3rd,
int *  detector_buf_4th,
int  nwords_4th,
RawCOPPERPackerInfo  rawcprpacker_info 
)
virtual

Pack data (format ver. = -1 -> Select the latest format version)

Implements RawCOPPERFormat.

Definition at line 278 of file PostRawCOPPERFormat_latest.cc.

284{
285 char err_buf[500];
286 sprintf(err_buf, "[FATAL] This function is not supported. (%u) Exiting...: \n%s %s %d\n",
287 rawcpr_info.eve_num,
288 __FILE__, __PRETTY_FUNCTION__, __LINE__);
289 printf("[DEBUG] %s\n", err_buf);
290 B2FATAL(err_buf);
291 return NULL;
292}

◆ PrintData()

void PrintData ( int *  buf,
int  nwords 
)
virtualinherited

print data

Definition at line 161 of file RawDataBlockFormat.cc.

162{
163 printf("[DEBUG] ");
164 for (int i = 0; i < nwords; i++) {
165 printf("%.8x ", buf[ i ]);
166 if (i % 10 == 9) printf("\n[DEBUG] ");
167 }
168 printf("\n[DEBUG] ");
169 printf("\n");
170 return;
171}

◆ SetBuffer()

void SetBuffer ( int *  bufin,
int  nwords,
int  delete_flag,
int  num_events,
int  num_nodes 
)
virtualinherited

set buffer ( delete_flag : m_buffer is freeed( = 0 )/ not freeed( = 1 ) in Destructer )

Definition at line 131 of file RawDataBlockFormat.cc.

132{
133
134 if (bufin == NULL) {
135 char err_buf[500];
136 sprintf(err_buf, "[DEBUG] bufin is NULL. Exting...\n");
137 printf("%s", err_buf); fflush(stdout);
138 B2FATAL(err_buf);
139 }
140
141 if (!m_use_prealloc_buf && m_buffer != NULL) delete[] m_buffer;
142
143 if (delete_flag == 0) {
144 m_use_prealloc_buf = true;
145 } else {
146 m_use_prealloc_buf = false;
147 }
148
149 m_nwords = nwords;
150 m_buffer = bufin;
151
152 m_num_nodes = num_nodes;
153 m_num_events = num_events;
154
155 return;
156
157}

◆ TotalBufNwords()

int TotalBufNwords ( )
virtualinherited

Get total length of m_buffer.

Definition at line 101 of file RawDataBlockFormat.cc.

102{
103 return m_nwords;
104}

Member Data Documentation

◆ m_buffer

int* m_buffer
protectedinherited

Buffer.

Definition at line 98 of file RawDataBlockFormat.h.

◆ m_num_events

int m_num_events
protectedinherited

number of events in this object

Definition at line 95 of file RawDataBlockFormat.h.

◆ m_num_nodes

int m_num_nodes
protectedinherited

number of nodes in this object

Definition at line 92 of file RawDataBlockFormat.h.

◆ m_nwords

int m_nwords
protectedinherited

number of words of buffer

Definition at line 89 of file RawDataBlockFormat.h.

◆ m_use_prealloc_buf

int m_use_prealloc_buf
protectedinherited

not recorded

flag for deleting m_buffer in destructer( 0:delete, 1: not delete) When using pre-allocated buffer, the buffer should be reused and not deleted in the destructer

Definition at line 102 of file RawDataBlockFormat.h.

◆ tmp_header

RawHeader_latest tmp_header
inherited

header ( not recorded )

Definition at line 260 of file RawCOPPERFormat_latest.h.

◆ tmp_trailer

RawTrailer_latest tmp_trailer
inherited

trailer ( not recorded )

Definition at line 263 of file RawCOPPERFormat_latest.h.


The documentation for this class was generated from the following files: