CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Types | Private Member Functions | Private Attributes
HFPreReconstructor Class Reference

#include <RecoLocalCalo/HcalRecProducers/src/HFPreReconstructor.cc>

Inheritance diagram for HFPreReconstructor:
edm::stream::EDProducer<>

Public Member Functions

 HFPreReconstructor (const edm::ParameterSet &)
 
 ~HFPreReconstructor () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 

Private Types

typedef std::pair< HcalDetId, int > PmtAnodeId
 
typedef std::pair< PmtAnodeId, const HFQIE10Info * > QIE10InfoWithId
 

Private Member Functions

void beginRun (const edm::Run &, const edm::EventSetup &) override
 
void fillInfos (const edm::Event &e, const edm::EventSetup &eventSetup)
 
void produce (edm::Event &, const edm::EventSetup &) override
 
unsigned sortDataByPmt ()
 

Private Attributes

bool dropZSmarkedPassed_
 
int forceSOI_
 
edm::ESGetToken< HcalTopology, HcalRecNumberingRecordhtopoToken_
 
edm::InputTag inputLabel_
 
edm::ESGetToken< HcalChannelPropertiesVec, HcalChannelPropertiesRecordpropertiesToken_
 
std::vector< HFQIE10Infoqie10Infos_
 
HFPreRecAlgo reco_
 
int soiShift_
 
std::vector< QIE10InfoWithIdsortedQIE10Infos_
 
edm::EDGetTokenT< QIE10DigiCollectiontok_hfQIE10_
 
bool tsFromDB_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
using CacheTypes = CacheContexts< T... >
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T... >
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 

Detailed Description

Description: Phase 1 HF reco with QIE 10 and split-anode readout

Implementation: [Notes on implementation]

Definition at line 52 of file HFPreReconstructor.cc.

Member Typedef Documentation

◆ PmtAnodeId

typedef std::pair<HcalDetId, int> HFPreReconstructor::PmtAnodeId
private

Definition at line 60 of file HFPreReconstructor.cc.

◆ QIE10InfoWithId

typedef std::pair<PmtAnodeId, const HFQIE10Info*> HFPreReconstructor::QIE10InfoWithId
private

Definition at line 61 of file HFPreReconstructor.cc.

Constructor & Destructor Documentation

◆ HFPreReconstructor()

HFPreReconstructor::HFPreReconstructor ( const edm::ParameterSet conf)
explicit

Definition at line 93 of file HFPreReconstructor.cc.

References htopoToken_, inputLabel_, propertiesToken_, and tok_hfQIE10_.

94  : inputLabel_(conf.getParameter<edm::InputTag>("digiLabel")),
95  forceSOI_(conf.getParameter<int>("forceSOI")),
96  soiShift_(conf.getParameter<int>("soiShift")),
97  dropZSmarkedPassed_(conf.getParameter<bool>("dropZSmarkedPassed")),
98  tsFromDB_(conf.getParameter<bool>("tsFromDB")),
99  reco_(conf.getParameter<bool>("sumAllTimeSlices")) {
100  // Describe consumed data
101  tok_hfQIE10_ = consumes<QIE10DigiCollection>(inputLabel_);
102 
103  // Register the product
104  produces<HFPreRecHitCollection>();
105 
106  // ES tokens
107  htopoToken_ = esConsumes<HcalTopology, HcalRecNumberingRecord>();
108  propertiesToken_ = esConsumes<HcalChannelPropertiesVec, HcalChannelPropertiesRecord>();
109 }
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
edm::ESGetToken< HcalChannelPropertiesVec, HcalChannelPropertiesRecord > propertiesToken_
edm::InputTag inputLabel_
edm::EDGetTokenT< QIE10DigiCollection > tok_hfQIE10_
edm::ESGetToken< HcalTopology, HcalRecNumberingRecord > htopoToken_

◆ ~HFPreReconstructor()

HFPreReconstructor::~HFPreReconstructor ( )
override

