Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

RunQualityFinder.cxx

Go to the documentation of this file.
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   // Cleaner destructor calls RunQualityFinder dtor
00019   static Cleaner cleaner;
00020 
00021   // create singleton instance of spillfinder
00022   if(!fMyInstance){
00023     MSG("RunQuality", Msg::kDebug) << "  Creating new instance of RunQualityFinder " << endl;
00024     cleaner.UseMe();
00025     fMyInstance = new RunQualityFinder();
00026   }
00027 
00028   // die if finder hasn't actually been created
00029   if(!fMyInstance){
00030     MSG("RunQuality", Msg::kFatal) << "  No RunQualityFinder Instance - aagghhh, I'm going to die!!!." << endl;
00031     assert(fMyInstance);
00032   }
00033 
00034   // can do re-setting here
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   // Result of DB Query
00134   // ==================
00135   fRunStatusResult = RunStatus::kUnknown;
00136 
00137   // If it's not real data, return 'OK'
00138   // ==================================
00139   if( context.GetSimFlag() != SimFlag::kData ){
00140     fRunStatusResult = RunStatus::kOK;
00141     return;
00142   }
00143 
00144   // Far Detector Data Quality
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     // return previous result
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     // perform database query
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   // Near Detector Data Quality
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     // return previous result
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     // perform database query
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   // Result of DB Query
00303   // ==================
00304   fRunStatusResult = RunStatus::kUnknown;
00305 
00306   // Far Detector Data Quality
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     // return previous result
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     // perform database query
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   // Near Detector Data Quality
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     // return previous result
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     // perform database query
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   // Override database
00478   if( fOverrideDB ){
00479     MSG("RunQuality",Msg::kDebug) << " *** RunQualityFinder::RejectRun(detector=" << detector << ",run=" << run << ",subrun=" << subrun<< ") *** " << endl;
00480     Bool_t rejectrun = 0;
00481 
00482     // Far Detector Data Quality
00483     if( detector == Detector::kFar ){
00484       
00485     }
00486 
00487     // Near Detector Data Quality
00488     if( detector == Detector::kNear ){
00489 
00490       // added 05/01/10
00491       // hot channel in November 2007
00492       // see minos-doc-6722 (Phil R.)
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   // Override database
00507   if( fOverrideDB ){
00508     MSG("RunQuality",Msg::kDebug) << " *** RunQualityFinder::RecoverRun(detector=" << detector << ",run=" << run << ",subrun=" << subrun<< ") *** " << endl;
00509     Bool_t recoverrun = 0;
00510 
00511     // Far Detector Data Quality
00512     if( detector == Detector::kFar ){
00513       
00514     }
00515 
00516     // Near Detector Data Quality
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 }

Generated on Mon Feb 15 11:07:33 2010 for loon by  doxygen 1.3.9.1