Back to home page

Project CMSSW displayed by LXR

 
 

    


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   // Input
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   // Output
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 }