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