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

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 - John M O'Donnell - Konstantin Olchanski - Renee Poutissou - Andreas Suter - Jan M.Wouters - Piotr Adam Zolnierczuk