--- chewbacca/YodaProfiler/src/PamelaDBOperations.cpp 2008/11/04 15:48:27 1.8 +++ chewbacca/YodaProfiler/src/PamelaDBOperations.cpp 2008/12/12 10:49:54 1.16 @@ -101,6 +101,7 @@ if (INSERT_RAW) SetRawName(filerawname); // INSERT_ROOT = !filerootname.IsNull(); + if ( INSERT_ROOT ) this->SetRootName(filerootname); this->SetOrbitNo(dwinput); // this->SetID_RAW(0); @@ -189,13 +190,15 @@ throw -85; }; filerootname = chpath + chfile;// + ".root"; - if ( debug ) printf(" chewbacca: filename is %s \n",filerootname.Data()); }; this->SetRootName(filerootname); - file = TFile::Open(this->GetRootName().Data()); - } else { - this->SetRootName(""); }; + if ( debug ) printf(" Filename is %s \n",filerootname.Data()); + file = TFile::Open(this->GetRootName().Data()); + // } else { + // this->SetRootName(""); + // this->SetRootName(filerootname); + // }; } // @@ -395,23 +398,28 @@ return; }; // - TString name = this->GetRootFile(); - Int_t nlength = name.Length(); - if ( nlength < 5 ) return; - TString dwo = 0; - for (Int_t i = 0; i<5; i++){ - dwo.Append(name[i],1); - }; - if ( dwo.IsDigit() ){ - dworbit = (UInt_t)dwo.Atoi(); - } else { - dwo=""; - for (Int_t i = 8; i<13; i++){ + if ( !chewbacca ){ + TString name = this->GetRootFile(); + Int_t nlength = name.Length(); + if ( nlength < 5 ){ + if ( IsDebug() ) printf(" Agh problems determining the orbit number! name = %s \n",name.Data()); + return; + }; + TString dwo = 0; + for (Int_t i = 0; i<5; i++){ dwo.Append(name[i],1); - }; - if ( dwo.IsDigit() ) dworbit = (UInt_t)dwo.Atoi(); + }; + if ( dwo.IsDigit() ){ + dworbit = (UInt_t)dwo.Atoi(); + } else { + dwo=""; + for (Int_t i = 8; i<13; i++){ + dwo.Append(name[i],1); + }; + if ( dwo.IsDigit() ) dworbit = (UInt_t)dwo.Atoi(); + }; + if ( IsDebug() ) printf(" Downlink orbit is %i (dwo = %s) \n",dworbit,dwo.Data()); }; - if ( IsDebug() ) printf(" Downlink orbit is %i (dwo = %s) \n",dworbit,dwo.Data()); return; }; @@ -660,7 +668,8 @@ UInt_t tjump = 50000; //UInt_t tjump = 100; while ( tjump > 0 ){ - pktlast = numeric_limits::max(); + // pktlast = numeric_limits::max(); + pktlast = chpktmax + 1; while ( PKT(pktlast) > PKT(chpktmax) && (Int_t)(nevent-1-it) >= 0 ){ if ( (Int_t)(nevent-1-it) >= 0 ){ T->GetEntry(nevent-1-it); @@ -693,7 +702,9 @@ tjump = 50000; //tjump = 100; while ( tjump > 0 ){ - pktlast = 0; + // pktlast = 0; + pktlast = chpktmin - 1; + if ( debug ) printf("LLlook for down %i %i %llu %llu \n",it,pktlast,PKT(pktlast),PKT(chpktmin)); while ( PKT(pktlast) < PKT(chpktmin) && it < (Int_t)nevent ){ if ( it < (Int_t)nevent ){ T->GetEntry(it); @@ -1349,7 +1360,7 @@ // // if ( IsDebug() ) printf(" obt conversion: obt is %u obtfirst is %u (numeric_limits::max()/2) is %u \n",obt,pobtfirst,(UInt_t)(numeric_limits::max()/2)); // - if ( obt < (pobtfirst/2) && pobtfirst > (numeric_limits::max()/2) ){ + if ( obt < ((Long64_t)pobtfirst/2) && pobtfirst > (numeric_limits::max()/2) ){ // if ( IsDebug() ) printf(" rise up obt %lld \n",(Long64_t)obt+(Long64_t)numeric_limits::max()); return((Long64_t)obt+(Long64_t)numeric_limits::max()); }; @@ -1574,6 +1585,7 @@ result = conn->Query(oss.str().c_str()); if ( !result ) throw -10; row = result->Next(); + if ( !row ) throw -92; idresof = (UInt_t)atoll(row->GetField(0)); existsts = true; goto eout; @@ -2236,7 +2248,7 @@ ptht = cod->Get(pctp->RunHeader) - 1; // evbeft = cod->Get(pctp->Physics); tcod = (UInt_t)cod->Get(pctp->Physics); - if ( !tcod ) tcod = 1; + // if ( !tcod ) tcod = 1; // IS A BUG SINCE RUNS WITH ZERO EVENTS WILL LOOK LIKE RUNS WITH ONE EVENT evbeft = TMath::Min(upperentry,(tcod-1)); if ( debug ) printf(" Loop in runtrailers, evbeft is %u upperentry %u cod->getetc %u \n",evbeft,upperentry,cod->Get(pctp->Physics)); // @@ -2275,7 +2287,7 @@ obth = phh->GetOrbitalTime(); cod = ehh->GetCounter(); tcod = (UInt_t)cod->Get(pctp->Physics); - if ( !tcod ) tcod = 1; + // if ( !tcod ) tcod = 1; // IS A BUG SINCE RUNS WITH ZERO EVENTS WILL LOOK LIKE RUNS WITH ONE EVENT evbefh = TMath::Max(chminentry,(tcod-1)); // if ( PKT(pkth) >= PKT(pktfirst) && PKT(pkth) <= upperpkt ){ @@ -2314,6 +2326,7 @@ // this->HandleRunFragments(true,true,chminentry,(evbefh)); // + // what about pth=ptht-1 }; }; // @@ -2336,7 +2349,7 @@ cod = ehh->GetCounter(); // evbeft = cod->Get(pctp->Physics); tcod = (UInt_t)cod->Get(pctp->Physics); - if ( !tcod ) tcod = 1; + // if ( !tcod ) tcod = 1; // IS A BUG SINCE RUNS WITH ZERO EVENTS WILL LOOK LIKE RUNS WITH ONE EVENT evbeft = TMath::Min(upperentry,(tcod-1)); rh->GetEntry(pth); phh = ehh->GetPscuHeader(); @@ -2376,9 +2389,13 @@ // if ( ptt+1 == rtev){ if ( conptt+1 == nrtev ){ // if ( conptt+1 == (nrtev+nrtbef )){ + if ( IsDebug() ) printf(" >>>>>>>>>>> %i %u %i %u \n",ptht,rhev,nrtev,conptt); ptht++; - if ( ptht < rhev ){ + if ( ptht < rhev ){ rh->GetEntry(ptht); + //pth++; + //if ( pth < rhev ){ + //rh->GetEntry(pth); phh = ehh->GetPscuHeader(); pkth = phh->GetCounter(); obth = phh->GetOrbitalTime(); @@ -2402,10 +2419,12 @@ if ( (UInt_t)evbeft < upperentry-1 && upperentry>0 ){ if ( IsDebug() ) printf(" Piece of run at the end of the file with NO RUNHEADER! evbeft %u upperentry-1 %u \n",(UInt_t)evbeft,upperentry-1); // - if ( (ptt-1) < 0 ) throw -15; // should never arrive here! - rt->GetEntry(ptt-1); + // if ( (ptt-1) < 0 ) throw -15; // should never arrive here! + if ( (rtev-1) < 0 || ptt < 0 ) throw -15; // should never arrive here! + // rt->GetEntry(ptt-1); + rt->GetEntry(rtev-1); cod = eht->GetCounter(); - tcod = (UInt_t)cod->Get(pctp->Physics); + tcod = (UInt_t)cod->Get(pctp->Physics)+1; evbefh = TMath::Max(chminentry,tcod); // evbefh = cod->Get(pctp->Physics); rt->GetEntry(ptt); @@ -2636,10 +2655,14 @@ // // we have now the good first piece of a run, fill the glrun object // - if ( rhfirstev != firstev && !mishead ) mishead = true; - if ( rtlastev != lastev && !mistrail ) mistrail = true; + if ( firstev != (lastev+1) ){ // could be a problem sometimes (?) + if ( rhfirstev != firstev && !mishead ) mishead = true; + if ( rtlastev != lastev && !mistrail ) mistrail = true; + }; // + if ( IsDebug() ) printf(" bhere firstev is %i lastev is %i \n",firstev,lastev); this->FillClass(mishead,mistrail,firstev,lastev); + if ( IsDebug() ) printf(" chere firstev is %i lastev is %i \n",firstev,lastev); // if ( IsDebug() ) printf("The run is good, is it the other piece in the GL_RUN_FRAGMENTS table?\n"); if ( IsDebug() ) printf(" C THIS RUN: RUNHEADER_OBT %u RUNTRAILER_OBT %u RUNHEADER_PKT %u RUNTRAILER_PKT %u \n", glrun->GetRUNHEADER_OBT(),glrun->GetRUNTRAILER_OBT(),glrun->GetRUNHEADER_PKT(),glrun->GetRUNTRAILER_PKT()); @@ -2734,7 +2757,7 @@ // found = false; // default value // - if ( IsDebug() ) printf(" Found a possible candidate, checking if it is the good one... \n"); + if ( IsDebug() ) printf(" A Found a possible candidate, checking if it is the good one... \n"); // // if we have both runheader and runtrailer we can check with pkt_counter: // @@ -2750,6 +2773,7 @@ if ( IsDebug() ) printf(" FOUND!!! check %llu pktt %llu \n",chkpkt,pktt); // found = true; + if ( IsDebug() ) printf(" where firstev is %i lastev is %i \n",firstev,lastev); // } else { // @@ -2815,6 +2839,7 @@ oss << " ID="<GetField(0)<<";"; // glrun1->Query_GL_RUN_FRAGMENTS(oss.str().c_str(),conn); // here we have runheader infos + if ( IsDebug() ) printf(" there firstev is %i lastev is %i \n",firstev,lastev); // // merge infos // @@ -2845,6 +2870,8 @@ glrun1->SetRUNTRAILER_OBT(glrun->GetRUNTRAILER_OBT()); glrun1->SetRUNTRAILER_PKT(glrun->GetRUNTRAILER_PKT()); // + if ( IsDebug() ) printf(" here firstev is %i lastev is %i \n",firstev,lastev); + // glrun->SetEV_FROM(firstev); glrun->SetNEVENTS(lastev-firstev+1); // @@ -2937,7 +2964,7 @@ // found = false; // default value // - if ( IsDebug() ) printf(" Found a possible candidate, checking if it is the good one... \n"); + if ( IsDebug() ) printf(" B Found a possible candidate, checking if it is the good one... \n"); // // if we have both runheader and runtrailer we can check with pkt_counter: // @@ -3166,7 +3193,7 @@ glrun->SetID(this->AssignRunID()); glrun->SetID_RUN_FRAG(0); glrun->Fill_GL_RUN(conn); // it'ok we arrive here only inside a file hence in the middle of the runs... - }; + }; // }; // @@ -3210,6 +3237,7 @@ if ( firstev == lastev+1 || lastev == firstev ) { // no events inside the run! //if ( firstev <= lastev+1 ) { // no events inside the run! if ( IsDebug() ) printf(" Checking but no events in the run! \n"); + firstev = lastev+1; // this is necessary for files with no Physics entries, should have no influence on other files // return true is correct return(true); // @@ -3239,7 +3267,7 @@ // } else { // - if ( IsDebug() ) printf(" There are no-phyics packets inside the run!\n"); + if ( IsDebug() ) printf(" There are no-physics packets inside the run!\n"); // // HERE WE MUST HANDLE THAT RUNS AND GO BACK // @@ -3249,6 +3277,8 @@ UInt_t check = 0; UInt_t lastevtemp = lastev; UInt_t firstevno = firstev; + UInt_t rhchko=0; + UInt_t rhchk=0; // for (UInt_t i=firstev; i<=lastev; i++){ // @@ -3257,9 +3287,15 @@ // check = 0; // + + // if we have a runheader set lastev then exit + // for(Iter = packetsNames.begin(); Iter != packetsNames.end(); Iter++){ if ( strcmp(*Iter,"Physics") ) check += code->Get(GetPacketType(*Iter)); }; + // check here if we have a runheader + rhchko = rhchk; + rhchk = code->Get(GetPacketType("RunHeader")); // if ( checkfirst < check || i == lastev ){ // @@ -3457,7 +3493,7 @@ // found = false; // default value // - if ( IsDebug() ) printf(" Found a possible candidate, checking if it is the good one... \n"); + if ( IsDebug() ) printf(" C Found a possible candidate, checking if it is the good one... \n"); // // if we have both runheader and runtrailer we can check with pkt_counter: // @@ -3676,6 +3712,14 @@ // }; // + if ( i > firstev ){ + if ( rhchko != rhchk ){ + if ( IsDebug() ) printf("oh oh... we have a runheader! stop here and handle later the remaining piece\n"); + lastev = i; + return(false); + }; + }; + // if ( check == checklast && i != lastev ){ lastevtemp = i - 1; i = lastev - 1; @@ -6057,7 +6101,8 @@ // 2) get the OBT of the last validated run // -------------------------------------------------------------- oss.str(""); - oss << " SELECT * FROM GL_RUN WHERE VALIDATION=1 AND RUNHEADER_TIME<="<< t_start + // oss << " SELECT * FROM GL_RUN WHERE VALIDATION=1 AND RUNHEADER_TIME<="<< t_start + oss << " SELECT * FROM GL_RUN WHERE VALIDATION>0 AND RUNHEADER_TIME<="<< t_start <<" ORDER BY RUNHEADER_TIME DESC LIMIT 1;"; if ( IsDebug() ) printf(" Get stop validation-time: query is \n %s \n",oss.str().c_str()); result = conn->Query(oss.str().c_str()); @@ -6200,7 +6245,8 @@ if( interval >= calibtime )CHECK = true; //more than calibtime s => there might be a calibration if( !CHECK && this_run->VALIDATION ){ - for (Int_t irun = 0; irun < nseq; irun++)assignVALIDATION(sequence[irun],true); + // for (Int_t irun = 0; irun < nseq; irun++)assignVALIDATION(sequence[irun],true); + for (Int_t irun = 0; irun < nseq; irun++)assignVALIDATION(sequence[irun],this_run->VALIDATION); nseq=0; } @@ -6221,8 +6267,13 @@ if( CHECK ){ // check if calibration exists if ( IsDebug() )printf("DT %i ===> CHECK Missing calibration\n",interval); - Bool_t MISSING = MissingTRK_CALIB(t1,t2); - for (Int_t irun = 0; irun < nseq; irun++)assignVALIDATION(sequence[irun],!MISSING); + // Bool_t MISSING = MissingTRK_CALIB(t1,t2); + UInt_t MISSING = MissingTRK_CALIB(t1,t2); + UInt_t val = 0; + if ( MISSING == 1 ) val = 0; + if ( MISSING == 0 ) val = 1; + if ( MISSING == 2 ) val = 2; + for (Int_t irun = 0; irun < nseq; irun++)assignVALIDATION(sequence[irun],val); nseq=0; }; //-------------- @@ -6252,14 +6303,17 @@ * @param t2 To absolute time * @return true if there might be a missing calibration */ -Bool_t PamelaDBOperations::MissingTRK_CALIB(UInt_t t1,UInt_t t2){ +//Bool_t PamelaDBOperations::MissingTRK_CALIB(UInt_t t1,UInt_t t2){ +UInt_t PamelaDBOperations::MissingTRK_CALIB(UInt_t t1,UInt_t t2){ GL_TRK_CALIB* trkcalib = new GL_TRK_CALIB(); // get the closest calibration before the run start (t2) - if ( trkcalib->Query_GL_TRK_CALIB(t2, conn) )return(true); //>>> missing + // if ( trkcalib->Query_GL_TRK_CALIB(t2, conn) )return(true); //>>> missing + if ( trkcalib->Query_GL_TRK_CALIB(t2, conn) )return(1); //>>> missing - if ( trkcalib->TO_TIME < t2 ) return(true); //>>> missing + // if ( trkcalib->TO_TIME < t2 ) return(true); //>>> missing + if ( trkcalib->TO_TIME < t2 ) return(1); //>>> missing //============================================================== // Check is done first on the basis of time between calibration, @@ -6276,9 +6330,11 @@ //============================================================== Bool_t DOWNLOAD = false; // check if the calib was skipped becouse of download .... DA FARE!! - if(DOWNLOAD)return(false); + // if(DOWNLOAD)return(false); + if(DOWNLOAD)return(0); - return(true); //>>> missing + // return(true); //>>> missing + return(1); //>>> missing }; @@ -6288,7 +6344,9 @@ //============================================================== // the long time interval bewteen runs might be due to download if ( IsDebug() )printf("Short time between calib and run start %u :-) ==> OK! \n",t2 - trkcalib->FROM_TIME); - return(false); + if ( trkcalib->VALIDATION ) return(0); + if ( IsDebug() )printf("Calibration is not validated... :-/ ==> OK but with VALIDATION=2! \n"); + return(2); }; /** @@ -6297,6 +6355,10 @@ * @param validation true/false */ Int_t PamelaDBOperations::assignVALIDATION(UInt_t idrun, Bool_t validation){ + return(this->assignVALIDATION(idrun,(UInt_t)validation)); +} + +Int_t PamelaDBOperations::assignVALIDATION(UInt_t idrun, UInt_t validation){ TSQLResult *result = 0; stringstream oss; oss.str(""); @@ -6493,7 +6555,7 @@ stringstream myquery; // myquery.str(""); - myquery << " SELECT ID, ID_RAW FROM GL_ROOT where NAME='"<Query(myquery.str().c_str()); // @@ -6509,6 +6571,7 @@ // this->SetID_ROOT((UInt_t)atoll(Row->GetField(0))); this->SetID_RAW((UInt_t)atoll(Row->GetField(1))); + UInt_t idtsy=(UInt_t)atoll(Row->GetField(2)); // this->ValidationOFF(); // @@ -6516,7 +6579,7 @@ // this->RemoveRUNS(); // - this->RemoveFILES(); + this->RemoveFILES(idtsy); // this->SetID_ROOT(0); this->SetID_RAW(0); @@ -6736,7 +6799,7 @@ * Rearrange calibration tables * **/ -void PamelaDBOperations::RemoveFILES(){ +void PamelaDBOperations::RemoveFILES(UInt_t idtsy){ stringstream myquery; // myquery.str(""); @@ -6746,6 +6809,22 @@ // conn->Query(myquery.str().c_str()); // + myquery.str(""); + myquery << " DELETE FROM GL_ROOT WHERE ID=" <GetID_ROOT() <<";"; + // + if ( IsDebug() ) printf(" query is \n %s \n",myquery.str().c_str()); + // + conn->Query(myquery.str().c_str()); // + // + if ( !chewbacca ){ + myquery.str(""); + myquery << " DELETE FROM GL_TIMESYNC WHERE ID=" << idtsy <<";"; + // + if ( IsDebug() ) printf(" query is \n %s \n",myquery.str().c_str()); + // + conn->Query(myquery.str().c_str()); + }; + // }; /**