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

DataQualityFilter.cxx

Go to the documentation of this file.
00001 #include "DataQualityFilter.h"
00002 
00003 #include "MessageService/MsgService.h"     
00004 #include "MinosObjectMap/MomNavigator.h"   
00005 #include "JobControl/JobCommand.h"         
00006 #include "JobControl/JobCModuleRegistry.h" 
00007 
00008 #include "RawData/RawRecord.h"
00009 #include "CandData/CandRecord.h"
00010 
00011 
00012 //
00013 // $Log $
00014 //
00015 
00016 ClassImp(DataQualityFilter)
00017 
00018 CVSID("$Id: DataQualityFilter.cxx,v 1.8 2008/08/25 13:09:18 blake Exp $");
00019 
00020 JOBMODULE(DataQualityFilter,"DataQualityFilter","DataQualityFilter");
00021 
00022 DataQualityFilter::DataQualityFilter() :
00023   fTime(0),
00024   fCurrentTime(0),
00025   fFilter(0),
00026   fSpillStatus(-1),
00027   fBeamStatus(-1),
00028   fHvStatus(-1),
00029   fCoilStatus(-1),
00030   fGpsStatus(-1),
00031   fDetectorStatus(-1),
00032   fFilterOnOff(0),
00033   fFilterBadBeam(0),
00034   fFilterBadDetector(0),
00035   fWriteOutResults(0),
00036   fUseLookup(0),
00037   fFilterFileName("dataqualityfilter.root"),
00038   fFilterFile(0),
00039   fFilterTree(0)
00040 {
00041   MSG("DataQualityFilter",Msg::kDebug) << " *** DataQualityFilter::DataQualityFilter() *** " << endl;
00042 
00043   fDQhandle = new DataQualityInterface();
00044 }
00045 
00046 DataQualityFilter::~DataQualityFilter()
00047 {
00048   MSG("DataQualityFilter",Msg::kDebug) << " *** DataQualityFilter::~DataQualityFilter() *** " << endl;
00049 
00050   if( fDQhandle ) delete fDQhandle;
00051 }
00052 
00053 void DataQualityFilter::BeginJob()
00054 {
00055   MSG("DataQualityFilter",Msg::kInfo) << " *** DataQualityFilter::BeginJob(...) *** " << endl;
00056 
00057 }
00058 
00059 JobCResult DataQualityFilter::Ana(const MomNavigator *mom) 
00060 {
00061   MSG("DataQualityFilter",Msg::kInfo) << " *** DataQualityFilter::Ana(...) *** " << endl;
00062 
00063   fSpillStatus=-1;
00064   fBeamStatus=-1;
00065   fHvStatus=-1;
00066   fCoilStatus=-1;
00067   fGpsStatus=-1;
00068   fDetectorStatus=-1;
00069   fBeamType=-1;
00070   fProtonsOnTarget=0.0;
00071   fFilter=0;
00072 
00073   JobCResult result(JobCResult::kAOK);
00074   
00075   // Get RawRecord
00076   // =============
00077   RawRecord* rawrec = dynamic_cast<RawRecord*>(mom->GetFragment("RawRecord"));
00078   if( rawrec ){ 
00079     MSG("DataQualityFilter",Msg::kDebug) << " Found RawRecord " << endl;
00080     VldContext* vldc = (VldContext*)(rawrec->GetVldContext());
00081     fCurrentTime=vldc->GetTimeStamp().GetSec();
00082     fSpillStatus=fDQhandle->GetSpillStatus(*vldc);
00083     fBeamStatus=fDQhandle->GetBeamStatus(*vldc);
00084     fBeamType=fDQhandle->GetBeamType(*vldc);
00085     fProtonsOnTarget=fDQhandle->GetProtonsOnTarget(*vldc);
00086     if( fUseLookup ){
00087       fDetectorStatus=fDQhandle->LookupDetectorStatus(*vldc);
00088       fHvStatus=fDQhandle->LookupHvStatus(*vldc);
00089       fCoilStatus=fDQhandle->LookupCoilStatus(*vldc);
00090       fGpsStatus=1;
00091     }
00092     else{
00093       fDetectorStatus=fDQhandle->GetDetectorStatus(*vldc);
00094       fHvStatus=fDQhandle->GetHvStatus(*vldc);
00095       fCoilStatus=fDQhandle->GetCoilStatus(*vldc);
00096       fGpsStatus=fDQhandle->GetGpsStatus(*vldc);
00097     }
00098   }
00099 
00100   // Get CandRecord
00101   // ==============
00102   CandRecord* candrec = dynamic_cast<CandRecord*>(mom->GetFragment("CandRecord"));
00103   if( candrec ){
00104     MSG("DataQualityFilter",Msg::kDebug) << " Found CandRecord " << endl;
00105     
00106   }
00107 
00108   // Set Filter
00109   // ==========
00110   // check whether filters are on/off then pass/fail event
00111   if( ( fFilterBadBeam==0     || fBeamStatus==1     ) 
00112    && ( fFilterBadDetector==0 || fDetectorStatus==1 ) ){
00113     fFilter=1;
00114   }
00115   
00116   // Write out Results
00117   // =================
00118   if( fCurrentTime!=fTime ){
00119     fLiveTime=1;
00120     if( fTime>0 
00121      && fCurrentTime-fTime>1 ) fLiveTime=fCurrentTime-fTime;
00122     fTime=fCurrentTime;
00123     if( fWriteOutResults ) this->WriteOutResults();
00124   }
00125 
00126   MSG("DataQualityFilter",Msg::kDebug) << " Time=" << fTime << endl;
00127   MSG("DataQualityFilter",Msg::kDebug) << " BeamType=" << fBeamType << endl;
00128   MSG("DataQualityFilter",Msg::kDebug) << " SpillStatus=" << fSpillStatus << endl;
00129   MSG("DataQualityFilter",Msg::kDebug) << " ProtonsOnTarget=" << fProtonsOnTarget << endl;
00130   MSG("DataQualityFilter",Msg::kDebug) << " DetectorStatus=" << fDetectorStatus << " [HV=" << fHvStatus << ", coil=" << fCoilStatus << ", gps=" << fGpsStatus << "]" << endl;   
00131   MSG("DataQualityFilter",Msg::kDebug) << " Beam=[" << fFilterBadBeam << "|" << fBeamStatus << "] Detector=[" << fFilterBadDetector << "|" << fDetectorStatus << "]" << endl;
00132   MSG("DataQualityFilter",Msg::kDebug) << " Filter=[" << fFilterOnOff << "|" << fFilter << "]" << endl;
00133   
00134   // Apply Filter
00135   // ============
00136   if( fFilterOnOff ){
00137     if( fFilter ){
00138       MSG("DataQualityFilter",Msg::kInfo) << " *** PASSED FILTER *** " << endl;
00139       return JobCResult::kPassed;
00140     }
00141     else{
00142       MSG("DataQualityFilter",Msg::kInfo) << " *** FAILED FILTER *** " << endl;
00143       return JobCResult::kFailed;
00144     }
00145   }
00146 
00147   return result;
00148 
00149 }
00150 
00151 const Registry& DataQualityFilter::DefaultConfig() const
00152 {
00153   MSG("DataQualityFilter",Msg::kDebug) << " *** DataQualityFilter::DefaultConfig() *** " << endl;
00154  
00155   static Registry r;
00156   r.SetName("DataQualityFilter.config.default");
00157   r.UnLockValues();
00158   r.Set("FilterOnOff",fFilterOnOff);
00159   r.Set("FilterBadBeam",fFilterBadBeam);
00160   r.Set("FilterBadDetector",fFilterBadDetector);
00161   r.Set("WriteOutResults",fWriteOutResults);
00162   r.Set("UseLookupTable",fUseLookup);
00163   r.Set("OutputFile",fFilterFileName);
00164   r.LockValues();
00165                     
00166   return r;
00167 }
00168   
00169 void DataQualityFilter::Config(const Registry& r)
00170 {
00171   MSG("DataQualityFilter",Msg::kDebug) << " *** DataQualityFilter::Config() *** " << endl;
00172 
00173   Int_t tmpint;
00174   const char* tmpchar = 0;
00175           
00176   if(r.Get("FilterOnOff",tmpint)) fFilterOnOff = tmpint;        
00177   if(r.Get("FilterBadBeam",tmpint)) fFilterBadBeam = tmpint;
00178   if(r.Get("FilterBadDetector",tmpint)) fFilterBadDetector = tmpint;
00179   if(r.Get("WriteOutResults",tmpint)) fWriteOutResults = tmpint;
00180   if(r.Get("UseLookupTable",tmpint)) fUseLookup = tmpint;
00181   if(r.Get("OutputFile",tmpchar)) fFilterFileName=tmpchar;
00182 
00183   MSG("DataQualityFilter",Msg::kDebug)
00184     << "  configuration: " << endl
00185     << "     FilterOnOff=" << fFilterOnOff << endl
00186     << "     FilterBadBeam=" << fFilterBadBeam << endl
00187     << "     FilterBadDetector=" << fFilterBadDetector << endl
00188     << "     WriteOutResults=" << fWriteOutResults << endl
00189     << "     UseLookupTable=" << fUseLookup << endl
00190     << "     OutputFile=" << fFilterFileName << endl;
00191 
00192   return;
00193 }
00194   
00195 void DataQualityFilter::HandleCommand(JobCommand* command)
00196 {
00197   TString cmd = command->PopCmd();
00198   if(cmd=="Set"){
00199     TString opt = command->PopOpt();
00200                                                                                     
00201   }
00202 }
00203 
00204 void DataQualityFilter::EndJob() 
00205 {
00206   MSG("DataQualityFilter",Msg::kInfo) << " *** DataQualityFilter::EndJob() *** " << endl;                                                                               
00207   if(fFilterFile){
00208     MSG("DataQualityFilter",Msg::kInfo) << " *** saving info to file ... " << endl;
00209     TDirectory* tmpd = gDirectory;
00210     fFilterFile->cd();
00211     fFilterTree->Write();
00212     fFilterFile->Close();
00213     gDirectory = tmpd;
00214     MSG("DataQualityFilter",Msg::kInfo) << "      ... info saved to file *** " << endl;
00215   }
00216 }
00217 
00218 void DataQualityFilter::WriteOutResults()
00219 {
00220   MSG("DataQualityFilter",Msg::kDebug) << " *** DataQualityFilter::WriteOutResults() *** " << endl; 
00221 
00222   if(!fFilterFile){
00223     TDirectory* tmpd = gDirectory;
00224     fFilterFile = new TFile(fFilterFileName.Data(),"RECREATE");
00225     fFilterTree = new TTree("DataQualityFilter","DataQualityFilter");
00226     fFilterTree->SetAutoSave(300);
00227     fFilterTree->Branch("Time",&fTime,"Time/I");
00228     fFilterTree->Branch("BeamType",&fBeamType,"BeamType/I");
00229     fFilterTree->Branch("BeamStatus",&fBeamStatus,"BeamStatus/I");
00230     fFilterTree->Branch("SpillStatus",&fSpillStatus,"SpillStatus/I");
00231     fFilterTree->Branch("HvStatus",&fHvStatus,"HvStatus/I");
00232     fFilterTree->Branch("CoilStatus",&fCoilStatus,"CoilStatus/I");
00233     fFilterTree->Branch("GpsStatus",&fGpsStatus,"GpsStatus/I");
00234     fFilterTree->Branch("DetectorStatus",&fDetectorStatus,"DetectorStatus/I");
00235     fFilterTree->Branch("LiveTime",&fLiveTime,"LiveTime/I");
00236     fFilterTree->Branch("ProtonsOnTarget",&fProtonsOnTarget,"ProtonsOnTarget/D");
00237     fFilterTree->Branch("FilterOnOff",&fFilterOnOff,"FilterOnOff/I");
00238     fFilterTree->Branch("FilterBadBeam",&fFilterBadBeam,"FilterBadBeam/I");
00239     fFilterTree->Branch("FilterBadDetector",&fFilterBadDetector,"FilterDetector/I");
00240     fFilterTree->Branch("Filter",&fFilter,"Filter/I");
00241     gDirectory = tmpd;
00242   }
00243 
00244   if(fFilterFile){
00245     TDirectory* tmpd = gDirectory;
00246     fFilterFile->cd();
00247     fFilterTree->Fill();
00248     gDirectory = tmpd;
00249   }
00250 }

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