CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
HcalPatternSource Class Reference

#include <HcalPatternSource.h>

Inheritance diagram for HcalPatternSource:
edm::EDProducer edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 HcalPatternSource (const edm::ParameterSet &pset)
 
void produce (edm::Event &e, const edm::EventSetup &c) override
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
ModuleDescription const & moduleDescription () const
 
 ~EDProducer () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
virtual ~ProducerBase () noexcept(false)
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Member Functions

void loadPatternFile (const std::string &filename)
 
void loadPatterns (const std::string &patspec)
 

Private Attributes

std::vector< int > bunches_
 
std::vector< HcalFiberPatternpatterns_
 
int presamples_
 
int samples_
 

Additional Inherited Members

- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex >>
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::EDProducer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Author
J. Mans - Minnesota

Definition at line 12 of file HcalPatternSource.h.

Constructor & Destructor Documentation

HcalPatternSource::HcalPatternSource ( const edm::ParameterSet pset)

Definition at line 14 of file HcalPatternSource.cc.

References edm::ParameterSet::getUntrackedParameter(), loadPatterns(), and AlCaHLTBitMon_QueryRunRegistry::string.

14  :
15  bunches_(pset.getUntrackedParameter<std::vector<int> >("Bunches",std::vector<int>())),
16  presamples_(pset.getUntrackedParameter<int>("Presamples",4)),
17  samples_(pset.getUntrackedParameter<int>("Samples",10))
18 {
20  produces<HBHEDigiCollection>();
21  produces<HODigiCollection>();
22  produces<HFDigiCollection>();
23 }
T getUntrackedParameter(std::string const &, T const &) const
void loadPatterns(const std::string &patspec)
std::vector< int > bunches_

Member Function Documentation

void HcalPatternSource::loadPatternFile ( const std::string &  filename)
private

Definition at line 99 of file HcalPatternSource.cc.

References groupFilesInBlocks::block, edmScanValgrind::buffer, data, Exception, f, corrVsCorr::filename, mps_fire::i, HcalPatternXMLParser::parse(), createfilelist::parser, patterns_, and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by loadPatterns().

99  {
101  std::string buffer, element;
102  std::map<std::string,std::string> params;
103  std::vector<uint32_t> data;
104  FILE* f=fopen(filename.c_str(), "r");
105  if (f==nullptr) return;
106  else {
107  char block[4096];
108  while (!feof(f)) {
109  int read=fread(block,1,4096,f);
110  buffer.append(block,block+read);
111  }
112  fclose(f);
113  }
114  if (buffer.find("<?xml")!=0) {
115  throw cms::Exception("InvalidFormat") << "Not a valid XML file: " << filename;
116  }
118  while (buffer.find("<CFGBrick>",i)!=std::string::npos) {
119  i=buffer.find("<CFGBrick>",i);
120  j=buffer.find("</CFGBrick>",i);
121  element="<?xml version='1.0'?>\n";
122  element.append(buffer,i,j-i);
123  element.append("</CFGBrick>");
124  // LogDebug("HCAL") << element;
125  params.clear();
126  data.clear();
127  parser.parse(element,params,data);
128  patterns_.push_back(HcalFiberPattern(params,data));
129  i=j+5;
130  }
131 
132 
133 }
void parse(const std::string &xmlDocument, std::map< std::string, std::string > &parameters, std::vector< std::string > &items, std::string &encoding)
uint16_t size_type
double f[11][100]
std::vector< HcalFiberPattern > patterns_
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
void HcalPatternSource::loadPatterns ( const std::string &  patspec)
private

Definition at line 86 of file HcalPatternSource.cc.

References PatBasicFWLiteAnalyzer::files, mps_fire::i, loadPatternFile(), LogDebug, AlCaHLTBitMon_ParallelJobs::p, and patterns_.

Referenced by HcalPatternSource().

86  {
87  wordexp_t p;
88  char** files;
89  wordexp(patspec.c_str(),&p, WRDE_NOCMD); // do not run shell commands!
90  files=p.we_wordv;
91  for (unsigned int i=0; i<p.we_wordc; i++) {
92  LogDebug ("HCAL") << "Reading pattern file '" << files[i] << "'";
93  loadPatternFile(files[i]);
94  LogDebug ("HCAL") << "Fibers so far " << patterns_.size();
95  }
96  wordfree(&p);
97 }
#define LogDebug(id)
void loadPatternFile(const std::string &filename)
std::vector< HcalFiberPattern > patterns_
void HcalPatternSource::produce ( edm::Event e,
const edm::EventSetup c 
)
override

