File indexing completed on 2023-03-17 10:54:33
0001 #include "DQM/EcalMonitorTasks/interface/EcalFEDMonitor.h"
0002 #include "DataFormats/EcalDetId/interface/EcalSubdetector.h"
0003 #include "FWCore/Framework/interface/MakerMacros.h"
0004
0005 template <int SUBDET>
0006 EcalFEDMonitorTemp<SUBDET>::EcalFEDMonitorTemp(edm::ParameterSet const& _ps)
0007 : folderName_(_ps.getUntrackedParameter<std::string>("folderName")),
0008 FEDRawDataToken_(consumes<FEDRawDataCollection>(_ps.getParameter<edm::InputTag>("FEDRawDataCollection"))),
0009 ebGainErrorsToken_(),
0010 eeGainErrorsToken_(),
0011 ebChIdErrorsToken_(),
0012 eeChIdErrorsToken_(),
0013 ebGainSwitchErrorsToken_(),
0014 eeGainSwitchErrorsToken_(),
0015 towerIdErrorsToken_(
0016 consumes<EcalElectronicsIdCollection>(_ps.getParameter<edm::InputTag>("EcalElectronicsIdCollection1"))),
0017 blockSizeErrorsToken_(
0018 consumes<EcalElectronicsIdCollection>(_ps.getParameter<edm::InputTag>("EcalElectronicsIdCollection2"))),
0019 elecMapHandle(esConsumes<edm::Transition::BeginRun>()),
0020 MEs_(nMEs, nullptr) {
0021 if (_ps.existsAs<edm::InputTag>("EBDetIdCollection1"))
0022 ebGainErrorsToken_ = consumes<EBDetIdCollection>(_ps.getParameter<edm::InputTag>("EBDetIdCollection1"));
0023 if (_ps.existsAs<edm::InputTag>("EEDetIdCollection1"))
0024 eeGainErrorsToken_ = consumes<EEDetIdCollection>(_ps.getParameter<edm::InputTag>("EEDetIdCollection1"));
0025 if (_ps.existsAs<edm::InputTag>("EBDetIdCollection2"))
0026 ebChIdErrorsToken_ = consumes<EBDetIdCollection>(_ps.getParameter<edm::InputTag>("EBDetIdCollection2"));
0027 if (_ps.existsAs<edm::InputTag>("EEDetIdCollection2"))
0028 eeChIdErrorsToken_ = consumes<EEDetIdCollection>(_ps.getParameter<edm::InputTag>("EEDetIdCollection2"));
0029 if (_ps.existsAs<edm::InputTag>("EBDetIdCollection3"))
0030 ebGainSwitchErrorsToken_ = consumes<EBDetIdCollection>(_ps.getParameter<edm::InputTag>("EBDetIdCollection3"));
0031 if (_ps.existsAs<edm::InputTag>("EEDetIdCollection3"))
0032 eeGainSwitchErrorsToken_ = consumes<EEDetIdCollection>(_ps.getParameter<edm::InputTag>("EEDetIdCollection3"));
0033 }
0034
0035 template <int SUBDET>
0036 void EcalFEDMonitorTemp<SUBDET>::dqmBeginRun(edm::Run const&, edm::EventSetup const& _es) {
0037 setElectronicsMap(_es);
0038 }
0039
0040 template <int SUBDET>
0041 void EcalFEDMonitorTemp<SUBDET>::bookHistograms(DQMStore::IBooker& _ibooker, edm::Run const&, edm::EventSetup const&) {
0042 _ibooker.cd();
0043
0044 std::string name;
0045
0046 if (SUBDET == EcalBarrel || SUBDET < 0) {
0047 _ibooker.setCurrentFolder("EcalBarrel/" + folderName_);
0048
0049 name = "FEDEntries";
0050 MEs_[kEBOccupancy] = _ibooker.book1D(name, name, 36, 610, 646);
0051
0052 name = "FEDFatal";
0053 MEs_[kEBFatal] = _ibooker.book1D(name, name, 36, 610, 646);
0054
0055 name = "FEDNonFatal";
0056 MEs_[kEBNonFatal] = _ibooker.book1D(name, name, 36, 610, 646);
0057 }
0058 if (SUBDET == EcalEndcap || SUBDET < 0) {
0059 _ibooker.setCurrentFolder("EcalEndcap/" + folderName_);
0060
0061 name = "FEDEntries";
0062 MEs_[kEEOccupancy] = _ibooker.book1D(name, name, 54, 601, 655);
0063
0064 name = "FEDFatal";
0065 MEs_[kEEFatal] = _ibooker.book1D(name, name, 54, 601, 655);
0066
0067 name = "FEDNonFatal";
0068 MEs_[kEENonFatal] = _ibooker.book1D(name, name, 54, 601, 655);
0069 }
0070 }
0071
0072 template <int SUBDET>
0073 void EcalFEDMonitorTemp<SUBDET>::analyze(edm::Event const& _evt, edm::EventSetup const&) {
0074 edm::Handle<FEDRawDataCollection> fedHndl;
0075 if (_evt.getByToken(FEDRawDataToken_, fedHndl)) {
0076 for (unsigned fedId(601); fedId <= 654; fedId++) {
0077 if (SUBDET == EcalBarrel && (fedId < 610 || fedId > 645))
0078 continue;
0079 if (SUBDET == EcalEndcap && (fedId > 609 && fedId < 646))
0080 continue;
0081
0082 unsigned occupancy(-1);
0083
0084 if (fedId < 610 || fedId > 645) {
0085 occupancy = kEEOccupancy;
0086
0087 } else {
0088 occupancy = kEBOccupancy;
0089
0090 }
0091
0092 const FEDRawData& fedData(fedHndl->FEDData(fedId));
0093 unsigned length(fedData.size() / sizeof(uint64_t));
0094
0095 if (length > 1) {
0096 MEs_[occupancy]->Fill(fedId + 0.5);
0097
0098
0099
0100
0101
0102 }
0103 }
0104 }
0105
0106 edm::Handle<EBDetIdCollection> ebHndl;
0107 edm::Handle<EEDetIdCollection> eeHndl;
0108 edm::Handle<EcalElectronicsIdCollection> eleHndl;
0109
0110 if ((SUBDET == EcalBarrel || SUBDET < 0) && _evt.getByToken(ebGainErrorsToken_, ebHndl)) {
0111 EBDetIdCollection::const_iterator ebEnd(ebHndl->end());
0112 for (EBDetIdCollection::const_iterator ebItr(ebHndl->begin()); ebItr != ebEnd; ++ebItr) {
0113 unsigned iDCC(ecaldqm::dccId(*ebItr, GetElectronicsMap()) - 1);
0114
0115 double normalization(ecaldqm::nCrystals(iDCC + 1));
0116 if (normalization < 1.)
0117 continue;
0118
0119 MEs_[kEBNonFatal]->Fill(iDCC + 601.5, 1. / normalization);
0120 }
0121 }
0122 if ((SUBDET == EcalEndcap || SUBDET < 0) && _evt.getByToken(eeGainErrorsToken_, eeHndl)) {
0123 EEDetIdCollection::const_iterator eeEnd(eeHndl->end());
0124 for (EEDetIdCollection::const_iterator eeItr(eeHndl->begin()); eeItr != eeEnd; ++eeItr) {
0125 unsigned iDCC(ecaldqm::dccId(*eeItr, GetElectronicsMap()) - 1);
0126
0127 double normalization(ecaldqm::nCrystals(iDCC + 1));
0128 if (normalization < 1.)
0129 continue;
0130
0131 MEs_[kEENonFatal]->Fill(iDCC + 601.5, 1. / normalization);
0132 }
0133 }
0134
0135 if ((SUBDET == EcalBarrel || SUBDET < 0) && _evt.getByToken(ebChIdErrorsToken_, ebHndl)) {
0136 EBDetIdCollection::const_iterator ebEnd(ebHndl->end());
0137 for (EBDetIdCollection::const_iterator ebItr(ebHndl->begin()); ebItr != ebEnd; ++ebItr) {
0138 unsigned iDCC(ecaldqm::dccId(*ebItr, GetElectronicsMap()) - 1);
0139
0140 double normalization(ecaldqm::nCrystals(iDCC + 1));
0141 if (normalization < 1.)
0142 continue;
0143
0144 MEs_[kEBNonFatal]->Fill(iDCC + 601.5, 1. / normalization);
0145 }
0146 }
0147 if ((SUBDET == EcalEndcap || SUBDET < 0) && _evt.getByToken(eeChIdErrorsToken_, eeHndl)) {
0148 EEDetIdCollection::const_iterator eeEnd(eeHndl->end());
0149 for (EEDetIdCollection::const_iterator eeItr(eeHndl->begin()); eeItr != eeEnd; ++eeItr) {
0150 unsigned iDCC(ecaldqm::dccId(*eeItr, GetElectronicsMap()) - 1);
0151
0152 double normalization(ecaldqm::nCrystals(iDCC + 1));
0153 if (normalization < 1.)
0154 continue;
0155
0156 MEs_[kEENonFatal]->Fill(iDCC + 601.5, 1. / normalization);
0157 }
0158 }
0159
0160 if ((SUBDET == EcalBarrel || SUBDET < 0) && _evt.getByToken(ebGainSwitchErrorsToken_, ebHndl)) {
0161 EBDetIdCollection::const_iterator ebEnd(ebHndl->end());
0162 for (EBDetIdCollection::const_iterator ebItr(ebHndl->begin()); ebItr != ebEnd; ++ebItr) {
0163 unsigned iDCC(ecaldqm::dccId(*ebItr, GetElectronicsMap()) - 1);
0164
0165 double normalization(ecaldqm::nCrystals(iDCC + 1));
0166 if (normalization < 1.)
0167 continue;
0168
0169 MEs_[kEBNonFatal]->Fill(iDCC + 601.5, 1. / normalization);
0170 }
0171 }
0172 if ((SUBDET == EcalEndcap || SUBDET < 0) && _evt.getByToken(eeGainSwitchErrorsToken_, eeHndl)) {
0173 EEDetIdCollection::const_iterator eeEnd(eeHndl->end());
0174 for (EEDetIdCollection::const_iterator eeItr(eeHndl->begin()); eeItr != eeEnd; ++eeItr) {
0175 unsigned iDCC(ecaldqm::dccId(*eeItr, GetElectronicsMap()) - 1);
0176
0177 double normalization(ecaldqm::nCrystals(iDCC + 1));
0178 if (normalization < 1.)
0179 continue;
0180
0181 MEs_[kEENonFatal]->Fill(iDCC + 601.5, 1. / normalization);
0182 }
0183 }
0184
0185 if (_evt.getByToken(towerIdErrorsToken_, eleHndl)) {
0186 EcalElectronicsIdCollection::const_iterator eleEnd(eleHndl->end());
0187 for (EcalElectronicsIdCollection::const_iterator eleItr(eleHndl->begin()); eleItr != eleEnd; ++eleItr) {
0188 unsigned iDCC(eleItr->dccId() - 1);
0189
0190 unsigned nonfatal(-1);
0191 if ((SUBDET == EcalBarrel || SUBDET < 0) && iDCC >= ecaldqm::kEBmLow && iDCC <= ecaldqm::kEBpHigh)
0192 nonfatal = kEBNonFatal;
0193 else if ((SUBDET == EcalEndcap || SUBDET < 0) && (iDCC <= ecaldqm::kEEmHigh || iDCC >= ecaldqm::kEEpLow))
0194 nonfatal = kEENonFatal;
0195 else
0196 continue;
0197
0198 double normalization(ecaldqm::nCrystals(iDCC + 1));
0199 if (normalization < 1.)
0200 continue;
0201
0202 MEs_[nonfatal]->Fill(iDCC + 601.5, 25. / normalization);
0203 }
0204 }
0205
0206 if (_evt.getByToken(blockSizeErrorsToken_, eleHndl)) {
0207 EcalElectronicsIdCollection::const_iterator eleEnd(eleHndl->end());
0208 for (EcalElectronicsIdCollection::const_iterator eleItr(eleHndl->begin()); eleItr != eleEnd; ++eleItr) {
0209 unsigned iDCC(eleItr->dccId() - 1);
0210
0211 unsigned nonfatal(-1);
0212 if ((SUBDET == EcalBarrel || SUBDET < 0) && iDCC >= ecaldqm::kEBmLow && iDCC <= ecaldqm::kEBpHigh)
0213 nonfatal = kEBNonFatal;
0214 else if ((SUBDET == EcalEndcap || SUBDET < 0) && (iDCC <= ecaldqm::kEEmHigh || iDCC >= ecaldqm::kEEpLow))
0215 nonfatal = kEENonFatal;
0216 else
0217 continue;
0218
0219 double normalization(ecaldqm::nCrystals(iDCC + 1));
0220 if (normalization < 1.)
0221 continue;
0222
0223 MEs_[nonfatal]->Fill(iDCC + 601.5, 25. / normalization);
0224 }
0225 }
0226 }
0227
0228 template <int SUBDET>
0229 void EcalFEDMonitorTemp<SUBDET>::setElectronicsMap(edm::EventSetup const& _es) {
0230 electronicsMap = &_es.getData(elecMapHandle);
0231 }
0232
0233 template <int SUBDET>
0234 EcalElectronicsMapping const* EcalFEDMonitorTemp<SUBDET>::GetElectronicsMap() {
0235 if (!electronicsMap)
0236 throw cms::Exception("InvalidCall") << "Electronics Mapping not initialized";
0237 return electronicsMap;
0238 }
0239
0240 typedef EcalFEDMonitorTemp<EcalBarrel> EBHltTask;
0241 typedef EcalFEDMonitorTemp<EcalEndcap> EEHltTask;
0242 typedef EcalFEDMonitorTemp<-1> EcalFEDMonitor;
0243
0244 DEFINE_FWK_MODULE(EBHltTask);
0245 DEFINE_FWK_MODULE(EEHltTask);
0246 DEFINE_FWK_MODULE(EcalFEDMonitor);