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
 
bool hasAbilityToProduceInLumis () const final
 
bool hasAbilityToProduceInRuns () const final
 

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::InputTag inputLabel_
 
std::unique_ptr< HcalRecoParamsparamTS_
 
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<>
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 

Detailed Description

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

Implementation: [Notes on implementation]

Definition at line 48 of file HFPreReconstructor.cc.

Member Typedef Documentation

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

Definition at line 57 of file HFPreReconstructor.cc.

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

Definition at line 58 of file HFPreReconstructor.cc.

Constructor & Destructor Documentation

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

Definition at line 87 of file HFPreReconstructor.cc.

References inputLabel_, and tok_hfQIE10_.

88  : inputLabel_(conf.getParameter<edm::InputTag>("digiLabel")),
89  forceSOI_(conf.getParameter<int>("forceSOI")),
90  soiShift_(conf.getParameter<int>("soiShift")),
91  dropZSmarkedPassed_(conf.getParameter<bool>("dropZSmarkedPassed")),
92  tsFromDB_(conf.getParameter<bool>("tsFromDB")),
93  reco_(conf.getParameter<bool>("sumAllTimeSlices"))
94 {
95  // Describe consumed data
96  tok_hfQIE10_ = consumes<QIE10DigiCollection>(inputLabel_);
97 
98  // Register the product
99  produces<HFPreRecHitCollection>();
100 }
T getParameter(std::string const &) const
edm::InputTag inputLabel_
edm::EDGetTokenT< QIE10DigiCollection > tok_hfQIE10_
HFPreReconstructor::~HFPreReconstructor ( )
override

Definition at line 103 of file HFPreReconstructor.cc.

104 {
105 
106  // do anything here that needs to be done at destruction time
107  // (e.g. close files, deallocate resources etc.)
108 
109 }

Member Function Documentation

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

Definition at line 223 of file HFPreReconstructor.cc.

References edm::EventSetup::get(), AlCaHLTBitMon_ParallelJobs::p, paramTS_, edm::ESHandle< T >::product(), and tsFromDB_.

224 {
225  if (tsFromDB_)
226  {
228  es.get<HcalRecoParamsRcd>().get(p);
229  paramTS_ = std::make_unique<HcalRecoParams>(*p.product());
230  }
231 }
std::unique_ptr< HcalRecoParams > paramTS_
T get() const
Definition: EventSetup.h:71
T const * product() const
Definition: ESHandle.h:86
void HFPreReconstructor::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 304 of file HFPreReconstructor.cc.

References edm::ParameterSetDescription::add(), edm::ConfigurationDescriptions::addDefault(), and DEFINE_FWK_MODULE.

305 {
307 
308  desc.add<edm::InputTag>("digiLabel");
309  desc.add<int>("forceSOI", -1);
310  desc.add<int>("soiShift", 0);
311  desc.add<bool>("dropZSmarkedPassed");
312  desc.add<bool>("tsFromDB");
313  desc.add<bool>("sumAllTimeSlices");
314 
315  descriptions.addDefault(desc);
316 }
void addDefault(ParameterSetDescription const &psetDescription)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void HFPreReconstructor::fillInfos ( const edm::Event e,
const edm::EventSetup eventSetup 
)
private

Definition at line 150 of file HFPreReconstructor.cc.

References edm::DataFrameContainer::begin(), AlignmentProducer_cff::calibrations, dropZSmarkedPassed_, edm::DataFrameContainer::end(), HcalRecoParam::firstSample(), forceSOI_, edm::EventSetup::get(), edm::Event::getByToken(), HcalDbService::getHcalCalibrations(), HcalDbService::getHcalCoder(), HcalDbService::getHcalShape(), HcalForward, HFQIE10Info::id(), QIE10DataFrame::id(), info(), paramTS_, QIE10DataFrame::presamples(), edm::ESHandle< T >::product(), qie10Infos_, DetId::rawId(), reco_, HFPreRecAlgo::reconstruct(), edm::DataFrameContainer::size(), soiShift_, tok_hfQIE10_, tsFromDB_, and QIE10DataFrame::zsMarkAndPass().

Referenced by produce().

