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
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
00040
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
00072
00073
00074
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
00085 this->ProcessHeader((TObject*)(rawrec->GetRawHeader()));
00086
00087
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
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
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
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
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
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 }