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

DataQualityReader Class Reference

#include <DataQualityReader.h>

Inheritance diagram for DataQualityReader:

JobCModule List of all members.

Public Member Functions

 DataQualityReader ()
 ~DataQualityReader ()
void BeginJob ()
JobCResult Reco (MomNavigator *mom)
JobCResult Ana (const MomNavigator *mom)
const RegistryDefaultConfig () const
void Config (const Registry &r)
void HandleCommand (JobCommand *command)
void EndJob ()

Private Member Functions

void ProcessHeader (TObject *obj)
void ProcessBlock (TObject *obj)
Bool_t ApplyFilter (CandDataQualityHandle *cdh)

Private Attributes

Bool_t fRecord
Bool_t fSnarl
Bool_t fFilter
Int_t fCounter
DQHeaderfDQHeader
DQRawDigitsfDQRawDigits
DQHotColdElectronicsfDQHotColdElectronics
DQLightInjectionfDQLightInjection
DQSpillServerfDQSpillServer
Int_t fWriteDataQuality
Int_t fWriteDeadChips
Int_t fFilterOnOff
Int_t fFilterBadDataQuality
Int_t fFilterLowMultiplicity
Int_t fFilterHighMultiplicity
Int_t fFilterWord
TFile * fDataQualityFile
TTree * fDataQualityTree
Int_t Time
Int_t RunType
Int_t Run
Int_t SubRun
Int_t TimeFrame
Int_t Snarl
Int_t TriggerSource
Int_t TriggerTime
Int_t ErrorCode
Int_t CrateMask
Int_t PreTriggerDigits
Int_t PostTriggerDigits
Int_t SnarlMultiplicity
Int_t SpillStatus
Int_t SpillType
Int_t SpillTimeError
Int_t LiTrigger
Int_t LiTime
Int_t LiSubtractedTime
Int_t LiRelativeTime
Int_t LiCalibPoint
Int_t LiCalibType
Int_t LiPulserBox
Int_t LiPulserLed
Int_t LiPulseHeight
Int_t LiPulseWidth
Int_t ColdChips
Int_t HotChips
Int_t BusyChips
Int_t ReadoutErrors
Int_t DataQuality
TFile * fDeadChipFile
TTree * fDeadChipTree
Int_t Entries
Int_t ChannelId
Int_t Adc
Int_t Tdc
Int_t TriggerRate
Int_t ChipStatus

Constructor & Destructor Documentation

DataQualityReader::DataQualityReader  ) 
 

Definition at line 48 of file DataQualityReader.cxx.

References MSG.

00048                                      : 
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 }

DataQualityReader::~DataQualityReader  ) 
 

Definition at line 82 of file DataQualityReader.cxx.

References MSG.

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 }


Member Function Documentation

JobCResult DataQualityReader::Ana const MomNavigator mom  )  [virtual]
 

Implement this for read only access to the MomNavigator

Reimplemented from JobCModule.

Definition at line 225 of file DataQualityReader.cxx.

