analyzer.c

Go to the documentation of this file.
00001 /********************************************************************\
00002 
00003   Name:         analyzer.c
00004   Created by:   Stefan Ritt
00005 
00006   Contents:     System part of Analyzer code for sample experiment
00007 
00008   $Log: analyzer.c,v $
00009   Revision 1.16  2004/01/08 08:40:08  midas
00010   Implemented standard indentation
00011 
00012   Revision 1.15  2003/04/28 15:33:05  midas
00013   Fixed compiler warnings
00014 
00015   Revision 1.14  2003/04/25 14:49:46  midas
00016   Removed HBOOK code
00017 
00018   Revision 1.13  2003/04/21 04:00:15  olchansk
00019   replace MANA_LITE with HAVE_HBOOK
00020 
00021   Revision 1.12  2003/04/14 13:30:52  midas
00022   Changed bank descriptions because of conflict in fal.c
00023 
00024   Revision 1.11  2003/04/07 23:54:43  olchansk
00025   add #include <string.h>
00026 
00027   Revision 1.10  2002/05/10 05:22:34  pierre
00028   add MANA_LITE #ifdef
00029 
00030   Revision 1.9  2002/05/09 02:50:28  midas
00031   Removed initialization of 'Edit on start' by analyzer
00032 
00033   Revision 1.8  2002/05/08 19:54:40  midas
00034   Added extra parameter to function db_get_value()
00035 
00036   Revision 1.7  2000/11/20 12:29:37  midas
00037   Added use_tests flag in analyzer request
00038 
00039   Revision 1.6  2000/09/12 12:36:15  midas
00040   Removed test messages
00041 
00042   Revision 1.5  2000/08/11 11:43:50  midas
00043   Added cm_msg1 to produce messages which go to a differnt logging file
00044 
00045   Revision 1.4  2000/03/02 22:00:18  midas
00046   Changed events sent to double
00047 
00048   Revision 1.3  1998/10/29 14:18:19  midas
00049   Used hDB consistently
00050 
00051   Revision 1.2  1998/10/12 12:18:58  midas
00052   Added Log tag in header
00053 
00054 
00055 \********************************************************************/
00056 
00057 /* standard includes */
00058 #include <stdio.h>
00059 #include <string.h>
00060 #include <time.h>
00061 
00062 /* midas includes */
00063 #include "midas.h"
00064 #include "experim.h"
00065 #include "analyzer.h"
00066 
00067 /* cernlib includes */
00068 #ifdef OS_WINNT
00069 #define VISUAL_CPLUSPLUS
00070 #endif
00071 #ifdef __linux__
00072 #define f2cFortran
00073 #endif
00074 
00075 #ifdef HAVE_HBOOK
00076 #include <cfortran.h>
00077 #include <hbook.h>
00078 
00079 PAWC_DEFINE(1000000);
00080 #endif                          /* HAVE_HBOOK */
00081 
00082 /*-- Globals -------------------------------------------------------*/
00083 
00084 /* The analyzer name (client name) as seen by other MIDAS clients   */
00085 char *analyzer_name = "Analyzer";
00086 
00087 /* analyzer_loop is called with this interval in ms (0 to disable)  */
00088 INT analyzer_loop_period = 0;
00089 
00090 /* default ODB size */
00091 INT odb_size = DEFAULT_ODB_SIZE;
00092 
00093 /* ODB structures */
00094 RUNINFO runinfo;
00095 GLOBAL_PARAM global_param;
00096 EXP_PARAM exp_param;
00097 TRIGGER_SETTINGS trigger_settings;
00098 
00099 /*-- Module declarations -------------------------------------------*/
00100 
00101 extern ANA_MODULE scaler_accum_module;
00102 extern ANA_MODULE adc_calib_module;
00103 extern ANA_MODULE adc_summing_module;
00104 
00105 ANA_MODULE *scaler_module[] = {
00106    &scaler_accum_module,
00107    NULL
00108 };
00109 
00110 ANA_MODULE *trigger_module[] = {
00111    &adc_calib_module,
00112    &adc_summing_module,
00113    NULL
00114 };
00115 
00116 /*-- Bank definitions ----------------------------------------------*/
00117 
00118 ASUM_BANK_STR(asum_bank_str);
00119 
00120 ADC0_BANK_STR(ana_adc0_bank_str);
00121 
00122 BANK_LIST ana_trigger_bank_list[] = {
00123 
00124    /* online banks */
00125    {"ADC0", TID_STRUCT, sizeof(ADC0_BANK), ana_adc0_bank_str}
00126    ,
00127    {"TDC0", TID_WORD, N_TDC, NULL}
00128    ,
00129 
00130    /* calculated banks */
00131    {"CADC", TID_FLOAT, N_ADC, NULL}
00132    ,
00133    {"ASUM", TID_STRUCT, sizeof(ASUM_BANK), asum_bank_str}
00134    ,
00135 
00136    {""}
00137    ,
00138 };
00139 
00140 BANK_LIST ana_scaler_bank_list[] = {
00141    /* online banks */
00142    {"SCLR", TID_DWORD, N_ADC, NULL}
00143    ,
00144 
00145    /* calculated banks */
00146    {"ACUM", TID_DOUBLE, N_ADC, NULL}
00147    ,
00148    {""}
00149    ,
00150 };
00151 
00152 /*-- Event request list --------------------------------------------*/
00153 
00154 ANALYZE_REQUEST analyze_request[] = {
00155    {"Trigger",                  /* equipment name */
00156     {1,                         /* event ID */
00157      TRIGGER_ALL,               /* trigger mask */
00158      GET_SOME,                  /* get some events */
00159      "SYSTEM",                  /* event buffer */
00160      TRUE,                      /* enabled */
00161      "", "",}
00162     ,
00163     NULL,                       /* analyzer routine */
00164     trigger_module,             /* module list */
00165     ana_trigger_bank_list,      /* bank list */
00166     1000,                       /* RWNT buffer size */
00167     TRUE,                       /* Use tests for this event */
00168     }
00169    ,
00170 
00171    {"Scaler",                   /* equipment name */
00172     {2,                         /* event ID */
00173      TRIGGER_ALL,               /* trigger mask */
00174      GET_ALL,                   /* get all events */
00175      "SYSTEM",                  /* event buffer */
00176      TRUE,                      /* enabled */
00177      "", "",}
00178     ,
00179     NULL,                       /* analyzer routine */
00180     scaler_module,              /* module list */
00181     ana_scaler_bank_list,       /* bank list */
00182     100,                        /* RWNT buffer size */
00183     }
00184    ,
00185 
00186    {""}
00187    ,
00188 };
00189 
00190 /*-- Analyzer Init -------------------------------------------------*/
00191 
00192 INT analyzer_init()
00193 {
00194    HNDLE hDB, hKey;
00195    char str[80];
00196 
00197    RUNINFO_STR(runinfo_str);
00198    EXP_PARAM_STR(exp_param_str);
00199    GLOBAL_PARAM_STR(global_param_str);
00200    TRIGGER_SETTINGS_STR(trigger_settings_str);
00201 
00202    /* open ODB structures */
00203    cm_get_experiment_database(&hDB, NULL);
00204    db_create_record(hDB, 0, "/Runinfo", strcomb(runinfo_str));
00205    db_find_key(hDB, 0, "/Runinfo", &hKey);
00206    if (db_open_record(hDB, hKey, &runinfo, sizeof(runinfo), MODE_READ, NULL, NULL) !=
00207        DB_SUCCESS) {
00208       cm_msg(MERROR, "analyzer_init", "Cannot open \"/Runinfo\" tree in ODB");
00209       return 0;
00210    }
00211 
00212    db_create_record(hDB, 0, "/Experiment/Run Parameters", strcomb(exp_param_str));
00213    db_find_key(hDB, 0, "/Experiment/Run Parameters", &hKey);
00214    if (db_open_record(hDB, hKey, &exp_param, sizeof(exp_param), MODE_READ, NULL, NULL) !=
00215        DB_SUCCESS) {
00216       cm_msg(MERROR, "analyzer_init",
00217              "Cannot open \"/Experiment/Run Parameters\" tree in ODB");
00218       return 0;
00219    }
00220 
00221    sprintf(str, "/%s/Parameters/Global", analyzer_name);
00222    db_create_record(hDB, 0, str, strcomb(global_param_str));
00223    db_find_key(hDB, 0, str, &hKey);
00224    if (db_open_record
00225        (hDB, hKey, &global_param, sizeof(global_param), MODE_READ, NULL,
00226         NULL) != DB_SUCCESS) {
00227       cm_msg(MERROR, "analyzer_init", "Cannot open \"%s\" tree in ODB", str);
00228       return 0;
00229    }
00230 
00231    db_create_record(hDB, 0, "/Equipment/Trigger/Settings", strcomb(trigger_settings_str));
00232    db_find_key(hDB, 0, "/Equipment/Trigger/Settings", &hKey);
00233 
00234    if (db_open_record
00235        (hDB, hKey, &trigger_settings, sizeof(trigger_settings), MODE_READ, NULL,
00236         NULL) != DB_SUCCESS) {
00237       cm_msg(MERROR, "analyzer_init",
00238              "Cannot open \"/Equipment/Trigger/Settings\" tree in ODB");
00239       return 0;
00240    }
00241 
00242    return SUCCESS;
00243 }
00244 
00245 /*-- Analyzer Exit -------------------------------------------------*/
00246 
00247 INT analyzer_exit()
00248 {
00249    return CM_SUCCESS;
00250 }
00251 
00252 /*-- Begin of Run --------------------------------------------------*/
00253 
00254 INT ana_begin_of_run(INT run_number, char *error)
00255 {
00256    return CM_SUCCESS;
00257 }
00258 
00259 /*-- End of Run ----------------------------------------------------*/
00260 
00261 INT ana_end_of_run(INT run_number, char *error)
00262 {
00263    FILE *f;
00264    time_t now;
00265    char str[256];
00266    int size;
00267    double n;
00268    HNDLE hDB;
00269    BOOL flag;
00270 
00271    cm_get_experiment_database(&hDB, NULL);
00272 
00273    /* update run log if run was written and running online */
00274 
00275    size = sizeof(flag);
00276    db_get_value(hDB, 0, "/Logger/Write data", &flag, &size, TID_BOOL, TRUE);
00277    if (flag && runinfo.online_mode == 1) {
00278       /* update run log */
00279       size = sizeof(str);
00280       str[0] = 0;
00281       db_get_value(hDB, 0, "/Logger/Data Dir", str, &size, TID_STRING, TRUE);
00282       if (str[0] != 0)
00283          if (str[strlen(str) - 1] != DIR_SEPARATOR)
00284             strcat(str, DIR_SEPARATOR_STR);
00285       strcat(str, "runlog.txt");
00286 
00287       f = fopen(str, "a");
00288 
00289       time(&now);
00290       strcpy(str, ctime(&now));
00291       str[10] = 0;
00292 
00293       fprintf(f, "%s\t%3d\t", str, runinfo.run_number);
00294 
00295       strcpy(str, runinfo.start_time);
00296       str[19] = 0;
00297       fprintf(f, "%s\t", str + 11);
00298 
00299       strcpy(str, ctime(&now));
00300       str[19] = 0;
00301       fprintf(f, "%s\t", str + 11);
00302 
00303       size = sizeof(n);
00304       db_get_value(hDB, 0, "/Equipment/Trigger/Statistics/Events sent", &n, &size,
00305                    TID_DOUBLE, TRUE);
00306 
00307       fprintf(f, "%5.1lfk\t", n / 1000);
00308       fprintf(f, "%s\n", exp_param.comment);
00309 
00310       fclose(f);
00311    }
00312 
00313    return CM_SUCCESS;
00314 }
00315 
00316 /*-- Pause Run -----------------------------------------------------*/
00317 
00318 INT ana_pause_run(INT run_number, char *error)
00319 {
00320    return CM_SUCCESS;
00321 }
00322 
00323 /*-- Resume Run ----------------------------------------------------*/
00324 
00325 INT ana_resume_run(INT run_number, char *error)
00326 {
00327    return CM_SUCCESS;
00328 }
00329 
00330 /*-- Analyzer Loop -------------------------------------------------*/
00331 
00332 INT analyzer_loop()
00333 {
00334    return CM_SUCCESS;
00335 }
00336 
00337 /*------------------------------------------------------------------*/

Midas DOC Version 1.9.3 ---- PSI Stefan Ritt ----
Contributions: Pierre-Andre Amaudruz - Suzannah Daviel - Doxygen - Peter Green - Greg Hackman - Gertjan Hofman - Paul Knowles - Rudi Meier - Glenn Moloney - Dave Morris - Konstantin Olchanski - Renee Poutissou - Andreas Suter - Piotr Adam Zolnierczuk