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

DataQualityInterface Class Reference

#include <DataQualityInterface.h>

List of all members.

Public Member Functions

 DataQualityInterface ()
 DataQualityInterface (const DataQualityInterface &rhs)
 ~DataQualityInterface ()
Int_t GetSpillStatus (VldContext vldc)
Int_t GetBeamStatus (VldContext vldc)
Int_t GetBeamType (VldContext vldc)
Double_t GetProtonsOnTarget (VldContext vldc)
Int_t GetDetectorStatus (VldContext vldc)
Int_t GetHvStatus (VldContext vldc)
Int_t GetCoilStatus (VldContext vldc)
Int_t GetGpsStatus (VldContext vldc)
Int_t LookupDetectorStatus (VldContext vldc)
Int_t LookupHvStatus (VldContext vldc)
Int_t LookupCoilStatus (VldContext vldc)
Int_t LookupGpsStatus (VldContext vldc)

Private Member Functions

void ProcessBeamStatus (VldContext vldc, Bool_t useDB=0)
void ProcessDetectorStatus (VldContext vldc, Bool_t useDB=0)
 ClassDef (DataQualityInterface, 1)

Private Attributes

Int_t fBeamTime
Int_t fBeamStatus
Int_t fNearDetStatus
Int_t fBeamMonStatus
Int_t fNearDetSpill
Int_t fBeamMonSpill
Int_t fBeamType
Double_t fProtonsOnTarget
Int_t fDetectorTime
Int_t fDetectorStatus
Int_t fCoilStatus
Int_t fHvStatus
Int_t fGpsStatus
Int_t fGpsError
DataQualityLookupfDataQualityLookup


Constructor & Destructor Documentation

DataQualityInterface::DataQualityInterface  ) 
 

Definition at line 25 of file DataQualityInterface.cxx.

00025                                            :
00026   fBeamTime(-1),
00027   fBeamStatus(-1),
00028   fNearDetStatus(-1),
00029   fBeamType(-1),
00030   fProtonsOnTarget(0.0),
00031   fDetectorTime(-1),
00032   fDetectorStatus(-1),
00033   fCoilStatus(-1),
00034   fHvStatus(-1),
00035   fGpsStatus(-1),
00036   fGpsError(-999),
00037   fDataQualityLookup(0)
00038 {
00039 
00040 }
  

DataQualityInterface::DataQualityInterface const DataQualityInterface rhs  ) 
 

Definition at line 42 of file DataQualityInterface.cxx.

00042                                                                           :
00043   TObject(rhs)
00044 {
00045 
00046 }
  

DataQualityInterface::~DataQualityInterface  ) 
 

Definition at line 48 of file DataQualityInterface.cxx.

00049 {
00050   if(fDataQualityLookup) delete fDataQualityLookup;
00051 }


Member Function Documentation

DataQualityInterface::ClassDef DataQualityInterface  ,
[private]
 

Int_t DataQualityInterface::GetBeamStatus VldContext  vldc  ) 
 

Definition at line 59 of file DataQualityInterface.cxx.

References ProcessBeamStatus().

Referenced by DataQualityFilter::Ana().

00060 {
00061   this->ProcessBeamStatus(vldc,1);
00062   return fBeamStatus;
00063 }

Int_t DataQualityInterface::GetBeamType VldContext  vldc  ) 
 

Definition at line 65 of file DataQualityInterface.cxx.

References ProcessBeamStatus().

Referenced by DataQualityFilter::Ana().

00066 {
00067   this->ProcessBeamStatus(vldc,1);
00068   return fBeamType;
00069 }

Int_t DataQualityInterface::GetCoilStatus VldContext  vldc  ) 
 

Definition at line 89 of file DataQualityInterface.cxx.

References ProcessDetectorStatus().

Referenced by DataQualityFilter::Ana().

00090 {
00091   this->ProcessDetectorStatus(vldc,1);
00092   return fCoilStatus;
00093 }

Int_t DataQualityInterface::GetDetectorStatus VldContext  vldc  ) 
 

Definition at line 77 of file DataQualityInterface.cxx.

References ProcessDetectorStatus().

Referenced by DataQualityFilter::Ana().