References Adc, BusyChips, ChannelId, ChipStatus, ColdChips, CrateMask, DataQuality, Entries, ErrorCode, fDataQualityFile, fDataQualityTree, fDeadChipFile, fDeadChipTree, CandRecord::FindCandHandle(), fWriteDataQuality, fWriteDeadChips, CandDeadChipHandle::GetAdc(), CandDataQualityHandle::GetBusyChips(), RawChannelId::GetChAdd(), CandDeadChipHandle::GetChannelId(), CandDeadChipHandle::GetChipStatus(), CandDataQualityHandle::GetColdChips(), CandDataQualityHandle::GetCrateMask(), CandDataQualityHandle::GetDataQuality(), CandHandle::GetDaughterIterator(), CandDeadChipHandle::GetEntries(), CandDeadChipHandle::GetErrorCode(), CandDataQualityHandle::GetErrorCode(), MomNavigator::GetFragment(), CandDataQualityHandle::GetHotChips(), CandDataQualityHandle::GetLiCalibPoint(), CandDataQualityHandle::GetLiCalibType(), CandDataQualityHandle::GetLiPulseHeight(), CandDataQualityHandle::GetLiPulserBox(), CandDataQualityHandle::GetLiPulserLed(), CandDataQualityHandle::GetLiPulseWidth(), CandDataQualityHandle::GetLiRelativeTime(), CandDataQualityHandle::GetLiSubtractedTime(), CandDataQualityHandle::GetLiTime(), CandDataQualityHandle::GetLiTrigger(), CandDataQualityHandle::GetPostTriggerDigits(), CandDataQualityHandle::GetPreTriggerDigits(), CandDataQualityHandle::GetReadoutErrors(), CandDataQualityHandle::GetRun(), CandDataQualityHandle::GetRunType(), CandDataQualityHandle::GetSnarl(), CandDataQualityHandle::GetSnarlMultiplicity(), CandDataQualityHandle::GetSpillStatus(), CandDataQualityHandle::GetSpillTimeError(), CandDataQualityHandle::GetSpillType(), CandDataQualityHandle::GetSubRun(), CandDeadChipHandle::GetTdc(), CandDataQualityHandle::GetTime(), CandDataQualityHandle::GetTimeFrame(), CandDeadChipHandle::GetTriggerRate(), CandDataQualityHandle::GetTriggerSource(), CandDataQualityHandle::GetTriggerTime(), HotChips, LiCalibPoint, LiCalibType, LiPulseHeight, LiPulserBox, LiPulserLed, LiPulseWidth, LiRelativeTime, LiSubtractedTime, LiTime, LiTrigger, MSG, PostTriggerDigits, PreTriggerDigits, ReadoutErrors, Run, RunType, Snarl, SnarlMultiplicity, SpillStatus, SpillTimeError, SpillType, SubRun, Tdc, Time, TimeFrame, TriggerRate, TriggerSource, and TriggerTime.

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 }

Bool_t DataQualityReader::ApplyFilter CandDataQualityHandle cdh  )  [private]
 

Definition at line 551 of file DataQualityReader.cxx.

References fFilterWord, CandDataQualityHandle::GetDataQuality(), and MSG.

Referenced by Reco().

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 }

void DataQualityReader::BeginJob  )  [virtual]
 

Implement for notification of begin of job

Reimplemented from JobCModule.

Definition at line 93 of file DataQualityReader.cxx.

References MSG.

00094 {
00095   MSG("DataQuality",Msg::kInfo) << " *** DataQualityReader::BeginJob() *** " << endl;
00096 
00097 }

void DataQualityReader::Config const Registry r  )  [virtual]
 

Return the actual configuration. If your module directly pulls its configuration from the fConfig Registry, you don't need to override this. Override if you have local config variables.

Reimplemented from JobCModule.

Definition at line 384 of file DataQualityReader.cxx.

References fFilterOnOff, fFilterWord, fWriteDataQuality, fWriteDeadChips, Registry::Get(), and MSG.

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 }

const Registry & DataQualityReader::DefaultConfig  )  const [virtual]
 

Get the default configuration registry. This should normally be overridden. One useful idiom is to implement it like:

const Registry& MyModule::DefaultConfig() const { static Registry cfg; // never is destroyed if (cfg.Size()) return cfg; // already filled it // set defaults: cfg.Set("TheAnswer",42); cfg.Set("Units","unknown"); return cfg; }

Reimplemented from JobCModule.

Definition at line 365 of file DataQualityReader.cxx.

References fFilterBadDataQuality, fFilterHighMultiplicity, fFilterLowMultiplicity, fFilterOnOff, fFilterWord, fWriteDataQuality, fWriteDeadChips, Registry::LockValues(), MSG, Registry::Set(), and Registry::UnLockValues().

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 }

void DataQualityReader::EndJob  )  [virtual]
 

Implement for notification of end of job

Reimplemented from JobCModule.

Definition at line 446 of file DataQualityReader.cxx.

References fDataQualityFile, fDataQualityTree, fDeadChipFile, fDeadChipTree, and MSG.

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 }

void DataQualityReader::HandleCommand JobCommand command  )  [virtual]
 

