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