00078 {
00079   this->ProcessDetectorStatus(vldc,1);
00080   return fDetectorStatus;
00081 }

Int_t DataQualityInterface::GetGpsStatus VldContext  vldc  ) 
 

Definition at line 95 of file DataQualityInterface.cxx.

References ProcessDetectorStatus().

Referenced by DataQualityFilter::Ana().

00096 {
00097   this->ProcessDetectorStatus(vldc,1);
00098   return fGpsStatus;
00099 }

Int_t DataQualityInterface::GetHvStatus VldContext  vldc  ) 
 

Definition at line 83 of file DataQualityInterface.cxx.

References ProcessDetectorStatus().

Referenced by DataQualityFilter::Ana().

00084 {
00085   this->ProcessDetectorStatus(vldc,1);
00086   return fHvStatus;
00087 }

Double_t DataQualityInterface::GetProtonsOnTarget VldContext  vldc  ) 
 

Definition at line 71 of file DataQualityInterface.cxx.

References ProcessBeamStatus().

Referenced by DataQualityFilter::Ana().

00072 {
00073   this->ProcessBeamStatus(vldc,1);
00074   return fProtonsOnTarget;
00075 }

Int_t DataQualityInterface::GetSpillStatus VldContext  vldc  ) 
 

Definition at line 53 of file DataQualityInterface.cxx.

References ProcessBeamStatus().

Referenced by DataQualityFilter::Ana().

00054 {
00055   this->ProcessBeamStatus(vldc,1);
00056   return fNearDetStatus;
00057 }

Int_t DataQualityInterface::LookupCoilStatus VldContext  vldc  ) 
 

Definition at line 113 of file DataQualityInterface.cxx.

References ProcessDetectorStatus().

Referenced by DataQualityFilter::Ana().

00114 {
00115   this->ProcessDetectorStatus(vldc,0);
00116   return fCoilStatus;
00117 }

Int_t DataQualityInterface::LookupDetectorStatus VldContext  vldc  ) 
 

Definition at line 101 of file DataQualityInterface.cxx.

References ProcessDetectorStatus().

Referenced by DataQualityFilter::Ana().

00102 {
00103   this->ProcessDetectorStatus(vldc,0);
00104   return fDetectorStatus;
00105 }

Int_t DataQualityInterface::LookupGpsStatus VldContext  vldc  ) 
 

Definition at line 119 of file DataQualityInterface.cxx.

References ProcessDetectorStatus().

00120 {
00121   this->ProcessDetectorStatus(vldc,0);
00122   return fGpsStatus;
00123 }

Int_t DataQualityInterface::LookupHvStatus VldContext  vldc  ) 
 

Definition at line 107 of file DataQualityInterface.cxx.

References ProcessDetectorStatus().

Referenced by DataQualityFilter::Ana().

00108 {
00109   this->ProcessDetectorStatus(vldc,0);
00110   return fHvStatus;
00111 }

void DataQualityInterface::ProcessBeamStatus VldContext  vldc,
Bool_t  useDB = 0
[private]
 

Definition at line 125 of file DataQualityInterface.cxx.

References abs(), BeamMonSpill::BeamType(), SpillTimeFinder::DataIsAvailable(), fBeamMonSpill, fBeamMonStatus, fBeamStatus, fBeamTime, fBeamType, fNearDetSpill, fNearDetStatus, fProtonsOnTarget, BeamMonSpill::fTor101, BeamMonSpill::fTortgt, BeamMonSpill::fTrtgtd, BDSpillAccessor::Get(), VldTimeStamp::GetNanoSec(), SpillTimeFinder::GetNearestSpill(), VldTimeStamp::GetSec(), SpillTimeND::GetTimeStamp(), VldContext::GetTimeStamp(), SpillTimeFinder::GetTimeToNearestSpill(), SpillTimeFinder::Instance(), BDSpillAccessor::LoadSpill(), MSG, BMSpillAna::SelectSpill(), BMSpillAna::SetSpill(), BMSpillAna::SetTimeDiff(), BeamMonSpill::SpillTime(), and BMSpillAna::UseDatabaseCuts().

Referenced by GetBeamStatus(), GetBeamType(), GetProtonsOnTarget(), and GetSpillStatus().

