adcsum.c

Go to the documentation of this file.
00001 /********************************************************************\
00002 
00003   Name:         adcsum.c
00004   Created by:   Stefan Ritt
00005 
00006   Contents:     Example analyzer module for ADC summing. This module
00007                 looks for a bank named CADC and produces an ASUM
00008                 bank which contains the sum of all ADC values. The
00009                 ASUM bank is a "structured" bank. It has been defined
00010                 in the ODB and transferred to experim.h.
00011 
00012   $Log: adcsum.c,v $
00013   Revision 1.12  2004/09/30 23:35:33  midas
00014   Added some simple tests
00015 
00016   Revision 1.11  2004/09/23 19:22:43  midas
00017   Use new histo booking
00018 
00019   Revision 1.10  2004/01/08 08:40:08  midas
00020   Implemented standard indentation
00021 
00022   Revision 1.9  2003/11/14 13:43:10  midas
00023   Fixed type
00024 
00025   Revision 1.8  2003/04/28 15:33:05  midas
00026   Fixed compiler warnings
00027 
00028   Revision 1.7  2003/04/25 14:49:46  midas
00029   Removed HBOOK code
00030 
00031   Revision 1.6  2003/04/23 15:09:29  midas
00032   Added 'average' in ASUM bank
00033 
00034   Revision 1.5  2003/04/22 15:00:27  midas
00035   Worked on ROOT histo booking
00036 
00037   Revision 1.4  2003/04/21 04:02:13  olchansk
00038   replace MANA_LITE with HAVE_HBOOK and HAVE_ROOT
00039   implement ROOT-equivalents of the sample HBOOK code
00040   implement example of adding custom branches to the analyzer root output file
00041 
00042   Revision 1.3  2002/05/10 05:22:59  pierre
00043   add MANA_LITE #ifdef
00044 
00045   Revision 1.2  1998/10/12 12:18:58  midas
00046   Added Log tag in header
00047 
00048 
00049 \********************************************************************/
00050 
00051 /*-- Include files -------------------------------------------------*/
00052 
00053 /* standard includes */
00054 #include <stdio.h>
00055 #include <math.h>
00056 
00057 #define DEFINE_TESTS // must be defined prior to midas.h
00058 
00059 /* midas includes */
00060 #include "midas.h"
00061 #include "experim.h"
00062 #include "analyzer.h"
00063 
00064 /* root includes */
00065 #include <TH1F.h>
00066 
00067 #ifndef PI
00068 #define PI 3.14159265359
00069 #endif
00070 
00071 /*-- Parameters ----------------------------------------------------*/
00072 
00073 ADC_SUMMING_PARAM adc_summing_param;
00074 
00075 /*-- Tests ---------------------------------------------------------*/
00076 
00077 DEF_TEST(low_sum);
00078 DEF_TEST(high_sum);
00079 
00080 /*-- Module declaration --------------------------------------------*/
00081 
00082 INT adc_summing(EVENT_HEADER *, void *);
00083 INT adc_summing_init(void);
00084 INT adc_summing_bor(INT run_number);
00085 
00086 ADC_SUMMING_PARAM_STR(adc_summing_param_str);
00087 
00088 ANA_MODULE adc_summing_module = {
00089    "ADC summing",               /* module name           */
00090    "Stefan Ritt",               /* author                */
00091    adc_summing,                 /* event routine         */
00092    NULL,                        /* BOR routine           */
00093    NULL,                        /* EOR routine           */
00094    adc_summing_init,            /* init routine          */
00095    NULL,                        /* exit routine          */
00096    &adc_summing_param,          /* parameter structure   */
00097    sizeof(adc_summing_param),   /* structure size        */
00098    adc_summing_param_str,       /* initial parameters    */
00099 };
00100 
00101 /*-- Module-local variables-----------------------------------------*/
00102 
00103 static TH1F *hAdcSum, *hAdcAvg;
00104 
00105 /*-- init routine --------------------------------------------------*/
00106 
00107 INT adc_summing_init(void)
00108 {
00109    /* book ADC sum histo */
00110    hAdcSum = H1_BOOK("ADCSUM", "ADC sum", 500, 0, 10000);
00111 
00112    /* book ADC average in separate subfolder */
00113    open_subfolder("Average");
00114    hAdcAvg = H1_BOOK("ADCAVG", "ADC average", 500, 0, 10000);
00115    close_subfolder();
00116 
00117    return SUCCESS;
00118 }
00119 
00120 /*-- event routine -------------------------------------------------*/
00121 
00122 INT adc_summing(EVENT_HEADER * pheader, void *pevent)
00123 {
00124    INT i, j, n_adc;
00125    float *cadc;
00126    ASUM_BANK *asum;
00127 
00128    /* look for CADC bank, return if not present */
00129    n_adc = bk_locate(pevent, "CADC", &cadc);
00130    if (n_adc == 0)
00131       return 1;
00132 
00133    /* create ADC sum bank */
00134    bk_create(pevent, "ASUM", TID_STRUCT, &asum);
00135 
00136    /* sum all channels above threashold */
00137    asum->sum = 0.f;
00138    for (i = j = 0; i < n_adc; i++)
00139       if (cadc[i] > adc_summing_param.adc_threshold) {
00140          asum->sum += cadc[i];
00141          j++;
00142       }
00143 
00144    /* calculate ADC average */
00145    asum->average = j > 0 ? asum->sum / j : 0;
00146 
00147    /* evaluate tests */
00148    SET_TEST(low_sum, asum->sum < 1000);
00149    SET_TEST(high_sum, asum->sum > 1000);
00150 
00151    /* fill sum histo */
00152    hAdcSum->Fill(asum->sum, 1);
00153 
00154    /* fill average histo */
00155    hAdcAvg->Fill(asum->average);
00156 
00157    /* close calculated bank */
00158    bk_close(pevent, asum + 1);
00159 
00160    return SUCCESS;
00161 }

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