Definition at line 111 of file HFPreReconstructor.cc.

111  {
112  // do anything here that needs to be done at destruction time
113  // (e.g. close files, deallocate resources etc.)
114 }

Member Function Documentation

◆ beginRun()

void HFPreReconstructor::beginRun ( const edm::Run r,
const edm::EventSetup es 
)
overrideprivate

Definition at line 205 of file HFPreReconstructor.cc.

205 {}

◆ fillDescriptions()

void HFPreReconstructor::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 268 of file HFPreReconstructor.cc.

References edm::ConfigurationDescriptions::addDefault(), and submitPVResolutionJobs::desc.

268  {
270 
271  desc.add<edm::InputTag>("digiLabel");
272  desc.add<int>("forceSOI", -1);
273  desc.add<int>("soiShift", 0);
274  desc.add<bool>("dropZSmarkedPassed");
275  desc.add<bool>("tsFromDB");
276  desc.add<bool>("sumAllTimeSlices");
277 
278  descriptions.addDefault(desc);
279 }
void addDefault(ParameterSetDescription const &psetDescription)

◆ fillInfos()

void HFPreReconstructor::fillInfos ( const edm::Event e,
const edm::EventSetup eventSetup 
)
private

Definition at line 147 of file HFPreReconstructor.cc.

References edm::DataFrameContainer::begin(), HcalChannelProperties::channelCoder, HcalTopology::detId2denseId(), dropZSmarkedPassed_, MillePedeFileConverter_cfg::e, edm::DataFrameContainer::end(), options_cfi::eventSetup, HcalRecoParam::firstSample(), forceSOI_, amptDefault_cfi::frame, HcalForward, htopoToken_, info(), HcalChannelProperties::paramTs, propertiesToken_, qie10Infos_, reco_, HFPreRecAlgo::reconstruct(), HcalChannelProperties::shape, edm::DataFrameContainer::size(), soiShift_, tok_hfQIE10_, and tsFromDB_.

Referenced by produce().

147  {
148  using namespace edm;
149 
150  // Clear the collection we want to fill in this method
151  qie10Infos_.clear();
152 
153  // Get the calibrations
154  const HcalTopology& htopo = eventSetup.getData(htopoToken_);
156 
157  // Get the input collection
159  e.getByToken(tok_hfQIE10_, digi);
160 
161  const unsigned inputSize = digi->size();
162  if (inputSize) {
163  // Process the digis and fill out the HFQIE10Info vector
164  qie10Infos_.reserve(inputSize);
165 
166  for (QIE10DigiCollection::const_iterator it = digi->begin(); it != digi->end(); ++it) {
167  const QIE10DataFrame& frame(*it);
168  const HcalDetId cell(frame.id());
169 
170  // Protection against calibration channels which are not
171  // in the database but can still come in the QIE10DataFrame
172  // in the laser calibs, etc.
173  if (cell.subdet() != HcalSubdetector::HcalForward)
174  continue;
175 
176  // Check zero suppression
178  if (frame.zsMarkAndPass())
179  continue;
180 
181  // Look up the channel properties. This lookup is O(1).
182  const HcalChannelProperties& properties(prop.at(htopo.detId2denseId(cell)));
183 
184  // ADC decoding tool
185  const HcalCoderDb coder(*properties.channelCoder, *properties.shape);
186 
187  int tsToUse = forceSOI_;
188  if (tsToUse < 0) {
189  if (tsFromDB_) {
190  tsToUse = properties.paramTs->firstSample();
191  } else {
192  // Get the "sample of interest" from the data frame itself
193  tsToUse = frame.presamples();
194  }
195  }
196 
197  // Reconstruct the charge, energy, etc
198  const HFQIE10Info& info = reco_.reconstruct(frame, tsToUse + soiShift_, coder, properties);
199  if (info.id().rawId())
200  qie10Infos_.push_back(info);
201  }
202  }
203 }
std::vector< HFQIE10Info > qie10Infos_
static const TGPicture * info(bool iBackgroundIsBlack)
unsigned int detId2denseId(const DetId &id) const override
return a linear packed id
edm::ESGetToken< HcalChannelPropertiesVec, HcalChannelPropertiesRecord > propertiesToken_
std::vector< HcalChannelProperties > HcalChannelPropertiesVec
const_iterator end() const
const_iterator begin() const
The iterator returned can not safely be used across threads.
boost::transform_iterator< IterHelp, boost::counting_iterator< int > > const_iterator
HLT enums.
edm::EDGetTokenT< QIE10DigiCollection > tok_hfQIE10_
HFQIE10Info reconstruct(const QIE10DataFrame &digi, int tsToUse, const HcalCoder &coder, const HcalChannelProperties &prop) const
Definition: HFPreRecAlgo.cc:12
edm::ESGetToken< HcalTopology, HcalRecNumberingRecord > htopoToken_