00126 {
00127   if( vldc.GetTimeStamp().GetSec()!=fBeamTime ){
00128     MSG("DataQualityFilter",Msg::kVerbose) << " DataQualityInterface::ProcessBeamStatus(VldContext) " << endl;
00129 
00130     fBeamTime=vldc.GetTimeStamp().GetSec();
00131     fBeamStatus=-1;
00132     fNearDetStatus=-1;
00133     fBeamMonStatus=-1;
00134     fNearDetSpill=0;
00135     fBeamMonSpill=0;
00136     fBeamType=-1;
00137     fProtonsOnTarget=0.0;
00138 
00139     // USE BEAM DATABASE TABLES
00140     // ========================
00141     if( useDB ){
00142 
00143       // Check NearDet Spill Times
00144       SpillTimeFinder& NDaccess = SpillTimeFinder::Instance();
00145       fNearDetStatus = NDaccess.DataIsAvailable(vldc);
00146       const SpillTimeND& ndspill = NDaccess.GetNearestSpill(vldc);
00147       VldTimeStamp NDtime = ndspill.GetTimeStamp();
00148 
00149       Double_t nd_subtime = NDaccess.GetTimeToNearestSpill(vldc);
00150 
00151       if( nd_subtime>=0.0 && nd_subtime<1.0 ){
00152         fNearDetSpill = 1;
00153       }
00154 
00155       MSG("DataQualityFilter",Msg::kVerbose) << " NearDet [status=" << fNearDetStatus << ", spill=" << fNearDetSpill << ", time=" << nd_subtime << "]" << endl;
00156       
00157       // Check Beam Monitoring
00158       BDSpillAccessor& BMaccess = BDSpillAccessor::Get();
00159       const BeamMonSpill& BMspill = *(BMaccess.LoadSpill(NDtime));
00160       VldTimeStamp BMtime = BMspill.SpillTime();
00161 
00162       Double_t bm_subtime = ( BMtime.GetSec()-NDtime.GetSec() )
00163                    + 1.0e-9*( BMtime.GetNanoSec()-NDtime.GetNanoSec() );
00164 
00165       BMSpillAna BMana;
00166       BMana.UseDatabaseCuts();
00167       BMana.SetSpill(BMspill); 
00168       BMana.SetTimeDiff(bm_subtime);
00169 
00170       Double_t pots = 0.0;
00171       if(BMspill.fTortgt !=0.)      pots = BMspill.fTortgt;
00172       else if(BMspill.fTrtgtd !=0.) pots = BMspill.fTrtgtd;
00173       else if(BMspill.fTor101 !=0.) pots = BMspill.fTor101;
00174 
00175       if( fNearDetSpill
00176        && abs(bm_subtime)<1.0 ){
00177         fBeamMonSpill = 1;
00178         fProtonsOnTarget = pots;
00179         fBeamType = BMspill.BeamType();
00180         fBeamMonStatus = BMana.SelectSpill();
00181       }
00182 
00183       MSG("DataQualityFilter",Msg::kVerbose) << " BeamMon [spill=" << fBeamMonSpill << ", isgood=" << fBeamMonStatus << ", time=" << nd_subtime+bm_subtime << ", type=" << fBeamType << ", PoTs=" << fProtonsOnTarget << "]" << endl;
00184 
00185     }
00186 
00187     // USE BEAM LOOKUP TABLES
00188     // ======================
00189     else{
00190 
00191     }
00192 
00193     // APPLY BEAM QUALITY CUTS
00194     // =======================
00195     // check the beam monitoring
00196     //    1 = beam monitoring is good
00197     //    0 = beam monitoring is bad
00198     //   -1 = no beam monitoring information 
00199 
00200     if( fBeamMonStatus==1 && fNearDetStatus==1 ){
00201       fBeamStatus=1;
00202     }
00203     if( fBeamMonStatus==0 || fNearDetStatus==0 ){
00204       fBeamStatus=0;
00205     }
00206 
00207   }
00208 
00209   return;
00210 }

void DataQualityInterface::ProcessDetectorStatus VldContext  vldc,
Bool_t  useDB = 0
[private]
 

Definition at line 212 of file DataQualityInterface.cxx.

