CMS 3D CMS Logo

PFRecHitProducer.cc
Go to the documentation of this file.
9 
10 #include <memory>
11 
12 //
13 // class declaration
14 //
15 
16 class PFRecHitProducer final : public edm::stream::EDProducer<> {
17 public:
18  explicit PFRecHitProducer(const edm::ParameterSet& iConfig);
19  ~PFRecHitProducer() override;
20 
21  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
22 
23 private:
24  void produce(edm::Event&, const edm::EventSetup&) override;
25  void beginRun(edm::Run const&, const edm::EventSetup&) override;
26  std::vector<std::unique_ptr<PFRecHitCreatorBase>> creators_;
27  std::unique_ptr<PFRecHitNavigatorBase> navigator_;
28  bool init_;
29 };
30 
33 
34 namespace {
35  bool sortByDetId(const reco::PFRecHit& a, const reco::PFRecHit& b) { return a.detId() < b.detId(); }
36 
37  edm::RunningAverage localRA1;
38  edm::RunningAverage localRA2;
39 } // namespace
40 
42  produces<reco::PFRecHitCollection>();
43  produces<reco::PFRecHitCollection>("Cleaned");
44 
45  edm::ConsumesCollector cc = consumesCollector();
46 
47  std::vector<edm::ParameterSet> creators = iConfig.getParameter<std::vector<edm::ParameterSet>>("producers");
48  for (auto& creator : creators) {
49  std::string name = creator.getParameter<std::string>("name");
50  creators_.emplace_back(PFRecHitFactory::get()->create(name, creator, cc));
51  }
52 
53  edm::ParameterSet navSet = iConfig.getParameter<edm::ParameterSet>("navigator");
54  navigator_ = PFRecHitNavigationFactory::get()->create(navSet.getParameter<std::string>("name"), navSet, cc);
55 }
56 
58 
59 //
60 // member functions
61 //
62 
63 void PFRecHitProducer::beginRun(edm::Run const& iRun, const edm::EventSetup& iSetup) {
64  for (const auto& creator : creators_) {
65  creator->init(iSetup);
66  }
67  navigator_->init(iSetup);
68 }
69 
70 // ------------ method called to produce the data ------------
72  using namespace edm;
73  auto out = std::make_unique<reco::PFRecHitCollection>();
74  auto cleaned = std::make_unique<reco::PFRecHitCollection>();
75 
76  out->reserve(localRA1.upper());
77  cleaned->reserve(localRA2.upper());
78 
79  for (const auto& creator : creators_) {
80  creator->importRecHits(out, cleaned, iEvent, iSetup);
81  }
82 
83  if (out->capacity() > 2 * out->size())
84  out->shrink_to_fit();
85  if (cleaned->capacity() > 2 * cleaned->size())
86  cleaned->shrink_to_fit();
87  localRA1.update(out->size());
88  localRA2.update(cleaned->size());
89  std::sort(out->begin(), out->end(), sortByDetId);
90 
91  //create a refprod here
93 
94  for (auto& pfrechit : *out) {
95  navigator_->associateNeighbours(pfrechit, out, refProd);
96  }
97 
98  iEvent.put(std::move(out), "");
99  iEvent.put(std::move(cleaned), "Cleaned");
100 }
101 
104  {
106  pset.add<std::string>("name", "");
107  pset.add<std::vector<int>>("hcalEnums", {});
108  pset.add<edm::ParameterSetDescription>("barrel", {});
109  pset.add<edm::ParameterSetDescription>("endcap", {});
110  {
112  pset2.add<std::string>("name", "");
113  pset2.add<std::string>("topologySource", "");
114  pset.add<edm::ParameterSetDescription>("hgcee", pset2);
115  pset.add<edm::ParameterSetDescription>("hgcheb", pset2);
116  pset.add<edm::ParameterSetDescription>("hgchef", pset2);
117  }
118  desc.add<edm::ParameterSetDescription>("navigator", pset);
119  }
120  {
122  psd.add<std::string>("name", "");
123  psd.add<edm::InputTag>("src", {});
124  {
126  psd2.add<std::string>("name", "");
127  psd2.add<std::vector<int>>("maxSeverities", {});
128  psd2.add<std::vector<double>>("cleaningThresholds", {});
129  psd2.add<std::vector<std::string>>("flags", {});
130  psd2.add<bool>("usePFThresholdsFromDB", false);
131  {
133  psd3.add<std::vector<int>>("depth", {});
134  psd3.add<std::vector<double>>("threshold", {});
135  psd3.add<int>("detectorEnum", 0);
136  psd2.addVPSet("cuts", psd3, {});
137  }
138  psd2.add<double>("thresholdSNR", 0);
139  psd2.add<bool>("applySelectionsToAllCrystals", false);
140  psd2.add<double>("cleaningThreshold", 0);
141  psd2.add<bool>("timingCleaning", false);
142  psd2.add<bool>("topologicalCleaning", false);
143  psd2.add<bool>("skipTTRecoveredHits", false);
144  psd2.add<double>("threshold", 0);
145  psd2.add<double>("threshold_ring0", 0);
146  psd2.add<double>("threshold_ring12", 0);
147  psd.addVPSet("qualityTests", psd2, {});
148  }
149  psd.add<double>("EMDepthCorrection", 0);
150  psd.add<double>("HADDepthCorrection", 0);
151  psd.add<double>("thresh_HF", 0);
152  psd.add<double>("ShortFibre_Cut", 0);
153  psd.add<double>("LongFibre_Fraction", 0);
154  psd.add<double>("LongFibre_Cut", 0);
155  psd.add<double>("ShortFibre_Fraction", 0);
156  psd.add<double>("HFCalib29", 0);
157  psd.add<edm::InputTag>("srFlags", {});
158  psd.add<std::string>("geometryInstance", "");
159  desc.addVPSet("producers", psd, {});
160  }
161  descriptions.addWithDefaultLabel(desc);
162 }
std::vector< std::unique_ptr< PFRecHitCreatorBase > > creators_
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
~PFRecHitProducer() override
ParameterDescriptionBase * addVPSet(U const &iLabel, ParameterSetDescription const &validator, std::vector< ParameterSet > const &defaults)
def create(alignables, pedeDump, additionalData, outputFile, config)
uint32_t cc[maxCellsPerHit]
Definition: gpuFishbone.h:49
std::vector< PFRecHit > PFRecHitCollection
collection of PFRecHit objects
Definition: PFRecHitFwd.h:9
void produce(edm::Event &, const edm::EventSetup &) override
static bool sortByDetId(const std::pair< int, float > &pair1, const std::pair< int, float > &pair2)
int iEvent
Definition: GenABIO.cc:224
Particle flow rechit (rechit + geometry and topology information). See clustering algorithm in PFClus...
Definition: PFRecHit.h:31
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
ParameterDescriptionBase * add(U const &iLabel, T const &value)
PFRecHitProducer(const edm::ParameterSet &iConfig)
double b
Definition: hdecay.h:120
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
HLT enums.
double a
Definition: hdecay.h:121
#define get
def move(src, dest)
Definition: eostools.py:511
std::unique_ptr< PFRecHitNavigatorBase > navigator_
Definition: Run.h:45
void beginRun(edm::Run const &, const edm::EventSetup &) override