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.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
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 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
00128 vldc = rawrec->GetRawHeader()->GetVldContext();
00129 this->ProcessHeader((TObject*)(rawrec->GetRawHeader()));
00130
00131
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
00149
00150
00151
00152
00153 if( fSnarl ){
00154 MSG("DataQuality",Msg::kInfo) << " *** MAKING DATA QUALITY CANDIDATE *** " << endl;
00155 run=fDQHeader->GetRun();
00156 snarl=fDQHeader->GetSnarl();
00157
00158
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
00173
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
00194
00195
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
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
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
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
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
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
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
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
00554
00555
00556
00557
00558
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 }