StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
fcs_trg_run.C
1 #include <stdio.h>
2 #include <sys/types.h>
3 #include <string.h>
4 #include <getopt.h>
5 #include <stdlib.h>
6 
7 #include <rtsLog.h>
8 #include <rtsSystems.h>
9 
10 #include <daqFormats.h>
11 
12 #include <DAQ_READER/daqReader.h>
13 #include <DAQ_READER/daq_dta.h>
14 
15 #include <trgConfNum.h>
16 #include <DAQ_TRG/daq_trg.h>
17 
18 #include <DAQ_FCS/daq_fcs.h>
19 #include <DAQ_FCS/fcs_data_c.h>
20 
21 #include "fcs_trg_base.h"
22 
23 
24 static int sim_mode = 0 ; //0 DAQ file rerun, 1 ASCII emulation
25 static fcs_trg_base *f_t ;
26 
27 
28 static u_int trg(daqReader *rdr)
29 {
30  u_int fcs2019 = 0 ;
31  int ok = 0 ;
32  int fcs = 0 ;
33 
34  daq_dta *dd = rdr->det("trg")->get("raw") ;
35 
36  while(dd && dd->iterate()) {
37 
38 #if 0
39  printf("tinfo: seq = #%d token = %d detectors = 0x%x triggers = 0x%llx/0x%llx/0x%llx evpgroups=0x%x flags=0x%x\n",
40  rdr->seq,
41  rdr->token,
42  rdr->detectors,
43  rdr->daqbits64_l1,
44  rdr->daqbits64_l2,
45  rdr->daqbits64,
46  rdr->evpgroups,
47  rdr->flags);
48 #endif
49 
50  for(int i=0;i<64;i++) {
51  if(rdr->daqbits64 & (1ll<<i)) {
52  if(i==38) {
53  fcs =1 ;
54  ok = 1 ;
55  }
56  if(i==0) ok = 1 ;
57  if(i==1) ok = 1 ;
58  if(i==2) ok = 1 ;
59 
60  printf("Trg offline id %d\n",i) ;
61  }
62  }
63 
64  TriggerDataBlk *trg = (TriggerDataBlk *)dd->Byte;
65 
66  L1_DSM_Data *l1Dsm = (L1_DSM_Data *)(((char *)trg) + swap32(trg->L1_DSM_ofl.offset));
67 
68  u_int lastdsm[8] ;
69 
70  for(int i=0;i<8;i++) {
71  lastdsm[i] = swap16(l1Dsm->lastDSM[i]) ;
72  //printf(".... %d: 0x%04X\n",i,lastdsm[i]) ;
73  }
74 
75  fcs2019 = (lastdsm[4] >> 10) & 1 ;
76 
77 
78 
79 
80  }
81 
82  fcs2019 |= (fcs<<2) | (ok<<1) ;
83 
84 // printf("fcs2019 %d\n",fcs2019) ;
85 
86  return fcs2019;
87 }
88 
89 
90 int from_ascii_evt()
91 {
92 
93  printf("==> Running simulation now\n") ;
94  f_t->end_event() ;
95 
96  return 0 ;
97 }
98 
99 int from_ascii_open(const char *fn)
100 {
101  int evts = 0 ;
102  u_short dta[8] ;
103 
104  LOG(INFO,"Opening %s",fn) ;
105 
106  FILE *f = fopen(fn,"r") ;
107 
108  if(f==0) {
109  perror(fn) ;
110  return -1 ;
111  } ;
112 
113  memset(dta,0,sizeof(dta)) ;
114 
115 
116  for(;;) {
117  char buff[128] ;
118  if(fgets(buff,sizeof(buff),f)==0) break ;
119 
120  int det,ns,dep,ch,adc ;
121  int ret = sscanf(buff,"%d %d %d %d %d",&det,&ns,&dep,&ch,&adc) ;
122  if(ret != 5) continue ;
123 
124 // printf("... %d %d %d %d %d\n",det,ns,dep,ch,adc) ;
125 
126  if(det < 0) { // end of ASCII event data...
127  evts++ ;
128  LOG(TERR,"Running evt %d",evts) ;
129  from_ascii_evt() ;
130 
131  f_t->start_event() ; // clears misc structures
132  }
133  else {
134  if(adc > 4095) adc = 4095 ;
135  dta[3] = adc ;
136 
137  if(det<0 || det>=3) printf("*** ERROR: DET %d\n",det) ;
138  if(ns<0 || ns>=2) printf("*** ERROR: NS %d\n",ns) ;
139  if(dep<0 || dep>=24) printf("*** ERROR: DEP %d\n",dep) ;
140 
141  f_t->fill_event(det,ns,dep,ch,dta,8) ;
142  }
143 
144  }
145 
146 
147  return evts ;
148 }
149 
150 
151 int main(int argc, char *argv[])
152 {
153  extern char *optarg ;
154  extern int optind ;
155  int c ;
156 
157  rtsLogOutput(RTS_LOG_STDERR) ; // must come first!
158 
159  f_t = new fcs_trg_base ;
160 
161 
162  f_t->log_level = 110 ; // comes first
163 
164  while((c=getopt(argc,argv,"d:al:")) != EOF) {
165  switch(c) {
166  case 'd' :
167  rtsLogLevel(optarg) ;
168  break ;
169  case 'l' :
170  f_t->log_level = atoi(optarg) ;
171  break ;
172  case 'a' :
173  sim_mode = 1 ;
174  break ;
175  default :
176  break ;
177  }
178  }
179 
180  if(sim_mode) f_t->sim_mode = 1 ;
181 
182  f_t->init(".") ;
183 
184 
185  // overrides...
186  f_t->ht_threshold[2] = 90 ;
187  f_t->marker.last_xing = 8 ; // 14 was for 20*8, 9 for 12*8?
188 
189  int evt = 0 ;
190  int fcs_evt = 0 ;
191 
192 
193  if(sim_mode) {
194  f_t->run_start(0) ;
195 
196  from_ascii_open(argv[optind]) ;
197 
198  f_t->run_stop() ;
199 
200  return 0 ;
201  }
202 
203 
204  daqReader *rdr = new daqReader(argv[1]) ;
205 
206  f_t->run_start(rdr->run) ;
207 
208  for(;;) {
209  daq_dta *dd ;
210 
211  rdr->get(0, EVP_TYPE_ANY) ;
212 
213  if(rdr->status) break ;
214 
215 
216  dd = rdr->det("fcs")->get("adc") ;
217 
218 
219  evt++ ;
220 
221  int got_one = 0 ;
222 
223 
224 
225 // f_t->start_event() ;
226 
227 
228 
229  while(dd && dd->iterate()) {
230  if(got_one == 0) {
231  fcs_evt++ ;
232  printf("=== fcs_evt %d\n",fcs_evt) ;
233  u_int fcs_trg = trg(rdr) ;
234  printf("--- fcs_trg %d\n",fcs_trg) ;
235  f_t->start_event() ;
236  got_one = 1 ;
237  }
238 
239  int det = (dd->sec >> 6) & 0x3 ;
240  int ns = (dd->sec >> 5) & 1 ;
241  int dep = dd->row ;
242  int c = dd->pad ;
243 
244  LOG(NOTE,"evt %d: %d %d %d %d : %d",evt,det,ns,dep,c,dd->ncontent) ;
245 
246  f_t->fill_event(det,ns,dep,c,(u_short *)dd->Void,dd->ncontent) ;
247 
248  }
249 
250  if(got_one) {
251 
252  f_t->end_event() ;
253  }
254 
255  printf("***** Event %d/%d\n",fcs_evt,evt) ;
256 
257  //if(fcs_evt==100) break ;
258  }
259 
260  f_t->run_stop() ;
261 
262  LOG(INFO,"Done: %d/%d evts",fcs_evt,evt) ;
263 
264  return 0 ;
265 }
266