File indexing completed on 2024-04-06 12:10:39
0001 #include "EventFilter/ESRawToDigi/interface/ESRawToDigi.h"
0002
0003 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0004 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0005
0006 #include "DataFormats/FEDRawData/interface/FEDRawData.h"
0007 #include "DataFormats/FEDRawData/interface/FEDNumbering.h"
0008 #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h"
0009 #include "DataFormats/EcalDigi/interface/EcalDigiCollections.h"
0010 #include "DataFormats/EcalRawData/interface/ESDCCHeaderBlock.h"
0011 #include "DataFormats/EcalRawData/interface/ESKCHIPBlock.h"
0012
0013 #include <iostream>
0014
0015 ESRawToDigi::ESRawToDigi(edm::ParameterSet const& ps) {
0016 edm::InputTag sourceTag = ps.getParameter<edm::InputTag>("sourceTag");
0017 ESdigiCollection_ = ps.getParameter<std::string>("ESdigiCollection");
0018 regional_ = ps.getUntrackedParameter<bool>("DoRegional", false);
0019 edm::InputTag fedsListLabel =
0020 ps.getUntrackedParameter<edm::InputTag>("ESFedsListLabel", edm::InputTag(":esfedslist"));
0021 debug_ = ps.getUntrackedParameter<bool>("debugMode", false);
0022
0023 ESUnpacker_ = new ESUnpacker(ps);
0024
0025 produces<ESRawDataCollection>();
0026 produces<ESLocalRawDataCollection>();
0027 produces<ESDigiCollection>();
0028 dataToken_ = consumes<FEDRawDataCollection>(sourceTag);
0029 if (regional_) {
0030 fedsToken_ = consumes<ESListOfFEDS>(fedsListLabel);
0031 }
0032 }
0033
0034 ESRawToDigi::~ESRawToDigi() { delete ESUnpacker_; }
0035
0036 void ESRawToDigi::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0037 edm::ParameterSetDescription desc;
0038 desc.add<edm::InputTag>("sourceTag", edm::InputTag("rawDataCollector"));
0039 desc.addUntracked<bool>("debugMode", false);
0040 desc.add<std::string>("InstanceES", "");
0041 desc.add<edm::FileInPath>("LookupTable", edm::FileInPath("EventFilter/ESDigiToRaw/data/ES_lookup_table.dat"));
0042 desc.add<std::string>("ESdigiCollection", "");
0043 descriptions.add("esRawToDigi", desc);
0044 }
0045
0046 void ESRawToDigi::produce(edm::Event& e, const edm::EventSetup& es) {
0047
0048 edm::Handle<FEDRawDataCollection> rawdata;
0049 e.getByToken(dataToken_, rawdata);
0050 if (!rawdata.isValid()) {
0051 LogDebug("") << "ESRawToDigi : Error! can't get rawdata!" << std::endl;
0052 }
0053
0054 std::vector<int> esFeds_to_unpack;
0055 if (regional_) {
0056 edm::Handle<ESListOfFEDS> fedslist;
0057 e.getByToken(fedsToken_, fedslist);
0058 esFeds_to_unpack = fedslist->GetList();
0059 }
0060
0061
0062 auto productDCC = std::make_unique<ESRawDataCollection>();
0063 auto productKCHIP = std::make_unique<ESLocalRawDataCollection>();
0064 auto productDigis = std::make_unique<ESDigiCollection>();
0065
0066 ESDigiCollection digis;
0067
0068 if (regional_) {
0069 for (unsigned int i = 0; i < esFeds_to_unpack.size(); ++i) {
0070 const FEDRawData& fedRawData = rawdata->FEDData(esFeds_to_unpack[i]);
0071 ESUnpacker_->interpretRawData(esFeds_to_unpack[i], fedRawData, *productDCC, *productKCHIP, *productDigis);
0072
0073 if (debug_)
0074 std::cout << "FED : " << esFeds_to_unpack[i] << " Data size : " << fedRawData.size() << " (Bytes)" << std::endl;
0075 }
0076 } else {
0077 for (int fedId = FEDNumbering::MINPreShowerFEDID; fedId <= FEDNumbering::MAXPreShowerFEDID; ++fedId) {
0078 const FEDRawData& fedRawData = rawdata->FEDData(fedId);
0079 ESUnpacker_->interpretRawData(fedId, fedRawData, *productDCC, *productKCHIP, *productDigis);
0080
0081 if (debug_)
0082 std::cout << "FED : " << fedId << " Data size : " << fedRawData.size() << " (Bytes)" << std::endl;
0083 }
0084 }
0085
0086 e.put(std::move(productDCC));
0087 e.put(std::move(productKCHIP));
0088 e.put(std::move(productDigis), ESdigiCollection_);
0089 }