Definition at line 25 of file HcalPatternSource.cc.

References bunches_, runTauDisplay::eid, edm::EventID::event(), benchmark_cfg::fc, edm::EventSetup::get(), photonIsolationHIProducer_cfi::hbhe, HcalBarrel, HcalEndcap, HcalForward, HcalOuter, photonIsolationHIProducer_cfi::hf, photonIsolationHIProducer_cfi::ho, mps_fire::i, edm::EventBase::id(), HcalElectronicsMap::lookup(), eostools::move(), patterns_, presamples_, edm::ESHandle< T >::product(), edm::Event::put(), hcalTTPDigis_cfi::samples, and samples_.

25  {
26  if (e.id().event()>bunches_.size()) return;
27 
29  es.get<HcalElectronicsMapRcd>().get(item);
30  const HcalElectronicsMap *elecmap=item.product();
31 
32  auto hbhe = std::make_unique<HBHEDigiCollection>();
33  auto hf = std::make_unique<HFDigiCollection>();
34  auto ho = std::make_unique<HODigiCollection>();
35 
36  int bc=bunches_[e.id().event()-1];
37  for (std::vector<HcalFiberPattern>::iterator i=patterns_.begin(); i!=patterns_.end(); i++) {
38  std::vector<HcalQIESample> samples;
39  for (int fc=0; fc<3; fc++) {
40  samples=i->getSamples(bc,presamples_, samples_, fc);
41  HcalElectronicsId eid=i->getId(fc);
42 
43  HcalDetId did(elecmap->lookup(eid));
44 
45  if (did.null()) {
46  edm::LogWarning("HCAL") << "No electronics map match for id " << eid;
47  continue;
48  }
49 
50  switch (did.subdet()) {
51  case (HcalBarrel):
52  case (HcalEndcap):
53  hbhe->push_back(HBHEDataFrame(did));
54  hbhe->back().setSize(samples_);
55  hbhe->back().setPresamples(presamples_);
56  for (int i=0; i<samples_; i++) hbhe->back().setSample(i,samples[i]);
57  hbhe->back().setReadoutIds(eid);
58  break;
59  case (HcalForward):
60  hf->push_back(HFDataFrame(did));
61  hf->back().setSize(samples_);
62  hf->back().setPresamples(presamples_);
63  for (int i=0; i<samples_; i++) hf->back().setSample(i,samples[i]);
64  hf->back().setReadoutIds(eid);
65  break;
66  case (HcalOuter) :
67  ho->push_back(HODataFrame(did));
68  ho->back().setSize(samples_);
69  ho->back().setPresamples(presamples_);
70  for (int i=0; i<samples_; i++) ho->back().setSample(i,samples[i]);
71  ho->back().setReadoutIds(eid);
72  break;
73  default: continue;
74  }
75  }
76  }
77  hbhe->sort();
78  ho->sort();
79  hf->sort();
80 
81  e.put(std::move(hbhe));
82  e.put(std::move(ho));
83  e.put(std::move(hf));
84 }
EventNumber_t event() const
Definition: EventID.h:41
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:127
std::vector< int > bunches_
std::vector< HcalFiberPattern > patterns_
edm::EventID id() const
Definition: EventBase.h:60
T const * product() const
Definition: ESHandle.h:86
Readout chain identification for Hcal.
const DetId lookup(HcalElectronicsId fId) const
lookup the logical detid associated with the given electronics id
def move(src, dest)
Definition: eostools.py:510

Member Data Documentation

std::vector<int> HcalPatternSource::bunches_
private

Definition at line 19 of file HcalPatternSource.h.

Referenced by produce().

std::vector<HcalFiberPattern> HcalPatternSource::patterns_
private

Definition at line 20 of file HcalPatternSource.h.

Referenced by loadPatternFile(), loadPatterns(), and produce().

int HcalPatternSource::presamples_
private

Definition at line 21 of file HcalPatternSource.h.

Referenced by produce().

int HcalPatternSource::samples_
private

Definition at line 21 of file HcalPatternSource.h.

Referenced by produce().