Implement to handle a JobCommand

Reimplemented from JobCModule.

Definition at line 437 of file DataQualityReader.cxx.

References JobCommand::PopCmd(), and JobCommand::PopOpt().

00438 {
00439   TString cmd = command->PopCmd();
00440   if(cmd=="Set"){
00441     TString opt = command->PopOpt();
00442 
00443   }
00444 }

void DataQualityReader::ProcessBlock TObject *  obj  )  [private]
 

Definition at line 493 of file DataQualityReader.cxx.

References fDQHeader, fDQHotColdElectronics, fDQLightInjection, fDQRawDigits, fDQSpillServer, fSnarl, MSG, DQLightInjection::Process(), DQSpillServer::Process(), DQHotColdElectronics::Process(), DQRawDigits::Process(), and DQHeader::Process().

Referenced by Reco().

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 }

void DataQualityReader::ProcessHeader TObject *  obj  )  [private]
 

Definition at line 471 of file DataQualityReader.cxx.

References fDQHeader, fDQRawDigits, MSG, DQRawDigits::Process(), and DQHeader::Process().

Referenced by Reco().

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 }

JobCResult DataQualityReader::Reco MomNavigator mom  )  [virtual]
 

Implement this for read-write access to the MomNavigator

Reimplemented from JobCModule.

Definition at line 99 of file DataQualityReader.cxx.

References MomNavigator::AdoptFragment(), ApplyFilter(), fCounter, fDQHeader, fDQHotColdElectronics, fDQLightInjection, fDQRawDigits, fDQSpillServer, fFilter, CandRecord::FindCandHandle(), MomNavigator::FragmentIter(), fRecord, fSnarl, AlgFactory::GetAlgHandle(), MomNavigator::GetFragment(), AlgFactory::GetInstance(), RawRecord::GetName(), RawRecord::GetRawBlockIter(), RawRecord::GetRawHeader(), DQHeader::GetRun(), DQHeader::GetSnarl(), RecMinosHdr::GetVldContext(), CandDataQuality::MakeCandidate(), MSG, ProcessBlock(), ProcessHeader(), run(), CandRecord::SecureCandHandle(), CandContext::SetCandRecord(), CandContext::SetDataIn(), JobCResult::SetFailed(), CandHandle::SetName(), JobCResult::SetPassed(), and CandHandle::SetTitle().

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 }


Member Data Documentation

Int_t DataQualityReader::Adc [private]
 

Definition at line 99 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::BusyChips [private]
 

Definition at line 91 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::ChannelId [private]
 

Definition at line 98 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::ChipStatus [private]
 

Definition at line 102 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::ColdChips [private]
 

Definition at line 89 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::CrateMask [private]
 

Definition at line 72 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::DataQuality [private]
 

Definition at line 93 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::Entries [private]
 

Definition at line 97 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::ErrorCode [private]
 

Definition at line 71 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::fCounter [private]
 

Definition at line 41 of file DataQualityReader.h.

Referenced by Reco().

TFile* DataQualityReader::fDataQualityFile [private]
 

Definition at line 61 of file DataQualityReader.h.

Referenced by Ana(), and EndJob().

TTree* DataQualityReader::fDataQualityTree [private]
 

Definition at line 62 of file DataQualityReader.h.

Referenced by Ana(), and EndJob().

TFile* DataQualityReader::fDeadChipFile [private]
 

Definition at line 95 of file DataQualityReader.h.

Referenced by Ana(), and EndJob().

TTree* DataQualityReader::fDeadChipTree [private]
 

Definition at line 96 of file DataQualityReader.h.

Referenced by Ana(), and EndJob().

DQHeader* DataQualityReader::fDQHeader [private]
 

Definition at line 43 of file DataQualityReader.h.

Referenced by ProcessBlock(), ProcessHeader(), and Reco().

DQHotColdElectronics* DataQualityReader::fDQHotColdElectronics [private]
 

Definition at line 45 of file DataQualityReader.h.

Referenced by ProcessBlock(), and Reco().