◆ produce()

void HFPreReconstructor::produce ( edm::Event e,
const edm::EventSetup eventSetup 
)
overrideprivate

Definition at line 208 of file HFPreReconstructor.cc.

References cms::cuda::assert(), MillePedeFileConverter_cfg::e, options_cfi::eventSetup, fillInfos(), first, mps_fire::i, eostools::move(), MillePedeFileConverter_cfg::out, edm::second(), sortDataByPmt(), and sortedQIE10Infos_.

208  {
209  // Process the input data
211 
212  // Create a new output collection
213  std::unique_ptr<HFPreRecHitCollection> out(std::make_unique<HFPreRecHitCollection>());
214 
215  // Fill the output collection
216  const unsigned pmtCount = sortDataByPmt();
217  if (pmtCount) {
218  out->reserve(pmtCount);
219  const unsigned sz = sortedQIE10Infos_.size();
220  HcalDetId previousBaseId(sortedQIE10Infos_[0].first.first);
221  unsigned nFound = 1;
222  for (unsigned i = 1; i <= sz; ++i) {
223  bool appendData = i == sz;
224  if (i < sz) {
225  const HcalDetId baseId(sortedQIE10Infos_[i].first.first);
226  if (baseId == previousBaseId)
227  ++nFound;
228  else {
229  appendData = true;
230  previousBaseId = baseId;
231  }
232  }
233 
234  if (appendData) {
235  // If we have found more than two QIE10 with the same base id,
236  // there is a bug somewhere in the dataframe. We can't do
237  // anything useful about it here. Once we make sure that
238  // everything works as expected, this assertion can be removed.
239  assert(nFound <= 2);
240 
241  const HFQIE10Info* first = nullptr;
242  const HFQIE10Info* second = sortedQIE10Infos_[i - 1].second;
243 
244  if (nFound >= 2)
245  first = sortedQIE10Infos_[i - 2].second;
246  else if (sortedQIE10Infos_[i - 1].first.second < 3) {
247  // Only one QIE10 readout found for this PMT.
248  // Arrange for depth 1 and 2 to be "first".
249  first = second;
250  second = nullptr;
251  }
252 
253  out->push_back(HFPreRecHit(sortedQIE10Infos_[i - nFound].first.first, first, second));
254 
255  // Reset the QIE find count for this base id
256  nFound = 1;
257  }
258  }
259 
260  assert(out->size() == pmtCount);
261  }
262 
263  // Add the output collection to the event record
264  e.put(std::move(out));
265 }
assert(be >=bs)
std::vector< QIE10InfoWithId > sortedQIE10Infos_
U second(std::pair< T, U > const &p)
void fillInfos(const edm::Event &e, const edm::EventSetup &eventSetup)
def move(src, dest)
Definition: eostools.py:511

◆ sortDataByPmt()

unsigned HFPreReconstructor::sortDataByPmt ( )
private

Definition at line 119 of file HFPreReconstructor.cc.