151 {
152  using namespace edm;
153 
154  // Clear the collection we want to fill in this method
155  qie10Infos_.clear();
156 
157  // Get the Hcal topology if needed
159  if (tsFromDB_)
160  {
161  eventSetup.get<HcalRecNumberingRecord>().get(htopo);
162  paramTS_->setTopo(htopo.product());
163  }
164 
165  // Get the calibrations
166  ESHandle<HcalDbService> conditions;
167  eventSetup.get<HcalDbRecord>().get(conditions);
168 
169  // Get the input collection
171  e.getByToken(tok_hfQIE10_, digi);
172 
173  const unsigned inputSize = digi->size();
174  if (inputSize)
175  {
176  // Process the digis and fill out the HFQIE10Info vector
177  qie10Infos_.reserve(inputSize);
178 
179  for (QIE10DigiCollection::const_iterator it = digi->begin();
180  it != digi->end(); ++it)
181  {
182  const QIE10DataFrame& frame(*it);
183  const HcalDetId cell(frame.id());
184 
185  // Protection against calibration channels which are not
186  // in the database but can still come in the QIE10DataFrame
187  // in the laser calibs, etc.
188  if (cell.subdet() != HcalSubdetector::HcalForward)
189  continue;
190 
191  // Check zero suppression
193  if (frame.zsMarkAndPass())
194  continue;
195 
196  const HcalCalibrations& calibrations(conditions->getHcalCalibrations(cell));
197  const HcalQIECoder* channelCoder = conditions->getHcalCoder(cell);
198  const HcalQIEShape* shape = conditions->getHcalShape(channelCoder);
199  const HcalCoderDb coder(*channelCoder, *shape);
200 
201  int tsToUse = forceSOI_;
202  if (tsToUse < 0)
203  {
204  if (tsFromDB_)
205  {
206  const HcalRecoParam* param_ts = paramTS_->getValues(cell.rawId());
207  tsToUse = param_ts->firstSample();
208  }
209  else
210  // Get the "sample of interest" from the data frame itself
211  tsToUse = frame.presamples();
212  }
213 
214  // Reconstruct the charge, energy, etc
215  const HFQIE10Info& info = reco_.reconstruct(frame, tsToUse+soiShift_, coder, calibrations);
216  if (info.id().rawId())
217  qie10Infos_.push_back(info);
218  }
219  }
220 }
HFQIE10Info reconstruct(const QIE10DataFrame &digi, int tsToUse, const HcalCoder &coder, const HcalCalibrations &calibs) const
Definition: HFPreRecAlgo.cc:12
std::vector< HFQIE10Info > qie10Infos_
static const TGPicture * info(bool iBackgroundIsBlack)
boost::transform_iterator< IterHelp, boost::counting_iterator< int > > const_iterator
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
std::unique_ptr< HcalRecoParams > paramTS_
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:50
const_iterator begin() const
HcalDetId id() const
Definition: HFQIE10Info.h:68
const HcalQIECoder * getHcalCoder(const HcalGenericDetId &fId) const
const HcalQIEShape * getHcalShape(const HcalGenericDetId &fId) const
const_iterator end() const
HLT enums.
edm::EDGetTokenT< QIE10DigiCollection > tok_hfQIE10_
T get() const
Definition: EventSetup.h:71
const HcalCalibrations & getHcalCalibrations(const HcalGenericDetId &fId) const
T const * product() const
Definition: ESHandle.h:86
constexpr unsigned int firstSample() const
Definition: HcalRecoParam.h:32
void HFPreReconstructor::produce ( edm::Event e,
const edm::EventSetup eventSetup 
)
overrideprivate

Definition at line 235 of file HFPreReconstructor.cc.

References fillInfos(), plotBeamSpotDB::first, mps_fire::i, eostools::move(), MillePedeFileConverter_cfg::out, edm::Event::put(), edm::second(), sortDataByPmt(), and sortedQIE10Infos_.

