MIDAS
Loading...
Searching...
No Matches
mdump.cxx File Reference
#include "midas.h"
#include "msystem.h"
#include "mrpc.h"
#include "mdsupport.h"
#include "midasio.h"
#include "mstrlcpy.h"
#include <vector>
Include dependency graph for mdump.cxx:

Go to the source code of this file.

Classes

struct  FMT_ID
 

Macros

#define REP_HEADER   1
 
#define REP_RECORD   2
 
#define REP_LENGTH   3
 
#define REP_EVENT   4
 
#define REP_BANKLIST   5
 

Functions

DWORD data_format_check (EVENT_HEADER *pevent, INT *i)
 
void md_all_info_display (int seqno, int runno, TMEvent *e)
 
int replog (int data_fmt, char *rep_file, int bl, int action, int max_event_size)
 
void process_event (HNDLE hBuf, HNDLE request_id, EVENT_HEADER *pheader, void *pevent)
 
int main (int argc, char **argv)
 

Variables

char bank_name [4]
 
char sbank_name [4]
 
INT hBufEvent
 
INT save_dsp = 1
 
INT evt_display = 0
 
INT speed = 0
 
INT dsp_time = 0
 
INT dsp_fmt = 0
 
INT dsp_mode = 0
 
INT bl = -1
 
INT consistency = 0
 
INT disp_bank_list = 0
 
INT openzip = 0
 
BOOL via_callback
 
INT i
 
INT data_fmt
 
double count = 0
 
KEY key
 
HNDLE hSubkey
 
INT event_id
 
INT event_msk
 
std::vector< FMT_IDeq
 

Macro Definition Documentation

◆ REP_BANKLIST

#define REP_BANKLIST   5

Definition at line 24 of file mdump.cxx.

◆ REP_EVENT

#define REP_EVENT   4

Definition at line 23 of file mdump.cxx.

◆ REP_HEADER

#define REP_HEADER   1

Definition at line 20 of file mdump.cxx.

◆ REP_LENGTH

#define REP_LENGTH   3

Definition at line 22 of file mdump.cxx.

◆ REP_RECORD

#define REP_RECORD   2

Definition at line 21 of file mdump.cxx.

Function Documentation

◆ data_format_check()

DWORD data_format_check ( EVENT_HEADER pevent,
INT i 
)

Definition at line 58 of file mdump.cxx.

58 {
59
60 INT jj, ii;
62
63 /* check in the active FE list for duplicate event ID */
64 ii = 0;
65 while (eq[ii].fmt) {
66 jj = ii + 1;
67 /* problem occur when duplicate ID with different data format */
68 while (eq[jj].fmt) {
69 if ((eq[jj].fmt != eq[ii].fmt)
70 && (eq[jj].id == eq[ii].id)
71 && (eq[jj].msk == eq[ii].msk)
72 && eq[ii].id != 0) {
73 printf("Duplicate eventID[%d] between Eq:%s & %s ", eq[jj].id, eq[jj].Eqname,
74 eq[ii].Eqname);
75 printf("Dumping event in raw format\n");
76 dupflag = TRUE;
77 }
78 jj++;
79 }
80 ii++;
81 }
82 if (data_fmt != 0) {
83 *i = 0;
84 strcpy(eq[*i].Fmt, "GIVEN");
85 return data_fmt;
86 } else {
87 *i = 0;
88 if (dupflag)
89 strcpy(eq[*i].Fmt, "DUPLICATE");
90 else {
91 do {
92 if (pevent->event_id == eq[*i].id)
93 return eq[*i].fmt;
94 (*i)++;
95 } while (eq[*i].fmt);
96 }
97 }
98 return 0;
99}
#define FALSE
Definition cfortran.h:309
INT i
Definition mdump.cxx:32
std::vector< FMT_ID > eq
Definition mdump.cxx:55
INT data_fmt
Definition mdump.cxx:32
DWORD BOOL
Definition midas.h:105
int INT
Definition midas.h:129
#define TRUE
Definition midas.h:182
TH1X EXPRT * h1_book(const char *name, const char *title, int bins, double min, double max)
Definition rmidas.h:24
short int event_id
Definition midas.h:852
Here is the call graph for this function:
Here is the caller graph for this function:

◆ main()

int main ( int  argc,
char **  argv 
)

Definition at line 372 of file mdump.cxx.

