source: trunk/Mars/fact/processing/numevents.C@ 17876

Last change on this file since 17876 was 17386, checked in by tbretz, 11 years ago
Removed svn:executable property, these are no executables.
File size: 8.8 KB
Line 
1#include <iostream>
2
3#include <TCanvas.h>
4#include <TString.h>
5#include <TTree.h>
6#include <TFile.h>
7#include <TSystem.h>
8#include <TSQLResult.h>
9#include <TSQLRow.h>
10
11#include "MSQLMagic.h"
12#include "MAlphaFitter.h"
13#include "MHThetaSq.h"
14#include "MStatusArray.h"
15
16
17using namespace std;
18
19//missing:
20// remove sourcekey in paths
21// create tables in DB
22
23int numevents(TString night="20130418", TString inpath="/daq/analysis/1/", TString table= "AnalysisResultsRunLP", Bool_t dummy=kTRUE, Bool_t pernight=kFALSE, Int_t source=0)
24{
25
26 //connect to mysql server
27 //MSQLServer serv("sql.rc");
28 MSQLMagic serv("sql.rc");
29 if (!serv.IsConnected())
30 {
31 cout << "ERROR - Connection to database failed." << endl;
32 return 0;
33 }
34 serv.SetIsDummy(dummy);
35
36 //select runs, where star finished, format the list nicely
37 TString query;
38 query = " SELECT CONCAT(fNight, '_', LPAD(fRunID, 3, 0)), SUBSTRING(fNight, 1,4), SUBSTRING(fNight, 5,2), SUBSTRING(fNight, 7,2), ";
39 query += " fNight, fRunID FROM RunInfo";
40
41 //and only data runs
42 query+=" WHERE fRunTypeKEY=1 ";
43 query+=" AND fNight="+night;
44 //query+=" AND fRunID=128 ";
45 if (pernight)
46 query+=" GROUP BY fNight";
47
48 cout << "Q: " << query << endl;
49
50 //post the query
51 TSQLResult *res = serv.Query(query);
52 if (!res)
53 {
54 cout << "ERROR - no result from query " << query << endl;
55 return 2;
56 }
57
58 //allocate variables to use in the loop
59 TString night2;
60 TString runid;
61 TString run;
62 TString year;
63 TString month;
64 TString day;
65 TString ganymed_fname;
66 TString star_fname;
67 TString where;
68 TString vars;
69
70 //the variables to save into the db
71 Int_t fNumEvtsAfterCleaning = 0;
72 Int_t fNumEvtsAfterQualCuts = 0;
73 Int_t fNumEvtsAfterBgCuts = 0;
74 Float_t fNumBgEvts = 0;
75 Float_t fNumSigEvts = 0;
76 Float_t fNumExcEvts = 0;
77 Float_t fNumIslandsMean = 0;
78 Float_t fOnTimeAfterCuts = 0;
79
80 //loop over the data files
81 TSQLRow *row=0;
82
83 /*
84 //cout the data names
85 cout<<"#evts_after_cleaning" << " "
86 <<"evts_after_qual-cuts" << " "
87 <<"evts_after_bg-cuts" << " "
88 <<"mean_evts_from_off_regions"<< " "
89 <<"evts_from_on_region" << " "
90 <<"calculated_excess_evts_in_file" << " " << endl;
91 */
92
93 while ((row=res->Next()))
94 {
95 //use the results from the query
96 night2=(*row)[4];
97 runid=(*row)[5];
98 run=(*row)[0];
99 year=(*row)[1];
100 month=(*row)[2];
101 day=(*row)[3];
102
103 // to be fixed: path for nightly ganymeds
104 if (!pernight)
105 ganymed_fname=inpath+"/ganymed_run/"+year+"/"+month+"/"+day+"/"+run+"-analysis.root";
106 else
107 if (!source)
108 cout << "ERROR - source " << source << " not valid. " << endl;
109 else
110 ganymed_fname=Form("%s/ganymed_night/%d/%s-analysis.root", inpath.Data(), source, night2.Data());
111 cout << "gf => " << ganymed_fname << endl;
112
113 if (!pernight)
114 {
115 star_fname=inpath+"/star/"+year+"/"+month+"/"+day+"/"+run+"_I.root";
116 cout << "sf => " << star_fname << endl;
117
118 //check star file status
119 if (gSystem->AccessPathName(star_fname))
120 {
121 cout << "ERROR - file " << star_fname << " does not exist." << endl;
122 continue;
123 }
124
125 //try to open the star file
126 TFile star_file(star_fname, "READ");
127 if (!star_file.IsOpen())
128 {
129 cout << "ERROR - Could not open file " << star_fname << endl;
130 continue;
131 }
132
133 //Get the events tree
134 TTree *star_tree = (TTree *)star_file.Get("Events");
135 if (!star_tree)
136 {
137 cout << "ERROR - Could not read tree " << star_fname << endl;
138 continue;
139 }
140
141 //the number of events after cleaning
142 fNumEvtsAfterCleaning = star_tree->GetEntries();
143
144 //get the mean number of islands in the _I.root file on runbasis
145 star_tree->Draw("MImagePar.fNumIslands>>IslandHisto","","");
146 TH1F *HistJo = (TH1F*)gDirectory->Get("IslandHisto");
147 if (!HistJo)
148 {
149 cout << "ERROR - Reading of IslandHisto failed " << HistJo << endl;
150 continue;
151 }
152 fNumIslandsMean = HistJo->GetMean();
153 }
154
155 //check ganymed file status
156 if (gSystem->AccessPathName(ganymed_fname))
157 {
158 cout << "ERROR - file " << ganymed_fname << " does not exist." << endl;
159 continue;
160 }
161
162 //try to open the ganymed file
163 TFile ganymed_file(ganymed_fname, "READ");
164 if (!ganymed_file.IsOpen())
165 {
166 cout << "ERROR - Could not open file " << ganymed_fname << endl;
167 continue;
168 }
169
170 //Get the status display contents
171 MStatusArray arr;
172 if (arr.Read()<=0)
173 {
174 cout << "ERROR - could not read MStatusArray, file " << ganymed_fname << endl;
175 continue;
176 }
177
178 TH1D *vstime = (TH1D*)arr.FindObjectInCanvas("OnTime", "TH1D", "OnTime");
179 if (!vstime)
180 {
181 cout << "WARNING - Reading of Theta failed." << endl;
182 continue;
183 }
184 fOnTimeAfterCuts = vstime->Integral();
185
186 //Get number of events after quality cuts
187 //from the number of entries in a histogram
188 TH1F *precut =
189 (TH1F*)arr.FindCanvas("PreCut")->FindObject("SizeSame");
190 if (!precut)
191 {
192 cout << "WARNING - Reading of PreCut canvas failed." << endl;
193 continue;
194 }
195 fNumEvtsAfterQualCuts = precut->GetEntries();
196
197 //Get number of events after background rejection cuts
198 //from the number of entries in a histogram
199 TH1F *postcut =
200 (TH1F*)arr.FindCanvas("PostCut")->FindObject("SizeSame");
201 if (!postcut)
202 {
203 cout << "WARNING - Reading of PostCut canvas failed." << endl;
204 continue;
205 }
206 fNumEvtsAfterBgCuts = postcut->GetEntries();
207
208 //Get signal, bg and excess events
209 MHThetaSq *halphaon = (MHThetaSq*)arr.FindObjectInCanvas("MHThetaSq", "Hist");
210 if (!halphaon)
211 {
212 cout << "WARNING - Reading of MHThetaSq failed, file " << ganymed_fname << endl;
213 continue;
214 }
215 const MAlphaFitter &fit = halphaon->GetAlphaFitter();
216 if (!&fit)
217 {
218 cout << "WARNING - Reading of MAlphaFitter failed, file " << ganymed_fname << endl;
219 continue;
220 }
221
222 //check if the excess events number is small and close to 0
223 //due to the computer precision error when subtracting sig and bg events
224 fNumBgEvts = fit.GetEventsBackground();
225 fNumSigEvts = fit.GetEventsSignal();
226 fNumExcEvts = fit.GetEventsExcess();
227 fNumExcEvts = fabs(fNumExcEvts)<1e-5 ? 0 : fNumExcEvts;
228
229 /*
230 cout<< fNumEvtsAfterCleaning<< " "
231 << fNumEvtsAfterQualCuts<< " "
232 << fNumEvtsAfterBgCuts << " "
233 << fNumBgEvts << " "
234 << fNumSigEvts << " "
235 << fNumExcEvts << endl;
236 */
237
238 //inserting or updating the information in the database
239 if (!pernight)
240 vars = Form("fRunID=%s, fNight=%s,", runid.Data(), night2.Data());
241 else
242 vars = Form("fNight=%s, fSourceKey=%d, ", night2.Data(), source);
243 vars += Form(" fNumEvtsAfterQualCuts=%d, "
244 " fNumEvtsAfterBgCuts=%d, "
245 " fNumBgEvts=%6.1f, "
246 " fNumSigEvts=%6.1f, "
247 " fNumExcEvts=%6.1f, "
248 " fOnTimeAfterCuts=%7.2f ",
249 fNumEvtsAfterQualCuts,
250 fNumEvtsAfterBgCuts,
251 fNumBgEvts,
252 fNumSigEvts,
253 fNumExcEvts,
254 fOnTimeAfterCuts
255 );
256 if (!pernight)
257 vars += Form(", fNumIslandsMean=%6.2f, fNumEvtsAfterCleaning=%d ",
258 fNumIslandsMean,
259 fNumEvtsAfterCleaning
260 );
261
262
263 if (pernight)
264 where = Form("fNight=%s AND fSourceKey=%d", night2.Data(), source);
265 else
266 where = Form("fRunID=%s AND fNight=%s", runid.Data(), night2.Data());
267
268 cout << "vars: " << vars << endl;
269 cout << "where: " << where << endl;
270
271 if (!serv.InsertUpdate(table, vars, where))
272 {
273 cout << "ERROR - insert/update to DB failed (vars:" << vars << " where: " << where << ")." << endl;
274 return 2;
275 }
276
277 }
278
279
280 return 1;
281}
Note: See TracBrowser for help on using the repository browser.