File indexing completed on 2025-01-08 03:36:09
0001
0002
0003
0004
0005
0006 #include "DataFormats/Common/interface/Handle.h"
0007 #include "DataFormats/FEDRawData/interface/FEDNumbering.h"
0008 #include "DataFormats/FEDRawData/interface/FEDRawData.h"
0009 #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h"
0010 #include "DataFormats/Provenance/interface/ProcessHistory.h"
0011 #include "EventFilter/RawDataCollector/src/RawDataCollectorByLabel.h"
0012 #include "FWCore/Framework/interface/ESHandle.h"
0013 #include "FWCore/Framework/interface/Event.h"
0014 #include "FWCore/Framework/interface/EventSetup.h"
0015 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0016 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0017 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0018 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0019
0020 #include <iostream>
0021
0022 using namespace edm;
0023
0024 RawDataCollectorByLabel::RawDataCollectorByLabel(const edm::ParameterSet &pset) {
0025 inputTags_ = pset.getParameter<std::vector<InputTag> >("RawCollectionList");
0026 verbose_ = pset.getUntrackedParameter<int>("verbose", 0);
0027
0028 inputTokens_.reserve(inputTags_.size());
0029 for (tag_iterator_t inputTag = inputTags_.begin(); inputTag != inputTags_.end(); ++inputTag) {
0030 inputTokens_.push_back(consumes<FEDRawDataCollection>(*inputTag));
0031 }
0032 produces<FEDRawDataCollection>();
0033 }
0034
0035 void RawDataCollectorByLabel::fillDescriptions(edm::ConfigurationDescriptions &descriptions) {
0036 edm::ParameterSetDescription desc;
0037 desc.add<std::vector<InputTag> >("RawCollectionList",
0038 {edm::InputTag("SiStripDigiToZSRaw"), edm::InputTag("rawDataCollector")});
0039 desc.addUntracked<int>("verbose", 0)->setComment("0 = quiet, 1 = collection list, 2 = FED list");
0040 descriptions.add("default_rawDataCollectorByLabel", desc);
0041 }
0042
0043 void RawDataCollectorByLabel::produce(Event &e, const EventSetup &c) {
0044
0045 std::vector<Handle<FEDRawDataCollection> > rawData;
0046 rawData.reserve(inputTokens_.size());
0047 for (tok_iterator_t inputTok = inputTokens_.begin(); inputTok != inputTokens_.end(); ++inputTok) {
0048 Handle<FEDRawDataCollection> input;
0049 if (e.getByToken(*inputTok, input)) {
0050 rawData.push_back(input);
0051 }
0052
0053 }
0054
0055 auto producedData = std::make_unique<FEDRawDataCollection>();
0056
0057 for (unsigned int i = 0; i < rawData.size(); ++i) {
0058 const FEDRawDataCollection *rdc = rawData[i].product();
0059
0060 if (verbose_ > 0) {
0061 std::cout << "\nRAW collection #" << i + 1 << std::endl;
0062 std::cout << "branch name = " << rawData[i].provenance()->branchName() << std::endl;
0063 std::cout << "process index = " << rawData[i].provenance()->productID().processIndex() << std::endl;
0064 }
0065
0066 for (int j = 0; j <= FEDNumbering::MAXFEDID; ++j) {
0067 const FEDRawData &fedData = rdc->FEDData(j);
0068 size_t size = fedData.size();
0069
0070 if (size > 0) {
0071
0072 if (verbose_ > 1)
0073 std::cout << "Copying data from FED #" << j << std::endl;
0074 FEDRawData &fedDataProd = producedData->FEDData(j);
0075 if (fedDataProd.size() != 0) {
0076 if (verbose_ > 1) {
0077 std::cout << " More than one FEDRawDataCollection with data in FED ";
0078 std::cout << j << " Skipping the 2nd\n";
0079 }
0080 continue;
0081 }
0082 fedDataProd.resize(size);
0083 unsigned char *dataProd = fedDataProd.data();
0084 const unsigned char *data = fedData.data();
0085 for (unsigned int k = 0; k < size; ++k) {
0086 dataProd[k] = data[k];
0087 }
0088 }
0089 }
0090 }
0091
0092
0093 e.put(std::move(producedData));
0094 }