--- chewbacca/YodaProfiler/src/PamelaDBOperations.cpp 2008/10/31 11:21:44 1.4 +++ chewbacca/YodaProfiler/src/PamelaDBOperations.cpp 2008/12/03 19:57:52 1.14 @@ -58,7 +58,7 @@ * @param debug debug flag. * @param tlefilename ascii file with TLE 3 line elements. */ -PamelaDBOperations::PamelaDBOperations(TString host, TString user, TString password, TString filerawname, TString filerootname, UInt_t boot, UInt_t tsync, UInt_t obt0, Bool_t debug, TString tlefilename, UInt_t dwinput, Bool_t staticp, Bool_t gpamela){ +PamelaDBOperations::PamelaDBOperations(TString host, TString user, TString password, TString filerawname, TString filerootname, UInt_t boot, UInt_t tsync, UInt_t obt0, Bool_t debug, TString tlefilename, UInt_t dwinput, Bool_t staticp, Bool_t gpamela, Bool_t keepenv){ // chewbacca = false; chminentry = 0; @@ -76,6 +76,8 @@ // }; // + KEEPENV = false; + if ( keepenv ) KEEPENV=true; STATIC=false; if ( staticp ) STATIC=true; // @@ -99,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); @@ -138,7 +141,7 @@ TString chfile; UInt_t ridn = 0; qu.str(""); - qu << "SELECT ROOT_ID_N,PKT_NUMBER_INIT,PKT_NUMBER_FINAL,PKT_OBT_INIT,PKT_OBT_FINAL from ROOT_TABLE_MERGING where ID_N=" << chID << ";"; + qu << "SELECT ROOT_ID_N,PKT_NUMBER_INIT,PKT_NUMBER_FINAL,PKT_OBT_INIT,PKT_OBT_FINAL,INSERTED_BY from ROOT_TABLE_MERGING where ID_N=" << chID << ";"; if ( debug ) printf(" chewbacca: query is %s \n",qu.str().c_str()); result = conn->Query(qu.str().c_str()); if ( result ){ @@ -149,6 +152,7 @@ chpktmax = (UInt_t)atoll(row->GetField(2)); chobtmin = (UInt_t)atoll(row->GetField(3)); chobtmax = (UInt_t)atoll(row->GetField(4)); + chiby = (TString)(row->GetField(5)); } else { throw -84; }; @@ -163,7 +167,11 @@ if ( result2 ){ row2 = result2->Next(); if ( row2 ){ - chpath = (TString)gSystem->ExpandPathName(row2->GetField(0))+'/'; + if ( KEEPENV ){ + chpath = (TString)(row2->GetField(0))+'/'; + } else { + chpath = (TString)gSystem->ExpandPathName(row2->GetField(0))+'/'; + }; chfile = (TString)(row2->GetField(1)); chobtts = (UInt_t)atoll(row2->GetField(2)); chlastts = (UInt_t)atoll(row2->GetField(3)); @@ -182,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); + // }; } // @@ -388,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; }; @@ -435,9 +450,13 @@ TString PamelaDBOperations::GetRootPath(){ if ( STATIC ){ - return((TString)gSystem->DirName(filerootname.Data())+'/'); - } else { - return((TString)gSystem->ExpandPathName("$PAM_L0")+'/'); + return((TString)gSystem->DirName(this->GetRootName().Data())+'/'); + } else { + if ( KEEPENV ){ + return((TString)gSystem->ExpandPathName(gSystem->DirName(filerootname.Data()))+'/'); + } else { + return((TString)gSystem->ExpandPathName("$PAM_L0")+'/'); + }; }; }; @@ -649,8 +668,9 @@ UInt_t tjump = 50000; //UInt_t tjump = 100; while ( tjump > 0 ){ - pktlast = numeric_limits::max(); - while ( pktlast > chpktmax && (Int_t)(nevent-1-it) >= 0 ){ + // 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); ph = eh->GetPscuHeader(); @@ -658,7 +678,7 @@ } else { pktlast = chpktmax + 1; }; - if ( (!(it%1000) || abs((int)pktlast - (int)chpktmax)<1000 ) && debug ) printf(" look for up %i %i %i nevent %u (nevent-1-it) %i \n",it,pktlast,chpktmax,nevent,(Int_t)(nevent-1-it)); + if ( (!(it%1000) || abs((int)(PKT(pktlast) - PKT(chpktmax)))<1000 ) && debug ) printf(" look for up %i %i %i nevent %u (nevent-1-it) %i \n",it,pktlast,chpktmax,nevent,(Int_t)(nevent-1-it)); it += tjump; }; if ( tjump > 1 ) it -= 2*tjump; @@ -682,8 +702,10 @@ tjump = 50000; //tjump = 100; while ( tjump > 0 ){ - pktlast = 0; - while ( pktlast < chpktmin && it < (Int_t)nevent ){ + // 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); ph = eh->GetPscuHeader(); @@ -1125,7 +1147,15 @@ stringstream oss; // oss.str(""); - oss << "INSERT INTO _RUNID_GEN VALUES (NULL);"; + if ( chewbacca ){// if chewbacca and tag=none then use chewbacca tag (chiby = chewbacca inserted by), if chewbacca and tag!=none then use tag, if not chewbacca use tag. + if ( !strcmp(tag.Data(),"NONE") ){ + oss << "INSERT INTO _RUNID_GEN VALUES (NULL,'"<< chiby.Data() <<"');"; + } else { + oss << "INSERT INTO _RUNID_GEN VALUES (NULL,'"<< tag.Data() <<"');"; + }; + } else { + oss << "INSERT INTO _RUNID_GEN VALUES (NULL,'"<< tag.Data() <<"');"; + }; result = conn->Query(oss.str().c_str()); if ( !result ) throw -10; oss.str(""); @@ -1330,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()); }; @@ -1464,30 +1494,6 @@ // PUBLIC FUNCTIONS // -// /** -// * Insert a new row into GL_RAW table. -// */ -// Int_t PamelaDBOperations::insertPamelaRawFile(){ -// // -// stringstream oss; -// // -// Bool_t idr = this->SetID_RAW(); -// if ( idr ) return(1); -// // -// oss.str(""); -// if ( STATIC ){ -// oss << "INSERT INTO GL_RAW (PATH, NAME) VALUES ('" -// << this->GetRawPath().Data() << "', '" << this->GetRawFile().Data() << "')"; -// } else { -// oss << "INSERT INTO GL_RAW (PATH, NAME) VALUES ('$PAM_RAW', '" << this->GetRawFile().Data() << "')"; -// }; -// if ( conn->Query(oss.str().c_str()) == 0 ) throw -4; -// // -// idr = this->SetID_RAW(); -// if ( !idr ) throw -11; -// // -// return(0); -// } /** * Insert a new row into GL_RAW table. */ @@ -1501,7 +1507,8 @@ glraw.PATH = GetRawPath(); glraw.NAME = GetRawFile(); - glraw.BOOT_NUMBER = 0;//??? + // glraw.BOOT_NUMBER = 0;//??? + glraw.BOOT_NUMBER = this->GetBOOTnumber(); if( insertPamelaRawFile(&glraw) )return(1); // @@ -1515,7 +1522,7 @@ */ Int_t PamelaDBOperations::insertPamelaRawFile(GL_RAW *glraw){ // - if(!glraw)return(1);//?? + if(!glraw)return(1);//?? ok I think // stringstream oss; // @@ -1578,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; @@ -1852,104 +1860,6 @@ return(signal); } -// /** -// * Insert all the new rows into GL_ROOT. -// * The raw file indicates in the parameters should be already been stored in the database. -// */ -// Int_t PamelaDBOperations::insertPamelaRootFile(){ -// stringstream oss; -// TSQLResult *result = 0; -// TSQLRow *row = 0; -// UInt_t idtimesync = 0; -// // -// // -// if ( chewbacca ){ -// oss.str(""); -// oss << " SELECT ID FROM GL_TIMESYNC where TIMESYNC="<Query(oss.str().c_str()); -// // -// if ( !result ) throw -3; -// // -// row = result->Next(); -// // -// if ( !row ) throw -3; -// idtimesync = (UInt_t)atoll(row->GetField(0)); -// } else { -// oss.str(""); -// if ( STATIC ){ -// oss << " SELECT COUNT(GL_ROOT.ID_RAW),GL_RAW.ID,GL_ROOT.ID FROM GL_RAW " -// << " LEFT JOIN GL_ROOT " -// << " ON GL_RAW.ID = GL_ROOT.ID_RAW " -// << " WHERE GL_RAW.PATH = '" << this->GetRawPath().Data() << "' AND " -// << " GL_RAW.NAME = '" << this->GetRawFile().Data() << "' GROUP BY GL_RAW.ID "; -// } else { -// oss << " SELECT COUNT(GL_ROOT.ID_RAW),GL_RAW.ID,GL_ROOT.ID FROM GL_RAW " -// << " LEFT JOIN GL_ROOT " -// << " ON GL_RAW.ID = GL_ROOT.ID_RAW " -// << " WHERE GL_RAW.PATH = '$PAM_RAW' AND " -// << " GL_RAW.NAME = '" << this->GetRawFile().Data() << "' GROUP BY GL_RAW.ID "; -// }; -// result = conn->Query(oss.str().c_str()); -// // -// if ( !result ) throw -12; -// // -// row = result->Next(); -// // -// if ( !row ) throw -10; -// if ( row != NULL && (UInt_t)atoll(row->GetField(0))>0 ){ -// idroot = (UInt_t)atoll(row->GetField(2)); -// return(1); -// }; -// // -// // determine which timesync has to be used -// // -// oss.str(""); -// oss << "SELECT GL_TIMESYNC.ID FROM GL_TIMESYNC LEFT JOIN GL_RAW ON GL_RAW.ID = GL_TIMESYNC.ID_RAW ORDER BY GL_TIMESYNC.ID DESC LIMIT 1;"; -// result = conn->Query(oss.str().c_str()); -// // -// if ( !result ) throw -3; -// // -// row = result->Next(); -// // -// if ( !row ) throw -3; -// idtimesync = (UInt_t)atoll(row->GetField(0)); -// }; -// // -// oss.str(""); -// if ( STATIC ){ -// oss << "INSERT INTO GL_ROOT (ID_RAW, ID_TIMESYNC,PATH, NAME) VALUES ('" -// << this->GetID_RAW() << "', '" << idtimesync << "', '" << this->GetRootPath().Data() << "', '" << this->GetRootFile().Data() << "')"; -// } else { -// oss << "INSERT INTO GL_ROOT (ID_RAW, ID_TIMESYNC,PATH, NAME) VALUES ('" -// << this->GetID_RAW() << "', '" << idtimesync << "', '$PAM_L0', '" << this->GetRootFile().Data() << "')"; -// }; -// // -// if ( debug ) printf(" query is %s \n",oss.str().c_str()); -// if (conn->Query(oss.str().c_str()) == 0) throw -4; -// // -// delete result; -// // -// oss.str(""); -// // oss << "SELECT ID FROM GL_ROOT WHERE ID_RAW=" << this->GetID_RAW() << ";"; -// if ( STATIC ){ -// oss << "SELECT ID FROM GL_ROOT WHERE PATH='" << this->GetRootPath().Data() << "' and NAME='"<< this->GetRootFile().Data() <<"';"; -// } else { -// oss << "SELECT ID FROM GL_ROOT WHERE PATH='$PAM_L0' and NAME='"<< this->GetRootFile().Data() <<"';"; -// }; -// // -// if ( debug ) printf(" query is %s \n",oss.str().c_str()); -// result = conn->Query(oss.str().c_str()); -// if ( !result ) throw -12; -// row = result->Next(); -// if ( !row ) throw -3; -// this->SetID_ROOT((UInt_t)atoll(row->GetField(0))); -// if ( debug ) printf(" The ID of the ROOT file is %u \n",this->GetID_ROOT()); -// // -// delete result; -// // -// return(0); -// } /** * Insert all the new rows into GL_ROOT. * The raw file indicates in the parameters should be already been stored in the database. @@ -1959,7 +1869,7 @@ stringstream oss; TSQLResult *result = 0; TSQLRow *row = 0; - // + // // ---------------------- // determine the timesync // ---------------------- @@ -2031,7 +1941,15 @@ glroot.ID_RAW = GetID_RAW(); glroot.ID_TIMESYNC = idtimesync; - glroot.PATH = GetRootPath(); + if ( STATIC ){ + glroot.PATH = GetRootPath(); + } else { + if ( KEEPENV ){ + glroot.PATH = gSystem->DirName(filerootname.Data()); + } else { + glroot.PATH = "$PAM_L0"; + }; + }; glroot.NAME = GetRootFile(); if ( insertPamelaRootFile(&glroot) )return 1; @@ -2046,22 +1964,14 @@ * The raw file indicates in the parameters should be already been stored in the database. */ Int_t PamelaDBOperations::insertPamelaRootFile(GL_ROOT *glroot){ - - - stringstream oss; TSQLResult *result = 0; TSQLRow *row = 0; // // oss.str(""); - if ( STATIC ){ - oss << "INSERT INTO GL_ROOT (ID_RAW, ID_TIMESYNC,PATH, NAME) VALUES ('" - << glroot->ID_RAW << "', '" << glroot->ID_TIMESYNC << "', '" << glroot->PATH << "', '" << glroot->NAME << "')"; - } else { - oss << "INSERT INTO GL_ROOT (ID_RAW, ID_TIMESYNC,PATH, NAME) VALUES ('" - << glroot->ID_RAW << "', '" << glroot->ID_TIMESYNC << "', '$PAM_L0', '" << glroot->NAME << "')"; - }; + oss << "INSERT INTO GL_ROOT (ID_RAW, ID_TIMESYNC,PATH, NAME) VALUES ('" + << glroot->ID_RAW << "', '" << glroot->ID_TIMESYNC << "', '" << glroot->PATH << "', '" << glroot->NAME << "')"; // if ( debug ) printf("%s \n",oss.str().c_str()); if (conn->Query(oss.str().c_str()) == 0) throw -4; @@ -2070,11 +1980,7 @@ // oss.str(""); // oss << "SELECT ID FROM GL_ROOT WHERE ID_RAW=" << this->GetID_RAW() << ";"; - if ( STATIC ){ - oss << "SELECT ID FROM GL_ROOT WHERE PATH='" << glroot->PATH << "' and NAME='"<< glroot->NAME <<"';"; - } else { - oss << "SELECT ID FROM GL_ROOT WHERE PATH='$PAM_L0' and NAME='"<< glroot->NAME <<"';"; - }; + oss << "SELECT ID FROM GL_ROOT WHERE PATH='" << glroot->PATH << "' and NAME='"<< glroot->NAME <<"';"; // if ( debug ) printf("%s \n",oss.str().c_str()); result = conn->Query(oss.str().c_str()); @@ -2420,6 +2326,7 @@ // this->HandleRunFragments(true,true,chminentry,(evbefh)); // + // what about pth=ptht-1 }; }; // @@ -2482,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 ){ rh->GetEntry(ptht); + //pth++; + //if ( pth < rhev ){ + //rh->GetEntry(pth); phh = ehh->GetPscuHeader(); pkth = phh->GetCounter(); obth = phh->GetOrbitalTime(); @@ -2509,9 +2420,10 @@ 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); + // 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); @@ -3345,7 +3257,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 // @@ -3355,6 +3267,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++){ // @@ -3363,9 +3277,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 ){ // @@ -3449,18 +3369,6 @@ // this->HandleRunFragments(true,mistrail,firstentry,lastentry); // cannot call it here since it enters a loop which will destroy the already stored variables if we arrive here from HandleRunFragments // - - - - - - - - - - - - mishead = true; @@ -3780,37 +3688,6 @@ }; // EEE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - } else { if ( !IsRunAlreadyInserted() ){ glrun->SetID(this->AssignRunID()); @@ -3825,6 +3702,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; @@ -4641,152 +4526,6 @@ return(0); }; -// /** -// * Fill the GL_TRK_CALIB table -// */ -// void PamelaDBOperations::HandleTRK_CALIB(Bool_t pk1, Bool_t pk2){ -// // -// TSQLResult *result = 0; -// TSQLRow *row = 0; -// // -// stringstream oss; -// oss.str(""); -// // -// UInt_t totime = 0; -// // -// if ( !pk1 && !pk2 ){ -// if ( IsDebug() ) printf(" Cannot handle trk calibration with both packet missing!\n"); -// return; -// }; -// // -// // check if the calibration has already been inserted -// // -// oss.str(""); -// oss << " SELECT ID FROM GL_TRK_CALIB WHERE " -// << " BOOT_NUMBER = "<< this->GetBOOTnumber(); // -// oss << " AND ( ( "; -// if ( pk1 ){ -// oss << " OBT1 = "<< obt1 << " AND " -// << " PKT1 = "<< pkt1 -// << " ) OR ( "; -// } else { -// oss << " PKT1 = "<< pkt2-1 -// << " ) OR ( "; -// }; -// if ( pk2 ){ -// oss << " OBT2 = "<< obt2 << " AND " -// << " PKT2 = "<< pkt2; -// } else { -// oss << " PKT2 = "<< pkt1+1; -// }; -// oss << " ) );"; -// // -// if ( IsDebug() ) printf(" Check if the trk calibration has already been inserted: query is \n %s \n",oss.str().c_str()); -// result = conn->Query(oss.str().c_str()); -// // -// if ( !result ) throw -4; -// // -// row = result->Next(); -// // -// if ( row ){ -// // -// if ( IsDebug() ) printf(" Trk calibration already inserted in the DB\n"); -// if ( PEDANTIC ) throw -80; -// // -// } else { -// // -// // we have to insert a new calibration, check where to place it -// // -// oss.str(""); -// oss << " SELECT ID,TO_TIME FROM GL_TRK_CALIB WHERE " -// << " FROM_TIME < "<< fromtime << " AND " -// << " TO_TIME > "<< fromtime << ";"; -// // -// if ( IsDebug() ) printf(" Check where to place the trk calibration: query is \n %s \n",oss.str().c_str()); -// result = conn->Query(oss.str().c_str()); -// // -// if ( !result ) throw -4; -// // -// row = result->Next(); -// // -// if ( !row ){ -// // -// // no calibrations in the db contain our calibration -// // -// if ( IsDebug() ) printf(" Calibration with fromtime lower than others to be inserted in the DB\n"); -// if ( fromtime < 1150871000 ) fromtime = 0; // the first flight calibration was taken at about 1150863300 s, this line allows to analyze first runs in raw mode -// // -// oss.str(""); -// oss << " SELECT FROM_TIME FROM GL_TRK_CALIB WHERE " -// << " FROM_TIME > "<< fromtime << " ORDER BY FROM_TIME ASC LIMIT 1;"; -// // -// if ( IsDebug() ) printf(" Check the upper limit for calibration: query is \n %s \n",oss.str().c_str()); -// result = conn->Query(oss.str().c_str()); -// // -// if ( !result ) throw -4; -// // -// row = result->Next(); -// if ( !row ){ -// totime = numeric_limits::max(); -// } else { -// totime = (UInt_t)atoll(row->GetField(0)); -// }; -// // -// } else { -// // -// // determine upper and lower limits and make space for the new calibration -// // -// totime = (UInt_t)atoll(row->GetField(1)); -// // -// oss.str(""); -// oss << " UPDATE GL_TRK_CALIB SET " -// << " TO_TIME = "<< fromtime << " WHERE " // NOTICE: to_time is equal to from_time of the calibration before, so the interval is: [from_time,to_time[ -// << " ID = "<< row->GetField(0) << ";"; -// // -// if ( IsDebug() ) printf(" Make space for the new trk calibration: query is \n %s \n",oss.str().c_str()); -// result = conn->Query(oss.str().c_str()); -// // -// if ( !result ) throw -4; -// // -// }; -// // -// oss.str(""); -// oss << " INSERT INTO GL_TRK_CALIB (ID,ID_ROOT_L0,EV_ROOT_CALIBTRK1,EV_ROOT_CALIBTRK2,FROM_TIME,TO_TIME,OBT1,PKT1,OBT2,PKT2,BOOT_NUMBER,VALIDATION) " -// << " VALUES (NULL,' " -// << idroot << "',"; -// // -// if ( !pk1 ){ -// oss << "NULL,"; -// } else { -// oss << "'" -// << t1 << "',"; -// }; -// // -// if ( !pk2 ){ -// oss << "NULL,'"; -// } else { -// oss << "'" -// << t2 << "','"; -// }; -// // -// oss << fromtime << "','" -// << totime << "','" -// << obt1 << "','" -// << pkt1 << "','" -// << obt2 << "','" -// << pkt2 << "','" -// << this->GetBOOTnumber() << "','" -// << valid << "');"; -// // -// if ( IsDebug() ) printf(" Insert the new trk calibration: query is \n %s \n",oss.str().c_str()); -// // -// result = conn->Query(oss.str().c_str()); -// // -// if ( !result ) throw -4; -// // -// }; -// // -// }; /** * Fill the GL_TRK_CALIB table */ @@ -5187,20 +4926,22 @@ // }; // + + if( !(MISSING_pkt1&MISSING_pkt2) ){ + this->HandleTRK_CALIB(!MISSING_pkt1,!MISSING_pkt2); + ncalib++; + if( MISSING_pkt1||MISSING_pkt2||!valid )try_to_recover=true; + } + + } else { - // + // if ( IsDebug() ) printf(" Trk calibration1 at time %u obt %u pkt %u OUTSIDE the considered time interval \n",fromtime,obt1,pkt1); // if ( PEDANTIC ) throw -79; // }; // - if( !(MISSING_pkt1&MISSING_pkt2) ){ - this->HandleTRK_CALIB(!MISSING_pkt1,!MISSING_pkt2); - ncalib++; - if( MISSING_pkt1||MISSING_pkt2||!valid )try_to_recover=true; - } - }; //end loop on pkt1 @@ -5416,16 +5157,17 @@ if ( IsDebug() ) cout << "- - - - - - - - - - -" <ExpandPathName(path.Data())).Data(),name.Data()); + TFile *file = new TFile(((TString)gSystem->ExpandPathName(path.Data()))+"/"+name); // EM, path could be symbolic and we must expand it if(!file)throw -100; if(file->IsZombie())throw -100; // @@ -5495,32 +5237,32 @@ // // check if the raw file already exist // - UInt_t id_raw = 0; - oss.str(""); - oss << "SELECT ID FROM GL_RAW where NAME=\"" << gSystem->BaseName(raw.Data()) <<"\";"; - if ( IsDebug() ) cout << oss.str().c_str() << endl; + UInt_t id_raw = 0; // EM GL_RAW is there only for backward compatibility so we do not need to fill it when in "chewbacca" mode +// oss.str(""); +// oss << "SELECT ID FROM GL_RAW where NAME=\"" << gSystem->BaseName(raw.Data()) <<"\";"; +// if ( IsDebug() ) cout << oss.str().c_str() << endl; - result = conn->Query(oss.str().c_str()); - if ( !result ) throw -4;; - if ( IsDebug() ) cout <<"Rows: "<GetRowCount()<GetRowCount() == 0){ - if ( IsDebug() ) cout << " << Insert new RAW file >> "<DirName(raw.Data()); - glraw.NAME = gSystem->BaseName(raw.Data()); - glraw.BOOT_NUMBER = boot_number; - // - insertPamelaRawFile( &glraw ); - // - id_raw = glraw.ID; - }else{ - row = result->Next(); - id_raw = (UInt_t)atoll(row->GetField(0)); - } - if ( IsDebug() ) cout << "ID_RAW = "<Query(oss.str().c_str()); +// if ( !result ) throw -4;; +// if ( IsDebug() ) cout <<"Rows: "<GetRowCount()<GetRowCount() == 0){ +// if ( IsDebug() ) cout << " << Insert new RAW file >> "<DirName(raw.Data()); +// glraw.NAME = gSystem->BaseName(raw.Data()); +// glraw.BOOT_NUMBER = boot_number; +// // +// insertPamelaRawFile( &glraw ); +// // +// id_raw = glraw.ID; +// }else{ +// row = result->Next(); +// id_raw = (UInt_t)atoll(row->GetField(0)); +// } +// if ( IsDebug() ) cout << "ID_RAW = "<ExpandPathName(path); + } else { + if ( KEEPENV ){ + glroot.PATH = path; + } else { + glroot.PATH = "$PAM_L0"; + }; + }; + // glroot.PATH = path; glroot.NAME = name; // insertPamelaRootFile( &glroot ); @@ -6336,7 +6091,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()); @@ -6479,7 +6235,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; } @@ -6500,8 +6257,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; }; //-------------- @@ -6531,14 +6293,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, @@ -6555,9 +6320,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 }; @@ -6567,7 +6334,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); }; /** @@ -6576,6 +6345,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(""); @@ -6772,7 +6545,7 @@ stringstream myquery; // myquery.str(""); - myquery << " SELECT ID, ID_RAW FROM GL_ROOT where NAME='"<Query(myquery.str().c_str()); // @@ -6788,6 +6561,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(); // @@ -6795,7 +6569,7 @@ // this->RemoveRUNS(); // - this->RemoveFILES(); + this->RemoveFILES(idtsy); // this->SetID_ROOT(0); this->SetID_RAW(0); @@ -7015,7 +6789,7 @@ * Rearrange calibration tables * **/ -void PamelaDBOperations::RemoveFILES(){ +void PamelaDBOperations::RemoveFILES(UInt_t idtsy){ stringstream myquery; // myquery.str(""); @@ -7025,6 +6799,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()); + }; + // }; /** @@ -7374,120 +7164,6 @@ } -// UInt_t PamelaDBOperations::ValidateTrkCalib( CalibTrk1Event* caltrk, EventHeader *eh ){ - -// if(!caltrk || !eh) return 0; - -// Int_t vorder[]={5,5,3,3,4,4,2,2,1,1,0,0}; -// UInt_t timeaftercalib=120000; //2000; -// // ---------- -// // Check CRCs -// // ---------- -// for(Int_t ipkt=0; ipkt<6; ipkt++){ -// if( caltrk->crc_hcal[ipkt] )return 0; // :-( -// for(Int_t ilad=0; ilad<3; ilad++)if( caltrk->crc_cal[ipkt][ilad] )return 0; // :-( -// } -// // ----------------------- -// // Check missing packets: -// // ----------------------- -// // Readout order: -// // ------------------ -// // DSP packet board -// // ------------------ -// // 12 0 1 -// // 10 1 1 -// // 8 2 1 -// // 4 3 1 -// // 6 4 1 -// // 2 5 1 -// // ------------------ -// // 11 0 2 -// // 9 1 2 -// // 7 2 2 -// // 3 3 2 -// // 5 4 2 -// // 1 5 2 -// // ------------------ -// // ------------------------------------------------- -// // Check if it is first or second calibration packet -// // ------------------------------------------------- -// UInt_t build=0; -// TString classname = caltrk->GetName(); -// UInt_t base=0; -// UInt_t mask=0; -// if(classname.Contains("CalibTrk1Event")){ -// base=12; -// mask=0x03F000; -// } -// if(classname.Contains("CalibTrk2Event")){ -// base=18; -// mask=0xFC0000; -// } -// // ------------------------------------------------- -// // Count number of packets and set build variable -// // ------------------------------------------------- -// Int_t npkts=0; -// for(Int_t ipkt=0; ipkt<6; ipkt++){ -// if(caltrk->DSPnumber[ipkt]>0 && caltrk->DSPnumber[ipkt]<=12){ -// npkts++; -// build = build | ( 1<<(base+vorder[caltrk->DSPnumber[ipkt]-1]) ); -// } -// } -// // if( npkts==6 )return 1; // :-) - -// // cout << classname << " "<GetPscuHeader()->GetOrbitalTime()<GetCounter(); -// Int_t irun = cod->Get(pctp->RunHeader); -// TTree *rh=(TTree*)file->Get("RunHeader"); -// if ( !rh || rh->IsZombie() ) throw -17; -// if( rh->GetEntries() == irun ){ -// if ( IsDebug() ) cout << "ValidateTrkCalib: (MISSING VIEW) no runs after calib (1) -- cannot validate :-( "<SetBranchAddress("RunHeader", &run); -// rh->SetBranchAddress("Header", &hrun); -// rh->GetEntry(irun); -// // cout << classname << " "<GetPscuHeader()->GetOrbitalTime() << " Run " << hrun->GetPscuHeader()->GetOrbitalTime() <GetPscuHeader()->GetOrbitalTime()) < OBT(eh->GetPscuHeader()->GetOrbitalTime())){ -// if ( IsDebug() ) cout << "ValidateTrkCalib: (MISSING VIEW) no runs after calib (2) -- cannot validate :-( "<RM_ACQ_AFTER_CALIB ){ -// if ( IsDebug() ) cout << "ValidateTrkCalib: (MISSING VIEW) RM_ACQ_AFTER_CALIB=0 -- cannot validate :-( "<GetPscuHeader()->GetOrbitalTime()) - OBT(eh->GetPscuHeader()->GetOrbitalTime()); -// if( dtime > timeaftercalib ){ -// if ( IsDebug() ) cout << "ValidateTrkCalib: (MISSING VIEW) run after calib too far ( "<ACQ_BUILD_INFO & mask) != build ){ -// if ( IsDebug() ) cout << "ValidateTrkCalib: (MISSING VIEW) ACQ_BUILD_INFO= >>> "<ACQ_BUILD_INFO&mask) << " != "<< build << dec<