HARPO  5.1.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
HarpoFeminosReader.cxx
Go to the documentation of this file.
1 //
2 // File HarpoFeminosReader.cxx
3 //
11 #include <climits>
12 #include <cstdio>
13 #include <arpa/inet.h>
14 //#include <cstdlib>
15 //#include <cstring>
16 #include <iostream>
17 
18 #include <TSystem.h>
19 #include "HarpoFeminosReader.h"
20 
21 // From D. Calvet
22 #include "frame.h"
23 
24 ClassImp(HarpoFeminosReader)
25 
26 #define EXPECTED_NB_FEMINOS_FRAGMENTS 18
27 #define NB_FEM_FRAGMENTS 72
28 #define MAX_FEM_DATA_BUFFER 2097152
29 
31 
36 {
37 
38  if(gHarpoDebug>0) Info("HarpoFeminosReader","Create ");
39 
40  fDone = false;
41  fError = false;
42  TotBytes = 0;
43  TotFrames = 0;
44  fFrSize = 0;
45  fSegment = 0;
46 
47  fIn = (FILE *) NULL;
48 
49 
50  lMap = NULL;
51  fEvent = new HarpoFeminosEvent(); //TODO
52  fDccAnalyse = (HarpoDetAnalyse *) NULL;
53  decoder = new HarpoDccDecode();
54 
55 }
56 
58 
63 {
64  if(gHarpoDebug>0) Info("HarpoFeminosReader"," Create (cfg)");
65  // Config Function
66 
67  fDone = false;
68  fError = false;
69  TotBytes = 0;
70  TotFrames = 0;
71  fFrSize = 0;
72  fSegment = 0;
73 
74  fIn = (FILE *) NULL;
75 
76 
77  lMap = NULL;
78  fEvent = new HarpoFeminosEvent();
79 
80  fDccAnalyse = (HarpoDetAnalyse *) NULL;
81  decoder = new HarpoDccDecode();
82 
83 }
84 
86 {
87  if (fIn != NULL) std::fclose(fIn);
88  delete decoder;
89 }
90 
92 {
93  fDccAnalyse = func;
94 }
95 
97 {
98  fSegment++;
99  printf("------ Next Segment %ld\n",fSegment);
100  TString inFile(*fInFile);
101  if ( inFile.EndsWith("000.aqs") ) {
102  int l = inFile.Length();
103  char snum[4];
104  sprintf(snum,"%3.3ld",fSegment);
105  inFile.Replace(l-7,3,snum);
106  }
107  else
108  return false;
109 
110  const char *fn = inFile.Data();
111  if ( gSystem->AccessPathName(fn,kReadPermission) ) {
112  perror("Feminos File access");
113  return false;
114  }
115  if (fIn != NULL) {
116  std::fclose(fIn);
117  fIn = NULL;
118  }
119 
120  if(gHarpoDebug>0) Info("Next Segment","fin %s",fn);
121 
122  fIn = std::fopen(fn,"r");
123  if ( fIn != NULL )
124  {
127  return static_cast<HarpoFeminosHeader *>(fRunHeader)->check(this);
128  }
129  else
130  {
131  perror("Feminos File open");
132  return false;
133  }
134  // will never come hire
135  return false;
136 }
137 
139 {
140  int evtsize = 0;
141  int evtnum = 0;
142  int kind = 0; // Frame Type
143  int pres = 0; // Result of frames decoding
144 
145 
146  if(gHarpoDebug>1) Info("NextEvent"," ");
147 
148  if ( isEventSaved ) {
149  if(gHarpoDebug>1) Info("NextEvent","Get Saved Event");
150  isEventSaved = false;
151  fEvent = fSaveEvent;
152  return true;
153  }
154 
155  if (fDone) return false; // Call after last event
156 
158  fEvent = NULL;
159 
160 
161  while ( (kind = NextFrame()) >= 0 ) {
162  // std::cout << "Frame " << TotFrames << " bytes " << TotBytes << std::endl;
163  // std::cout << "Kind " << kind << std::endl;
164 
165  switch (kind) {
166  case 0:
167  fDone = true;
168  // End Of File
169  if (fEvent == NULL) {
170  return false;
171  } else {
172  // No end of event record at the and of file
173  evtnum = (fEvent->GetHeader())->eventNumb;
174  fEvent->SetHeader(evtsize,evtnum);
175  fEvent->SetMap(lMap); // matrix to the event
177  return true;
178  }
179  break;
180  case 1:
181  // Data Frames !!! lData type is UShort_t
182  pres = ProcessFrame(&lData[1],fFrSize);
183  evtsize += fFrSize;
184  // if(pres != 0) std::cout << "Frame process error " << pres << std::endl;
185  if(pres != 0) Warning("NextEvent","Frame process error %d",pres);
186  break;
187  case 2:
188  //new Event
189  fEvent = new HarpoFeminosEvent();
190  fEvent->SetDet(fDet);
191  fEvent->SetPlane(fDet);
193  lMap = new HarpoDccMap();
194  AddPedestals();
195  evtsize = 2; //Start Event frame
196  break;
197  case 3:
198  evtnum = (fEvent->GetHeader())->eventNumb;
199  fEvent->SetHeader(evtsize,evtnum);
200  fEvent->SetMap(lMap); // matrix to the event
202  // Close event
203  return true;
204  default:
205  Info("HarpoFeminosReader","Format Error %d\n",kind);
206  delete fEvent;
207  fError = true;
208  fDone = true;
209  return false;
210  break;
211  }
212  }
213 
214  // We never come hire
215  fDone = true;
216  if (fError ) {
217  delete fEvent;
218  return false;
219  } else { // Last event
220  // close event
221  return true;
222  }
223 }
224 
226 {
227  HarpoFeminosHeader *dh = static_cast<HarpoFeminosHeader *>(fRunHeader);
229 }
230 
232 {
233  if(gHarpoDebug>1) Info("GetEvent "," ");
234  return fEvent;
235 }
236 
238 {
239  return static_cast<HarpoFeminosHeader *>(fRunHeader);
240 }
241 
243 
247 {
248 
249  const char * fn = fInFile->Data();
250  if(gHarpoDebug>0) Info("Init","fin %s",fn);
251  if ( fInFile->BeginsWith("/" )) { // full path
252  if ( gSystem->AccessPathName(fn,kReadPermission) ) {
253  perror("FEMINOS File access");
254  return false;
255  }
256  } else {
257  if ( gSystem->AccessPathName(fn,kReadPermission) ) // file not exist
258  {
259  // TODO
260  // TString *DataDir = gHDccCfg->GetDataDir();
261  // Not a best way but i can't use config hire
262  TString DataDir(gSystem->Getenv("HARPO_DATA_DIR"));
263 
264  if ( ! DataDir.EndsWith("/") ) DataDir.Append("/");
265  fInFile->Prepend(DataDir);
266  fn = fInFile->Data();
267  if ( gSystem->AccessPathName(fn,kReadPermission) ) {
268  perror("Feminos File access");
269  return false;
270  }
271  }
272  }
273 
274  if(gHarpoDebug>0) Info("Init","Guessed %s",fn);
275 
276  fIn = std::fopen(fn,"r");
277  if ( fIn != NULL )
278  {
280  return static_cast<HarpoFeminosHeader *>(fRunHeader)->check(this);
281  }
282  else
283  {
284  perror("Feminos File open");
285  return false;
286  }
287 }
288 
289 
290 Long_t HarpoFeminosReader::Loop(Long_t maxevents)
291 {
292  Long_t cnt=0;
293  HarpoFeminosEvent *evt;
294 
295  fDccAnalyse->Init();
296 
297  while (NextEvent()) {
298  evt = (HarpoFeminosEvent*)GetEvent();
300 
301  delete evt;
302  if (++cnt >= maxevents) break;
303  }
304  return cnt;
305 
306  fDccAnalyse->Save();
307 
308 }
309 
311 {
312  Long_t maxevents = fMaxEvents;
313  return Loop(maxevents);
314 }
315 
316 Bool_t HarpoFeminosReader::Find(Long_t eventNo)
317 {
318  Long_t cnt=0;
319  Long_t maxevents = fMaxEvents;
320  Bool_t found = false;
321 
322  while (NextEvent()) {
323 
324  if ((fEvent->GetHeader())->eventNumb == eventNo) {
325  found = true;
326  break;
327  }
328  fEvent->print(); //DEBUG
329  SkipEvent();
330  if (++cnt >= maxevents) break;
331  }
332  return found;
333 }
334 
336 {
337  HarpoFeminosEvent *evt = GetEvent(); // We need read event data
338  if ( evt != NULL ) delete evt ; // We will not process this event,
339  // return NULL on read arror
340 }
341 
343 {
344  HarpoDet dt(fDet);
345  fSaveEvent = fEvent;
346  fEvent = NULL;
347  isEventSaved = true;
348  // std::cout << "PushBack " << dt.GetName() << " Evt " << fNevts << std::endl;
349  if(gHarpoDebug>0)
350  Info("PushBack","%s (%ld), evt %ld",dt.GetName(), fDet, fNevts);
351 
352 }
353 
354 // From D. Calvet code
355 //int MReader_GetFrame(Param *p, Features *f)
357 {
358  unsigned short *sh;
359  unsigned int nb_sh;
360  int fr_sz;
361  int fr_offset;
362  int done;
363  //
364  // cur_fr in mreader unsigned char
365  // lData hire UShort_t
366  //
367  sh = (unsigned short *) &(lData[1]);
368 
369  done = 0;
370  while (!done)
371  {
372  next_segment:
373  // Read one short word
374  if (fread(sh, sizeof(unsigned short), 1, fIn) != 1)
375  {
376  if(std::feof(fIn))
377  {
378  printf("End of segment reached.\n");
379  if (NextSegment()) goto next_segment;
380  fDone = true;
381  printf("End of data, no more file reached.\n");
382  }
383  else
384  {
385  fDone = true;
386  fError = true;
387  }
388  printf("End of file reached.\n");
389  return 0;
390  }
391  TotBytes+= sizeof(unsigned short);
392 
394  {
395  if (gHarpoDebug>0)
396  {
397  printf("+++++ Start of Built Event *****\n");
398  }
399  return 2;
400  }
401  else if ((*sh & PFX_0_BIT_CONTENT_MASK) == PFX_END_OF_BUILT_EVENT)
402  {
403  if (gHarpoDebug>0)
404  {
405  printf("+++++ End of Built Event *****\n\n");
406  }
407  return 3;
408  }
409  else if ((*sh & PFX_0_BIT_CONTENT_MASK) == PFX_SOBE_SIZE)
410  {
411  // Read two short words to get the size of the event
412  if (fread((sh+1), sizeof(unsigned short), 2, fIn) != 2)
413  {
414  printf("Error: could not read two short words.\n");
415  return -1;
416  }
417  TotBytes+= sizeof(unsigned short) * 2;
418  TotFrames++;
419 
420  // Get the size of the event in bytes
421  fr_sz = (int) (((*(sh+2)) << 16) | (*(sh+1)));
422  // printf("---------SOBE_SIZE %d\n",fr_sz);
423 
424  // Compute the number of short words to read for the complete event
425  nb_sh = fr_sz / 2; // number of short words is half the event size in bytes
426  nb_sh-=3; // we have already read three short words from this event
427  //fr_offset = 8;
428  fr_offset = 4; // first zero + nr_sh_read
429 
430  done = 1;
431  }
432  else if (
434  ((*sh & PFX_9_BIT_CONTENT_MASK) == PFX_START_OF_CFRAME) ||
435  ((*sh & PFX_9_BIT_CONTENT_MASK) == PFX_START_OF_MFRAME)
436  )
437  {
438  // Read one short word
439  if (fread((sh+1), sizeof(unsigned short), 1, fIn) != 1)
440  {
441  printf("Error: could not read short word.\n");
442  return(-1);
443  }
444  TotBytes+= sizeof(unsigned short);
445  TotFrames++;
446 
447  // Get the size of the event in bytes
448  fr_sz = (int) *(sh+1);
449  //printf("---------xFRAME %d\n",fr_sz);
450 
451  // Compute the number of short word to read for this frame
452  nb_sh = fr_sz / 2; // number of short words is half the frame size in bytes
453  nb_sh-=2; // we have already read two short words from this frame
454  //fr_offset = 6;
455  fr_offset = 3; // first zero + nr_sh_read
456 
457  done = 1;
458  }
459  else
460  {
461  printf("Error: cannot interpret short word 0x%x\n", *sh);
462  return -1;
463  }
464  }
465 
466  // Read binary frame
467  if (fread(&(lData[fr_offset]), sizeof(unsigned short), nb_sh, fIn) != nb_sh)
468  {
469  printf("Error: could not read %d bytes.\n", (nb_sh*2));
470  return -1;
471  }
472  TotBytes+= sizeof(unsigned short) * nb_sh;
473 
474  // Zero the first two bytes because these are no longer used to specify the size of the frame
475  lData[0] = 0x00;
476  //lData[1] = 0x00;
477 
478  fFrSize = fr_sz;
479  //??? Frame_Print(stdout, (void*) &(lData[2]), fr_sz, p->vflag);
480 
481  return 1;
482  }
483 
484 /*******************************************************************************
485 
486  _____________________
487 
488  File: frame.c
489 
490  Description: Feminos Frame Format
491 
492 
493  Author: D. Calvet, calvet@hep.saclay.cea.fr
494 
495 
496  History:
497  June 2011 : created
498 
499  March 2012: changed file name from mframe.c to frame.c
500 
501  September 2013: added code for decoding new prefix PFX_SOBE_SIZE
502  Added parameter fr_sz to Frame_Print(). In this function, pointer *fr is now
503  interpreted as the first word of the frame instead of the size field as was
504  done before. The problem with the previous version is that frame size was
505  limited to 64KB because the size was coded with two bytes. This was not an
506  issue for printing Ethernet frames, but the same code is used to printout
507  full events at the output of the event builder which can be up to 7.5 MB.
508  The size has therefore to be coded on a 32-bit integer.
509 
510 *******************************************************************************/
511 //#include "frame.h"
512 //#include <stdio.h>
513 
514 
515 /*******************************************************************************
516  Frame_Print
517 *******************************************************************************/
518 //void Frame_Print(void *fp, void *fr, int fr_sz, unsigned int vflg)
519 int HarpoFeminosReader::ProcessFrame(void *fr, int fr_sz)
520 {
521  unsigned int vflg;
522  unsigned short *p;
523  int i, j;
524  int sz_rd;
525  int done = 0;
526  unsigned short r0, r1, r2, r3;
527  unsigned int tmp;
528  int tmp_i[10];
529  int si;
530  char *c;
531  unsigned int *ui;
532  float mean, std_dev;
533  char tmp_str[10];
534  int res;
535  unsigned long int ltmp;
536  int rawch; //raw channel
537  int currch; // decoded channel number
538  rawch = 0;
539  currch = 0;
540  res = 0;
541  vflg = 0;
542 
543  // vflg = (FRAME_PRINT_EVBND| FRAME_PRINT_FRBND | FRAME_PRINT_SIZE | FRAME_PRINT_NULLW);
544  // vflg = FRAME_PRINT_ALL;
545  // vflg = ( FRAME_PRINT_HIT_CH | FRAME_PRINT_CHAN_DATA);
546  p = (unsigned short *) fr;
547 
548  done = 0;
549  i = 0;
550  sz_rd = 0;
551  si = 0;
552 
553  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_SIZE))
554  {
555  printf("Frame payload: %d bytes\n", fr_sz);
556  }
557 
558  while (!done)
559  {
560  // Is it a prefix for 14-bit content?
562  {
563  r0 = GET_CARD_IX(*p);
564  r1 = GET_CHIP_IX(*p);
565  r2 = GET_CHAN_IX(*p);
566  //HARPO
567  rawch = 76 * r1 + r2 - 3; //After channles index 3..78
568  //currch = rawch; // without decodeing
569  currch = decoder->decode(rawch,fDet); // use decoding table
570  // printf("cuurch %d\n",currch);
571  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HIT_CH))
572  {
573  printf(" Card %02d Chip %01d Channel %02d\n", r0, r1, r2);
574  }
575  i++;
576  p++;
577  sz_rd+=2;
578  si = 0;
579  }
580  else if ((*p & PFX_14_BIT_CONTENT_MASK) == PFX_CARD_CHIP_CHAN_HIT_CNT)
581  {
582  r0 = GET_CARD_IX(*p);
583  r1 = GET_CHIP_IX(*p);
584  r2 = GET_CHAN_IX(*p);
585  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HIT_CNT))
586  {
587  printf("Card %02d Chip %01d Channel_Hit_Count %02d\n", r0, r1, r2);
588  }
589  i++;
590  p++;
591  sz_rd+=2;
592  }
593  else if ((*p & PFX_14_BIT_CONTENT_MASK) == PFX_CARD_CHIP_CHAN_HISTO)
594  {
595  r0 = GET_CARD_IX(*p);
596  r1 = GET_CHIP_IX(*p);
597  r2 = GET_CHAN_IX(*p);
598  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HIT_CH))
599  {
600  printf("Card %02d Chip %01d Channel %02d ", r0, r1, r2);
601  }
602  i++;
603  p++;
604  sz_rd+=2;
605  }
606  // Is it a prefix for 12-bit content?
607  else if ((*p & PFX_12_BIT_CONTENT_MASK) == PFX_ADC_SAMPLE)
608  {
609  if (si > 511) printf("ERROR Time bin > 511 time %d\n",si);
610  r0 = GET_ADC_DATA(*p);
611  //HARPO
612  if ( si >= 0 ) {
613  lMap->FillIf(lMap,currch,si,r0);
614  } else {
615  if (r0 >0) printf("ERROR non negative ADC %d with negative time %d\n",r0,si);
616  //Feminos Manual p62
617  // Feminos allways prepend series of m ADC smaples with
618  // dessiren number of pre-saples, if it coorespond to
619  // negative index , in zero adc zoints for this samples
620 
621  }
622  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_CHAN_DATA))
623  {
624  printf("%03d 0x%04x (%4d)\n", si, r0, r0);
625  }
626  i++;
627  p++;
628  sz_rd+=2;
629  si++;
630  }
631  else if ((*p & PFX_12_BIT_CONTENT_MASK) == PFX_LAT_HISTO_BIN)
632  {
633  r0 = GET_LAT_HISTO_BIN(*p);
634  i++;
635  p++;
636  sz_rd+=2;
637  r1 = *p;
638  i++;
639  p++;
640  sz_rd+=2;
641  r2 = *p;
642  i++;
643  p++;
644  sz_rd+=2;
645  tmp = (((unsigned int) r2) << 16) | (unsigned int) (r1);
646  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_BINS))
647  {
648  printf("%03d %03d\n", r0, tmp);
649  }
650 
651  }
652  else if ((*p & PFX_12_BIT_CONTENT_MASK) == PFX_CHIP_LAST_CELL_READ)
653  {
654  r0 = *p;
655  i++;
656  p++;
657  sz_rd+=2;
658  r1 = *p;
659  i++;
660  p++;
661  sz_rd+=2;
662  r2 = *p;
663  i++;
664  p++;
665  sz_rd+=2;
666  r3 = *p;
667  i++;
668  p++;
669  sz_rd+=2;
670  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_LAST_CELL_READ_0))
671  {
672  printf("Chip %01d Last_Cell_Read %03d (0x%03x)\n",
674  GET_LST_READ_CELL(r0),
675  GET_LST_READ_CELL(r0));
676  }
677  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_LAST_CELL_READ_1))
678  {
679  printf("Chip %01d Last_Cell_Read %03d (0x%03x)\n",
681  GET_LST_READ_CELL(r1),
682  GET_LST_READ_CELL(r1));
683  }
684  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_LAST_CELL_READ_2))
685  {
686  printf("Chip %01d Last_Cell_Read %03d (0x%03x)\n",
688  GET_LST_READ_CELL(r2),
689  GET_LST_READ_CELL(r2));
690  }
691  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_LAST_CELL_READ_3))
692  {
693  printf("Chip %01d Last_Cell_Read %03d (0x%03x)\n",
695  GET_LST_READ_CELL(r3),
696  GET_LST_READ_CELL(r3));
697  }
698  }
699  // Is it a prefix for 9-bit content?
700  else if ((*p & PFX_9_BIT_CONTENT_MASK) == PFX_TIME_BIN_IX)
701  {
702  r0 = GET_TIME_BIN(*p);
703  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_CHAN_DATA))
704  {
705  printf("Time_Bin: %d\n", r0);
706  }
707  i++;
708  p++;
709  sz_rd+=2;
710  si = r0 - 4 ; //IgS TODO must be r0 - pre
711  }
712  else if ((*p & PFX_9_BIT_CONTENT_MASK) == PFX_HISTO_BIN_IX)
713  {
714  r0 = GET_HISTO_BIN(*p);
715  i++;
716  p++;
717  sz_rd+=2;
718  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_BINS))
719  {
720  printf("Bin %3d Val %5d\n", r0, *p);
721  }
722  i++;
723  p++;
724  sz_rd+=2;
725 
726  }
727  else if ((*p & PFX_9_BIT_CONTENT_MASK) == PFX_PEDTHR_LIST)
728  {
729  r0 = GET_PEDTHR_LIST_FEM(*p);
730  r1 = GET_PEDTHR_LIST_ASIC(*p);
731  r2 = GET_PEDTHR_LIST_MODE(*p);
732  r3 = GET_PEDTHR_LIST_TYPE(*p);
733  i++;
734  p++;
735  sz_rd+=2;
736  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_LISTS) )
737  {
738  if (r3 == 0) // pedestal entry
739  {
740  printf("# Pedestal List for FEM %02d ASIC %01d\n", r0, r1);
741  }
742  else
743  {
744  printf("# Threshold List for FEM %02d ASIC %01d\n", r0, r1);
745  }
746  printf("fem %02d\n", r0);
747  }
748 
749  // Determine the number of entries
750  if (r2 == 0) // AGET
751  {
752  r2 = 71;
753  }
754  else // AFTER
755  {
756  r2 = 78;
757  }
758  // Get all entries
759  for (j=0;j<=r2; j++)
760  {
761  tmp_i[0] = (int) * ((short *) p);
762  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_LISTS) )
763  {
764  if (r3 == 0) // pedestal entry
765  {
766  sprintf(tmp_str, "ped");
767  }
768  else
769  {
770  sprintf(tmp_str, "thr");
771  }
772  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_LISTS) )
773  {
774  printf("%s %1d %2d 0x%04x (%4d)\n", tmp_str, r1, j, *p, tmp_i[0]);
775  }
776  }
777  i++;
778  p++;
779  sz_rd+=2;
780  }
781  }
782  else if ((*p & PFX_9_BIT_CONTENT_MASK) == PFX_START_OF_DFRAME)
783  {
784  r0 = GET_FRAMING_VERSION(*p);
785  r1 = GET_FEMID(*p);
786  i++;
787  p++;
788  sz_rd+=2;
789  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_FRBND))
790  {
791  printf("--- Start of Data Frame (V.%01d) FEM %02d --\n", r0, r1);
792  printf("Filled with %d bytes\n", *p);
793  }
794  i++;
795  p++;
796  sz_rd+=2;
797  }
798  else if ((*p & PFX_9_BIT_CONTENT_MASK) == PFX_START_OF_MFRAME)
799  {
800  r0 = GET_FRAMING_VERSION(*p);
801  r1 = GET_FEMID(*p);
802  i++;
803  p++;
804  sz_rd+=2;
805  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_FRBND))
806  {
807  printf("--- Start of Moni Frame (V.%01d) FEM %02d --\n", r0, r1);
808  printf("Filled with %d bytes\n", *p);
809  }
810  i++;
811  p++;
812  sz_rd+=2;
813  }
814  else if ((*p & PFX_9_BIT_CONTENT_MASK) == PFX_START_OF_CFRAME)
815  {
816  r0 = GET_FRAMING_VERSION(*p);
817  r1 = GET_FEMID(*p);
818  i++;
819  p++;
820  sz_rd+=2;
821  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_FRBND))
822  {
823  printf("--- Start of Config Frame (V.%01d) FEM %02d --\n", r0, r1);
824  printf("Error code: %d\n", *((short *) p));
825  }
826  i++;
827  p++;
828  sz_rd+=2;
829  }
830 
831  // Is it a prefix for 8-bit content?
832  else if ((*p & PFX_8_BIT_CONTENT_MASK) == PFX_ASCII_MSG_LEN)
833  {
834  r0 = GET_ASCII_LEN(*p);
835  i++;
836  p++;
837  sz_rd+=2;
838  c = (char *) p;
839  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_ASCII))
840  {
841  for (j=0;j<r0; j++)
842  {
843  printf("%c", *c);
844  c++;
845  }
846  }
847  // Skip the null string terminating character
848  r0++;
849  // But if the resulting size is odd, there is another null character that we should skip
850  if (r0 & 0x0001)
851  {
852  r0++;
853  }
854  p+=(r0>>1);
855  i+=(r0>>1);
856  sz_rd+=r0;
857  }
858  // Is it a prefix for 4-bit content?
859  else if ((*p & PFX_4_BIT_CONTENT_MASK) == PFX_START_OF_EVENT)
860  {
861  r0 = GET_EVENT_TYPE(*p);
862  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_EVBND))
863  {
864  printf("-- Start of Event (Type %01d) --\n", r0);
865  }
866  i++;
867  p++;
868  sz_rd+=2;
869  //TODO IgS Save Event Type
870 
871  // Time Stamp lower 16-bit
872  r0 = *p;
873  i++;
874  p++;
875  sz_rd+=2;
876 
877  // Time Stamp middle 16-bit
878  r1 = *p;
879  i++;
880  p++;
881  sz_rd+=2;
882 
883  // Time Stamp upper 16-bit
884  r2 = *p;
885  i++;
886  p++;
887  sz_rd+=2;
888 
889  //HARPO
890  ltmp = ((unsigned long) r2 << 32) | ((unsigned long)r1 << 16 ) |(unsigned long) r0 ;
891  fEvent->SetTimeStamp(ltmp);
892 
893  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_EVBND))
894  {
895  printf("Time 0x%04x 0x%04x 0x%04x\n", r2, r1, r0);
896  }
897 
898  // Event Count lower 16-bit
899  r0 = *p;
900  i++;
901  p++;
902  sz_rd+=2;
903 
904  // Event Count upper 16-bit
905  r1 = *p;
906  i++;
907  p++;
908  sz_rd+=2;
909 
910  tmp = (((unsigned int) r1) << 16) | ((unsigned int) r0);
911 
912  //HARPO
913  fEvent->SetHeader(0,tmp); // Size unknown, put 0
914 
915  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_EVBND))
916  {
917  printf("Event_Count 0x%08x (%d)\n", tmp, tmp);
918  }
919  }
920  else if ((*p & PFX_4_BIT_CONTENT_MASK) == PFX_END_OF_EVENT)
921  {
922  tmp = ((unsigned int) GET_EOE_SIZE(*p)) << 16;
923  i++;
924  p++;
925  sz_rd+=2;
926  tmp = tmp + (unsigned int) *p;
927  i++;
928  p++;
929  sz_rd+=2;
930  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_EVBND))
931  {
932  printf("----- End of Event ----- (size %d bytes)\n", tmp);
933  }
934 
935  }
936 
937  // Is it a prefix for 2-bit content?
938  else if ((*p & PFX_2_BIT_CONTENT_MASK) == PFX_CH_HIT_CNT_HISTO)
939  {
941  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
942  {
943  printf("Channel Hit Count Histogram (ASIC %d)\n", r0);
944  }
945 
946  p++;
947  i++;
948  sz_rd+=2;
949 
950  // null word
951  p++;
952  i++;
953  sz_rd+=2;
954 
955  ui = (unsigned int *) p;
956 
957  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
958  {
959  printf("Min Bin : %d\n", *ui);
960  }
961  ui++;
962  i+=2;
963  sz_rd+=4;
964 
965  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
966  {
967  printf("Max Bin : %d\n", *ui);
968  }
969  ui++;
970  i+=2;
971  sz_rd+=4;
972 
973  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
974  {
975  printf("Bin Width: %d\n", *ui);
976  }
977  ui++;
978  i+=2;
979  sz_rd+=4;
980 
981  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
982  {
983  printf("Bin Count: %d\n", *ui);
984  }
985  r0 = *ui;
986  ui++;
987  i+=2;
988  sz_rd+=4;
989 
990  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
991  {
992  printf("Min Value: %d\n", *ui);
993  }
994  ui++;
995  i+=2;
996  sz_rd+=4;
997 
998  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
999  {
1000  printf("Max Value: %d\n", *ui);
1001  }
1002  ui++;
1003  i+=2;
1004  sz_rd+=4;
1005 
1006  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1007  {
1008  printf("Mean : %.2f\n", ((float) *ui) / 100.0);
1009  }
1010  ui++;
1011  i+=2;
1012  sz_rd+=4;
1013 
1014  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1015  {
1016  printf("Std Dev : %.2f\n", ((float) *ui) / 100.0);
1017  }
1018  ui++;
1019  i+=2;
1020  sz_rd+=4;
1021 
1022  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1023  {
1024  printf("Entries : %d\n", *ui);
1025  }
1026  ui++;
1027  i+=2;
1028  sz_rd+=4;
1029 
1030  // Get all bins
1031  for (j=0; j<r0; j++)
1032  {
1033  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1034  {
1035  printf("Bin(%2d) = %9d\n", j, *ui);
1036  }
1037  ui++;
1038  i+=2;
1039  sz_rd+=4;
1040  }
1041 
1042  // Save last value of pointer
1043  p = (unsigned short *) ui;
1044  }
1045 
1046  // Is it a prefix for 0-bit content?
1047  else if ((*p & PFX_0_BIT_CONTENT_MASK) == PFX_END_OF_FRAME)
1048  {
1049  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_FRBND))
1050  {
1051  printf("----- End of Frame -----\n");
1052  }
1053  i++;
1054  p++;
1055  sz_rd+=2;
1056  }
1057  else if (*p == PFX_NULL_CONTENT)
1058  {
1059  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_NULLW))
1060  {
1061  printf("null word (2 bytes)\n");
1062  }
1063  i++;
1064  p++;
1065  sz_rd+=2;
1066  }
1067  else if ((*p == PFX_DEADTIME_HSTAT_BINS) || (*p == PFX_EVPERIOD_HSTAT_BINS))
1068  {
1069  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1070  {
1071  if (*p == PFX_DEADTIME_HSTAT_BINS)
1072  {
1073  printf("Dead-time Histogram\n");
1074  }
1075  else
1076  {
1077  printf("Inter Event Time Histogram\n");
1078  }
1079  }
1080 
1081  p++;
1082  i++;
1083  sz_rd+=2;
1084 
1085  // null word
1086  p++;
1087  i++;
1088  sz_rd+=2;
1089 
1090  ui = (unsigned int *) p;
1091 
1092  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1093  {
1094  printf("Min Bin : %d\n", *ui);
1095  }
1096  ui++;
1097  i+=2;
1098  sz_rd+=4;
1099 
1100  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1101  {
1102  printf("Max Bin : %d\n", *ui);
1103  }
1104  ui++;
1105  i+=2;
1106  sz_rd+=4;
1107 
1108  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1109  {
1110  printf("Bin Width: %d\n", *ui);
1111  }
1112  ui++;
1113  i+=2;
1114  sz_rd+=4;
1115 
1116  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1117  {
1118  printf("Bin Count: %d\n", *ui);
1119  }
1120  ui++;
1121  i+=2;
1122  sz_rd+=4;
1123 
1124  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1125  {
1126  printf("Min Value: %d\n", *ui);
1127  }
1128  ui++;
1129  i+=2;
1130  sz_rd+=4;
1131 
1132  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1133  {
1134  printf("Max Value: %d\n", *ui);
1135  }
1136  ui++;
1137  i+=2;
1138  sz_rd+=4;
1139 
1140  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1141  {
1142  printf("Mean : %.2f\n", ((float) *ui) / 100.0);
1143  }
1144  ui++;
1145  i+=2;
1146  sz_rd+=4;
1147 
1148  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1149  {
1150  printf("Std Dev : %.2f\n", ((float) *ui) / 100.0);
1151  }
1152  ui++;
1153  i+=2;
1154  sz_rd+=4;
1155 
1156  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1157  {
1158  printf("Entries : %d\n", *ui);
1159  }
1160  ui++;
1161  i+=2;
1162  sz_rd+=4;
1163 
1164  // Save last value of pointer
1165  p = (unsigned short *) ui;
1166  }
1167  else if (*p == PFX_PEDESTAL_HSTAT)
1168  {
1169  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1170  {
1171  printf("\nPedestal Histogram Statistics\n");
1172  }
1173  p++;
1174  i++;
1175  sz_rd+=2;
1176 
1177  ui = (unsigned int *) p;
1178 
1179  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1180  {
1181  printf("Min Bin : %d\n", *ui);
1182  }
1183  ui++;
1184  i+=2;
1185  sz_rd+=4;
1186 
1187  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1188  {
1189  printf("Max Bin : %d\n", *ui);
1190  }
1191  ui++;
1192  i+=2;
1193  sz_rd+=4;
1194 
1195  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1196  {
1197  printf("Bin Width: %d\n", *ui);
1198  }
1199  ui++;
1200  i+=2;
1201  sz_rd+=4;
1202 
1203  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1204  {
1205  printf("Bin Count: %d\n", *ui);
1206  }
1207  ui++;
1208  i+=2;
1209  sz_rd+=4;
1210 
1211  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1212  {
1213  printf("Min Value: %d\n", *ui);
1214  }
1215  ui++;
1216  i+=2;
1217  sz_rd+=4;
1218 
1219  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1220  {
1221  printf("Max Value: %d\n", *ui);
1222  }
1223  ui++;
1224  i+=2;
1225  sz_rd+=4;
1226 
1227  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1228  {
1229  printf("Mean : %.2f\n", ((float) *ui) / 100.0);
1230  }
1231  ui++;
1232  i+=2;
1233  sz_rd+=4;
1234 
1235  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1236  {
1237  printf("Std Dev : %.2f\n", ((float) *ui) / 100.0);
1238  }
1239  ui++;
1240  i+=2;
1241  sz_rd+=4;
1242 
1243  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1244  {
1245  printf("Entries : %d\n", *ui);
1246  }
1247  ui++;
1248  i+=2;
1249  sz_rd+=4;
1250 
1251  // Save last value of pointer
1252  p = (unsigned short *) ui;
1253  }
1254  else if (*p == PFX_PEDESTAL_H_MD)
1255  {
1256  p++;
1257  i++;
1258  sz_rd+=2;
1259 
1260  ui = (unsigned int *) p;
1261 
1262  mean = (float) (((float) *ui) / 100.0);
1263  ui++;
1264  i+=2;
1265  sz_rd+=4;
1266 
1267  std_dev = (float) (((float) *ui) / 100.0);
1268  ui++;
1269  i+=2;
1270  sz_rd+=4;
1271 
1272  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1273  {
1274  printf("Mean/Std_dev : %.2f %.2f\n", mean, std_dev);
1275  }
1276 
1277  // Save last value of pointer
1278  p = (unsigned short *) ui;
1279  }
1280  else if (*p == PFX_SHISTO_BINS)
1281  {
1282  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_BINS))
1283  {
1284  printf("Threshold Turn-on curve\n");
1285  }
1286  i++;
1287  p++;
1288  sz_rd+=2;
1289 
1290  for (j=0;j<16; j++)
1291  {
1292  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_BINS))
1293  {
1294  printf("%d ", *p);
1295  }
1296  i++;
1297  p++;
1298  sz_rd+=2;
1299  }
1300  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_BINS))
1301  {
1302  printf("\n\n");
1303  }
1304  }
1305  else if (*p == PFX_CMD_STATISTICS)
1306  {
1307  // Skip header
1308  i++;
1309  p++;
1310  sz_rd+=2;
1311 
1312  // RX command count lower 16-bit
1313  r0 = *p;
1314  i++;
1315  p++;
1316  sz_rd+=2;
1317  // RX command count upper 16-bit
1318  r1 = *p;
1319  i++;
1320  p++;
1321  sz_rd+=2;
1322  tmp_i[0] = (int) ((r1 << 16) | (r0));
1323 
1324  // RX daq count lower 16-bit
1325  r0 = *p;
1326  i++;
1327  p++;
1328  sz_rd+=2;
1329  // RX daq count upper 16-bit
1330  r1 = *p;
1331  i++;
1332  p++;
1333  sz_rd+=2;
1334  tmp_i[1] = (int) ((r1 << 16) | (r0));
1335 
1336  // RX daq timeout lower 16-bit
1337  r0 = *p;
1338  i++;
1339  p++;
1340  sz_rd+=2;
1341  // RX daq timeout upper 16-bit
1342  r1 = *p;
1343  i++;
1344  p++;
1345  sz_rd+=2;
1346  tmp_i[2] = (int) ((r1 << 16) | (r0));
1347 
1348  // RX daq delayed lower 16-bit
1349  r0 = *p;
1350  i++;
1351  p++;
1352  sz_rd+=2;
1353  // RX daq delayed upper 16-bit
1354  r1 = *p;
1355  i++;
1356  p++;
1357  sz_rd+=2;
1358  tmp_i[3] = (int) ((r1 << 16) | (r0));
1359 
1360  // Missing daq requests lower 16-bit
1361  r0 = *p;
1362  i++;
1363  p++;
1364  sz_rd+=2;
1365  // Missing daq requests upper 16-bit
1366  r1 = *p;
1367  i++;
1368  p++;
1369  sz_rd+=2;
1370  tmp_i[4] = (int) ((r1 << 16) | (r0));
1371 
1372  // RX command error count lower 16-bit
1373  r0 = *p;
1374  i++;
1375  p++;
1376  sz_rd+=2;
1377  // RX command error count upper 16-bit
1378  r1 = *p;
1379  i++;
1380  p++;
1381  sz_rd+=2;
1382  tmp_i[5] = (int) ((r1 << 16) | (r0));
1383 
1384  // TX command reply count lower 16-bit
1385  r0 = *p;
1386  i++;
1387  p++;
1388  sz_rd+=2;
1389  // TX command reply count upper 16-bit
1390  r1 = *p;
1391  i++;
1392  p++;
1393  sz_rd+=2;
1394  tmp_i[6] = (int) ((r1 << 16) | (r0));
1395 
1396  // TX DAQ reply count lower 16-bit
1397  r0 = *p;
1398  i++;
1399  p++;
1400  sz_rd+=2;
1401  // TX DAQ reply count upper 16-bit
1402  r1 = *p;
1403  i++;
1404  p++;
1405  sz_rd+=2;
1406  tmp_i[7] = (int) ((r1 << 16) | (r0));
1407 
1408  // TX DAQ reply re-send count lower 16-bit
1409  r0 = *p;
1410  i++;
1411  p++;
1412  sz_rd+=2;
1413  // TX DAQ reply re-send count upper 16-bit
1414  r1 = *p;
1415  i++;
1416  p++;
1417  sz_rd+=2;
1418  tmp_i[8] = (int) ((r1 << 16) | (r0));
1419 
1420  if (vflg & FRAME_PRINT_ALL)
1421  {
1422  printf("Server RX stat: cmd_count=%d daq_req=%d daq_timeout=%d daq_delayed=%d daq_missing=%d cmd_errors=%d\n", tmp_i[0], tmp_i[1], tmp_i[2], tmp_i[3], tmp_i[4], tmp_i[5]);
1423  printf("Server TX stat: cmd_replies=%d daq_replies=%d daq_replies_resent=%d\n", tmp_i[6], tmp_i[7], tmp_i[8]);
1424  }
1425  }
1426  else if (*p == PFX_START_OF_BUILT_EVENT)
1427  {
1428  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_EBBND))
1429  {
1430  printf("***** Start of Built Event *****\n");
1431  }
1432  i++;
1433  p++;
1434  sz_rd+=2;
1435  }
1436  else if (*p == PFX_END_OF_BUILT_EVENT)
1437  {
1438  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_EBBND))
1439  {
1440  printf("***** End of Built Event *****\n\n");
1441  }
1442  i++;
1443  p++;
1444  sz_rd+=2;
1445  res = 1;
1446  }
1447  else if (*p == PFX_SOBE_SIZE)
1448  {
1449  // Skip header
1450  i++;
1451  p++;
1452  sz_rd+=2;
1453 
1454  // Built Event Size lower 16-bit
1455  r0 = *p;
1456  i++;
1457  p++;
1458  sz_rd+=2;
1459  // Built Event Size upper 16-bit
1460  r1 = *p;
1461  i++;
1462  p++;
1463  sz_rd+=2;
1464  tmp_i[0] = (int) ((r1 << 16) | (r0));
1465 
1466  if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_EBBND))
1467  {
1468  printf("***** Start of Built Event - Size = %d bytes *****\n", tmp_i[0]);
1469  }
1470 
1471  }
1472  // No interpretable data
1473  else
1474  {
1475  printf("word(%04d) : 0x%x (%d) unknown data\n", i, *p, *p);
1476  sz_rd+=2;
1477  p++;
1478  }
1479 
1480  // Check if end of packet was reached
1481  if (sz_rd == fr_sz)
1482  {
1483  done = 1;
1484  }
1485  else if (sz_rd > fr_sz)
1486  {
1487  printf("Format error: read %d bytes but packet size is %d\n", sz_rd, fr_sz);
1488  done = 1;
1489  }
1490  }
1491 
1492  // Put an empty line
1493  if (vflg & FRAME_PRINT_ALL)
1494  {
1495  printf("\n");
1496  }
1497  // std::cout << " ************* res " << res << std::endl;
1498  return res;
1499 }
1500 
1501 /*******************************************************************************
1502  Frame_IsDFrame_EndOfEvent
1503 *******************************************************************************/
1505 {
1506  unsigned short *s;
1507  unsigned short sz;
1508 
1509  s = (unsigned short *) fr;
1510  sz = *s;
1511  sz = (sz / 2) - 1 - 1 - 1;
1512  s+=sz;
1513 
1515  {
1516  return(1);
1517  }
1518  else
1519  {
1520  return(0);
1521  }
1522 }
1523 
1524 /*******************************************************************************
1525  Frame_IsCFrame
1526 *******************************************************************************/
1527 int Frame_IsCFrame(void *fr, short *err_code)
1528 {
1529  unsigned short *s;
1530  s = (unsigned short *) fr;
1531  s++;
1532 
1534  {
1535  s++;
1536  *err_code = *s;
1537  return(1);
1538  }
1539  else
1540  {
1541  return(0);
1542  }
1543 }
1544 
1545 /*******************************************************************************
1546  Frame_IsDFrame
1547 *******************************************************************************/
1548 int Frame_IsDFrame(void *fr)
1549 {
1550  unsigned short *s;
1551  s = (unsigned short *) fr;
1552  s++;
1553 
1555  {
1556  return(1);
1557  }
1558  else
1559  {
1560  return(0);
1561  }
1562 }
1563 
1564 /*******************************************************************************
1565  Frame_IsMsgStat
1566 *******************************************************************************/
1567 int Frame_IsMsgStat(void *fr)
1568 {
1569  unsigned short *s;
1570  s = (unsigned short *) fr;
1571  s++;
1572 
1574  {
1575  s++; // skip MFRAME header
1576  s++; // skip size
1578  {
1579  return(1);
1580  }
1581  else
1582  {
1583  return(0);
1584  }
1585  }
1586  else
1587  {
1588  return(0);
1589  }
1590 }
1591 
1592 /*******************************************************************************
1593  Frame_GetEventTyNbTs
1594 *******************************************************************************/
1596  unsigned short *ev_ty,
1597  unsigned int *ev_nb,
1598  unsigned short *ev_tsl,
1599  unsigned short *ev_tsm,
1600  unsigned short *ev_tsh)
1601 {
1602  unsigned short *p;
1603  unsigned short r0, r1;
1604 
1605  p = (unsigned short *) fr;
1606 
1607  // Is it a Start Of Event?
1609  {
1610  // Get event type
1611  *ev_ty = GET_EVENT_TYPE(*p);
1612  p++;
1613 
1614  // Time Stamp lower 16-bit
1615  *ev_tsl = *p;
1616  p++;
1617 
1618  // Time Stamp middle 16-bit
1619  *ev_tsm = *p;
1620  p++;
1621 
1622  // Time Stamp upper 16-bit
1623  *ev_tsh = *p;
1624  p++;
1625 
1626  // Event Count lower 16-bit
1627  r0 = *p;
1628  p++;
1629 
1630  // Event Count upper 16-bit
1631  r1 = *p;
1632 
1633  *ev_nb = (((unsigned int) r1) << 16) | ((unsigned int) r0);
1634 
1635  return(0);
1636  }
1637  else
1638  {
1639  return (-1);
1640  }
1641 }
#define FRAME_PRINT_LAST_CELL_READ_2
Definition: frame.h:191
#define GET_PEDTHR_LIST_TYPE(w)
Definition: frame.h:149
#define GET_CH_HIT_CNT_HISTO_CHIP_IX(w)
Definition: frame.h:169
#define FRAME_PRINT_HISTO_STAT
Definition: frame.h:187
#define PFX_CMD_STATISTICS
Definition: frame.h:113
#define PFX_END_OF_EVENT
Definition: frame.h:67
#define PFX_0_BIT_CONTENT_MASK
Definition: frame.h:107
void FillIf(HarpoDccMap *m, Int_t row, Int_t col, UShort_t word)
Fill map only if index in map range (0..nRaws-1) (0..nCols-1)
ULong_t fTimeStamp
HarpoFeminosEvent * fSaveEvent
#define PFX_ADC_SAMPLE
Definition: frame.h:37
#define PFX_CARD_CHIP_CHAN_HIT_CNT
Definition: frame.h:29
#define PFX_LAT_HISTO_BIN
Definition: frame.h:38
#define PFX_EVPERIOD_HSTAT_BINS
Definition: frame.h:116
#define FRAME_PRINT_NULLW
Definition: frame.h:186
void SetRunHeader(HarpoDetHeader *rh)
Return pointer to decoded pmm2 data vector.
Definition: HarpoDetEvent.h:52
const char * GetName() const
Definition: HarpoDet.h:33
#define PFX_NULL_CONTENT
Definition: frame.h:123
int Frame_IsMsgStat(void *fr)
UShort_t lData[MAX_EVENT_SIZE]
#define PFX_CH_HIT_CNT_HISTO
Definition: frame.h:79
int Frame_IsCFrame(void *fr, short *err_code)
#define PFX_PEDESTAL_H_MD
Definition: frame.h:111
int Frame_GetEventTyNbTs(void *fr, unsigned short *ev_ty, unsigned int *ev_nb, unsigned short *ev_tsl, unsigned short *ev_tsm, unsigned short *ev_tsh)
#define FRAME_PRINT_LAST_CELL_READ_1
Definition: frame.h:190
#define GET_FRAMING_VERSION(w)
Definition: frame.h:151
void SetDet(Int_t det)
Definition: HarpoDetEvent.h:43
virtual void Init()
#define GET_CHIP_IX(w)
Definition: frame.h:129
#define PFX_DEADTIME_HSTAT_BINS
Definition: frame.h:109
#define PFX_START_OF_EVENT
Definition: frame.h:66
void SetAnalyseFunction(HarpoDetAnalyse *func)
#define PFX_END_OF_FRAME
Definition: frame.h:108
#define FRAME_PRINT_HIT_CH
Definition: frame.h:179
#define FRAME_PRINT_HISTO_BINS
Definition: frame.h:182
void SetTimeStamp(ULong_t ts)
Data Format.
#define FRAME_PRINT_FRBND
Definition: frame.h:184
#define PFX_HISTO_BIN_IX
Definition: frame.h:46
#define FRAME_PRINT_EBBND
Definition: frame.h:193
#define PFX_ASCII_MSG_LEN
Definition: frame.h:60
#define PFX_2_BIT_CONTENT_MASK
Definition: frame.h:78
#define FRAME_PRINT_ASCII
Definition: frame.h:183
Base class for all Harpo Detectors.
Definition: HarpoDet.h:27
void PushBack()
Skeeping not "intersting" event.
#define GET_EOE_SIZE(w)
Definition: frame.h:164
A class store HARPO row FEMINOS event data and header. End provide access metods to the row data...
#define GET_FEMID(w)
Definition: frame.h:152
int Frame_IsDFrame(void *fr)
int Frame_IsDFrame_EndOfEvent(void *fr)
HarpoDetAnalyse * fDccAnalyse
ULong_t fPrevTimeStamp
#define GET_LST_READ_CELL(w)
Definition: frame.h:138
#define PFX_4_BIT_CONTENT_MASK
Definition: frame.h:65
void SetReaderType(int Id)
Set HaroReaderType.
#define FRAME_PRINT_EVBND
Definition: frame.h:185
unpacked dcc data The class contains the data map for DCC or Feminos The data is stored as a 2D TMatr...
Definition: HarpoDccMap.h:29
A virtual base class for all HARPO detectors readers.
HarpoPedestal * GetPedestals()
#define GET_TIME_BIN(w)
Definition: frame.h:144
#define GET_LAT_HISTO_BIN(w)
Definition: frame.h:136
void SetMap(HarpoDccMap *map)
Ruturn pointer to decoded data Map.
#define GET_EVENT_TYPE(word)
Definition: dccmacro.h:38
#define PFX_12_BIT_CONTENT_MASK
Definition: frame.h:36
#define PFX_14_BIT_CONTENT_MASK
Definition: frame.h:27
#define FRAME_PRINT_LAST_CELL_READ_0
Definition: frame.h:189
A class hold HARPO run iformation.
#define FRAME_PRINT_CHAN_DATA
Definition: frame.h:181
A class which define DCC channel mapping.
#define GET_CHAN_IX(w)
Definition: frame.h:130
#define PFX_START_OF_CFRAME
Definition: frame.h:50
#define GET_PEDTHR_LIST_MODE(w)
Definition: frame.h:148
#define PFX_TIME_BIN_IX
Definition: frame.h:45
HarpoDetHeader * fRunHeader
#define GET_ADC_DATA(w)
Definition: frame.h:135
#define PFX_8_BIT_CONTENT_MASK
Definition: frame.h:59
Bool_t Find(Long_t eventNo)
Long64_t gHarpoDebug
Definition: HarpoDebug.cxx:9
virtual void ProcessEvent(HarpoDetEvent *event)
void SkipEvent()
Read next event from raw file.
#define FRAME_PRINT_LISTS
Definition: frame.h:188
#define PFX_START_OF_DFRAME
Definition: frame.h:48
void SetPedestals(HarpoPedestal *obj)
Ste/Get Pedstal object.
Definition: HarpoDccMap.h:67
TString * fInFile
#define FRAME_PRINT_HIT_CNT
Definition: frame.h:180
#define PFX_START_OF_BUILT_EVENT
Definition: frame.h:114
#define GET_PEDTHR_LIST_ASIC(w)
Definition: frame.h:147
#define PFX_CARD_CHIP_CHAN_HISTO
Definition: frame.h:30
#define FRAME_PRINT_ALL
Definition: frame.h:177
A virtual class which define interface between HARPO Det Reader and Event Analysis code...
virtual const EventHeader_t * GetHeader() const
Definition: HarpoDetEvent.h:38
Long_t Loop()
Read errors.
#define FRAME_PRINT_SIZE
Definition: frame.h:178
#define PFX_CARD_CHIP_CHAN_HIT_IX
Definition: frame.h:28
#define GET_HISTO_BIN(w)
Definition: frame.h:145
void SetPlane(Int_t plane)
A class which read HARPO dcc file from one FEMINOS and creant Dcc Events and Dcc Headers for FEMINOS ...
HarpoDccDecode * decoder
Bool_t Init()
Init method : Open in/out files and check run header signature.
#define PFX_END_OF_BUILT_EVENT
Definition: frame.h:115
#define GET_CARD_IX(w)
Definition: frame.h:128
unsigned int res
Definition: Pmm2Status.h:428
ULong_t GetTimeStamp(Int_t=0)
HarpoFeminosEvent * GetEvent()
Int_t decode(Int_t raw, Int_t plane)
Raw address to Strip Number decoding routine.
#define PFX_SOBE_SIZE
Definition: frame.h:117
#define FRAME_PRINT_LAST_CELL_READ_3
Definition: frame.h:192
#define PFX_SHISTO_BINS
Definition: frame.h:112
#define GET_ASCII_LEN(w)
Definition: frame.h:157
#define PFX_START_OF_MFRAME
Definition: frame.h:49
#define PFX_PEDESTAL_HSTAT
Definition: frame.h:110
Bool_t NextSegment()
Find raw event by event number */.
#define PFX_PEDTHR_LIST
Definition: frame.h:47
HarpoFeminosHeader * GetDetHeader()
HarpoFeminosEvent * fEvent
#define PFX_9_BIT_CONTENT_MASK
Definition: frame.h:44
A class which keeps track of the entire configuration of the analysis.
Definition: HarpoConfig.h:50
#define PFX_CHIP_LAST_CELL_READ
Definition: frame.h:39
virtual void Save(char *=NULL)
int ProcessFrame(void *fr, int fr_sz)
#define GET_LST_READ_CELL_CHIP_IX(w)
Definition: frame.h:139
#define GET_PEDTHR_LIST_FEM(w)
Definition: frame.h:146
void SetHeader(UShort_t *data)