References SpillServerMonFinder::DataIsAvailable(), fCoilStatus, fDataQualityLookup, fDetectorStatus, fDetectorTime, fGpsError, fGpsStatus, fHvStatus, DataQualityLookup::GetCoilStatus(), DataQualityLookup::GetHvStatus(), HvStatusFinder::GetHvStatus(), VldTimeStamp::GetNanoSec(), SpillServerMonFinder::GetNearestSpill(), VldTimeStamp::GetSec(), SpillServerMon::GetSpillTimeError(), SpillServerMon::GetSpillType(), SpillServerMon::GetTimeStamp(), VldContext::GetTimeStamp(), SpillServerMonFinder::Instance(), HvStatusFinder::Instance(), CoilTools::IsOK(), and MSG.

Referenced by GetCoilStatus(), GetDetectorStatus(), GetGpsStatus(), GetHvStatus(), LookupCoilStatus(), LookupDetectorStatus(), LookupGpsStatus(), and LookupHvStatus().

00213 {
00214   if( vldc.GetTimeStamp().GetSec()!=fDetectorTime ){
00215     MSG("DataQualityFilter",Msg::kVerbose) << " DataQualityInterface::ProcessDetectorStatus(VldContext) " << endl;
00216 
00217     fDetectorTime=vldc.GetTimeStamp().GetSec();
00218     fDetectorStatus=-1;    
00219     fCoilStatus=-1;
00220     fHvStatus=-1;
00221     fGpsStatus=1;
00222     fGpsError=-999;
00223 
00224     // USE DETECTOR DATABASE TABLES
00225     // ============================
00226     if( useDB ){
00227 
00228       // Check Coil Current
00229       if( CoilTools::IsOK(vldc) ) fCoilStatus=1; else fCoilStatus=0; 
00230       MSG("DataQualityFilter",Msg::kVerbose) << " CoilCurrentStatus [status=" << fCoilStatus << "]" << endl;
00231       MSG("DataQualityFilter",Msg::kVerbose) << " CoilCurrent [lookup=0, status=" << fCoilStatus << "]" << endl;
00232 
00233       // Check High Voltage
00234       HvStatus::HvStatus_t status = HvStatusFinder::Instance().GetHvStatus(vldc);
00235       if( (status&HvStatus::kOK)==(HvStatus::kOK) ) fHvStatus=1;
00236       if( (status&HvStatus::kBad)==(HvStatus::kBad) ) fHvStatus=0;
00237       MSG("DataQualityFilter",Msg::kVerbose) << " HighVoltageStatus [statusword=" << status << ", status=" << fHvStatus << "]" << endl;
00238       MSG("DataQualityFilter",Msg::kVerbose) << " HighVoltage [lookup=0, status=" << fHvStatus << "]" << endl;      
00239 
00240       // Check GPS Error
00241       SpillServerMonFinder& GPSaccess = SpillServerMonFinder::Instance();
00242       if( GPSaccess.DataIsAvailable(vldc) ){
00243         const SpillServerMon& spill_nearest = GPSaccess.GetNearestSpill(vldc);
00244 
00245         Double_t gps_subtime = ( spill_nearest.GetTimeStamp().GetSec()-vldc.GetTimeStamp().GetSec() )
00246                       + 1.0e-9*( spill_nearest.GetTimeStamp().GetNanoSec()-vldc.GetTimeStamp().GetNanoSec() );
00247 
00248         if( gps_subtime>=0.0 && gps_subtime<1.0 ){
00249           fGpsError = 0;
00250           if( spill_nearest.GetSpillType()==1 ){
00251             fGpsError = spill_nearest.GetSpillTimeError();
00252             if( fGpsError>1000 ) fGpsStatus = 0;
00253           }
00254         }
00255       }
00256       MSG("DataQualityFilter",Msg::kVerbose) << " GpsErrorStatus [error=" << fGpsError << ", status=" << fGpsStatus << "]" << endl;
00257       MSG("DataQualityFilter",Msg::kVerbose) << " GpsError [lookup=0, status=" << fGpsStatus << "]" << endl;
00258 
00259     }
00260 
00261     // USE DETECTOR LOOKUP TABLES
00262     // ==========================
00263     else{
00264       if(!fDataQualityLookup) fDataQualityLookup = new DataQualityLookup();
00265   
00266       // Check Coil Current
00267       fCoilStatus=fDataQualityLookup->GetCoilStatus(vldc);
00268       MSG("DataQualityFilter",Msg::kVerbose) << " CoilCurrent [lookup=1, status=" << fCoilStatus << "]" << endl;
00269 
00270       // Check High Voltage
00271       fHvStatus=fDataQualityLookup->GetHvStatus(vldc);
00272       MSG("DataQualityFilter",Msg::kVerbose) << " HighVoltage [lookup=1, status=" << fHvStatus << "]" << endl;
00273 
00274       // Check GPS Error;
00275       fGpsStatus=1;
00276       MSG("DataQualityFilter",Msg::kVerbose) << " GpsError [lookup=1, status=" << fGpsStatus << "]" << endl;
00277 
00278     }
00279 
00280     // APPLY DETECTOR QUALITY CUTS
00281     // ===========================
00282     //  1 = coil and HV are good
00283     //  0 = coil or HV are bad or unknown
00284     // -1 = no detector information
00285 
00286     if( fCoilStatus==1 && fHvStatus==1 && fGpsStatus==1 ){
00287       fDetectorStatus=1;
00288     }
00289     if( fCoilStatus==0 || fHvStatus==0 || fGpsStatus==0 ){
00290       fDetectorStatus=0;
00291     }
00292 
00293   }
00294 
00295   return;
00296 }


