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 
42 public:
43  explicit AlCaGammaJetProducer(const edm::ParameterSet&);
44  ~AlCaGammaJetProducer() override;
45  void beginJob() override ;
46  void produce(edm::Event &, const edm::EventSetup&) override;
47  void endJob() override;
48 
49 private:
51 
52  // ----------member data ---------------------------
53 
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 }
129 
131 
133 
135  edm::LogInfo("AlcaGammaJet") << "Accepts " << nSelect_ << " events from a total of " << nAll_ << " events";
136 }
137 
139 
140  // Check the requirement for minimum pT
141  if (ph.empty()) return false;
142  bool ok(false);
143  for (reco::PFJetCollection::const_iterator itr=jt.begin();
144  itr!=jt.end(); ++itr) {
145  if (itr->pt() >= minPtJet_) {
146  ok = true;
147  break;
148  }
149  }
150  if (!ok) return ok;
151  for (reco::PhotonCollection::const_iterator itr=ph.begin();
152  itr!=ph.end(); ++itr) {
153  if (itr->pt() >= minPtPhoton_) return ok;
154  }
155  return false;
156 }
157 // ------------ method called to produce the data ------------
159  nAll_++;
160 
161  // Access the collections from iEvent
163  iEvent.getByToken(tok_Photon_,phoHandle);
164  if (!phoHandle.isValid()) {
165  edm::LogWarning("AlCaGammaJet") << "AlCaGammaJetProducer: Error! can't get the product " << labelPhoton_;
166  return ;
167  }
168  const reco::PhotonCollection photon = *(phoHandle.product());
169 
171  iEvent.getByToken(tok_PFJet_,pfjet);
172  if (!pfjet.isValid()) {
173  edm::LogWarning("AlCaGammaJet") << "AlCaGammaJetProducer: Error! can't get product " << labelPFJet_;
174  return ;
175  }
176  const reco::PFJetCollection pfjets = *(pfjet.product());
177 
179  iEvent.getByToken(tok_PFCand_,pfc);
180  if (!pfc.isValid()) {
181  edm::LogWarning("AlCaGammaJet") << "AlCaGammaJetProducer: Error! can't get product " << labelPFCandidate_;
182  return ;
183  }
184  const reco::PFCandidateCollection pfcand = *(pfc.product());
185 
187  iEvent.getByToken(tok_Vertex_,vt);
188  if (!vt.isValid()) {
189  edm::LogWarning("AlCaGammaJet") << "AlCaGammaJetProducer: Error! can't get product " << labelVertex_;
190  return ;
191  }
192  const reco::VertexCollection vtx = *(vt.product());
193 
195  iEvent.getByToken(tok_PFMET_,pfmt);
196  if (!pfmt.isValid()) {
197  edm::LogWarning("AlCaGammaJet") << "AlCaGammaJetProducer: Error! can't get product " << labelPFMET_;
198  return ;
199  }
200  const reco::PFMETCollection pfmet = *(pfmt.product());
201 
203  iEvent.getByToken(tok_HBHE_,hbhe);
204  if (!hbhe.isValid()) {
205  edm::LogWarning("AlCaGammaJet") << "AlCaGammaJetProducer: Error! can't get product " << labelHBHE_;
206  return ;
207  }
209 
211  iEvent.getByToken(tok_HO_,ho);
212  if(!ho.isValid()) {
213  edm::LogWarning("AlCaGammaJet") << "AlCaGammaJetProducer: Error! can't get product " << labelHO_;
214  return ;
215  }
217 
219  iEvent.getByToken(tok_HF_,hf);
220  if(!hf.isValid()) {
221  edm::LogWarning("AlCaGammaJet") << "AlCaGammaJetProducer: Error! can't get product " << labelHF_;
222  return ;
223  }
225 
227  iEvent.getByToken(tok_TrigRes_,trig);
228  if (!trig.isValid()) {
229  edm::LogWarning("AlCaGammaJet") << "AlCaGammaJetProducer: Error! can't get product " << labelTrigger_;
230  return ;
231  }
232  const edm::TriggerResults trigres = *(trig.product());
233 
235  iEvent.getByToken(tok_Rho_,rh);
236  if (!rh.isValid()) {
237  edm::LogWarning("AlCaGammaJet") << "AlCaGammaJetProducer: Error! can't get product " << labelRho_;
238  return ;
239  }
240  const double rho_val = *(rh.product());
241 
243  iEvent.getByToken(tok_GsfElec_,gsf);
244  if (!gsf.isValid()){
245  edm::LogWarning("AlCaGammaJet") << "AlCaGammaJetProducer: Error! can't get product " << labelGsfEle_;
246  return ;
247  }
248  const reco::GsfElectronCollection gsfele = *(gsf.product());
249 
251  iEvent.getByToken(tok_Conv_,con);
252  if (!con.isValid()){
253  edm::LogWarning("AlCaGammaJet") << "AlCaGammaJetProducer: Error! can't get product " << labelConv_;
254  return ;
255  }
256  const reco::ConversionCollection conv = *(con.product());
257 
259  iEvent.getByToken(tok_BS_,bs);
260  if (!bs.isValid()){
261  edm::LogWarning("AlCaGammaJet") << "AlCaGammaJetProducer: Error! can't get product " << labelBeamSpot_;
262  return ;
263  }
264  const reco::BeamSpot beam = *(bs.product());
265 
266  // declare variables
267  // copy from standard place, if the event is useful
268  auto miniPFjetCollection = std::make_unique<reco::PFJetCollection>();
269  auto miniPhotonCollection = std::make_unique<reco::PhotonCollection>();
270  auto miniPFCandCollection = std::make_unique<reco::PFCandidateCollection>();
271  auto miniVtxCollection = std::make_unique<reco::VertexCollection>();
272  auto miniPFMETCollection = std::make_unique<reco::PFMETCollection>();
273  auto miniHBHECollection = std::make_unique<edm::SortedCollection<HBHERecHit,edm::StrictWeakOrdering<HBHERecHit>>>();
274  auto miniHOCollection = std::make_unique<edm::SortedCollection<HORecHit,edm::StrictWeakOrdering<HORecHit>>>();
275  auto miniHFCollection = std::make_unique<edm::SortedCollection<HFRecHit,edm::StrictWeakOrdering<HFRecHit>>>();
276  auto miniGSFeleCollection = std::make_unique<reco::GsfElectronCollection>();
277  auto miniConversionCollection = std::make_unique<reco::ConversionCollection>();
278 
279  auto miniBeamSpotCollection = std::make_unique<reco::BeamSpot>(beam.position(),beam.sigmaZ(),
280  beam.dxdz(),beam.dydz(),beam.BeamWidthX(),
281  beam.covariance(),beam.type());
282 
283  auto miniTriggerCollection = std::make_unique<edm::TriggerResults>();
284 
285  auto miniRhoCollection = std::make_unique<double>();
286  auto miniLoosePhoton = std::make_unique<std::vector<Bool_t>>();
287  auto miniTightPhoton = std::make_unique<std::vector<Bool_t>>();
288 
289 
290  // See if this event is useful
291  bool accept = select(photon, pfjets);
292  if (accept) {
293  nSelect_++;
294 
295  //Copy from standard place
296  for(reco::PFJetCollection::const_iterator pfjetItr=pfjets.begin();
297  pfjetItr!=pfjets.end(); pfjetItr++) {
298  miniPFjetCollection->push_back(*pfjetItr);
299  }
300 
301  for(reco::PhotonCollection::const_iterator phoItr=photon.begin();
302  phoItr!=photon.end(); phoItr++) {
303  miniPhotonCollection->push_back(*phoItr);
304  }
305 
306  for(reco::PFCandidateCollection::const_iterator pfcItr=pfcand.begin();
307  pfcItr!=pfcand.end(); pfcItr++) {
308  miniPFCandCollection->push_back(*pfcItr);
309  }
310 
311  for(reco::VertexCollection::const_iterator vtxItr=vtx.begin();
312  vtxItr!=vtx.end(); vtxItr++) {
313  miniVtxCollection->push_back(*vtxItr);
314  }
315 
316  for(reco::PFMETCollection::const_iterator pfmetItr=pfmet.begin();
317  pfmetItr!=pfmet.end(); pfmetItr++) {
318  miniPFMETCollection->push_back(*pfmetItr);
319  }
320 
321  for(edm::SortedCollection<HBHERecHit,edm::StrictWeakOrdering<HBHERecHit> >::const_iterator hbheItr=Hithbhe.begin();
322  hbheItr!=Hithbhe.end(); hbheItr++) {
323  miniHBHECollection->push_back(*hbheItr);
324  }
325 
326  for(edm::SortedCollection<HORecHit,edm::StrictWeakOrdering<HORecHit> >::const_iterator hoItr=Hitho.begin();
327  hoItr!=Hitho.end(); hoItr++) {
328  miniHOCollection->push_back(*hoItr);
329  }
330 
331  for(edm::SortedCollection<HFRecHit,edm::StrictWeakOrdering<HFRecHit> >::const_iterator hfItr=Hithf.begin();
332  hfItr!=Hithf.end(); hfItr++) {
333  miniHFCollection->push_back(*hfItr);
334  }
335 
336  for(reco::GsfElectronCollection::const_iterator gsfItr=gsfele.begin();
337  gsfItr!=gsfele.end(); gsfItr++) {
338  miniGSFeleCollection->push_back(*gsfItr);
339  }
340 
341  for(reco::ConversionCollection::const_iterator convItr=conv.begin();
342  convItr!=conv.end(); convItr++) {
343  miniConversionCollection->push_back(*convItr);
344  }
345 
346  *miniTriggerCollection = trigres;
347  *miniRhoCollection = rho_val;
348 
349  edm::Handle<edm::ValueMap<Bool_t> > loosePhotonQual;
350  iEvent.getByToken(tok_loosePhoton_, loosePhotonQual);
351  edm::Handle<edm::ValueMap<Bool_t> > tightPhotonQual;
352  iEvent.getByToken(tok_tightPhoton_, tightPhotonQual);
353  if (loosePhotonQual.isValid() && tightPhotonQual.isValid()) {
354  miniLoosePhoton->reserve(miniPhotonCollection->size());
355  miniTightPhoton->reserve(miniPhotonCollection->size());
356  for (int iPho=0; iPho<int(miniPhotonCollection->size()); ++iPho) {
357  edm::Ref<reco::PhotonCollection> photonRef(phoHandle,iPho);
358  if (!photonRef) {
359  std::cout << "failed ref" << std::endl;
360  miniLoosePhoton->push_back(-1);
361  miniTightPhoton->push_back(-1);
362  }
363  else {
364  miniLoosePhoton->push_back((*loosePhotonQual)[photonRef]);
365  miniTightPhoton->push_back((*tightPhotonQual)[photonRef]);
366  }
367  }
368  }
369  }
370 
371  //Put them in the event
372  iEvent.put(std::move(miniPhotonCollection), labelPhoton_.encode());
373  iEvent.put(std::move(miniPFjetCollection), labelPFJet_.encode());
374  iEvent.put(std::move(miniHBHECollection), labelHBHE_.encode());
375  iEvent.put(std::move(miniHFCollection), labelHF_.encode());
376  iEvent.put(std::move(miniHOCollection), labelHO_.encode());
377  iEvent.put(std::move(miniTriggerCollection), labelTrigger_.encode());
378  iEvent.put(std::move(miniPFCandCollection), labelPFCandidate_.encode());
379  iEvent.put(std::move(miniVtxCollection), labelVertex_.encode());
380  iEvent.put(std::move(miniPFMETCollection), labelPFMET_.encode());
381  iEvent.put(std::move(miniGSFeleCollection), labelGsfEle_.encode());
382  iEvent.put(std::move(miniRhoCollection), labelRho_.encode());
383  iEvent.put(std::move(miniConversionCollection), labelConv_.encode());
384  iEvent.put(std::move(miniBeamSpotCollection), labelBeamSpot_.encode());
385  iEvent.put(std::move(miniLoosePhoton), labelLoosePhot_.encode());
386  iEvent.put(std::move(miniTightPhoton), labelTightPhot_.encode());
387 
388  return;
389 
390 }
391 
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:136
edm::EDGetTokenT< edm::SortedCollection< HBHERecHit, edm::StrictWeakOrdering< HBHERecHit > > > tok_HBHE_
static HepMC::IO_HEPEVT conv
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:519
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
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:166
std::vector< Conversion > ConversionCollection
collectin of Conversion objects
Definition: ConversionFwd.h:9
edm::EDGetTokenT< edm::SortedCollection< HORecHit, edm::StrictWeakOrdering< HORecHit > > > tok_HO_
double dydz() const
dydz slope
Definition: BeamSpot.h:84
int iEvent
Definition: GenABIO.cc:230
AlCaGammaJetProducer(const edm::ParameterSet &)
edm::EDGetTokenT< edm::SortedCollection< HFRecHit, edm::StrictWeakOrdering< HFRecHit > > > tok_HF_
edm::EDGetTokenT< reco::VertexCollection > tok_Vertex_
double BeamWidthX() const
beam width X
Definition: BeamSpot.h:86
bool isValid() const
Definition: HandleBase.h:74
double dxdz() const
dxdz slope
Definition: BeamSpot.h:82
const_iterator end() const
std::vector< reco::PFCandidate > PFCandidateCollection
collection of PFCandidates
edm::EDGetTokenT< double > tok_Rho_
T const * product() const
Definition: Handle.h:81
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:80
edm::EDGetTokenT< reco::PFMETCollection > tok_PFMET_
return(e1-e2)*(e1-e2)+dp *dp
edm::EDGetTokenT< reco::ConversionCollection > tok_Conv_
double covariance(int i, int j) const
(i,j)-th element of error matrix
Definition: BeamSpot.h:112
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< reco::GsfElectronCollection > tok_GsfElec_
const Point & position() const
position
Definition: BeamSpot.h:62
edm::EDGetTokenT< reco::PhotonCollection > tok_Photon_
edm::EDGetTokenT< edm::ValueMap< Bool_t > > tok_loosePhoton_
def move(src, dest)
Definition: eostools.py:510
edm::EDGetTokenT< reco::PFCandidateCollection > tok_PFCand_
const_iterator begin() const
BeamType type() const
return beam type
Definition: BeamSpot.h:129