/[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.15 - (show annotations) (download)
Mon Nov 27 16:34:48 2006 UTC (18 years ago) by mocchiut
Branch: MAIN
CVS Tags: v2r01
Changes since 1.14: +4 -4 lines
AC reprocessing crash fixed, RunInfo no-run bug fixed, param installation bug fixed

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

  ViewVC Help
Powered by ViewVC 1.1.23