Member Data Documentation

Int_t DataQualityInterface::fBeamMonSpill [private]
 

Definition at line 40 of file DataQualityInterface.h.

Referenced by ProcessBeamStatus().

Int_t DataQualityInterface::fBeamMonStatus [private]
 

Definition at line 38 of file DataQualityInterface.h.

Referenced by ProcessBeamStatus().

Int_t DataQualityInterface::fBeamStatus [private]
 

Definition at line 36 of file DataQualityInterface.h.

Referenced by ProcessBeamStatus().

Int_t DataQualityInterface::fBeamTime [private]
 

Definition at line 35 of file DataQualityInterface.h.

Referenced by ProcessBeamStatus().

Int_t DataQualityInterface::fBeamType [private]
 

Definition at line 41 of file DataQualityInterface.h.

Referenced by ProcessBeamStatus().

Int_t DataQualityInterface::fCoilStatus [private]
 

Definition at line 46 of file DataQualityInterface.h.

Referenced by ProcessDetectorStatus().

DataQualityLookup* DataQualityInterface::fDataQualityLookup [private]
 

Definition at line 51 of file DataQualityInterface.h.

Referenced by ProcessDetectorStatus().

Int_t DataQualityInterface::fDetectorStatus [private]
 

Definition at line 45 of file DataQualityInterface.h.

Referenced by ProcessDetectorStatus().

Int_t DataQualityInterface::fDetectorTime [private]
 

Definition at line 44 of file DataQualityInterface.h.

Referenced by ProcessDetectorStatus().

Int_t DataQualityInterface::fGpsError [private]
 

Definition at line 49 of file DataQualityInterface.h.

Referenced by ProcessDetectorStatus().

Int_t DataQualityInterface::fGpsStatus [private]
 

Definition at line 48 of file DataQualityInterface.h.

Referenced by ProcessDetectorStatus().

Int_t DataQualityInterface::fHvStatus [private]
 

Definition at line 47 of file DataQualityInterface.h.

Referenced by ProcessDetectorStatus().

Int_t DataQualityInterface::fNearDetSpill [private]
 

Definition at line 39 of file DataQualityInterface.h.

Referenced by ProcessBeamStatus().

Int_t DataQualityInterface::fNearDetStatus [private]
 

Definition at line 37 of file DataQualityInterface.h.

Referenced by ProcessBeamStatus().

Double_t DataQualityInterface::fProtonsOnTarget [private]
 

Definition at line 42 of file DataQualityInterface.h.

Referenced by ProcessBeamStatus().


The documentation for this class was generated from the following files:
Generated on Mon Feb 15 11:09:02 2010 for loon by  doxygen 1.3.9.1