CMS 3D CMS Logo

SubdetFEDSelector.cc
Go to the documentation of this file.
1 // user include files
8 
12 
14 
16 public:
18  ~SubdetFEDSelector() override;
19  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
20 
21 private:
22  void beginJob() override {}
23  void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override;
24  void endJob() override {}
25 
26  // ----------member data ---------------------------
27  const bool getEcal_;
28  const bool getHcal_;
29  const bool getStrip_;
30  const bool getPixel_;
31  const bool getMuon_;
32  const bool getTrigger_;
33 
35 };
36 
38  : getEcal_(iConfig.getParameter<bool>("getECAL")),
39  getHcal_(iConfig.getParameter<bool>("getHCAL")),
40  getStrip_(iConfig.getParameter<bool>("getSiStrip")),
41  getPixel_(iConfig.getParameter<bool>("getSiPixel")),
42  getMuon_(iConfig.getParameter<bool>("getMuon")),
43  getTrigger_(iConfig.getParameter<bool>("getTrigger")),
44  tok_raw_(consumes<FEDRawDataCollection>(iConfig.getParameter<edm::InputTag>("rawInputLabel"))) {
45  produces<FEDRawDataCollection>();
46 }
47 
49 
51  auto producedData = std::make_unique<FEDRawDataCollection>();
52 
53  const edm::Handle<FEDRawDataCollection>& rawIn = iEvent.getHandle(tok_raw_);
54 
55  std::vector<int> selFEDs;
56 
57  if (getEcal_) {
59  selFEDs.push_back(i);
60  }
62  selFEDs.push_back(i);
63  }
64  }
65 
66  if (getMuon_) {
68  selFEDs.push_back(i);
69  }
71  selFEDs.push_back(i);
72  }
74  selFEDs.push_back(i);
75  }
77  selFEDs.push_back(i);
78  }
80  selFEDs.push_back(i);
81  }
83  selFEDs.push_back(i);
84  }
86  selFEDs.push_back(i);
87  }
89  selFEDs.push_back(i);
90  }
91  }
92 
93  if (getHcal_) {
95  selFEDs.push_back(i);
96  }
97  }
98 
99  if (getStrip_) {
101  selFEDs.push_back(i);
102  }
103  }
104 
105  if (getPixel_) {
107  selFEDs.push_back(i);
108  }
109  }
110 
111  if (getTrigger_) {
113  selFEDs.push_back(i);
114  }
116  selFEDs.push_back(i);
117  }
119  selFEDs.push_back(i);
120  }
122  selFEDs.push_back(i);
123  }
125  selFEDs.push_back(i);
126  }
127 
129  selFEDs.push_back(i);
130  }
131 
133  selFEDs.push_back(i);
134  }
135 
137  selFEDs.push_back(i);
138  }
139 
141  selFEDs.push_back(i);
142  }
143 
145  selFEDs.push_back(i);
146  }
148  selFEDs.push_back(i);
149  }
150 
152  selFEDs.push_back(i);
153  }
155  selFEDs.push_back(i);
156  }
158  selFEDs.push_back(i);
159  }
160  }
161 
163  selFEDs.push_back(i);
164  }
165 
166  // Copying:
167  const FEDRawDataCollection* rdc = rawIn.product();
168 
169  // if ( ( rawData[i].provenance()->processName() != e.processHistory().rbegin()->processName() ) )
170  // continue ; // skip all raw collections not produced by the current process
171 
172  for (int j = 0; j < FEDNumbering::MAXFEDID; ++j) {
173  bool rightFED = false;
174  for (uint32_t k = 0; k < selFEDs.size(); k++) {
175  if (j == selFEDs[k]) {
176  rightFED = true;
177  }
178  }
179  if (!rightFED)
180  continue;
181  const FEDRawData& fedData = rdc->FEDData(j);
182  size_t size = fedData.size();
183 
184  if (size > 0) {
185  // this fed has data -- lets copy it
186  FEDRawData& fedDataProd = producedData->FEDData(j);
187  if (fedDataProd.size() != 0) {
188  edm::LogVerbatim("HcalCalib") << " More than one FEDRawDataCollection with data in FED " << j
189  << " Skipping the 2nd";
190  continue;
191  }
192  fedDataProd.resize(size);
193  unsigned char* dataProd = fedDataProd.data();
194  const unsigned char* data = fedData.data();
195  for (unsigned int k = 0; k < size; ++k) {
196  dataProd[k] = data[k];
197  }
198  }
199  }
200 
201  iEvent.put(std::move(producedData));
202 }
203 
206  desc.add<edm::InputTag>("rawInputLabel", edm::InputTag("rawDataCollector"));
207  desc.add<bool>("getSiPixel", true);
208  desc.add<bool>("getHCAL", true);
209  desc.add<bool>("getECAL", false);
210  desc.add<bool>("getMuon", false);
211  desc.add<bool>("getTrigger", true);
212  desc.add<bool>("getSiStrip", false);
213  descriptions.add("subdetFED", desc);
214 }
215 
218 
size
Write out results.
Log< level::Info, true > LogVerbatim
size_t size() const
Lenght of the data buffer in bytes.
Definition: FEDRawData.h:45
int iEvent
Definition: GenABIO.cc:224
void resize(size_t newsize)
Definition: FEDRawData.cc:28
void endJob() override
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override
SubdetFEDSelector(const edm::ParameterSet &)
const FEDRawData & FEDData(int fedid) const
retrieve data for fed
~SubdetFEDSelector() override
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
const edm::EDGetTokenT< FEDRawDataCollection > tok_raw_
HLT enums.
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:79
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
Definition: FEDRawData.cc:24
void beginJob() override
def move(src, dest)
Definition: eostools.py:511