References LEDCalibrationChannels::depth, first, mps_fire::i, triggerObjects_cff::id, info(), qie10Infos_, jetUpdater_cfi::sort, and sortedQIE10Infos_.

Referenced by produce().

119  {
120  sortedQIE10Infos_.clear();
121  unsigned pmtCount = 0;
122  const unsigned sz = qie10Infos_.size();
123  if (sz) {
124  // Perform sorting
125  sortedQIE10Infos_.reserve(sz);
126  const HFQIE10Info* info = &qie10Infos_[0];
127  for (unsigned i = 0; i < sz; ++i) {
128  const HcalDetId id(info[i].id());
129  sortedQIE10Infos_.push_back(QIE10InfoWithId(PmtAnodeId(id.baseDetId(), id.depth()), info + i));
130  }
132 
133  // Count the PMTs
134  HcalDetId previousBaseId(sortedQIE10Infos_[0].first.first);
135  pmtCount = 1;
136  for (unsigned i = 1; i < sz; ++i) {
137  const HcalDetId baseId(sortedQIE10Infos_[i].first.first);
138  if (baseId != previousBaseId) {
139  previousBaseId = baseId;
140  ++pmtCount;
141  }
142  }
143  }
144  return pmtCount;
145 }
std::vector< HFQIE10Info > qie10Infos_
static const TGPicture * info(bool iBackgroundIsBlack)
std::vector< QIE10InfoWithId > sortedQIE10Infos_
std::pair< PmtAnodeId, const HFQIE10Info * > QIE10InfoWithId
std::pair< HcalDetId, int > PmtAnodeId

Member Data Documentation

◆ dropZSmarkedPassed_

bool HFPreReconstructor::dropZSmarkedPassed_
private

Definition at line 70 of file HFPreReconstructor.cc.

Referenced by fillInfos().

◆ forceSOI_

int HFPreReconstructor::forceSOI_
private

Definition at line 68 of file HFPreReconstructor.cc.

Referenced by fillInfos().

◆ htopoToken_

edm::ESGetToken<HcalTopology, HcalRecNumberingRecord> HFPreReconstructor::htopoToken_
private

Definition at line 86 of file HFPreReconstructor.cc.

Referenced by fillInfos(), and HFPreReconstructor().

◆ inputLabel_

edm::InputTag HFPreReconstructor::inputLabel_
private

Definition at line 67 of file HFPreReconstructor.cc.

Referenced by HFPreReconstructor().

◆ propertiesToken_

edm::ESGetToken<HcalChannelPropertiesVec, HcalChannelPropertiesRecord> HFPreReconstructor::propertiesToken_
private

Definition at line 87 of file HFPreReconstructor.cc.

Referenced by fillInfos(), and HFPreReconstructor().

◆ qie10Infos_

std::vector<HFQIE10Info> HFPreReconstructor::qie10Infos_
private

Definition at line 76 of file HFPreReconstructor.cc.

Referenced by fillInfos(), and sortDataByPmt().

◆ reco_

HFPreRecAlgo HFPreReconstructor::reco_
private

Definition at line 74 of file HFPreReconstructor.cc.

Referenced by fillInfos().

◆ soiShift_

int HFPreReconstructor::soiShift_
private

Definition at line 69 of file HFPreReconstructor.cc.

Referenced by fillInfos().

◆ sortedQIE10Infos_

std::vector<QIE10InfoWithId> HFPreReconstructor::sortedQIE10Infos_
private

Definition at line 77 of file HFPreReconstructor.cc.

Referenced by produce(), and sortDataByPmt().

◆ tok_hfQIE10_

edm::EDGetTokenT<QIE10DigiCollection> HFPreReconstructor::tok_hfQIE10_
private

Definition at line 75 of file HFPreReconstructor.cc.

Referenced by fillInfos(), and HFPreReconstructor().

◆ tsFromDB_

bool HFPreReconstructor::tsFromDB_
private

Definition at line 71 of file HFPreReconstructor.cc.

Referenced by fillInfos().