File indexing completed on 2024-07-12 02:41:34
0001
0002 #include <memory>
0003
0004
0005 #include "FWCore/Framework/interface/Frameworkfwd.h"
0006 #include "FWCore/Framework/interface/stream/EDProducer.h"
0007 #include "FWCore/Framework/interface/Event.h"
0008
0009 #include "FWCore/Utilities/interface/ESInputTag.h"
0010 #include "FWCore/Utilities/interface/Transition.h"
0011
0012 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0013 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0014 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0015
0016 #include "DataFormats/NanoAOD/interface/FlatTable.h"
0017
0018 #include "CommonTools/Utils/interface/StringCutObjectSelector.h"
0019 #include "CommonTools/Utils/interface/StringObjectFunction.h"
0020
0021 #include "CalibFormats/HcalObjects/interface/HcalCoderDb.h"
0022 #include "CalibFormats/HcalObjects/interface/HcalDbRecord.h"
0023 #include "CalibFormats/HcalObjects/interface/HcalDbService.h"
0024 #include "DataFormats/HcalDetId/interface/HcalSubdetector.h"
0025 #include "DataFormats/HcalDetId/interface/HcalDetId.h"
0026 #include "DataFormats/HcalDetId/interface/HcalGenericDetId.h"
0027 #include "CondFormats/HcalObjects/interface/HcalElectronicsMap.h"
0028 #include "CondFormats/HcalObjects/interface/HcalChannelQuality.h"
0029
0030 #include "DPGAnalysis/HcalNanoAOD/interface/QIE11DigiSortedTable.h"
0031 #include "DPGAnalysis/HcalNanoAOD/interface/QIE10DigiSortedTable.h"
0032 #include "DPGAnalysis/HcalNanoAOD/interface/HODigiSortedTable.h"
0033
0034 class HcalDigiSortedTableProducer : public edm::stream::EDProducer<> {
0035 private:
0036 std::map<HcalSubdetector, edm::Handle<std::vector<HcalDetId>>> dids_;
0037
0038
0039 static const std::vector<HcalSubdetector> subdets_;
0040 HcalElectronicsMap const* emap_;
0041
0042 edm::InputTag tagHBDetIdList_;
0043 edm::InputTag tagHEDetIdList_;
0044 edm::InputTag tagHFDetIdList_;
0045 edm::InputTag tagHODetIdList_;
0046
0047 edm::EDGetTokenT<std::vector<HcalDetId>> tokenHBDetIdList_;
0048 edm::EDGetTokenT<std::vector<HcalDetId>> tokenHEDetIdList_;
0049 edm::EDGetTokenT<std::vector<HcalDetId>> tokenHFDetIdList_;
0050 edm::EDGetTokenT<std::vector<HcalDetId>> tokenHODetIdList_;
0051
0052 edm::InputTag tagQIE11_;
0053 edm::InputTag tagQIE10_;
0054 edm::InputTag tagHO_;
0055
0056 edm::EDGetTokenT<QIE11DigiCollection> tokenQIE11_;
0057 edm::EDGetTokenT<QIE10DigiCollection> tokenQIE10_;
0058 edm::EDGetTokenT<HODigiCollection> tokenHO_;
0059
0060 edm::ESGetToken<HcalDbService, HcalDbRecord> tokenHcalDbService_;
0061 edm::ESHandle<HcalDbService> dbService_;
0062
0063 HBDigiSortedTable* hbDigiTable_;
0064 HEDigiSortedTable* heDigiTable_;
0065 HFDigiSortedTable* hfDigiTable_;
0066 HODigiSortedTable* hoDigiTable_;
0067
0068 const unsigned int nTS_HB_;
0069 const unsigned int nTS_HE_;
0070 const unsigned int nTS_HF_;
0071 const unsigned int nTS_HO_;
0072
0073 public:
0074 explicit HcalDigiSortedTableProducer(const edm::ParameterSet& iConfig)
0075 : tokenHBDetIdList_(consumes<edm::InRun>(iConfig.getUntrackedParameter<edm::InputTag>(
0076 "HBDetIdList", edm::InputTag("hcalDetIdTable", "HBDetIdList")))),
0077 tokenHEDetIdList_(consumes<edm::InRun>(iConfig.getUntrackedParameter<edm::InputTag>(
0078 "HEDetIdList", edm::InputTag("hcalDetIdTable", "HEDetIdList")))),
0079 tokenHFDetIdList_(consumes<edm::InRun>(iConfig.getUntrackedParameter<edm::InputTag>(
0080 "HFDetIdList", edm::InputTag("hcalDetIdTable", "HFDetIdList")))),
0081 tokenHODetIdList_(consumes<edm::InRun>(iConfig.getUntrackedParameter<edm::InputTag>(
0082 "HODetIdList", edm::InputTag("hcalDetIdTable", "HODetIdList")))),
0083 tagQIE11_(iConfig.getUntrackedParameter<edm::InputTag>("tagQIE11", edm::InputTag("hcalDigis"))),
0084 tagQIE10_(iConfig.getUntrackedParameter<edm::InputTag>("tagQIE10", edm::InputTag("hcalDigis"))),
0085 tagHO_(iConfig.getUntrackedParameter<edm::InputTag>("tagHO", edm::InputTag("hcalDigis"))),
0086 tokenHcalDbService_(esConsumes<HcalDbService, HcalDbRecord, edm::Transition::BeginRun>()),
0087 nTS_HB_(iConfig.getUntrackedParameter<unsigned int>("nTS_HB", 8)),
0088 nTS_HE_(iConfig.getUntrackedParameter<unsigned int>("nTS_HE", 8)),
0089 nTS_HF_(iConfig.getUntrackedParameter<unsigned int>("nTS_HF", 3)),
0090 nTS_HO_(iConfig.getUntrackedParameter<unsigned int>("nTS_HO", 10)) {
0091 tokenQIE11_ = consumes<QIE11DigiCollection>(tagQIE11_);
0092 tokenHO_ = consumes<HODigiCollection>(tagHO_);
0093 tokenQIE10_ = consumes<QIE10DigiCollection>(tagQIE10_);
0094
0095 produces<nanoaod::FlatTable>("HBDigiSortedTable");
0096 produces<nanoaod::FlatTable>("HEDigiSortedTable");
0097 produces<nanoaod::FlatTable>("HFDigiSortedTable");
0098 produces<nanoaod::FlatTable>("HODigiSortedTable");
0099
0100 hbDigiTable_ = nullptr;
0101 heDigiTable_ = nullptr;
0102 hfDigiTable_ = nullptr;
0103 hoDigiTable_ = nullptr;
0104 }
0105
0106 ~HcalDigiSortedTableProducer() override {
0107 delete hbDigiTable_;
0108 delete heDigiTable_;
0109 delete hfDigiTable_;
0110 delete hoDigiTable_;
0111 };
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122 private:
0123 void beginRun(edm::Run const&, edm::EventSetup const&) override;
0124 void produce(edm::Event&, edm::EventSetup const&) override;
0125 };
0126
0127 const std::vector<HcalSubdetector> HcalDigiSortedTableProducer::subdets_ = {
0128 HcalBarrel, HcalEndcap, HcalForward, HcalOuter};
0129
0130 void HcalDigiSortedTableProducer::beginRun(edm::Run const& iRun, edm::EventSetup const& iSetup) {
0131
0132 dbService_ = iSetup.getHandle(tokenHcalDbService_);
0133 emap_ = dbService_->getHcalMapping();
0134
0135 iRun.getByToken(tokenHBDetIdList_, dids_[HcalBarrel]);
0136 iRun.getByToken(tokenHEDetIdList_, dids_[HcalEndcap]);
0137 iRun.getByToken(tokenHFDetIdList_, dids_[HcalForward]);
0138 iRun.getByToken(tokenHODetIdList_, dids_[HcalOuter]);
0139
0140
0141 hbDigiTable_ = new HBDigiSortedTable(*(dids_[HcalBarrel]), nTS_HB_);
0142 heDigiTable_ = new HEDigiSortedTable(*(dids_[HcalEndcap]), nTS_HE_);
0143 hfDigiTable_ = new HFDigiSortedTable(*(dids_[HcalForward]), nTS_HF_);
0144 hoDigiTable_ = new HODigiSortedTable(*(dids_[HcalOuter]), nTS_HO_);
0145 }
0146
0147 void HcalDigiSortedTableProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) {
0148
0149 edm::Handle<QIE11DigiCollection> qie11Digis;
0150 iEvent.getByToken(tokenQIE11_, qie11Digis);
0151
0152 edm::Handle<QIE10DigiCollection> qie10Digis;
0153 iEvent.getByToken(tokenQIE10_, qie10Digis);
0154
0155 edm::Handle<HODigiCollection> hoDigis;
0156 iEvent.getByToken(tokenHO_, hoDigis);
0157
0158
0159
0160 hbDigiTable_->reset();
0161 for (QIE11DigiCollection::const_iterator itDigi = qie11Digis->begin(); itDigi != qie11Digis->end(); ++itDigi) {
0162 const QIE11DataFrame digi = static_cast<const QIE11DataFrame>(*itDigi);
0163 HcalDetId const& did = digi.detid();
0164 if (did.subdet() != HcalBarrel)
0165 continue;
0166
0167 hbDigiTable_->add(&digi, dbService_);
0168 }
0169
0170
0171 heDigiTable_->reset();
0172 for (QIE11DigiCollection::const_iterator itDigi = qie11Digis->begin(); itDigi != qie11Digis->end(); ++itDigi) {
0173 const QIE11DataFrame digi = static_cast<const QIE11DataFrame>(*itDigi);
0174 HcalDetId const& did = digi.detid();
0175 if (did.subdet() != HcalEndcap)
0176 continue;
0177
0178 heDigiTable_->add(&digi, dbService_);
0179 }
0180
0181
0182 hfDigiTable_->reset();
0183 for (QIE10DigiCollection::const_iterator itDigi = qie10Digis->begin(); itDigi != qie10Digis->end(); ++itDigi) {
0184 const QIE10DataFrame digi = static_cast<const QIE10DataFrame>(*itDigi);
0185 HcalDetId const& did = digi.detid();
0186 if (did.subdet() != HcalForward)
0187 continue;
0188
0189 hfDigiTable_->add(&digi, dbService_);
0190 }
0191
0192
0193 hoDigiTable_->reset();
0194 for (HODigiCollection::const_iterator itDigi = hoDigis->begin(); itDigi != hoDigis->end(); ++itDigi) {
0195 const HODataFrame digi = static_cast<const HODataFrame>(*itDigi);
0196 HcalDetId const& did = digi.id();
0197 if (did.subdet() != HcalOuter)
0198 continue;
0199
0200 hoDigiTable_->add(&digi, dbService_);
0201 }
0202
0203
0204
0205
0206 auto hbNanoTable = std::make_unique<nanoaod::FlatTable>(dids_[HcalBarrel]->size(), "DigiHB", false, false);
0207 hbNanoTable->addColumn<int>("rawId", hbDigiTable_->rawIds_, "rawId");
0208 hbNanoTable->addColumn<int>("ieta", hbDigiTable_->ietas_, "ieta");
0209 hbNanoTable->addColumn<int>("iphi", hbDigiTable_->iphis_, "iphi");
0210 hbNanoTable->addColumn<int>("depth", hbDigiTable_->depths_, "depth");
0211 hbNanoTable->addColumn<int>("subdet", hbDigiTable_->subdets_, "subdet");
0212 hbNanoTable->addColumn<bool>("linkError", hbDigiTable_->linkErrors_, "linkError");
0213 hbNanoTable->addColumn<bool>("capidError", hbDigiTable_->capidErrors_, "capidError");
0214 hbNanoTable->addColumn<int>("flags", hbDigiTable_->flags_, "flags");
0215 hbNanoTable->addColumn<int>("soi", hbDigiTable_->sois_, "soi");
0216 hbNanoTable->addColumn<bool>("valid", hbDigiTable_->valids_, "valid");
0217 hbNanoTable->addColumn<uint8_t>("sipmTypes", hbDigiTable_->sipmTypes_, "sipmTypes");
0218
0219 for (unsigned int iTS = 0; iTS < nTS_HB_; ++iTS) {
0220 hbNanoTable->addColumn<int>(
0221 std::string("adc") + std::to_string(iTS), hbDigiTable_->adcs_[iTS], std::string("adc") + std::to_string(iTS));
0222 hbNanoTable->addColumn<int>(
0223 std::string("tdc") + std::to_string(iTS), hbDigiTable_->tdcs_[iTS], std::string("tdc") + std::to_string(iTS));
0224 hbNanoTable->addColumn<int>(std::string("capid") + std::to_string(iTS),
0225 hbDigiTable_->capids_[iTS],
0226 std::string("capid") + std::to_string(iTS));
0227 hbNanoTable->addColumn<float>(
0228 std::string("fc") + std::to_string(iTS), hbDigiTable_->fcs_[iTS], std::string("fc") + std::to_string(iTS));
0229 hbNanoTable->addColumn<float>(std::string("pedestalfc") + std::to_string(iTS),
0230 hbDigiTable_->pedestalfcs_[iTS],
0231 std::string("pedestalfc") + std::to_string(iTS));
0232 }
0233 iEvent.put(std::move(hbNanoTable), "HBDigiSortedTable");
0234
0235
0236 auto heNanoTable = std::make_unique<nanoaod::FlatTable>(dids_[HcalEndcap]->size(), "DigiHE", false, false);
0237 heNanoTable->addColumn<int>("rawId", heDigiTable_->rawIds_, "rawId");
0238 heNanoTable->addColumn<int>("ieta", heDigiTable_->ietas_, "ieta");
0239 heNanoTable->addColumn<int>("iphi", heDigiTable_->iphis_, "iphi");
0240 heNanoTable->addColumn<int>("depth", heDigiTable_->depths_, "depth");
0241 heNanoTable->addColumn<int>("subdet", heDigiTable_->subdets_, "subdet");
0242 heNanoTable->addColumn<bool>("linkError", heDigiTable_->linkErrors_, "linkError");
0243 heNanoTable->addColumn<bool>("capidError", heDigiTable_->capidErrors_, "capidError");
0244 heNanoTable->addColumn<int>("flags", heDigiTable_->flags_, "flags");
0245 heNanoTable->addColumn<int>("soi", heDigiTable_->sois_, "soi");
0246 heNanoTable->addColumn<bool>("valid", heDigiTable_->valids_, "valid");
0247 heNanoTable->addColumn<uint8_t>("sipmTypes", heDigiTable_->sipmTypes_, "sipmTypes");
0248
0249 for (unsigned int iTS = 0; iTS < nTS_HE_; ++iTS) {
0250 heNanoTable->addColumn<int>(
0251 std::string("adc") + std::to_string(iTS), heDigiTable_->adcs_[iTS], std::string("adc") + std::to_string(iTS));
0252 heNanoTable->addColumn<int>(
0253 std::string("tdc") + std::to_string(iTS), heDigiTable_->tdcs_[iTS], std::string("tdc") + std::to_string(iTS));
0254 heNanoTable->addColumn<int>(std::string("capid") + std::to_string(iTS),
0255 heDigiTable_->capids_[iTS],
0256 std::string("capid") + std::to_string(iTS));
0257 heNanoTable->addColumn<float>(
0258 std::string("fc") + std::to_string(iTS), heDigiTable_->fcs_[iTS], std::string("fc") + std::to_string(iTS));
0259 heNanoTable->addColumn<float>(std::string("pedestalfc") + std::to_string(iTS),
0260 heDigiTable_->pedestalfcs_[iTS],
0261 std::string("pedestalfc") + std::to_string(iTS));
0262 }
0263 iEvent.put(std::move(heNanoTable), "HEDigiSortedTable");
0264
0265
0266 auto hfNanoTable = std::make_unique<nanoaod::FlatTable>(dids_[HcalForward]->size(), "DigiHF", false, false);
0267 hfNanoTable->addColumn<int>("rawId", hfDigiTable_->rawIds_, "rawId");
0268 hfNanoTable->addColumn<int>("ieta", hfDigiTable_->ietas_, "ieta");
0269 hfNanoTable->addColumn<int>("iphi", hfDigiTable_->iphis_, "iphi");
0270 hfNanoTable->addColumn<int>("depth", hfDigiTable_->depths_, "depth");
0271 hfNanoTable->addColumn<int>("subdet", hfDigiTable_->subdets_, "subdet");
0272 hfNanoTable->addColumn<bool>("linkError", hfDigiTable_->linkErrors_, "linkError");
0273 hfNanoTable->addColumn<int>("flags", hfDigiTable_->flags_, "flags");
0274 hfNanoTable->addColumn<int>("soi", hfDigiTable_->sois_, "soi");
0275 hfNanoTable->addColumn<bool>("valid", hfDigiTable_->valids_, "valid");
0276
0277
0278 for (unsigned int iTS = 0; iTS < nTS_HF_; ++iTS) {
0279 hfNanoTable->addColumn<int>(
0280 std::string("adc") + std::to_string(iTS), hfDigiTable_->adcs_[iTS], std::string("adc") + std::to_string(iTS));
0281 hfNanoTable->addColumn<int>(
0282 std::string("tdc") + std::to_string(iTS), hfDigiTable_->tdcs_[iTS], std::string("tdc") + std::to_string(iTS));
0283
0284
0285
0286 hfNanoTable->addColumn<int>(std::string("capid") + std::to_string(iTS),
0287 hfDigiTable_->capids_[iTS],
0288 std::string("capid") + std::to_string(iTS));
0289 hfNanoTable->addColumn<float>(
0290 std::string("fc") + std::to_string(iTS), hfDigiTable_->fcs_[iTS], std::string("fc") + std::to_string(iTS));
0291 hfNanoTable->addColumn<float>(std::string("pedestalfc") + std::to_string(iTS),
0292 hfDigiTable_->pedestalfcs_[iTS],
0293 std::string("pedestalfc") + std::to_string(iTS));
0294 hfNanoTable->addColumn<float>(
0295 std::string("ok") + std::to_string(iTS), hfDigiTable_->oks_[iTS], std::string("ok") + std::to_string(iTS));
0296 }
0297 iEvent.put(std::move(hfNanoTable), "HFDigiSortedTable");
0298
0299
0300 auto hoNanoTable = std::make_unique<nanoaod::FlatTable>(dids_[HcalOuter]->size(), "DigiHO", false, false);
0301 hoNanoTable->addColumn<int>("rawId", hoDigiTable_->rawIds_, "rawId");
0302 hoNanoTable->addColumn<int>("ieta", hoDigiTable_->ietas_, "ieta");
0303 hoNanoTable->addColumn<int>("iphi", hoDigiTable_->iphis_, "iphi");
0304 hoNanoTable->addColumn<int>("depth", hoDigiTable_->depths_, "depth");
0305 hoNanoTable->addColumn<int>("subdet", hoDigiTable_->subdets_, "subdet");
0306 hoNanoTable->addColumn<int>("fiberIdleOffset", hoDigiTable_->fiberIdleOffsets_, "fiberIdleOffset");
0307 hoNanoTable->addColumn<int>("soi", hoDigiTable_->sois_, "soi");
0308 hoNanoTable->addColumn<bool>("valid", hoDigiTable_->valids_, "valid");
0309
0310 for (unsigned int iTS = 0; iTS < nTS_HO_; ++iTS) {
0311 hoNanoTable->addColumn<int>(
0312 std::string("adc") + std::to_string(iTS), hoDigiTable_->adcs_[iTS], std::string("adc") + std::to_string(iTS));
0313 hoNanoTable->addColumn<int>(std::string("capid") + std::to_string(iTS),
0314 hoDigiTable_->capids_[iTS],
0315 std::string("capid") + std::to_string(iTS));
0316 hoNanoTable->addColumn<float>(
0317 std::string("fc") + std::to_string(iTS), hoDigiTable_->fcs_[iTS], std::string("fc") + std::to_string(iTS));
0318 hoNanoTable->addColumn<float>(std::string("pedestalfc") + std::to_string(iTS),
0319 hoDigiTable_->pedestalfcs_[iTS],
0320 std::string("pedestalfc") + std::to_string(iTS));
0321 hoNanoTable->addColumn<int>(std::string("fiber") + std::to_string(iTS),
0322 hoDigiTable_->fibers_[iTS],
0323 std::string("fiber") + std::to_string(iTS));
0324 hoNanoTable->addColumn<int>(std::string("fiberChan") + std::to_string(iTS),
0325 hoDigiTable_->fiberChans_[iTS],
0326 std::string("fiberChan") + std::to_string(iTS));
0327 hoNanoTable->addColumn<int>(
0328 std::string("dv") + std::to_string(iTS), hoDigiTable_->dvs_[iTS], std::string("dv") + std::to_string(iTS));
0329 hoNanoTable->addColumn<int>(
0330 std::string("er") + std::to_string(iTS), hoDigiTable_->ers_[iTS], std::string("er") + std::to_string(iTS));
0331 }
0332 iEvent.put(std::move(hoNanoTable), "HODigiSortedTable");
0333 }
0334
0335 #include "FWCore/Framework/interface/MakerMacros.h"
0336
0337 DEFINE_FWK_MODULE(HcalDigiSortedTableProducer);