AlcapDAQ  1
Macros | Functions | Variables
old_ebuser.cpp File Reference
#include <stdio.h>
#include "midas.h"
#include "mevb.h"
#include "ybos.h"
#include "mucap_compress.h"

Go to the source code of this file.

Macros

#define NUMCRATES   5
 

Functions

INT eb_begin_of_run (INT, char *, char *)
 
INT eb_end_of_run (INT, char *)
 
INT ebuser (INT, EBUILDER_CHANNEL *, EVENT_HEADER *, void *, INT *)
 
eb_user()

Hook to the event builder task after the reception of all fragments of the same serial number. The destination event has already the final EVENT_HEADER setup with the data size set to 0. It is than possible to add private data at this point using the proper bank calls.

The ebch[] array structure points to nfragment channel structure with the following content: {verbatim} typedef struct { char name[32]; // Fragment name (Buffer name). DWORD serial; // Serial fragment number. char *pfragment; // Pointer to fragment (EVENT_HEADER *) ... } EBUILDER_CHANNEL; {verbatim}

The correct code for including your own MIDAS bank is shown below where { TID_xxx} is one of the valid Bank type starting with { TID_} for midas format or { xxx_BKTYPE} for Ybos data format. { bank_name} is a 4 character descriptor. { pdata} has to be declared accordingly with the bank type. Refers to the ebuser.c source code for further description.

{ It is not possible to mix within the same destination event different event format!}

{verbatim} Event is empty, fill it with BANK_HEADER If you need to add your own bank at this stage

bk_init(pevent); bk_create(pevent, bank_name, TID_xxxx, &pdata); pdata++ = ...; dest_size = bk_close(pevent, pdata); pheader->data_size = *dest_size + sizeof(EVENT_HEADER); {verbatim}

For YBOS format, use the following example.

{verbatim} ybk_init(pevent); ybk_create(pevent, "EBBK", I4_BKTYPE, &pdata); pdata++ = 0x12345678; pdata++ = 0x87654321; dest_size = ybk_close(pevent, pdata); dest_size *= 4; pheader->data_size = *dest_size + sizeof(YBOS_BANK_HEADER); {verbatim}

Parameters
nfragNumber of fragment.
ebchStructure to all the fragments.
pheaderDestination pointer to the header.
peventDestination pointer to the bank header.
dest_sizeDestination event size in bytes. event builder user code for private data filtering.
Returns
EB_SUCCESS
INT eb_user (INT nfrag, EBUILDER_CHANNEL *ebch, EVENT_HEADER *pheader, void *pevent, INT *dest_size)
 

Variables

INT lModulo = 100
 

Macro Definition Documentation

#define NUMCRATES   5

Definition at line 52 of file old_ebuser.cpp.

Function Documentation

INT eb_begin_of_run ( INT  rn,
char *  UserField,
char *  error 
)
eb_begin_of_run()

Hook to the event builder task at PreStart transition. {verbatim} {verbatim}

Parameters
rnrun number
UserFieldargument from /Ebuilder/Settings
errorerror string to be passed back to the system.
Returns
EB_SUCCESS

Definition at line 145 of file ebuser.cpp.

References compress_load_all(), EB_SUCCESS, ebch, ebset, enabled, FALSE, hDB, MAX_CHANNELS, NUMCRATES, size, sprintf(), EBUILDER_SETTINGS::trigger_mask, and EBUILDER_CHANNEL::trigger_mask.

146 {
147 #if 0
148  extern EBUILDER_SETTINGS ebset;
150  extern HNDLE hDB;
151 
152  int n;
153  int mask = 0;
154 
155  char keyName[256];
156  BOOL enabled;
157  int size;
158 
159  /*
160  * Determine which crates are enabled and set up the mask
161  * accordingly.
162  */
163  for(n = 1; n <= NUMCRATES; n++) {
164  sprintf(keyName, "/Equipment/Crate %d/Settings/Enabled", n);
165  size = sizeof(enabled);
166  db_get_value(hDB, 0, keyName, &enabled, &size, TID_BOOL, FALSE);
167  if(size == sizeof(enabled) && enabled) {
168  ebch[n-1].trigger_mask = (1 << (n-1));
169  mask |= ebch[n-1].trigger_mask;
170  } else {
171  ebch[n-1].trigger_mask = 0;
172  }
173  }
174 
175  cm_msg(MINFO, "eb_begin_of_run", "Setting event mask to 0x%x", mask);
176  ebset.trigger_mask = mask;
177 #endif
178 
179  // Initialize online compression
181 
182  return EB_SUCCESS;
183 }
INT eb_end_of_run ( INT  rn,
char *  error 
)
eb_end_of_run()

Hook to the event builder task at completion of event collection after receiving the Stop transition. {verbatim} {verbatim}

Parameters
rnrun number
errorerror string to be passed back to the system.
Returns
EB_SUCCESS

Definition at line 193 of file ebuser.cpp.

References EB_SUCCESS.

194 {
195  return EB_SUCCESS;
196 }
INT eb_user ( INT  nfrag,
EBUILDER_CHANNEL ebch,
EVENT_HEADER *  pheader,
void *  pevent,
INT *  dest_size 
)

Definition at line 187 of file old_ebuser.cpp.

References compress_event(), EB_SUCCESS, i, EBUILDER_CHANNEL::pfragment, and printf().

190 {
191  // Initialize output event
192  bk_init32(pevent);
193 
194  // Loop over the event fragments, performing compression into the output event
195  for(int i = 0; i < nfrag; i++) {
196  void *fragment = ebch[i].pfragment;
197 
198  if(fragment != NULL) {
199  compress_event(((EVENT_HEADER *) fragment) + 1, pevent);
200  pheader->serial_number =
201  ((EVENT_HEADER *) ebch[i].pfragment)->serial_number;
202  }
203  }
204 
205  // Set the size of the output event properly
206  pheader->data_size = *dest_size = bk_size(pevent);
207 
208  printf("Returning size %d\n", pheader->data_size);
209 
210  return EB_SUCCESS;
211 }
INT ebuser ( INT  ,
EBUILDER_CHANNEL ,
EVENT_HEADER *  ,
void *  ,
INT *   
)

Variable Documentation

INT lModulo = 100

Definition at line 59 of file old_ebuser.cpp.