1 |
// |
2 |
// C/C++ headers |
3 |
// |
4 |
#include <fstream> |
5 |
#include <string.h> |
6 |
// |
7 |
// ROOT headers |
8 |
// |
9 |
#include <TTree.h> |
10 |
#include <TClassEdit.h> |
11 |
#include <TObject.h> |
12 |
#include <TList.h> |
13 |
#include <TArrayL.h> |
14 |
#include <TSystem.h> |
15 |
#include <TSystemDirectory.h> |
16 |
#include <TString.h> |
17 |
#include <TFile.h> |
18 |
#include <TClass.h> |
19 |
#include <TCanvas.h> |
20 |
#include <TH1.h> |
21 |
#include <TH1F.h> |
22 |
#include <TH2D.h> |
23 |
#include <TLatex.h> |
24 |
#include <TPad.h> |
25 |
#include <TSQLServer.h> |
26 |
#include <TSQLRow.h> |
27 |
#include <TSQLResult.h> |
28 |
#include <TClonesArray.h> |
29 |
// |
30 |
// YODA headers |
31 |
// |
32 |
#include <PamelaRun.h> |
33 |
#include <RegistryEvent.h> |
34 |
#include <physics/trigger/TriggerEvent.h> |
35 |
|
36 |
// ####################################################################################################################### |
37 |
// |
38 |
// Calorimeter class CaloProcessing. Do not include CaloLevel2 (it doesn't compile I don't understand why...) |
39 |
// |
40 |
#include <CaloProcessing.h> |
41 |
// ####################################################################################################################### |
42 |
|
43 |
|
44 |
|
45 |
int main(){ |
46 |
// |
47 |
// definizione di variabili |
48 |
// |
49 |
TFile *l0File = 0; |
50 |
TTree *l0tr = 0; |
51 |
TBranch *l0registry = 0; |
52 |
TBranch *l0calo = 0; |
53 |
ULong64_t atime = 0ULL; |
54 |
UInt_t ei = 0; |
55 |
UInt_t re = 0; |
56 |
Int_t sgnl = 0; |
57 |
pamela::RegistryEvent *l0reg=0; |
58 |
TSQLServer *dbc = 0; |
59 |
dbc = TSQLServer::Connect("mysql://localhost/pamelaprod","anonymous",""); |
60 |
|
61 |
// |
62 |
// e` importante che CaloProcessing chiami QUI prima di loopare sui run il suo costruttore! |
63 |
// |
64 |
// ####################################################################################################################### |
65 |
CaloProcessing *event = new CaloProcessing(); |
66 |
CaloLevel2 *ca = 0; |
67 |
// ####################################################################################################################### |
68 |
// |
69 |
|
70 |
// |
71 |
// LOOP ON THE RUNS at some time... |
72 |
// |
73 |
|
74 |
// |
75 |
// now we assume to process run 24 (my run 24 not the one on gundam if any) with |
76 |
// |
77 |
ULong64_t runheadtime = 132796435910ULL; |
78 |
UInt_t evfrom = 179; |
79 |
UInt_t evto = 200; |
80 |
// UInt_t evto = 1354; |
81 |
|
82 |
// |
83 |
// Open Level0 file and branches |
84 |
// |
85 |
l0File = new TFile("/wizard3/pamela/samara/filesfromyoda//dw_050318_00100.root"); |
86 |
if ( !l0File ) { |
87 |
printf(" CALORIMETER - ERROR: problems opening Level0 file\n"); |
88 |
return(0); |
89 |
}; |
90 |
l0tr = (TTree*)l0File->Get("Physics"); |
91 |
if ( !l0tr ) { |
92 |
printf(" CALORIMETER - ERROR: no Physics tree in Level0 file\n"); |
93 |
l0File->Close(); |
94 |
return(0); |
95 |
}; |
96 |
l0registry = l0tr->GetBranch("Registry"); |
97 |
if ( !l0registry ) { |
98 |
printf(" CALORIMETER - ERROR: no Registry branch in Level0 tree\n"); |
99 |
l0File->Close(); |
100 |
return(0); |
101 |
}; |
102 |
// |
103 |
l0calo = l0tr->GetBranch("Calorimeter"); |
104 |
if ( !l0calo ) { |
105 |
printf(" CALORIMETER - ERROR: no Calorimeter branch in Level0 tree\n"); |
106 |
l0File->Close(); |
107 |
return(0); |
108 |
}; |
109 |
// |
110 |
l0tr->SetBranchAddress("Registry", &l0reg); |
111 |
|
112 |
|
113 |
|
114 |
|
115 |
// ####################################################################################################################### |
116 |
// |
117 |
// Initialize the calorimeter event object, look for the calibration which include the first header |
118 |
// |
119 |
printf(" Check for calorimeter calibrations and initialize event object \n"); |
120 |
event->ProcessingInit(dbc,runheadtime,sgnl,l0tr); |
121 |
printf("\n"); |
122 |
// |
123 |
// Check if we have to load parameter files (one time for every run) |
124 |
// |
125 |
event->ChkParam(dbc,runheadtime); // calorimeter parameter files |
126 |
// |
127 |
// ####################################################################################################################### |
128 |
|
129 |
|
130 |
|
131 |
|
132 |
// |
133 |
// run over all the events of the run |
134 |
// |
135 |
printf("\n Ready to start! \n\n"); |
136 |
// |
137 |
for ( re = evfrom; re <= evto; re++){ |
138 |
// |
139 |
l0registry->GetEntry(re); |
140 |
// |
141 |
// absolute time of this event |
142 |
// |
143 |
atime = l0reg->absTime; |
144 |
// |
145 |
// physics events is at entry number ei where |
146 |
// |
147 |
ei = l0reg->event; |
148 |
// |
149 |
|
150 |
|
151 |
|
152 |
// ####################################################################################################################### |
153 |
// |
154 |
// create (or clear if existing) a calorimeter level2 object |
155 |
// |
156 |
ca = new CaloLevel2(); |
157 |
// |
158 |
// check if the calibration we are using is still good, if not load another calibration |
159 |
// |
160 |
event->ChkCalib(dbc,atime); |
161 |
// |
162 |
// set this variable to one to be sure to process the event (usually I do not process the event if I don't have a track or a selftrigger event) |
163 |
//. =====> Notice: the event will NOT be processed if any CRC error in the calorimeter data has occured!! <===== |
164 |
// |
165 |
event->clevel1->good2 = 1; |
166 |
// |
167 |
// Calibrate calorimeter event with registry number "ei" and store output in the two structures that will be passed to fortran routine |
168 |
// |
169 |
event->Calibrate(ei); |
170 |
// |
171 |
// Calculate variables common to all tracks (qtot, nstrip, calorimeter fit parameters etc.) |
172 |
// |
173 |
event->GetCommonVar(); |
174 |
// |
175 |
// Fill common variables |
176 |
// |
177 |
event->FillCommonVar(ca); |
178 |
// |
179 |
// Clear structures used to communicate with fortran |
180 |
// |
181 |
event->ClearStructs(); |
182 |
// |
183 |
// ####################################################################################################################### |
184 |
// |
185 |
|
186 |
|
187 |
// |
188 |
// use the output to do something |
189 |
// |
190 |
printf(" ### Calorimeter tracking output: ### \n"); |
191 |
printf(" => event %i reg entry %i <= \n",re,ei); |
192 |
printf(" ax = %f \n",ca->impx); |
193 |
printf(" tanx = %f \n",ca->tanx); |
194 |
printf(" ay = %f \n",ca->impy); |
195 |
printf(" tany = %f \n",ca->tany); |
196 |
printf(" N. point fit x = %i \n",ca->npcfit[0]); |
197 |
printf(" N. point fit y = %i \n",ca->npcfit[1]); |
198 |
printf(" Variance fit x = %f \n",ca->varcfit[0]); |
199 |
printf(" Variance fit y = %f \n",ca->varcfit[1]); |
200 |
printf(" Energy assuming interacting electron [GeV]= %f \n",ca->elen); |
201 |
printf(" Error on energy [GeV]= %f \n",ca->selen); |
202 |
printf(" #################################### \n"); |
203 |
// |
204 |
}; |
205 |
|
206 |
|
207 |
|
208 |
// ####################################################################################################################### |
209 |
// |
210 |
// this is needed before processing another run! |
211 |
// |
212 |
event->RunClose(); |
213 |
// |
214 |
// ####################################################################################################################### |
215 |
|
216 |
|
217 |
|
218 |
// |
219 |
// end of the loop over the runs |
220 |
// |
221 |
|
222 |
} |