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

DataQualityReader.cxx

Go to the documentation of this file.
00001 #include "DataQualityReader.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 "RawData/RawHeader.h"
00010 #include "RawData/RawDaqHeader.h"
00011 #include "RawData/RawDaqSnarlHeader.h"
00012 #include "RawData/RawDigit.h"
00013 #include "RawData/RawChannelId.h"
00014  
00015 #include "RawData/RawDaqHeaderBlock.h"
00016 #include "RawData/RawSnarlHeaderBlock.h"
00017 #include "RawData/RawRunStartBlock.h"
00018 #include "RawData/RawRunEndBlock.h"
00019 #include "RawData/RawSubRunEndBlock.h"
00020 #include "RawData/RawTpSinglesSummaryBlock.h"
00021 #include "RawData/RawVarcErrorInTfBlock.h"
00022 #include "RawData/RawSpillServerMonitorBlock.h"
00023 #include "RawData/RawLiTpmtDigitsBlock.h"
00024 #include "RawData/RawLIAdcSummaryBlock.h"
00025 #include "RawData/RawDigitDataBlock.h"
00026  
00027 #include "CandData/CandRecord.h"
00028 #include "CandData/CandHeader.h"
00029 #include "Candidate/CandContext.h"
00030 
00031 #include "Algorithm/AlgConfig.h"
00032 #include "Algorithm/AlgFactory.h"
00033 #include "Algorithm/AlgHandle.h"
00034 
00035 #include "Validity/VldContext.h"
00036 #include "Validity/VldTimeStamp.h"
00037 
00038 //
00039 // $Log $
00040 //
00041 
00042 ClassImp(DataQualityReader)
00043 
00044 CVSID("$Id: DataQualityReader.cxx,v 1.3 2007/03/02 19:44:48 blake Exp $");
00045 
00046 JOBMODULE(DataQualityReader,"DataQualityReader","DataQualityReader");
00047 
00048 DataQualityReader::DataQualityReader() : 
00049   fRecord(0),
00050   fSnarl(0),
00051   fFilter(0),
00052   fCounter(0),
00053   fDQHeader(0),
00054   fDQRawDigits(0),
00055   fDQHotColdElectronics(0),
00056   fDQLightInjection(0),
00057   fDQSpillServer(0),
00058   fWriteDataQuality(0),
00059   fWriteDeadChips(0),
00060   fFilterOnOff(0),
00061   fFilterBadDataQuality(0),
00062   fFilterLowMultiplicity(0),
00063   fFilterHighMultiplicity(0),
00064   fFilterWord(0),
00065   fDataQualityFile(0),
00066   fDataQualityTree(0),
00067   fDeadChipFile(0),
00068   fDeadChipTree(0)
00069 {
00070   MSG("DataQuality",Msg::kDebug) << " *** DataQualityReader::DataQualityReader() *** " << endl;
00071 
00072   // Create the monitoring objects which extract the 
00073   // monitoring information from the raw data blocks
00074 
00075   fDQHeader = new DQHeader();
00076   fDQRawDigits = new DQRawDigits();
00077   fDQHotColdElectronics = new DQHotColdElectronics();
00078   fDQLightInjection = new DQLightInjection();
00079   fDQSpillServer = new DQSpillServer();
00080 }
00081 
00082 DataQualityReader::~DataQualityReader()
00083 {
00084   MSG("DataQuality",Msg::kInfo) << " *** DataQualityReader::~DataQualityReader() *** " << endl;
00085 
00086   delete fDQHeader;
00087   delete fDQRawDigits;
00088   delete fDQHotColdElectronics;
00089   delete fDQLightInjection;
00090   delete fDQSpillServer;
00091 }
00092 
00093 void DataQualityReader::BeginJob()
00094 {
00095   MSG("DataQuality",Msg::kInfo) << " *** DataQualityReader::BeginJob() *** " << endl;
00096 
00097 }
00098                      
00099 JobCResult DataQualityReader::Reco(MomNavigator* mom)
00100 {
00101   MSG("DataQuality",Msg::kInfo) << " *** DataQualityReader::Reco(...) *** " << endl;
00102  
00103   JobCResult result(JobCResult::kPassed);
00104 
00105   VldContext vldc;
00106   TObject* momobject = 0;
00107   Int_t run,snarl;
00108 
00109   fRecord=0;
00110   fSnarl=0;
00111   fFilter=0;
00112 
00113   // ===================
00114   // PROCESS RAW RECORDS
00115   // ===================
00116   // Iterate over raw records in mom and extract 
00117   // monitoring information from raw data blocks
00118 
00119   TIter momitr(mom->FragmentIter());
00120   while((momobject = momitr())){
00121     if(momobject->InheritsFrom("RawRecord")){
00122       fRecord=1;
00123       fCounter++;
00124       MSG("DataQuality",Msg::kInfo) << "  *** RAW RECORD [" << fCounter << "] ***  " << endl;
00125       RawRecord* rawrec = dynamic_cast<RawRecord*>(momobject);
00126  
00127       // Get the raw header and extract validity context
00128       vldc = rawrec->GetRawHeader()->GetVldContext();
00129       this->ProcessHeader((TObject*)(rawrec->GetRawHeader()));
00130       
00131       // Iterate over the raw blocks in raw record
00132       TIter rawrecitr = rawrec->GetRawBlockIter();
00133       TObject* tob = 0;
00134       while((tob = rawrecitr())){
00135         MSG("DataQuality",Msg::kDebug) << " " << tob->GetName() << endl;
00136         this->ProcessBlock(tob);
00137       }  
00138 
00139     }
00140   }
00141 
00142   if( !fRecord ){
00143     MSG("DataQuality",Msg::kWarning) << "  *** FAILED TO FIND RAW RECORD ***  " << endl;
00144     return result.SetFailed();
00145   }
00146 
00147   // ===========================
00148   // MAKE DATA QUALITY CANDIDATE
00149   // ===========================
00150   // If the raw record contains a snarl then create a new
00151   // data quality candidate and add it to the CandRecord  
00152 
00153   if( fSnarl ){
00154     MSG("DataQuality",Msg::kInfo) << "  *** MAKING DATA QUALITY CANDIDATE *** " << endl;
00155     run=fDQHeader->GetRun();
00156     snarl=fDQHeader->GetSnarl();
00157 
00158     // Get the CandRecord 
00159     CandRecord* candrec = dynamic_cast<CandRecord*>(mom->GetFragment("CandRecord", "PrimaryCandidateRecord"));
00160     if(candrec==0) {
00161       MSG("DataQuality",Msg::kInfo) << "  *** MAKING NEW CANDRECORD (" << run << "," << snarl << ") ***" << endl;
00162       CandHeader *head = new CandHeader(vldc,run,snarl);
00163       candrec = new CandRecord(head);
00164       candrec->SetName("PrimaryCandidateRecord");
00165       candrec->SetTitle("Created from RawRecord.");
00166       mom->AdoptFragment(candrec);
00167     }
00168 
00169     AlgFactory &af = AlgFactory::GetInstance();
00170     AlgHandle ah = af.GetAlgHandle("AlgDataQuality", "default"); 
00171 
00172     // Package up the monitoring objects and 
00173     // pass them to the data quality algorithm
00174     TObjArray* mycx = new TObjArray();
00175     mycx->Add(fDQHeader);
00176     mycx->Add(fDQRawDigits);
00177     mycx->Add(fDQHotColdElectronics);
00178     mycx->Add(fDQLightInjection);
00179     mycx->Add(fDQSpillServer);
00180 
00181     CandContext cx(this, mom);
00182     cx.SetCandRecord(candrec);
00183     cx.SetDataIn(mycx);
00184     CandDataQualityHandle dataquality = CandDataQuality::MakeCandidate(ah,cx);
00185     dataquality.SetName("CandDataQualityHandle");
00186     dataquality.SetTitle(TString("Created by CandDataQualityReader"));
00187 
00188     candrec->SecureCandHandle(dataquality);
00189 
00190     delete mycx;
00191   }
00192 
00193   // APPLY DATA QUALITY FILTER
00194   // =========================
00195   // apply filter based on data quality status bits
00196 
00197   if( fFilterOnOff ){
00198     MSG("DataQuality",Msg::kDebug) << " *** DATA QUALITY FILTER *** " << endl;
00199 
00200     if( fSnarl ){
00201       CandRecord* candrec = dynamic_cast<CandRecord*>(mom->GetFragment("CandRecord", "PrimaryCandidateRecord"));
00202       if( candrec ){
00203         CandDataQualityHandle* cdh = dynamic_cast<CandDataQualityHandle*>(candrec->FindCandHandle("CandDataQualityHandle"));
00204         if( cdh ){
00205           fFilter = this->ApplyFilter(cdh);
00206         }
00207       }
00208     }
00209           
00210     if( fFilter ){
00211       MSG("DataQuality",Msg::kDebug) << "   *** PASSED FILTER *** " << endl;
00212       result.SetPassed();
00213     }
00214     else{
00215       MSG("DataQuality",Msg::kDebug) << "   *** FAILED FILTER *** " << endl;
00216       result.SetFailed();
00217     }
00218   }
00219 
00220   MSG("DataQuality",Msg::kInfo) << " *** DataQualityReader::Reco(...) FINISHED *** " << endl;
00221 
00222   return result;
00223 }
00224 
00225 JobCResult DataQualityReader::Ana(const MomNavigator* mom)
00226 {
00227   MSG("DataQuality",Msg::kDebug) << " *** DataQualityReader::Ana(...) *** " << endl;
00228 
00229   JobCResult result(JobCResult::kPassed);
00230 
00231   // Write out data quality and/or dead chip info
00232 
00233   CandRecord* candrec = dynamic_cast<CandRecord*>(mom->GetFragment("CandRecord", "PrimaryCandidateRecord"));
00234   if( candrec ){
00235     CandDataQualityHandle* cdh = dynamic_cast<CandDataQualityHandle*>(candrec->FindCandHandle("CandDataQualityHandle"));
00236     if( cdh ){
00237 
00238       Time=cdh->GetTime();
00239       RunType=cdh->GetRunType();
00240       Run=cdh->GetRun();
00241       SubRun=cdh->GetSubRun();
00242       TimeFrame=cdh->GetTimeFrame();
00243       Snarl=cdh->GetSnarl();
00244       TriggerSource=cdh->GetTriggerSource();
00245       TriggerTime=cdh->GetTriggerTime();
00246       ErrorCode=cdh->GetErrorCode();
00247       CrateMask=cdh->GetCrateMask();
00248       PreTriggerDigits=cdh->GetPreTriggerDigits();
00249       PostTriggerDigits=cdh->GetPostTriggerDigits();
00250       SnarlMultiplicity=cdh->GetSnarlMultiplicity();
00251       SpillStatus=cdh->GetSpillStatus();
00252       SpillType=cdh->GetSpillType();
00253       SpillTimeError=cdh->GetSpillTimeError();
00254       LiTrigger=cdh->GetLiTrigger();
00255       LiTime=cdh->GetLiTime();
00256       LiSubtractedTime=cdh->GetLiSubtractedTime();
00257       LiRelativeTime=cdh->GetLiRelativeTime();
00258       LiCalibPoint=cdh->GetLiCalibPoint();
00259       LiCalibType=cdh->GetLiCalibType();
00260       LiPulserBox=cdh->GetLiPulserBox();
00261       LiPulserLed=cdh->GetLiPulserLed();
00262       LiPulseHeight=cdh->GetLiPulseHeight();
00263       LiPulseWidth=cdh->GetLiPulseWidth();
00264       ColdChips=cdh->GetColdChips();
00265       HotChips=cdh->GetHotChips();
00266       BusyChips=cdh->GetBusyChips();
00267       ReadoutErrors=cdh->GetReadoutErrors();   
00268       DataQuality=cdh->GetDataQuality();
00269 
00270       if(fWriteDataQuality && !fDataQualityFile){
00271         TString mystring("dataquality.root");
00272         TDirectory* tmpd = gDirectory;
00273         fDataQualityFile = new TFile(mystring.Data(),"RECREATE");
00274         fDataQualityTree = new TTree("DataQuality","DataQuality");
00275         fDataQualityTree->SetAutoSave(300);
00276         fDataQualityTree->Branch("Time",&Time,"Time/I");
00277         fDataQualityTree->Branch("RunType",&RunType,"RunType/I");
00278         fDataQualityTree->Branch("Run",&Run,"Run/I");
00279         fDataQualityTree->Branch("SubRun",&SubRun,"SubRun/I");
00280         fDataQualityTree->Branch("TimeFrame",&TimeFrame,"TimeFrame/I");
00281         fDataQualityTree->Branch("Snarl",&Snarl,"Snarl/I");
00282         fDataQualityTree->Branch("TriggerSource",&TriggerSource,"TriggerSource/I");
00283         fDataQualityTree->Branch("TriggerTime",&TriggerTime,"TriggerTime/I");
00284         fDataQualityTree->Branch("ErrorCode",&ErrorCode,"ErrorCode/I");
00285         fDataQualityTree->Branch("CrateMask",&CrateMask,"CrateMask/I");
00286         fDataQualityTree->Branch("PreTriggerDigits",&PreTriggerDigits,"PreTriggerDigits/I");
00287         fDataQualityTree->Branch("PostTriggerDigits",&PostTriggerDigits,"PostTriggerDigits/I");
00288         fDataQualityTree->Branch("SnarlMultiplicity",&SnarlMultiplicity,"SnarlMultiplicity/I");
00289         fDataQualityTree->Branch("SpillStatus",&SpillStatus,"SpillStatus/I");
00290         fDataQualityTree->Branch("SpillType",&SpillType,"SpillType/I");
00291         fDataQualityTree->Branch("SpillTimeError",&SpillTimeError,"SpillTimeError/I");
00292         fDataQualityTree->Branch("LiTrigger",&LiTrigger,"LiTrigger/I");
00293         fDataQualityTree->Branch("LiTime",&LiTime,"LiTime/I");
00294         fDataQualityTree->Branch("LiSubtractedTime",&LiSubtractedTime,"LiSubtractedTime/I");
00295         fDataQualityTree->Branch("LiRelativeTime",&LiRelativeTime,"LiRelativeTime/I");
00296         fDataQualityTree->Branch("LiCalibPoint",&LiCalibPoint,"LiCalibPoint/I");
00297         fDataQualityTree->Branch("LiCalibType",&LiCalibType,"LiCalibType/I");
00298         fDataQualityTree->Branch("LiPulserBox",&LiPulserBox,"LiPulserBox/I");
00299         fDataQualityTree->Branch("LiPulserLed",&LiPulserLed,"LiPulserLed/I");
00300         fDataQualityTree->Branch("LiPulseHeight",&LiPulseHeight,"LiPulseHeight/I");
00301         fDataQualityTree->Branch("LiPulseWidth",&LiPulseWidth,"LiPulseWidth/I");
00302         fDataQualityTree->Branch("ColdChips",&ColdChips,"ColdChips/I");
00303         fDataQualityTree->Branch("HotChips",&HotChips,"HotChips/I");
00304         fDataQualityTree->Branch("BusyChips",&BusyChips,"BusyChips/I");
00305         fDataQualityTree->Branch("ReadoutErrors",&ReadoutErrors,"ReadoutErrors/I");
00306         fDataQualityTree->Branch("DataQuality",&DataQuality,"DataQuality/I");
00307         gDirectory = tmpd;
00308       }
00309 
00310       if(fWriteDataQuality && fDataQualityFile){
00311         TDirectory* tmpd = gDirectory;
00312         fDataQualityFile->cd();
00313         fDataQualityTree->Fill();
00314         gDirectory = tmpd;
00315       }
00316       
00317       TIter deadchipitr(cdh->GetDaughterIterator());
00318       while(CandDeadChipHandle* deadchip = dynamic_cast<CandDeadChipHandle*>(deadchipitr())){
00319         if( deadchip ){
00320         
00321           Entries=deadchip->GetEntries();
00322           ChannelId=deadchip->GetChannelId().GetChAdd();
00323           Adc=deadchip->GetAdc();
00324           Tdc=deadchip->GetTdc();
00325           ErrorCode=deadchip->GetErrorCode();
00326           TriggerRate=deadchip->GetTriggerRate();
00327           ChipStatus=deadchip->GetChipStatus();
00328 
00329           if(fWriteDeadChips && !fDeadChipFile){
00330             TString mystring("deadchips.root");
00331             TDirectory* tmpd = gDirectory;
00332             fDeadChipFile = new TFile(mystring.Data(),"RECREATE");
00333             fDeadChipTree = new TTree("DeadChips","DeadChips");
00334             fDeadChipTree->SetAutoSave(300);
00335             fDeadChipTree->Branch("Time",&Time,"Time/I");
00336             fDeadChipTree->Branch("Run",&Run,"Run/I");
00337             fDeadChipTree->Branch("SubRun",&SubRun,"SubRun/I");
00338             fDeadChipTree->Branch("TimeFrame",&TimeFrame,"TimeFrame/I");
00339             fDeadChipTree->Branch("Snarl",&Snarl,"Snarl/I");
00340             fDeadChipTree->Branch("Entries",&Entries,"Entries/I");
00341             fDeadChipTree->Branch("ChannelId",&ChannelId,"ChannelId/I");
00342             fDeadChipTree->Branch("Adc",&Adc,"Adc/I");
00343             fDeadChipTree->Branch("Tdc",&Tdc,"Tdc/I");
00344             fDeadChipTree->Branch("ErrorCode",&ErrorCode,"ErrorCode/I");
00345             fDeadChipTree->Branch("TriggerRate",&TriggerRate,"TriggerRate/I");
00346             fDeadChipTree->Branch("ChipStatus",&ChipStatus,"ChipStatus/I");
00347             gDirectory = tmpd;
00348           }
00349 
00350           if(fWriteDeadChips && fDeadChipFile){
00351             TDirectory* tmpd = gDirectory;
00352             fDeadChipFile->cd();
00353             fDeadChipTree->Fill();
00354             gDirectory = tmpd;
00355           }
00356         }
00357 
00358       }
00359     }
00360   }
00361 
00362   return result;
00363 }
00364 
00365 const Registry& DataQualityReader::DefaultConfig() const
00366 {
00367   MSG("DataQuality",Msg::kDebug) << " *** DataQualityReader::DefaultConfig() *** " << endl;
00368 
00369   static Registry r;
00370   r.SetName("DataQualityReader.config.default");
00371   r.UnLockValues();
00372   r.Set("WriteDataQuality",fWriteDataQuality);
00373   r.Set("WriteDeadChips",fWriteDeadChips);
00374   r.Set("FilterOnOff",fFilterOnOff);
00375   r.Set("FilterBadDataQuality",fFilterBadDataQuality);
00376   r.Set("FilterLowMultiplicity",fFilterLowMultiplicity);
00377   r.Set("FilterHighMultiplicity",fFilterHighMultiplicity);
00378   r.Set("FilterWord",fFilterWord);
00379   r.LockValues();
00380                    
00381   return r;
00382 }
00383 
00384 void DataQualityReader::Config(const Registry& r)
00385 {
00386   MSG("DataQuality",Msg::kDebug) << " *** DataQualityReader::Config() *** " << endl;
00387 
00388   Int_t tmpint;
00389   Int_t tmpFilterWord;
00390     
00391   if(r.Get("WriteDataQuality",tmpint)) fWriteDataQuality = tmpint;
00392   if(r.Get("WriteDeadChips",tmpint)) fWriteDeadChips = tmpint;
00393   if(r.Get("FilterOnOff",tmpint)) fFilterOnOff = tmpint;
00394 
00395   if(r.Get("FilterBadDataQuality",tmpint)){ 
00396     if(tmpint){
00397       tmpFilterWord = fFilterWord;
00398       fFilterWord |= CandDataQuality::kBad; 
00399       MSG("DataQuality",Msg::kDebug) << "  Filter bad data quality : " << tmpFilterWord << "|CandDataQuality::kBad = " << fFilterWord << endl; 
00400     }
00401   }
00402 
00403   if(r.Get("FilterLowMultiplicity",tmpint)){ 
00404     if(tmpint){
00405       tmpFilterWord = fFilterWord;
00406       fFilterWord |= CandDataQuality::kLowMultiplicity; 
00407       MSG("DataQuality",Msg::kDebug) << "  Filter low multiplicity : " << tmpFilterWord << "|CandDataQuality::kLowMultiplicity = " << fFilterWord << endl; 
00408     }
00409   }
00410 
00411   if(r.Get("FilterHighMultiplicity",tmpint)){ 
00412     if(tmpint){
00413       tmpFilterWord = fFilterWord;
00414       fFilterWord |= CandDataQuality::kHighMultiplicity; 
00415       MSG("DataQuality",Msg::kDebug) << "  Filter high multiplicity : " << tmpFilterWord << "|CandDataQuality::kHighMultiplicity = " << fFilterWord << endl; 
00416     }
00417   }
00418 
00419   if(r.Get("FilterWord",tmpint)){
00420     if(tmpint){
00421       tmpFilterWord = fFilterWord;
00422       fFilterWord |= tmpint; 
00423       MSG("DataQuality",Msg::kDebug) << "  Filter word : " << tmpFilterWord << "|" << tmpint << " = " << fFilterWord << endl; 
00424     }
00425   }
00426 
00427   MSG("DataQuality",Msg::kDebug)
00428     << "  configuration: " << endl
00429     << "     WriteDataQuality=" << fWriteDataQuality << endl
00430     << "     WriteDeadChips=" << fWriteDeadChips << endl
00431     << "     FilterOnOff=" << fFilterOnOff << endl
00432     << "     FilterWord=" << fFilterWord << endl;
00433 
00434   return;
00435 }
00436 
00437 void DataQualityReader::HandleCommand(JobCommand* command)
00438 {
00439   TString cmd = command->PopCmd();
00440   if(cmd=="Set"){
00441     TString opt = command->PopOpt();
00442 
00443   }
00444 }
00445 
00446 void DataQualityReader::EndJob()
00447 {
00448   MSG("DataQuality",Msg::kInfo) << " *** DataQualityReader::EndJob() *** " << endl;
00449 
00450   if(fDataQualityFile){
00451     MSG("DataQuality",Msg::kInfo) << " *** saving data quality info to file ... " << endl;
00452     TDirectory* tmpd = gDirectory;
00453     fDataQualityFile->cd();
00454     fDataQualityTree->Write();
00455     fDataQualityFile->Close();
00456     gDirectory = tmpd;
00457     MSG("DataQuality",Msg::kInfo) << "      ... data quality info saved to file *** " << endl;
00458   }
00459 
00460   if(fDeadChipFile){
00461     MSG("DataQuality",Msg::kInfo) << " *** saving dead chip info to file ... " << endl;
00462     TDirectory* tmpd = gDirectory;
00463     fDeadChipFile->cd();
00464     fDeadChipTree->Write();
00465     fDeadChipFile->Close();
00466     gDirectory = tmpd;
00467     MSG("DataQuality",Msg::kInfo) << "      ... dead chip info saved to file *** " << endl;
00468   }
00469 }
00470 
00471 void DataQualityReader::ProcessHeader(TObject* obj)
00472 {
00473 
00474   // DAQ HEADER
00475   // ==========
00476   if(obj->InheritsFrom("RawDaqHeader")){
00477     MSG("DataQuality",Msg::kDebug) << " ... found RawDaqHeader " << endl;
00478     RawDaqHeader* hdr = (RawDaqHeader*)(obj);
00479     fDQHeader->Process(hdr);
00480     fDQRawDigits->Process(hdr);
00481   }
00482 
00483   // SNARL HEADER
00484   // ============
00485   if(obj->InheritsFrom("RawDaqSnarlHeader")){
00486     MSG("DataQuality",Msg::kDebug) << " ... found RawDaqSnarlHeader " << endl;
00487     RawDaqSnarlHeader* hdr = (RawDaqSnarlHeader*)(obj);
00488     fDQHeader->Process(hdr);
00489     fDQRawDigits->Process(hdr);
00490   }
00491 }
00492 
00493 void DataQualityReader::ProcessBlock(TObject* obj)
00494 {
00495 
00496   // HEADER BLOCKS
00497   // =============
00498   if(obj->InheritsFrom("RawDaqHeaderBlock")){
00499     MSG("DataQuality",Msg::kDebug) << " ... found RawDaqHeaderBlock " << endl;
00500     RawDaqHeaderBlock* rdb = (RawDaqHeaderBlock*)(obj);
00501     fDQHeader->Process(rdb);
00502     fDQRawDigits->Process(rdb);
00503   }
00504 
00505   if(obj->InheritsFrom("RawSnarlHeaderBlock")){
00506     MSG("DataQuality",Msg::kDebug) << " ... found RawSnarlHeaderBlock " << endl;
00507     RawSnarlHeaderBlock* rdb = (RawSnarlHeaderBlock*)(obj);
00508     fDQHeader->Process(rdb);
00509     fDQRawDigits->Process(rdb);
00510   }
00511 
00512   // MONITORING BLOCKS
00513   // =================
00514   if(obj->InheritsFrom("RawTpSinglesSummaryBlock")){
00515     MSG("DataQuality",Msg::kDebug) << " ... found RawTpSinglesSummaryBlock " << endl;
00516     RawTpSinglesSummaryBlock* rdb = (RawTpSinglesSummaryBlock*)(obj);
00517     fDQHotColdElectronics->Process(rdb);
00518   }
00519 
00520   if(obj->InheritsFrom("RawSpillServerMonitorBlock")){
00521     MSG("DataQuality",Msg::kDebug) << " ... found RawSpillServerMonitorBlock " << endl;
00522     RawSpillServerMonitorBlock* rdb = (RawSpillServerMonitorBlock*)(obj);
00523     fDQSpillServer->Process(rdb);
00524   }
00525 
00526   if(obj->InheritsFrom("RawLiTpmtDigitsBlock")){
00527     MSG("DataQuality",Msg::kDebug) << " ... found RawLiTpmtDigitsBlock " << endl;
00528     RawLiTpmtDigitsBlock* rdb = (RawLiTpmtDigitsBlock*)(obj);
00529     fDQLightInjection->Process(rdb);
00530   }
00531 
00532   // LIGHT INJECTION BLOCKS
00533   // ======================
00534   if(obj->InheritsFrom("RawLIAdcSummaryBlock")){
00535     MSG("DataQuality",Msg::kDebug) << " ... found RawLIAdcSummaryBlock " << endl;
00536     RawLIAdcSummaryBlock* rdb = (RawLIAdcSummaryBlock*)(obj);
00537     fDQLightInjection->Process(rdb);
00538   }
00539 
00540   // RAW DATA BLOCKS
00541   // ===============
00542   if(obj->InheritsFrom("RawDigitDataBlock")){
00543     MSG("DataQuality",Msg::kDebug) << " ... found RawDigitDataBlock " << endl;
00544     RawDigitDataBlock* rdb = (RawDigitDataBlock*)(obj);
00545     fDQRawDigits->Process(rdb);
00546     fSnarl=1;
00547   }
00548 
00549 }
00550 
00551 Bool_t DataQualityReader::ApplyFilter(CandDataQualityHandle* cdh)
00552 {
00553   // APPLY DATA QUALITY FILTER
00554   // =========================
00555   // pass events if:
00556   //  (a) no filter word
00557   //  (b) no problem with data quality
00558   //  (c) filter mask doesn't match quality bits
00559 
00560   Bool_t filter=0;
00561 
00562   if( ( fFilterWord==0 || cdh->GetDataQuality()==0 )
00563    || ( (cdh->GetDataQuality()&fFilterWord)==0 ) ) filter=1;
00564 
00565   MSG("DataQuality",Msg::kVerbose) << "  APPLY FILTER [filterword=" << fFilterWord << ", quality=" << cdh->GetDataQuality() << ", filter=" << filter << "]" << endl;
00566 
00567   return filter;
00568 }

Generated on Mon Jun 16 14:56:54 2008 for loon by  doxygen 1.3.9.1