| 71 | // | // | 
| 72 | GL_S4_CALIB *glS4calib = new GL_S4_CALIB(); | GL_S4_CALIB *glS4calib = new GL_S4_CALIB(); | 
| 73 | // | // | 
| 74 | if ( !dbc->IsConnected() ) throw -504; | //  if ( !dbc->IsConnected() ) throw -504; | 
| 75 | glS4calib->Query_GL_S4_CALIB(atime, dbc); | Int_t s4sig = glS4calib->Query_GL_S4_CALIB(atime, dbc); | 
| 76 |  | if ( s4sig != -57 && s4sig < 0 ){ | 
| 77 |  | parametri->AddAt(0.,0); | 
| 78 |  | parametri->AddAt(0.,1); | 
| 79 |  | return parametri; | 
| 80 |  | }; | 
| 81 |  | if ( s4sig < 0 ) throw s4sig; | 
| 82 | // | // | 
| 83 | GL_ROOT *glroot = new GL_ROOT(); | GL_ROOT *glroot = new GL_ROOT(); | 
| 84 | if ( !dbc->IsConnected() ) throw -504; | //  if ( !dbc->IsConnected() ) throw -504; | 
| 85 | glroot->Query_GL_ROOT(glS4calib->ID_ROOT_L0,dbc); | glroot->Query_GL_ROOT(glS4calib->ID_ROOT_L0,dbc); | 
| 86 | // | // | 
| 87 | stringstream ftmpname; | stringstream ftmpname; | 
| 105 | tr->SetBranchAddress("CalibS4", &S4CalibEvent); | tr->SetBranchAddress("CalibS4", &S4CalibEvent); | 
| 106 | if ( tr->GetEntries() < glS4calib->EV_ROOT ) return(NULL); | if ( tr->GetEntries() < glS4calib->EV_ROOT ) return(NULL); | 
| 107 | // | // | 
| 108 | tr->GetEntry(glS4calib->EV_ROOT); | if ( tr->GetEntry(glS4calib->EV_ROOT) <= 0 ) throw -36; | 
| 109 | // | // | 
| 110 | // Variables initialization | // Variables initialization | 
| 111 | // | // | 
| 163 | // CORE ROUTINE | // CORE ROUTINE | 
| 164 | // | // | 
| 165 | // | // | 
| 166 | int S4Core(UInt_t run, TFile *file, TSQLServer *dbc, Int_t S4argc, char *S4argv[]){ | int S4Core(UInt_t run, TFile *file,GL_TABLES *glt, Int_t S4argc, char *S4argv[]){ | 
| 167 | // | // | 
| 168 | // Set these to true to have a verbose output. | // Set these to true to have a verbose output. | 
| 169 | // | // | 
| 176 | const char* outDir = gSystem->DirName(gSystem->DirName(file->GetPath())); | const char* outDir = gSystem->DirName(gSystem->DirName(file->GetPath())); | 
| 177 | // | // | 
| 178 | Int_t i = 0; | Int_t i = 0; | 
| 179 | TString processFolder = "S4Folder"; | TString processFolder = Form("S4Folder_%u",run); | 
| 180 | if ( S4argc > 0 ){ | if ( S4argc > 0 ){ | 
| 181 | i = 0; | i = 0; | 
| 182 | while ( i < S4argc ){ | while ( i < S4argc ){ | 
| 189 | }; | }; | 
| 190 | if ( (!strcmp(S4argv[i],"--debug")) || (!strcmp(S4argv[i],"-g"))) { | if ( (!strcmp(S4argv[i],"--debug")) || (!strcmp(S4argv[i],"-g"))) { | 
| 191 | verbose = true; | verbose = true; | 
| 192 |  | debug = true; | 
| 193 | }; | }; | 
| 194 | if ( (!strcmp(S4argv[i],"--verbose")) || (!strcmp(S4argv[i],"-v"))) { | if ( (!strcmp(S4argv[i],"--verbose")) || (!strcmp(S4argv[i],"-v"))) { | 
| 195 | verbose = true; | verbose = true; | 
| 267 | TTree *tempS4 = 0; | TTree *tempS4 = 0; | 
| 268 | stringstream tempname; | stringstream tempname; | 
| 269 | stringstream S4folder; | stringstream S4folder; | 
| 270 |  | Bool_t myfold = false; | 
| 271 | tempname.str(""); | tempname.str(""); | 
| 272 | tempname << outDir; | tempname << outDir; | 
| 273 | tempname << "/" << processFolder.Data(); | tempname << "/" << processFolder.Data(); | 
| 274 | S4folder.str(""); | S4folder.str(""); | 
| 275 | S4folder << tempname.str().c_str(); | S4folder << tempname.str().c_str(); | 
|  | gSystem->MakeDirectory(S4folder.str().c_str()); |  | 
| 276 | tempname << "/S4tree_run"; | tempname << "/S4tree_run"; | 
| 277 | tempname << run << ".root"; | tempname << run << ".root"; | 
| 278 |  | UInt_t totnorun = 0; | 
| 279 | // | // | 
| 280 | // DB classes | // DB classes | 
| 281 | // | // | 
| 332 | // | // | 
| 333 | // number of run to be processed | // number of run to be processed | 
| 334 | // | // | 
| 335 | numbofrun = runinfo->GetNoRun(); | numbofrun = runinfo->GetNoRun(); | 
| 336 |  | totnorun = runinfo->GetRunEntries(); | 
| 337 | // | // | 
| 338 | // Try to access the S4 tree in the file, if it exists we are reprocessing data if not we are processing a new run | // Try to access the S4 tree in the file, if it exists we are reprocessing data if not we are processing a new run | 
| 339 | // | // | 
| 361 | // | // | 
| 362 | if (verbose) printf("\n Preparing the pre-processing...\n"); | if (verbose) printf("\n Preparing the pre-processing...\n"); | 
| 363 | // | // | 
| 364 | if ( run == 0 ){ | if ( run == 0 || totnorun == 1 ){ | 
| 365 | // | // | 
| 366 | // we are reprocessing all the file | // we are reprocessing all the file | 
| 367 | // if we are reprocessing everything we don't need to copy any old event and we can just work with the new tree and delete the old one immediately | // if we are reprocessing everything we don't need to copy any old event and we can just work with the new tree and delete the old one immediately | 
| 380 | // | // | 
| 381 | // copying old tree to a new file | // copying old tree to a new file | 
| 382 | // | // | 
| 383 |  | gSystem->MakeDirectory(S4folder.str().c_str()); | 
| 384 |  | myfold = true; | 
| 385 | tempfile = new TFile(tempname.str().c_str(),"RECREATE"); | tempfile = new TFile(tempname.str().c_str(),"RECREATE"); | 
| 386 | tempS4 = S4trclone->CloneTree(-1,"fast"); | tempS4 = S4trclone->CloneTree(-1,"fast"); | 
| 387 | tempS4->SetName("S4-old"); | tempS4->SetName("S4-old"); | 
| 421 | } | } | 
| 422 | for (UInt_t j = 0; j < nobefrun; j++){ | for (UInt_t j = 0; j < nobefrun; j++){ | 
| 423 | // | // | 
| 424 | S4trclone->GetEntry(j); | if ( S4trclone->GetEntry(j) <= 0 ) throw -36; | 
| 425 | // | // | 
| 426 | // copy s4clone to mydec | // copy s4clone to mydec | 
| 427 | // | // | 
| 479 | // | // | 
| 480 | // prepare the timesync for the db | // prepare the timesync for the db | 
| 481 | // | // | 
| 482 |  | TString host = glt->CGetHost(); | 
| 483 |  | TString user = glt->CGetUser(); | 
| 484 |  | TString psw = glt->CGetPsw(); | 
| 485 |  | TSQLServer *dbc = TSQLServer::Connect(host.Data(),user.Data(),psw.Data()); | 
| 486 | if ( !dbc->IsConnected() ) throw -504; | if ( !dbc->IsConnected() ) throw -504; | 
| 487 |  | stringstream myquery; | 
| 488 |  | myquery.str(""); | 
| 489 |  | myquery << "SET time_zone='+0:00'"; | 
| 490 |  | dbc->Query(myquery.str().c_str()); | 
| 491 | dbtime = new GL_TIMESYNC(runinfo->ID_ROOT_L0,"ID",dbc); | dbtime = new GL_TIMESYNC(runinfo->ID_ROOT_L0,"ID",dbc); | 
| 492 | // | // | 
| 493 | // Search in the DB the path and name of the LEVEL0 file to be processed. | // Search in the DB the path and name of the LEVEL0 file to be processed. | 
| 494 | // | // | 
| 495 | if ( !dbc->IsConnected() ) throw -504; | //    if ( !dbc->IsConnected() ) throw -504; | 
| 496 | glroot->Query_GL_ROOT(runinfo->ID_ROOT_L0,dbc); | glroot->Query_GL_ROOT(runinfo->ID_ROOT_L0,dbc); | 
| 497 | // | // | 
| 498 | ftmpname.str(""); | ftmpname.str(""); | 
| 510 | printf(" %i events to be processed for run %u: from %u to %u \n\n",totevent,idRun,runinfo->EV_FROM,(runinfo->EV_FROM+totevent)); | printf(" %i events to be processed for run %u: from %u to %u \n\n",totevent,idRun,runinfo->EV_FROM,(runinfo->EV_FROM+totevent)); | 
| 511 | } | } | 
| 512 | // | // | 
| 513 |  | //    if ( !totevent ) goto closeandexit; | 
| 514 |  | // | 
| 515 | // Open Level0 file | // Open Level0 file | 
| 516 | // | // | 
| 517 | l0File = new TFile(fname.Data()); | l0File = new TFile(fname.Data()); | 
| 548 | // | // | 
| 549 | nevents = l0S4->GetEntries(); | nevents = l0S4->GetEntries(); | 
| 550 | // | // | 
| 551 | if ( nevents < 1 ) { | if ( nevents < 1 && totevent ) { | 
| 552 | if ( debug ) printf(" S4 - ERROR: Level0 file is empty\n\n"); | if ( debug ) printf(" S4 - ERROR: Level0 file is empty\n\n"); | 
| 553 | l0File->Close(); | l0File->Close(); | 
| 554 | code = -11; | code = -11; | 
| 555 | goto closeandexit; | goto closeandexit; | 
| 556 | }; | }; | 
| 557 | // | // | 
| 558 | if ( runinfo->EV_TO > nevents-1 ) { | if ( runinfo->EV_TO > nevents-1 && totevent ) { | 
| 559 | if ( debug ) printf(" S4 - ERROR: too few entries in the S4 tree\n"); | if ( debug ) printf(" S4 - ERROR: too few entries in the S4 tree\n"); | 
| 560 | l0File->Close(); | l0File->Close(); | 
| 561 | code = -12; | code = -12; | 
| 579 | // | // | 
| 580 | if (verbose) printf("\n Ready to start! \n\n Processed events: \n\n"); | if (verbose) printf("\n Ready to start! \n\n Processed events: \n\n"); | 
| 581 | // | // | 
| 582 |  | if ( dbc ){ | 
| 583 |  | dbc->Close(); | 
| 584 |  | delete dbc; | 
| 585 |  | dbc = 0; | 
| 586 |  | }; | 
| 587 |  | // | 
| 588 | for ( re = runinfo->EV_FROM; re < (runinfo->EV_FROM+runinfo->NEVENTS); re++){ | for ( re = runinfo->EV_FROM; re < (runinfo->EV_FROM+runinfo->NEVENTS); re++){ | 
| 589 | // | // | 
| 590 | if ( procev%1000 == 0 && procev > 0 && verbose ) printf(" %iK \n",procev/1000); | if ( procev%1000 == 0 && procev > 0 && verbose ) printf(" %iK \n",procev/1000); | 
| 591 | // | // | 
| 592 | l0head->GetEntry(re); | if ( l0head->GetEntry(re) <= 0 ) throw -36; | 
| 593 | // | // | 
| 594 | // absolute time of this event | // absolute time of this event | 
| 595 | // | // | 
| 598 | // | // | 
| 599 | // paranoid check | // paranoid check | 
| 600 | // | // | 
| 601 | if ( (atime > runinfo->RUNTRAILER_TIME) || (atime < runinfo->RUNHEADER_TIME)  ) { | if ( (atime > (runinfo->RUNTRAILER_TIME+1)) || (atime < (runinfo->RUNHEADER_TIME-1))  ) { | 
| 602 | if (verbose) printf(" S4 - WARNING: event at time outside the run time window, skipping it\n"); | if (verbose) printf(" S4 - WARNING: event at time outside the run time window, skipping it\n"); | 
| 603 | goto jumpev; | goto jumpev; | 
| 604 | }; | }; | 
| 608 | // start processing | // start processing | 
| 609 | // | // | 
| 610 | s4->Clear(); | s4->Clear(); | 
| 611 | l0S4->GetEntry(re); | if ( l0S4->GetEntry(re) <= 0 ) throw -36; | 
| 612 | if (l0s4e->unpackError == 0){ | if (l0s4e->unpackError == 0){ | 
| 613 | s4->S4adc = l0s4e->S4_DATA; | s4->S4adc = l0s4e->S4_DATA; | 
| 614 | // | // | 
| 653 | // | // | 
| 654 | // Get entry from old tree | // Get entry from old tree | 
| 655 | // | // | 
| 656 | S4trclone->GetEntry(j); | if ( S4trclone->GetEntry(j) <= 0 ) throw -36; | 
| 657 | // | // | 
| 658 | // copy s4clone to s4 | // copy s4clone to s4 | 
| 659 | // | // | 
| 673 | // | // | 
| 674 | if ( l0File ) l0File->Close(); | if ( l0File ) l0File->Close(); | 
| 675 | if ( tempfile ) tempfile->Close(); | if ( tempfile ) tempfile->Close(); | 
| 676 | gSystem->Unlink(tempname.str().c_str()); | if ( myfold) gSystem->Unlink(tempname.str().c_str()); | 
| 677 | // | // | 
| 678 | if ( runinfo ) runinfo->Close(); | if ( runinfo ) runinfo->Close(); | 
| 679 | if ( S4tr ) S4tr->SetName("S4"); | if ( S4tr ) S4tr->SetName("S4"); | 
| 682 | file->Write(); | file->Write(); | 
| 683 | }; | }; | 
| 684 | // | // | 
| 685 | gSystem->Unlink(S4folder.str().c_str()); | if ( myfold ) gSystem->Unlink(S4folder.str().c_str()); | 
| 686 | // | // | 
| 687 | // the end | // the end | 
| 688 | // | // |