CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
PFClusterProducerFromHGC3DClusters.cc
Go to the documentation of this file.
1 #include <memory>
2 
8 
15 
16 namespace l1tpf {
18  public:
21 
22  private:
24  bool emOnly_;
25  double etCut_;
28  bool hasEmId_;
31 
32  void produce(edm::Event &, const edm::EventSetup &) override;
33 
34  }; // class
35 } // namespace l1tpf
36 
38  : src_(consumes<l1t::HGCalMulticlusterBxCollection>(iConfig.getParameter<edm::InputTag>("src"))),
39  emOnly_(iConfig.getParameter<bool>("emOnly")),
40  etCut_(iConfig.getParameter<double>("etMin")),
41  preEmId_(iConfig.getParameter<std::string>("preEmId")),
42  emVsPionID_(iConfig.getParameter<edm::ParameterSet>("emVsPionID")),
43  emVsPUID_(iConfig.getParameter<edm::ParameterSet>("emVsPUID")),
44  hasEmId_((iConfig.existsAs<std::string>("preEmId") && !iConfig.getParameter<std::string>("preEmId").empty()) ||
45  !emVsPionID_.method().empty()),
46  corrector_(iConfig.getParameter<std::string>("corrector"),
47  emOnly_ || iConfig.getParameter<std::string>("corrector").empty()
48  ? -1
49  : iConfig.getParameter<double>("correctorEmfMax")),
50  resol_(iConfig.getParameter<edm::ParameterSet>("resol")) {
51  if (!emVsPionID_.method().empty()) {
53  }
54  if (!emVsPUID_.method().empty()) {
56  }
57 
58  produces<l1t::PFClusterCollection>();
59  if (hasEmId_) {
60  produces<l1t::PFClusterCollection>("em");
61  produces<l1t::PFClusterCollection>("had");
62  }
63 }
64 
66  auto out = std::make_unique<l1t::PFClusterCollection>();
67  std::unique_ptr<l1t::PFClusterCollection> outEm, outHad;
68  if (hasEmId_) {
69  outEm = std::make_unique<l1t::PFClusterCollection>();
70  outHad = std::make_unique<l1t::PFClusterCollection>();
71  }
73  iEvent.getByToken(src_, multiclusters);
74 
75  for (auto it = multiclusters->begin(0), ed = multiclusters->end(0); it != ed; ++it) {
76  float pt = it->pt(), hoe = it->hOverE();
77  bool isEM = hasEmId_ ? preEmId_(*it) : emOnly_;
78  if (emOnly_) {
79  if (hoe == -1)
80  continue;
81  pt /= (1 + hoe);
82  hoe = 0;
83  }
84  if (pt <= etCut_)
85  continue;
86 
87  l1t::PFCluster cluster(pt, it->eta(), it->phi(), hoe, /*isEM=*/isEM);
88  if (!emVsPUID_.method().empty()) {
89  if (!emVsPUID_.passID(*it, cluster)) {
90  continue;
91  }
92  }
93  if (!emVsPionID_.method().empty()) {
94  cluster.setIsEM(emVsPionID_.passID(*it, cluster));
95  }
96  if (corrector_.valid())
97  corrector_.correctPt(cluster);
98  cluster.setPtError(resol_(cluster.pt(), std::abs(cluster.eta())));
99 
100  out->push_back(cluster);
101  out->back().addConstituent(edm::Ptr<l1t::L1Candidate>(multiclusters, multiclusters->key(it)));
102  if (hasEmId_) {
103  (isEM ? outEm : outHad)->push_back(out->back());
104  }
105  }
106 
107  iEvent.put(std::move(out));
108  if (hasEmId_) {
109  iEvent.put(std::move(outEm), "em");
110  iEvent.put(std::move(outHad), "had");
111  }
112 }
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
int iEvent
Definition: GenABIO.cc:224
BXVector< HGCalMulticluster > HGCalMulticlusterBxCollection
def move
Definition: eostools.py:511
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
edm::EDGetTokenT< l1t::HGCalMulticlusterBxCollection > src_
void setIsEM(bool isEM)
Definition: PFCluster.h:60
void produce(edm::Event &, const edm::EventSetup &) override
StringCutObjectSelector< l1t::HGCalMulticluster > preEmId_