/[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.22 - (show annotations) (download)
Wed Aug 27 14:44:35 2014 UTC (10 years, 3 months ago) by mocchiut
Branch: MAIN
CVS Tags: v10RED, v10REDr01, HEAD
Changes since 1.21: +15 -0 lines
New ProcInfo class and new ProcessingInfo tree in the level2 files+ printouts commented

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

  ViewVC Help
Powered by ViewVC 1.1.23