372 {
373 HNDLE hDB, hKey;
375 char buf_name[32] = EVENT_BUFFER_NAME, rep_file[128];
376 unsigned int status, start_time, stop_time;
378 INT ch, request_id, size, get_flag, action, single, i, max_event_size;
379 BUFFER_HEADER buffer_header;
380
381 /* set default */
382 host_name[0] = 0;
383 expt_name[0] = 0;
384 sbank_name[0] = 0;
385 rep_file[0] = 0;
388 evt_display = 1;
393 rep_flag = FALSE;
394 dsp_time = 0;
395 speed = 0;
396 single = 0;
397 consistency = 0;
400
401 /* Get if existing the pre-defined experiment */
403
404 /* scan arg list for -x which specify the replog configuration */
405 for (i = 1; i < argc; i++) {
406 if (strncmp(argv[i], "-x", 2) == 0) {
407 if (i + 1 == argc)
408 goto repusage;
409 if (strncmp(argv[++i], "online", 6) != 0) {
410 rep_flag = TRUE;
411 break;
412 }
413 }
414 }
415 if (rep_flag) {
416 /* get Replay argument list */
417 data_fmt = 0;
418 for (i = 1; i < argc; i++) {
419 if (argv[i][0] == '-' && argv[i][1] == 'd')
420 debug = TRUE;
421 else if (strncmp(argv[i], "-single", 7) == 0)
422 single = 1;
423 else if (strncmp(argv[i], "-j", 2) == 0)
424 disp_bank_list = 1;
425 else if (strncmp(argv[i], "-y", 2) == 0)
426 consistency = 1;
427 else if (argv[i][0] == '-') {
428 if (i + 1 >= argc || argv[i + 1][0] == '-')
429 goto repusage;
430 if (strncmp(argv[i], "-t", 2) == 0) {
431 mstrlcpy(str, argv[++i], sizeof(str));
432 if (strncmp(str, "m", 1) == 0)
434 } else if (strncmp(argv[i], "-b", 2) == 0)
435 memcpy(sbank_name, argv[++i], 4);
436 else if (strncmp(argv[i], "-i", 2) == 0)
437 event_id = atoi(argv[++i]);
438 else if (strncmp(argv[i], "-k", 2) == 0)
439 event_msk = atoi(argv[++i]);
440 else if (strncmp(argv[i], "-a", 2) == 0)
442 else if (strncmp(argv[i], "-m", 2) == 0) {
443 mstrlcpy(str, argv[++i], sizeof(str));
444 if (strncmp(str, "r", 1) == 0)
446 if (strncmp(str, "b", 1) == 0)
448 } else if (strncmp(argv[i], "-w", 2) == 0) {
449 mstrlcpy(str, argv[++i], sizeof(str));
450 if (strncmp(str, "h", 1) == 0)
452 else if (strncmp(str, "r", 1) == 0)
454 else if (strncmp(str, "l", 1) == 0)
456 else if (strncmp(str, "e", 1) == 0)
458 else if (strncmp(str, "j", 1) == 0)
460 } else if (strncmp(argv[i], "-f", 2) == 0) {
461 mstrlcpy(str, argv[++i], sizeof(str));
462 if (strncmp(str, "d", 1) == 0)
464 if (strncmp(str, "x", 1) == 0)
466 if (strncmp(str, "a", 1) == 0)
468 } else if (strncmp(argv[i], "-r", 2) == 0)
469 bl = atoi(argv[++i]);
470 else if (strncmp(argv[i], "-x", 2) == 0) {
471 if (i + 1 == argc)
472 goto repusage;
473 strcpy(rep_file, argv[++i]);
474 } else {
475 repusage:
476 printf("mdump for replay -x file name : file to inspect\n");
477 printf(" -m mode : Display mode either Bank or raw\n");
478 printf(" -b bank name : search for bank name (case sensitive)\n");
479 printf(" -i evt_id (any) : event id from the FE\n");
480 printf(" -[single] : Request single bank only (to be used with -b)\n");
481 printf(" -y : Serial number consistency check(-i supported)\n");
482 printf(" -j : Display # of banks and bank name list only for all the event\n");
483 printf(" -k mask (any) : trigger_mask from FE setting\n");
484 printf(">>> -i and -k are valid for YBOS ONLY if EVID bank is present in the event\n");
485 printf(" -w what : [h]eader, [r]ecord, [l]ength\n");
486 printf(" [e]vent, [j]bank_list (same as -j)\n");
487 printf(">>> Header & Record are not supported for MIDAS as no physical record structure exists\n");
488 printf(" -f format (auto): data representation ([x]/[d]/[a]scii) def:bank header content\n");
489 printf(" -r # : skip event(MIDAS) to #\n");
490 printf(" -a bytes : max event size to support (defaults to %d bytes)\n",
492 return 0;
493 }
494 }
495 }
496 } else { // Online
497 /* get parameters for online */
498 for (i = 1; i < argc; i++) {
499 if (argv[i][0] == '-' && argv[i][1] == 'd')
500 debug = TRUE;
501 else if (strncmp(argv[i], "-s", 2) == 0)
502 speed = 1;
503 else if (strncmp(argv[i], "-y", 2) == 0)
504 consistency = 1;
505 else if (strncmp(argv[i], "-j", 2) == 0)
506 disp_bank_list = 1;
507 else if (argv[i][0] == '-') {
508 if (i + 1 >= argc || argv[i + 1][0] == '-')
509 goto usage;
510 else if (strncmp(argv[i], "-x", 2) == 0)
511 strncpy(rep_file, argv[++i], 4);
512 else if (strncmp(argv[i], "-b", 2) == 0)
513 memcpy(sbank_name, argv[++i], 4);
514 else if (strncmp(argv[i], "-l", 2) == 0)
516 else if (strncmp(argv[i], "-w", 2) == 0)
517 dsp_time = 1000 * (atoi(argv[++i]));
518 else if (strncmp(argv[i], "-m", 2) == 0) {
519 mstrlcpy(str, argv[++i], sizeof(str));
520 if (strncmp(str, "r", 1) == 0)
522 if (strncmp(str, "y", 1) == 0)
524 } else if (strncmp(argv[i], "-g", 2) == 0) {
525 mstrlcpy(str, argv[++i], sizeof(str));
526 if (strncmp(str, "s", 1) == 0)
528 if (strncmp(str, "a", 1) == 0)
530 } else if (strncmp(argv[i], "-f", 2) == 0) {
531 mstrlcpy(str, argv[++i], sizeof(str));
532 if (strncmp(str, "d", 1) == 0)
534 if (strncmp(str, "x", 1) == 0)
536 if (strncmp(str, "a", 1) == 0)
538 } else if (strncmp(argv[i], "-i", 2) == 0)
539 event_id = atoi(argv[++i]);
540 else if (strncmp(argv[i], "-k", 2) == 0)
541 event_msk = atoi(argv[++i]);
542 else if (strncmp(argv[i], "-z", 2) == 0)
543 strcpy(buf_name, argv[++i]);
544 else if (strncmp(argv[i], "-t", 2) == 0) {
545 mstrlcpy(str, argv[++i], sizeof(str));
546 if (strncmp(str, "m", 1) == 0)
548 } else if (strncmp(argv[i], "-h", 2) == 0)
549 strcpy(host_name, argv[++i]);
550 else if (strncmp(argv[i], "-e", 2) == 0)
551 strcpy(expt_name, argv[++i]);
552 else {
553 usage:
554 printf("mdump for online -l # : display # events (look 1)\n");
555 printf
556 (" -f format (auto): data representation ([x]/[d]/[a]scii) def:bank header content\n");
557 printf
558 (" -w time : insert wait in [sec] between each display\n");
559 printf
560 (" -m mode : Display mode either Bank or raw\n");
561 printf
562 (" -j : Display # of banks and bank name list only for all the event\n");
563 printf
564 (" -b bank name : search for bank name (case sensitive)\n");
565 printf
566 (" -i evt_id (any) : event id from the FE\n");
567 printf
568 (" -k mask (any) : trigger_mask from FE setting\n");
569 printf
570 (" -g type : sampling mode either SOME or all)\n");
571 printf
572 (" -s : report buffer data rate and fill level\n");
573 printf
574 (" -s -d : for use with -s: also report all buffer clients and requests\n");
575 printf
576 (" -t type (auto) : Bank format (Midas/Ybos)\n");
577 printf
578 (" -x Source : Data source selection def:online (see -x -h)\n");
579 printf
580 (" -y : Serial number consistency check\n");
581 printf
582 (">>> in case of -y it is recommented to used -g all\n");
583 printf
584 (" -z buffer name : Midas buffer name default:[SYSTEM]\n");
585 printf
586 (" [-h Hostname] [-e Experiment]\n\n");
587 return 0;
588 }
589 }
590 }
591 }
592
593 // Set flag to inform that we're coming from mdump -> open zip (.mid.gz)
594 if ((strstr(argv[0], "mdump") == NULL)) openzip = 0; else openzip = 1;
595
596 if ((sbank_name[0] != 0) && single) dsp_mode += 1;
597
598 if (rep_flag && data_fmt == 0) {
599 char *pext;
600 if ((pext = strrchr(rep_file, '.')) != 0) {
601 if (equal_ustring(pext + 1, "mid")) {
603 } else if (equal_ustring(pext + 1, "gz")) {
604 if ((pext = strchr(rep_file, '.')) != 0) {
605 if (strstr(pext + 1, "mid"))
607 } else {
608 printf("\n>>> data type (-t) should be set by hand in -x mode for tape <<< \n\n");
609 goto usage;
610 }
611 } else if (equal_ustring(pext + 1, "lz4")) {
613 } else if (equal_ustring(pext + 1, "bz2")) {
615 } else {
616 printf
617 ("\n>>> data type (-t) should be set by hand in -x mode for tape <<< \n\n");
618 goto usage;
619 }
620 }
621 }
622
623 /* steer to replog function */
624 if (rep_flag) {
626 return 0;
627 } else {
628 /* check parameters */
630 printf("mdump-F- <-display arg> out of range (1:9999)\n");
631 return -1;
632 }
633 }
635 printf("mdump-F- <-delay arg> out of range (1:100)\n");
636 return -1;
637 }
638
639 /* do not produce startup message */
641
642 /* connect to experiment */
644 if (status != CM_SUCCESS)
645 return 1;
646
647#ifdef _DEBUG
649#endif
650
651 /* open the shared memory buffer with proper size */
653 if (status != BM_SUCCESS && status != BM_CREATED) {
654 cm_msg(MERROR, "mdump", "Cannot open buffer \"%s\", bm_open_buffer() status %d", buf_name, status);
655 goto error;
656 }
657 /* set the buffer cache size if requested */
658 bm_set_cache_size(hBufEvent, 100000, 0);
659
660 /* place a request for a specific event id */
662
663 start_time = 0;
664 if (speed == 1)
665 printf("- MIDAS revision: %s -- Enter <!> to Exit ------- Midas Dump in Speed test mode ---\n",
667 else
668 printf("- MIDAS revision: %s -- Enter <!> to Exit ------- Midas Dump ---\n", cm_get_revision());
669
670 /* connect to the database */
672
673 { /* ID block */
674 INT l = 0;
675 /* check if dir exists */
676 if (db_find_key(hDB, 0, "/equipment", &hKey) == DB_SUCCESS) {
677 char strtmp[256], equclient[256];
678 for (i = 0;; i++) {
680 if (!hSubkey)
681 break;
683 FMT_ID f;
684 eq.push_back(f);
685 mstrlcpy(eq[l].Eqname, key.name, sizeof(eq[l].Eqname));
686 /* check if client running this equipment is present */
687 /* extract client name from equipment */
688 size = sizeof(equclient);
689 sprintf(strtmp, "/equipment/%s/common/Frontend name", key.name);
691
692 /* search client name under /system/clients/xxx/name */
693 /* Outcommented 22 Dec 1997 SR because of problem when
694 mdump is started before frontend
695 if (status = cm_exist(equclient,FALSE) != CM_SUCCESS)
696 continue;
697 */
698 size = sizeof(WORD);
699 sprintf(strtmp, "/equipment/%s/common/event ID", key.name);
700 db_get_value(hDB, 0, strtmp, &(eq[l]).id, &size, TID_WORD, TRUE);
701
702 size = sizeof(WORD);
703 sprintf(strtmp, "/equipment/%s/common/Trigger mask", key.name);
704 db_get_value(hDB, 0, strtmp, &(eq[l]).msk, &size, TID_WORD, TRUE);
705
706 size = sizeof(str);
707 sprintf(strtmp, "/equipment/%s/common/Format", key.name);
708 db_get_value(hDB, 0, strtmp, str, &size, TID_STRING, TRUE);
709 if (equal_ustring(str, "MIDAS")) {
710 eq[l].fmt = FORMAT_MIDAS;
711 strcpy(eq[l].Fmt, "MIDAS");
712 } else if (equal_ustring(str, "FIXED")) {
713 eq[l].fmt = FORMAT_FIXED;
714 strcpy(eq[l].Fmt, "FIXED");
715 } else {
716 cm_msg(MERROR, "mdump", "Unknown format \"%s\" in equipment \"%s\"", str, key.name);
717 eq[l].fmt = 0;
718 strcpy(eq[l].Fmt, "UNKNOWN");
719 }
720 l++;
721 }
722 }
723
724 /* for equipment */
725 /* check for EBuilder */
726 if (db_find_key(hDB, 0, "/EBuilder/Settings", &hKey) == DB_SUCCESS) {
727 sprintf(eq[l].Eqname, "EBuilder");
728 /* check if client running this equipment is present */
729 /* search client name under /system/clients/xxx/name */
730 /* Outcommented 22 Dec 1997 SR because of problem when
731 mdump is started before frontend
732 if (status = cm_exist(equclient,FALSE) != CM_SUCCESS)
733 continue;
734 */
735 size = sizeof(WORD);
736 db_get_value(hDB, hKey, "Event ID", &(eq[l]).id, &size, TID_WORD, TRUE);
737
738 size = sizeof(WORD);
739 db_get_value(hDB, hKey, "Trigger mask", &(eq[l]).msk, &size, TID_WORD, TRUE);
740
741 size = sizeof(str);
742 db_get_value(hDB, hKey, "Format", str, &size, TID_STRING, TRUE);
743 if (equal_ustring(str, "MIDAS")) {
744 eq[l].fmt = FORMAT_MIDAS;
745 strcpy(eq[l].Fmt, "MIDAS");
746 } else {
747 printf("Format unknown for Event Builder \"%s\"\n", str);
748 goto error;
749 }
750 l++;
751 }
752
753 /* Debug */
754 if (debug) {
755 i = 0;
756 printf("ID\tMask\tFormat\tEq_name\n");
757 while (eq.size() > 0 && eq[i].fmt) {
758 printf("%d\t%d\t%s\t%s\n", eq[i].id, eq[i].msk, eq[i].Fmt, eq[i].Eqname);
759 i++;
760 }
761 }
762 } /* ID block */
763
764 do {
765 if (via_callback)
766 status = cm_yield(1000);
767 if (speed == 1) {
768 /* calculate rates each second */
769 if (ss_millitime() - start_time > 1000) {
771 double rate = count / 1024.0 / 1024.0 / ((stop_time - start_time) / 1000.0);
772
773 /* get information about filling level of the buffer */
774 bm_get_buffer_info(hBufEvent, &buffer_header);
775 int filled = buffer_header.read_pointer - buffer_header.write_pointer;
776 if (filled <= 0)
777 filled += buffer_header.size;
778
779 int max_used = 0;
780 int max_used_client = 0;
781 int now = ss_millitime();
782
783 if (debug) {
784
785 printf("buffer name [%s], clients: %d, max: %d, size: %d, rp: %d, wp: %d, ine: %d, oute: %d\n",
786 buffer_header.name,
787 buffer_header.num_clients,
788 buffer_header.max_client_index,
789 buffer_header.size,
790 buffer_header.read_pointer,
791 buffer_header.write_pointer,
792 buffer_header.num_in_events,
793 buffer_header.num_out_events
794 );
795
796 for (int i = 0; i < buffer_header.max_client_index; i++) {
797 if (buffer_header.client[i].pid) {
798 int used = buffer_header.write_pointer - buffer_header.client[i].read_pointer;
799 if (used < 0)
800 used += buffer_header.size;
801
802 if (buffer_header.client[i].all_flag) {
803 if (used > max_used) {
804 max_used = used;
806 }
807 }
808
809 printf(" client %d: name [%s], pid: %d, port: %d, rp: %d, used: %d, max_req: %d, read_wait: %d, write_wait: %d, wake_up: %d, get_all: %d, active: %d, timeout: %d\n",
810 i,
811 buffer_header.client[i].name,
812 buffer_header.client[i].pid,
813 buffer_header.client[i].port,
814 buffer_header.client[i].read_pointer,
815 used,
816 buffer_header.client[i].max_request_index,
817 buffer_header.client[i].read_wait,
818 buffer_header.client[i].write_wait,
819 buffer_header.client[i].wake_up,
820 buffer_header.client[i].all_flag,
821 now - buffer_header.client[i].last_activity,
822 buffer_header.client[i].watchdog_timeout);
823
824 for (int j = 0; j < buffer_header.client[i].max_request_index; j++)
825 if (buffer_header.client[i].event_request[j].valid)
826 printf(" request %d: id: %d, valid: %d, event_id: %d, trigger_mask: 0x%x, type: %d\n",
827 j,
828 buffer_header.client[i].event_request[j].id,
829 buffer_header.client[i].event_request[j].valid,
830 buffer_header.client[i].event_request[j].event_id,
831 buffer_header.client[i].event_request[j].trigger_mask,
832 buffer_header.client[i].event_request[j].sampling_type);
833 }
834 }
835 }
836 printf("buffer name [%s], ", buffer_header.name);
837 printf("filled: %4.1f%%, ", 100 - 100.0 * filled / buffer_header.size);
838 printf("used: %4.1f%% by [%s], ", 100.0 * max_used / buffer_header.size,
839 buffer_header.client[max_used_client].name);
840 printf("rate: %1.3f MiB/sec\n", rate);
841
842 start_time = stop_time;
843 count = 0;
844 }
845 } // Speed
846
847 /* speed */
848 /* check keyboard */
849 ch = 0;
850 if (ss_kbhit()) {
851 ch = ss_getchar(0);
852 if (ch == -1)
853 ch = getchar();
854 if ((char) ch == '!')
855 break;
856 }
857 } while (status != RPC_SHUTDOWN && status != SS_ABORT);
858
859 error:
860 /* do not produce shutdown message */
862
864
865 return 1;
866}
static void usage()
INT bm_open_buffer(const char *buffer_name, INT buffer_size, INT *buffer_handle)
Definition midas.cxx:6717
INT bm_request_event(HNDLE buffer_handle, short int event_id, short int trigger_mask, INT sampling_type, HNDLE *request_id, EVENT_HANDLER *func)
Definition midas.cxx:8465
INT bm_set_cache_size(INT buffer_handle, size_t read_size, size_t write_size)
Definition midas.cxx:8140
INT cm_yield(INT millisec)
Definition midas.cxx:5642
INT cm_get_experiment_database(HNDLE *hDB, HNDLE *hKeyClient)
Definition midas.cxx:3011
INT cm_connect_experiment(const char *host_name, const char *exp_name, const char *client_name, void(*func)(char *))
Definition midas.cxx:2278
INT cm_disconnect_experiment(void)
Definition midas.cxx:2846
INT cm_get_environment(char *host_name, int host_name_size, char *exp_name, int exp_name_size)
Definition midas.cxx:2134
const char * cm_get_revision()
Definition midas.cxx:1484
INT cm_set_watchdog_params(BOOL call_watchdog, DWORD timeout)
Definition midas.cxx:3283
#define CM_SUCCESS
Definition midas.h:582
#define BM_SUCCESS
Definition midas.h:605
#define BM_CREATED
Definition midas.h:606
#define DB_SUCCESS
Definition midas.h:631
#define SS_ABORT
Definition midas.h:677
#define RPC_SHUTDOWN
Definition midas.h:707
unsigned short int WORD
Definition mcstd.h:49
#define GET_NONBLOCKING
Definition midas.h:322
#define GET_ALL
Definition midas.h:321
#define TRIGGER_ALL
Definition midas.h:538
#define FORMAT_FIXED
Definition midas.h:314
#define TID_WORD
Definition midas.h:332
#define TID_STRING
Definition midas.h:346
#define EVENTID_ALL
Definition midas.h:537
#define MERROR
Definition midas.h:559
#define FORMAT_MIDAS
Definition midas.h:311
#define MT_ERROR
Definition midas.h:542
#define DSP_UNK
Definition mdsupport.h:91
#define DSP_DEC
Definition mdsupport.h:92
#define DSP_RAW
Definition mdsupport.h:84
#define DSP_BANK
Definition mdsupport.h:86
#define DSP_HEX
Definition mdsupport.h:93
#define DSP_ASC
Definition mdsupport.h:94
BOOL ss_kbhit()
Definition system.cxx:3664
DWORD ss_millitime()
Definition system.cxx:3393
INT ss_getchar(BOOL reset)
Definition system.cxx:7503
INT cm_msg(INT message_type, const char *filename, INT line, const char *routine, const char *format,...)
Definition midas.cxx:915
INT cm_set_msg_print(INT system_mask, INT user_mask, int(*func)(const char *))
Definition midas.cxx:647
BOOL equal_ustring(const char *str1, const char *str2)
Definition odb.cxx:3201
INT db_get_value(HNDLE hDB, HNDLE hKeyRoot, const char *key_name, void *data, INT *buf_size, DWORD type, BOOL create)
Definition odb.cxx:5415
INT db_get_key(HNDLE hDB, HNDLE hKey, KEY *key)
Definition odb.cxx:6019
INT db_find_key(HNDLE hDB, HNDLE hKey, const char *key_name, HNDLE *subhKey)
Definition odb.cxx:4079
INT db_enum_key(HNDLE hDB, HNDLE hKey, INT idx, HNDLE *subkey_handle)
Definition odb.cxx:5586
HNDLE hKey
BOOL debug
debug printouts
Definition mana.cxx:254
HNDLE hDB
main ODB handle
Definition mana.cxx:207
char host_name[HOST_NAME_LENGTH]
Definition mana.cxx:242
INT event_msk
Definition mdump.cxx:36
INT speed
Definition mdump.cxx:29
INT evt_display
Definition mdump.cxx:28
INT dsp_mode
Definition mdump.cxx:29
INT dsp_fmt
Definition mdump.cxx:29
INT save_dsp
Definition mdump.cxx:28
double count
Definition mdump.cxx:33
BOOL via_callback
Definition mdump.cxx:31
INT openzip
Definition mdump.cxx:30
KEY key
Definition mdump.cxx:34
void process_event(HNDLE hBuf, HNDLE request_id, EVENT_HEADER *pheader, void *pevent)
Definition mdump.cxx:280
char sbank_name[4]
Definition mdump.cxx:26
int replog(int data_fmt, char *rep_file, int bl, int action, int max_event_size)
Definition mdump.cxx:109
INT disp_bank_list
Definition mdump.cxx:30
INT dsp_time
Definition mdump.cxx:29
#define REP_EVENT
Definition mdump.cxx:23
INT consistency
Definition mdump.cxx:30
#define REP_RECORD
Definition mdump.cxx:21
#define REP_HEADER
Definition mdump.cxx:20
HNDLE hSubkey
Definition mdump.cxx:35
INT hBufEvent
Definition mdump.cxx:27
INT bl
Definition mdump.cxx:29
#define REP_LENGTH
Definition mdump.cxx:22
INT event_id
Definition mdump.cxx:36
#define REP_BANKLIST
Definition mdump.cxx:24
char expt_name[NAME_LENGTH]
Definition mevb.cxx:44
DWORD stop_time
Definition mevb.cxx:55
INT max_event_size
Definition mfed.cxx:30
INT bm_get_buffer_info(INT buffer_handle, BUFFER_HEADER *buffer_header)
Definition midas.cxx:7791
INT HNDLE
Definition midas.h:132
#define HOST_NAME_LENGTH
Definition midas.h:273
#define DEFAULT_MAX_EVENT_SIZE
Definition midas.h:254
#define DEFAULT_BUFFER_SIZE
Definition midas.h:255
#define EVENT_BUFFER_NAME
Definition midas.h:269
#define NAME_LENGTH
Definition midas.h:272
INT j
Definition odbhist.cxx:40
char str[256]
Definition odbhist.cxx:33
DWORD status
Definition odbhist.cxx:39
DWORD watchdog_timeout
Definition midas.h:951
INT write_wait
Definition midas.h:947
BOOL read_wait
Definition midas.h:946
DWORD last_activity
Definition midas.h:950
char name[NAME_LENGTH]
Definition midas.h:935
BOOL all_flag
Definition midas.h:949
BOOL wake_up
Definition midas.h:948
EVENT_REQUEST event_request[MAX_EVENT_REQUESTS]
Definition midas.h:953
INT max_request_index
Definition midas.h:941
INT read_pointer
Definition midas.h:940
INT num_in_events
Definition midas.h:964
INT write_pointer
Definition midas.h:963
INT num_clients
Definition midas.h:959
char name[NAME_LENGTH]
Definition midas.h:958
INT max_client_index
Definition midas.h:960
BUFFER_CLIENT client[MAX_CLIENTS]
Definition midas.h:967
INT num_out_events
Definition midas.h:965
INT read_pointer
Definition midas.h:962
short int event_id
Definition midas.h:929
short int trigger_mask
Definition midas.h:930
INT sampling_type
Definition midas.h:931
BOOL valid
Definition midas.h:928
char name[NAME_LENGTH]
Definition midas.h:1029
Here is the call graph for this function:

◆ md_all_info_display()

void md_all_info_display ( int  seqno,
int  runno,
TMEvent e 
)

Definition at line 101 of file mdump.cxx.

102{
103 printf("Evt#%d- ", seqno);
104 printf("%irun 0x%4.4uxid 0x%4.4uxmsk %5dmevt#", runno, e->event_id, e->trigger_mask, seqno);
105 printf("%5del/x%x %5dserial\n", int(e->data.size()), int(e->data.size()), e->serial_number);
106}
static double e(void)
Definition tinyexpr.c:136
Here is the call graph for this function:
Here is the caller graph for this function:

◆ process_event()

void process_event ( HNDLE  hBuf,
HNDLE  request_id,
EVENT_HEADER pheader,
void pevent 
)

Definition at line 280 of file mdump.cxx.

280 {
281 static char bars[] = "|/-\\";
282 static int i_bar;
283 static EVENT_HEADER pevh;
288
289 if (speed == 1) {
290 /* accumulate received event size */
291 size = pheader->data_size + sizeof(EVENT_HEADER);
292 count += size;
293 return;
294 }
295 if (consistency == 1) {
296 if (pheader->serial_number != pevh.serial_number + 1) {
297 /* event header */
298 printf("\nLast - Evid:%4.4x- Mask:%4.4x- Serial:%i- Time:0x%x- Dsize:%i/0x%x\n",
299 pevh.event_id, pevh.trigger_mask, pevh.serial_number, pevh.time_stamp,
300 pevh.data_size, pevh.data_size);
301 printf("Now - Evid:%4.4x- Mask:%4.4x- Serial:%i- Time:0x%x- Dsize:%i/0x%x\n",
302 pheader->event_id, pheader->trigger_mask, pheader->serial_number,
303 pheader->time_stamp, pheader->data_size, pheader->data_size);
304 } else {
305 printf("Consistency check: %c - %i (Data size:%i)\r", bars[i_bar++ % 4],
306 pheader->serial_number, pheader->data_size);
307 fflush(stdout);
308 }
309 memcpy((char *) &pevh, (char *) pheader, sizeof(EVENT_HEADER));
310 return;
311 }
312 if (evt_display > 0) {
313 evt_display--;
314
316
317 /* pointer to data section */
318 pmbh = (BANK_HEADER *) pevent;
319
320 /* display header comes ALWAYS from MIDAS header */
321 printf("------------------------ Event# %i ------------------------\n",
323 /* selection based on data format */
325 (md_event_swap(FORMAT_MIDAS, pheader) >= MD_SUCCESS)) { /* ---- MIDAS FMT ---- */
326 if (sbank_name[0] != 0) {
327 BANK *pmbk;
328 if (bk_find(pmbh, sbank_name, &bklen, &bktyp, (void **) &pmbk) ==
329 SS_SUCCESS) { /* bank name given through argument list */
331 printf("#banks:%i Bank list:-%s-", status, banklist);
332 if (bk_is32a(pmbh))
333 pmbk = (BANK *) (((char *) pmbk) - sizeof(BANK32A));
334 else if (bk_is32(pmbh))
335 pmbk = (BANK *) (((char *) pmbk) - sizeof(BANK32));
336 else
337 pmbk = (BANK *) (((char *) pmbk) - sizeof(BANK));
339 } else {
341 printf("Bank -%s- not found (%i) in ", sbank_name, status);
342 printf("#banks:%i Bank list:-%s-\n", status, banklist);
343 }
344 } else { /* Full event or bank list only */
345 if (disp_bank_list) {
346 /* event header */
347 printf("Evid:%4.4x- Mask:%4.4x- Serial:%d- Time:0x%x- Dsize:%d/0x%x\n",
348 pheader->event_id, pheader->trigger_mask, pheader->serial_number,
349 pheader->time_stamp, pheader->data_size, pheader->data_size);
351 printf("#banks:%i Bank list:-%s-\n", status, banklist);
352 } else
354 }
355 } else { /* unknown format just dump midas event */
356 printf("Data format not supported: \"%s\"\n", eq[index].Fmt);
358 }
359 if (evt_display == 0) {
360 /* do not produce shutdown message */
363 exit(0);
364 }
365 if (dsp_time != 0)
367 }
368 return;
369}
static char bars[]
Definition ftplib.cxx:26
BOOL bk_is32a(const void *event)
Definition midas.cxx:16437
BOOL bk_is32(const void *event)
Definition midas.cxx:16415
INT bk_list(const void *event, char *bklist)
Definition midas.cxx:16840
INT bk_find(const BANK_HEADER *pbkh, const char *name, DWORD *bklen, DWORD *bktype, void **pdata)
Definition midas.cxx:16952
#define SS_SUCCESS
Definition midas.h:663
unsigned int DWORD
Definition mcstd.h:51
#define MD_SUCCESS
Definition mdsupport.h:60
void md_event_display(const void *pevent, INT data_fmt, INT dsp_mode, INT dsp_fmt, const char *bn)
INT md_event_swap(INT data_fmt, void *pevent)
void md_bank_display(void *pmbh, void *pbk, INT data_fmt, INT dsp_mode, INT dsp_fmt)
INT ss_sleep(INT millisec)
Definition system.cxx:3628
INT index
Definition mana.cxx:271
DWORD data_format_check(EVENT_HEADER *pevent, INT *i)
Definition mdump.cxx:58
int i_bar
Definition mevb.cxx:53
#define STRING_BANKLIST_MAX
Definition midas.h:279
Definition midas.h:1215
DWORD data_size
Definition midas.h:856
DWORD serial_number
Definition midas.h:854
DWORD time_stamp
Definition midas.h:855
short int trigger_mask
Definition midas.h:853
Here is the call graph for this function:
Here is the caller graph for this function:

