AlcapDAQ  1
old_ebuser.cpp
Go to the documentation of this file.
1 /********************************************************************\
2 
3  Name: ebuser.c
4  Created by: Pierre-Andre Amaudruz
5 
6  Contents: User section for the Event builder
7 
8  $Log: ebuser.cpp,v $
9  Revision 1.2 2004/05/31 14:26:34 mucap
10  Commented out compression. (Leftover uncommitted change from run7)
11 
12  Revision 1.1 2003/07/17 18:52:54 fegray
13  Converted eventbuilder to C++.
14 
15  Revision 1.3 2003/05/13 19:27:04 mucap
16  Fixes to allow a subset of the crates to participate in an event. Also,
17  this pulls in Pierre's CVS changes to the generic eventbuilder code.
18 
19  Revision 1.2 2003/05/13 17:02:47 fegray
20  Changes to allow a subset of the crates to run.
21 
22  Revision 1.1 2003/05/13 16:21:16 mucap
23  First commit of MIDAS (Ethernet-based) event-builder.
24 
25  Revision 1.6 2002/09/28 00:49:08 pierre
26  Add EB_USER_ERROR example
27 
28  Revision 1.5 2002/09/25 18:38:03 pierre
29  correct: header passing, user field, abort run
30 
31  Revision 1.4 2002/07/13 05:46:10 pierre
32  added ybos comments
33 
34  Revision 1.3 2002/06/14 04:59:46 pierre
35  revised for ybos
36 
37  Revision 1.2 2002/01/17 23:34:29 pierre
38  doc++ format
39 
40  Revision 1.1.1.1 2002/01/17 19:49:54 pierre
41  Initial Version
42 
43 \********************************************************************/
44 
45 #include <stdio.h>
46 #include "midas.h"
47 #include "mevb.h"
48 #include "ybos.h"
49 
50 #include "mucap_compress.h"
51 
52 #define NUMCRATES 5
53 
54 INT eb_begin_of_run(INT, char *, char *);
55 INT eb_end_of_run(INT, char *);
56 INT ebuser(INT, EBUILDER_CHANNEL *, EVENT_HEADER *, void *, INT *);
57 
58 /* Globals */
59 INT lModulo = 100;
60 
61 /*--------------------------------------------------------------------*/
72 INT eb_begin_of_run(INT rn, char * UserField, char * error)
73 {
74  extern EBUILDER_SETTINGS ebset;
76  extern HNDLE hDB;
77 
78  int n;
79  int mask = 0;
80 
81  char keyName[256];
82  BOOL enabled;
83  int size;
84 
85  /*
86  * Determine which crates are enabled and set up the mask
87  * accordingly.
88  */
89  for(n = 1; n <= NUMCRATES; n++) {
90  sprintf(keyName, "/Equipment/Crate %d/Settings/Enabled", n);
91  size = sizeof(enabled);
92  db_get_value(hDB, 0, keyName, &enabled, &size, TID_BOOL, FALSE);
93  if(size == sizeof(enabled) && enabled) {
94  ebch[n-1].trigger_mask = (1 << (n-1));
95  mask |= ebch[n-1].trigger_mask;
96  } else {
97  ebch[n-1].trigger_mask = 0;
98  }
99  }
100 
101  cm_msg(MINFO, "eb_begin_of_run", "Setting event mask to 0x%x", mask);
102  ebset.trigger_mask = mask;
103 
104  // Initialize online compression
106 
107  return EB_SUCCESS;
108 }
109 
110 /*--------------------------------------------------------------------*/
121 INT eb_end_of_run(INT rn, char * error)
122 {
123  return EB_SUCCESS;
124 }
125 
126 /*--------------------------------------------------------------------*/
187 INT eb_user(INT nfrag
188  , EBUILDER_CHANNEL * ebch, EVENT_HEADER *pheader
189  , void *pevent, INT * dest_size)
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 }
212