236 {
237  // Process the input data
238  fillInfos(e, eventSetup);
239 
240  // Create a new output collection
241  std::unique_ptr<HFPreRecHitCollection> out(std::make_unique<HFPreRecHitCollection>());
242 
243  // Fill the output collection
244  const unsigned pmtCount = sortDataByPmt();
245  if (pmtCount)
246  {
247  out->reserve(pmtCount);
248  const unsigned sz = sortedQIE10Infos_.size();
249  HcalDetId previousBaseId(sortedQIE10Infos_[0].first.first);
250  unsigned nFound = 1;
251  for (unsigned i=1; i<=sz; ++i)
252  {
253  bool appendData = i == sz;
254  if (i < sz)
255  {
256  const HcalDetId baseId(sortedQIE10Infos_[i].first.first);
257  if (baseId == previousBaseId)
258  ++nFound;
259  else
260  {
261  appendData = true;
262  previousBaseId = baseId;
263  }
264  }
265 
266  if (appendData)
267  {
268  // If we have found more than two QIE10 with the same base id,
269  // there is a bug somewhere in the dataframe. We can't do
270  // anything useful about it here. Once we make sure that
271  // everything works as expected, this assertion can be removed.
272  assert(nFound <= 2);
273 
274  const HFQIE10Info* first = nullptr;
275  const HFQIE10Info* second = sortedQIE10Infos_[i-1].second;
276 
277  if (nFound >= 2)
278  first = sortedQIE10Infos_[i-2].second;
279  else if (sortedQIE10Infos_[i-1].first.second < 3)
280  {
281  // Only one QIE10 readout found for this PMT.
282  // Arrange for depth 1 and 2 to be "first".
283  first = second;
284  second = nullptr;
285  }
286 
287  out->push_back(HFPreRecHit(sortedQIE10Infos_[i-nFound].first.first,
288  first, second));
289 
290  // Reset the QIE find count for this base id
291  nFound = 1;
292  }
293  }
294 
295  assert(out->size() == pmtCount);
296  }
297 
298  // Add the output collection to the event record
299  e.put(std::move(out));
300 }
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:125
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
unsigned HFPreReconstructor::sortDataByPmt ( )
private

Definition at line 116 of file HFPreReconstructor.cc.

References egammaForCoreTracking_cff::depth, plotBeamSpotDB::first, mps_fire::i, triggerObjects_cff::id, info(), qie10Infos_, and sortedQIE10Infos_.

Referenced by produce().

117 {
118  sortedQIE10Infos_.clear();
119  unsigned pmtCount = 0;
120  const unsigned sz = qie10Infos_.size();
121  if (sz)
122  {
123  // Perform sorting
124  sortedQIE10Infos_.reserve(sz);
125  const HFQIE10Info* info = &qie10Infos_[0];
126  for (unsigned i=0; i<sz; ++i)
127  {
128  const HcalDetId id(info[i].id());
129  sortedQIE10Infos_.push_back(QIE10InfoWithId(PmtAnodeId(id.baseDetId(), id.depth()), info+i));
130  }
131  std::sort(sortedQIE10Infos_.begin(), sortedQIE10Infos_.end());
132 
133  // Count the PMTs
134  HcalDetId previousBaseId(sortedQIE10Infos_[0].first.first);
135  pmtCount = 1;
136  for (unsigned i=1; i<sz; ++i)
137  {
138  const HcalDetId baseId(sortedQIE10Infos_[i].first.first);
139  if (baseId != previousBaseId)
140  {
141  previousBaseId = baseId;
142  ++pmtCount;
143  }
144  }
145  }
146  return pmtCount;
147 }
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

bool HFPreReconstructor::dropZSmarkedPassed_
private

Definition at line 67 of file HFPreReconstructor.cc.

Referenced by fillInfos().

int HFPreReconstructor::forceSOI_
private

Definition at line 65 of file HFPreReconstructor.cc.

Referenced by fillInfos().

edm::InputTag HFPreReconstructor::inputLabel_
private

Definition at line 64 of file HFPreReconstructor.cc.

Referenced by HFPreReconstructor().

std::unique_ptr<HcalRecoParams> HFPreReconstructor::paramTS_
private

Definition at line 75 of file HFPreReconstructor.cc.

Referenced by beginRun(), and fillInfos().

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

Definition at line 73 of file HFPreReconstructor.cc.

Referenced by fillInfos(), and sortDataByPmt().

HFPreRecAlgo HFPreReconstructor::reco_
private

Definition at line 71 of file HFPreReconstructor.cc.

Referenced by fillInfos().

int HFPreReconstructor::soiShift_
private

Definition at line 66 of file HFPreReconstructor.cc.

Referenced by fillInfos().

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

Definition at line 74 of file HFPreReconstructor.cc.

Referenced by produce(), and sortDataByPmt().

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

Definition at line 72 of file HFPreReconstructor.cc.

Referenced by fillInfos(), and HFPreReconstructor().

bool HFPreReconstructor::tsFromDB_
private

Definition at line 68 of file HFPreReconstructor.cc.

Referenced by beginRun(), and fillInfos().