◆ replog()

int replog ( int  data_fmt,
char rep_file,
int  bl,
int  action,
int  max_event_size 
)
  • skip will read atleast on record *‍/

Definition at line 109 of file mdump.cxx.

109 {
110 static char bars[] = "|/-\\";
111 static int i_bar;
112
114
115 /* open data file */
116 if (r->fError) {
117 fprintf(stderr, "Cannot open %s: %s\n", rep_file, r->fErrorString.c_str());
118 r->Close();
119 delete r;
120 return (-1);
121 }
122
123 int seqno = 0;
124 int runno = 0;
125
126 //printf("skip %d\n", bl);
127
128 while (bl > 0) {
129 TMEvent* e = TMReadEvent(r);
130 if (!e) {
131 printf("\n");
132 return -1;
133 }
134 seqno++;
135 if (e->event_id == uint16_t(EVENTID_BOR))
136 runno = e->serial_number;
137 if (seqno < bl) {
138 printf("Skipping event_# ... ");
139 printf("%d \r", seqno);
140 fflush(stdout);
141 } else {
142 printf("\n");
143 delete e;
144 break;
145 }
146 delete e;
147 }
148
149 switch (action) {
150 case REP_HEADER:
151 case REP_RECORD:
152 // MIDAS format does not implement REP_HEADER and REP_RECORD
153 // ///* get only physical record header */
154 // //if (md_physrec_skip(data_fmt, bl) != MD_SUCCESS)
155 // // return (-1);
156 // do {
157 // if (action == REP_HEADER) {
158 // status = md_all_info_display(D_HEADER);
159 // } else if (action == REP_RECORD) {
160 // status = md_physrec_display(data_fmt);
161 // } if ((status == MD_DONE) || (bl != -1)) {
162 // break;
163 // }
164 // } while (md_physrec_get(data_fmt, &physrec, &physize) == MD_SUCCESS);
165 break;
166
167 case REP_LENGTH:
168 case REP_EVENT:
169 case REP_BANKLIST:
171 //if (md_physrec_skip(data_fmt, bl) != MD_SUCCESS)
172 // return (-1);
173 i = 0;
174
176
177 TMEvent* e = NULL;
178 while (1) {
179 if (e)
180 delete e;
181 TMEvent* e = TMReadEvent(r);
182 if (!e)
183 break;
184 if (e->error)
185 continue;
186 seqno++;
187
188 if (e->event_id == uint16_t(EVENTID_BOR))
189 runno = e->serial_number;
190
191 if ((consistency == 1) && (data_fmt == FORMAT_MIDAS)) {
192 // if ID is given skip the inconsistency event of different ID
193 if ((event_id != EVENTID_ALL) && (e->event_id != event_id)) {
194 continue; // Next event
195 } else if (e->serial_number != prev_e.serial_number + 1) {
196 /* event header : show last event consistent and new one (ID may be different!) */
197 printf("\nLast - Evid:%4.4x- Mask:%4.4x- Serial:%i- Time:0x%x- Dsize:%i/0x%x\n",
198 prev_e.event_id, prev_e.trigger_mask, prev_e.serial_number, prev_e.time_stamp,
199 prev_e.data_size, prev_e.data_size);
200 printf("Now - Evid:%4.4x- Mask:%4.4x- Serial:%i- Time:0x%x- Dsize:%i/0x%x\n",
201 e->event_id, e->trigger_mask, e->serial_number,
202 e->time_stamp, e->data_size, e->data_size);
203 } else {
204 // last and current SN are seprate by one
205 printf("Consistency check: %c - %i (Data size:%i)\r", bars[i_bar++ % 4],
206 prev_e.serial_number, prev_e.data_size);
207 fflush(stdout);
208 }
209 // save current header for later comparison
210 prev_e = *e;
211 continue; // Next event
212 } // consistency==1
213 if (action == REP_LENGTH) {
214 md_all_info_display(seqno, runno, e);
215 }
216 if ((action == REP_BANKLIST) || (disp_bank_list == 1)) {
217 if (e->event_id == uint16_t(EVENTID_BOR) ||
218 e->event_id == uint16_t(EVENTID_EOR) || e->event_id == uint16_t(EVENTID_MESSAGE))
219 continue;
220 printf("Evid:%4.4x- Mask:%4.4x- Serial:%d- Time:0x%x- Dsize:%d/0x%x\n",
221 e->event_id, e->trigger_mask, e->serial_number, e->time_stamp,
222 e->data_size, e->data_size);
223 e->FindAllBanks();
224 std::string banklist;
225 for (unsigned b=0; b<e->banks.size(); b++) {
226 banklist += msprintf("%4s", e->banks[b].name.c_str());
227 }
228 printf("#banks:%i Bank list:-%s-\n", int(e->banks.size()), banklist.c_str());
229 } else if ((action == REP_EVENT) && (event_id == EVENTID_ALL) && (event_msk == TRIGGER_ALL) &&
230 (sbank_name[0] == 0)) { /* a quick by-pass to prevent bank search if not necessary */
231 printf("------------------------ Event# %i --------------------------------\n", i++);
233 } else if (action == REP_EVENT) {
234 if (e->event_id == uint16_t(EVENTID_BOR) ||
235 e->event_id == uint16_t(EVENTID_EOR) || e->event_id == uint16_t(EVENTID_MESSAGE)) {
236 printf("Searching for Bank -%s- Skiping event...%i\r", sbank_name, i++);
237 fflush(stdout);
238 continue;
239 }
240 uint16_t id = e->event_id;
241 uint16_t msk = e->trigger_mask;
242 /* Search bank if necessary */
243 TMBank* b = NULL;
244 if (sbank_name[0] != 0) { /* bank name given through argument list */
245 b = e->FindBank(sbank_name);
246 }
247 /* check user request through switch setting (id, msk ,bank) */
248 if ((event_msk != TRIGGER_ALL) || (event_id != EVENTID_ALL) ||
249 (sbank_name[0] != 0)) { /* check request or skip event if not satisfied */
250 if (((event_id != EVENTID_ALL) && (id != event_id)) || /* id check ==> skip */
251 ((event_msk != TRIGGER_ALL) && (msk != event_msk)) || /* msk check ==> skip */
252 ((sbank_name[0] != 0) && !b)) { /* bk check ==> skip *//* skip event */
253 printf("Searching for Bank -%s- Skiping event...%i\r", sbank_name, i++);
254 fflush(stdout);
255 } else { /* request match ==> display any event */
256 printf("------------------------ Event# %i --------------------------------\n", i++);
258 }
259 } else { /* no user request ==> display any event */
260 printf("------------------------ Event# %i --------------------------------\n", i++);
262 }
263 }
264 }
265 if (e)
266 delete e;
267 break;
268 } /* switch */
269
270 /* close data file */
271 printf("\n");
272
273 r->Close();
274 delete r;
275
276 return 0;
277}
void md_all_info_display(int seqno, int runno, TMEvent *e)
Definition mdump.cxx:101
std::string msprintf(const char *format,...)
Definition midas.cxx:410
#define EVENTID_MESSAGE
Definition midas.h:902
#define EVENTID_EOR
Definition midas.h:901
#define EVENTID_BOR
Definition midas.h:900
Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ bank_name

