Subversion Repositories f9daq

Rev

Blame | Last modification | View Log | RSS feed

  1. #ifndef _EVENT_H_
  2. #define _EVENT_H_
  3. #ifdef COMMENT
  4. /*--------------------------------------------------------------------------*
  5.  *                                                                          *
  6.  *              HERA-B  Online  Event  Format  Structures                   *
  7.  *                                                                          *
  8.  *                                                                          *
  9.  *    Hera-B events are are formatted online as described in the memo:      *
  10.  *    "Protocols & Data Formats in Hera-B" available on the DAQ-Notes       *
  11.  *    WWW page. The format consisted of one or more nested data blocks      *
  12.  *    as illustrated below. Each block contains a header, a data field      *
  13.  *    and a trailer. The data field of many blocks (e.g. Event and SLB      *
  14.  *    blocks) is composed of additional block of similar format. For        *
  15.  *    example, the data portion of an SLB block consists of one or more     *
  16.  *    FED blocks. This is illustrated in the following example, where       *
  17.  *    EVTH/EVTT are the event header/trailer, SLBH/SLBT are the SLB         *
  18.  *    block header/trailer and FEDH is the SLB sub-block.                   *
  19.  *                                                                          *
  20.  *       +---+---+---+-...-+---+-...-+---+---+-...-+---+---+                *
  21.  *       | E | S | F |  d  | F |  d  | S | S |     | S | E |                *
  22.  *       | V | L | E |  a  | E |  a  | L | L |     | L | V |                *
  23.  *       | T | B | D |  t  | D |  t  | B | B |     | B | T |                *
  24.  *       | H | H | H |  a  | H |  a  | T | H |     | T | T |                *
  25.  *       +---+---+---+-...-+---+-...-+---+---+-...-+---+---+                *
  26.  *                                                                          *
  27.  *    Block alignment:                                                      *
  28.  *    SLB and Event level blocks are aligned on a long word boundaries.     *
  29.  *    If an SLB block has a length that is not a multiple of 4, the         *
  30.  *    header length field will reflect this fact, but the following block   *
  31.  *    will not start until the next 4-byte boundary. The FED sub-blocks     *
  32.  *    within the SLB block also have long-word alignment. The length        *
  33.  *    field of the FED sub-block does not include any additional padding    *
  34.  *    to expand the field length. Padding bytes are undefined, but it is    *
  35.  *    recommended that they be filled with zeroes.                          *
  36.  *                                                                          *
  37.  *--------------------------------------------------------------------------*/
  38. #endif
  39.  
  40. #ifdef __cplusplus
  41. extern "C" {
  42. #endif
  43.  
  44. /*********************************
  45.  *
  46.  *    Record IDs -
  47.  *
  48.  *    Note: The definition of most record IDs are specific to the
  49.  *          individual components i.e. the record type is uniquely
  50.  *          identified by the combination of the component ID and
  51.  *          the record ID. The record IDs are therefore left to the
  52.  *          disgression of the detector groups. The IDs listed here
  53.  *          are those used by the central DAQ, and several suggested
  54.  *
  55.  *********************************/
  56. #define RID_MASK_ERROR      0x8000     /* Error in Record */
  57. #define RID_NORMAL_EVENT    0x3000     /* Normal/error event envelope  */
  58. #define RID_ERROR_EVENT     0xb000     /* - with error */
  59. #define RID_NORMAL_SLB0     0x2000     /* Normal standard SLB    */
  60. #define RID_ERROR_SLB0      0xa000     /* - with error */
  61. #define RID_SPARSE_SLB0     0x2001     /* - with sparse data  */
  62. #define RID_NORMAL_SLBDBG   0x2800     /* Addidtional SLB record for debugging */
  63. #define RID_ERROR_SLBDBG    0xa800     /* - with error */
  64. #define RID_SPARSE_SLBDBG   0x2801     /* - with sparse data */
  65. #define RID_NORMAL_FEDRAW   0x1000     /* Normal/Error raw FED data    */
  66. #define RID_ERROR_FEDRAW    0x9000     /*       (component dependent)  */
  67. #define RID_NORMAL_DEFAULT_SPARSE   0x100A     /* Normal/Error sparsified data */
  68. #define RID_NORMAL_SPARSE   0x1001     /* Normal/Error sparsified data */
  69. #define RID_ERROR_SPARSE    0x9001     /*       (component dependent)  */
  70. #define RID_NORMAL_FEDDBG   0x1800     /* Normal/Error raw FED data    */
  71. #define RID_ERROR_FEDDBG    0x9800     /*       (component dependent)  */
  72. #define RID_SPARSE_FEDDBG   0x1801     /* Normal/Error sparsified data */
  73. #define RID_NORMAL_COOKED   0x1002     /* Normal/Error cooked FED data */
  74. #define RID_ERROR_COOKED    0x9002     /*       (component dependent)  */
  75. /****************
  76. * Error Masks -
  77. * Note: The mask will be non-zero on error
  78. *       if the data given is in import format
  79. *       This is basically a bit test for the first bit
  80. *********************/
  81. #define RID_ERROR_MASK(i) (((i)&0x8000)?(i):0)
  82. #define RID_MASK_FEDRAW(i) RID_ERROR_MASK(i)
  83. #define RID_MASK_EVENT(i)  RID_ERROR_MASK(i)
  84. #define RID_MASK_SLB0(i)   RID_ERROR_MASK(i)
  85. #define RID_MASK_SPARSE(i) RID_ERROR_MASK(i)
  86. #define RID_MASK_COOKED(i) RID_ERROR_MASK(i)
  87. /*********************************
  88.  *
  89.  *    Event record format format
  90.  *
  91.  *********************************/
  92. struct EVENT_HDR {
  93.   int length;             /* event length including header and trailer            */
  94.   unsigned short recid;   /* event block ID (0x3000 - 0x3fff)                     */
  95.   short format;           /* format identifier                                    */
  96.   int   sltevt;           /* second level trigger number                          */
  97.   int   compmask;         /* component mask (defined in component.h)              */
  98.   int   evtmask;          /* event mask (trigger code, or etc.)                   */
  99. };
  100.  
  101. typedef struct EVENT_HDR envelope;     /* for backwards compatibility */
  102. typedef struct EVENT_HDR EVENT_HDR;
  103.  
  104. struct EVENT_TAIL {
  105.   int sltevt;};           /* second level trigger number                 */
  106.  
  107. typedef struct EVENT_TAIL EVENT_TAIL;
  108.  
  109. #define RUNTYPE(ptr)  (((struct EVENT_HDR *) ptr)->evtmask >> 16)
  110. #define RUNTYPEI(ptr) (import_i(((struct EVENT_HDR *) ptr)->evtmask) >> 16)
  111.  
  112. /*********************************
  113.  *
  114.  *    SLB data block format
  115.  *
  116.  *********************************/
  117.  
  118. struct SLB_HDR {
  119.   int   length;           /* SLB block length including header and trailer */
  120.   unsigned short recid;   /* SLB record ID (0x2000 - 0x2fff)               */
  121.   short fltevt;           /* FLT event number                              */
  122.   short compid;           /* component id (defined in component.h)         */
  123.   short slbid;            /* identified of the SLB generating this block   */
  124.   int   nodeid;};         /* destination node                              */
  125.  
  126. typedef struct SLB_HDR slbrec;        /* for backwards compatibility       */
  127. typedef struct SLB_HDR SLB_HDR;
  128.  
  129. struct SLB_SUBHDR {
  130.   short length;           /* FED block length including header and trailer */
  131.   short fedid;            /* ID of FED producing this block                */
  132.   unsigned short recid;   /* FED record ID (0x1000 - 0x1fff)               */
  133.   short bxid;};           /* Bx number                                     */
  134.  
  135. typedef struct SLB_SUBHDR SLB_SUBHDR;
  136.  
  137. struct SLB_TAIL {
  138.   unsigned short recid;   /* Record ID                                     */
  139.   short fltevt;};         /* FLT event number                              */
  140.  
  141. typedef struct SLB_TAIL SLB_TAIL;
  142.  
  143. /*********************************
  144.  *
  145.  *    FED data block format
  146.  *
  147.  *    Note that the header and trailer described here are used only
  148.  *    on the readout links. This bloxk must be padded to a 48-bit
  149.  *    boundary to allow it to be transferred over the sharc link. The
  150.  *    length field doesn't include the padding bytes.
  151.  *
  152.  *********************************/
  153. struct FED_HDR {
  154.   short length;           /* FED block length including header and trailer */
  155.   unsigned short recid;   /* FED record ID (0x1000 - 0x1fff)               */
  156.   short fltevt;           /* FLT event number                              */
  157.   short bxid;             /* Bx number                                     */
  158.   short compid;           /* component id (defined in component.h)         */
  159.   short fedid;};          /* ID of FED producing this block                */
  160.  
  161. typedef struct FED_HDR FED_HDR;
  162.  
  163. struct FED_TAIL {
  164.   short fltevt;};         /* FLT event number                              */
  165.  
  166. typedef struct FED_TAIL FED_TAIL;
  167.  
  168. /*********************************
  169.  *
  170.  *    Event data provided by the event builder.
  171.  *    CompID: 0x0000, RecID: 0x2000
  172.  *
  173.  *********************************/
  174. struct EVT_DATA {
  175.   int run_number;               /* Run number                 */
  176.   int event_time;               /* Time event was built       */
  177.   int event_status;             /* event status/error code    */
  178.   int flt_status;               /* FLT trigger number         */
  179.   int slp_node;                 /* SLP processing node        */
  180.   int slt_status;               /* SLT trigger number/status  */
  181.   int exp_number;               /* Experiment Number          */
  182.   int farm_node;                /* Farm node                  */
  183.   int   BX_long;                /* bits 0 to 31 of the BX tag (at time trigger issued)  */
  184.   short BX_upper;               /* bits 32 to 47 of the BX tag (at time trigger issued) */
  185.   short FCS_tcode;              /* FCS trigger code for event                           */
  186.   short physBX;                 /* physical BX == hera bucket ID of event               */
  187.   short FLT_BX;                 /* pipeline cell triggered on by FLT for this event     */
  188.   short fltevt;                 /* flt event number as delivered by FCS                 */
  189.   short fill;
  190.   int   dbKey;                  /* key to tables used to process event      */
  191.   int   dbVersion;              /* version of key table used for this event */
  192. };
  193. typedef struct EVT_DATA EVT_DATA;
  194.  
  195. struct EVT_DATA_RECORD {
  196.   SLB_HDR  hdr;
  197.   EVT_DATA data;
  198.   SLB_TAIL tail;};
  199.  
  200. typedef struct EVT_DATA_RECORD EVT_DATA_RECORD;
  201.  
  202. #ifdef __cplusplus
  203. }
  204. #endif
  205.  
  206. #endif
  207.