00001
00002 #include "RunQualityFinder.h"
00003
00004 #include "MessageService/MsgService.h"
00005
00006 #include <cmath>
00007
00008 ClassImp(RunQualityFinder)
00009
00010 CVSID("$Id: RunQualityFinder.cxx,v 1.11 2010/02/03 00:34:03 blake Exp $");
00011
00012 RunQualityFinder* RunQualityFinder::fMyInstance = 0;
00013
00014 RunQualityFinder& RunQualityFinder::Instance()
00015 {
00016 MSG("RunQuality",Msg::kDebug) << " *** RunQualityFinder::Instance() *** " << endl;
00017
00018
00019 static Cleaner cleaner;
00020
00021
00022 if(!fMyInstance){
00023 MSG("RunQuality", Msg::kDebug) << " Creating new instance of RunQualityFinder " << endl;
00024 cleaner.UseMe();
00025 fMyInstance = new RunQualityFinder();
00026 }
00027
00028
00029 if(!fMyInstance){
00030 MSG("RunQuality", Msg::kFatal) << " No RunQualityFinder Instance - aagghhh, I'm going to die!!!." << endl;
00031 assert(fMyInstance);
00032 }
00033
00034
00035 if(fMyInstance){
00036
00037 }
00038
00039 return *fMyInstance;
00040 }
00041
00042 void RunQualityFinder::OverrideDB( Bool_t override )
00043 {
00044 RunQualityFinder::Instance().SetOverrideDB(override);
00045
00046 MSG("RunQuality", Msg::kDebug) << " Setting: OverrideDB=" << override << endl;
00047 MSG("RunQuality", Msg::kDebug) << " Check: OverrideDB=" << RunQualityFinder::Instance().GetOverrideDB() << endl;
00048
00049 return;
00050 }
00051
00052 RunQualityFinder::RunQualityFinder()
00053 {
00054 MSG("RunQuality",Msg::kVerbose) << " *** RunQualityFinder::RunQualityFinder() *** " << endl;
00055
00056 fStartTime = -1;
00057 fEndTime = -1;
00058 fRun = 0;
00059 fSubRun = 0;
00060 fDetector = 0;
00061
00062 fDbiTaskNear = 1;
00063 fDbiTaskFar = 0;
00064 fOverrideDB = 0;
00065
00066 fRunStatus = RunStatus::kUnknown;
00067 fRunStatusResult = RunStatus::kUnknown;
00068 }
00069
00070 RunQualityFinder::~RunQualityFinder()
00071 {
00072 MSG("RunQuality",Msg::kVerbose) << " *** RunQualityFinder::~RunQualityFinder() *** " << endl;
00073 }
00074
00075 Bool_t RunQualityFinder::IsOK(const VldContext& context)
00076 {
00077 MSG("RunQuality",Msg::kDebug) << " *** RunQualityFinder::IsOK(detector=" << context.GetDetector() << ",time=" << context.GetTimeStamp().GetSec() << ") *** " << endl;
00078
00079 this->QueryDB(context);
00080
00081 return fRunStatusResult&RunStatus::kOK;
00082 }
00083
00084 Bool_t RunQualityFinder::IsOK(const Detector::Detector_t detector, const UInt_t run, const UInt_t subrun)
00085 {
00086 MSG("RunQuality",Msg::kDebug) << " *** RunQualityFinder::IsOK(detector=" << detector << ",run=" << run << ",subrun=" << subrun << ") *** " << endl;
00087
00088 this->QueryDB(detector,run,subrun);
00089
00090 return fRunStatusResult&RunStatus::kOK;
00091 }
00092
00093 RunStatus::RunStatus_t RunQualityFinder::GetStatus(const VldContext& context)
00094 {
00095 MSG("RunQuality",Msg::kDebug) << " *** RunQualityFinder::GetStatus(detector=" << context.GetDetector() << ",time=" << context.GetTimeStamp().GetSec() << ") *** " << endl;
00096
00097 this->QueryDB(context);
00098
00099 return (RunStatus::RunStatus_t)fRunStatusResult;
00100 }
00101
00102 RunStatus::RunStatus_t RunQualityFinder::GetStatus(const Detector::Detector_t detector, const UInt_t run, const UInt_t subrun)
00103 {
00104 MSG("RunQuality",Msg::kDebug) << " *** RunQualityFinder::GetStatus(detector=" << detector << ",run=" << run << ",subrun=" << subrun << ") *** " << endl;
00105
00106 this->QueryDB(detector,run,subrun);
00107
00108 return (RunStatus::RunStatus_t)fRunStatusResult;
00109 }
00110
00111 UInt_t RunQualityFinder::GetRun(const VldContext& context)
00112 {
00113 MSG("RunQuality",Msg::kDebug) << " *** RunQualityFinder::GetRun(detector=" << context.GetDetector() << ",time=" << context.GetTimeStamp().GetSec() << ") *** " << endl;
00114
00115 this->QueryDB(context);
00116
00117 return fRun;
00118 }
00119
00120 UInt_t RunQualityFinder::GetSubRun(const VldContext& context)
00121 {
00122 MSG("RunQuality",Msg::kDebug) << " *** RunQualityFinder::GetSubRun(detector=" << context.GetDetector() << ",time=" << context.GetTimeStamp().GetSec() << ") *** " << endl;
00123
00124 this->QueryDB(context);
00125
00126 return fSubRun;
00127 }
00128
00129 void RunQualityFinder::QueryDB(const VldContext& context)
00130 {
00131 MSG("RunQuality",Msg::kDebug) << " *** RunQualityFinder::QueryDB(detector=" << context.GetDetector() << ",time=" << context.GetTimeStamp().GetSec() << ") *** " << endl;
00132
00133
00134
00135 fRunStatusResult = RunStatus::kUnknown;
00136
00137
00138
00139 if( context.GetSimFlag() != SimFlag::kData ){
00140 fRunStatusResult = RunStatus::kOK;
00141 return;
00142 }
00143
00144
00145
00146 if( context.GetDetector() == Detector::kFar ){
00147 MSG("RunQuality",Msg::kDebug) << " far detector: searching DBUFARRUNQUALITY database... " << endl;
00148 MSG("RunQuality",Msg::kDebug) << " using task: 0 " << endl;
00149
00150
00151 if( fDetector==Detector::kFar
00152 && context.GetTimeStamp().GetSec()>=fStartTime
00153 && context.GetTimeStamp().GetSec()<=fEndTime ){
00154 MSG("RunQuality",Msg::kDebug) << " returning previous result: " << endl;
00155 MSG("RunQuality",Msg::kDebug) << " run=" << fRun << "/" << fSubRun << endl;
00156 MSG("RunQuality",Msg::kDebug) << " status=" << fRunStatus << endl;
00157 MSG("RunQuality",Msg::kDebug) << " isok=" << (fRunStatus&RunStatus::kOK) << endl;
00158 fRunStatusResult = fRunStatus;
00159 }
00160
00161
00162 else{
00163 farquery.NewQuery(context,0);
00164
00165 MSG("RunQuality",Msg::kVerbose) << " found " << farquery.GetNumRows() << " entries " << endl;
00166
00167 fDetector = Detector::kFar;
00168 fRun = 0;
00169 fSubRun = 0;
00170 fStartTime = -1;
00171 fEndTime = -1;
00172 fRunStatus = RunStatus::kUnknown;
00173
00174 for( unsigned int i=0; i<farquery.GetNumRows(); i++ ){
00175 const DbuFarRunQuality* rowptr = farquery.GetRow(i);
00176 MSG("RunQuality",Msg::kVerbose) << " run=" << rowptr->GetRun() << "/" << rowptr->GetSubRun() << endl;
00177 MSG("RunQuality",Msg::kVerbose) << " start=" << rowptr->GetStartTime() << endl;
00178 MSG("RunQuality",Msg::kVerbose) << " end=" << rowptr->GetEndTime() << endl;
00179 MSG("RunQuality",Msg::kVerbose) << " goodrun=" << rowptr->GoodRun() << endl;
00180
00181 fRun = rowptr->GetRun(); fSubRun = rowptr->GetSubRun();
00182 if( fStartTime<0 || rowptr->GetStartTime().GetSec()<fStartTime ){
00183 fStartTime = rowptr->GetStartTime().GetSec(); }
00184 if( rowptr->GetEndTime().GetSec()>fEndTime ){
00185 fEndTime = rowptr->GetEndTime().GetSec(); }
00186
00187 if( ( rowptr->GoodRun()
00188 && !this->RejectRun(fDetector,fRun,fSubRun) )
00189 || ( this->RecoverRun(fDetector,fRun,fSubRun) ) ){
00190 if( fRunStatus==RunStatus::kUnknown ){
00191 fRunStatus = RunStatus::kOK;
00192 }
00193 }
00194 else{
00195 if( fRunStatus==RunStatus::kOK ){
00196 fRunStatus = RunStatus::kUnknown;
00197 }
00198 fRunStatus |= RunStatus::kBad;
00199 if( !rowptr->GoodRunType() ) fRunStatus |= RunStatus::kBadRunType;
00200 if( !rowptr->GoodReadout() ) fRunStatus |= RunStatus::kBadReadout;
00201 if( rowptr->Short() ) fRunStatus |= RunStatus::kShort;
00202 if( rowptr->LowRate() ) fRunStatus |= RunStatus::kLowRate;
00203 if( rowptr->HighRate() ) fRunStatus |= RunStatus::kHighRate;
00204 }
00205 }
00206
00207 MSG("RunQuality",Msg::kDebug) << " returning result:" << endl;
00208 MSG("RunQuality",Msg::kDebug) << " run=" << fRun << "/" << fSubRun << endl;
00209 MSG("RunQuality",Msg::kDebug) << " status=" << fRunStatus << endl;
00210 MSG("RunQuality",Msg::kDebug) << " isok=" << (fRunStatus&RunStatus::kOK) << endl;
00211 fRunStatusResult = fRunStatus;
00212 }
00213
00214 return;
00215 }
00216
00217
00218
00219 if( context.GetDetector() == Detector::kNear ){
00220 MSG("RunQuality",Msg::kDebug) << " near detector: searching DBUNEARRUNQUALITY database... " << endl;
00221 MSG("RunQuality",Msg::kDebug) << " using task: " << fDbiTaskNear << endl;
00222
00223
00224 if( fDetector==Detector::kNear
00225 && context.GetTimeStamp().GetSec()>=fStartTime
00226 && context.GetTimeStamp().GetSec()<fEndTime ){
00227 MSG("RunQuality",Msg::kDebug) << " returning previous result: " << endl;
00228 MSG("RunQuality",Msg::kDebug) << " run=" << fRun << "/" << fSubRun << endl;
00229 MSG("RunQuality",Msg::kDebug) << " status=" << fRunStatus << endl;
00230 MSG("RunQuality",Msg::kDebug) << " isok=" << (fRunStatus&RunStatus::kOK) << endl;
00231 fRunStatusResult = fRunStatus;
00232 }
00233
00234
00235 else{
00236 nearquery.NewQuery(context,fDbiTaskNear);
00237
00238 MSG("RunQuality",Msg::kVerbose) << " found " << nearquery.GetNumRows() << " entries " << endl;
00239
00240 fDetector = Detector::kNear;
00241 fRun = 0;
00242 fSubRun = 0;
00243 fStartTime = -1;
00244 fEndTime = -1;
00245 fRunStatus = RunStatus::kUnknown;
00246
00247 for( unsigned int i=0; i<nearquery.GetNumRows(); i++ ){
00248 const DbuNearRunQuality* rowptr = nearquery.GetRow(i);
00249 MSG("RunQuality",Msg::kVerbose) << " run=" << rowptr->GetRun() << "/" << rowptr->GetSubRun() << endl;
00250 MSG("RunQuality",Msg::kVerbose) << " start=" << rowptr->GetStartTime() << endl;
00251 MSG("RunQuality",Msg::kVerbose) << " end=" << rowptr->GetEndTime() << endl;
00252 MSG("RunQuality",Msg::kVerbose) << " goodrun=" << rowptr->GoodRun(fDbiTaskNear) << endl;
00253
00254 fRun = rowptr->GetRun(); fSubRun = rowptr->GetSubRun();
00255 if( fStartTime<0 || rowptr->GetStartTime().GetSec()<fStartTime ){
00256 fStartTime = rowptr->GetStartTime().GetSec(); }
00257 if( rowptr->GetEndTime().GetSec()>fEndTime ){
00258 fEndTime = rowptr->GetEndTime().GetSec(); }
00259
00260 if( ( rowptr->GoodRun(fDbiTaskNear)
00261 && !this->RejectRun(fDetector,fRun,fSubRun) )
00262 || ( this->RecoverRun(fDetector,fRun,fSubRun) ) ){
00263 if( fRunStatus==RunStatus::kUnknown ){
00264 fRunStatus = RunStatus::kOK;
00265 }
00266 }
00267 else{
00268 if( fRunStatus==RunStatus::kOK ){
00269 fRunStatus = RunStatus::kUnknown;
00270 }
00271 fRunStatus |= RunStatus::kBad;
00272 if( !rowptr->GoodRunType(fDbiTaskNear) ) fRunStatus |= RunStatus::kBadRunType;
00273 if( !rowptr->GoodReadout(fDbiTaskNear) ) fRunStatus |= RunStatus::kBadReadout;
00274 if( rowptr->Short(fDbiTaskNear) ) fRunStatus |= RunStatus::kShort;
00275 if( rowptr->LowRate(fDbiTaskNear) ) fRunStatus |= RunStatus::kLowRate;
00276 if( rowptr->HighRate(fDbiTaskNear) ) fRunStatus |= RunStatus::kHighRate;
00277 if( rowptr->LIRate(fDbiTaskNear) ) fRunStatus |= RunStatus::kLIRate;
00278 if( rowptr->ColdReadout(fDbiTaskNear) ) fRunStatus |= RunStatus::kColdReadout;
00279 if( rowptr->HotReadout(fDbiTaskNear) )fRunStatus |= RunStatus::kHotReadout;
00280 if( rowptr->BadSpillWindow(fDbiTaskNear) ) fRunStatus |= RunStatus::kBadSpillWindow;
00281 if( rowptr->BadReadoutErrors(fDbiTaskNear) ) fRunStatus |= RunStatus::kBadReadoutErrors;
00282 if( rowptr->HighADC(fDbiTaskNear) ) fRunStatus |= RunStatus::kHighADC;
00283 }
00284 }
00285
00286 MSG("RunQuality",Msg::kDebug) << " returning result: " << endl;
00287 MSG("RunQuality",Msg::kDebug) << " run=" << fRun << "/" << fSubRun << endl;
00288 MSG("RunQuality",Msg::kDebug) << " status=" << fRunStatus << endl;
00289 MSG("RunQuality",Msg::kDebug) << " isok=" << (fRunStatus&RunStatus::kOK) << endl;
00290 fRunStatusResult = fRunStatus;
00291 }
00292 return;
00293 }
00294
00295 return;
00296 }
00297
00298 void RunQualityFinder::QueryDB(const Detector::Detector_t detector, const UInt_t run, const UInt_t subrun)
00299 {
00300 MSG("RunQuality",Msg::kVerbose) << " *** RunQualityFinder::QueryDB(detector=" << detector << ",run=" << run << ",subrun=" << subrun<< ") *** " << endl;
00301
00302
00303
00304 fRunStatusResult = RunStatus::kUnknown;
00305
00306
00307
00308 if( detector == Detector::kFar ){
00309 MSG("RunQuality",Msg::kDebug) << " far detector: searching DBUFARRUNQUALITY database... " << endl;
00310 MSG("RunQuality",Msg::kDebug) << " using task: 0 " << endl;
00311
00312
00313 if( fDetector==detector
00314 && fRun==run && fSubRun==subrun ){
00315 MSG("RunQuality",Msg::kDebug) << " returning previous result: " << endl;
00316 MSG("RunQuality",Msg::kDebug) << " run=" << fRun << "/" << fSubRun << endl;
00317 MSG("RunQuality",Msg::kDebug) << " status=" << fRunStatus << endl;
00318 MSG("RunQuality",Msg::kDebug) << " isok=" << (fRunStatus&RunStatus::kOK) << endl;
00319 fRunStatusResult = fRunStatus;
00320 }
00321
00322
00323 else{
00324
00325 const char* sqltxt = Form("(AGGREGATENO=%d) and (TASK=%d) and (DETECTORMASK & %d) and (SIMMASK & %d)",run,0,Detector::kFar,SimFlag::kData);
00326 MSG("RunQuality",Msg::kVerbose) << " new query: " << sqltxt << endl;
00327 DbiSqlContext sqlcontext(sqltxt);
00328 farquery.NewQuery(sqlcontext);
00329 MSG("RunQuality",Msg::kVerbose) << " found " << farquery.GetNumRows() << " entries for run " << run << endl;
00330
00331 UInt_t index = DbuFarRunQuality::GetIndex(run,subrun);
00332 const DbuFarRunQuality* rowptr = farquery.GetRowByIndex(index);
00333 MSG("RunQuality",Msg::kVerbose) << " getting row by index: " << index << endl;
00334 if( rowptr ) MSG("RunQuality",Msg::kVerbose) << " found entry for run " << run << "/" << subrun << endl;
00335 else MSG("RunQuality",Msg::kVerbose) << " failed to find entry for run " << run << "/" << subrun << endl;
00336
00337 fDetector = Detector::kFar;
00338 fRun = 0;
00339 fSubRun = 0;
00340 fStartTime = -1;
00341 fEndTime = -1;
00342 fRunStatus = RunStatus::kUnknown;
00343
00344 if( rowptr ){
00345 MSG("RunQuality",Msg::kVerbose) << " run=" << rowptr->GetRun() << "/" << rowptr->GetSubRun() << endl;
00346 MSG("RunQuality",Msg::kVerbose) << " start=" << rowptr->GetStartTime() << endl;
00347 MSG("RunQuality",Msg::kVerbose) << " end=" << rowptr->GetEndTime() << endl;
00348 MSG("RunQuality",Msg::kVerbose) << " goodrun=" << rowptr->GoodRun() << endl;
00349
00350 fRun = rowptr->GetRun(); fSubRun = rowptr->GetSubRun();
00351 if( fStartTime<0 || rowptr->GetStartTime().GetSec()<fStartTime ){
00352 fStartTime = rowptr->GetStartTime().GetSec(); }
00353 if( rowptr->GetEndTime().GetSec()>fEndTime ){
00354 fEndTime = rowptr->GetEndTime().GetSec(); }
00355
00356 if( ( rowptr->GoodRun()
00357 && !this->RejectRun(fDetector,fRun,fSubRun) )
00358 || ( this->RecoverRun(fDetector,fRun,fSubRun) ) ){
00359 if( fRunStatus==RunStatus::kUnknown ){
00360 fRunStatus = RunStatus::kOK;
00361 }
00362 }
00363 else{
00364 if( fRunStatus==RunStatus::kOK ){
00365 fRunStatus = RunStatus::kUnknown;
00366 }
00367 fRunStatus |= RunStatus::kBad;
00368 if( !rowptr->GoodRunType() ) fRunStatus |= RunStatus::kBadRunType;
00369 if( !rowptr->GoodReadout() ) fRunStatus |= RunStatus::kBadReadout;
00370 if( rowptr->Short() ) fRunStatus |= RunStatus::kShort;
00371 if( rowptr->LowRate() ) fRunStatus |= RunStatus::kLowRate;
00372 if( rowptr->HighRate() ) fRunStatus |= RunStatus::kHighRate;
00373 }
00374 }
00375
00376 MSG("RunQuality",Msg::kDebug) << " returning result: " << endl;
00377 MSG("RunQuality",Msg::kDebug) << " run=" << fRun << "/" << fSubRun << endl;
00378 MSG("RunQuality",Msg::kDebug) << " status=" << fRunStatus << endl;
00379 MSG("RunQuality",Msg::kDebug) << " isok=" << (fRunStatus&RunStatus::kOK) << endl;
00380 fRunStatusResult = fRunStatus;
00381 }
00382
00383 return;
00384 }
00385
00386
00387
00388 if( detector == Detector::kNear ){
00389 MSG("RunQuality",Msg::kDebug) << " near detector: searching DBUNEARRUNQUALITY database... " << endl;
00390 MSG("RunQuality",Msg::kDebug) << " using task: " << fDbiTaskNear << endl;
00391
00392
00393 if( fDetector==detector
00394 && fRun==run && fSubRun==subrun ){
00395 MSG("RunQuality",Msg::kDebug) << " returning previous result: " << endl;
00396 MSG("RunQuality",Msg::kDebug) << " run=" << fRun << "/" << fSubRun << endl;
00397 MSG("RunQuality",Msg::kDebug) << " status=" << fRunStatus << endl;
00398 MSG("RunQuality",Msg::kDebug) << " isok=" << (fRunStatus&RunStatus::kOK) << endl;
00399 fRunStatusResult = fRunStatus;
00400 }
00401
00402
00403 else{
00404
00405 const char* sqltxt = Form("(AGGREGATENO=%d) and (TASK=%d) and (DETECTORMASK & %d) and (SIMMASK & %d)",run,fDbiTaskNear,Detector::kNear,SimFlag::kData);
00406 MSG("RunQuality",Msg::kVerbose) << " new query: " << sqltxt << endl;
00407 DbiSqlContext sqlcontext(sqltxt);
00408 nearquery.NewQuery(sqlcontext,fDbiTaskNear);
00409 MSG("RunQuality",Msg::kVerbose) << " found " << nearquery.GetNumRows() << " entries for run " << run << endl;
00410
00411 UInt_t index = DbuNearRunQuality::GetIndex(run,subrun);
00412 const DbuNearRunQuality* rowptr = nearquery.GetRowByIndex(index);
00413 MSG("RunQuality",Msg::kVerbose) << " getting row by index: " << index << endl;
00414 if( rowptr ) MSG("RunQuality",Msg::kVerbose) << " found entry for run " << run << "/" << subrun << endl;
00415 else MSG("RunQuality",Msg::kVerbose) << " failed to find entry for run " << run << "/" << subrun << endl;
00416
00417 fDetector = Detector::kNear;
00418 fRun = 0;
00419 fSubRun = 0;
00420 fStartTime = -1;
00421 fEndTime = -1;
00422 fRunStatus = RunStatus::kUnknown;
00423
00424 if( rowptr ){
00425 MSG("RunQuality",Msg::kVerbose) << " run=" << rowptr->GetRun() << "/" << rowptr->GetSubRun() << endl;
00426 MSG("RunQuality",Msg::kVerbose) << " start=" << rowptr->GetStartTime() << endl;
00427 MSG("RunQuality",Msg::kVerbose) << " end=" << rowptr->GetEndTime() << endl;
00428 MSG("RunQuality",Msg::kVerbose) << " goodrun=" << rowptr->GoodRun(fDbiTaskNear) << endl;
00429
00430 fRun = rowptr->GetRun(); fSubRun = rowptr->GetSubRun();
00431 if( fStartTime<0 || rowptr->GetStartTime().GetSec()<fStartTime ){
00432 fStartTime = rowptr->GetStartTime().GetSec(); }
00433 if( rowptr->GetEndTime().GetSec()>fEndTime ){
00434 fEndTime = rowptr->GetEndTime().GetSec(); }
00435
00436 if( ( rowptr->GoodRun(fDbiTaskNear)
00437 && !this->RejectRun(fDetector,fRun,fSubRun) )
00438 || ( this->RecoverRun(fDetector,fRun,fSubRun) ) ){
00439 if( fRunStatus==RunStatus::kUnknown ){
00440 fRunStatus = RunStatus::kOK;
00441 }
00442 }
00443 else{
00444 if( fRunStatus==RunStatus::kOK ){
00445 fRunStatus = RunStatus::kUnknown;
00446 }
00447 fRunStatus |= RunStatus::kBad;
00448 if( !rowptr->GoodRunType(fDbiTaskNear) ) fRunStatus |= RunStatus::kBadRunType;
00449 if( !rowptr->GoodReadout(fDbiTaskNear) ) fRunStatus |= RunStatus::kBadReadout;
00450 if( rowptr->Short(fDbiTaskNear) ) fRunStatus |= RunStatus::kShort;
00451 if( rowptr->LowRate(fDbiTaskNear) ) fRunStatus |= RunStatus::kLowRate;
00452 if( rowptr->HighRate(fDbiTaskNear) ) fRunStatus |= RunStatus::kHighRate;
00453 if( rowptr->LIRate(fDbiTaskNear) ) fRunStatus |= RunStatus::kLIRate;
00454 if( rowptr->ColdReadout(fDbiTaskNear) ) fRunStatus |= RunStatus::kColdReadout;
00455 if( rowptr->HotReadout(fDbiTaskNear) )fRunStatus |= RunStatus::kHotReadout;
00456 if( rowptr->BadSpillWindow(fDbiTaskNear) ) fRunStatus |= RunStatus::kBadSpillWindow;
00457 if( rowptr->BadReadoutErrors(fDbiTaskNear) ) fRunStatus |= RunStatus::kBadReadoutErrors;
00458 if( rowptr->HighADC(fDbiTaskNear) ) fRunStatus |= RunStatus::kHighADC;
00459 }
00460 }
00461
00462 MSG("RunQuality",Msg::kDebug) << " returning result:" << endl;
00463 MSG("RunQuality",Msg::kDebug) << " run=" << fRun << "/" << fSubRun << endl;
00464 MSG("RunQuality",Msg::kDebug) << " status=" << fRunStatus << endl;
00465 MSG("RunQuality",Msg::kDebug) << " isok=" << (fRunStatus&RunStatus::kOK) << endl;
00466 fRunStatusResult = fRunStatus;
00467 }
00468
00469 return;
00470 }
00471
00472 return;
00473 }
00474
00475 Bool_t RunQualityFinder::RejectRun(const UInt_t detector, const UInt_t run, const UInt_t subrun)
00476 {
00477
00478 if( fOverrideDB ){
00479 MSG("RunQuality",Msg::kDebug) << " *** RunQualityFinder::RejectRun(detector=" << detector << ",run=" << run << ",subrun=" << subrun<< ") *** " << endl;
00480 Bool_t rejectrun = 0;
00481
00482
00483 if( detector == Detector::kFar ){
00484
00485 }
00486
00487
00488 if( detector == Detector::kNear ){
00489
00490
00491
00492
00493 if( run==12947 || run==12950 ) rejectrun = 1;
00494
00495 }
00496
00497 MSG("RunQuality",Msg::kDebug) << " rejectrun=" << rejectrun << endl;
00498 return rejectrun;
00499 }
00500
00501 return 0;
00502 }
00503
00504 Bool_t RunQualityFinder::RecoverRun(const UInt_t detector, const UInt_t run, const UInt_t subrun)
00505 {
00506
00507 if( fOverrideDB ){
00508 MSG("RunQuality",Msg::kDebug) << " *** RunQualityFinder::RecoverRun(detector=" << detector << ",run=" << run << ",subrun=" << subrun<< ") *** " << endl;
00509 Bool_t recoverrun = 0;
00510
00511
00512 if( detector == Detector::kFar ){
00513
00514 }
00515
00516
00517 if( detector == Detector::kNear ){
00518
00519 }
00520
00521 MSG("RunQuality",Msg::kDebug) << " recoverrun=" << recoverrun << endl;
00522 return recoverrun;
00523 }
00524
00525 return 0;
00526 }