char bank_name[4]

Definition at line 26 of file mdump.cxx.

◆ bl

INT bl = -1

Definition at line 29 of file mdump.cxx.

◆ consistency

INT consistency = 0

Definition at line 30 of file mdump.cxx.

◆ count

double count = 0

Definition at line 33 of file mdump.cxx.

◆ data_fmt

INT data_fmt

Definition at line 32 of file mdump.cxx.

◆ disp_bank_list

INT disp_bank_list = 0

Definition at line 30 of file mdump.cxx.

◆ dsp_fmt

INT dsp_fmt = 0

Definition at line 29 of file mdump.cxx.

◆ dsp_mode

INT dsp_mode = 0

Definition at line 29 of file mdump.cxx.

◆ dsp_time

INT dsp_time = 0

Definition at line 29 of file mdump.cxx.

◆ eq

std::vector<FMT_ID> eq

Definition at line 55 of file mdump.cxx.

◆ event_id

INT event_id

Definition at line 36 of file mdump.cxx.

◆ event_msk

INT event_msk

Definition at line 36 of file mdump.cxx.

◆ evt_display

INT evt_display = 0

Definition at line 28 of file mdump.cxx.

◆ hBufEvent

INT hBufEvent

Definition at line 27 of file mdump.cxx.

◆ hSubkey

HNDLE hSubkey

Definition at line 35 of file mdump.cxx.

◆ i

INT i

Definition at line 32 of file mdump.cxx.

◆ key

KEY key

Definition at line 34 of file mdump.cxx.

◆ openzip

INT openzip = 0

Definition at line 30 of file mdump.cxx.

◆ save_dsp

INT save_dsp = 1

Definition at line 28 of file mdump.cxx.

◆ sbank_name

char sbank_name[4]

Definition at line 26 of file mdump.cxx.

◆ speed

INT speed = 0

Definition at line 29 of file mdump.cxx.

◆ via_callback

BOOL via_callback

Definition at line 31 of file mdump.cxx.