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

DumpBadElectronics.cxx

Go to the documentation of this file.
00001 #include "DumpBadElectronics.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/RawChannelId.h"
00013   
00014 #include "RawData/RawDaqHeaderBlock.h"
00015 #include "RawData/RawSnarlHeaderBlock.h"
00016 #include "RawData/RawTpSinglesSummaryBlock.h"
00017 
00018 //
00019 // $Log $
00020 //
00021  
00022 ClassImp(DumpBadElectronics)
00023  
00024 CVSID("$Id: DumpBadElectronics.cxx,v 1.1 2006/03/19 17:24:34 blake Exp $");
00025  
00026 JOBMODULE(DumpBadElectronics,"DumpBadElectronics","DumpBadElectronics");
00027  
00028 DumpBadElectronics::DumpBadElectronics() :
00029   fTime(0),
00030   fRecord(0),
00031   fCounter(0),
00032   fDQHeader(0),
00033   fDQHotColdElectronics(0),
00034   fBadElectronicsFile(0),
00035   fBadElectronicsTree(0)
00036 {
00037   MSG("DataQuality",Msg::kInfo) << " *** DumpBadElectronics::DumpBadElectronics() *** " << endl;
00038 
00039   // Create the monitoring objects which extract the
00040   // monitoring information from the raw data blocks
00041 
00042   fDQHeader = new DQHeader();
00043   fDQHotColdElectronics = new DQHotColdElectronics();
00044 }
00045 
00046 DumpBadElectronics::~DumpBadElectronics()
00047 {
00048   MSG("DataQuality",Msg::kInfo) << " *** DumpBadElectronics::~DumpBadElectronics() *** " << endl;
00049 
00050   delete fDQHeader;  
00051   delete fDQHotColdElectronics;
00052 
00053 }
00054                                                             
00055 void DumpBadElectronics::BeginJob()
00056 {
00057   MSG("DataQuality",Msg::kInfo) << " *** DumpBadElectronics::BeginJob() *** " << endl;
00058 
00059 }
00060 
00061 JobCResult DumpBadElectronics::Ana(const MomNavigator* mom)
00062 {
00063   MSG("DataQuality",Msg::kDebug) << " *** DumpBadElectronics::Ana(...) *** " << endl;
00064 
00065   JobCResult result(JobCResult::kPassed);
00066 
00067   TObject* momobject = 0;
00068 
00069   fRecord=0;
00070 
00071   // PROCESS RAW RECORDS
00072   // ===================
00073   // Iterate over raw records in mom and extract
00074   // monitoring information from raw data blocks
00075                    
00076   TIter momitr(mom->FragmentIter());
00077   while((momobject = momitr())){
00078     if(momobject->InheritsFrom("RawRecord")){
00079       fRecord=1;
00080       fCounter++;
00081       MSG("DataQuality",Msg::kInfo) << "  *** RAW RECORD [" << fCounter << "] ***  " << endl;
00082       RawRecord* rawrec = dynamic_cast<RawRecord*>(momobject);
00083 
00084       // Process the raw header
00085       this->ProcessHeader((TObject*)(rawrec->GetRawHeader()));
00086 
00087       // Iterate over the raw blocks in raw record
00088       TIter rawrecitr = rawrec->GetRawBlockIter();
00089       TObject* tob = 0;
00090       while((tob = rawrecitr())){
00091         MSG("DataQuality",Msg::kDebug) << " " << tob->GetName() << endl;
00092         this->ProcessBlock(tob);
00093       }
00094                                                        
00095     }
00096   }
00097                                               
00098   if( !fRecord ){
00099     MSG("DataQuality",Msg::kWarning) << "  *** FAILED TO FIND RAW RECORD ***  " << endl;
00100     return result.SetFailed();
00101   }
00102 
00103   // WRITE OUT RESULTS
00104   // =================
00105 
00106   if( fDQHotColdElectronics->GetTime()>fTime ){
00107     fTime=fDQHotColdElectronics->GetTime();
00108     this->WriteOutResults();
00109   }
00110 
00111   return result;
00112 }
00113 
00114 const Registry& DumpBadElectronics::DefaultConfig() const
00115 {
00116   MSG("DataQuality",Msg::kInfo) << " *** DumpBadElectronics::DefaultConfig() *** " << endl;
00117  
00118   static Registry r;
00119   r.SetName("DumpBadElectronics.config.default");
00120   r.UnLockValues();
00121   
00122   r.LockValues();
00123                                                  
00124   return r;
00125 }
00126                                                   
00127 void DumpBadElectronics::Config(const Registry&)
00128 {
00129   MSG("DataQuality",Msg::kInfo) << " *** DumpBadElectronics::Config() *** " << endl;
00130 
00131 }
00132 
00133 void DumpBadElectronics::HandleCommand(JobCommand* command)
00134 {
00135   TString cmd = command->PopCmd();
00136   if(cmd=="Set"){
00137     TString opt = command->PopOpt();
00138  
00139   }
00140 }
00141  
00142 void DumpBadElectronics::EndJob()
00143 {
00144   MSG("DataQuality",Msg::kInfo) << " *** DumpBadElectronics::EndJob() *** " << endl;
00145  
00146   if(fBadElectronicsFile){
00147     MSG("DataQuality",Msg::kInfo) << " *** saving info to file ... " << endl;
00148     TDirectory* tmpd = gDirectory;
00149     fBadElectronicsFile->cd();
00150     fBadElectronicsTree->Write();
00151     fBadElectronicsFile->Close();
00152     gDirectory = tmpd;
00153     MSG("DataQuality",Msg::kInfo) << "      ... info saved to file *** " << endl;
00154   }
00155 }
00156 
00157 void DumpBadElectronics::ProcessHeader(TObject* obj)
00158 {
00159                                                                   
00160   // DAQ HEADER
00161   // ==========
00162   if(obj->InheritsFrom("RawDaqHeader")){
00163     MSG("DataQuality",Msg::kDebug) << " ... found RawDaqHeader " << endl;
00164     RawDaqHeader* hdr = (RawDaqHeader*)(obj);
00165     fDQHeader->Process(hdr);
00166   }
00167                                                          
00168   // SNARL HEADER
00169   // ============
00170   if(obj->InheritsFrom("RawDaqSnarlHeader")){
00171     MSG("DataQuality",Msg::kDebug) << " ... found RawDaqSnarlHeader " << endl;
00172     RawDaqSnarlHeader* hdr = (RawDaqSnarlHeader*)(obj);
00173     fDQHeader->Process(hdr);
00174   }
00175 }
00176 
00177 void DumpBadElectronics::ProcessBlock(TObject* obj)
00178 {
00179              
00180   // HEADER BLOCKS
00181   // =============
00182   if(obj->InheritsFrom("RawDaqHeaderBlock")){
00183     MSG("DataQuality",Msg::kDebug) << " ... found RawDaqHeaderBlock " << endl;
00184     RawDaqHeaderBlock* rdb = (RawDaqHeaderBlock*)(obj);
00185     fDQHeader->Process(rdb); 
00186   }
00187                               
00188   if(obj->InheritsFrom("RawSnarlHeaderBlock")){
00189     MSG("DataQuality",Msg::kDebug) << " ... found RawSnarlHeaderBlock " << endl;
00190     RawSnarlHeaderBlock* rdb = (RawSnarlHeaderBlock*)(obj);
00191     fDQHeader->Process(rdb);
00192   }
00193                                                           
00194   // TP SINGLES SUMMARY BLOCK
00195   // ========================
00196   if(obj->InheritsFrom("RawTpSinglesSummaryBlock")){
00197     MSG("DataQuality",Msg::kDebug) << " ... found RawTpSinglesSummaryBlock " << endl;
00198     RawTpSinglesSummaryBlock* rdb = (RawTpSinglesSummaryBlock*)(obj);
00199     fDQHotColdElectronics->Process(rdb);
00200   }
00201 
00202 }
00203 
00204 void DumpBadElectronics::WriteOutResults()
00205 {
00206   MSG("DataQuality",Msg::kVerbose) << " *** DumpBadElectronics::WriteOutResults() *** " << endl;
00207 
00208   Time=fDQHotColdElectronics->GetTime();
00209   Crates=fDQHotColdElectronics->GetNumberOfCrates();
00210   CratesInReadout=fDQHotColdElectronics->GetNumberOfCratesInReadout();
00211 
00212   for(Int_t k=0;k<2;k++){
00213     ColdChips[k]=fDQHotColdElectronics->GetColdChips(k+1);
00214     HotChips[k]=fDQHotColdElectronics->GetHotChips(k+1);
00215   }
00216 
00217   if(!fBadElectronicsFile){
00218     TString mystring("badchips.root");
00219     TDirectory* tmpd = gDirectory;
00220     fBadElectronicsFile = new TFile(mystring.Data(),"RECREATE");
00221     fBadElectronicsTree = new TTree("BadChips","BadChips");
00222     fBadElectronicsTree->SetAutoSave(300);
00223     fBadElectronicsTree->Branch("Time",&Time,"Time/I");
00224     fBadElectronicsTree->Branch("Crates",&Crates,"Crates/I");
00225     fBadElectronicsTree->Branch("CratesInReadout",&CratesInReadout,"CratesInReadout/I");
00226     fBadElectronicsTree->Branch("ColdChips",ColdChips,"ColdChips[2]/I");
00227     fBadElectronicsTree->Branch("HotChips",HotChips,"HotChips[2]/I");
00228     gDirectory = tmpd;
00229   }
00230  
00231   if(fBadElectronicsFile){
00232     TDirectory* tmpd = gDirectory;
00233     fBadElectronicsFile->cd();
00234     fBadElectronicsTree->Fill();
00235     gDirectory = tmpd;
00236   }
00237 
00238 }

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