source: trunk/FACT++/src/FAD.h@ 12105

Last change on this file since 12105 was 12091, checked in by tbretz, 13 years ago
Updated to the latest event builder version which includes runEnd and runStart to control the memory of the processing threads.
File size: 11.3 KB
Line 
1#ifndef FACT_FAD_H
2#define FACT_FAD_H
3
4//---------------------------------------------------------------
5//
6// FAD internal structures
7//
8//---------------------------------------------------------------
9
10 //
11// Other definitions
12//
13#define MAX_ADDR 0xFF // highest address in Config-RAM
14#define BADDR_ROI 0x00 // Baseaddress ROI-Values
15#define BADDR_DAC 0x24 // Baseaddress DAC-Values
16#define BADDR_CONT_TRIGGER_TIME 0x2C // Baseaddress for the continouus trigger timing.
17#define ADDR_RUNNUMBER 0x2D //
18#define MAX_VAL 65535
19#define MAX_ROIVAL 1024
20#define MAX_DACVAL 65535
21
22#define NChannels 9
23#define NBins 1024
24#define NChips 4
25#define NTemp 4
26#define NDAC 8
27
28//
29// Data structures
30//
31
32typedef struct{
33 int hardID ; //hardware ID
34 int pos_i ; //geometrical positon row
35 int pos_j ; // column
36 int G_APD ; //G-APD identifier
37 double V_op ; //operation voltage
38 int HV_B ; //HV Board
39 int HV_C ; //HV Channel
40 double pos_X ; //geometrical position in pixel units
41 double pos_Y ; //
42} PIX_MAP ;
43
44
45typedef struct {
46
47 uint16_t start_package_flag;
48 uint16_t package_length;
49 uint16_t version_no;
50 uint16_t PLLLCK;
51
52 uint16_t trigger_crc;
53 uint16_t trigger_type;
54 uint32_t trigger_id;
55
56 uint32_t fad_evt_counter;
57 uint32_t REFCLK_frequency;
58
59 uint16_t board_id;
60 uint8_t zeroes;
61 int8_t adc_clock_phase_shift;
62 uint16_t number_of_triggers_to_generate;
63 uint16_t trigger_generator_prescaler;
64
65 uint64_t DNA;
66
67 uint32_t time;
68 uint32_t runnumber;
69
70 int16_t drs_temperature[NTemp];
71
72 int16_t dac[NDAC];
73
74} __attribute__((__packed__)) PEVNT_HEADER;
75
76typedef struct {
77uint16_t id;
78uint16_t start_cell;
79uint16_t roi;
80uint16_t filling;
81 int16_t adc_data[];
82} __attribute__((__packed__)) PCHANNEL;
83
84
85typedef struct {
86uint16_t package_crc;
87uint16_t end_package_flag;
88} __attribute__((__packed__)) PEVNT_FOOTER;
89
90#define NBOARDS 40 // max. number of boards
91#define NPIX 1440 // max. number of pixels
92#define NTMARK 160 // max. number of timeMarker signals
93#define MAX_SOCK 280 // NBOARDS * 7
94
95
96typedef union {
97 uint8_t B[8] ; //8 bytes
98 uint16_t S[4] ; //4 short
99 uint32_t I[2] ; //2 int
100 uint64_t L ; //1 long
101} L_WORD ;
102
103typedef union {
104 uint8_t B[4] ; //4 bytes
105 uint16_t S[2] ; //2 short
106 uint32_t I ; //1 int
107} I_WORD ;
108
109
110//---------------------------------------------------------------
111//
112// Data structures
113//
114//---------------------------------------------------------------
115
116typedef struct _EVENT {
117 uint16_t Roi ; // #slices per pixel (same for all pixels)
118 uint16_t RoiTM ; // #slices per pixel (same for all tmarks) [ 0 or Roi ]
119 uint32_t EventNum ; // EventNumber as from FADs
120 uint32_t TriggerNum ; // EventNumber as from FTM
121 uint16_t TriggerType ; // Trigger Type from FTM
122
123 uint32_t NumBoards ; // number of active boards included
124 uint8_t Errors[4] ; // indicator for mismatches
125
126 uint32_t SoftTrig ; // SoftTrigger Info (TBD)
127 uint32_t PCTime ; // epoch
128 uint32_t PCUsec ; // micro-seconds
129
130 uint32_t BoardTime[NBOARDS];//
131
132 int16_t StartPix[NPIX]; // First Channel per Pixel (Pixels sorted according Software ID) ; -1 if not filled
133
134 int16_t StartTM[NTMARK]; // First Channel for TimeMark (sorted Hardware ID) ; -1 if not filled
135
136 int16_t Adc_Data[]; // final length defined by malloc ....
137
138} __attribute__((__packed__)) EVENT ;
139
140
141
142//---------------------------------------------------------------
143
144typedef struct _RUN_HEAD {
145 uint32_t Version ;
146 uint32_t RunType ;
147 uint32_t RunTime ; //unix epoch for first event
148 uint32_t RunUsec ; //microseconds
149 uint16_t NBoard ; //#boards (always 40)
150 uint16_t NPix ; //#pixels (always 1440)
151 uint16_t NTm ; //#TM (always 160)
152 uint16_t Nroi ; //roi for pixels
153 uint16_t NroiTM ; //roi for TM <=0 if TM is empty
154
155//headers of all FAD-boards for first event ==> all FAD configs
156 PEVNT_HEADER *FADhead; // [ NBoards ] sorted Board Headers (according Hardware ID)
157
158//do we also have info about FTM config we want to add here ???
159} __attribute__((__packed__)) RUN_HEAD ;
160
161
162//---------------------------------------------------------------
163
164
165typedef struct _RUN_TAIL {
166 uint32_t nEventsOk ; //how many events were written
167 uint32_t nEventsRej; //how many events were rejected by SW-trig
168 uint32_t nEventsBad; //how many events were rejected by Error
169
170 uint32_t PCtime0 ; //time when first event received
171 uint32_t PCtimeX ; //time when last event received
172
173
174//probably more to come ...
175} __attribute__((__packed__)) RUN_TAIL ;
176
177
178
179//---------------------------------------------------------------
180
181#define MAX_RUN 8
182#define MAX_EVT 32768 //don't worry, for events is MAX_RUN*MAX_EVT
183
184typedef void* FileHandle_t ;
185
186typedef struct {
187 uint32_t runId ; //run number
188 uint32_t firstTime ; //epoch of first event received
189 uint32_t firstUsec ; //epoch of first event received
190 uint32_t lastTime ; //time when last event written so far
191 uint32_t closeTime ; //time when run should be closed
192 uint32_t maxEvt ; //maximum number of events to write
193 uint32_t actEvt ; //actual number of events written so far
194 uint32_t procEvt ; //actual number of events processed so far
195 int32_t lastEvt ; //last event of this run read so far
196 uint32_t nextEvt ; //next event number to be written
197 uint32_t waitEvt ; //event that would be ready to be written
198 int16_t fileId ; //<0 never opened, 0=open, >0 closed
199 int16_t procId ; //processing <0 never opened, 0=open, >0 closed
200 int16_t roi0 ; //roi for normal pixels
201 int16_t roi8 ; //roi for pixels8
202
203 FileHandle_t fileHd ; //fileHandle (NULL if not open)
204// int16_t ctrlId[MAX_EVT] ; //index to buffId (sorted list; -1 =end)
205// uint16_t buffId[MAX_EVT] ; //index to mBuffer(buffered raw data)
206} RUN_CTRL ;
207
208
209
210//---------------------------------------------------------------
211
212
213typedef struct {
214 int32_t evNum ;
215 int32_t fadNum ;
216 int32_t trgNum ;
217 int32_t trgTyp ;
218 uint32_t runNum ;
219 int32_t fadLen ;
220 int32_t nBoard ;
221 int16_t board[ NBOARDS ];
222 int16_t nRoi ;
223 int16_t nRoiTM ;
224 int16_t mBoard ;
225 uint32_t pcTime ;
226 int32_t evtLen ;
227 int16_t toWrite ;
228 uint8_t Errors[4] ;
229 EVENT *fEvent ;
230 PEVNT_HEADER *FADhead; //
231
232} WRK_DATA ; //internal to eventbuilder
233
234
235//---------------------------------------------------------------
236
237
238typedef struct {
239 int frstPtr ; //first used index
240 int lastPtr ; //last used index
241 int evtBuf[MAX_EVT*MAX_RUN] ; //index of event in mBuffer
242 int evtStat[MAX_EVT*MAX_RUN] ; //status of event:
243 // -1=empty
244 // 1..NBoards reading #Boards
245 // 90-99 : end reading
246 //128-255: processing
247 //256-
248 //201=start processing
249 //299=end processing
250 //901=start writing
251 //999=finished writing
252 //(TO BE REVISED)
253
254 uint32_t pcTime[MAX_EVT*MAX_RUN] ; //time when last action happened
255} EVT_CTRL ; //internal to eventbuilder
256
257//---------------------------------------------------------------
258
259// FIXME: This doesn't neet to be here... it is inlcuded in all
260// data processors
261
262#include <netinet/in.h>
263
264typedef struct {
265 struct sockaddr_in sockAddr ;
266 int sockDef ; //<0 not defined/ ==0 not to be used/ >0 used
267} FACT_SOCK ; //internal to eventbuilder
268
269
270//---------------------------------------------------------------
271
272typedef struct {
273
274 //some info about what happened since start of program (or last 'reset')
275 uint32_t reset ; //#if increased, reset all counters
276 uint32_t numRead[MAX_SOCK] ; //how often succesfull read from N sockets per loop
277
278 uint64_t gotByte[NBOARDS] ; //#Bytes read per Board
279 uint32_t gotErr[NBOARDS] ; //#Communication Errors per Board
280 uint32_t evtGet; //#new Start of Events read
281 uint32_t evtTot; //#complete Events read
282 uint32_t evtErr; //#Events with Errors
283 uint32_t evtSkp; //#Events incomplete (timeout)
284
285 uint32_t procTot; //#Events processed
286 uint32_t procErr; //#Events showed problem in processing
287 uint32_t procTrg; //#Events accepted by SW trigger
288 uint32_t procSkp; //#Events rejected by SW trigger
289
290 uint32_t feedTot; //#Events used for feedBack system
291 uint32_t feedErr; //#Events rejected by feedBack
292
293 uint32_t wrtTot; //#Events written to disk
294 uint32_t wrtErr; //#Events with write-error
295
296 uint32_t runOpen; //#Runs opened
297 uint32_t runClose; //#Runs closed
298 uint32_t runErr; //#Runs with open/close errors
299
300
301 //info about current connection status
302 uint8_t numConn[NBOARDS] ; //#Sockets succesfully open per board
303
304} __attribute__((__packed__)) EVT_STAT ; //EventBuilder Status
305
306typedef struct {
307 //info about status of the main threads
308 int32_t readStat ; //read thread
309 int32_t procStat ; //processing thread(s)
310 int32_t writStat ; //write thread
311
312 //info about (current state of) the buffer
313 int32_t bufNew ; //# incomplete events in buffer
314 int32_t bufEvt ; //# complete events in buffer
315 int32_t bufTot ; //# total events currently in buffer
316 int32_t maxEvt ; //# maximum events in buffer past cycle
317 int32_t xxxEvt ; //# maximum events ever in buffer
318 uint64_t totMem; //# Bytes available in Buffer
319 uint64_t usdMem; //# Bytes currently used
320 uint64_t xxxMem; //max # Bytes ever used **
321 uint64_t maxMem; //max # Bytes used during past cycle
322
323 //counters
324 int32_t evtSkip ; //# incomplete Events skipped (timeout)
325 int32_t evtWrite ; //# Events written (or flushed if noWrite)
326 int32_t evtErr ; //# Events with errors
327 int32_t badRoiE; //# boards with wrong roi (inconsistent in event)
328 int32_t badRoiR; //# boards with wrong roi (inconsistent in run)
329 int32_t badRoiB; //# boards with wrong roi (inconsistent in board)
330 int32_t badRoi[NBOARDS]; //# boards with wrong roi
331
332 //rates
333 int32_t deltaT ; //time in milli-seconds for rates
334 int32_t rateNew ; //#New start events recieved
335 int32_t rateWrite ; //#Complete events written (or flushed)
336
337 //connections
338 int8_t numConn[NBOARDS] ; //#connections per board (at the moment)
339 int32_t errConn[NBOARDS] ; //#I/O errors per board (counter)
340 int32_t rateBytes[NBOARDS]; //#Bytes read this cycle **
341 int64_t totBytes[NBOARDS]; //#Bytes read (counter)
342
343
344 // ** // if counter and rates exist, do only update the rates in
345 // ** // real time;
346 // ** // counters will be updated only once per cycle based on rates
347
348} __attribute__((__packed__)) GUI_STAT ; //EventBuilder Status
349
350#endif
Note: See TracBrowser for help on using the repository browser.