MIDAS
Loading...
Searching...
No Matches
adccalib_module.cxx
Go to the documentation of this file.
1/********************************************************************\
2
3 Name: adccalib.c
4 Created by: Stefan Ritt
5
6 Contents: Example analyzer module for ADC calibration. Looks
7 for ADC0 bank, subtracts pedestals and applies gain
8 calibration. The resulting values are appended to
9 the event as an CADC bank ("calibrated ADC"). The
10 pedestal values and software gains are stored in
11 adccalib_param structure which was defined in the ODB
12 and transferred to experim.h.
13
14 $Id:$
15
16\********************************************************************/
17
18/*-- Include files -------------------------------------------------*/
19
20/* standard includes */
21#include <stdio.h>
22//#include <time.h>
23
24/* midas includes */
25#include "midas.h"
26//#include "rmidas.h"
27#include "experim.h"
28#include "analyzer.h"
29
30/* root includes */
31#include <TH1D.h>
32//#include <TTree.h>
33
34/*-- Parameters ----------------------------------------------------*/
35
37//extern EXP_PARAM exp_param;
38//extern RUNINFO runinfo;
39
40/*-- Module declaration --------------------------------------------*/
41
42//INT adc_calib(EVENT_HEADER *, void *);
43//INT adc_calib_init(void);
44//INT adc_calib_bor(INT run_number);
45//INT adc_calib_eor(INT run_number);
46
48
49//ANA_MODULE adc_calib_module = {
50// "ADC calibration", /* module name */
51// "Stefan Ritt", /* author */
52// adc_calib, /* event routine */
53// adc_calib_bor, /* BOR routine */
54// adc_calib_eor, /* EOR routine */
55// adc_calib_init, /* init routine */
56// NULL, /* exit routine */
57// &adccalib_param, /* parameter structure */
58// sizeof(adccalib_param), /* structure size */
59// adc_calibration_param_str, /* initial parameters */
60//};
61
62/*-- module-local variables ----------------------------------------*/
63
64/*-- init routine --------------------------------------------------*/
65
66#define ADC_N_BINS 500
67#define ADC_X_LOW 0
68#define ADC_X_HIGH 4000
69
70#if 0
71/*-- event routine -------------------------------------------------*/
72
73INT adc_calib(EVENT_HEADER * pheader, void *pevent)
74{
75 INT i;
76 WORD *pdata;
77 float *cadc;
78
79 /* look for ADC0 bank, return if not present */
80 if (!bk_locate(pevent, "ADC0", &pdata))
81 return 1;
82
83 /* create calibrated ADC bank */
84 bk_create(pevent, "CADC", TID_FLOAT, (void**)&cadc);
85
86 /* zero cadc bank */
87 for (i = 0; i < N_ADC; i++)
88 cadc[i] = 0.f;
89
90 /* subtract pedestal */
91 for (i = 0; i < N_ADC; i++)
92 cadc[i] = (float) ((double) pdata[i] - adccalib_param.pedestal[i] + 0.5);
93
94 /* apply software gain calibration */
95 for (i = 0; i < N_ADC; i++)
97
98 /* fill ADC histos if above threshold */
99 for (i = 0; i < N_ADC; i++)
100 if (cadc[i] > (float) adccalib_param.histo_threshold)
101 hAdcHists[i]->Fill(cadc[i], 1);
102
103 /* close calculated bank */
104 bk_close(pevent, cadc + N_ADC);
105
106 return SUCCESS;
107}
108#endif
109
110//
111// MIDAS analyzer example 2: ROOT analyzer
112//
113// K.Olchanski
114//
115
116#include <stdio.h>
117
118#include "manalyzer.h"
119#include "midasio.h"
120
121#include "TH1D.h"
122
123struct AdcCalib: public TARunObject
124{
126
128 : TARunObject(runinfo)
129 {
130 printf("AdcCalib::ctor!\n");
131
132 runinfo->fRoot->fOutputFile->cd(); // select correct ROOT directory
133
134 char name[256];
135 int i;
136
137 /* book CADC histos */
138
139 for (i = 0; i < N_ADC; i++) {
140 char title[256];
141
142 sprintf(name, "CADC%02d", i);
143 sprintf(title, "ADC %d", i);
144
146 }
147 }
148
150 {
151 printf("AdcCalib::dtor!\n");
152 }
153
155 {
156 printf("BeginRun, run %d, file %s\n", runinfo->fRunNo, runinfo->fFileName.c_str());
157 }
158
160 {
161 printf("EndRun, run %d\n", runinfo->fRunNo);
162 }
163
165 {
166 printf("Analyze, run %d, event serno %d, id 0x%04x, data size %d\n", runinfo->fRunNo, event->serial_number, (int)event->event_id, event->data_size);
167
168 TMBank* badc0 = event->FindBank("ADC0");
169 if (!badc0)
170 return flow;
171
172 WORD* pdata = (WORD*)event->GetBankData(badc0);
173 if (!pdata)
174 return flow;
175
176 float cadc[N_ADC];
177
178 /* zero cadc bank */
179 for (int i = 0; i < N_ADC; i++)
180 cadc[i] = 0.f;
181
182 /* subtract pedestal */
183 for (int i = 0; i < N_ADC; i++)
184 cadc[i] = (float) ((double) pdata[i] - adccalib_param.pedestal[i] + 0.5);
185
186 /* apply software gain calibration */
187 for (int i = 0; i < N_ADC; i++)
189
190 /* fill ADC histos if above threshold */
191 for (int i = 0; i < N_ADC; i++)
192 if (cadc[i] > (float) adccalib_param.histo_threshold)
193 fAdcHists[i]->Fill(cadc[i], 1);
194
195 /* create calibrated ADC bank */
196 event->AddBank("CADC", TID_FLOAT, (char*)cadc, sizeof(cadc));
197
198 return flow;
199 }
200};
201
202class AdcCalibFactory: public TAFactory
203{
204public:
205 void Init(const std::vector<std::string> &args)
206 {
207 printf("Init!\n");
208 }
209
210 void Finish()
211 {
212 printf("Finish!\n");
213 }
214
216 {
217 printf("NewRunObject, run %d, file %s\n", runinfo->fRunNo, runinfo->fFileName.c_str());
218 return new AdcCalib(runinfo);
219 }
220};
221
223
224/* emacs
225 * Local Variables:
226 * tab-width: 8
227 * c-basic-offset: 3
228 * indent-tabs-mode: nil
229 * End:
230 */
static TH1D * hAdcHists[N_ADC]
Definition adccalib.cxx:64
INT adc_calib(EVENT_HEADER *, void *)
Definition adccalib.cxx:107
RUNINFO runinfo
Definition analyzer.cxx:49
#define ADC_N_BINS
static TARegister tar(new AdcCalibFactory)
ADC_CALIBRATION_PARAM adccalib_param
#define ADC_X_LOW
#define ADC_X_HIGH
void Init(const std::vector< std::string > &args)
TARunObject * NewRunObject(TARunInfo *runinfo)
#define N_ADC
Definition deferredfe.c:49
#define ADC_CALIBRATION_PARAM_STR(_name)
Definition experim.h:46
INT bk_close(void *event, void *pdata)
Definition midas.cxx:16780
INT bk_locate(const void *event, const char *name, void *pdata)
Definition midas.cxx:16889
void bk_create(void *event, const char *name, WORD type, void **pdata)
Definition midas.cxx:16561
unsigned short int WORD
Definition mcstd.h:49
#define SUCCESS
Definition mcstd.h:54
#define TID_FLOAT
Definition midas.h:341
INT i
Definition mdump.cxx:32
int INT
Definition midas.h:129
#define name(x)
Definition midas_macro.h:24
TH1X EXPRT * h1_book(const char *name, const char *title, int bins, double min, double max)
Definition rmidas.h:24
float software_gain[8]
Definition experim.h:42
TH1D * fAdcHists[N_ADC]
void EndRun(TARunInfo *runinfo)
void BeginRun(TARunInfo *runinfo)
TAFlowEvent * Analyze(TARunInfo *runinfo, TMEvent *event, TAFlags *flags, TAFlowEvent *flow)
AdcCalib(TARunInfo *runinfo)