DQLightInjection* DataQualityReader::fDQLightInjection [private]
 

Definition at line 46 of file DataQualityReader.h.

Referenced by ProcessBlock(), and Reco().

DQRawDigits* DataQualityReader::fDQRawDigits [private]
 

Definition at line 44 of file DataQualityReader.h.

Referenced by ProcessBlock(), ProcessHeader(), and Reco().

DQSpillServer* DataQualityReader::fDQSpillServer [private]
 

Definition at line 47 of file DataQualityReader.h.

Referenced by ProcessBlock(), and Reco().

Bool_t DataQualityReader::fFilter [private]
 

Definition at line 40 of file DataQualityReader.h.

Referenced by Reco().

Int_t DataQualityReader::fFilterBadDataQuality [private]
 

Definition at line 56 of file DataQualityReader.h.

Referenced by DefaultConfig().

Int_t DataQualityReader::fFilterHighMultiplicity [private]
 

Definition at line 58 of file DataQualityReader.h.

Referenced by DefaultConfig().

Int_t DataQualityReader::fFilterLowMultiplicity [private]
 

Definition at line 57 of file DataQualityReader.h.

Referenced by DefaultConfig().

Int_t DataQualityReader::fFilterOnOff [private]
 

Definition at line 55 of file DataQualityReader.h.

Referenced by Config(), and DefaultConfig().

Int_t DataQualityReader::fFilterWord [private]
 

Definition at line 59 of file DataQualityReader.h.

Referenced by ApplyFilter(), Config(), and DefaultConfig().

Bool_t DataQualityReader::fRecord [private]
 

Definition at line 38 of file DataQualityReader.h.

Referenced by Reco().

Bool_t DataQualityReader::fSnarl [private]
 

Definition at line 39 of file DataQualityReader.h.

Referenced by ProcessBlock(), and Reco().

Int_t DataQualityReader::fWriteDataQuality [private]
 

Definition at line 53 of file DataQualityReader.h.

Referenced by Ana(), Config(), and DefaultConfig().

Int_t DataQualityReader::fWriteDeadChips [private]
 

Definition at line 54 of file DataQualityReader.h.

Referenced by Ana(), Config(), and DefaultConfig().

Int_t DataQualityReader::HotChips [private]
 

Definition at line 90 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::LiCalibPoint [private]
 

Definition at line 83 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::LiCalibType [private]
 

Definition at line 84 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::LiPulseHeight [private]
 

Definition at line 87 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::LiPulserBox [private]
 

Definition at line 85 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::LiPulserLed [private]
 

Definition at line 86 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::LiPulseWidth [private]
 

Definition at line 88 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::LiRelativeTime [private]
 

Definition at line 82 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::LiSubtractedTime [private]
 

Definition at line 81 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::LiTime [private]
 

Definition at line 80 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::LiTrigger [private]
 

Definition at line 79 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::PostTriggerDigits [private]
 

Definition at line 74 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::PreTriggerDigits [private]
 

Definition at line 73 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::ReadoutErrors [private]
 

Definition at line 92 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::Run [private]
 

Definition at line 65 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::RunType [private]
 

Definition at line 64 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::Snarl [private]
 

Definition at line 68 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::SnarlMultiplicity [private]
 

Definition at line 75 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::SpillStatus [private]
 

Definition at line 76 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::SpillTimeError [private]
 

Definition at line 78 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::SpillType [private]
 

Definition at line 77 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::SubRun [private]
 

Definition at line 66 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::Tdc [private]
 

Definition at line 100 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::Time [private]
 

Definition at line 63 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::TimeFrame [private]
 

Definition at line 67 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::TriggerRate [private]
 

Definition at line 101 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::TriggerSource [private]
 

Definition at line 69 of file DataQualityReader.h.

Referenced by Ana().

Int_t DataQualityReader::TriggerTime [private]
 

Definition at line 70 of file DataQualityReader.h.

Referenced by Ana().


The documentation for this class was generated from the following files:
Generated on Fri Mar 28 15:58:21 2008 for loon by  doxygen 1.3.9.1