13 #include <arpa/inet.h>
26 #define EXPECTED_NB_FEMINOS_FRAGMENTS 18
27 #define NB_FEM_FRAGMENTS 72
28 #define MAX_FEM_DATA_BUFFER 2097152
38 if(
gHarpoDebug>0) Info(
"HarpoFeminosReader",
"Create ");
64 if(
gHarpoDebug>0) Info(
"HarpoFeminosReader",
" Create (cfg)");
87 if (
fIn != NULL) std::fclose(
fIn);
99 printf(
"------ Next Segment %ld\n",
fSegment);
101 if ( inFile.EndsWith(
"000.aqs") ) {
102 int l = inFile.Length();
105 inFile.Replace(l-7,3,snum);
110 const char *fn = inFile.Data();
111 if ( gSystem->AccessPathName(fn,kReadPermission) ) {
112 perror(
"Feminos File access");
120 if(
gHarpoDebug>0) Info(
"Next Segment",
"fin %s",fn);
122 fIn = std::fopen(fn,
"r");
131 perror(
"Feminos File open");
149 if(
gHarpoDebug>1) Info(
"NextEvent",
"Get Saved Event");
155 if (
fDone)
return false;
185 if(pres != 0) Warning(
"NextEvent",
"Frame process error %d",pres);
205 Info(
"HarpoFeminosReader",
"Format Error %d\n",kind);
249 const char * fn =
fInFile->Data();
251 if (
fInFile->BeginsWith(
"/" )) {
252 if ( gSystem->AccessPathName(fn,kReadPermission) ) {
253 perror(
"FEMINOS File access");
257 if ( gSystem->AccessPathName(fn,kReadPermission) )
262 TString DataDir(gSystem->Getenv(
"HARPO_DATA_DIR"));
264 if ( ! DataDir.EndsWith(
"/") ) DataDir.Append(
"/");
267 if ( gSystem->AccessPathName(fn,kReadPermission) ) {
268 perror(
"Feminos File access");
276 fIn = std::fopen(fn,
"r");
284 perror(
"Feminos File open");
302 if (++cnt >= maxevents)
break;
313 return Loop(maxevents);
320 Bool_t found =
false;
330 if (++cnt >= maxevents)
break;
338 if ( evt != NULL )
delete evt ;
367 sh = (
unsigned short *) &(
lData[1]);
374 if (fread(sh,
sizeof(
unsigned short), 1,
fIn) != 1)
378 printf(
"End of segment reached.\n");
381 printf(
"End of data, no more file reached.\n");
388 printf(
"End of file reached.\n");
397 printf(
"+++++ Start of Built Event *****\n");
405 printf(
"+++++ End of Built Event *****\n\n");
412 if (fread((sh+1),
sizeof(
unsigned short), 2,
fIn) != 2)
414 printf(
"Error: could not read two short words.\n");
417 TotBytes+=
sizeof(
unsigned short) * 2;
421 fr_sz = (int) (((*(sh+2)) << 16) | (*(sh+1)));
439 if (fread((sh+1),
sizeof(
unsigned short), 1,
fIn) != 1)
441 printf(
"Error: could not read short word.\n");
448 fr_sz = (int) *(sh+1);
461 printf(
"Error: cannot interpret short word 0x%x\n", *sh);
467 if (fread(&(
lData[fr_offset]),
sizeof(
unsigned short), nb_sh,
fIn) != nb_sh)
469 printf(
"Error: could not read %d bytes.\n", (nb_sh*2));
472 TotBytes+=
sizeof(
unsigned short) * nb_sh;
526 unsigned short r0, r1, r2, r3;
535 unsigned long int ltmp;
546 p = (
unsigned short *) fr;
555 printf(
"Frame payload: %d bytes\n", fr_sz);
567 rawch = 76 * r1 + r2 - 3;
573 printf(
" Card %02d Chip %01d Channel %02d\n", r0, r1, r2);
587 printf(
"Card %02d Chip %01d Channel_Hit_Count %02d\n", r0, r1, r2);
600 printf(
"Card %02d Chip %01d Channel %02d ", r0, r1, r2);
609 if (si > 511) printf(
"ERROR Time bin > 511 time %d\n",si);
615 if (r0 >0) printf(
"ERROR non negative ADC %d with negative time %d\n",r0,si);
624 printf(
"%03d 0x%04x (%4d)\n", si, r0, r0);
645 tmp = (((
unsigned int) r2) << 16) | (
unsigned int) (r1);
648 printf(
"%03d %03d\n", r0, tmp);
672 printf(
"Chip %01d Last_Cell_Read %03d (0x%03x)\n",
679 printf(
"Chip %01d Last_Cell_Read %03d (0x%03x)\n",
686 printf(
"Chip %01d Last_Cell_Read %03d (0x%03x)\n",
693 printf(
"Chip %01d Last_Cell_Read %03d (0x%03x)\n",
705 printf(
"Time_Bin: %d\n", r0);
720 printf(
"Bin %3d Val %5d\n", r0, *p);
740 printf(
"# Pedestal List for FEM %02d ASIC %01d\n", r0, r1);
744 printf(
"# Threshold List for FEM %02d ASIC %01d\n", r0, r1);
746 printf(
"fem %02d\n", r0);
761 tmp_i[0] = (int) * ((
short *) p);
766 sprintf(tmp_str,
"ped");
770 sprintf(tmp_str,
"thr");
772 if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_LISTS) )
774 printf(
"%s %1d %2d 0x%04x (%4d)\n", tmp_str, r1, j, *p, tmp_i[0]);
791 printf(
"--- Start of Data Frame (V.%01d) FEM %02d --\n", r0, r1);
792 printf(
"Filled with %d bytes\n", *p);
807 printf(
"--- Start of Moni Frame (V.%01d) FEM %02d --\n", r0, r1);
808 printf(
"Filled with %d bytes\n", *p);
823 printf(
"--- Start of Config Frame (V.%01d) FEM %02d --\n", r0, r1);
824 printf(
"Error code: %d\n", *((
short *) p));
864 printf(
"-- Start of Event (Type %01d) --\n", r0);
890 ltmp = ((
unsigned long) r2 << 32) | ((
unsigned long)r1 << 16 ) |(
unsigned long) r0 ;
893 if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_EVBND))
895 printf(
"Time 0x%04x 0x%04x 0x%04x\n", r2, r1, r0);
910 tmp = (((
unsigned int) r1) << 16) | ((
unsigned int) r0);
915 if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_EVBND))
917 printf(
"Event_Count 0x%08x (%d)\n", tmp, tmp);
926 tmp = tmp + (
unsigned int) *p;
932 printf(
"----- End of Event ----- (size %d bytes)\n", tmp);
943 printf(
"Channel Hit Count Histogram (ASIC %d)\n", r0);
955 ui = (
unsigned int *) p;
959 printf(
"Min Bin : %d\n", *ui);
965 if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
967 printf(
"Max Bin : %d\n", *ui);
973 if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
975 printf(
"Bin Width: %d\n", *ui);
981 if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
983 printf(
"Bin Count: %d\n", *ui);
990 if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
992 printf(
"Min Value: %d\n", *ui);
998 if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1000 printf(
"Max Value: %d\n", *ui);
1006 if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1008 printf(
"Mean : %.2f\n", ((
float) *ui) / 100.0);
1014 if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1016 printf(
"Std Dev : %.2f\n", ((
float) *ui) / 100.0);
1022 if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1024 printf(
"Entries : %d\n", *ui);
1031 for (j=0; j<r0; j++)
1033 if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1035 printf(
"Bin(%2d) = %9d\n", j, *ui);
1043 p = (
unsigned short *) ui;
1051 printf(
"----- End of Frame -----\n");
1061 printf(
"null word (2 bytes)\n");
1073 printf(
"Dead-time Histogram\n");
1077 printf(
"Inter Event Time Histogram\n");
1090 ui = (
unsigned int *) p;
1094 printf(
"Min Bin : %d\n", *ui);
1100 if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1102 printf(
"Max Bin : %d\n", *ui);
1108 if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1110 printf(
"Bin Width: %d\n", *ui);
1116 if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1118 printf(
"Bin Count: %d\n", *ui);
1124 if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1126 printf(
"Min Value: %d\n", *ui);
1132 if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1134 printf(
"Max Value: %d\n", *ui);
1140 if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1142 printf(
"Mean : %.2f\n", ((
float) *ui) / 100.0);
1148 if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1150 printf(
"Std Dev : %.2f\n", ((
float) *ui) / 100.0);
1156 if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1158 printf(
"Entries : %d\n", *ui);
1165 p = (
unsigned short *) ui;
1171 printf(
"\nPedestal Histogram Statistics\n");
1177 ui = (
unsigned int *) p;
1181 printf(
"Min Bin : %d\n", *ui);
1189 printf(
"Max Bin : %d\n", *ui);
1195 if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1197 printf(
"Bin Width: %d\n", *ui);
1203 if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1205 printf(
"Bin Count: %d\n", *ui);
1211 if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1213 printf(
"Min Value: %d\n", *ui);
1219 if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1221 printf(
"Max Value: %d\n", *ui);
1227 if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1229 printf(
"Mean : %.2f\n", ((
float) *ui) / 100.0);
1235 if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1237 printf(
"Std Dev : %.2f\n", ((
float) *ui) / 100.0);
1243 if ( (vflg & FRAME_PRINT_ALL) || (vflg & FRAME_PRINT_HISTO_STAT))
1245 printf(
"Entries : %d\n", *ui);
1252 p = (
unsigned short *) ui;
1260 ui = (
unsigned int *) p;
1262 mean = (float) (((
float) *ui) / 100.0);
1267 std_dev = (float) (((
float) *ui) / 100.0);
1274 printf(
"Mean/Std_dev : %.2f %.2f\n", mean, std_dev);
1278 p = (
unsigned short *) ui;
1284 printf(
"Threshold Turn-on curve\n");
1322 tmp_i[0] = (int) ((r1 << 16) | (r0));
1334 tmp_i[1] = (int) ((r1 << 16) | (r0));
1346 tmp_i[2] = (int) ((r1 << 16) | (r0));
1358 tmp_i[3] = (int) ((r1 << 16) | (r0));
1370 tmp_i[4] = (int) ((r1 << 16) | (r0));
1382 tmp_i[5] = (int) ((r1 << 16) | (r0));
1394 tmp_i[6] = (int) ((r1 << 16) | (r0));
1406 tmp_i[7] = (int) ((r1 << 16) | (r0));
1418 tmp_i[8] = (int) ((r1 << 16) | (r0));
1420 if (vflg & FRAME_PRINT_ALL)
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]);
1430 printf(
"***** Start of Built Event *****\n");
1440 printf(
"***** End of Built Event *****\n\n");
1464 tmp_i[0] = (int) ((r1 << 16) | (r0));
1468 printf(
"***** Start of Built Event - Size = %d bytes *****\n", tmp_i[0]);
1475 printf(
"word(%04d) : 0x%x (%d) unknown data\n", i, *p, *p);
1485 else if (sz_rd > fr_sz)
1487 printf(
"Format error: read %d bytes but packet size is %d\n", sz_rd, fr_sz);
1493 if (vflg & FRAME_PRINT_ALL)
1509 s = (
unsigned short *) fr;
1511 sz = (sz / 2) - 1 - 1 - 1;
1530 s = (
unsigned short *) fr;
1551 s = (
unsigned short *) fr;
1570 s = (
unsigned short *) fr;
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)
1603 unsigned short r0, r1;
1605 p = (
unsigned short *) fr;
1633 *ev_nb = (((
unsigned int) r1) << 16) | ((
unsigned int) r0);
#define FRAME_PRINT_LAST_CELL_READ_2
#define GET_PEDTHR_LIST_TYPE(w)
#define GET_CH_HIT_CNT_HISTO_CHIP_IX(w)
#define FRAME_PRINT_HISTO_STAT
#define PFX_CMD_STATISTICS
#define PFX_0_BIT_CONTENT_MASK
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)
HarpoFeminosEvent * fSaveEvent
#define PFX_CARD_CHIP_CHAN_HIT_CNT
#define PFX_LAT_HISTO_BIN
#define PFX_EVPERIOD_HSTAT_BINS
#define FRAME_PRINT_NULLW
void SetRunHeader(HarpoDetHeader *rh)
Return pointer to decoded pmm2 data vector.
const char * GetName() const
int Frame_IsMsgStat(void *fr)
UShort_t lData[MAX_EVENT_SIZE]
#define PFX_CH_HIT_CNT_HISTO
int Frame_IsCFrame(void *fr, short *err_code)
#define PFX_PEDESTAL_H_MD
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
#define GET_FRAMING_VERSION(w)
#define PFX_DEADTIME_HSTAT_BINS
#define PFX_START_OF_EVENT
void SetAnalyseFunction(HarpoDetAnalyse *func)
#define FRAME_PRINT_HIT_CH
#define FRAME_PRINT_HISTO_BINS
void SetTimeStamp(ULong_t ts)
Data Format.
#define FRAME_PRINT_FRBND
virtual ~HarpoFeminosReader()
#define FRAME_PRINT_EBBND
#define PFX_ASCII_MSG_LEN
#define PFX_2_BIT_CONTENT_MASK
#define FRAME_PRINT_ASCII
Base class for all Harpo Detectors.
void PushBack()
Skeeping not "intersting" event.
A class store HARPO row FEMINOS event data and header. End provide access metods to the row data...
int Frame_IsDFrame(void *fr)
int Frame_IsDFrame_EndOfEvent(void *fr)
HarpoDetAnalyse * fDccAnalyse
#define GET_LST_READ_CELL(w)
#define PFX_4_BIT_CONTENT_MASK
#define FRAME_PRINT_EVBND
unpacked dcc data The class contains the data map for DCC or Feminos The data is stored as a 2D TMatr...
A virtual base class for all HARPO detectors readers.
#define GET_LAT_HISTO_BIN(w)
void SetMap(HarpoDccMap *map)
Ruturn pointer to decoded data Map.
#define GET_EVENT_TYPE(word)
#define PFX_12_BIT_CONTENT_MASK
#define PFX_14_BIT_CONTENT_MASK
#define FRAME_PRINT_LAST_CELL_READ_0
#define FRAME_PRINT_CHAN_DATA
A class which define DCC channel mapping.
#define PFX_START_OF_CFRAME
#define GET_PEDTHR_LIST_MODE(w)
HarpoDetHeader * fRunHeader
#define PFX_8_BIT_CONTENT_MASK
Bool_t Find(Long_t eventNo)
virtual void ProcessEvent(HarpoDetEvent *event)
void SkipEvent()
Read next event from raw file.
#define FRAME_PRINT_LISTS
#define PFX_START_OF_DFRAME
void SetPedestals(HarpoPedestal *obj)
Ste/Get Pedstal object.
#define FRAME_PRINT_HIT_CNT
#define PFX_START_OF_BUILT_EVENT
#define GET_PEDTHR_LIST_ASIC(w)
#define PFX_CARD_CHIP_CHAN_HISTO
A virtual class which define interface between HARPO Det Reader and Event Analysis code...
virtual const EventHeader_t * GetHeader() const
Long_t Loop()
Read errors.
#define PFX_CARD_CHIP_CHAN_HIT_IX
void SetPlane(Int_t plane)
A class which read HARPO dcc file from one FEMINOS and creant Dcc Events and Dcc Headers for FEMINOS ...
Bool_t Init()
Init method : Open in/out files and check run header signature.
#define PFX_END_OF_BUILT_EVENT
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 FRAME_PRINT_LAST_CELL_READ_3
#define PFX_START_OF_MFRAME
#define PFX_PEDESTAL_HSTAT
Bool_t NextSegment()
Find raw event by event number */.
HarpoFeminosHeader * GetDetHeader()
HarpoFeminosEvent * fEvent
#define PFX_9_BIT_CONTENT_MASK
A class which keeps track of the entire configuration of the analysis.
#define PFX_CHIP_LAST_CELL_READ
virtual void Save(char *=NULL)
int ProcessFrame(void *fr, int fr_sz)
#define GET_LST_READ_CELL_CHIP_IX(w)
#define GET_PEDTHR_LIST_FEM(w)
void SetHeader(UShort_t *data)