CMS 3D CMS Logo

AlCaGammaJetProducer.cc
Go to the documentation of this file.
1 // system include files
2 #include <memory>
3 #include <string>
4 // user include files
13 
31 
34 #include <iostream>
35 
36 //
37 // class declaration
38 //
39 
41 public:
42  explicit AlCaGammaJetProducer(const edm::ParameterSet&);
43  ~AlCaGammaJetProducer() override;
44  void beginJob() override;
45  void produce(edm::Event&, const edm::EventSetup&) override;
46  void endJob() override;
47 
48 private:
50 
51  // ----------member data ---------------------------
52 
57 
73 };
74 
76  // Take input
77  labelPhoton_ = iConfig.getParameter<edm::InputTag>("PhoInput");
78  labelPFJet_ = iConfig.getParameter<edm::InputTag>("PFjetInput");
79  labelHBHE_ = iConfig.getParameter<edm::InputTag>("HBHEInput");
80  labelHF_ = iConfig.getParameter<edm::InputTag>("HFInput");
81  labelHO_ = iConfig.getParameter<edm::InputTag>("HOInput");
82  labelTrigger_ = iConfig.getParameter<edm::InputTag>("TriggerResults");
83  labelPFCandidate_ = iConfig.getParameter<edm::InputTag>("particleFlowInput");
84  labelVertex_ = iConfig.getParameter<edm::InputTag>("VertexInput");
85  labelPFMET_ = iConfig.getParameter<edm::InputTag>("METInput");
86  labelGsfEle_ = iConfig.getParameter<edm::InputTag>("gsfeleInput");
87  labelRho_ = iConfig.getParameter<edm::InputTag>("rhoInput");
88  labelConv_ = iConfig.getParameter<edm::InputTag>("ConversionsInput");
89  labelBeamSpot_ = iConfig.getParameter<edm::InputTag>("BeamSpotInput");
90  labelLoosePhot_ = iConfig.getParameter<edm::InputTag>("PhoLoose");
91  labelTightPhot_ = iConfig.getParameter<edm::InputTag>("PhoTight");
92  minPtJet_ = iConfig.getParameter<double>("MinPtJet");
93  minPtPhoton_ = iConfig.getParameter<double>("MinPtPhoton");
94 
95  tok_Photon_ = consumes<reco::PhotonCollection>(labelPhoton_);
96  tok_PFJet_ = consumes<reco::PFJetCollection>(labelPFJet_);
97  tok_HBHE_ = consumes<edm::SortedCollection<HBHERecHit, edm::StrictWeakOrdering<HBHERecHit>>>(labelHBHE_);
98  tok_HF_ = consumes<edm::SortedCollection<HFRecHit, edm::StrictWeakOrdering<HFRecHit>>>(labelHF_);
99  tok_HO_ = consumes<edm::SortedCollection<HORecHit, edm::StrictWeakOrdering<HORecHit>>>(labelHO_);
100  tok_TrigRes_ = consumes<edm::TriggerResults>(labelTrigger_);
101  tok_PFCand_ = consumes<reco::PFCandidateCollection>(labelPFCandidate_);
102  tok_Vertex_ = consumes<reco::VertexCollection>(labelVertex_);
103  tok_PFMET_ = consumes<reco::PFMETCollection>(labelPFMET_);
104  tok_loosePhoton_ = consumes<edm::ValueMap<Bool_t>>(labelLoosePhot_);
105  tok_tightPhoton_ = consumes<edm::ValueMap<Bool_t>>(labelTightPhot_);
106  tok_GsfElec_ = consumes<reco::GsfElectronCollection>(labelGsfEle_);
107  tok_Rho_ = consumes<double>(labelRho_);
108  tok_Conv_ = consumes<reco::ConversionCollection>(labelConv_);
109  tok_BS_ = consumes<reco::BeamSpot>(labelBeamSpot_);
110 
111  // register your products
112  produces<reco::PhotonCollection>(labelPhoton_.encode());
113  produces<reco::PFJetCollection>(labelPFJet_.encode());
114  produces<edm::SortedCollection<HBHERecHit, edm::StrictWeakOrdering<HBHERecHit>>>(labelHBHE_.encode());
115  produces<edm::SortedCollection<HFRecHit, edm::StrictWeakOrdering<HFRecHit>>>(labelHF_.encode());
116  produces<edm::SortedCollection<HORecHit, edm::StrictWeakOrdering<HORecHit>>>(labelHO_.encode());
117  produces<edm::TriggerResults>(labelTrigger_.encode());
118  produces<std::vector<Bool_t>>(labelLoosePhot_.encode());
119  produces<std::vector<Bool_t>>(labelTightPhot_.encode());
120  produces<double>(labelRho_.encode());
121  produces<reco::PFCandidateCollection>(labelPFCandidate_.encode());
122  produces<reco::VertexCollection>(labelVertex_.encode());
123  produces<reco::PFMETCollection>(labelPFMET_.encode());
124  produces<reco::GsfElectronCollection>(labelGsfEle_.encode());
125  produces<reco::ConversionCollection>(labelConv_.encode());
126  produces<reco::BeamSpot>(labelBeamSpot_.encode());
127 }
128 
130 
132 
134  edm::LogInfo("AlcaGammaJet") << "Accepts " << nSelect_ << " events from a total of " << nAll_ << " events";
135 }
136 
138  // Check the requirement for minimum pT
139  if (ph.empty())
140  return false;
141  bool ok(false);
142  for (reco::PFJetCollection::const_iterator itr = jt.begin(); itr != jt.end(); ++itr) {
143  if (itr->pt() >= minPtJet_) {
144  ok = true;
145  break;
146  }
147  }
148  if (!ok)
149  return ok;
150  for (reco::PhotonCollection::const_iterator itr = ph.begin(); itr != ph.end(); ++itr) {
151  if (itr->pt() >= minPtPhoton_)
152  return ok;
153  }
154  return false;
155 }
156 // ------------ method called to produce the data ------------
158  nAll_++;
159 
160  // Access the collections from iEvent
162  iEvent.getByToken(tok_Photon_, phoHandle);
163  if (!phoHandle.isValid()) {
164  edm::LogWarning("AlCaGammaJet") << "AlCaGammaJetProducer: Error! can't get the product " << labelPhoton_;
165  return;
166  }
167  const reco::PhotonCollection photon = *(phoHandle.product());
168 
170  iEvent.getByToken(tok_PFJet_, pfjet);
171  if (!pfjet.isValid()) {
172  edm::LogWarning("AlCaGammaJet") << "AlCaGammaJetProducer: Error! can't get product " << labelPFJet_;
173  return;
174  }
175  const reco::PFJetCollection pfjets = *(pfjet.product());
176 
178  iEvent.getByToken(tok_PFCand_, pfc);
179  if (!pfc.isValid()) {
180  edm::LogWarning("AlCaGammaJet") << "AlCaGammaJetProducer: Error! can't get product " << labelPFCandidate_;
181  return;
182  }
183  const reco::PFCandidateCollection pfcand = *(pfc.product());
184 
186  iEvent.getByToken(tok_Vertex_, vt);
187  if (!vt.isValid()) {
188  edm::LogWarning("AlCaGammaJet") << "AlCaGammaJetProducer: Error! can't get product " << labelVertex_;
189  return;
190  }
191  const reco::VertexCollection vtx = *(vt.product());
192 
194  iEvent.getByToken(tok_PFMET_, pfmt);
195  if (!pfmt.isValid()) {
196  edm::LogWarning("AlCaGammaJet") << "AlCaGammaJetProducer: Error! can't get product " << labelPFMET_;
197  return;
198  }
199  const reco::PFMETCollection pfmet = *(pfmt.product());
200 
202  iEvent.getByToken(tok_HBHE_, hbhe);
203  if (!hbhe.isValid()) {
204  edm::LogWarning("AlCaGammaJet") << "AlCaGammaJetProducer: Error! can't get product " << labelHBHE_;
205  return;
206  }
208 
210  iEvent.getByToken(tok_HO_, ho);
211  if (!ho.isValid()) {
212  edm::LogWarning("AlCaGammaJet") << "AlCaGammaJetProducer: Error! can't get product " << labelHO_;
213  return;
214  }
216 
218  iEvent.getByToken(tok_HF_, hf);
219  if (!hf.isValid()) {
220  edm::LogWarning("AlCaGammaJet") << "AlCaGammaJetProducer: Error! can't get product " << labelHF_;
221  return;
222  }
224 
226  iEvent.getByToken(tok_TrigRes_, trig);
227  if (!trig.isValid()) {
228  edm::LogWarning("AlCaGammaJet") << "AlCaGammaJetProducer: Error! can't get product " << labelTrigger_;
229  return;
230  }
231  const edm::TriggerResults trigres = *(trig.product());
232 
234  iEvent.getByToken(tok_Rho_, rh);
235  if (!rh.isValid()) {
236  edm::LogWarning("AlCaGammaJet") << "AlCaGammaJetProducer: Error! can't get product " << labelRho_;
237  return;
238  }
239  const double rho_val = *(rh.product());
240 
242  iEvent.getByToken(tok_GsfElec_, gsf);
243  if (!gsf.isValid()) {
244  edm::LogWarning("AlCaGammaJet") << "AlCaGammaJetProducer: Error! can't get product " << labelGsfEle_;
245  return;
246  }
247  const reco::GsfElectronCollection gsfele = *(gsf.product());
248 
250  iEvent.getByToken(tok_Conv_, con);
251  if (!con.isValid()) {
252  edm::LogWarning("AlCaGammaJet") << "AlCaGammaJetProducer: Error! can't get product " << labelConv_;
253  return;
254  }
255  const reco::ConversionCollection conv = *(con.product());
256 
258  iEvent.getByToken(tok_BS_, bs);
259  if (!bs.isValid()) {
260  edm::LogWarning("AlCaGammaJet") << "AlCaGammaJetProducer: Error! can't get product " << labelBeamSpot_;
261  return;
262  }
263  const reco::BeamSpot beam = *(bs.product());
264 
265  // declare variables
266  // copy from standard place, if the event is useful
267  auto miniPFjetCollection = std::make_unique<reco::PFJetCollection>();
268  auto miniPhotonCollection = std::make_unique<reco::PhotonCollection>();
269  auto miniPFCandCollection = std::make_unique<reco::PFCandidateCollection>();
270  auto miniVtxCollection = std::make_unique<reco::VertexCollection>();
271  auto miniPFMETCollection = std::make_unique<reco::PFMETCollection>();
272  auto miniHBHECollection = std::make_unique<edm::SortedCollection<HBHERecHit, edm::StrictWeakOrdering<HBHERecHit>>>();
273  auto miniHOCollection = std::make_unique<edm::SortedCollection<HORecHit, edm::StrictWeakOrdering<HORecHit>>>();
274  auto miniHFCollection = std::make_unique<edm::SortedCollection<HFRecHit, edm::StrictWeakOrdering<HFRecHit>>>();
275  auto miniGSFeleCollection = std::make_unique<reco::GsfElectronCollection>();
276  auto miniConversionCollection = std::make_unique<reco::ConversionCollection>();
277 
278  auto miniBeamSpotCollection = std::make_unique<reco::BeamSpot>(
279  beam.position(), beam.sigmaZ(), beam.dxdz(), beam.dydz(), beam.BeamWidthX(), beam.covariance(), beam.type());
280 
281  auto miniTriggerCollection = std::make_unique<edm::TriggerResults>();
282 
283  auto miniRhoCollection = std::make_unique<double>();
284  auto miniLoosePhoton = std::make_unique<std::vector<Bool_t>>();
285  auto miniTightPhoton = std::make_unique<std::vector<Bool_t>>();
286 
287  // See if this event is useful
288  bool accept = select(photon, pfjets);
289  if (accept) {
290  nSelect_++;
291 
292  //Copy from standard place
293  for (reco::PFJetCollection::const_iterator pfjetItr = pfjets.begin(); pfjetItr != pfjets.end(); pfjetItr++) {
294  miniPFjetCollection->push_back(*pfjetItr);
295  }
296 
297  for (reco::PhotonCollection::const_iterator phoItr = photon.begin(); phoItr != photon.end(); phoItr++) {
298  miniPhotonCollection->push_back(*phoItr);
299  }
300 
301  for (reco::PFCandidateCollection::const_iterator pfcItr = pfcand.begin(); pfcItr != pfcand.end(); pfcItr++) {
302  miniPFCandCollection->push_back(*pfcItr);
303  }
304 
305  for (reco::VertexCollection::const_iterator vtxItr = vtx.begin(); vtxItr != vtx.end(); vtxItr++) {
306  miniVtxCollection->push_back(*vtxItr);
307  }
308 
309  for (reco::PFMETCollection::const_iterator pfmetItr = pfmet.begin(); pfmetItr != pfmet.end(); pfmetItr++) {
310  miniPFMETCollection->push_back(*pfmetItr);
311  }
312 
314  Hithbhe.begin();
315  hbheItr != Hithbhe.end();
316  hbheItr++) {
317  miniHBHECollection->push_back(*hbheItr);
318  }
319 
320  for (edm::SortedCollection<HORecHit, edm::StrictWeakOrdering<HORecHit>>::const_iterator hoItr = Hitho.begin();
321  hoItr != Hitho.end();
322  hoItr++) {
323  miniHOCollection->push_back(*hoItr);
324  }
325 
326  for (edm::SortedCollection<HFRecHit, edm::StrictWeakOrdering<HFRecHit>>::const_iterator hfItr = Hithf.begin();
327  hfItr != Hithf.end();
328  hfItr++) {
329  miniHFCollection->push_back(*hfItr);
330  }
331 
332  for (reco::GsfElectronCollection::const_iterator gsfItr = gsfele.begin(); gsfItr != gsfele.end(); gsfItr++) {
333  miniGSFeleCollection->push_back(*gsfItr);
334  }
335 
336  for (reco::ConversionCollection::const_iterator convItr = conv.begin(); convItr != conv.end(); convItr++) {
337  miniConversionCollection->push_back(*convItr);
338  }
339 
340  *miniTriggerCollection = trigres;
341  *miniRhoCollection = rho_val;
342 
343  edm::Handle<edm::ValueMap<Bool_t>> loosePhotonQual;
344  iEvent.getByToken(tok_loosePhoton_, loosePhotonQual);
345  edm::Handle<edm::ValueMap<Bool_t>> tightPhotonQual;
346  iEvent.getByToken(tok_tightPhoton_, tightPhotonQual);
347  if (loosePhotonQual.isValid() && tightPhotonQual.isValid()) {
348  miniLoosePhoton->reserve(miniPhotonCollection->size());
349  miniTightPhoton->reserve(miniPhotonCollection->size());
350  for (int iPho = 0; iPho < int(miniPhotonCollection->size()); ++iPho) {
351  edm::Ref<reco::PhotonCollection> photonRef(phoHandle, iPho);
352  if (!photonRef) {
353  std::cout << "failed ref" << std::endl;
354  miniLoosePhoton->push_back(-1);
355  miniTightPhoton->push_back(-1);
356  } else {
357  miniLoosePhoton->push_back((*loosePhotonQual)[photonRef]);
358  miniTightPhoton->push_back((*tightPhotonQual)[photonRef]);
359  }
360  }
361  }
362  }
363 
364  //Put them in the event
365  iEvent.put(std::move(miniPhotonCollection), labelPhoton_.encode());
366  iEvent.put(std::move(miniPFjetCollection), labelPFJet_.encode());
367  iEvent.put(std::move(miniHBHECollection), labelHBHE_.encode());
368  iEvent.put(std::move(miniHFCollection), labelHF_.encode());
369  iEvent.put(std::move(miniHOCollection), labelHO_.encode());
370  iEvent.put(std::move(miniTriggerCollection), labelTrigger_.encode());
371  iEvent.put(std::move(miniPFCandCollection), labelPFCandidate_.encode());
372  iEvent.put(std::move(miniVtxCollection), labelVertex_.encode());
373  iEvent.put(std::move(miniPFMETCollection), labelPFMET_.encode());
374  iEvent.put(std::move(miniGSFeleCollection), labelGsfEle_.encode());
375  iEvent.put(std::move(miniRhoCollection), labelRho_.encode());
376  iEvent.put(std::move(miniConversionCollection), labelConv_.encode());
377  iEvent.put(std::move(miniBeamSpotCollection), labelBeamSpot_.encode());
378  iEvent.put(std::move(miniLoosePhoton), labelLoosePhot_.encode());
379  iEvent.put(std::move(miniTightPhoton), labelTightPhot_.encode());
380 
381  return;
382 }
383 
bool select(const reco::PhotonCollection &, const reco::PFJetCollection &)
T getParameter(std::string const &) const
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:131
static HepMC::IO_HEPEVT conv
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
void produce(edm::Event &, const edm::EventSetup &) override
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
edm::EDGetTokenT< edm::ValueMap< Bool_t > > tok_tightPhoton_
edm::EDGetTokenT< reco::BeamSpot > tok_BS_
bool accept(const edm::Event &event, const edm::TriggerResults &triggerTable, const std::string &triggerPath)
Definition: TopDQMHelpers.h:30
std::vector< GsfElectron > GsfElectronCollection
collection of GsfElectron objects
std::string encode() const
Definition: InputTag.cc:159
std::vector< Conversion > ConversionCollection
collectin of Conversion objects
Definition: ConversionFwd.h:9
edm::EDGetTokenT< edm::SortedCollection< HBHERecHit, edm::StrictWeakOrdering< HBHERecHit > > > tok_HBHE_
double dydz() const
dydz slope
Definition: BeamSpot.h:80
int iEvent
Definition: GenABIO.cc:224
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
AlCaGammaJetProducer(const edm::ParameterSet &)
edm::EDGetTokenT< reco::VertexCollection > tok_Vertex_
double BeamWidthX() const
beam width X
Definition: BeamSpot.h:82
bool isValid() const
Definition: HandleBase.h:70
double dxdz() const
dxdz slope
Definition: BeamSpot.h:78
const_iterator end() const
std::vector< reco::PFCandidate > PFCandidateCollection
collection of PFCandidates
edm::EDGetTokenT< edm::SortedCollection< HFRecHit, edm::StrictWeakOrdering< HFRecHit > > > tok_HF_
edm::EDGetTokenT< double > tok_Rho_
T const * product() const
Definition: Handle.h:69
edm::EDGetTokenT< reco::PFJetCollection > tok_PFJet_
std::vector< Photon > PhotonCollection
collectin of Photon objects
Definition: PhotonFwd.h:9
double sigmaZ() const
sigma z
Definition: BeamSpot.h:76
edm::EDGetTokenT< reco::PFMETCollection > tok_PFMET_
edm::EDGetTokenT< reco::ConversionCollection > tok_Conv_
double covariance(int i, int j) const
(i,j)-th element of error matrix
Definition: BeamSpot.h:108
edm::EDGetTokenT< edm::TriggerResults > tok_TrigRes_
std::vector< PFJet > PFJetCollection
collection of PFJet objects
std::vector< reco::PFMET > PFMETCollection
collection of PFMET objects
edm::EDGetTokenT< edm::SortedCollection< HORecHit, edm::StrictWeakOrdering< HORecHit > > > tok_HO_
edm::EDGetTokenT< reco::GsfElectronCollection > tok_GsfElec_
const Point & position() const
position
Definition: BeamSpot.h:59
edm::EDGetTokenT< reco::PhotonCollection > tok_Photon_
edm::EDGetTokenT< edm::ValueMap< Bool_t > > tok_loosePhoton_
def move(src, dest)
Definition: eostools.py:511
edm::EDGetTokenT< reco::PFCandidateCollection > tok_PFCand_
const_iterator begin() const
BeamType type() const
return beam type
Definition: BeamSpot.h:122