8 #define SUPPRESS_DRIFT_CHAMBER_HITS_OVERFLOW_WARNINGS 1
12 #define FADC250_MAX_CHAN 16
13 #define FADC250_MAX_HITS 4
14 #define FADC250_MAX_WINDOW 512
15 #define FADC250_MAX_LATENCY 2048
16 #define FADC250_MAX_NSB 512
17 #define FADC250_MAX_NSA 512
18 #define FADC250_WINDOW_WIDTH 50
21 #define FADC250_BL_HEADER(slot,blnum,cnt) {*dabufp++ = 0x80000000 | (slot << 22) | (FADC250 << 18) | ((blnum&0x3ff) << 8) | cnt; }
22 #define FADC250_BL_TRAILER(slot,nwords) {*dabufp++ = 0x88000000 | (slot << 22) | nwords; }
24 #define FADC250_EV_HEADER(slot,trig) {*dabufp++ = 0x90000000 | (slot << 22) | (trig&0x3fffff); }
25 #define FADC250_EV_TS_LOW(timestamp) {*dabufp++ = 0x98000000 | (timestamp&(0x0000000000ffffffLLU)); }
26 #define FADC250_EV_TS_HIGH(timestamp) {*dabufp++ = (timestamp&(0x0000ffffff000000LLU)) >> 24; }
27 #define FADC250_EV_PARAM1(nsb,nsa,pl) {*dabufp++ = (nsb) << 20 | (nsa) << 11 | pl; }
29 #define FADC250_RW_HEADER(chan,ww) {*dabufp++ = 0xA0000000 | (chan << 23) | ww ; }
30 #define FADC250_RW_DATA(s1,s2) {*dabufp++ = (s1 << 16) | s2 ; }
32 #define FADC250_WI_SUM(chan,sum) {*dabufp++ = 0xA8000000 | (chan << 23) | (sum&0x3fffff) ; }
34 #define FADC250_RP_HEADER(chan,pn,fs) {*dabufp++ = 0xB0000000 | (chan << 23) | (pn << 21) | (fs) ; }
35 #define FADC250_RP_DATA(s1,s2) {*dabufp++ = (s1 << 16) | s2 ; }
37 #define FADC250_PI_SUM(chan,pn,sum) {*dabufp++ = 0xB8000000 | (chan << 23) | (pn << 21) | (sum&0x7ffff) ; }
38 #define FADC250_PI_TIME(chan,pn,time) {*dabufp++ = 0xC0000000 | (chan << 23) | (pn << 21) | (time&0x7ffff); }
39 #define FADC250_PI_PED(chan,pn,ped,peak) {*dabufp++ = 0xD0000000 | (chan << 23) | (pn << 21) | ((ped&0x1ff)<<12) | (peak&0xfff); }
41 #define FADC250_FILLER {*dabufp++ = 0xF8000000; }
48 int ii, jj,
chan, hcnt, nwords;
51 unsigned int *start =
dabufp;
55 eventNum = (
event->eventid)&0xffffffff;
56 timestamp = (
event->trigtime);
57 hcnt =
event->hcount[(roc-1)][(slot-1)];
76 for (ii=0; ii<hcnt; ii++) {
92 printf(
"fadc250_write_data: ERROR: HIT overflow (%d) for "
93 "crate,slot,chan = %d,%d,%d (Bank will be corrupt)\n",
98 printf(
"fadc250_write_data: WARN: Too many hits (%d) for"
99 " (crate, slot, chan) = %d, %d, %d (truncating)\n",
107 for (ii=0; ii < jj; ii++) {
108 uint32_t peak = ped + chit[ii]->
hdata[0]/10;
117 if ((nwords%2) == 0) {
137 #define FADC125_MAX_CHAN 72
138 #define FADC125_MAX_HITS 4
139 #define FADC125_MAX_WINDOW 512
140 #define FADC125_MAX_LATENCY 2048
141 #define FADC125_MAX_NSB 512
142 #define FADC125_MAX_NSA 512
143 #define FADC125_WINDOW_WIDTH 50
146 #define FADC125_BL_HEADER(slot,blnum,cnt) {*dabufp++ = 0x80000000 | (slot << 22) | (FADC125 << 18) | ((blnum&0x3ff) << 8) | cnt; }
147 #define FADC125_BL_TRAILER(slot,nwords) {*dabufp++ = 0x88000000 | (slot << 22) | nwords; }
149 #define FADC125_EV_HEADER(slot,trig) {*dabufp++ = 0x90000000 | (slot << 22) | (trig&0x3fffff); }
150 #define FADC125_EV_TS_LOW(timestamp) {*dabufp++ = 0x98000000 | (timestamp&(0x0000000000ffffffLLU)); }
151 #define FADC125_EV_TS_HIGH(timestamp) {*dabufp++ = (timestamp&(0x0000ffffff000000LLU)) >> 24; }
153 #define FADC125_RW_HEADER(chan,ww) {*dabufp++ = 0xA0000000 | (chan << 20) | (ww&0x1fffff) ; }
154 #define FADC125_RW_DATA(s1,s2) {*dabufp++ = (s1 << 16) | s2 ; }
156 #define FADC125_WI_SUM(chan,sum) {*dabufp++ = 0xA8000000 | (chan << 20) | (sum&0x1fffff) ; }
158 #define FADC125_RP_HEADER(chan,pn,fs) {*dabufp++ = 0xB0000000 | (chan << 20) | (pn << 18) | (fs&0x3ffff) ; }
159 #define FADC125_RP_DATA(s1,s2) {*dabufp++ = (s1 << 16) | s2 ; }
161 #define FADC125_PI_SUM(chan,sum) {*dabufp++ = 0xB8000000 | (chan << 20) | (sum&0xfffff) ; }
162 #define FADC125_PI_TIME(chan,qf,time) {*dabufp++ = 0xC0000000 | (chan << 20) | (qf << 18) | (time&0xffff); }
163 #define FADC125_PI_PED(chan,pn,ped,peak) {*dabufp++ = 0xD0000000 | ((chan << 23)&0x0f) | (pn << 21) | ((ped&0x1ff)<<12) | (peak&0xfff) ; }
165 #define FADC125_FILLER {*dabufp++ = 0xF8000000; }
172 int ii, jj,
chan, hcnt, nwords;
175 unsigned int *start =
dabufp;
179 eventNum = (
event->eventid)&0xffffffff;
180 timestamp = (
event->trigtime);
181 hcnt =
event->hcount[(roc-1)][(slot-1)];
186 timestamp = timestamp >> 1;
205 for (ii=0; ii < hcnt; ii++) {
220 printf(
"fadc125_write_data: ERROR: HIT overflow (%d)"
221 " for (crate, slot, chan) = %d, %d, %d\n",
223 printf(
"fadc125_write_data: ERROR: "
224 "ROC Bank will be corrupted\n");
228 #ifndef SUPPRESS_DRIFT_CHAMBER_HITS_OVERFLOW_WARNINGS
229 printf(
"fadc125_write_data: WARN: Too many hits (%d)"
230 " for (crate, slot, chan) = %d, %d, %d\n",
239 for (ii=0; ii < jj; ii++) {
240 uint32_t peak = ped + chit[ii]->
hdata[0]/10;
251 if ((nwords%2) == 0) {
271 #define F1TDC32_MAX_CHAN 32
272 #define F1TDC32_MAX_HITS 8
273 #define F1TDC32_MAX_CHIPS 8
277 #define F1TDC32_BL_HEADER(slot,blnum,cnt) {*dabufp++ = 0x80000000 | (slot << 22) | (F1TDC32 << 18) | ((blnum&0x3ff) << 8) | cnt; }
278 #define F1TDC32_BL_TRAILER(slot,nwords) {*dabufp++ = 0x88000000 | (slot << 22) | nwords; }
280 #define F1TDC32_EV_HEADER(slot,trig) {*dabufp++ = 0x90000000 | (slot << 22)| (trig&0x3fffff); }
281 #define F1TDC32_EV_TS_LOW(timestamp) {*dabufp++ = 0x98000000 | (timestamp&(0x0000000000ffffffLLU)); }
282 #define F1TDC32_EV_TS_HIGH(timestamp) {*dabufp++ = (timestamp&(0x000000ffff000000LLU)) >> 24; }
289 #define F1TDC32_F1_HEADER(cdata,chip,chan_on_chip,trig,trig_time) {*dabufp++ = 0xC0000000 | ((cdata&0x1F) << 22) | (0 << 23) | (chip << 3) | (chan_on_chip << 0) | ((trig&0x3f) << 16) | ((trig_time&0x1ff) << 7); }
290 #define F1TDC32_F1_DATA(cdata,chip,chan_on_chip,time) {*dabufp++ = 0xB8000000 | ((cdata&0x1F) << 22) | (1 << 23) | (chip << 19) | (chan_on_chip << 16) | (time&0xffff); }
292 #define F1TDC32_FILLER(slot) {*dabufp++ = 0xF8000000 | (slot << 22); }
294 #define F1TDC32_CHIP_NUM(chan) (chan >> 2)
295 #define F1TDC32_CHAN_ON_CHIP(chan) ((chan & 0x03) << 1)
301 int ii, jj,
chan, hcnt, nwords;
302 int chip, chan_on_chip;
307 unsigned int *start =
dabufp;
311 eventNum = (
event->eventid)&0xffffffff;
312 timestamp = (
event->trigtime);
313 hcnt =
event->hcount[(roc-1)][(slot-1)];
323 tsdiv = (timestamp >> 3);
324 ts = tsdiv&0xffffffff;
342 if (chan_on_chip == 0) {
349 for (ii=0; ii<hcnt; ii++) {
365 printf(
"f1tdc32_write_data: ERROR: Too many hits for channel\n");
372 for (ii=0; ii < jj; ii++) {
383 F1TDC32_F1_TRAILER(cdata,(eventNum&0x3f),(ts&0x1ff),chan);
390 if ((nwords%2) == 0) {
410 #define F1TDC48_MAX_CHAN 48
411 #define F1TDC48_MAX_HITS 8
412 #define F1TDC48_MAX_CHIPS 6
416 #define F1TDC48_BL_HEADER(slot,blnum,cnt) {*dabufp++ = 0x80000000 | (slot << 22) | (F1TDC48 << 18) | ((blnum&0x3ff) << 8) | cnt; }
417 #define F1TDC48_BL_TRAILER(slot,nwords) {*dabufp++ = 0x88000000 | (slot << 22) | nwords; }
419 #define F1TDC48_EV_HEADER(slot,trig) {*dabufp++ = 0x90000000 | (slot << 22) | (trig&0x3fffff); }
420 #define F1TDC48_EV_TS_LOW(timestamp) {*dabufp++ = 0x98000000 | (timestamp&(0x0000000000ffffffLLU)); }
421 #define F1TDC48_EV_TS_HIGH(timestamp) {*dabufp++ = (timestamp&(0x0000ffffff000000LLU)) >> 24; }
428 #define F1TDC48_F1_HEADER(cdata,chip,chan_on_chip,trig,trig_time) {*dabufp++ = 0xC0000000 | ((cdata&0x1F) << 22) | (0 << 23) | (chip << 3) | (chan_on_chip << 0) | ((trig&0x3f) << 16) | ((trig_time&0x1ff) << 7); }
429 #define F1TDC48_F1_DATA(cdata,chip,chan_on_chip,time) {*dabufp++ = 0xB8000000 | ((cdata&0x1F) << 22) | (1 << 23) | (chip << 19) | (chan_on_chip << 16) | (time&0xffff); }
431 #define F1TDC48_FILLER(slot) {*dabufp++ = 0xF8000000 | (slot << 22); }
433 #define F1TDC48_CHIP_NUM(chan) (chan >> 3)
434 #define F1TDC48_CHAN_ON_CHIP(chan) (chan & 0x07)
441 int ii, jj,
chan, hcnt, nwords;
442 int chip, chan_on_chip;
447 unsigned int *start =
dabufp;
451 eventNum = (
event->eventid)&0xffffffff;
452 timestamp = (
event->trigtime);
453 hcnt =
event->hcount[(roc-1)][(slot-1)];
463 tsdiv = (timestamp >> 3);
464 ts = tsdiv&0xffffffff;
482 if (chan_on_chip == 0) {
489 for (ii=0; ii < hcnt; ii++) {
505 printf(
"f1tdc48_write_data: ERROR: Too many hits for channel\n");
512 for (ii=0; ii < jj; ii++) {
519 F1TDC48_F1_TRAILER(cdata,(eventNum&0x3f),(ts&0x1ff),chan);
526 if ((nwords%2) == 0) {
546 #define CAEN1290_MAX_CHAN 32
547 #define CAEN1290_MAX_HITS 8
548 #define CAEN1290_MAX_CHIPS 4
552 #define CAEN1290_BL_HEADER(slot,evt) {*dabufp++ = 0x40000000 | (evt << 5) | (slot); }
553 #define CAEN1290_BL_TRAILER(slot,nwords,status) {*dabufp++ = 0x80000000 | ((status&0x7) << 24) | (nwords << 5) | (slot); }
555 #define CAEN1290_TDC_HEADER(chip,evt,bid) {*dabufp++ = 0x08000000 | ((chip&0x3) << 24) | ((evt&0xfff) << 12) | (bid&0xfff); }
556 #define CAEN1290_TDC_DATA(edge,chan,time) {*dabufp++ = 0x00000000 | ((edge&1) << 26) | ((chan&0x1f) << 21) | (time&0x1fffff); }
557 #define CAEN1290_TDC_TRAILER(chip,evt,nwords) {*dabufp++ = 0x18000000 | ((chip&0x3) << 24) | ((evt&0xfff) << 12) | (nwords&0xfff); }
559 #define CAEN1290_TDC_ERROR(chip,eflags) { *dabufp++ = 0x20000000 | ((chip&0x3) << 24) | (eflags&0x7fff); }
561 #define CAEN1290_FILLER {*dabufp++ = 0xC0000000; }
567 int ii, jj,
chan, hcnt, nwords=0, wcnt=0;
569 uint32_t chip, stat, edge = 0;
572 unsigned int *start =
dabufp;
576 eventNum = (
event->eventid)&0xffffffff;
578 hcnt =
event->hcount[(roc-1)][(slot-1)];
604 for (ii=0; ii < hcnt; ii++) {
621 printf(
"caen1290_write_data: ERROR: Too many hits for channel\n");
627 for (ii=0; ii < jj; ii++) {
632 if (((chan+1)%8) == 0) {
642 while ((nwords%4) != 0) {
651 #define MAX_CONFIG_PARS 20
675 if(mymodtype>
TID && mymodtype<
TD){
709 if(Npar == 0)
return;
716 *
dabufp++ = (Npar<<24) | slot_mask;
720 for(ii=0; ii<Npar; ii++){
721 *
dabufp++ = (partype[ii]<<16) | (parvalue[ii]);
struct coda_hit_info * hits[MAX_CRATES][MAX_SLOTS]
#define F1TDC48_FILLER(slot)
#define CAEN1290_TDC_DATA(edge, chan, time)
#define F1TDC32_F1_HEADER(cdata, chip, chan_on_chip, trig, trig_time)
#define F1TDC48_EV_HEADER(slot, trig)
#define F1TDC48_EV_TS_LOW(timestamp)
#define CAEN1290_TDC_HEADER(chip, evt, bid)
#define FADC250_BL_HEADER(slot, blnum, cnt)
#define CAEN1290_TDC_TRAILER(chip, evt, nwords)
#define F1TDC48_BL_HEADER(slot, blnum, cnt)
#define CAEN1290_MAX_CHAN
#define FADC250_PI_PED(chan, pn, ped, peak)
#define FADC250_EV_TS_LOW(timestamp)
#define FADC125_EV_TS_LOW(timestamp)
int fadc250_write_data(CODA_EVENT_INFO *event, int roc, int slot, int mode)
#define F1TDC48_BL_TRAILER(slot, nwords)
#define FADC250_PI_TIME(chan, pn, time)
#define FADC125_EV_HEADER(slot, trig)
#define DATA_BANK_OPEN(status, detid, nevents)
#define FADC125_WINDOW_WIDTH
#define F1TDC48_F1_HEADER(cdata, chip, chan_on_chip, trig, trig_time)
#define FADC250_WINDOW_WIDTH
#define FADC125_BL_HEADER(slot, blnum, cnt)
int fadc125_write_data(CODA_EVENT_INFO *event, int roc, int slot, int mode)
#define CAEN1290_BL_TRAILER(slot, nwords, status)
int module_map[MAX_SLOTS]
int f1tdc48_write_data(CODA_EVENT_INFO *event, int roc, int slot, int mode)
#define F1TDC32_BL_HEADER(slot, blnum, cnt)
static evioFileChannel * chan
#define CAEN1290_MAX_HITS
#define FADC250_BL_TRAILER(slot, nwords)
int caen1290_write_data(CODA_EVENT_INFO *event, int roc, int slot, int mode)
#define FADC125_PI_TIME(chan, qf, time)
void GetPedestals(uint32_t *peds, uint32_t Npeds)
#define FADC125_PI_SUM(chan, sum)
#define F1TDC32_EV_HEADER(slot, trig)
#define MAX_HITS_PER_CHAN
#define F1TDC32_BL_TRAILER(slot, nwords)
#define CAEN1290_BL_HEADER(slot, evt)
#define F1TDC48_CHIP_NUM(chan)
#define F1TDC32_F1_DATA(cdata, chip, chan_on_chip, time)
#define FADC250_PI_SUM(chan, pn, sum)
#define F1TDC32_EV_TS_LOW(timestamp)
#define FADC250_EV_HEADER(slot, trig)
void WriteDAQconfigBank(CODA_CRATE_MAP *crate, int roc)
static unsigned int * dabufp
#define F1TDC32_FILLER(slot)
#define F1TDC48_F1_DATA(cdata, chip, chan_on_chip, time)
#define FADC125_BL_TRAILER(slot, nwords)
printf("string=%s", string)
#define FADC125_PI_PED(chan, pn, ped, peak)
#define F1TDC48_CHAN_ON_CHIP(chan)
#define F1TDC32_CHAN_ON_CHIP(chan)
int f1tdc32_write_data(CODA_EVENT_INFO *event, int roc, int slot, int mode)
#define F1TDC32_CHIP_NUM(chan)