00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404
00405
00406
00407
00408
00409
00410
00411
00412
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435
00436
00437
00438
00439
00440
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462
00463
00464
00465
00466
00467 #ifndef _MIDAS_H_
00468 #define _MIDAS_H_
00469
00470
00471
00472
00473
00474
00475
00476
00477
00478
00479
00480
00481
00482
00483
00484
00485
00486
00487
00488
00489
00490
00491
00492
00493
00494
00495
00496
00497
00498 #define MIDAS_VERSION "1.9.5"
00499 #define DATABASE_VERSION 2
00500
00501
00502 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00503
00504
00505
00506
00507
00508 #if defined( VAX ) || defined( __VMS )
00509 #define OS_VMS
00510 #endif
00511
00512 #if defined( _MSC_VER )
00513 #define OS_WINNT
00514 #endif
00515
00516 #if defined( __MSDOS__ )
00517 #define OS_MSDOS
00518 #endif
00519
00520 #if defined ( vxw )
00521 #define OS_VXWORKS
00522 #undef OS_UNIX
00523 #endif
00524
00525 #if !defined(OS_LINUX)
00526 #if defined ( __linux__ )
00527 #define OS_LINUX
00528 #endif
00529 #endif
00530
00531 #if defined(OS_LINUX) || defined(OS_OSF1) || defined(OS_ULTRIX) || defined(OS_FREEBSD) || defined(OS_SOLARIS) || defined(OS_IRIX) || defined(OS_DARWIN)
00532 #define OS_UNIX
00533 #endif
00534
00535 #if !defined(OS_IRIX) && !defined(OS_VMS) && !defined(OS_MSDOS) && !defined(OS_UNIX) && !defined(OS_VXWORKS) && !defined(OS_WINNT)
00536 #error MIDAS cannot be used on this operating system
00537 #endif
00538
00539
00540
00541 #ifdef USE_ROOT
00542 #include <TObjArray.h>
00543 #include <TFolder.h>
00544 #include <TCutG.h>
00545 #endif
00546
00547
00548
00549 #ifndef MIDAS_TYPE_DEFINED
00550 #define MIDAS_TYPE_DEFINED
00551
00552 typedef unsigned char BYTE;
00553 typedef unsigned short int WORD;
00554
00555 #ifdef __alpha
00556 typedef unsigned int DWORD;
00557 #else
00558 typedef unsigned long int DWORD;
00559 #endif
00560
00561 #ifndef OS_WINNT
00562 #ifndef OS_VXWORKS
00563 typedef DWORD BOOL;
00564 #endif
00565 #endif
00566
00567 #endif
00568
00569
00570
00571
00572
00573
00574
00575 #if defined(OS_MSDOS)
00576 typedef long int INT;
00577 #elif defined( OS_WINNT )
00578
00579
00580 #ifndef _INC_WINDOWS
00581 #include <windows.h>
00582 #endif
00583
00584 #else
00585 typedef int INT;
00586 #endif
00587
00588 typedef INT HNDLE;
00589
00590
00591 #ifdef OS_VXWORKS
00592 #ifndef __INCvxWorksh
00593 #include <vxWorks.h>
00594 #endif
00595 #endif
00596
00597
00598
00599
00600
00601
00602
00603
00604 #ifdef __alpha
00605 #define PTYPE long int
00606 #else
00607 #define PTYPE int
00608 #endif
00609
00610
00611 #if defined(OS_WINNT)
00612 typedef HANDLE midas_thread_t;
00613 #elif defined(OS_UNIX)
00614 #include <pthread.h>
00615 typedef pthread_t midas_thread_t;
00616 #else
00617 typedef INT midas_thread_t;
00618 #endif
00619
00620 #define TRUE 1
00621 #define FALSE 0
00622
00623
00624 #if defined(OS_MSDOS) || defined(OS_WINNT)
00625 #define DIR_SEPARATOR '\\'
00626 #define DIR_SEPARATOR_STR "\\"
00627 #elif defined(OS_VMS)
00628 #define DIR_SEPARATOR ']'
00629 #define DIR_SEPARATOR_STR "]"
00630 #else
00631 #define DIR_SEPARATOR '/'
00632 #define DIR_SEPARATOR_STR "/"
00633 #endif
00634
00635
00636 #if defined( _MSC_VER )
00637 #define INLINE __inline
00638 #elif defined(__GNUC__)
00639 #define INLINE __inline__
00640 #else
00641 #define INLINE
00642 #endif
00643
00644
00645 #ifndef _LARGEFILE64_SOURCE
00646 #define O_LARGEFILE 0
00647 #endif
00648
00649
00650 #endif
00651
00652
00653
00654
00655
00656
00657
00658 #ifdef OS_WINNT
00659 #define TAPE_BUFFER_SIZE 0x100000
00660 #else
00661 #define TAPE_BUFFER_SIZE 0x8000
00662 #endif
00663 #define NET_TCP_SIZE 0xFFFF
00664 #define OPT_TCP_SIZE 8192
00665 #define NET_UDP_SIZE 8192
00666
00667 #define EVENT_BUFFER_SIZE 0x100000
00668 #define EVENT_BUFFER_NAME "SYSTEM"
00669 #define MAX_EVENT_SIZE 0x80000
00670 #define DEFAULT_EVENT_BUFFER_SIZE 0x200000;
00671 #define DEFAULT_ODB_SIZE 0x100000
00672
00673 #define NAME_LENGTH 32
00674 #define HOST_NAME_LENGTH 256
00675 #define MAX_CLIENTS 64
00676 #define MAX_EVENT_REQUESTS 10
00677 #define MAX_OPEN_RECORDS 256
00678 #define MAX_ODB_PATH 256
00679 #define MAX_EXPERIMENT 32
00680 #define BANKLIST_MAX 64
00681 #define STRING_BANKLIST_MAX BANKLIST_MAX * 4
00682
00683
00684 #define MIDAS_TCP_PORT 1175
00685
00686
00687
00688 #define DEFAULT_RPC_TIMEOUT 10000
00689 #define WATCHDOG_INTERVAL 1000
00690
00691 #define DEFAULT_WATCHDOG_TIMEOUT 10000
00692
00693
00694
00695
00696
00697
00698
00699
00700
00701
00702
00703
00704 #define STATE_STOPPED 1
00705 #define STATE_PAUSED 2
00706 #define STATE_RUNNING 3
00707
00708
00709
00710 #define FORMAT_MIDAS 1
00711 #define FORMAT_YBOS 2
00712 #define FORMAT_ASCII 3
00713 #define FORMAT_FIXED 4
00714 #define FORMAT_DUMP 5
00715 #define FORMAT_HBOOK 6
00716 #define FORMAT_ROOT 7
00717
00718
00719
00720 #define GET_ALL (1<<0)
00721 #define GET_SOME (1<<1)
00722 #define GET_FARM (1<<2)
00723
00724
00725
00726
00727 #define TID_BYTE 1
00728 #define TID_SBYTE 2
00729 #define TID_CHAR 3
00730 #define TID_WORD 4
00731 #define TID_SHORT 5
00732 #define TID_DWORD 6
00733 #define TID_INT 7
00734 #define TID_BOOL 8
00735 #define TID_FLOAT 9
00736 #define TID_DOUBLE 10
00737 #define TID_BITFIELD 11
00738 #define TID_STRING 12
00739 #define TID_ARRAY 13
00740 #define TID_STRUCT 14
00741 #define TID_KEY 15
00742 #define TID_LINK 16
00743 #define TID_LAST 17
00744
00745
00746
00747 #define SYNC 0
00748 #define ASYNC 1
00749
00750
00751
00752 #define MODE_READ (1<<0)
00753 #define MODE_WRITE (1<<1)
00754 #define MODE_DELETE (1<<2)
00755 #define MODE_EXCLUSIVE (1<<3)
00756 #define MODE_ALLOC (1<<7)
00757
00758
00759
00760 #define RPC_OTIMEOUT 1
00761 #define RPC_OTRANSPORT 2
00762 #define RPC_OCONVERT_FLAG 3
00763 #define RPC_OHW_TYPE 4
00764 #define RPC_OSERVER_TYPE 5
00765 #define RPC_OSERVER_NAME 6
00766 #define RPC_CONVERT_FLAGS 7
00767 #define RPC_ODB_HANDLE 8
00768 #define RPC_CLIENT_HANDLE 9
00769 #define RPC_SEND_SOCK 10
00770 #define RPC_WATCHDOG_TIMEOUT 11
00771 #define RPC_NODELAY 12
00772
00773 #define RPC_TCP 0
00774 #define RPC_FTCP 1
00775
00776
00777
00778 #define WF_WATCH_ME (1<<0)
00779 #define WF_CALL_WD (1<<1)
00780
00781
00782
00783 #define TR_START (1<<0)
00784 #define TR_STOP (1<<1)
00785 #define TR_PAUSE (1<<2)
00786 #define TR_RESUME (1<<3)
00787 #define TR_DEFERRED (1<<12)
00788
00789
00790
00791 #define EQ_PERIODIC (1<<0)
00792 #define EQ_POLLED (1<<1)
00793 #define EQ_INTERRUPT (1<<2)
00794 #define EQ_SLOW (1<<3)
00795 #define EQ_MANUAL_TRIG (1<<4)
00796 #define EQ_FRAGMENTED (1<<5)
00797 #define EQ_EB (1<<6)
00798
00799
00800
00801
00802 #define RO_RUNNING (1<<0)
00803 #define RO_STOPPED (1<<1)
00804 #define RO_PAUSED (1<<2)
00805 #define RO_BOR (1<<3)
00806 #define RO_EOR (1<<4)
00807 #define RO_PAUSE (1<<5)
00808 #define RO_RESUME (1<<6)
00809
00810 #define RO_TRANSITIONS (RO_BOR|RO_EOR|RO_PAUSE|RO_RESUME)
00811 #define RO_ALWAYS (0xFF)
00812
00813 #define RO_ODB (1<<8)
00814
00815
00816
00817
00818
00819
00820 #define CH_BS 8
00821 #define CH_TAB 9
00822 #define CH_CR 13
00823
00824 #define CH_EXT 0x100
00825
00826 #define CH_HOME (CH_EXT+0)
00827 #define CH_INSERT (CH_EXT+1)
00828 #define CH_DELETE (CH_EXT+2)
00829 #define CH_END (CH_EXT+3)
00830 #define CH_PUP (CH_EXT+4)
00831 #define CH_PDOWN (CH_EXT+5)
00832 #define CH_UP (CH_EXT+6)
00833 #define CH_DOWN (CH_EXT+7)
00834 #define CH_RIGHT (CH_EXT+8)
00835 #define CH_LEFT (CH_EXT+9)
00836
00837
00838
00839
00840
00841
00842
00843 #define LAM_SOURCE(c, s) (c<<24 | ((s) & 0xFFFFFF))
00844
00845
00846
00847
00848
00849 #define LAM_STATION(s) (1<<(s-1))
00850
00851
00852
00853
00854
00855 #define LAM_SOURCE_CRATE(c) (c>>24)
00856
00857
00858
00859
00860
00861 #define LAM_SOURCE_STATION(s) ((s) & 0xFFFFFF)
00862
00863
00864
00865 #define CNAF 0x1
00866 #define CNAF_nQ 0x2
00867
00868 #define CNAF_INHIBIT_SET 0x100
00869 #define CNAF_INHIBIT_CLEAR 0x101
00870 #define CNAF_CRATE_CLEAR 0x102
00871 #define CNAF_CRATE_ZINIT 0x103
00872 #define CNAF_TEST 0x110
00873
00874
00875
00876
00877
00878
00879
00880
00881
00882 #ifndef MAX
00883 #define MAX(a,b) (((a) > (b)) ? (a) : (b))
00884 #endif
00885
00886
00887
00888 #ifndef MIN
00889 #define MIN(a,b) (((a) < (b)) ? (a) : (b))
00890 #endif
00891
00892
00893
00894
00895
00896 #define ALIGN8(x) (((x)+7) & ~7)
00897
00898
00899
00900 #define VALIGN(adr,align) (((PTYPE) (adr)+align-1) & ~(align-1))
00901
00902
00903
00904
00905
00906
00907
00908
00909
00910
00911 #define EVENTID_ALL -1
00912 #define TRIGGER_ALL -1
00913
00914
00915
00916 #define MT_ERROR (1<<0)
00917 #define MT_INFO (1<<1)
00918 #define MT_DEBUG (1<<2)
00919 #define MT_USER (1<<3)
00920 #define MT_LOG (1<<4)
00921 #define MT_TALK (1<<5)
00922 #define MT_CALL (1<<6)
00923 #define MT_ALL 0xFF
00924
00925 #define MERROR MT_ERROR, __FILE__, __LINE__
00926 #define MINFO MT_INFO, __FILE__, __LINE__
00927 #define MDEBUG MT_DEBUG, __FILE__, __LINE__
00928 #define MUSER MT_USER, __FILE__, __LINE__
00929 #define MLOG MT_LOG, __FILE__, __LINE__
00930 #define MTALK MT_TALK, __FILE__, __LINE__
00931 #define MCALL MT_CALL, __FILE__, __LINE__
00932
00933
00934
00935
00936
00937
00938
00939
00940
00941
00942
00943
00944
00945
00946
00947 #define SUCCESS 1
00948 #define CM_SUCCESS 1
00949 #define CM_SET_ERROR 102
00950 #define CM_NO_CLIENT 103
00951 #define CM_DB_ERROR 104
00952 #define CM_UNDEF_EXP 105
00953 #define CM_VERSION_MISMATCH 106
00954 #define CM_SHUTDOWN 107
00955 #define CM_WRONG_PASSWORD 108
00956 #define CM_UNDEF_ENVIRON 109
00957 #define CM_DEFERRED_TRANSITION 110
00958 #define CM_TRANSITION_IN_PROGRESS 111
00959 #define CM_TIMEOUT 112
00960 #define CM_INVALID_TRANSITION 113
00961 #define CM_TOO_MANY_REQUESTS 114
00962
00963
00964
00965
00966
00967
00968
00969 #define BM_SUCCESS 1
00970 #define BM_CREATED 202
00971 #define BM_NO_MEMORY 203
00972 #define BM_INVALID_NAME 204
00973 #define BM_INVALID_HANDLE 205
00974 #define BM_NO_SLOT 206
00975 #define BM_NO_MUTEX 207
00976 #define BM_NOT_FOUND 208
00977 #define BM_ASYNC_RETURN 209
00978 #define BM_TRUNCATED 210
00979 #define BM_MULTIPLE_HOSTS 211
00980 #define BM_MEMSIZE_MISMATCH 212
00981 #define BM_CONFLICT 213
00982 #define BM_EXIT 214
00983 #define BM_INVALID_PARAM 215
00984 #define BM_MORE_EVENTS 216
00985 #define BM_INVALID_MIXING 217
00986 #define BM_NO_SHM 218
00987
00988
00989
00990
00991
00992
00993 #define DB_SUCCESS 1
00994 #define DB_CREATED 302
00995 #define DB_NO_MEMORY 303
00996 #define DB_INVALID_NAME 304
00997 #define DB_INVALID_HANDLE 305
00998 #define DB_NO_SLOT 306
00999 #define DB_NO_MUTEX 307
01000 #define DB_MEMSIZE_MISMATCH 308
01001 #define DB_INVALID_PARAM 309
01002 #define DB_FULL 310
01003 #define DB_KEY_EXIST 311
01004 #define DB_NO_KEY 312
01005 #define DB_KEY_CREATED 313
01006 #define DB_TRUNCATED 314
01007 #define DB_TYPE_MISMATCH 315
01008 #define DB_NO_MORE_SUBKEYS 316
01009 #define DB_FILE_ERROR 317
01010 #define DB_NO_ACCESS 318
01011 #define DB_STRUCT_SIZE_MISMATCH 319
01012 #define DB_OPEN_RECORD 320
01013 #define DB_OUT_OF_RANGE 321
01014 #define DB_INVALID_LINK 322
01015 #define DB_CORRUPTED 323
01016 #define DB_STRUCT_MISMATCH 324
01017 #define DB_TIMEOUT 325
01018 #define DB_VERSION_MISMATCH 326
01019
01020
01021
01022
01023
01024
01025 #define SS_SUCCESS 1
01026 #define SS_CREATED 402
01027 #define SS_NO_MEMORY 403
01028 #define SS_INVALID_NAME 404
01029 #define SS_INVALID_HANDLE 405
01030 #define SS_INVALID_ADDRESS 406
01031 #define SS_FILE_ERROR 407
01032 #define SS_NO_MUTEX 408
01033 #define SS_NO_PROCESS 409
01034 #define SS_NO_THREAD 410
01035 #define SS_SOCKET_ERROR 411
01036 #define SS_TIMEOUT 412
01037 #define SS_SERVER_RECV 413
01038 #define SS_CLIENT_RECV 414
01039 #define SS_ABORT 415
01040 #define SS_EXIT 416
01041 #define SS_NO_TAPE 417
01042 #define SS_DEV_BUSY 418
01043 #define SS_IO_ERROR 419
01044 #define SS_TAPE_ERROR 420
01045 #define SS_NO_DRIVER 421
01046 #define SS_END_OF_TAPE 422
01047 #define SS_END_OF_FILE 423
01048 #define SS_FILE_EXISTS 424
01049 #define SS_NO_SPACE 425
01050 #define SS_INVALID_FORMAT 426
01051 #define SS_NO_ROOT 427
01052
01053
01054
01055
01056
01057
01058 #define RPC_SUCCESS 1
01059 #define RPC_ABORT SS_ABORT
01060 #define RPC_NO_CONNECTION 502
01061 #define RPC_NET_ERROR 503
01062 #define RPC_TIMEOUT 504
01063 #define RPC_EXCEED_BUFFER 505
01064 #define RPC_NOT_REGISTERED 506
01065 #define RPC_CONNCLOSED 507
01066 #define RPC_INVALID_ID 508
01067 #define RPC_SHUTDOWN 509
01068 #define RPC_NO_MEMORY 510
01069 #define RPC_DOUBLE_DEFINED 511
01070
01071
01072
01073
01074
01075
01076 #define FE_SUCCESS 1
01077 #define FE_ERR_ODB 602
01078 #define FE_ERR_HW 603
01079 #define FE_ERR_DISABLED 604
01080 #define FE_ERR_DRIVER 605
01081
01082
01083
01084 #define HS_SUCCESS 1
01085 #define HS_FILE_ERROR 702
01086 #define HS_NO_MEMORY 703
01087 #define HS_TRUNCATED 704
01088 #define HS_WRONG_INDEX 705
01089 #define HS_UNDEFINED_EVENT 706
01090 #define HS_UNDEFINED_VAR 707
01091
01092
01093
01094 #define FTP_SUCCESS 1
01095 #define FTP_NET_ERROR 802
01096 #define FTP_FILE_ERROR 803
01097 #define FTP_RESPONSE_ERROR 804
01098 #define FTP_INVALID_ARG 805
01099
01100
01101
01102 #define EL_SUCCESS 1
01103 #define EL_FILE_ERROR 902
01104 #define EL_NO_MESSAGE 903
01105 #define EL_TRUNCATED 904
01106 #define EL_FIRST_MSG 905
01107 #define EL_LAST_MSG 906
01108
01109
01110
01111 #define AL_SUCCESS 1
01112 #define AL_INVALID_NAME 1002
01113 #define AL_ERROR_ODB 1003
01114 #define AL_RESET 1004
01115
01116
01117
01118 #define CMD_INIT (1<<0)
01119 #define CMD_EXIT (1<<1)
01120 #define CMD_IDLE (1<<2)
01121 #define CMD_SET (1<<3)
01122 #define CMD_SET_ALL (1<<4)
01123 #define CMD_GET (1<<5)
01124 #define CMD_GET_ALL (1<<6)
01125 #define CMD_GET_CURRENT (1<<7)
01126 #define CMD_GET_CURRENT_ALL (1<<8)
01127 #define CMD_SET_CURRENT_LIMIT (1<<9)
01128 #define CMD_SET_CURRENT_LIMIT_ALL (1<<10)
01129 #define CMD_GET_DEMAND (1<<11)
01130 #define CMD_GET_DEFAULT_NAME (1<<12)
01131 #define CMD_GET_DEFAULT_THRESHOLD (1<<13)
01132 #define CMD_SET_LABEL (1<<14)
01133 #define CMD_ENABLE_COMMAND (1<<15)
01134 #define CMD_DISABLE_COMMAND (1<<16)
01135
01136
01137
01138 #define CMD_WRITE 100
01139 #define CMD_READ 101
01140 #define CMD_PUTS 102
01141 #define CMD_GETS 103
01142 #define CMD_DEBUG 104
01143 #define CMD_NAME 105
01144
01145
01146
01147 #define CMD_INTERRUPT_ENABLE 100
01148 #define CMD_INTERRUPT_DISABLE 101
01149 #define CMD_INTERRUPT_ATTACH 102
01150 #define CMD_INTERRUPT_DETACH 103
01151
01152
01153
01154 #define BD_GETS(s,z,p,t) info->bd(CMD_GETS, info->bd_info, s, z, p, t)
01155 #define BD_READS(s,z,p,t) info->bd(CMD_READ, info->bd_info, s, z, p, t)
01156 #define BD_PUTS(s) info->bd(CMD_PUTS, info->bd_info, s)
01157 #define BD_WRITES(s) info->bd(CMD_WRITE, info->bd_info, s)
01158
01159
01160
01161
01162
01163
01164
01165
01166 #define ANA_CONTINUE 1
01167 #define ANA_SKIP 0
01168
01169
01170
01171
01172
01173
01174
01175
01176
01177
01178
01179
01180
01181
01182 typedef struct {
01183 short int event_id;
01184 short int trigger_mask;
01185 DWORD serial_number;
01186 DWORD time_stamp;
01187 DWORD data_size;
01188 } EVENT_HEADER;
01189
01190
01191
01192
01193
01194
01195 #define TRIGGER_MASK(e) ((((EVENT_HEADER *) e)-1)->trigger_mask)
01196
01197
01198
01199
01200
01201
01202 #define EVENT_ID(e) ((((EVENT_HEADER *) e)-1)->event_id)
01203
01204
01205
01206
01207
01208
01209 #define SERIAL_NUMBER(e) ((((EVENT_HEADER *) e)-1)->serial_number)
01210
01211
01212
01213
01214
01215
01216 #define TIME_STAMP(e) ((((EVENT_HEADER *) e)-1)->time_stamp)
01217 #define EVENT_SOURCE(e,o) (* (INT*) (e+o))
01218
01219
01220
01221 #define EVENTID_BOR ((short int) 0x8000)
01222 #define EVENTID_EOR ((short int) 0x8001)
01223 #define EVENTID_MESSAGE ((short int) 0x8002)
01224
01225
01226
01227 #define EVENTID_FRAG1 ((unsigned short) 0xC000)
01228 #define EVENTID_FRAG ((unsigned short) 0xD000)
01229
01230
01231
01232 #define MIDAS_MAGIC 0x494d
01233
01234
01235
01236
01237 typedef struct {
01238 INT id;
01239 BOOL valid;
01240 short int event_id;
01241 short int trigger_mask;
01242 INT sampling_type;
01243
01244 void (*dispatch) (HNDLE, HNDLE, EVENT_HEADER *, void *);
01245 } EVENT_REQUEST;
01246
01247 typedef struct {
01248 char name[NAME_LENGTH];
01249 INT pid;
01250 INT tid;
01251 INT thandle;
01252 INT port;
01253 INT read_pointer;
01254 INT max_request_index;
01255 INT num_received_events;
01256 INT num_sent_events;
01257 INT num_waiting_events;
01258 float data_rate;
01259 BOOL read_wait;
01260 INT write_wait;
01261 BOOL wake_up;
01262 BOOL all_flag;
01263 DWORD last_activity;
01264 DWORD watchdog_timeout;
01265
01266 EVENT_REQUEST event_request[MAX_EVENT_REQUESTS];
01267
01268 } BUFFER_CLIENT;
01269
01270 typedef struct {
01271 char name[NAME_LENGTH];
01272 INT num_clients;
01273 INT max_client_index;
01274 INT size;
01275 INT read_pointer;
01276 INT write_pointer;
01277 INT num_in_events;
01278 INT num_out_events;
01279
01280 BUFFER_CLIENT client[MAX_CLIENTS];
01281
01282 } BUFFER_HEADER;
01283
01284
01285
01286 typedef struct {
01287 BOOL attached;
01288 INT client_index;
01289 BUFFER_HEADER *buffer_header;
01290 void *buffer_data;
01291 char *read_cache;
01292 INT read_cache_size;
01293 INT read_cache_rp;
01294 INT read_cache_wp;
01295 char *write_cache;
01296 INT write_cache_size;
01297 INT write_cache_rp;
01298 INT write_cache_wp;
01299 HNDLE mutex;
01300 INT shm_handle;
01301 INT index;
01302 BOOL callback;
01303
01304 } BUFFER;
01305
01306 typedef struct {
01307 DWORD type;
01308 INT num_values;
01309 char name[NAME_LENGTH];
01310 INT data;
01311 INT total_size;
01312 INT item_size;
01313 WORD access_mode;
01314 WORD notify_count;
01315 INT next_key;
01316 INT parent_keylist;
01317 INT last_written;
01318 } KEY;
01319
01320 typedef struct {
01321 INT parent;
01322 INT num_keys;
01323 INT first_key;
01324 } KEYLIST;
01325
01326
01327
01328
01329
01330
01331
01332
01333
01334
01335 #define DF_INPUT (1<<0)
01336 #define DF_OUTPUT (1<<1)
01337 #define DF_PRIO_DEVICE (1<<2)
01338 #define DF_READ_ONLY (1<<3)
01339
01340 typedef struct {
01341 char name[NAME_LENGTH];
01342 INT(*bd) (INT cmd, ...);
01343 void *bd_info;
01344 } BUS_DRIVER;
01345
01346 typedef struct {
01347 char name[NAME_LENGTH];
01348 INT(*dd) (INT cmd, ...);
01349 INT channels;
01350 INT(*bd) (INT cmd, ...);
01351 DWORD flags;
01352 void *dd_info;
01353 } DEVICE_DRIVER;
01354
01355 typedef struct {
01356 WORD event_id;
01357 WORD trigger_mask;
01358 char buffer[NAME_LENGTH];
01359 INT eq_type;
01360 INT source;
01361 char format[8];
01362 BOOL enabled;
01363 INT read_on;
01364 INT period;
01365 double event_limit;
01366 DWORD num_subevents;
01367 INT history;
01368 char frontend_host[NAME_LENGTH];
01369 char frontend_name[NAME_LENGTH];
01370 char frontend_file_name[256];
01371 } EQUIPMENT_INFO;
01372
01373 typedef struct {
01374 double events_sent;
01375 double events_per_sec;
01376 double kbytes_per_sec;
01377 } EQUIPMENT_STATS;
01378
01379 typedef struct eqpmnt *PEQUIPMENT;
01380
01381 typedef struct eqpmnt {
01382 char name[NAME_LENGTH];
01383 EQUIPMENT_INFO info;
01384 INT(*readout) (char *, INT);
01385 INT(*cd) (INT cmd, PEQUIPMENT);
01386 DEVICE_DRIVER *driver;
01387 void *event_descrip;
01388 void *cd_info;
01389 INT status;
01390 DWORD last_called;
01391 DWORD last_idle;
01392 DWORD poll_count;
01393 INT format;
01394 HNDLE buffer_handle;
01395 HNDLE hkey_variables;
01396 DWORD serial_number;
01397 DWORD subevent_number;
01398 DWORD odb_out;
01399 DWORD odb_in;
01400 DWORD bytes_sent;
01401 DWORD events_sent;
01402 EQUIPMENT_STATS stats;
01403 } EQUIPMENT;
01404
01405
01406
01407
01408
01409
01410
01411
01412
01413 #define BANK_FORMAT_VERSION 1
01414 #define BANK_FORMAT_32BIT (1<<4)
01415
01416 typedef struct {
01417 DWORD data_size;
01418 DWORD flags;
01419 } BANK_HEADER;
01420
01421 typedef struct {
01422 char name[4];
01423 WORD type;
01424 WORD data_size;
01425 } BANK;
01426
01427 typedef struct {
01428 char name[4];
01429 DWORD type;
01430 DWORD data_size;
01431 } BANK32;
01432
01433 typedef struct {
01434 char name[NAME_LENGTH];
01435 DWORD type;
01436 DWORD n_data;
01437 } TAG;
01438
01439 typedef struct {
01440 char name[9];
01441 WORD type;
01442 DWORD size;
01443 char **init_str;
01444 BOOL output_flag;
01445 void *addr;
01446 DWORD n_data;
01447 HNDLE def_key;
01448 } BANK_LIST;
01449
01450
01451
01452
01453
01454
01455
01456
01457 typedef struct {
01458 char name[NAME_LENGTH];
01459 char author[NAME_LENGTH];
01460 INT(*analyzer) (EVENT_HEADER *, void *);
01461
01462 INT(*bor) (INT run_number);
01463 INT(*eor) (INT run_number);
01464 INT(*init) ();
01465 INT(*exit) ();
01466 void *parameters;
01467 INT param_size;
01468 char **init_str;
01469 BOOL enabled;
01470 void *histo_folder;
01471 } ANA_MODULE;
01472
01473 typedef struct {
01474 INT event_id;
01475 INT trigger_mask;
01476 INT sampling_type;
01477 char buffer[NAME_LENGTH];
01478 BOOL enabled;
01479 char client_name[NAME_LENGTH];
01480 char host[NAME_LENGTH];
01481 } AR_INFO;
01482
01483 typedef struct {
01484 double events_received;
01485 double events_per_sec;
01486 double events_written;
01487 } AR_STATS;
01488
01489 typedef struct {
01490 char event_name[NAME_LENGTH];
01491 AR_INFO ar_info;
01492 INT(*analyzer) (EVENT_HEADER *, void *);
01493 ANA_MODULE **ana_module;
01494 BANK_LIST *bank_list;
01495 INT rwnt_buffer_size;
01496 BOOL use_tests;
01497 char **init_string;
01498 INT status;
01499 HNDLE buffer_handle;
01500 HNDLE request_id;
01501 HNDLE hkey_variables;
01502 HNDLE hkey_common;
01503 void *addr;
01504 struct {
01505 DWORD run;
01506 DWORD serial;
01507 DWORD time;
01508 } number;
01509 DWORD events_received;
01510 DWORD events_written;
01511 AR_STATS ar_stats;
01512
01513 } ANALYZE_REQUEST;
01514
01515
01516
01517 typedef struct {
01518 char name[80];
01519 BOOL registered;
01520 DWORD count;
01521 DWORD previous_count;
01522 BOOL value;
01523 } ANA_TEST;
01524
01525 #define SET_TEST(t, v) { if (!t.registered) test_register(&t); t.value = (v); }
01526 #define TEST(t) (t.value)
01527
01528 #ifdef DEFINE_TESTS
01529 #define DEF_TEST(t) ANA_TEST t = { #t, 0, 0, FALSE };
01530 #else
01531 #define DEF_TEST(t) extern ANA_TEST t;
01532 #endif
01533
01534
01535
01536
01537
01538
01539
01540
01541
01542 #define RT_DATA (*((DWORD *) "HSDA"))
01543 #define RT_DEF (*((DWORD *) "HSDF"))
01544
01545 typedef struct {
01546 DWORD record_type;
01547 DWORD event_id;
01548 DWORD time;
01549 DWORD def_offset;
01550 DWORD data_size;
01551 } HIST_RECORD;
01552
01553 typedef struct {
01554 DWORD event_id;
01555 char event_name[NAME_LENGTH];
01556 DWORD def_offset;
01557 } DEF_RECORD;
01558
01559 typedef struct {
01560 DWORD event_id;
01561 DWORD time;
01562 DWORD offset;
01563 } INDEX_RECORD;
01564
01565 typedef struct {
01566 DWORD event_id;
01567 char event_name[NAME_LENGTH];
01568 DWORD n_tag;
01569 TAG *tag;
01570 DWORD hist_fh;
01571 DWORD index_fh;
01572 DWORD def_fh;
01573 DWORD base_time;
01574 DWORD def_offset;
01575 } HISTORY;
01576
01577
01578
01579
01580
01581
01582
01583
01584
01585
01586
01587
01588 typedef struct {
01589 INT state;
01590 INT online_mode;
01591 INT run_number;
01592 INT transition_in_progress;
01593 INT requested_transition;
01594 char start_time[32];
01595 DWORD start_time_binary;
01596 char stop_time[32];
01597 DWORD stop_time_binary;
01598 } RUNINFO;
01599
01600 #define RUNINFO_STR(_name) char *_name[] = {\
01601 "[.]",\
01602 "State = INT : 1",\
01603 "Online Mode = INT : 1",\
01604 "Run number = INT : 0",\
01605 "Transition in progress = INT : 0",\
01606 "Requested transition = INT : 0",\
01607 "Start time = STRING : [32] Tue Sep 09 15:04:42 1997",\
01608 "Start time binary = DWORD : 0",\
01609 "Stop time = STRING : [32] Tue Sep 09 15:04:42 1997",\
01610 "Stop time binary = DWORD : 0",\
01611 "",\
01612 NULL }
01613
01614
01615
01616
01617
01618
01619
01620
01621
01622
01623
01624
01625 typedef struct {
01626 BOOL required;
01627 INT watchdog_timeout;
01628 DWORD check_interval;
01629 char start_command[256];
01630 BOOL auto_start;
01631 BOOL auto_stop;
01632 BOOL auto_restart;
01633 char alarm_class[32];
01634 DWORD first_failed;
01635 } PROGRAM_INFO;
01636
01637 #define AT_INTERNAL 1
01638 #define AT_PROGRAM 2
01639 #define AT_EVALUATED 3
01640 #define AT_PERIODIC 4
01641 #define AT_LAST 4
01642
01643 #define PROGRAM_INFO_STR(_name) char *_name[] = {\
01644 "[.]",\
01645 "Required = BOOL : n",\
01646 "Watchdog timeout = INT : 10000",\
01647 "Check interval = DWORD : 180000",\
01648 "Start command = STRING : [256] ",\
01649 "Auto start = BOOL : n",\
01650 "Auto stop = BOOL : n",\
01651 "Auto restart = BOOL : n",\
01652 "Alarm class = STRING : [32] ",\
01653 "First failed = DWORD : 0",\
01654 "",\
01655 NULL }
01656
01657
01658
01659 typedef struct {
01660 BOOL write_system_message;
01661 BOOL write_elog_message;
01662 INT system_message_interval;
01663 DWORD system_message_last;
01664 char execute_command[256];
01665 INT execute_interval;
01666 DWORD execute_last;
01667 BOOL stop_run;
01668 char display_bgcolor[32];
01669 char display_fgcolor[32];
01670 } ALARM_CLASS;
01671
01672 #define ALARM_CLASS_STR(_name) char *_name[] = {\
01673 "[.]",\
01674 "Write system message = BOOL : y",\
01675 "Write Elog message = BOOL : n",\
01676 "System message interval = INT : 60",\
01677 "System message last = DWORD : 0",\
01678 "Execute command = STRING : [256] ",\
01679 "Execute interval = INT : 0",\
01680 "Execute last = DWORD : 0",\
01681 "Stop run = BOOL : n",\
01682 "Display BGColor = STRING : [32] red",\
01683 "Display FGColor = STRING : [32] black",\
01684 "",\
01685 NULL }
01686
01687
01688
01689 typedef struct {
01690 BOOL active;
01691 INT triggered;
01692 INT type;
01693 INT check_interval;
01694 DWORD checked_last;
01695 char time_triggered_first[32];
01696 char time_triggered_last[32];
01697 char condition[256];
01698 char alarm_class[32];
01699 char alarm_message[80];
01700 } ALARM;
01701
01702 #define ALARM_ODB_STR(_name) char *_name[] = {\
01703 "[.]",\
01704 "Active = BOOL : n",\
01705 "Triggered = INT : 0",\
01706 "Type = INT : 3",\
01707 "Check interval = INT : 60",\
01708 "Checked last = DWORD : 0",\
01709 "Time triggered first = STRING : [32] ",\
01710 "Time triggered last = STRING : [32] ",\
01711 "Condition = STRING : [256] /Runinfo/Run number > 100",\
01712 "Alarm Class = STRING : [32] Alarm",\
01713 "Alarm Message = STRING : [80] Run number became too large",\
01714 "",\
01715 NULL }
01716
01717 #define ALARM_PERIODIC_STR(_name) char *_name[] = {\
01718 "[.]",\
01719 "Active = BOOL : n",\
01720 "Triggered = INT : 0",\
01721 "Type = INT : 4",\
01722 "Check interval = INT : 28800",\
01723 "Checked last = DWORD : 0",\
01724 "Time triggered first = STRING : [32] ",\
01725 "Time triggered last = STRING : [32] ",\
01726 "Condition = STRING : [256] ",\
01727 "Alarm Class = STRING : [32] Warning",\
01728 "Alarm Message = STRING : [80] Please do your shift checks",\
01729 "",\
01730 NULL }
01731
01732
01733
01734
01735
01736 #ifndef DOXYGEN_SHOULD_SKIP_THIS
01737
01738
01739
01740 #ifdef _MEM_DBG
01741 #define M_MALLOC(x) dbg_malloc((x), __FILE__, __LINE__)
01742 #define M_CALLOC(x,y) dbg_calloc((x), (y), __FILE__, __LINE__)
01743 #define M_FREE(x) dbg_free ((x), __FILE__, __LINE__)
01744 #else
01745 #define M_MALLOC(x) malloc(x)
01746 #define M_CALLOC(x,y) calloc(x,y)
01747 #define M_FREE(x) free(x)
01748 #endif
01749
01750 void *dbg_malloc(unsigned int size, char *file, int line);
01751 void *dbg_calloc(unsigned int size, unsigned int count, char *file, int line);
01752 void dbg_free(void *adr, char *file, int line);
01753
01754
01755
01756 #ifdef extname
01757 #define PAWC_NAME pawc_
01758 #else
01759 #define PAWC_NAME PAWC
01760 #endif
01761
01762 #define PAWC_DEFINE(size) \
01763 INT PAWC_NAME[size/4]; \
01764 INT pawc_size = size
01765
01766
01767 #undef GetCurrentTime
01768
01769
01770
01771
01772
01773 #define RPC_IN (1 << 0)
01774 #define RPC_OUT (1 << 1)
01775 #define RPC_POINTER (1 << 2)
01776 #define RPC_FIXARRAY (1 << 3)
01777 #define RPC_VARARRAY (1 << 4)
01778 #define RPC_OUTGOING (1 << 5)
01779
01780
01781
01782 #define ST_NONE 0
01783 #define ST_SINGLE 1
01784 #define ST_MTHREAD 2
01785 #define ST_MPROCESS 3
01786 #define ST_SUBPROCESS 4
01787 #define ST_REMOTE 5
01788
01789
01790
01791 typedef struct {
01792 WORD tid;
01793 WORD flags;
01794 INT n;
01795 } RPC_PARAM;
01796
01797 typedef struct {
01798 INT id;
01799 char *name;
01800 RPC_PARAM param[20];
01801 INT(*dispatch) (INT, void **);
01802 } RPC_LIST;
01803
01804
01805
01806 #define RPC_MIN_ID 1
01807 #define RPC_MAX_ID 9999
01808
01809
01810
01811 #define CF_ENDIAN (1<<0)
01812 #define CF_IEEE2VAX (1<<1)
01813 #define CF_VAX2IEEE (1<<2)
01814 #define CF_ASCII (1<<3)
01815
01816 #define CBYTE(_i) (* ((BYTE *) prpc_param[_i]))
01817 #define CPBYTE(_i) ( ((BYTE *) prpc_param[_i]))
01818
01819 #define CSHORT(_i) (* ((short *) prpc_param[_i]))
01820 #define CPSHORT(_i) ( ((short *) prpc_param[_i]))
01821
01822 #define CINT(_i) (* ((INT *) prpc_param[_i]))
01823 #define CPINT(_i) ( ((INT *) prpc_param[_i]))
01824
01825 #define CWORD(_i) (* ((WORD *) prpc_param[_i]))
01826 #define CPWORD(_i) ( ((WORD *) prpc_param[_i]))
01827
01828 #define CLONG(_i) (* ((long *) prpc_param[_i]))
01829 #define CPLONG(_i) ( ((long *) prpc_param[_i]))
01830
01831 #define CDWORD(_i) (* ((DWORD *) prpc_param[_i]))
01832 #define CPDWORD(_i) ( ((DWORD *) prpc_param[_i]))
01833
01834 #define CHNDLE(_i) (* ((HNDLE *) prpc_param[_i]))
01835 #define CPHNDLE(_i) ( ((HNDLE *) prpc_param[_i]))
01836
01837 #define CBOOL(_i) (* ((BOOL *) prpc_param[_i]))
01838 #define CPBOOL(_i) ( ((BOOL *) prpc_param[_i]))
01839
01840 #define CFLOAT(_i) (* ((float *) prpc_param[_i]))
01841 #define CPFLOAT(_i) ( ((float *) prpc_param[_i]))
01842
01843 #define CDOUBLE(_i) (* ((double *) prpc_param[_i]))
01844 #define CPDOUBLE(_i) ( ((double *) prpc_param[_i]))
01845
01846 #define CSTRING(_i) ( ((char *) prpc_param[_i]))
01847 #define CARRAY(_i) ( ((void *) prpc_param[_i]))
01848
01849 #define CBYTE(_i) (* ((BYTE *) prpc_param[_i]))
01850 #define CPBYTE(_i) ( ((BYTE *) prpc_param[_i]))
01851
01852 #define CSHORT(_i) (* ((short *) prpc_param[_i]))
01853 #define CPSHORT(_i) ( ((short *) prpc_param[_i]))
01854
01855 #define CINT(_i) (* ((INT *) prpc_param[_i]))
01856 #define CPINT(_i) ( ((INT *) prpc_param[_i]))
01857
01858 #define CWORD(_i) (* ((WORD *) prpc_param[_i]))
01859 #define CPWORD(_i) ( ((WORD *) prpc_param[_i]))
01860
01861 #define CLONG(_i) (* ((long *) prpc_param[_i]))
01862 #define CPLONG(_i) ( ((long *) prpc_param[_i]))
01863
01864 #define CDWORD(_i) (* ((DWORD *) prpc_param[_i]))
01865 #define CPDWORD(_i) ( ((DWORD *) prpc_param[_i]))
01866
01867 #define CHNDLE(_i) (* ((HNDLE *) prpc_param[_i]))
01868 #define CPHNDLE(_i) ( ((HNDLE *) prpc_param[_i]))
01869
01870 #define CBOOL(_i) (* ((BOOL *) prpc_param[_i]))
01871 #define CPBOOL(_i) ( ((BOOL *) prpc_param[_i]))
01872
01873 #define CFLOAT(_i) (* ((float *) prpc_param[_i]))
01874 #define CPFLOAT(_i) ( ((float *) prpc_param[_i]))
01875
01876 #define CDOUBLE(_i) (* ((double *) prpc_param[_i]))
01877 #define CPDOUBLE(_i) ( ((double *) prpc_param[_i]))
01878
01879 #define CSTRING(_i) ( ((char *) prpc_param[_i]))
01880 #define CARRAY(_i) ( ((void *) prpc_param[_i]))
01881
01882
01883
01884 #define cBYTE (* ((BYTE *) prpc_param[--n_param]))
01885 #define cPBYTE ( ((BYTE *) prpc_param[--n_param]))
01886
01887 #define cSHORT (* ((short *) prpc_param[--n_param]))
01888 #define cPSHORT ( ((short *) prpc_param[--n_param]))
01889
01890 #define cINT (* ((INT *) prpc_param[--n_param]))
01891 #define cPINT ( ((INT *) prpc_param[--n_param]))
01892
01893 #define cWORD (* ((WORD *) prpc_param[--n_param]))
01894 #define cPWORD ( ((WORD *) prpc_param[--n_param]))
01895
01896 #define cLONG (* ((long *) prpc_param[--n_param]))
01897 #define cPLONG ( ((long *) prpc_param[--n_param]))
01898
01899 #define cDWORD (* ((DWORD *) prpc_param[--n_param]))
01900 #define cPDWORD ( ((DWORD *) prpc_param[--n_param]))
01901
01902 #define cHNDLE (* ((HNDLE *) prpc_param[--n_param]))
01903 #define cPHNDLE ( ((HNDLE *) prpc_param[--n_param]))
01904
01905 #define cBOOL (* ((BOOL *) prpc_param[--n_param]))
01906 #define cPBOOL ( ((BOOL *) prpc_param[--n_param]))
01907
01908 #define cFLOAT (* ((float *) prpc_param[--n_param]))
01909 #define cPFLOAT ( ((float *) prpc_param[--n_param]))
01910
01911 #define cDOUBLE (* ((double *) prpc_param[--n_param]))
01912 #define cPDOUBLE ( ((double *) prpc_param[--n_param]))
01913
01914 #define cSTRING ( ((char *) prpc_param[--n_param]))
01915 #define cARRAY ( ((void *) prpc_param[--n_param]))
01916
01917
01918
01919
01920 #ifdef __cplusplus
01921 extern "C" {
01922 #endif
01923
01924
01925 #if defined(OS_WINNT) && defined(MIDAS_DLL)
01926 #define EXPRT __declspec(dllexport)
01927 #else
01928 #define EXPRT
01929 #endif
01930
01931
01932 INT EXPRT cm_get_error(INT code, char *string);
01933 char EXPRT *cm_get_version(void);
01934 INT EXPRT cm_get_environment(char *host_name, int host_name_size,
01935 char *exp_name, int exp_name_size);
01936 INT EXPRT cm_list_experiments(char *host_name,
01937 char exp_name[MAX_EXPERIMENT][NAME_LENGTH]);
01938 INT EXPRT cm_select_experiment(char *host_name, char *exp_name);
01939 INT EXPRT cm_connect_experiment(char *host_name, char *exp_name,
01940 char *client_name, void (*func) (char *));
01941 INT EXPRT cm_connect_experiment1(char *host_name, char *exp_name,
01942 char *client_name,
01943 void (*func) (char *), INT odb_size,
01944 DWORD watchdog_timeout);
01945 INT EXPRT cm_disconnect_experiment(void);
01946 INT EXPRT cm_register_transition(INT transition, INT(*func) (INT, char *), int sequence_number);
01947 INT EXPRT cm_set_transition_sequence(INT transition, INT sequence_number);
01948 INT EXPRT cm_query_transition(int *transition, int *run_number, int *trans_time);
01949 INT EXPRT cm_register_deferred_transition(INT transition, BOOL(*func) (INT, BOOL));
01950 INT EXPRT cm_check_deferred_transition(void);
01951 INT EXPRT cm_transition(INT transition, INT run_number, char *error,
01952 INT strsize, INT async_flag, INT debug_flag);
01953 INT EXPRT cm_register_server(void);
01954 INT EXPRT cm_register_function(INT id, INT(*func) (INT, void **));
01955 INT EXPRT cm_connect_client(char *client_name, HNDLE * hConn);
01956 INT EXPRT cm_disconnect_client(HNDLE hConn, BOOL bShutdown);
01957 INT EXPRT cm_set_experiment_database(HNDLE hDB, HNDLE hKeyClient);
01958 INT EXPRT cm_get_experiment_database(HNDLE * hDB, HNDLE * hKeyClient);
01959 INT EXPRT cm_set_experiment_mutex(INT mutex_alarm, INT mutex_elog);
01960 INT EXPRT cm_get_experiment_mutex(INT * mutex_alarm, INT * mutex_elog);
01961 INT EXPRT cm_set_client_info(HNDLE hDB, HNDLE * hKeyClient,
01962 char *host_name, char *client_name,
01963 INT computer_id, char *password, DWORD watchdog_timeout);
01964 INT EXPRT cm_get_client_info(char *client_name);
01965 INT EXPRT cm_set_watchdog_params(BOOL call_watchdog, DWORD timeout);
01966 INT EXPRT cm_get_watchdog_params(BOOL * call_watchdog, DWORD * timeout);
01967 INT EXPRT cm_get_watchdog_info(HNDLE hDB, char *client_name,
01968 DWORD * timeout, DWORD * last);
01969 INT EXPRT cm_enable_watchdog(BOOL flag);
01970 void EXPRT cm_watchdog(int);
01971 INT EXPRT cm_shutdown(char *name, BOOL bUnique);
01972 INT EXPRT cm_exist(char *name, BOOL bUnique);
01973 INT EXPRT cm_cleanup(char *client_name, BOOL ignore_timeout);
01974 INT EXPRT cm_yield(INT millisec);
01975 INT EXPRT cm_execute(char *command, char *result, INT buf_size);
01976 INT EXPRT cm_synchronize(DWORD * sec);
01977 INT EXPRT cm_asctime(char *str, INT buf_size);
01978 INT EXPRT cm_time(DWORD * time);
01979 BOOL EXPRT cm_is_ctrlc_pressed();
01980 void EXPRT cm_ack_ctrlc_pressed();
01981
01982 INT EXPRT cm_set_msg_print(INT system_mask, INT user_mask, int (*func) (const char *));
01983 INT EXPRT cm_msg(INT message_type, char *filename, INT line,
01984 const char *routine, const char *format, ...);
01985 INT EXPRT cm_msg1(INT message_type, char *filename, INT line,
01986 const char *facility, const char *routine, const char *format, ...);
01987 INT EXPRT cm_msg_register(void (*func)
01988 (HNDLE, HNDLE, EVENT_HEADER *, void *));
01989 INT EXPRT cm_msg_retrieve(INT n_message, char *message, INT * buf_size);
01990
01991 BOOL EXPRT equal_ustring(char *str1, char *str2);
01992 #ifndef HAVE_STRLCPY
01993 INT EXPRT strlcpy(char *dst, const char *src, INT size);
01994 INT EXPRT strlcat(char *dst, const char *src, INT size);
01995 #endif
01996
01997
01998 INT EXPRT bm_open_buffer(char *buffer_name, INT buffer_size, INT * buffer_handle);
01999 INT EXPRT bm_close_buffer(INT buffer_handle);
02000 INT EXPRT bm_close_all_buffers(void);
02001 INT EXPRT bm_init_buffer_counters(INT buffer_handle);
02002 INT EXPRT bm_get_buffer_info(INT buffer_handle, BUFFER_HEADER * buffer_header);
02003 INT EXPRT bm_get_buffer_level(INT buffer_handle, INT * n_bytes);
02004 INT EXPRT bm_set_cache_size(INT buffer_handle, INT read_size, INT write_size);
02005 INT EXPRT bm_compose_event(EVENT_HEADER * event_header,
02006 short int event_id, short int trigger_mask,
02007 DWORD size, DWORD serial);
02008 INT EXPRT bm_request_event(INT buffer_handle, short int event_id,
02009 short int trigger_mask, INT sampling_type,
02010 INT * request_id, void (*func) (HNDLE, HNDLE,
02011 EVENT_HEADER *, void *));
02012 INT EXPRT bm_add_event_request(INT buffer_handle, short int event_id,
02013 short int trigger_mask,
02014 INT sampling_type, void (*func) (HNDLE,
02015 HNDLE,
02016 EVENT_HEADER
02017 *,
02018 void *),
02019 INT request_id);
02020 INT EXPRT bm_delete_request(INT request_id);
02021 INT EXPRT bm_send_event(INT buffer_handle, void *event, INT buf_size, INT async_flag);
02022 INT EXPRT bm_receive_event(INT buffer_handle, void *destination,
02023 INT * buf_size, INT async_flag);
02024 INT EXPRT bm_skip_event(INT buffer_handle);
02025 INT EXPRT bm_flush_cache(INT buffer_handle, INT async_flag);
02026 INT EXPRT bm_poll_event(INT flag);
02027 INT EXPRT bm_empty_buffers(void);
02028
02029
02030 INT EXPRT db_open_database(char *database_name, INT database_size,
02031 HNDLE * hdb, char *client_name);
02032 INT EXPRT db_close_database(HNDLE database_handle);
02033 INT EXPRT db_close_all_databases(void);
02034 INT EXPRT db_protect_database(HNDLE database_handle);
02035
02036 INT EXPRT db_create_key(HNDLE hdb, HNDLE key_handle, char *key_name, DWORD type);
02037 INT EXPRT db_create_link(HNDLE hdb, HNDLE key_handle, char *link_name,
02038 char *destination);
02039 INT EXPRT db_set_value(HNDLE hdb, HNDLE hKeyRoot, char *key_name,
02040 void *data, INT size, INT num_values, DWORD type);
02041 INT EXPRT db_get_value(HNDLE hdb, HNDLE hKeyRoot, char *key_name,
02042 void *data, INT * size, DWORD type, BOOL create);
02043 INT EXPRT db_find_key(HNDLE hdb, HNDLE hkey, char *name, HNDLE * hsubkey);
02044 INT EXPRT db_find_link(HNDLE hDB, HNDLE hKey, char *key_name, HNDLE * subhKey);
02045 INT EXPRT db_find_key1(HNDLE hdb, HNDLE hkey, char *name, HNDLE * hsubkey);
02046 INT EXPRT db_find_link1(HNDLE hDB, HNDLE hKey, char *key_name, HNDLE * subhKey);
02047 INT EXPRT db_scan_tree(HNDLE hDB, HNDLE hKey, int level,
02048 INT(*callback) (HNDLE, HNDLE, KEY *, INT, void *), void *info);
02049 INT EXPRT db_scan_tree_link(HNDLE hDB, HNDLE hKey, int level,
02050 void (*callback) (HNDLE, HNDLE, KEY *, INT,
02051 void *), void *info);
02052 INT EXPRT db_get_path(HNDLE hDB, HNDLE hKey, char *path, INT buf_size);
02053 INT EXPRT db_delete_key(HNDLE database_handle, HNDLE key_handle, BOOL follow_links);
02054 INT EXPRT db_enum_key(HNDLE hdb, HNDLE key_handle, INT index, HNDLE * subkey_handle);
02055 INT EXPRT db_enum_link(HNDLE hdb, HNDLE key_handle, INT index, HNDLE * subkey_handle);
02056 INT EXPRT db_get_next_link(HNDLE hdb, HNDLE key_handle, HNDLE * subkey_handle);
02057 INT EXPRT db_get_key(HNDLE hdb, HNDLE key_handle, KEY * key);
02058 INT EXPRT db_get_key_info(HNDLE hDB, HNDLE hKey, char *name,
02059 INT name_size, INT * type, INT * num_values,
02060 INT * item_size);
02061 INT EXPRT db_get_key_time(HNDLE hdb, HNDLE key_handle, DWORD * delta);
02062 INT EXPRT db_rename_key(HNDLE hDB, HNDLE hKey, char *name);
02063 INT EXPRT db_reorder_key(HNDLE hDB, HNDLE hKey, INT index);
02064 INT EXPRT db_get_data(HNDLE hdb, HNDLE key_handle, void *data,
02065 INT * buf_size, DWORD type);
02066 INT EXPRT db_get_data1(HNDLE hDB, HNDLE hKey, void *data,
02067 INT * buf_size, DWORD type, INT * num_values);
02068 INT EXPRT db_get_data_index(HNDLE hDB, HNDLE hKey, void *data,
02069 INT * buf_size, INT index, DWORD type);
02070 INT EXPRT db_set_data(HNDLE hdb, HNDLE hKey, void *data, INT buf_size,
02071 INT num_values, DWORD type);
02072 INT EXPRT db_set_data_index(HNDLE hDB, HNDLE hKey, void *data, INT size,
02073 INT index, DWORD type);
02074 INT EXPRT db_set_data_index2(HNDLE hDB, HNDLE hKey, void *data,
02075 INT size, INT index, DWORD type, BOOL bNotify);
02076 INT EXPRT db_set_num_values(HNDLE hDB, HNDLE hKey, INT num_values);
02077 INT EXPRT db_merge_data(HNDLE hDB, HNDLE hKeyRoot, char *name,
02078 void *data, INT data_size, INT num_values, INT type);
02079 INT EXPRT db_set_mode(HNDLE hdb, HNDLE key_handle, WORD mode, BOOL recurse);
02080 INT EXPRT db_create_record(HNDLE hdb, HNDLE hkey, char *name, char *init_str);
02081 INT EXPRT db_check_record(HNDLE hDB, HNDLE hKey, char *key_name,
02082 char *rec_str, BOOL correct);
02083 INT EXPRT db_open_record(HNDLE hdb, HNDLE hkey, void *ptr, INT rec_size,
02084 WORD access, void (*dispatcher) (INT, INT,
02085 void *), void *info);
02086 INT EXPRT db_close_record(HNDLE hdb, HNDLE hkey);
02087 INT EXPRT db_get_record(HNDLE hdb, HNDLE hKey, void *data, INT * buf_size, INT align);
02088 INT EXPRT db_get_record_size(HNDLE hdb, HNDLE hKey, INT align, INT * buf_size);
02089 INT EXPRT db_set_record(HNDLE hdb, HNDLE hKey, void *data, INT buf_size, INT align);
02090 INT EXPRT db_send_changed_records(void);
02091 INT EXPRT db_get_open_records(HNDLE hDB, HNDLE hKey, char *str,
02092 INT buf_size, BOOL fix);
02093
02094 INT EXPRT db_add_open_record(HNDLE hDB, HNDLE hKey, WORD access_mode);
02095 INT EXPRT db_remove_open_record(HNDLE hDB, HNDLE hKey, BOOL lock);
02096
02097 INT EXPRT db_load(HNDLE hdb, HNDLE key_handle, char *filename, BOOL bRemote);
02098 INT EXPRT db_save(HNDLE hdb, HNDLE key_handle, char *filename, BOOL bRemote);
02099 INT EXPRT db_copy(HNDLE hDB, HNDLE hKey, char *buffer, INT * buffer_size, char *path);
02100 INT EXPRT db_paste(HNDLE hDB, HNDLE hKeyRoot, char *buffer);
02101 INT EXPRT db_save_struct(HNDLE hDB, HNDLE hKey, char *file_name,
02102 char *struct_name, BOOL append);
02103 INT EXPRT db_save_string(HNDLE hDB, HNDLE hKey, char *file_name,
02104 char *string_name, BOOL append);
02105 INT EXPRT db_save_xml(HNDLE hDB, HNDLE hKey, char *file_name);
02106
02107 INT EXPRT db_sprintf(char *string, void *data, INT data_size, INT index, DWORD type);
02108 INT EXPRT db_sprintfh(char *string, void *data, INT data_size, INT index, DWORD type);
02109 INT EXPRT db_sscanf(char *string, void *data, INT * data_size, INT index, DWORD type);
02110 char EXPRT *strcomb(char **list);
02111
02112
02113 void EXPRT bk_init(void *pbh);
02114 void EXPRT bk_init32(void *event);
02115 BOOL EXPRT bk_is32(void *event);
02116 INT EXPRT bk_size(void *pbh);
02117 void EXPRT bk_create(void *pbh, const char *name, WORD type, void *pdata);
02118 INT EXPRT bk_delete(void *event, const char *name);
02119 INT EXPRT bk_close(void *pbh, void *pdata);
02120 INT EXPRT bk_list(void *pbh, char *bklist);
02121 INT EXPRT bk_locate(void *pbh, const char *name, void *pdata);
02122 INT EXPRT bk_iterate(void *pbh, BANK ** pbk, void *pdata);
02123 INT EXPRT bk_iterate32(void *pbh, BANK32 ** pbk, void *pdata);
02124 INT EXPRT bk_swap(void *event, BOOL force);
02125 INT EXPRT bk_find(BANK_HEADER * pbkh, const char *name, DWORD * bklen,
02126 DWORD * bktype, void **pdata);
02127
02128
02129 INT EXPRT rpc_register_functions(RPC_LIST * new_list, INT(*func) (INT, void **));
02130 INT EXPRT rpc_register_function(INT id, INT(*func) (INT, void **));
02131 INT EXPRT rpc_get_option(HNDLE hConn, INT item);
02132 INT EXPRT rpc_set_option(HNDLE hConn, INT item, INT value);
02133 INT EXPRT rpc_set_name(char *name);
02134 INT EXPRT rpc_get_name(char *name);
02135 INT EXPRT rpc_is_remote(void);
02136 INT EXPRT rpc_set_debug(void (*func) (char *), INT mode);
02137 void EXPRT rpc_debug_printf(char *format, ...);
02138
02139 INT EXPRT rpc_register_server(INT server_type, char *name, INT * port,
02140 INT(*func) (INT, void **));
02141 INT EXPRT rpc_register_client(char *name, RPC_LIST * list);
02142 INT EXPRT rpc_server_thread(void *pointer);
02143 INT EXPRT rpc_server_shutdown(void);
02144 INT EXPRT rpc_client_call(HNDLE hConn, const INT routine_id, ...);
02145 INT EXPRT rpc_call(const INT routine_id, ...);
02146 INT EXPRT rpc_tid_size(INT id);
02147 char EXPRT *rpc_tid_name(INT id);
02148 INT EXPRT rpc_server_connect(char *host_name, char *exp_name);
02149 INT EXPRT rpc_client_connect(char *host_name, INT midas_port,
02150 char *client_name, HNDLE * hConnection);
02151 INT EXPRT rpc_client_disconnect(HNDLE hConn, BOOL bShutdown);
02152
02153 INT EXPRT rpc_send_event(INT buffer_handle, void *source, INT buf_size,
02154 INT async_flag);
02155 INT EXPRT rpc_flush_event(void);
02156
02157 void EXPRT rpc_get_convert_flags(INT * convert_flags);
02158 void EXPRT rpc_convert_single(void *data, INT tid, INT flags, INT convert_flags);
02159 void EXPRT rpc_convert_data(void *data, INT tid, INT flags, INT size,
02160 INT convert_flags);
02161
02162
02163 DWORD EXPRT ss_millitime(void);
02164 DWORD EXPRT ss_time(void);
02165 DWORD EXPRT ss_settime(DWORD seconds);
02166 char EXPRT *ss_asctime(void);
02167 INT EXPRT ss_sleep(INT millisec);
02168 BOOL EXPRT ss_kbhit(void);
02169
02170 double EXPRT ss_nan(void);
02171 int ss_isnan(double x);
02172
02173 void EXPRT ss_clear_screen(void);
02174 void EXPRT ss_printf(INT x, INT y, const char *format, ...);
02175 void ss_set_screen_size(int x, int y);
02176
02177 char EXPRT *ss_getpass(char *prompt);
02178 INT EXPRT ss_getchar(BOOL reset);
02179 char EXPRT *ss_crypt(char *key, char *salt);
02180 char EXPRT *ss_gets(char *string, int size);
02181
02182 void EXPRT *ss_ctrlc_handler(void (*func) (int));
02183
02184
02185 INT EXPRT ss_directio_give_port(INT start, INT end);
02186 INT EXPRT ss_directio_lock_port(INT start, INT end);
02187
02188
02189 INT EXPRT ss_tape_open(char *path, INT oflag, INT * channel);
02190 INT EXPRT ss_tape_close(INT channel);
02191 INT EXPRT ss_tape_status(char *path);
02192 INT EXPRT ss_tape_read(INT channel, void *pdata, INT * count);
02193 INT EXPRT ss_tape_write(INT channel, void *pdata, INT count);
02194 INT EXPRT ss_tape_write_eof(INT channel);
02195 INT EXPRT ss_tape_fskip(INT channel, INT count);
02196 INT EXPRT ss_tape_rskip(INT channel, INT count);
02197 INT EXPRT ss_tape_rewind(INT channel);
02198 INT EXPRT ss_tape_spool(INT channel);
02199 INT EXPRT ss_tape_mount(INT channel);
02200 INT EXPRT ss_tape_unmount(INT channel);
02201 INT EXPRT ss_tape_get_blockn(INT channel);
02202
02203
02204 double EXPRT ss_disk_free(char *path);
02205 double EXPRT ss_file_size(char *path);
02206 INT EXPRT ss_file_remove(char *path);
02207 INT EXPRT ss_file_find(char *path, char *pattern, char **plist);
02208 double EXPRT ss_disk_size(char *path);
02209
02210
02211 INT EXPRT hs_set_path(char *path);
02212 INT EXPRT hs_define_event(DWORD event_id, char *name, TAG * tag, DWORD size);
02213 INT EXPRT hs_write_event(DWORD event_id, void *data, DWORD size);
02214 INT EXPRT hs_count_events(DWORD ltime, DWORD * count);
02215 INT EXPRT hs_enum_events(DWORD ltime, char *event_name,
02216 DWORD * name_size, INT event_id[], DWORD * id_size);
02217 INT EXPRT hs_count_vars(DWORD ltime, DWORD event_id, DWORD * count);
02218 INT EXPRT hs_enum_vars(DWORD ltime, DWORD event_id, char *var_name,
02219 DWORD * size, DWORD * var_n, DWORD * n_size);
02220 INT EXPRT hs_get_var(DWORD ltime, DWORD event_id, char *var_name,
02221 DWORD * type, INT * n_data);
02222 INT EXPRT hs_get_event_id(DWORD ltime, char *name, DWORD * id);
02223 INT EXPRT hs_read(DWORD event_id, DWORD start_time, DWORD end_time,
02224 DWORD interval, char *tag_name, DWORD var_index,
02225 DWORD * time_buffer, DWORD * tbsize,
02226 void *data_buffer, DWORD * dbsize, DWORD * type, DWORD * n);
02227 INT EXPRT hs_dump(DWORD event_id, DWORD start_time, DWORD end_time,
02228 DWORD interval, BOOL binary_time);
02229 INT EXPRT hs_fdump(char *file_name, DWORD id, BOOL binary_time);
02230
02231
02232 INT EXPRT el_retrieve(char *tag, char *date, int *run, char *author,
02233 char *type, char *system, char *subject,
02234 char *text, int *textsize, char *orig_tag,
02235 char *reply_tag, char *attachment1,
02236 char *attachment2, char *attachment3, char *encoding);
02237 INT EXPRT el_submit(int run, char *author, char *type, char *system,
02238 char *subject, char *text, char *reply_to,
02239 char *encoding, char *afilename1, char *buffer1,
02240 INT buffer_size1, char *afilename2, char *buffer2,
02241 INT buffer_size2, char *afilename3, char *buffer3,
02242 INT buffer_size3, char *tag, INT tag_size);
02243 INT EXPRT el_search_message(char *tag, int *fh, BOOL walk);
02244 INT EXPRT el_search_run(int run, char *return_tag);
02245 INT EXPRT el_delete_message(char *tag);
02246
02247
02248 INT EXPRT al_check();
02249 INT EXPRT al_trigger_alarm(char *alarm_name, char *alarm_message,
02250 char *default_class, char *cond_str, INT type);
02251 INT EXPRT al_trigger_class(char *alarm_class, char *alarm_message, BOOL first);
02252 INT EXPRT al_reset_alarm(char *alarm_name);
02253 BOOL EXPRT al_evaluate_condition(char *condition, char *value);
02254
02255
02256 INT get_frontend_index();
02257
02258
02259 void EXPRT test_register(ANA_TEST * t);
02260 void EXPRT add_data_dir(char *result, char *file);
02261 void EXPRT lock_histo(INT id);
02262
02263 void EXPRT open_subfolder(char *name);
02264 void EXPRT close_subfolder();
02265 #ifdef __cplusplus
02266 }
02267
02268 #ifdef USE_ROOT
02269
02270 extern TFolder *gManaHistosFolder;
02271 extern TObjArray *gHistoFolderStack;
02272
02273
02274
02275
02276 template<typename TH1X>
02277 TH1X EXPRT *h1_book(const char *name, const char *title,
02278 int bins, double min, double max)
02279 {
02280 TH1X *hist;
02281
02282
02283 if (!gHistoFolderStack->Last())
02284 hist = (TH1X *) gManaHistosFolder->FindObjectAny(name);
02285 else
02286 hist = (TH1X *) ((TFolder *)gHistoFolderStack->Last())->FindObjectAny(name);
02287
02288 if (hist == NULL) {
02289 hist = new TH1X(name, title, bins, min, max);
02290 if (!gHistoFolderStack->Last())
02291 gManaHistosFolder->Add(hist);
02292 else
02293 ((TFolder *)gHistoFolderStack->Last())->Add(hist);
02294 }
02295
02296 return hist;
02297 }
02298
02299 template<typename TH1X>
02300 TH1X EXPRT *h1_book(const char *name, const char *title,
02301 int bins, double edges[])
02302 {
02303 TH1X *hist;
02304
02305
02306 if (!gHistoFolderStack->Last())
02307 hist = (TH1X *) gManaHistosFolder->FindObjectAny(name);
02308 else
02309 hist = (TH1X *) ((TFolder *)gHistoFolderStack->Last())->FindObjectAny(name);
02310
02311 if (hist == NULL) {
02312 hist = new TH1X(name, title, bins, edges);
02313 if (!gHistoFolderStack->Last())
02314 gManaHistosFolder->Add(hist);
02315 else
02316 ((TFolder *)gHistoFolderStack->Last())->Add(hist);
02317 }
02318
02319 return hist;
02320 }
02321
02322 template<typename TH2X>
02323 TH2X EXPRT *h2_book(const char *name, const char *title,
02324 int xbins, double xmin, double xmax,
02325 int ybins, double ymin, double ymax)
02326 {
02327 TH2X *hist;
02328
02329
02330 if (!gHistoFolderStack->Last())
02331 hist = (TH2X *) gManaHistosFolder->FindObjectAny(name);
02332 else
02333 hist = (TH2X *) ((TFolder *)gHistoFolderStack->Last())->FindObjectAny(name);
02334
02335 if (hist == NULL) {
02336 hist = new TH2X(name, title, xbins, xmin, xmax, ybins, ymin, ymax);
02337 if (!gHistoFolderStack->Last())
02338 gManaHistosFolder->Add(hist);
02339 else
02340 ((TFolder *)gHistoFolderStack->Last())->Add(hist);
02341 }
02342
02343 return hist;
02344 }
02345
02346 template<typename TH2X>
02347 TH2X EXPRT *h2_book(const char *name, const char *title,
02348 int xbins, double xmin, double xmax,
02349 int ybins, double yedges[])
02350 {
02351 TH2X *hist;
02352
02353
02354 if (!gHistoFolderStack->Last())
02355 hist = (TH2X *) gManaHistosFolder->FindObjectAny(name);
02356 else
02357 hist = (TH2X *) ((TFolder *)gHistoFolderStack->Last())->FindObjectAny(name);
02358
02359 if (hist == NULL) {
02360 hist = new TH2X(name, title, xbins, xmin, xmax, ybins, yedges);
02361 if (!gHistoFolderStack->Last())
02362 gManaHistosFolder->Add(hist);
02363 else
02364 ((TFolder *)gHistoFolderStack->Last())->Add(hist);
02365 }
02366
02367 return hist;
02368 }
02369
02370 template<typename TH2X>
02371 TH2X EXPRT *h2_book(const char *name, const char *title,
02372 int xbins, double xedges[],
02373 int ybins, double ymin, double ymax)
02374 {
02375 TH2X *hist;
02376
02377
02378 if (!gHistoFolderStack->Last())
02379 hist = (TH2X *) gManaHistosFolder->FindObjectAny(name);
02380 else
02381 hist = (TH2X *) ((TFolder *)gHistoFolderStack->Last())->FindObjectAny(name);
02382
02383 if (hist == NULL) {
02384 hist = new TH2X(name, title, xbins, xedges, ybins, ymin, ymax);
02385 if (!gHistoFolderStack->Last())
02386 gManaHistosFolder->Add(hist);
02387 else
02388 ((TFolder *)gHistoFolderStack->Last())->Add(hist);
02389 }
02390
02391 return hist;
02392 }
02393
02394 template<typename TH2X>
02395 TH2X EXPRT *h2_book(const char *name, const char *title,
02396 int xbins, double xedges[],
02397 int ybins, double yedges[])
02398 {
02399 TH2X *hist;
02400
02401
02402 if (!gHistoFolderStack->Last())
02403 hist = (TH2X *) gManaHistosFolder->FindObjectAny(name);
02404 else
02405 hist = (TH2X *) ((TFolder *)gHistoFolderStack->Last())->FindObjectAny(name);
02406
02407 if (hist == NULL) {
02408 hist = new TH2X(name, title, xbins, xedges, ybins, yedges);
02409 if (!gHistoFolderStack->Last())
02410 gManaHistosFolder->Add(hist);
02411 else
02412 ((TFolder *)gHistoFolderStack->Last())->Add(hist);
02413 }
02414
02415 return hist;
02416 }
02417
02418
02419
02420
02421
02422 #define H1_BOOK(n,t,b,min,max) (h1_book<TH1F>(n,t,b,min,max))
02423 #define H2_BOOK(n,t,xb,xmin,xmax,yb,ymin,ymax) (h2_book<TH2F>(n,t,xb,xmin,xmax,yb,ymin,ymax))
02424
02425 TCutG *cut_book( const char *name);
02426 #endif
02427
02428 #endif
02429 #endif
02430
02431 #endif
02432
02433
02434