CMS 3D CMS Logo

CastorMonitorModule.cc
Go to the documentation of this file.
8 //#include "CondFormats/CastorObjects/interface/CastorChannelQuality.h"
9 #include <string>
10 
11 //**************************************************************//
12 //***************** CastorMonitorModule ******************//
13 //***************** Author: Dmytro Volyanskyy ******************//
14 //***************** Date : 22.11.2008 (first version) *********//
20 //**************************************************************//
21 
22 //---- critical revision 26.06.2014 (Vladimir Popov)
23 
24 //**************************************************************//
25 
26 using namespace std;
27 using namespace edm;
28 
30  fVerbosity = ps.getUntrackedParameter<int>("debug", 0);
31  subsystemname_ = ps.getUntrackedParameter<std::string>("subSystemFolder", "Castor");
32  inputTokenRaw_ = consumes<FEDRawDataCollection>(ps.getParameter<edm::InputTag>("rawLabel"));
33  inputTokenReport_ = consumes<HcalUnpackerReport>(ps.getParameter<edm::InputTag>("unpackerReportLabel"));
34  inputTokenDigi_ = consumes<CastorDigiCollection>(ps.getParameter<edm::InputTag>("digiLabel"));
35  inputTokenRecHitCASTOR_ = consumes<CastorRecHitCollection>(ps.getParameter<edm::InputTag>("CastorRecHitLabel"));
36  inputTokenCastorTowers_ = consumes<CastorTowerCollection>(ps.getParameter<edm::InputTag>("CastorTowerLabel"));
37  JetAlgorithm = consumes<BasicJetCollection>(ps.getParameter<edm::InputTag>("CastorBasicJetsLabel"));
38  tokenTriggerResults = consumes<edm::TriggerResults>(ps.getParameter<edm::InputTag>("tagTriggerResults"));
39 
40  showTiming_ = ps.getUntrackedParameter<bool>("showTiming", false);
41 
42  if (ps.getUntrackedParameter<bool>("DigiMonitor", false))
43  DigiMon_ = std::make_unique<CastorDigiMonitor>(ps);
44 
45  if (ps.getUntrackedParameter<bool>("RecHitMonitor", false))
46  RecHitMon_ = std::make_unique<CastorRecHitMonitor>(ps);
47 
48  if (ps.getUntrackedParameter<bool>("LEDMonitor", false))
49  LedMon_ = std::make_unique<CastorLEDMonitor>(ps);
50 
51  ievt_ = 0;
52 }
53 
55 
56 void CastorMonitorModule::dqmBeginRun(const edm::Run &iRun, const edm::EventSetup &iSetup) {
57  if (fVerbosity > 0)
58  LogPrint("CastorMonitorModule") << "dqmBeginRun(start)";
59 }
60 
62  const edm::Run &iRun,
63  const edm::EventSetup &iSetup) {
64  if (DigiMon_) {
65  DigiMon_->bookHistograms(ibooker, iRun, iSetup);
66  }
67  if (RecHitMon_) {
68  RecHitMon_->bookHistograms(ibooker, iRun, iSetup);
69  }
70  if (LedMon_) {
71  LedMon_->bookHistograms(ibooker, iRun, iSetup);
72  }
73 
74  ibooker.setCurrentFolder(subsystemname_);
75  char s[60];
76  sprintf(s, "CastorEventProducts");
77  CastorEventProduct = ibooker.book1DD(s, s, 6, -0.5, 5.5);
78  CastorEventProduct->getTH1D()->GetYaxis()->SetTitle("Events");
79  TAxis *xa = CastorEventProduct->getTH1D()->GetXaxis();
80  xa->SetBinLabel(1, "FEDs/3");
81  xa->SetBinLabel(2, "RawData");
82  xa->SetBinLabel(3, "Digi");
83  xa->SetBinLabel(4, "RecHits");
84  xa->SetBinLabel(5, "Towers");
85  xa->SetBinLabel(6, "Jets");
86 
87  sprintf(s, "CASTORUnpackReport");
88  hunpkrep = ibooker.bookProfile(s, s, 6, -0.5, 5.5, 100, 0, 1.e10, "");
89  xa = hunpkrep->getTProfile()->GetXaxis();
90  xa->SetBinLabel(1, "N_FEDs");
91  xa->SetBinLabel(2, "SPIGOT_Err");
92  xa->SetBinLabel(3, "empty");
93  xa->SetBinLabel(4, "busy");
94  xa->SetBinLabel(5, "OvF");
95  xa->SetBinLabel(6, "BadDigis");
96  return;
97 }
98 
99 void CastorMonitorModule::endRun(const edm::Run &r, const edm::EventSetup &context) {
100  if (DigiMon_) {
101  DigiMon_->endRun();
102  }
103 }
104 
106  if (fVerbosity > 1)
107  LogPrint("CastorMonitorModule") << "analyze (start)";
108 
109  ievt_++;
110 
111  bool rawOK_ = true;
112  bool digiOK_ = true;
113  bool rechitOK_ = true, towerOK_ = true, jetsOK_ = true;
114  int nDigi = 0, nrecHits = 0, nTowers = 0, nJets = 0;
115 
117  iEvent.getByToken(tokenTriggerResults, TrigResults);
118 
120  iEvent.getByToken(inputTokenRaw_, RawData);
121  if (!RawData.isValid())
122  rawOK_ = false;
123 
124  float fedsUnpacked = 0.;
126  iEvent.getByToken(inputTokenReport_, report);
127  if (!report.isValid())
128  rawOK_ = false;
129  else {
130  const std::vector<int> feds = (*report).getFedsUnpacked();
131  fedsUnpacked = float(feds.size());
132  hunpkrep->Fill(0, fedsUnpacked);
133  hunpkrep->Fill(1, report->spigotFormatErrors());
134  hunpkrep->Fill(2, report->emptyEventSpigots());
135  hunpkrep->Fill(3, report->busySpigots());
136  hunpkrep->Fill(4, report->OFWSpigots());
137  hunpkrep->Fill(5, report->badQualityDigis());
138  }
139 
141  iEvent.getByToken(inputTokenDigi_, CastorDigi);
142  if (CastorDigi.isValid())
143  nDigi = CastorDigi->size();
144  else
145  digiOK_ = false;
146 
148  iEvent.getByToken(inputTokenRecHitCASTOR_, CastorHits);
149  if (CastorHits.isValid())
150  nrecHits = CastorHits->size();
151  else
152  rechitOK_ = false;
153 
155  iEvent.getByToken(inputTokenCastorTowers_, castorTowers);
156  if (castorTowers.isValid())
157  nTowers = castorTowers->size();
158  else
159  towerOK_ = false;
160 
162  iEvent.getByToken(JetAlgorithm, jets);
163  if (jets.isValid())
164  nJets = jets->size();
165  else
166  jetsOK_ = false;
167 
168  if (fVerbosity > 0)
169  LogPrint("CastorMonitorModule") << "CastorProductValid(size): RawDataValid=" << RawData.isValid()
170  << " Digi=" << digiOK_ << "(" << nDigi << ") Hits=" << rechitOK_ << "(" << nrecHits
171  << ")"
172  << " Towers=" << towerOK_ << "(" << nTowers << ")"
173  << " Jets=" << jetsOK_ << "(" << nJets << ")";
174 
175  CastorEventProduct->Fill(0, fedsUnpacked / 3.);
176  CastorEventProduct->Fill(1, rawOK_);
177  CastorEventProduct->Fill(2, digiOK_);
178  CastorEventProduct->Fill(3, rechitOK_);
179  CastorEventProduct->Fill(4, towerOK_);
180  CastorEventProduct->Fill(5, jetsOK_);
181 
182  if (digiOK_) {
184  iSetup.get<CastorDbRecord>().get(conditions);
185 
186  DigiMon_->processEvent(iEvent, *CastorDigi, *TrigResults, *conditions);
187  }
188  if (showTiming_) {
189  cpu_timer.stop();
190  if (DigiMon_ != nullptr)
191  std::cout << "TIMER:: DIGI MONITOR ->" << cpu_timer.cpuTime() << std::endl;
192  cpu_timer.reset();
193  cpu_timer.start();
194  }
195 
196  if (rechitOK_)
197  RecHitMon_->processEvent(*CastorHits);
198  if (showTiming_) {
199  cpu_timer.stop();
200  if (RecHitMon_ != nullptr)
201  std::cout << "TIMER:: RECHIT MONITOR->" << cpu_timer.cpuTime() << std::endl;
202  cpu_timer.reset();
203  cpu_timer.start();
204  }
205 
206  if (towerOK_)
207  RecHitMon_->processEventTowers(*castorTowers);
208  if (jetsOK_)
209  RecHitMon_->processEventJets(*jets);
210 
211  if (fVerbosity > 0 && ievt_ % 100 == 0)
212  LogPrint("CastorMonitorModule") << "processed " << ievt_ << " events";
213  return;
214 }
215 
TProfile * getTProfile() const
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
int spigotFormatErrors() const
int emptyEventSpigots() const
MonitorElement * bookProfile(Args &&...args)
Definition: DQMStore.h:113
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
void endRun(const edm::Run &run, const edm::EventSetup &eventSetup) override
void dqmBeginRun(const edm::Run &, const edm::EventSetup &) override
int iEvent
Definition: GenABIO.cc:224
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:268
CastorMonitorModule(const edm::ParameterSet &ps)
vector< PseudoJet > jets
bool isValid() const
Definition: HandleBase.h:74
int badQualityDigis() const
void analyze(const edm::Event &iEvent, const edm::EventSetup &eventSetup) override
HLT enums.
size_type size() const
T get() const
Definition: EventSetup.h:71
TH1D * getTH1D() const
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
MonitorElement * book1DD(Args &&...args)
Definition: DQMStore.h:108
int busySpigots() const
Definition: Run.h:45