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
00040
00041
00042 ClassImp(DataQualityReader)
00043
00044 CVSID("$Id: DataQualityReader.cxx,v 1.4 2009/06/02 17:51:50 kasahara 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
00073
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
00115
00116
00117
00118
00119 TIter momitr(mom->FragmentIter());
00120 RawRecord* rawrec = 0;
00121 while((momobject = momitr())){
00122 if(momobject->InheritsFrom("RawRecord")){
00123 fRecord=1;
00124 fCounter++;
00125 MSG("DataQuality",Msg::kInfo) << " *** RAW RECORD [" << fCounter << "] *** " << endl;
00126 rawrec = dynamic_cast<RawRecord*>(momobject);
00127
00128
00129 vldc = rawrec->GetRawHeader()->GetVldContext();
00130 this->ProcessHeader((TObject*)(rawrec->GetRawHeader()));
00131
00132
00133 TIter rawrecitr = rawrec->GetRawBlockIter();
00134 TObject* tob = 0;
00135 while((tob = rawrecitr())){
00136 MSG("DataQuality",Msg::kDebug) << " " << tob->GetName() << endl;
00137 this->ProcessBlock(tob);
00138 }
00139
00140 }
00141 }
00142
00143 if( !rawrec ){
00144 MSG("DataQuality",Msg::kWarning) << " *** FAILED TO FIND RAW RECORD *** " << endl;
00145 return result.SetFailed();
00146 }
00147
00148
00149
00150
00151
00152
00153
00154 if( fSnarl ){
00155 MSG("DataQuality",Msg::kInfo) << " *** MAKING DATA QUALITY CANDIDATE *** " << endl;
00156 run=fDQHeader->GetRun();
00157 snarl=fDQHeader->GetSnarl();
00158
00159
00160 CandRecord* candrec = dynamic_cast<CandRecord*>(mom->GetFragment("CandRecord", "PrimaryCandidateRecord"));
00161 if(candrec==0) {
00162 MSG("DataQuality",Msg::kInfo) << " *** MAKING NEW CANDRECORD (" << run << "," << snarl << ") ***" << endl;
00163 CandHeader *head = new CandHeader(vldc,run,snarl);
00164 candrec = new CandRecord(head);
00165 candrec->SetName("PrimaryCandidateRecord");
00166 candrec->SetTitle("Created from RawRecord.");
00167
00168 RecJobHistory& jobhist
00169 = const_cast<RecJobHistory&>(candrec->GetJobHistory());
00170 jobhist.Append(rawrec->GetJobHistory());
00171 jobhist.CreateJobRecord(RecJobHistory::kCand);
00172
00173 mom->AdoptFragment(candrec);
00174 }
00175
00176 AlgFactory &af = AlgFactory::GetInstance();
00177 AlgHandle ah = af.GetAlgHandle("AlgDataQuality", "default");
00178
00179
00180
00181 TObjArray* mycx = new TObjArray();
00182 mycx->Add(fDQHeader);
00183 mycx->Add(fDQRawDigits);
00184 mycx->Add(fDQHotColdElectronics);
00185 mycx->Add(fDQLightInjection);
00186 mycx->Add(fDQSpillServer);
00187
00188 CandContext cx(this, mom);
00189 cx.SetCandRecord(candrec);
00190 cx.SetDataIn(mycx);
00191 CandDataQualityHandle dataquality = CandDataQuality::MakeCandidate(ah,cx);
00192 dataquality.SetName("CandDataQualityHandle");
00193 dataquality.SetTitle(TString("Created by CandDataQualityReader"));
00194
00195 candrec->SecureCandHandle(dataquality);
00196
00197 delete mycx;
00198 }
00199
00200
00201
00202
00203
00204 if( fFilterOnOff ){
00205 MSG("DataQuality",Msg::kDebug) << " *** DATA QUALITY FILTER *** " << endl;
00206
00207 if( fSnarl ){
00208 CandRecord* candrec = dynamic_cast<CandRecord*>(mom->GetFragment("CandRecord", "PrimaryCandidateRecord"));
00209 if( candrec ){
00210 CandDataQualityHandle* cdh = dynamic_cast<CandDataQualityHandle*>(candrec->FindCandHandle("CandDataQualityHandle"));
00211 if( cdh ){
00212 fFilter = this->ApplyFilter(cdh);
00213 }
00214 }
00215 }
00216
00217 if( fFilter ){
00218 MSG("DataQuality",Msg::kDebug) << " *** PASSED FILTER *** " << endl;
00219 result.SetPassed();
00220 }
00221 else{
00222 MSG("DataQuality",Msg::kDebug) << " *** FAILED FILTER *** " << endl;
00223 result.SetFailed();
00224 }
00225 }
00226
00227 MSG("DataQuality",Msg::kInfo) << " *** DataQualityReader::Reco(...) FINISHED *** " << endl;
00228
00229 return result;
00230 }
00231
00232 JobCResult DataQualityReader::Ana(const MomNavigator* mom)
00233 {
00234 MSG("DataQuality",Msg::kDebug) << " *** DataQualityReader::Ana(...) *** " << endl;
00235
00236 JobCResult result(JobCResult::kPassed);
00237
00238
00239
00240 CandRecord* candrec = dynamic_cast<CandRecord*>(mom->GetFragment("CandRecord", "PrimaryCandidateRecord"));
00241 if( candrec ){
00242 CandDataQualityHandle* cdh = dynamic_cast<CandDataQualityHandle*>(candrec->FindCandHandle("CandDataQualityHandle"));
00243 if( cdh ){
00244
00245 Time=cdh->GetTime();
00246 RunType=cdh->GetRunType();
00247 Run=cdh->GetRun();
00248 SubRun=cdh->GetSubRun();
00249 TimeFrame=cdh->GetTimeFrame();
00250 Snarl=cdh->GetSnarl();
00251 TriggerSource=cdh->GetTriggerSource();
00252 TriggerTime=cdh->GetTriggerTime();
00253 ErrorCode=cdh->GetErrorCode();
00254 CrateMask=cdh->GetCrateMask();
00255 PreTriggerDigits=cdh->GetPreTriggerDigits();
00256 PostTriggerDigits=cdh->GetPostTriggerDigits();
00257 SnarlMultiplicity=cdh->GetSnarlMultiplicity();
00258 SpillStatus=cdh->GetSpillStatus();
00259 SpillType=cdh->GetSpillType();
00260 SpillTimeError=cdh->GetSpillTimeError();
00261 LiTrigger=cdh->GetLiTrigger();
00262 LiTime=cdh->GetLiTime();
00263 LiSubtractedTime=cdh->GetLiSubtractedTime();
00264 LiRelativeTime=cdh->GetLiRelativeTime();
00265 LiCalibPoint=cdh->GetLiCalibPoint();
00266 LiCalibType=cdh->GetLiCalibType();
00267 LiPulserBox=cdh->GetLiPulserBox();
00268 LiPulserLed=cdh->GetLiPulserLed();
00269 LiPulseHeight=cdh->GetLiPulseHeight();
00270 LiPulseWidth=cdh->GetLiPulseWidth();
00271 ColdChips=cdh->GetColdChips();
00272 HotChips=cdh->GetHotChips();
00273 BusyChips=cdh->GetBusyChips();
00274 ReadoutErrors=cdh->GetReadoutErrors();
00275 DataQuality=cdh->GetDataQuality();
00276
00277 if(fWriteDataQuality && !fDataQualityFile){
00278 TString mystring("dataquality.root");
00279 TDirectory* tmpd = gDirectory;
00280 fDataQualityFile = new TFile(mystring.Data(),"RECREATE");
00281 fDataQualityTree = new TTree("DataQuality","DataQuality");
00282 fDataQualityTree->SetAutoSave(300);
00283 fDataQualityTree->Branch("Time",&Time,"Time/I");
00284 fDataQualityTree->Branch("RunType",&RunType,"RunType/I");
00285 fDataQualityTree->Branch("Run",&Run,"Run/I");
00286 fDataQualityTree->Branch("SubRun",&SubRun,"SubRun/I");
00287 fDataQualityTree->Branch("TimeFrame",&TimeFrame,"TimeFrame/I");
00288 fDataQualityTree->Branch("Snarl",&Snarl,"Snarl/I");
00289 fDataQualityTree->Branch("TriggerSource",&TriggerSource,"TriggerSource/I");
00290 fDataQualityTree->Branch("TriggerTime",&TriggerTime,"TriggerTime/I");
00291 fDataQualityTree->Branch("ErrorCode",&ErrorCode,"ErrorCode/I");
00292 fDataQualityTree->Branch("CrateMask",&CrateMask,"CrateMask/I");
00293 fDataQualityTree->Branch("PreTriggerDigits",&PreTriggerDigits,"PreTriggerDigits/I");
00294 fDataQualityTree->Branch("PostTriggerDigits",&PostTriggerDigits,"PostTriggerDigits/I");
00295 fDataQualityTree->Branch("SnarlMultiplicity",&SnarlMultiplicity,"SnarlMultiplicity/I");
00296 fDataQualityTree->Branch("SpillStatus",&SpillStatus,"SpillStatus/I");
00297 fDataQualityTree->Branch("SpillType",&SpillType,"SpillType/I");
00298 fDataQualityTree->Branch("SpillTimeError",&SpillTimeError,"SpillTimeError/I");
00299 fDataQualityTree->Branch("LiTrigger",&LiTrigger,"LiTrigger/I");
00300 fDataQualityTree->Branch("LiTime",&LiTime,"LiTime/I");
00301 fDataQualityTree->Branch("LiSubtractedTime",&LiSubtractedTime,"LiSubtractedTime/I");
00302 fDataQualityTree->Branch("LiRelativeTime",&LiRelativeTime,"LiRelativeTime/I");
00303 fDataQualityTree->Branch("LiCalibPoint",&LiCalibPoint,"LiCalibPoint/I");
00304 fDataQualityTree->Branch("LiCalibType",&LiCalibType,"LiCalibType/I");
00305 fDataQualityTree->Branch("LiPulserBox",&LiPulserBox,"LiPulserBox/I");
00306 fDataQualityTree->Branch("LiPulserLed",&LiPulserLed,"LiPulserLed/I");
00307 fDataQualityTree->Branch("LiPulseHeight",&LiPulseHeight,"LiPulseHeight/I");
00308 fDataQualityTree->Branch("LiPulseWidth",&LiPulseWidth,"LiPulseWidth/I");
00309 fDataQualityTree->Branch("ColdChips",&ColdChips,"ColdChips/I");
00310 fDataQualityTree->Branch("HotChips",&HotChips,"HotChips/I");
00311 fDataQualityTree->Branch("BusyChips",&BusyChips,"BusyChips/I");
00312 fDataQualityTree->Branch("ReadoutErrors",&ReadoutErrors,"ReadoutErrors/I");
00313 fDataQualityTree->Branch("DataQuality",&DataQuality,"DataQuality/I");
00314 gDirectory = tmpd;
00315 }
00316
00317 if(fWriteDataQuality && fDataQualityFile){
00318 TDirectory* tmpd = gDirectory;
00319 fDataQualityFile->cd();
00320 fDataQualityTree->Fill();
00321 gDirectory = tmpd;
00322 }
00323
00324 TIter deadchipitr(cdh->GetDaughterIterator());
00325 while(CandDeadChipHandle* deadchip = dynamic_cast<CandDeadChipHandle*>(deadchipitr())){
00326 if( deadchip ){
00327
00328 Entries=deadchip->GetEntries();
00329 ChannelId=deadchip->GetChannelId().GetChAdd();
00330 Adc=deadchip->GetAdc();
00331 Tdc=deadchip->GetTdc();
00332 ErrorCode=deadchip->GetErrorCode();
00333 TriggerRate=deadchip->GetTriggerRate();
00334 ChipStatus=deadchip->GetChipStatus();
00335
00336 if(fWriteDeadChips && !fDeadChipFile){
00337 TString mystring("deadchips.root");
00338 TDirectory* tmpd = gDirectory;
00339 fDeadChipFile = new TFile(mystring.Data(),"RECREATE");
00340 fDeadChipTree = new TTree("DeadChips","DeadChips");
00341 fDeadChipTree->SetAutoSave(300);
00342 fDeadChipTree->Branch("Time",&Time,"Time/I");
00343 fDeadChipTree->Branch("Run",&Run,"Run/I");
00344 fDeadChipTree->Branch("SubRun",&SubRun,"SubRun/I");
00345 fDeadChipTree->Branch("TimeFrame",&TimeFrame,"TimeFrame/I");
00346 fDeadChipTree->Branch("Snarl",&Snarl,"Snarl/I");
00347 fDeadChipTree->Branch("Entries",&Entries,"Entries/I");
00348 fDeadChipTree->Branch("ChannelId",&ChannelId,"ChannelId/I");
00349 fDeadChipTree->Branch("Adc",&Adc,"Adc/I");
00350 fDeadChipTree->Branch("Tdc",&Tdc,"Tdc/I");
00351 fDeadChipTree->Branch("ErrorCode",&ErrorCode,"ErrorCode/I");
00352 fDeadChipTree->Branch("TriggerRate",&TriggerRate,"TriggerRate/I");
00353 fDeadChipTree->Branch("ChipStatus",&ChipStatus,"ChipStatus/I");
00354 gDirectory = tmpd;
00355 }
00356
00357 if(fWriteDeadChips && fDeadChipFile){
00358 TDirectory* tmpd = gDirectory;
00359 fDeadChipFile->cd();
00360 fDeadChipTree->Fill();
00361 gDirectory = tmpd;
00362 }
00363 }
00364
00365 }
00366 }
00367 }
00368
00369 return result;
00370 }
00371
00372 const Registry& DataQualityReader::DefaultConfig() const
00373 {
00374 MSG("DataQuality",Msg::kDebug) << " *** DataQualityReader::DefaultConfig() *** " << endl;
00375
00376 static Registry r;
00377 r.SetName("DataQualityReader.config.default");
00378 r.UnLockValues();
00379 r.Set("WriteDataQuality",fWriteDataQuality);
00380 r.Set("WriteDeadChips",fWriteDeadChips);
00381 r.Set("FilterOnOff",fFilterOnOff);
00382 r.Set("FilterBadDataQuality",fFilterBadDataQuality);
00383 r.Set("FilterLowMultiplicity",fFilterLowMultiplicity);
00384 r.Set("FilterHighMultiplicity",fFilterHighMultiplicity);
00385 r.Set("FilterWord",fFilterWord);
00386 r.LockValues();
00387
00388 return r;
00389 }
00390
00391 void DataQualityReader::Config(const Registry& r)
00392 {
00393 MSG("DataQuality",Msg::kDebug) << " *** DataQualityReader::Config() *** " << endl;
00394
00395 Int_t tmpint;
00396 Int_t tmpFilterWord;
00397
00398 if(r.Get("WriteDataQuality",tmpint)) fWriteDataQuality = tmpint;
00399 if(r.Get("WriteDeadChips",tmpint)) fWriteDeadChips = tmpint;
00400 if(r.Get("FilterOnOff",tmpint)) fFilterOnOff = tmpint;
00401
00402 if(r.Get("FilterBadDataQuality",tmpint)){
00403 if(tmpint){
00404 tmpFilterWord = fFilterWord;
00405 fFilterWord |= CandDataQuality::kBad;
00406 MSG("DataQuality",Msg::kDebug) << " Filter bad data quality : " << tmpFilterWord << "|CandDataQuality::kBad = " << fFilterWord << endl;
00407 }
00408 }
00409
00410 if(r.Get("FilterLowMultiplicity",tmpint)){
00411 if(tmpint){
00412 tmpFilterWord = fFilterWord;
00413 fFilterWord |= CandDataQuality::kLowMultiplicity;
00414 MSG("DataQuality",Msg::kDebug) << " Filter low multiplicity : " << tmpFilterWord << "|CandDataQuality::kLowMultiplicity = " << fFilterWord << endl;
00415 }
00416 }
00417
00418 if(r.Get("FilterHighMultiplicity",tmpint)){
00419 if(tmpint){
00420 tmpFilterWord = fFilterWord;
00421 fFilterWord |= CandDataQuality::kHighMultiplicity;
00422 MSG("DataQuality",Msg::kDebug) << " Filter high multiplicity : " << tmpFilterWord << "|CandDataQuality::kHighMultiplicity = " << fFilterWord << endl;
00423 }
00424 }
00425
00426 if(r.Get("FilterWord",tmpint)){
00427 if(tmpint){
00428 tmpFilterWord = fFilterWord;
00429 fFilterWord |= tmpint;
00430 MSG("DataQuality",Msg::kDebug) << " Filter word : " << tmpFilterWord << "|" << tmpint << " = " << fFilterWord << endl;
00431 }
00432 }
00433
00434 MSG("DataQuality",Msg::kDebug)
00435 << " configuration: " << endl
00436 << " WriteDataQuality=" << fWriteDataQuality << endl
00437 << " WriteDeadChips=" << fWriteDeadChips << endl
00438 << " FilterOnOff=" << fFilterOnOff << endl
00439 << " FilterWord=" << fFilterWord << endl;
00440
00441 return;
00442 }
00443
00444 void DataQualityReader::HandleCommand(JobCommand* command)
00445 {
00446 TString cmd = command->PopCmd();
00447 if(cmd=="Set"){
00448 TString opt = command->PopOpt();
00449
00450 }
00451 }
00452
00453 void DataQualityReader::EndJob()
00454 {
00455 MSG("DataQuality",Msg::kInfo) << " *** DataQualityReader::EndJob() *** " << endl;
00456
00457 if(fDataQualityFile){
00458 MSG("DataQuality",Msg::kInfo) << " *** saving data quality info to file ... " << endl;
00459 TDirectory* tmpd = gDirectory;
00460 fDataQualityFile->cd();
00461 fDataQualityTree->Write();
00462 fDataQualityFile->Close();
00463 gDirectory = tmpd;
00464 MSG("DataQuality",Msg::kInfo) << " ... data quality info saved to file *** " << endl;
00465 }
00466
00467 if(fDeadChipFile){
00468 MSG("DataQuality",Msg::kInfo) << " *** saving dead chip info to file ... " << endl;
00469 TDirectory* tmpd = gDirectory;
00470 fDeadChipFile->cd();
00471 fDeadChipTree->Write();
00472 fDeadChipFile->Close();
00473 gDirectory = tmpd;
00474 MSG("DataQuality",Msg::kInfo) << " ... dead chip info saved to file *** " << endl;
00475 }
00476 }
00477
00478 void DataQualityReader::ProcessHeader(TObject* obj)
00479 {
00480
00481
00482
00483 if(obj->InheritsFrom("RawDaqHeader")){
00484 MSG("DataQuality",Msg::kDebug) << " ... found RawDaqHeader " << endl;
00485 RawDaqHeader* hdr = (RawDaqHeader*)(obj);
00486 fDQHeader->Process(hdr);
00487 fDQRawDigits->Process(hdr);
00488 }
00489
00490
00491
00492 if(obj->InheritsFrom("RawDaqSnarlHeader")){
00493 MSG("DataQuality",Msg::kDebug) << " ... found RawDaqSnarlHeader " << endl;
00494 RawDaqSnarlHeader* hdr = (RawDaqSnarlHeader*)(obj);
00495 fDQHeader->Process(hdr);
00496 fDQRawDigits->Process(hdr);
00497 }
00498 }
00499
00500 void DataQualityReader::ProcessBlock(TObject* obj)
00501 {
00502
00503
00504
00505 if(obj->InheritsFrom("RawDaqHeaderBlock")){
00506 MSG("DataQuality",Msg::kDebug) << " ... found RawDaqHeaderBlock " << endl;
00507 RawDaqHeaderBlock* rdb = (RawDaqHeaderBlock*)(obj);
00508 fDQHeader->Process(rdb);
00509 fDQRawDigits->Process(rdb);
00510 }
00511
00512 if(obj->InheritsFrom("RawSnarlHeaderBlock")){
00513 MSG("DataQuality",Msg::kDebug) << " ... found RawSnarlHeaderBlock " << endl;
00514 RawSnarlHeaderBlock* rdb = (RawSnarlHeaderBlock*)(obj);
00515 fDQHeader->Process(rdb);
00516 fDQRawDigits->Process(rdb);
00517 }
00518
00519
00520
00521 if(obj->InheritsFrom("RawTpSinglesSummaryBlock")){
00522 MSG("DataQuality",Msg::kDebug) << " ... found RawTpSinglesSummaryBlock " << endl;
00523 RawTpSinglesSummaryBlock* rdb = (RawTpSinglesSummaryBlock*)(obj);
00524 fDQHotColdElectronics->Process(rdb);
00525 }
00526
00527 if(obj->InheritsFrom("RawSpillServerMonitorBlock")){
00528 MSG("DataQuality",Msg::kDebug) << " ... found RawSpillServerMonitorBlock " << endl;
00529 RawSpillServerMonitorBlock* rdb = (RawSpillServerMonitorBlock*)(obj);
00530 fDQSpillServer->Process(rdb);
00531 }
00532
00533 if(obj->InheritsFrom("RawLiTpmtDigitsBlock")){
00534 MSG("DataQuality",Msg::kDebug) << " ... found RawLiTpmtDigitsBlock " << endl;
00535 RawLiTpmtDigitsBlock* rdb = (RawLiTpmtDigitsBlock*)(obj);
00536 fDQLightInjection->Process(rdb);
00537 }
00538
00539
00540
00541 if(obj->InheritsFrom("RawLIAdcSummaryBlock")){
00542 MSG("DataQuality",Msg::kDebug) << " ... found RawLIAdcSummaryBlock " << endl;
00543 RawLIAdcSummaryBlock* rdb = (RawLIAdcSummaryBlock*)(obj);
00544 fDQLightInjection->Process(rdb);
00545 }
00546
00547
00548
00549 if(obj->InheritsFrom("RawDigitDataBlock")){
00550 MSG("DataQuality",Msg::kDebug) << " ... found RawDigitDataBlock " << endl;
00551 RawDigitDataBlock* rdb = (RawDigitDataBlock*)(obj);
00552 fDQRawDigits->Process(rdb);
00553 fSnarl=1;
00554 }
00555
00556 }
00557
00558 Bool_t DataQualityReader::ApplyFilter(CandDataQualityHandle* cdh)
00559 {
00560
00561
00562
00563
00564
00565
00566
00567 Bool_t filter=0;
00568
00569 if( ( fFilterWord==0 || cdh->GetDataQuality()==0 )
00570 || ( (cdh->GetDataQuality()&fFilterWord)==0 ) ) filter=1;
00571
00572 MSG("DataQuality",Msg::kVerbose) << " APPLY FILTER [filterword=" << fFilterWord << ", quality=" << cdh->GetDataQuality() << ", filter=" << filter << "]" << endl;
00573
00574 return filter;
00575 }