/[PAMELA software]/DarthVader/RunInfo/src/RunInfo.cpp
ViewVC logotype

Contents of /DarthVader/RunInfo/src/RunInfo.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.7 - (show annotations) (download)
Fri Aug 4 10:31:30 2006 UTC (18 years, 4 months ago) by mocchiut
Branch: MAIN
Changes since 1.6: +22 -8 lines
Small memory leaks fixed

1 //
2 #include <sstream>
3 //
4 #include <TObject.h>
5 #include <TSystem.h>
6 #include <TArrayL.h>
7 #include <TFile.h>
8 #include <TTree.h>
9 #include <TDirectory.h>
10 #include <TSQLServer.h>
11 #include <TSQLRow.h>
12 #include <TSQLResult.h>
13 //
14 #include <GLTables.h>
15 #include <RunInfo.h>
16 ClassImp(SoftInfo);
17 ClassImp(ItoRunInfo);
18 //
19 using namespace std;
20 //
21
22 SoftInfo::SoftInfo() {
23 TRIG_ver = "";
24 TOF_ver = "";
25 AC_ver = "";
26 TRK_ver = "";
27 ORB_ver = "";
28 CAL_ver = "";
29 ND_ver = "";
30 S4_ver = "";
31 }
32
33 /**
34 * Fills a struct cSoftInfo with values from a SoftInfo object (to put data into a F77 common).
35 */
36 void SoftInfo::GetLevel2Struct(cSoftInfo *l2) const{
37 l2->FillTrigWith(TRIG_ver);
38 l2->FillTofWith(TOF_ver);
39 l2->FillAcWith(AC_ver);
40 l2->FillTrkWith(TRK_ver);
41 l2->FillOrbWith(ORB_ver);
42 l2->FillCalWith(CAL_ver);
43 l2->FillNdWith(ND_ver);
44 l2->FillS4With(S4_ver);
45 }
46 /***********************/
47
48 ItoRunInfo::ItoRunInfo() {
49 reprocessing = false;
50 updating = false;
51 isreadonly = true;
52 first_file_entry = 0;
53 last_file_entry = 0;
54 file_entries = 0ULL;
55 totnorun = 0LL;
56 version = new SoftInfo();
57 version->TRIG_ver = "";
58 version->TOF_ver = "";
59 version->AC_ver = "";
60 version->TRK_ver = "";
61 version->CAL_ver = "";
62 version->ND_ver = "";
63 version->S4_ver = "";
64 version->ORB_ver = "";
65 norun = 0;
66 // runlist = new TArrayL(0,NULL);
67 runlist = new TArrayL(500);
68 // file = new TFile();
69 file = NULL;//new TFile();
70 newtree = new TTree();
71 }
72
73 ItoRunInfo::ItoRunInfo(TFile *processFl){
74 //
75 file=(TFile*)processFl;
76 dbc=NULL;
77 processFolder = "";
78 idRun = 0ULL;
79 Detector = "NONE";
80 //
81 reprocessing = false;
82 updating = false;
83 first_file_entry = 0;
84 last_file_entry = 0;
85 file_entries = 0ULL;
86 version = new SoftInfo();
87 version->TRIG_ver = "";
88 version->TOF_ver = "";
89 version->AC_ver = "";
90 version->TRK_ver = "";
91 version->ORB_ver = "";
92 version->CAL_ver = "";
93 version->ND_ver = "";
94 version->S4_ver = "";
95 norun = 0;
96 totnorun = 0;
97 runlist = new TArrayL(500);
98 // runlist = new TArrayL(0,NULL);
99 //
100 }
101
102 ItoRunInfo::ItoRunInfo(TSQLServer *db, TFile *processFl, TString processFld){
103 //
104 file=(TFile*)processFl;
105 dbc=(TSQLServer*)db;
106 processFolder = processFld;
107 //
108 reprocessing = false;
109 updating = false;
110 first_file_entry = 0;
111 last_file_entry = 0;
112 file_entries = 0ULL;
113 version = new SoftInfo();
114 version->TRIG_ver = "";
115 version->TOF_ver = "";
116 version->AC_ver = "";
117 version->TRK_ver = "";
118 version->ORB_ver = "";
119 version->CAL_ver = "";
120 version->ND_ver = "";
121 version->S4_ver = "";
122 norun = 0;
123 totnorun = 0;
124 // runlist = new TArrayL(0,NULL);
125 runlist = new TArrayL(500);
126 //
127 }
128
129 Int_t ItoRunInfo::Update(ULong64_t run, TString Detector, TString Version){
130 //
131 isreadonly = false;
132 idRun = run;
133 //
134 Bool_t debug = false;
135 //
136 Bool_t ismydir = false;
137 //
138 if ( !strcmp(processFolder.Data(),"") ){
139 processFolder = "runinfoFolder";
140 ismydir = true;
141 };
142 //
143 GL_RUN *oldrun = new GL_RUN();
144 GL_RUN *newrun = new GL_RUN();
145 SoftInfo *oldver = new SoftInfo();
146 SoftInfo *newver = new SoftInfo();
147 //
148 ID = 0ULL;
149 ID_REG_RUN = 0ULL;
150 ID_REG_RUN_L2 = 0ULL;
151 RUNHEADER_TIME = 0ULL;
152 RUNTRAILER_TIME = 0ULL;
153 EV_REG_PHYS_FROM = 0;
154 EV_REG_PHYS_TO = 0;
155 EV_REG_RUNHEADER = 0;
156 EV_REG_RUNTRAILER = 0;
157 TRK_CALIB_USED = 0;
158 EFF_WRK_SCHEDULE = 0;
159 PRH_VAR_TRG_MODE_A = 0;
160 PRH_VAR_TRG_MODE_B = 0;
161 ACQ_BUILD_INFO = 0;
162 ACQ_VAR_INFO = 0;
163 version->TRIG_ver = "";
164 version->TOF_ver = "";
165 version->AC_ver = "";
166 version->TRK_ver = "";
167 version->ORB_ver = "";
168 version->CAL_ver = "";
169 version->ND_ver = "";
170 version->S4_ver = "";
171 //
172 norun = 0;
173 // runlist = new TArrayL(0,NULL);
174 //runlist->Reset();
175 //
176 Bool_t found = false;
177 Int_t error = 0;
178 //
179 // TFile *temprfile = 0;
180 // TTree *temprrun = 0;
181 // stringstream temprname;
182 // stringstream tempdir;
183 // const char* routdir = gSystem->DirName(gSystem->DirName(file->GetPath()));
184 //
185 TTree *oldtree = 0;
186 //
187 //
188 // Try to get the tree Run in the processed file
189 //
190 oldtree = (TTree*)file->Get("Run");
191 //
192 // Look for detector's versions if we are updating a single detector
193 //
194 if ( debug ) printf("Detector -%s- \n",Detector.Data());
195 if ( !strcmp(Detector.Data(),"NONE") ){
196 version->TRIG_ver = Version;
197 version->TOF_ver = Version;
198 version->AC_ver = Version;
199 version->TRK_ver = Version;
200 version->ORB_ver = Version;
201 version->CAL_ver = Version;
202 version->S4_ver = Version;
203 version->ND_ver = Version;
204 } else {
205 if ( !strcmp(Detector.Data(),"TRIG") ) version->TRIG_ver = Version;
206 if ( !strcmp(Detector.Data(),"TOF") ) version->TOF_ver = Version;
207 if ( !strcmp(Detector.Data(),"AC") ) version->AC_ver = Version;
208 if ( !strcmp(Detector.Data(),"TRK") ) version->TRK_ver = Version;
209 if ( !strcmp(Detector.Data(),"CALO") ) version->CAL_ver = Version;
210 if ( !strcmp(Detector.Data(),"S4") ) version->S4_ver = Version;
211 if ( !strcmp(Detector.Data(),"ND") ) version->ND_ver = Version;
212 if ( !strcmp(Detector.Data(),"ORB") ) version->ORB_ver = Version;
213 if ( strcmp(Detector.Data(),"TRIG") && strcmp(Detector.Data(),"TOF") && strcmp(Detector.Data(),"AC") && strcmp(Detector.Data(),"TRK") && strcmp(Detector.Data(),"CALO") && strcmp(Detector.Data(),"S4") && strcmp(Detector.Data(),"ND") && strcmp(Detector.Data(),"ORB") ) return(-804);
214 };
215 //
216 if ( !oldtree ) {
217 //
218 if ( strcmp(Detector.Data(),"NONE") ) return(-803);
219 updating = false;
220 if ( debug ) printf(" RunInfo: creating Run tree in this file\n");
221 //
222 } else {
223 //
224 // temprname.str("");
225 // temprname << routdir;
226 // temprname << "/" << processFolder.Data();
227 // gSystem->MakeDirectory(temprname.str().c_str());
228 // tempdir.str("");
229 // tempdir << temprname.str().c_str();
230 // temprname << "/runinfo_run";
231 // temprname << idRun << ".root";
232 // if ( debug ) printf(" file temporaneo is %s \n",temprname.str().c_str());
233 // //
234 // temprfile = new TFile(temprname.str().c_str(),"RECREATE");
235 // //
236 // temprrun = new TTree();
237 // //
238 // if ( !temprfile ) return(-805);
239 // if ( !oldtree ) return(-806);
240 // if ( !temprrun ) return(-807);
241 // //
242 // temprrun = oldtree->CloneTree(-1,"fast");
243 // //
244 // temprfile->cd();
245 // temprrun->SetName("Run-old");
246 // temprfile->Write();
247 // if ( temprrun ) temprrun->Delete();
248 // temprfile->Close();
249 // //
250 // oldtree->Delete("all");
251 //
252 updating = true;
253 if ( debug ) printf(" RunInfo: updating versioning information \n");
254 //
255 };
256 //
257 file->cd();
258 //
259 // Prepare a new tree to upgrade the contents of the old tree
260 //
261 newtree = new TTree("Run-new","PAMELA Level2 data from the GL_RUN table");
262 newtree->Branch("RunInfo","GL_RUN",&newrun);
263 newtree->Branch("SoftInfo","SoftInfo",&newver);
264 //
265 //
266 if ( !updating ){
267 if ( idRun == 0ULL ){
268 if ( debug ) printf("\n RUNINFO - ERROR: reprocessing data but no RunInfo tree in Level2 file. \n");
269 return(-805);
270 };
271 //
272 // runlist = new TArrayL(1);
273 //
274 error = Query_GL_RUN(idRun, dbc);
275 //
276 if ( error ){
277 if ( debug ) printf("\n RUNINFO - ERROR: Query_GL_RUN exited with non zero error\n");
278 return(error);
279 };
280 if ( ID == 0ULL ){
281 if ( debug ) printf("\n RUNINFO - ERROR: no run with ID_RUN = %llu \n",idRun);
282 return(-5);
283 };
284 //
285 //
286 //
287 newrun->ID = ID;
288 newrun->ID_REG_RUN = ID_REG_RUN;
289 newrun->ID_REG_RUN_L2 = ID_REG_RUN_L2;
290 newrun->RUNHEADER_TIME = RUNHEADER_TIME;
291 newrun->RUNTRAILER_TIME = RUNTRAILER_TIME;
292 newrun->EV_REG_PHYS_FROM = EV_REG_PHYS_FROM;
293 newrun->EV_REG_PHYS_TO = EV_REG_PHYS_TO;
294 newrun->EV_REG_RUNHEADER = EV_REG_RUNHEADER;
295 newrun->EV_REG_RUNTRAILER = EV_REG_RUNTRAILER;
296 newrun->TRK_CALIB_USED = TRK_CALIB_USED;
297 newrun->EFF_WRK_SCHEDULE = EFF_WRK_SCHEDULE;
298 newrun->PRH_VAR_TRG_MODE_A = PRH_VAR_TRG_MODE_A;
299 newrun->PRH_VAR_TRG_MODE_B = PRH_VAR_TRG_MODE_B;
300 newrun->ACQ_BUILD_INFO = ACQ_BUILD_INFO;
301 newrun->ACQ_VAR_INFO = ACQ_VAR_INFO;
302 newver->TRIG_ver = version->TRIG_ver;
303 newver->TOF_ver = version->TOF_ver;
304 newver->AC_ver = version->AC_ver;
305 newver->TRK_ver = version->TRK_ver;
306 newver->ORB_ver = version->ORB_ver;
307 newver->CAL_ver = version->CAL_ver;
308 newver->S4_ver = version->S4_ver;
309 newver->ND_ver = version->ND_ver;
310 //
311 // fill the tree;
312 //
313 newtree->Fill();
314 //
315 totnorun = 1;
316 reprocessing = false;
317 first_file_entry = 0;
318 last_file_entry = (UInt_t)(EV_REG_PHYS_TO - EV_REG_PHYS_FROM);
319 norun = 1;
320 runlist->AddAt((Long64_t)ID,0);
321 //
322 newtree->SetName("Run");
323 //
324 file->cd();
325 // file->Write("Run");
326 //newtree->Delete();
327 delete newver;
328 delete newrun;
329 delete oldver;
330 delete oldrun;
331 //
332 return(0);
333 //
334 } else {
335 //
336 // temprfile = new TFile(temprname.str().c_str(),"READ");
337 // oldtree = (TTree*)temprfile->Get("Run-old");
338 //
339 oldtree->SetBranchAddress("RunInfo",&oldrun);
340 oldtree->SetBranchAddress("SoftInfo",&oldver);
341 //
342 totnorun = oldtree->GetEntries();
343 //
344 if ( totnorun > 500 ){
345 if ( debug ) printf("\n RUNINFO - ERROR: can not handle more than 500 runs!\n");
346 return(-806);
347 };
348 // runlist = new TArrayL((Int_t)totnorun);
349 //
350 found = false;
351 //
352 for ( UInt_t run = 0; run < totnorun; run++){
353 //
354 oldtree->GetEntry(run);
355 //
356 newrun->ID = oldrun->ID;
357 newrun->ID_REG_RUN = oldrun->ID_REG_RUN;
358 newrun->ID_REG_RUN_L2 = oldrun->ID_REG_RUN_L2;
359 newrun->RUNHEADER_TIME = oldrun->RUNHEADER_TIME;
360 newrun->RUNTRAILER_TIME = oldrun->RUNTRAILER_TIME;
361 newrun->EV_REG_PHYS_FROM = oldrun->EV_REG_PHYS_FROM;
362 newrun->EV_REG_PHYS_TO = oldrun->EV_REG_PHYS_TO;
363 newrun->EV_REG_RUNHEADER = oldrun->EV_REG_RUNHEADER;
364 newrun->EV_REG_RUNTRAILER = oldrun->EV_REG_RUNTRAILER;
365 newrun->TRK_CALIB_USED = oldrun->TRK_CALIB_USED;
366 newrun->EFF_WRK_SCHEDULE = oldrun->EFF_WRK_SCHEDULE;
367 newrun->PRH_VAR_TRG_MODE_A = oldrun->PRH_VAR_TRG_MODE_A;
368 newrun->PRH_VAR_TRG_MODE_B = oldrun->PRH_VAR_TRG_MODE_B;
369 newrun->ACQ_BUILD_INFO = oldrun->ACQ_BUILD_INFO;
370 newrun->ACQ_VAR_INFO = oldrun->ACQ_VAR_INFO;
371 newver->TRIG_ver = oldver->TRIG_ver;
372 newver->TOF_ver = oldver->TOF_ver;
373 newver->AC_ver = oldver->AC_ver;
374 newver->TRK_ver = oldver->TRK_ver;
375 newver->ORB_ver = oldver->ORB_ver;
376 newver->CAL_ver = oldver->CAL_ver;
377 newver->S4_ver = oldver->S4_ver;
378 newver->ND_ver = oldver->ND_ver;
379 //
380 file_entries += (oldrun->EV_REG_PHYS_TO - oldrun->EV_REG_PHYS_FROM + 1);
381 //
382 if ( debug ) printf("totnorun %i idRun %i newrun->ID %i \n",(int)totnorun,(int)idRun,(int)newrun->ID);
383 //
384 if ( idRun == 0ULL || idRun == newrun->ID ) {
385 //
386 if ( debug ) printf(" Updating run number %llu \n",idRun);
387 //
388 found = true;
389 //
390 runlist->AddAt(newrun->ID,norun);
391 norun++;
392 //
393 if ( !strcmp(Detector.Data(),"NONE") ){
394 //
395 // update infromations querying the DB
396 //
397 error = Query_GL_RUN(newrun->ID, dbc);
398 //
399 if ( error ){
400 if ( debug ) printf("\n RUNINFO - ERROR: Query_GL_RUN exited with non zero error\n");
401 return(error);
402 };
403 //
404 newrun->ID = ID;
405 newrun->ID_REG_RUN = ID_REG_RUN;
406 newrun->ID_REG_RUN_L2 = ID_REG_RUN_L2;
407 newrun->RUNHEADER_TIME = RUNHEADER_TIME;
408 newrun->RUNTRAILER_TIME = RUNTRAILER_TIME;
409 newrun->EV_REG_PHYS_FROM = EV_REG_PHYS_FROM;
410 newrun->EV_REG_PHYS_TO = EV_REG_PHYS_TO;
411 newrun->EV_REG_RUNHEADER = EV_REG_RUNHEADER;
412 newrun->EV_REG_RUNTRAILER = EV_REG_RUNTRAILER;
413 newrun->TRK_CALIB_USED = TRK_CALIB_USED;
414 newrun->EFF_WRK_SCHEDULE = EFF_WRK_SCHEDULE;
415 newrun->PRH_VAR_TRG_MODE_A = PRH_VAR_TRG_MODE_A;
416 newrun->PRH_VAR_TRG_MODE_B = PRH_VAR_TRG_MODE_B;
417 newrun->ACQ_BUILD_INFO = ACQ_BUILD_INFO;
418 newrun->ACQ_VAR_INFO = ACQ_VAR_INFO;
419 } else {
420 //
421 if ( !strcmp(Detector.Data(),"TRIG") ){
422 newver->TRIG_ver = version->TRIG_ver;
423 newver->TOF_ver = oldver->TOF_ver;
424 newver->AC_ver = oldver->AC_ver;
425 newver->TRK_ver = oldver->TRK_ver;
426 newver->ORB_ver = oldver->ORB_ver;
427 newver->CAL_ver = oldver->CAL_ver;
428 newver->S4_ver = oldver->S4_ver;
429 newver->ND_ver = oldver->ND_ver;
430 if ( strcmp(oldver->TRIG_ver.Data(),"") ) reprocessing = true;
431 };
432 if ( !strcmp(Detector.Data(),"TOF") ){
433 newver->TRIG_ver = oldver->TRIG_ver;
434 newver->TOF_ver = version->TOF_ver;
435 newver->AC_ver = oldver->AC_ver;
436 newver->TRK_ver = oldver->TRK_ver;
437 newver->ORB_ver = oldver->ORB_ver;
438 newver->CAL_ver = oldver->CAL_ver;
439 newver->S4_ver = oldver->S4_ver;
440 newver->ND_ver = oldver->ND_ver;
441 if ( strcmp(oldver->TOF_ver.Data(),"") ) reprocessing = true;
442 };
443 if ( !strcmp(Detector.Data(),"AC") ){
444 newver->TRIG_ver = oldver->TRIG_ver;
445 newver->TOF_ver = oldver->TOF_ver;
446 newver->TRK_ver = oldver->TRK_ver;
447 newver->ORB_ver = oldver->ORB_ver;
448 newver->CAL_ver = oldver->CAL_ver;
449 newver->S4_ver = oldver->S4_ver;
450 newver->ND_ver = oldver->ND_ver;
451 newver->AC_ver = version->AC_ver;
452 if ( strcmp(oldver->AC_ver.Data(),"") ) reprocessing = true;
453 };
454 if ( !strcmp(Detector.Data(),"TRK") ){
455 newver->TRIG_ver = oldver->TRIG_ver;
456 newver->TOF_ver = oldver->TOF_ver;
457 newver->CAL_ver = oldver->CAL_ver;
458 newver->ORB_ver = oldver->ORB_ver;
459 newver->S4_ver = oldver->S4_ver;
460 newver->ND_ver = oldver->ND_ver;
461 newver->AC_ver = oldver->AC_ver;
462 newver->TRK_ver = version->TRK_ver;
463 if ( strcmp(oldver->TRK_ver.Data(),"") ) reprocessing = true;
464 };
465 if ( !strcmp(Detector.Data(),"ORB") ){
466 newver->TRIG_ver = oldver->TRIG_ver;
467 newver->TOF_ver = oldver->TOF_ver;
468 newver->CAL_ver = oldver->CAL_ver;
469 newver->TRK_ver = oldver->TRK_ver;
470 newver->S4_ver = oldver->S4_ver;
471 newver->ND_ver = oldver->ND_ver;
472 newver->AC_ver = oldver->AC_ver;
473 newver->ORB_ver = version->ORB_ver;
474 if ( strcmp(oldver->ORB_ver.Data(),"") ) reprocessing = true;
475 };
476 if ( !strcmp(Detector.Data(),"CALO") ){
477 newver->TRIG_ver = oldver->TRIG_ver;
478 newver->TOF_ver = oldver->TOF_ver;
479 newver->S4_ver = oldver->S4_ver;
480 newver->ORB_ver = oldver->ORB_ver;
481 newver->ND_ver = oldver->ND_ver;
482 newver->AC_ver = oldver->AC_ver;
483 newver->TRK_ver = oldver->TRK_ver;
484 newver->CAL_ver = version->CAL_ver;
485 if ( strcmp(oldver->CAL_ver.Data(),"") ) reprocessing = true;
486 };
487 if ( !strcmp(Detector.Data(),"S4") ){
488 newver->TRIG_ver = oldver->TRIG_ver;
489 newver->TOF_ver = oldver->TOF_ver;
490 newver->ND_ver = oldver->ND_ver;
491 newver->AC_ver = oldver->AC_ver;
492 newver->TRK_ver = oldver->TRK_ver;
493 newver->ORB_ver = oldver->ORB_ver;
494 newver->CAL_ver = oldver->CAL_ver;
495 newver->S4_ver = version->S4_ver;
496 if ( strcmp(oldver->S4_ver.Data(),"") ) reprocessing = true;
497 };
498 if ( !strcmp(Detector.Data(),"ND") ){
499 newver->TRIG_ver = oldver->TRIG_ver;
500 newver->TOF_ver = oldver->TOF_ver;
501 newver->S4_ver = oldver->S4_ver;
502 newver->AC_ver = oldver->AC_ver;
503 newver->ORB_ver = oldver->ORB_ver;
504 newver->TRK_ver = oldver->TRK_ver;
505 newver->CAL_ver = oldver->CAL_ver;
506 newver->ND_ver = version->ND_ver;
507 if ( strcmp(oldver->ND_ver.Data(),"") ) reprocessing = true;
508 };
509 };
510 //
511 last_file_entry = first_file_entry + (oldrun->EV_REG_PHYS_TO - oldrun->EV_REG_PHYS_FROM + 1);
512 //
513 } else {
514 if ( !found ) first_file_entry += (oldrun->EV_REG_PHYS_TO - oldrun->EV_REG_PHYS_FROM + 1);
515 };
516 //
517 file->cd();
518 newtree->Fill();
519 //
520 };
521 //
522 // temprfile->Close();
523 // gSystem->Unlink(temprname.str().c_str());
524 // if ( ismydir ) gSystem->Unlink(tempdir.str().c_str());
525 file->cd();
526 if ( oldtree ) oldtree->Delete("all");
527 newtree->SetName("Run");
528 // file->Write("Run");
529 // newtree->Delete();
530 delete newver;
531 delete newrun;
532 delete oldver;
533 delete oldrun;
534 //
535 if ( !found ){
536 if ( debug ) printf("\n RUNINFO - ERROR: no run with ID_RUN = %llu \n",idRun);
537 return(-5);
538 };
539 //
540 // newtree->Write();
541 };
542 return(0);
543 }
544
545 Int_t ItoRunInfo::Read(ULong64_t idRun){
546 //
547 isreadonly = true;
548 //
549 Bool_t debug = false;
550 //
551 SoftInfo *newver = new SoftInfo();
552 GL_RUN *newrun = new GL_RUN();
553 //
554 // Try to get the tree Run in the processed file
555 //
556 newtree = (TTree*)file->Get("Run");
557 //
558 if ( !newtree ) {
559 //
560 printf("\n RUNINFO - ERROR: no RunInfo tree in Level2 file. \n");
561 return(-801);
562 //
563 } else {
564 //
565 printf(" RunInfo: opening RunInfo tree \n");
566 //
567 newtree->SetBranchAddress("RunInfo",&newrun);
568 newtree->SetBranchAddress("SoftInfo",&newver);
569 //
570 totnorun = newtree->GetEntries();
571 //
572 if ( totnorun > 500 ){
573 if ( debug ) printf("\n RUNINFO - ERROR: can not handle more than 500 runs!\n");
574 return(-806);
575 };
576 // runlist = new TArrayL((Int_t)totnorun);
577 //
578 first_file_entry = 0;
579 //
580 for ( UInt_t run = 0; run < totnorun; run++){
581 //
582 newtree->GetEntry(run);
583 //
584 file_entries += (newrun->EV_REG_PHYS_TO - newrun->EV_REG_PHYS_FROM + 1);
585 //
586 if ( debug ) printf("totnorun %i newrun->ID %i \n",(int)totnorun,(int)newrun->ID);
587 //
588 ID = newrun->ID;
589 ID_REG_RUN = newrun->ID_REG_RUN;
590 ID_REG_RUN_L2 = newrun->ID_REG_RUN_L2;
591 RUNHEADER_TIME = newrun->RUNHEADER_TIME;
592 RUNTRAILER_TIME = newrun->RUNTRAILER_TIME;
593 EV_REG_PHYS_FROM = newrun->EV_REG_PHYS_FROM;
594 EV_REG_PHYS_TO = newrun->EV_REG_PHYS_TO;
595 EV_REG_RUNHEADER = newrun->EV_REG_RUNHEADER;
596 EV_REG_RUNTRAILER = newrun->EV_REG_RUNTRAILER;
597 TRK_CALIB_USED = newrun->TRK_CALIB_USED;
598 EFF_WRK_SCHEDULE = newrun->EFF_WRK_SCHEDULE;
599 PRH_VAR_TRG_MODE_A = newrun->PRH_VAR_TRG_MODE_A;
600 PRH_VAR_TRG_MODE_B = newrun->PRH_VAR_TRG_MODE_B;
601 ACQ_BUILD_INFO = newrun->ACQ_BUILD_INFO;
602 ACQ_VAR_INFO = newrun->ACQ_VAR_INFO;
603 version->TRIG_ver = newver->TRIG_ver;
604 version->TOF_ver = newver->TOF_ver;
605 version->AC_ver = newver->AC_ver;
606 version->TRK_ver = newver->TRK_ver;
607 version->ORB_ver = newver->ORB_ver;
608 version->CAL_ver = newver->CAL_ver;
609 version->S4_ver = newver->S4_ver;
610 version->ND_ver = newver->ND_ver;
611 if ( idRun == ID || idRun == 0ULL ){
612 runlist->AddAt(newrun->ID,norun);
613 norun++;
614 };
615 last_file_entry = first_file_entry + (newrun->EV_REG_PHYS_TO - newrun->EV_REG_PHYS_FROM + 1);
616 };
617 };
618 if ( debug ) printf("norun %i \n",(int)norun);
619 Int_t error = 0;
620 error = GetRunInfo(idRun);
621 delete newver;
622 delete newrun;
623 if ( error ) return(error);
624 return(0);
625 }
626
627 void ItoRunInfo::Close(){
628 reprocessing = false;
629 updating = false;
630 first_file_entry = 0;
631 last_file_entry = 0;
632 file_entries = 0ULL;
633 norun = 0;
634 // runlist = new TArrayL(0,NULL);
635 delete runlist;
636 //if ( file ) delete file;
637 file = new TFile();
638 if ( isreadonly ) newtree->Delete();
639 }
640
641 void ItoRunInfo::Clear(){
642 if ( newtree ) newtree->Delete();
643 }
644
645 UInt_t ItoRunInfo::GetRunForEntry(UInt_t entry){
646 //
647 UInt_t startfrom = 0;
648 //
649 if ( entry >= (UInt_t)first_file_entry && entry <= (UInt_t)last_file_entry ) return(ID);
650 //
651 if ( entry > (UInt_t)last_file_entry ){
652 for ( UInt_t nrun = 0; nrun < norun; nrun++){
653 if ( ID == (ULong64_t)runlist->At(nrun) ) {
654 startfrom = nrun+1;
655 break;
656 };
657 };
658 } else {
659 startfrom = 0;
660 };
661 //
662 if ( startfrom >= norun ) startfrom = 0;
663 //
664 retry:
665 //
666 for ( UInt_t nrun = startfrom; nrun < norun; nrun++){
667 GetRunInfo((ULong64_t)runlist->At(nrun));
668 if ( entry >= (UInt_t)first_file_entry && entry <= (UInt_t)last_file_entry ){
669 return((UInt_t)runlist->At(nrun));
670 };
671 };
672 if ( startfrom ){
673 startfrom = 0;
674 goto retry;
675 };
676 printf(" ERROR! run not found \n");
677 return(0);
678 }
679
680 Int_t ItoRunInfo::GetRunInfo(ULong64_t run){
681 Bool_t found = false;
682 SoftInfo *nwver = new SoftInfo();
683 GL_RUN *nwrun = new GL_RUN();
684 //
685 newtree->SetBranchAddress("RunInfo",&nwrun);
686 newtree->SetBranchAddress("SoftInfo",&nwver);
687 //
688 last_file_entry = 0;
689 first_file_entry = 0;
690 //
691 totnorun = newtree->GetEntries();
692 //
693 for ( UInt_t nrun = 0; nrun < totnorun; nrun++){
694 newtree->GetEntry(nrun);
695 //
696 if ( nwrun->ID == run || run == 0ULL ){
697 ID = nwrun->ID;
698 ID_REG_RUN = nwrun->ID_REG_RUN;
699 ID_REG_RUN_L2 = nwrun->ID_REG_RUN_L2;
700 RUNHEADER_TIME = nwrun->RUNHEADER_TIME;
701 RUNTRAILER_TIME = nwrun->RUNTRAILER_TIME;
702 EV_REG_PHYS_FROM = nwrun->EV_REG_PHYS_FROM;
703 EV_REG_PHYS_TO = nwrun->EV_REG_PHYS_TO;
704 EV_REG_RUNHEADER = nwrun->EV_REG_RUNHEADER;
705 EV_REG_RUNTRAILER = nwrun->EV_REG_RUNTRAILER;
706 TRK_CALIB_USED = nwrun->TRK_CALIB_USED;
707 EFF_WRK_SCHEDULE = nwrun->EFF_WRK_SCHEDULE;
708 PRH_VAR_TRG_MODE_A = nwrun->PRH_VAR_TRG_MODE_A;
709 PRH_VAR_TRG_MODE_B = nwrun->PRH_VAR_TRG_MODE_B;
710 ACQ_BUILD_INFO = nwrun->ACQ_BUILD_INFO;
711 ACQ_VAR_INFO = nwrun->ACQ_VAR_INFO;
712 version->TRIG_ver = nwver->TRIG_ver;
713 version->TOF_ver = nwver->TOF_ver;
714 version->AC_ver = nwver->AC_ver;
715 version->TRK_ver = nwver->TRK_ver;
716 version->ORB_ver = nwver->ORB_ver;
717 version->CAL_ver = nwver->CAL_ver;
718 version->S4_ver = nwver->S4_ver;
719 version->ND_ver = nwver->ND_ver;
720 found = true;
721 last_file_entry = first_file_entry + (nwrun->EV_REG_PHYS_TO - nwrun->EV_REG_PHYS_FROM + 1);
722 };
723 if ( !found ) first_file_entry += (nwrun->EV_REG_PHYS_TO - nwrun->EV_REG_PHYS_FROM + 1);
724 };
725 delete nwver;
726 delete nwrun;
727 if ( found ) return(0);
728 return(-800);
729 }
730

  ViewVC Help
Powered by ViewVC 1.1.23