CMS 3D CMS Logo

GenPurposeSkimmerData.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: GenPurposeSkimmerData
4 // Class: GenPurposeSkimmerData
5 //
40 //
41 // Original Author: Nikolaos Rompotis
42 // Created: Thu Oct 16 17:11:55 CEST 2008
43 //
44 //
45 
47 
48 //
49 //
50 //
52 //
53 //
55 
56 {
57  //
58  // I N P U T P A R A M E T E R S
59  //
60  // output file name
61  outputFile_ = ps.getUntrackedParameter<std::string>("outputfile");
62  //
63  // Electron Collection
65  consumes<pat::ElectronCollection>(ps.getUntrackedParameter<edm::InputTag>("ElectronCollection"));
66  //
67  // MC:
68  //MCCollection_ = ps.getUntrackedParameter<edm::InputTag>("MCCollection");
69  //MCCollectionToken_ = consumes<reco::GenParticleCollection>(MCCollection_);
70  //MCMatch_Deta_ = ps.getUntrackedParameter<double>("MCMatch_Deta",0.1);
71  //MCMatch_Dphi_ = ps.getUntrackedParameter<double>("MCMatch_Dphi",0.35);
72  //
73  // MET Collections:
74  MetCollectionTag_ = ps.getUntrackedParameter<edm::InputTag>("MetCollectionTag");
75  MetCollectionToken_ = consumes<reco::CaloMETCollection>(MetCollectionTag_);
76  mcMetCollectionToken_ = consumes<pat::METCollection>(ps.getUntrackedParameter<edm::InputTag>("mcMetCollectionTag"));
77  t1MetCollectionToken_ = consumes<pat::METCollection>(ps.getUntrackedParameter<edm::InputTag>("t1MetCollectionTag"));
79  consumes<reco::PFMETCollection>(ps.getUntrackedParameter<edm::InputTag>("pfMetCollectionTag"));
80  tcMetCollectionToken_ = consumes<reco::METCollection>(ps.getUntrackedParameter<edm::InputTag>("tcMetCollectionTag"));
81  // genMetCollectionToken_ = consumes<reco::GenMETCollection>(ps.getUntrackedParameter<edm::InputTag>("genMetCollectionTag"));
82  //
83  // HLT parameters:
84  // allow info for 2 paths and 2 filters
85  // ---------------------------------------------------------------------------
86  HLTCollectionE29_ = ps.getUntrackedParameter<edm::InputTag>("HLTCollectionE29");
87  HLTCollectionE29Token_ = consumes<trigger::TriggerEvent>(HLTCollectionE29_);
88  HLTCollectionE31_ = ps.getUntrackedParameter<edm::InputTag>("HLTCollectionE31");
89  HLTCollectionE31Token_ = consumes<trigger::TriggerEvent>(HLTCollectionE31_);
90  HLTTriggerResultsE29_ = ps.getUntrackedParameter<edm::InputTag>("HLTTriggerResultsE29");
91  HLTTriggerResultsE29Token_ = consumes<edm::TriggerResults>(HLTTriggerResultsE29_);
92  HLTTriggerResultsE31_ = ps.getUntrackedParameter<edm::InputTag>("HLTTriggerResultsE31");
93  HLTTriggerResultsE31Token_ = consumes<edm::TriggerResults>(HLTTriggerResultsE31_);
94  //HLTPath_ = ps.getUntrackedParameter<std::string>("HLTPath","HLT_Ele15_LW_L1R");
95  //HLTFilterType_ =ps.getUntrackedParameter<edm::InputTag>("HLTFilterType");
96  //
97  // matching HLT objects to electrons
98  ProbeHLTObjMaxDR = ps.getUntrackedParameter<double>("ProbeHLTObjMaxDR", 0.2);
99  //
100  // ----------------------------------------------------------------------------
101  //
102  // detector geometry
103  //
104  BarrelMaxEta = ps.getUntrackedParameter<double>("BarrelMaxEta");
105  EndcapMinEta = ps.getUntrackedParameter<double>("EndcapMinEta");
106  EndcapMaxEta = ps.getUntrackedParameter<double>("EndcapMaxEta");
107  //
108  ctfTracksToken_ = consumes<reco::TrackCollection>(ps.getUntrackedParameter<edm::InputTag>("ctfTracksTag"));
109  corHybridscToken_ = consumes<reco::SuperClusterCollection>(ps.getUntrackedParameter<edm::InputTag>("corHybridsc"));
110  multi5x5scToken_ = consumes<reco::SuperClusterCollection>(ps.getUntrackedParameter<edm::InputTag>("multi5x5sc"));
111  offlineBeamSpotToken_ = consumes<reco::BeamSpot>(edm::InputTag("offlineBeamSpot"));
112  pMuonsToken_ = consumes<pat::MuonCollection>(edm::InputTag("selectedLayer1Muons"));
113 }
114 
116  // do anything here that needs to be done at desctruction time
117  // (e.g. close files, deallocate resources etc.)
118 }
119 
120 //
121 // member functions
122 //
123 
124 // ------------ method called to for each event ------------
126  // MC Collection ------------------------------------------------
127 
128  // edm::Handle<reco::GenParticleCollection> pGenPart;
129  // evt.getByToken(MCCollectionToken_, pGenPart);
130  // if ( not pGenPart.isValid() ) {
131  // std::cout <<"Error! Can't get "<<MCCollection_.label() << std::endl;
132  // return;
133  // }
134 
135  // const reco::GenParticleCollection *McCand = pGenPart.product();
136 
137  // GsF Electron Collection ---------------------------------------
139 
140  try {
141  evt.getByToken(ElectronCollectionToken_, pElectrons);
142  } catch (cms::Exception const &) {
143  edm::LogError("") << "Error! Can't get ElectronCollection by label. ";
144  }
145  // ***********************************************************************
146  // check which trigger has accepted the event ****************************
147  // ***********************************************************************
148  //
149  // path allocation: first 10 paths belong to the low lum menu, the rest
150  // in the high lum one
151  //
152  // Low Luminosity Menu (8e29)
153  //
154  /*
155  edm::Handle<edm::TriggerResults> HLTResultsE29;
156  evt.getByToken(HLTTriggerResultsE29Token_, HLTResultsE29);
157  if (not HLTResultsE29.isValid()) {
158  std::cout << "HLT Results with label: " << HLTTriggerResultsE29_
159  << " not found" << std::endl;
160  return;
161  }
162  //
163  edm::Handle<trigger::TriggerEvent> pHLTe29;
164  evt.getByToken(HLTCollectionE29Token_, pHLTe29);
165  if (not pHLTe29.isValid()) {
166  std::cout << "HLT Results with label: " << HLTCollectionE29_
167  << " not found" << std::endl;
168  return;
169  }
170  //
171  int sum = 0;
172  //
173  for (int iT=0; iT<10; ++iT) {
174  event_HLTPath[iT] = 0;
175  numberOfHLTFilterObjects[iT] =0;
176  //
177  const edm::TriggerNames & triggerNames = evt.triggerNames(*HLTResultsE29);
178  unsigned int trigger_size = HLTResultsE29->size();
179  unsigned int trigger_position = triggerNames.triggerIndex(HLTPath_[iT]);
180  if (trigger_position < trigger_size )
181  event_HLTPath[iT] = (int) HLTResultsE29->accept(trigger_position);
182  //
183  numberOfHLTFilterObjects[iT] = 0;
184  // check explicitly that the filter is there
185  const int nF(pHLTe29->sizeFilters());
186  const int filterInd = pHLTe29->filterIndex(HLTFilterType_[iT]);
187  if (nF != filterInd) {
188  const trigger::Vids& VIDS (pHLTe29->filterIds(filterInd));
189  const trigger::Keys& KEYS(pHLTe29->filterKeys(filterInd));
190  const int nI(VIDS.size());
191  const int nK(KEYS.size());
192  numberOfHLTFilterObjects[iT] = (nI>nK)? nI:nK;
193  }
194  //if (iT==2) // HLT_Ele15_LW_L1R only this trigger is required
195  sum += numberOfHLTFilterObjects[iT];
196  }
197  //
198  // High Luminosity Menu (1e31) DISABLED - only low lumi level
199  //
200  edm::Handle<edm::TriggerResults> HLTResultsE31;
201  evt.getByToken(HLTTriggerResultsE31Token_, HLTResultsE31);
202  if (not HLTResultsE31.isValid()) {
203  std::cout << "HLT Results with label: " << HLTTriggerResultsE31_
204  << " not found" << std::endl;
205  return;
206  }
208  edm::Handle<trigger::TriggerEvent> pHLTe31;
209  evt.getByToken(HLTCollectionE31Token_, pHLTe31);
210  if (not pHLTe31.isValid()) {
211  std::cout << "HLT Results with label: " << HLTCollectionE31_
212  << " not found" << std::endl;
213  return;
214  }
216  for (int iT=10; iT<25; ++iT) {
217  event_HLTPath[iT] = 0;
218  numberOfHLTFilterObjects[iT] =0;
219  //
220  const edm::TriggerNames & triggerNames = evt.triggerNames(*HLTResultsE31);
221  unsigned int trigger_size = HLTResultsE31->size();
222  unsigned int trigger_position = triggerNames.triggerIndex(HLTPath_[iT]);
223  if (trigger_position < trigger_size )
224  event_HLTPath[iT] = (int) HLTResultsE31->accept(trigger_position);
225  //
226  numberOfHLTFilterObjects[iT] = 0;
227  // check explicitly that the filter is there
228  const int nF(pHLTe31->sizeFilters());
229  const int filterInd = pHLTe31->filterIndex(HLTFilterType_[iT]);
230  if (nF != filterInd) {
231  const trigger::Vids& VIDS (pHLTe31->filterIds(filterInd));
232  const trigger::Keys& KEYS(pHLTe31->filterKeys(filterInd));
233  const int nI(VIDS.size());
234  const int nK(KEYS.size());
235  numberOfHLTFilterObjects[iT] = (nI>nK)? nI:nK;
236  }
237  // not needed
238  sum += numberOfHLTFilterObjects[iT];
239  }
240  if (sum == 0) {
241  //std::cout << "No trigger found in this event..." << std::endl;
242  return;
243  }
244  */
245  //std::cout << "HLT objects: #" << sum << std::endl;
246  // print out the triggers that exist in this event
247  // comment this out if you want to see the names of the existing triggers
249  evt.getByToken(HLTCollectionE29Token_, pHLTe29);
250  if (not pHLTe29.isValid()) {
251  std::cout << "Error!!! HLT is missing!" << std::endl;
252  return;
253  } /*
254  else {
255  // check explicitly that the filter is there
256  const int nF(pHLTe29->sizeFilters());
257  for (int filterInd=0; filterInd< nF; ++filterInd) {
258  const trigger::Vids& VIDS (pHLTe29->filterIds(filterInd));
259  const trigger::Keys& KEYS(pHLTe29->filterKeys(filterInd));
260  const int nI(VIDS.size());
261  const int nK(KEYS.size());
262  int nObjects = (nI>nK)? nI:nK;
263  const edm::InputTag filterTag = pHLTe29->filterTag(filterInd);
264  std::cout << "Found filter with name " << filterTag
265  << " and #objects: #" << nObjects << std::endl;
266  }
267  }
268  */
269  // *********************************************************************
270  // MET Collections:
271  //
274  //
276  evt.getByToken(t1MetCollectionToken_, t1MET);
277  //
279  evt.getByToken(mcMetCollectionToken_, mcMET);
280  //
282  evt.getByToken(tcMetCollectionToken_, tcMET);
283  //
286  //
287  // edm::Handle<reco::GenMETCollection> genMET;
288  // evt.getByToken(genMetCollectionToken_, genMET);
289  //
290  // initialize the MET variables ........................................
291  event_MET = -99.;
292  event_MET_phi = -99.;
293  event_MET_sig = -99.;
294  event_mcMET = -99.;
295  event_mcMET_phi = -99.;
296  event_mcMET_sig = -99.;
297  event_tcMET = -99.;
298  event_tcMET_phi = -99.;
299  event_tcMET_sig = -99.;
300  event_pfMET = -99.;
301  event_pfMET_phi = -99.;
302  event_pfMET_sig = -99.;
303  event_t1MET = -99.;
304  event_t1MET_phi = -99.;
305  event_t1MET_sig = -99.;
306  //
307  //event_genMET = -99.; event_genMET_phi= -99.; event_genMET_sig = -99.;
308  //
309  // get the values, if they are available
310  if (caloMET.isValid()) {
311  const reco::CaloMETRef MET(caloMET, 0);
312  event_MET = MET->et();
313  event_MET_phi = MET->phi();
314  event_MET_sig = MET->mEtSig();
315  } else {
316  std::cout << "caloMET not valid: input Tag: " << MetCollectionTag_ << std::endl;
317  }
318  if (tcMET.isValid()) {
319  const reco::METRef MET(tcMET, 0);
320  event_tcMET = MET->et();
321  event_tcMET_phi = MET->phi();
322  event_tcMET_sig = MET->mEtSig();
323  }
324  if (pfMET.isValid()) {
325  const reco::PFMETRef MET(pfMET, 0);
326  event_pfMET = MET->et();
327  event_pfMET_phi = MET->phi();
328  event_pfMET_sig = MET->mEtSig();
329  }
330  if (t1MET.isValid()) {
331  const pat::METRef MET(t1MET, 0);
332  event_t1MET = MET->et();
333  event_t1MET_phi = MET->phi();
334  event_t1MET_sig = MET->mEtSig();
335  }
336  if (mcMET.isValid()) {
337  const pat::METRef MET(mcMET, 0);
338  event_mcMET = MET->et();
339  event_mcMET_phi = MET->phi();
340  event_mcMET_sig = MET->mEtSig();
341  }
342 
343  // if ( genMET.isValid() ) {
344  // const reco::GenMETRef MET(genMET, 0);
345  // event_genMET = MET->et(); event_genMET_phi = MET->phi();
346  // event_genMET_sig = MET->mEtSig();
347  // }
348 
349  // std::cout << "t1MET: " << event_t1MET << " twikiT1MET: "
350  // << event_twikiT1MET << ", calo="<<event_MET << std::endl;
351  //
352  // some supercluster collections ...........................................
353  // correcyedHybridSuperClusters
355  evt.getByToken(corHybridscToken_, SC1);
356  const reco::SuperClusterCollection *sc1 = SC1.product();
357  // multi5x5SuperClustersWithPreshower
359  evt.getByToken(multi5x5scToken_, SC2);
360  const reco::SuperClusterCollection *sc2 = SC2.product();
361  //
362  const int n1 = sc1->size();
363  const int n2 = sc2->size();
364  //std::cout << "SC found: hybrid: " << n1 << ", multi5x5: "
365  // << n2 << std::endl;
366  // keep details of the 5 highest ET superclusters
367  for (int i = 0; i < 5; ++i) {
368  sc_hybrid_et[i] = -9999.;
369  sc_hybrid_eta[i] = -9999.;
370  sc_hybrid_phi[i] = -9999.;
371  //
372  sc_multi5x5_et[i] = -9999.;
373  sc_multi5x5_eta[i] = -9999.;
374  sc_multi5x5_phi[i] = -9999.;
375  //
376  }
377  // sort the energies of the first sc
378  std::vector<double> ETsc1;
379  std::vector<reco::SuperCluster>::const_iterator sc;
380  for (sc = sc1->begin(); sc != sc1->end(); ++sc) {
381  reco::SuperCluster mySc = *sc;
382  double scEt = mySc.energy() / (cosh(mySc.eta()));
383  ETsc1.push_back(scEt);
384  }
385  int *sorted1 = new int[n1];
386  double *et1 = new double[n1];
387  for (int i = 0; i < n1; ++i) {
388  et1[i] = ETsc1[i];
389  }
390  // array sorted now has the indices of the highest ET electrons
391  TMath::Sort(n1, et1, sorted1, true);
392  // .........................................................................
393  std::vector<double> ETsc2;
394  for (sc = sc2->begin(); sc != sc2->end(); ++sc) {
395  reco::SuperCluster mySc = *sc;
396  double scEt = mySc.energy() / (cosh(mySc.eta()));
397  ETsc2.push_back(scEt);
398  }
399  int *sorted2 = new int[n2];
400  double *et2 = new double[n2];
401  for (int i = 0; i < n2; ++i) {
402  et2[i] = ETsc2[i];
403  }
404  // array sorted now has the indices of the highest ET electrons
405  TMath::Sort(n2, et2, sorted2, true);
406  //
407  //
408  for (int probeSc = 0; probeSc < n1; ++probeSc) {
409  //std::cout<<"sorted["<< probeIt<< "]=" << sorted[probeIt] << std::endl;
410  // break if you have more than the appropriate number of electrons
411  if (probeSc >= 5)
412  break;
413  //
414  int sc_index = sorted1[probeSc];
415  std::vector<reco::SuperCluster>::const_iterator Rprobe = sc1->begin() + sc_index;
416  //
417  reco::SuperCluster sc0 = *Rprobe;
418  // now keep the relevant stuff:
419  sc_hybrid_et[probeSc] = sc0.energy() / (cosh(sc0.eta()));
420  sc_hybrid_eta[probeSc] = sc0.eta();
421  sc_hybrid_phi[probeSc] = sc0.phi();
422  }
423  // .........................................................................
424  for (int probeSc = 0; probeSc < n2; ++probeSc) {
425  //std::cout<<"sorted["<< probeIt<< "]=" << sorted[probeIt] << std::endl;
426  // break if you have more than the appropriate number of electrons
427  if (probeSc >= 5)
428  break;
429  //
430  int sc_index = sorted2[probeSc];
431  std::vector<reco::SuperCluster>::const_iterator Rprobe = sc2->begin() + sc_index;
432  //
433  reco::SuperCluster sc0 = *Rprobe;
434  // now keep the relevant stuff:
435  sc_multi5x5_et[probeSc] = sc0.energy() / (cosh(sc0.eta()));
436  sc_multi5x5_eta[probeSc] = sc0.eta();
437  sc_multi5x5_phi[probeSc] = sc0.phi();
438  }
439  delete[] sorted1;
440  delete[] sorted2;
441  delete[] et1;
442  delete[] et2;
444  // edm::InputTag ctfTracksTag("generalTracks", "", InputTagEnding_);
447  const reco::TrackCollection *ctf = ctfTracks.product();
448  reco::TrackCollection::const_iterator tr;
449  const int ntracks = ctf->size();
450  //
451  // get the beam spot for the parameter of the track
452  edm::Handle<reco::BeamSpot> pBeamSpot;
453  evt.getByToken(offlineBeamSpotToken_, pBeamSpot);
454  const reco::BeamSpot *bspot = pBeamSpot.product();
455  const math::XYZPoint &bspotPosition = bspot->position();
456  //
457  for (int i = 0; i < 20; ++i) {
458  ctf_track_pt[i] = -9999.;
459  ctf_track_eta[i] = -9999.;
460  ctf_track_phi[i] = -9999.;
461  ctf_track_vx[i] = -9999.;
462  ctf_track_vy[i] = -9999.;
463  ctf_track_vz[i] = -9999.;
464  ctf_track_tip[i] = -9999.;
465  ctf_track_tip_bs[i] = -9999.;
466  }
467  //
468  std::vector<double> ETtrack;
469  for (tr = ctf->begin(); tr != ctf->end(); ++tr) {
470  reco::Track mySc = *tr;
471  double scEt = mySc.pt();
472  ETtrack.push_back(scEt);
473  }
474  int *sortedTr = new int[ntracks];
475  double *etTr = new double[ntracks];
476  for (int i = 0; i < ntracks; ++i) {
477  etTr[i] = ETtrack[i];
478  }
479  // array sorted now has the indices of the highest ET electrons
480  TMath::Sort(ntracks, etTr, sortedTr, true);
481  //
482  for (int probeSc = 0; probeSc < ntracks; ++probeSc) {
483  //std::cout<<"sorted["<< probeIt<< "]=" << sorted[probeIt] << std::endl;
484  // break if you have more than the appropriate number of electrons
485  if (probeSc >= 20)
486  break;
487  //
488  int sc_index = sortedTr[probeSc];
489  std::vector<reco::Track>::const_iterator Rprobe = ctf->begin() + sc_index;
490  //
491  reco::Track sc0 = *Rprobe;
492  // now keep the relevant stuff:
493  ctf_track_pt[probeSc] = sc0.pt();
494  ctf_track_eta[probeSc] = sc0.eta();
495  ctf_track_phi[probeSc] = sc0.phi();
496  ctf_track_vx[probeSc] = sc0.vx();
497  ctf_track_vy[probeSc] = sc0.vy();
498  ctf_track_vz[probeSc] = sc0.vz();
499  ctf_track_tip[probeSc] = -sc0.dxy();
500  ctf_track_tip_bs[probeSc] = -sc0.dxy(bspotPosition);
501  }
502  delete[] sortedTr;
503  delete[] etTr;
504  //
505  // keep 4 of the selectedLayer1Muons for reference
507  evt.getByToken(pMuonsToken_, pMuons);
508  const pat::MuonCollection *pmuon = pMuons.product();
509  pat::MuonCollection::const_iterator muon;
510  const int nmuons = pMuons->size();
511  //
512  for (int i = 0; i < 4; ++i) {
513  muon_pt[i] = -9999.;
514  muon_eta[i] = -9999.;
515  muon_phi[i] = -9999.;
516  muon_vx[i] = -9999.;
517  muon_vy[i] = -9999.;
518  muon_vz[i] = -9999.;
519  muon_tip[i] = -9999.;
520  muon_tip_bs[i] = -9999.;
521  }
522  //
523  std::vector<double> ETmuons;
524  for (muon = pmuon->begin(); muon != pmuon->end(); ++muon) {
525  pat::Muon mySc = *muon;
526  double scEt = mySc.track()->pt();
527  ETmuons.push_back(scEt);
528  }
529  int *sortedMu = new int[nmuons];
530  double *etMu = new double[nmuons];
531  for (int i = 0; i < nmuons; ++i) {
532  etMu[i] = ETmuons[i];
533  }
534  // array sorted now has the indices of the highest ET electrons
535  TMath::Sort(nmuons, etMu, sortedMu, true);
536  //
537  for (int probeSc = 0; probeSc < nmuons; ++probeSc) {
538  //std::cout<<"sorted["<< probeIt<< "]=" << sorted[probeIt] << std::endl;
539  // break if you have more than the appropriate number of electrons
540  if (probeSc >= 4)
541  break;
542  //
543  int sc_index = sortedMu[probeSc];
544  std::vector<pat::Muon>::const_iterator Rprobe = pmuon->begin() + sc_index;
545  //
546  pat::Muon sc0 = *Rprobe;
547  // now keep the relevant stuff:
548  muon_pt[probeSc] = sc0.track()->pt();
549  muon_eta[probeSc] = sc0.track()->eta();
550  muon_phi[probeSc] = sc0.track()->phi();
551  muon_vx[probeSc] = sc0.track()->vx();
552  muon_vy[probeSc] = sc0.track()->vy();
553  muon_vz[probeSc] = sc0.track()->vz();
554  muon_tip[probeSc] = -sc0.track()->dxy();
555  muon_tip_bs[probeSc] = -sc0.track()->dxy(bspotPosition);
556  }
557  delete[] sortedMu;
558  delete[] etMu;
559  //
560  if (n1 + n2 + ntracks == 0) {
561  std::cout << "Return: no sc in this event" << std::endl;
562  return;
563  }
564  // /////////////////////////////////////////////////////////////////////////
565  // electron details
567  const int MAX_PROBES = 4;
568  for (int i = 0; i < MAX_PROBES; i++) {
569  probe_ele_eta_for_tree[i] = -99.0;
570  probe_ele_et_for_tree[i] = -99.0;
571  probe_ele_phi_for_tree[i] = -99.0;
572  probe_ele_Xvertex_for_tree[i] = -99.0;
573  probe_ele_Yvertex_for_tree[i] = -99.0;
574  probe_ele_Zvertex_for_tree[i] = -99.0;
575  probe_ele_tip[i] = -999.;
576 
577  probe_sc_eta_for_tree[i] = -99.0;
578  probe_sc_et_for_tree[i] = -99.0;
579  probe_sc_phi_for_tree[i] = -99.0;
580 
581  probe_charge_for_tree[i] = -99;
584  //
585  // probe isolation values ............
586  probe_isolation_value[i] = 999.0;
587  probe_iso_user[i] = 999.0;
589  probe_ecal_iso_user[i] = 999;
591  probe_hcal_iso_user[i] = 999;
592 
593  probe_ele_hoe[i] = 999.;
594  probe_ele_shh[i] = 999.;
595  probe_ele_sihih[i] = 999.;
596  probe_ele_dhi[i] = 999.;
597  probe_ele_dfi[i] = 999.;
598  probe_ele_eop[i] = 999.;
599  probe_ele_pin[i] = 999.;
600  probe_ele_pout[i] = 999.;
601  probe_ele_e5x5[i] = 999.;
602  probe_ele_e2x5[i] = 999.;
603  probe_ele_e1x5[i] = 999.;
604 
605  //
606  //
607  //for (int j=0; j<25; ++j) {
608  // probe_pass_trigger_cut[i][j]=0;
609  //}
610  //probe_hlt_matched_dr[i]=0;
611  //probe_mc_matched[i] = 0;
612  //probe_mc_matched_deta[i] = 999.;
613  //probe_mc_matched_dphi[i] = 999.;
614  //probe_mc_matched_denergy[i] = 999.;
615  //probe_mc_matched_mother[i] = 999;
616  //
617  //
618  }
619  const pat::ElectronCollection *electrons = pElectrons.product();
620 
622  //std::cout << "In this event " << elec_number_in_event <<
623  // " electrons were found" << std::endl;
624  // if (elec_number_in_event == 0) return;
625 
626  std::vector<pat::ElectronRef> UniqueElectrons;
627  // edm::LogInfo("") << "Starting loop over electrons.";
628  int index = 0;
629  //***********************************************************************
630  // NEW METHOD by D WARDROPE implemented 26.05.08 ************************
631  //************* DUPLICATE ****** REMOVAL *******************************
632  // 02.06.08: due to a bug in the hybrid algorithm that affects detid ****
633  // we change detid matching to superCluster ref matching ******
634  for (pat::ElectronCollection::const_iterator elec = electrons->begin(); elec != electrons->end(); ++elec) {
635  const pat::ElectronRef electronRef(pElectrons, index);
636  //Remove duplicate electrons which share a supercluster
637  pat::ElectronCollection::const_iterator BestDuplicate = elec;
638  int index2 = 0;
639  for (pat::ElectronCollection::const_iterator elec2 = electrons->begin(); elec2 != electrons->end(); ++elec2) {
640  if (elec != elec2) {
641  if (elec->superCluster() == elec2->superCluster()) {
642  if (fabs(BestDuplicate->eSuperClusterOverP() - 1.) >= fabs(elec2->eSuperClusterOverP() - 1.)) {
643  BestDuplicate = elec2;
644  }
645  }
646  }
647  ++index2;
648  }
649  if (BestDuplicate == elec)
650  UniqueElectrons.push_back(electronRef);
651  ++index;
652  }
653  //
654  // debugging: store electrons after duplicate removal
655  elec_1_duplicate_removal = UniqueElectrons.size();
656  //std::cout << "In this event there are " << elec_1_duplicate_removal
657  // << " electrons" << std::endl;
658  //
659  //
660  // duplicate removal is done now:
661  // the electron collection is in UniqueElectrons
662  //
663  // run over probes - now probe electrons and store
664  //
665  // the electron collection is now
666  // vector<reco::PixelMatchGsfElectronRef> UniqueElectrons
667  std::vector<double> ETs;
668  std::vector<pat::ElectronRef>::const_iterator elec;
669  for (elec = UniqueElectrons.begin(); elec != UniqueElectrons.end(); ++elec) {
671  probeEle = *elec;
672  double probeEt = probeEle->caloEnergy() / (cosh(probeEle->caloPosition().eta()));
673  ETs.push_back(probeEt);
674  }
675  int *sorted = new int[elec_1_duplicate_removal];
676  double *et = new double[elec_1_duplicate_removal];
677  //std::cout << "Elecs: " << elec_1_duplicate_removal << std::endl;
678  for (int i = 0; i < elec_1_duplicate_removal; ++i) {
679  et[i] = ETs[i];
680  //std::cout << "et["<< i << "]=" << et[i] << std::endl;
681  }
682  // array sorted now has the indices of the highest ET electrons
683  TMath::Sort(elec_1_duplicate_removal, et, sorted, true);
684  //
685  //
686  for (int probeIt = 0; probeIt < elec_1_duplicate_removal; ++probeIt) {
687  //std::cout<<"sorted["<< probeIt<< "]=" << sorted[probeIt] << std::endl;
688  // break if you have more than the appropriate number of electrons
689  if (probeIt >= MAX_PROBES)
690  break;
691  //
692  int elec_index = sorted[probeIt];
693  std::vector<pat::ElectronRef>::const_iterator Rprobe = UniqueElectrons.begin() + elec_index;
694  //
696  probeEle = *Rprobe;
697  double probeEt = probeEle->caloEnergy() / (cosh(probeEle->caloPosition().eta()));
698  probe_sc_eta_for_tree[probeIt] = probeEle->caloPosition().eta();
699  probe_sc_phi_for_tree[probeIt] = probeEle->caloPosition().phi();
700  probe_sc_et_for_tree[probeIt] = probeEt;
701  // fiducial cut ...............................
702  if (fabs(probeEle->caloPosition().eta()) < BarrelMaxEta ||
703  (fabs(probeEle->caloPosition().eta()) > EndcapMinEta && fabs(probeEle->caloPosition().eta()) < EndcapMaxEta)) {
704  probe_sc_pass_fiducial_cut[probeIt] = 1;
705  }
706  //
707  probe_charge_for_tree[probeIt] = probeEle->charge();
708  probe_ele_eta_for_tree[probeIt] = probeEle->eta();
709  probe_ele_et_for_tree[probeIt] = probeEle->et();
710  probe_ele_phi_for_tree[probeIt] = probeEle->phi();
711  probe_ele_Xvertex_for_tree[probeIt] = probeEle->vx();
712  probe_ele_Yvertex_for_tree[probeIt] = probeEle->vy();
713  probe_ele_Zvertex_for_tree[probeIt] = probeEle->vz();
714  probe_classification_index_for_tree[probeIt] = probeEle->classification();
715  double ProbeTIP = probeEle->gsfTrack()->d0();
716  probe_ele_tip[probeIt] = ProbeTIP;
717  // isolation ..................................
718  // these are the default values: trk 03, ecal, hcal 04
719  // I know that there is a more direct way, but in this way it
720  // is clearer what you get each time :P
721  probe_isolation_value[probeIt] = probeEle->dr03IsolationVariables().tkSumPt;
722  probe_ecal_isolation_value[probeIt] = probeEle->dr04IsolationVariables().ecalRecHitSumEt;
723  probe_hcal_isolation_value[probeIt] = probeEle->dr04IsolationVariables().hcalDepth1TowerSumEt +
724  probeEle->dr04IsolationVariables().hcalDepth2TowerSumEt;
725  // one extra isos:
726  probe_iso_user[probeIt] = probeEle->dr04IsolationVariables().tkSumPt;
727  probe_ecal_iso_user[probeIt] = probeEle->dr03IsolationVariables().ecalRecHitSumEt;
728  probe_hcal_iso_user[probeIt] = probeEle->dr03IsolationVariables().hcalDepth1TowerSumEt +
729  probeEle->dr03IsolationVariables().hcalDepth2TowerSumEt;
730  // ele id variables
731  double hOverE = probeEle->hadronicOverEm();
732  double deltaPhiIn = probeEle->deltaPhiSuperClusterTrackAtVtx();
733  double deltaEtaIn = probeEle->deltaEtaSuperClusterTrackAtVtx();
734  double eOverP = probeEle->eSuperClusterOverP();
735  double pin = probeEle->trackMomentumAtVtx().R();
736  double pout = probeEle->trackMomentumOut().R();
737  double sigmaee = probeEle->scSigmaEtaEta();
738  double sigma_IetaIeta = probeEle->scSigmaIEtaIEta();
739  // correct if in endcaps
740  if (fabs(probeEle->caloPosition().eta()) > 1.479) {
741  sigmaee = sigmaee - 0.02 * (fabs(probeEle->caloPosition().eta()) - 2.3);
742  }
743  //
744  //double e5x5, e2x5Right, e2x5Left, e2x5Top, e2x5Bottom, e1x5;
745  double e5x5, e2x5, e1x5;
746  e5x5 = probeEle->scE5x5();
747  e1x5 = probeEle->scE1x5();
748  e2x5 = probeEle->scE2x5Max();
749  //
750  // electron ID variables
751  probe_ele_hoe[probeIt] = hOverE;
752  probe_ele_shh[probeIt] = sigmaee;
753  probe_ele_sihih[probeIt] = sigma_IetaIeta;
754  probe_ele_dfi[probeIt] = deltaPhiIn;
755  probe_ele_dhi[probeIt] = deltaEtaIn;
756  probe_ele_eop[probeIt] = eOverP;
757  probe_ele_pin[probeIt] = pin;
758  probe_ele_pout[probeIt] = pout;
759  probe_ele_e5x5[probeIt] = e5x5;
760  probe_ele_e2x5[probeIt] = e2x5;
761  probe_ele_e1x5[probeIt] = e1x5;
762 
763  //
764  // HLT filter ------------------------------------------------------
765  //
766  //
767  // low luminosity filters
768  /*************************************************************
769  for (int filterNum=0; filterNum<10; ++filterNum) {
770  int trigger_int_probe = 0;
771 
772  //double hlt_matched_dr = -1.;
773  const int nF(pHLTe29->sizeFilters());
774  //
775  // default (tag) trigger filter
776  //
777  // find how many relevant
778  const int iF = pHLTe29->filterIndex(HLTFilterType_[filterNum]);
779  // loop over these objects to see whether they match
780  const trigger::TriggerObjectCollection& TOC(pHLTe29->getObjects());
781  if (nF != iF) {
782  // find how many objects there are
783  const trigger::Keys& KEYS(pHLTe29->filterKeys(iF));
784  const int nK(KEYS.size());
785  for (int iTrig = 0;iTrig <nK; ++iTrig ) {
786  const trigger::TriggerObject& TO(TOC[KEYS[iTrig]]);
787  //std::cout << "--> filter: "<< HLTFilterType_[filterNum] <<" TO id: " << TO.id() << std::endl;
788  // this is better to be left out: HLT matching is with an HLT object
789  // and we don't care what this object is
790  //if (abs(TO.id())==11 ) { // demand it to be an electron
791  double dr_ele_HLT =
792  reco::deltaR(probeEle->eta(), probeEle->phi(), TO.eta(), TO.phi());
793  if (fabs(dr_ele_HLT) < ProbeHLTObjMaxDR) {++trigger_int_probe;
794  //hlt_matched_dr = dr_ele_HLT;
795  }
796  //}
797  }
798  }
799  //
800  if(trigger_int_probe>0) probe_pass_trigger_cut[probeIt][filterNum] = 1;
801  //probe_hlt_matched_dr[probeIt] = hlt_matched_dr;
802  }
803  // high lumi filters
804  for (int filterNum=10; filterNum<25; ++filterNum) {
805  int trigger_int_probe = 0;
806 
807  //double hlt_matched_dr = -1.;
808  const int nF(pHLTe31->sizeFilters());
809  //
810  // default (tag) trigger filter
811  //
812  // find how many relevant
813  const int iF = pHLTe31->filterIndex(HLTFilterType_[filterNum]);
814  // loop over these objects to see whether they match
815  const trigger::TriggerObjectCollection& TOC(pHLTe31->getObjects());
816  if (nF != iF) {
817  // find how many objects there are
818  const trigger::Keys& KEYS(pHLTe31->filterKeys(iF));
819  const int nK(KEYS.size());
820  for (int iTrig = 0;iTrig <nK; ++iTrig ) {
821  const trigger::TriggerObject& TO(TOC[KEYS[iTrig]]);
822  //if (abs(TO.id())==11 ) { // demand it to be an electron
823  double dr_ele_HLT =
824  reco::deltaR(probeEle->eta(), probeEle->phi(), TO.eta(), TO.phi());
825  if (fabs(dr_ele_HLT) < ProbeHLTObjMaxDR) {++trigger_int_probe;
826  //hlt_matched_dr = dr_ele_HLT;
827  }
828  }
829  }
830 
831  //
832  if(trigger_int_probe>0) probe_pass_trigger_cut[probeIt][filterNum] = 1;
833  //probe_hlt_matched_dr[probeIt] = hlt_matched_dr;
834  }
835  ******************************************/
836  // ------------------------------------------------------------------
837  //
838  // MC Matching ......................................................
839  // check whether these electrons are matched to a MC electron
840  /*
841  int mc_index = 0;
842  int matched = 0; int mother_id = 999;
843  double deta_matched = 999.; double dphi_matched = 999.;
844  double denergy_matched = 999.;
845  for(reco::GenParticleCollection::const_iterator McParticle =
846  McCand->begin(); McParticle != McCand->end(); ++McParticle)
847  {
848  // check only for electrons
849  if(abs(McParticle->pdgId())==11 && McParticle->status()==1) {
850  mc_index++;
851  // check whether it matches a gsf electron
852  double deta = McParticle->eta() - probeEle->eta();
853  double dphi = McParticle->phi() - probeEle->phi();
854  if ( fabs(deta) < MCMatch_Deta_ && fabs(dphi) < MCMatch_Dphi_){
855  ++matched;
856  deta_matched = deta; dphi_matched = dphi;
857  denergy_matched = McParticle->energy() - probeEle->caloEnergy();
858  // find the mother of the MC electron
859  const reco::Candidate *mum;
860  bool mother_finder = true;
861  if (abs(McParticle->mother()->pdgId()) != 11)
862  mum = McParticle->mother();
863  else if (abs(McParticle->mother()->mother()->pdgId())!= 11)
864  mum = McParticle->mother()->mother();
865  else {
866  edm::LogInfo("info") << "Going too far to find the mum";
867  mother_finder = false;
868  }
869  if (mother_finder) {
870  mother_id = mum->pdgId();
871  }
872  }
873  }
874  }
875  probe_mc_matched[probeIt] = matched;
876  probe_mc_matched_deta[probeIt] = deta_matched;
877  probe_mc_matched_dphi[probeIt] = dphi_matched;
878  probe_mc_matched_denergy[probeIt] = denergy_matched;
879  probe_mc_matched_mother[probeIt] = mother_id;
880  */
881  }
882 
883  probe_tree->Fill();
884  ++tree_fills_;
885  delete[] sorted;
886  delete[] et;
887 }
888 
889 // ------------ method called once each job just before starting event loop --
891  //std::cout << "In beginJob()" << std::endl;
892  TString filename_histo = outputFile_;
893  histofile = new TFile(filename_histo, "RECREATE");
894  tree_fills_ = 0;
895 
896  probe_tree = new TTree("probe_tree", "Tree to store probe variables");
897 
898  //probe_tree->Branch("probe_ele_eta",probe_ele_eta_for_tree,"probe_ele_eta[4]/D");
899  //probe_tree->Branch("probe_ele_phi",probe_ele_phi_for_tree,"probe_ele_phi[4]/D");
900  //probe_tree->Branch("probe_ele_et",probe_ele_et_for_tree,"probe_ele_et[4]/D");
901  probe_tree->Branch("probe_ele_tip", probe_ele_tip, "probe_ele_tip[4]/D");
902  probe_tree->Branch("probe_ele_vertex_x", probe_ele_Xvertex_for_tree, "probe_ele_vertex_x[4]/D");
903  probe_tree->Branch("probe_ele_vertex_y", probe_ele_Yvertex_for_tree, "probe_ele_vertex_y[4]/D");
904  probe_tree->Branch("probe_ele_vertex_z", probe_ele_Zvertex_for_tree, "probe_ele_vertex_z[4]/D");
905  probe_tree->Branch("probe_sc_eta", probe_sc_eta_for_tree, "probe_sc_eta[4]/D");
906  probe_tree->Branch("probe_sc_phi", probe_sc_phi_for_tree, "probe_sc_phi[4]/D");
907  probe_tree->Branch("probe_sc_et", probe_sc_et_for_tree, "probe_sc_et[4]/D");
908 
909  // trigger related variables
910  //probe_tree->Branch("probe_trigger_cut",probe_pass_trigger_cut,"probe_trigger_cut[4][25]/I");
911  //probe_tree->Branch("probe_hlt_matched_dr", probe_hlt_matched_dr,"probe_hlt_matched_dr[4]/D");
912  // mc matching to electrons
913  // probe_tree->Branch("probe_mc_matched",probe_mc_matched,"probe_mc_matched[4]/I");
914  //probe_tree->Branch("probe_mc_matched_deta",probe_mc_matched_deta,
915  // "probe_mc_matched_deta[4]/D");
916  //probe_tree->Branch("probe_mc_matched_dphi",probe_mc_matched_dphi,
917  // "probe_mc_matched_dphi[4]/D");
918  //probe_tree->Branch("probe_mc_matched_denergy",probe_mc_matched_denergy,
919  // "probe_mc_matched_denergy[4]/D");
920  //probe_tree->Branch("probe_mc_matched_mother",probe_mc_matched_mother,
921  // "probe_mc_matched_mother[4]/I");
922  //
923  probe_tree->Branch("probe_charge", probe_charge_for_tree, "probe_charge[4]/I");
924  //probe_tree->Branch("probe_sc_fiducial_cut",probe_sc_pass_fiducial_cut,
925  // "probe_sc_fiducial_cut[4]/I");
926 
927  //probe_tree->Branch("probe_classification",
928  // probe_classification_index_for_tree,"probe_classification[4]/I");
929  //
930  // Isolation related variables ........................................
931  //
932  probe_tree->Branch("probe_isolation_value", probe_isolation_value, "probe_isolation_value[4]/D");
933  probe_tree->Branch("probe_ecal_isolation_value", probe_ecal_isolation_value, "probe_ecal_isolation_value[4]/D");
934  probe_tree->Branch("probe_hcal_isolation_value", probe_hcal_isolation_value, "probe_hcal_isolation_value[4]/D");
935  //
936  probe_tree->Branch("probe_iso_user", probe_iso_user, "probe_iso_user[4]/D");
937  probe_tree->Branch("probe_ecal_iso_user", probe_ecal_iso_user, "probe_ecal_iso_user[4]/D");
938  probe_tree->Branch("probe_hcal_iso_user", probe_hcal_iso_user, "probe_hcal_iso_user[4]/D");
939 
940  //......................................................................
941  // Electron ID Related variables .......................................
942  probe_tree->Branch("probe_ele_hoe", probe_ele_hoe, "probe_ele_hoe[4]/D");
943  //probe_tree->Branch("probe_ele_shh",probe_ele_shh, "probe_ele_shh[4]/D");
944  probe_tree->Branch("probe_ele_sihih", probe_ele_sihih, "probe_ele_sihih[4]/D");
945  probe_tree->Branch("probe_ele_dfi", probe_ele_dfi, "probe_ele_dfi[4]/D");
946  probe_tree->Branch("probe_ele_dhi", probe_ele_dhi, "probe_ele_dhi[4]/D");
947  probe_tree->Branch("probe_ele_eop", probe_ele_eop, "probe_ele_eop[4]/D");
948  probe_tree->Branch("probe_ele_pin", probe_ele_pin, "probe_ele_pin[4]/D");
949  probe_tree->Branch("probe_ele_pout", probe_ele_pout, "probe_ele_pout[4]/D");
950  // probe_tree->Branch("probe_ele_e5x5",probe_ele_e5x5, "probe_ele_e5x5[4]/D");
951  //probe_tree->Branch("probe_ele_e2x5",probe_ele_e2x5, "probe_ele_e2x5[4]/D");
952  //probe_tree->Branch("probe_ele_e1x5",probe_ele_e1x5, "probe_ele_e1x5[4]/D");
953 
954  //.......................................................................
955  //
956  // each entry for each trigger path
957  //probe_tree->Branch("event_HLTPath",event_HLTPath,"event_HLTPath[25]/I");
958  //probe_tree->Branch("numberOfHLTFilterObjects", numberOfHLTFilterObjects,
959  // "numberOfHLTFilterObjects[25]/I");
960  //
961  // debugging info:
962  //probe_tree->Branch("elec_number_in_event",&elec_number_in_event,"elec_number_in_event/I");
963  probe_tree->Branch("elec_1_duplicate_removal", &elec_1_duplicate_removal, "elec_1_duplicate_removal/I");
964  //
965 
966  // Missing ET in the event
967  probe_tree->Branch("event_MET", &event_MET, "event_MET/D");
968  probe_tree->Branch("event_MET_phi", &event_MET_phi, "event_MET_phi/D");
969  // probe_tree->Branch("event_MET_sig",&event_MET_sig,"event_MET_sig/D");
970  probe_tree->Branch("event_mcMET", &event_mcMET, "event_mcMET/D");
971  probe_tree->Branch("event_mcMET_phi", &event_mcMET_phi, "event_mcMET_phi/D");
972  //
973  probe_tree->Branch("event_tcMET", &event_tcMET, "event_tcMET/D");
974  probe_tree->Branch("event_tcMET_phi", &event_tcMET_phi, "event_tcMET_phi/D");
975  // probe_tree->Branch("event_tcMET_sig",&event_tcMET_sig,"event_tcMET_sig/D");
976 
977  probe_tree->Branch("event_pfMET", &event_pfMET, "event_pfMET/D");
978  probe_tree->Branch("event_pfMET_phi", &event_pfMET_phi, "event_pfMET_phi/D");
979  // probe_tree->Branch("event_pfMET_sig",&event_pfMET_sig,"event_pfMET_sig/D");
980 
981  // probe_tree->Branch("event_genMET",&event_genMET,"event_genMET/D");
982  // probe_tree->Branch("event_genMET_phi",&event_genMET_phi, "event_genMET_phi/D");
983  // probe_tree->Branch("event_genMET_sig",&event_genMET_sig, "event_genMET_sig/D");
984  //..... type 1 corrected MET
985  probe_tree->Branch("event_t1MET", &event_t1MET, "event_t1MET/D");
986  probe_tree->Branch("event_t1MET_phi", &event_t1MET_phi, "event_t1MET_phi/D");
987  //probe_tree->Branch("event_t1MET_sig",&event_t1MET_sig,"event_t1MET_sig/D");
988 
989  //
990  // some sc related variables
991  probe_tree->Branch("sc_hybrid_et", sc_hybrid_et, "sc_hybrid_et[5]/D");
992  probe_tree->Branch("sc_hybrid_eta", sc_hybrid_eta, "sc_hybrid_eta[5]/D");
993  probe_tree->Branch("sc_hybrid_phi", sc_hybrid_phi, "sc_hybrid_phi[5]/D");
994  //
995  probe_tree->Branch("sc_multi5x5_et", sc_multi5x5_et, "sc_multi5x5_et[5]/D");
996  probe_tree->Branch("sc_multi5x5_eta", sc_multi5x5_eta, "sc_multi5x5_eta[5]/D");
997  probe_tree->Branch("sc_multi5x5_phi", sc_multi5x5_phi, "sc_multi5x5_phi[5]/D");
998  // /////////////////////////////////////////////////////////////////////////
999  // general tracks in the event: keep 20 tracks
1000  probe_tree->Branch("ctf_track_pt", ctf_track_pt, "ctf_track_pt[20]/D");
1001  probe_tree->Branch("ctf_track_eta", ctf_track_eta, "ctf_track_eta[20]/D");
1002  probe_tree->Branch("ctf_track_phi", ctf_track_phi, "ctf_track_phi[20]/D");
1003  probe_tree->Branch("ctf_track_vx", ctf_track_vx, "ctf_track_vx[20]/D");
1004  probe_tree->Branch("ctf_track_vy", ctf_track_vy, "ctf_track_vy[20]/D");
1005  probe_tree->Branch("ctf_track_vz", ctf_track_vz, "ctf_track_vz[20]/D");
1006  probe_tree->Branch("ctf_track_tip", ctf_track_tip, "ctf_track_tip[20]/D");
1007  probe_tree->Branch("ctf_track_tip_bs", ctf_track_tip_bs, "ctf_track_tip_bs[20]/D");
1008  //
1009  probe_tree->Branch("muon_pt", muon_pt, "muon_pt[4]/D");
1010  probe_tree->Branch("muon_eta", muon_eta, "muon_eta[4]/D");
1011  probe_tree->Branch("muon_phi", muon_phi, "muon_phi[4]/D");
1012  probe_tree->Branch("muon_vx", muon_vx, "muon_vx[4]/D");
1013  probe_tree->Branch("muon_vy", muon_vy, "muon_vy[4]/D");
1014  probe_tree->Branch("muon_vz", muon_vz, "muon_vz[4]/D");
1015  probe_tree->Branch("muon_tip", muon_tip, "muon_tip[4]/D");
1016  probe_tree->Branch("muon_tip_bs", muon_tip_bs, "muon_tip_bs[4]/D");
1017 }
1018 
1019 // ------------ method called once each job just after ending the event loop -
1021  //std::cout << "In endJob()" << std::endl;
1022  if (tree_fills_ == 0) {
1023  std::cout << "Empty tree: no output..." << std::endl;
1024  return;
1025  }
1026  //probe_tree->Print();
1027  histofile->Write();
1028  histofile->Close();
1029 }
1030 
1031 //define this as a plug-in
EgHLTOffHistBins_cfi.e1x5
e1x5
Definition: EgHLTOffHistBins_cfi.py:22
GenPurposeSkimmerData::EndcapMaxEta
double EndcapMaxEta
Definition: GenPurposeSkimmerData.h:185
reco::CaloCluster::phi
double phi() const
azimuthal angle of cluster centroid
Definition: CaloCluster.h:184
GenPurposeSkimmerData::probe_ele_e2x5
double probe_ele_e2x5[4]
Definition: GenPurposeSkimmerData.h:163
GenPurposeSkimmerData::muon_tip
double muon_tip[4]
Definition: GenPurposeSkimmerData.h:222
EgHLTOffHistBins_cfi.eOverP
eOverP
Definition: EgHLTOffHistBins_cfi.py:37
GenPurposeSkimmerData::ctf_track_eta
double ctf_track_eta[20]
Definition: GenPurposeSkimmerData.h:216
GenPurposeSkimmerData::endJob
void endJob() override
Definition: GenPurposeSkimmerData.cc:1019
GenPurposeSkimmerData::probe_hcal_isolation_value
double probe_hcal_isolation_value[4]
Definition: GenPurposeSkimmerData.h:144
mps_fire.i
i
Definition: mps_fire.py:355
GenPurposeSkimmerData::HLTCollectionE29Token_
edm::EDGetTokenT< trigger::TriggerEvent > HLTCollectionE29Token_
Definition: GenPurposeSkimmerData.h:95
GenPurposeSkimmerData::HLTTriggerResultsE29_
edm::InputTag HLTTriggerResultsE29_
Definition: GenPurposeSkimmerData.h:98
GenPurposeSkimmerData::muon_eta
double muon_eta[4]
Definition: GenPurposeSkimmerData.h:220
GenPurposeSkimmerData::event_MET_phi
double event_MET_phi
Definition: GenPurposeSkimmerData.h:199
GenPurposeSkimmerData::probe_charge_for_tree
int probe_charge_for_tree[4]
Definition: GenPurposeSkimmerData.h:129
B2GMonitoring_cff.nmuons
nmuons
Definition: B2GMonitoring_cff.py:147
edm::Handle::product
T const * product() const
Definition: Handle.h:70
GenPurposeSkimmerData::probe_ele_shh
double probe_ele_shh[4]
Definition: GenPurposeSkimmerData.h:155
GenPurposeSkimmerData::pfMetCollectionToken_
edm::EDGetTokenT< reco::PFMETCollection > pfMetCollectionToken_
Definition: GenPurposeSkimmerData.h:90
GenPurposeSkimmerData::beginJob
void beginJob() override
Definition: GenPurposeSkimmerData.cc:889
GenPurposeSkimmerData::event_MET_sig
double event_MET_sig
Definition: GenPurposeSkimmerData.h:197
GenPurposeSkimmerData::probe_hcal_iso_user
double probe_hcal_iso_user[4]
Definition: GenPurposeSkimmerData.h:145
GenPurposeSkimmerData::ctfTracksToken_
edm::EDGetTokenT< reco::TrackCollection > ctfTracksToken_
Definition: GenPurposeSkimmerData.h:104
GenPurposeSkimmerData::probe_ele_sihih
double probe_ele_sihih[4]
Definition: GenPurposeSkimmerData.h:156
GenPurposeSkimmerData::probe_ele_Xvertex_for_tree
double probe_ele_Xvertex_for_tree[4]
Definition: GenPurposeSkimmerData.h:125
muon
Definition: MuonCocktails.h:17
GenPurposeSkimmerData::GenPurposeSkimmerData
GenPurposeSkimmerData(const edm::ParameterSet &)
Definition: GenPurposeSkimmerData.cc:54
pat::ElectronCollection
std::vector< Electron > ElectronCollection
Definition: Electron.h:36
reco::SuperCluster
Definition: SuperCluster.h:18
GenPurposeSkimmerData::probe_ele_Zvertex_for_tree
double probe_ele_Zvertex_for_tree[4]
Definition: GenPurposeSkimmerData.h:127
GenPurposeSkimmerData::HLTCollectionE31Token_
edm::EDGetTokenT< trigger::TriggerEvent > HLTCollectionE31Token_
Definition: GenPurposeSkimmerData.h:97
GenPurposeSkimmerData.h
gather_cfg.cout
cout
Definition: gather_cfg.py:144
GenPurposeSkimmerData::probe_ele_e5x5
double probe_ele_e5x5[4]
Definition: GenPurposeSkimmerData.h:162
reco::TrackBase::vx
double vx() const
x coordinate of the reference point on track
Definition: TrackBase.h:626
GenPurposeSkimmerData::probe_isolation_value
double probe_isolation_value[4]
Definition: GenPurposeSkimmerData.h:138
GenPurposeSkimmerData::probe_ecal_iso_user
double probe_ecal_iso_user[4]
Definition: GenPurposeSkimmerData.h:142
GenPurposeSkimmerData::event_pfMET_phi
double event_pfMET_phi
Definition: GenPurposeSkimmerData.h:203
GenPurposeSkimmerData::event_pfMET_sig
double event_pfMET_sig
Definition: GenPurposeSkimmerData.h:201
lowPtGsfElectronCores_cff.ctfTracks
ctfTracks
Definition: lowPtGsfElectronCores_cff.py:6
GenPurposeSkimmerData::muon_vy
double muon_vy[4]
Definition: GenPurposeSkimmerData.h:221
GenPurposeSkimmerData::tree_fills_
int tree_fills_
Definition: GenPurposeSkimmerData.h:81
GenPurposeSkimmerData::BarrelMaxEta
double BarrelMaxEta
Definition: GenPurposeSkimmerData.h:183
edm::ParameterSet::getUntrackedParameter
T getUntrackedParameter(std::string const &, T const &) const
GenPurposeSkimmerData::muon_phi
double muon_phi[4]
Definition: GenPurposeSkimmerData.h:220
GenPurposeSkimmerData::probe_ele_pout
double probe_ele_pout[4]
Definition: GenPurposeSkimmerData.h:161
pat::Muon
Analysis-level muon class.
Definition: Muon.h:51
GenPurposeSkimmerData::event_mcMET_phi
double event_mcMET_phi
Definition: GenPurposeSkimmerData.h:209
EgHLTOfflineSource_cfi.probeEle
probeEle
Definition: EgHLTOfflineSource_cfi.py:76
HLT_2018_cff.muon
muon
Definition: HLT_2018_cff.py:10349
GenPurposeSkimmerData
Definition: GenPurposeSkimmerData.h:68
GenPurposeSkimmerData::elec_1_duplicate_removal
int elec_1_duplicate_removal
Definition: GenPurposeSkimmerData.h:195
edm::Handle< pat::ElectronCollection >
GenPurposeSkimmerData::HLTCollectionE29_
edm::InputTag HLTCollectionE29_
Definition: GenPurposeSkimmerData.h:94
GenPurposeSkimmerData::ElectronCollectionToken_
edm::EDGetTokenT< pat::ElectronCollection > ElectronCollectionToken_
Definition: GenPurposeSkimmerData.h:83
slimmedMETs_cfi.caloMET
caloMET
Definition: slimmedMETs_cfi.py:17
GenPurposeSkimmerData::probe_classification_index_for_tree
int probe_classification_index_for_tree[4]
Definition: GenPurposeSkimmerData.h:147
GenPurposeSkimmerData::multi5x5scToken_
edm::EDGetTokenT< reco::SuperClusterCollection > multi5x5scToken_
Definition: GenPurposeSkimmerData.h:106
edm::Ref
Definition: AssociativeIterator.h:58
GenPurposeSkimmerData::corHybridscToken_
edm::EDGetTokenT< reco::SuperClusterCollection > corHybridscToken_
Definition: GenPurposeSkimmerData.h:105
ntupleEnum.ctf
ctf
Definition: ntupleEnum.py:27
GenPurposeSkimmerData::ProbeHLTObjMaxDR
double ProbeHLTObjMaxDR
Definition: GenPurposeSkimmerData.h:190
GenPurposeSkimmerData::ctf_track_vx
double ctf_track_vx[20]
Definition: GenPurposeSkimmerData.h:217
reco::TrackBase::pt
double pt() const
track transverse momentum
Definition: TrackBase.h:608
reco::SuperClusterCollection
std::vector< SuperCluster > SuperClusterCollection
collection of SuperCluser objectr
Definition: SuperClusterFwd.h:9
GenPurposeSkimmerData::offlineBeamSpotToken_
edm::EDGetTokenT< reco::BeamSpot > offlineBeamSpotToken_
Definition: GenPurposeSkimmerData.h:107
GenPurposeSkimmerData::muon_vx
double muon_vx[4]
Definition: GenPurposeSkimmerData.h:221
GenPurposeSkimmerData::ctf_track_vz
double ctf_track_vz[20]
Definition: GenPurposeSkimmerData.h:217
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
GenPurposeSkimmerData::event_pfMET
double event_pfMET
Definition: GenPurposeSkimmerData.h:201
reco::TrackBase::vz
double vz() const
z coordinate of the reference point on track
Definition: TrackBase.h:632
GenPurposeSkimmerData::elec_number_in_event
int elec_number_in_event
Definition: GenPurposeSkimmerData.h:194
GenPurposeSkimmerData::event_MET
double event_MET
Definition: GenPurposeSkimmerData.h:197
GenPurposeSkimmerData::probe_ele_e1x5
double probe_ele_e1x5[4]
Definition: GenPurposeSkimmerData.h:164
GenPurposeSkimmerData::ctf_track_vy
double ctf_track_vy[20]
Definition: GenPurposeSkimmerData.h:217
GenPurposeSkimmerData::event_t1MET_phi
double event_t1MET_phi
Definition: GenPurposeSkimmerData.h:208
reco::BeamSpot
Definition: BeamSpot.h:21
GenPurposeSkimmerData::HLTTriggerResultsE29Token_
edm::EDGetTokenT< edm::TriggerResults > HLTTriggerResultsE29Token_
Definition: GenPurposeSkimmerData.h:99
reco::Track
Definition: Track.h:27
GenPurposeSkimmerData::probe_sc_et_for_tree
double probe_sc_et_for_tree[4]
Definition: GenPurposeSkimmerData.h:117
GenPurposeSkimmerData::outputFile_
std::string outputFile_
Definition: GenPurposeSkimmerData.h:80
pat::MuonCollection
std::vector< Muon > MuonCollection
Definition: Muon.h:35
edm::Event::getByToken
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:528
GenPurposeSkimmerData::t1MetCollectionToken_
edm::EDGetTokenT< pat::METCollection > t1MetCollectionToken_
Definition: GenPurposeSkimmerData.h:91
reco::BeamSpot::position
const Point & position() const
position
Definition: BeamSpot.h:59
GenPurposeSkimmerData::event_tcMET_sig
double event_tcMET_sig
Definition: GenPurposeSkimmerData.h:200
GenPurposeSkimmerData::event_t1MET
double event_t1MET
Definition: GenPurposeSkimmerData.h:208
GenPurposeSkimmerData::muon_pt
double muon_pt[4]
Definition: GenPurposeSkimmerData.h:220
GenPurposeSkimmerData::probe_sc_eta_for_tree
double probe_sc_eta_for_tree[4]
Definition: GenPurposeSkimmerData.h:115
GenPurposeSkimmerData::event_t1MET_sig
double event_t1MET_sig
Definition: GenPurposeSkimmerData.h:208
reco::TrackBase::phi
double phi() const
azimuthal angle of momentum vector
Definition: TrackBase.h:620
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
GenPurposeSkimmerData::pMuonsToken_
edm::EDGetTokenT< pat::MuonCollection > pMuonsToken_
Definition: GenPurposeSkimmerData.h:108
GenPurposeSkimmerData::muon_tip_bs
double muon_tip_bs[4]
Definition: GenPurposeSkimmerData.h:222
GenPurposeSkimmerData::probe_ele_phi_for_tree
double probe_ele_phi_for_tree[4]
Definition: GenPurposeSkimmerData.h:123
GenPurposeSkimmerData::ctf_track_pt
double ctf_track_pt[20]
Definition: GenPurposeSkimmerData.h:216
GenPurposeSkimmerData::ctf_track_tip
double ctf_track_tip[20]
Definition: GenPurposeSkimmerData.h:218
EgHLTOffHistBins_cfi.hOverE
hOverE
Definition: EgHLTOffHistBins_cfi.py:17
edm::ParameterSet
Definition: ParameterSet.h:36
math::XYZPoint
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
edm::LogError
Definition: MessageLogger.h:183
reco::CaloCluster::eta
double eta() const
pseudorapidity of cluster centroid
Definition: CaloCluster.h:181
GenPurposeSkimmerData::probe_ele_dhi
double probe_ele_dhi[4]
Definition: GenPurposeSkimmerData.h:157
GenPurposeSkimmerData::event_tcMET_phi
double event_tcMET_phi
Definition: GenPurposeSkimmerData.h:200
GenPurposeSkimmerData::tcMetCollectionToken_
edm::EDGetTokenT< reco::METCollection > tcMetCollectionToken_
Definition: GenPurposeSkimmerData.h:89
GenPurposeSkimmerData::~GenPurposeSkimmerData
~GenPurposeSkimmerData() override
Definition: GenPurposeSkimmerData.cc:115
reco::TrackBase::eta
double eta() const
pseudorapidity of momentum vector
Definition: TrackBase.h:623
GenPurposeSkimmerData::probe_ele_Yvertex_for_tree
double probe_ele_Yvertex_for_tree[4]
Definition: GenPurposeSkimmerData.h:126
GenPurposeSkimmerData::probe_ele_tip
double probe_ele_tip[4]
Definition: GenPurposeSkimmerData.h:128
TriggerNames.h
GenPurposeSkimmerData::sc_multi5x5_et
double sc_multi5x5_et[5]
Definition: GenPurposeSkimmerData.h:214
GenPurposeSkimmerData::sc_hybrid_et
double sc_hybrid_et[5]
Definition: GenPurposeSkimmerData.h:213
GenPurposeSkimmerData::probe_ele_et_for_tree
double probe_ele_et_for_tree[4]
Definition: GenPurposeSkimmerData.h:124
pat::Muon::track
reco::TrackRef track() const override
reference to Track reconstructed in the tracker only (reimplemented from reco::Muon)
EgHLTOffHistBins_cfi.et
et
Definition: EgHLTOffHistBins_cfi.py:8
edm::EventSetup
Definition: EventSetup.h:57
GenPurposeSkimmerData::mcMetCollectionToken_
edm::EDGetTokenT< pat::METCollection > mcMetCollectionToken_
Definition: GenPurposeSkimmerData.h:88
GenPurposeSkimmerData::event_tcMET
double event_tcMET
Definition: GenPurposeSkimmerData.h:200
GenPurposeSkimmerData::sc_multi5x5_phi
double sc_multi5x5_phi[5]
Definition: GenPurposeSkimmerData.h:214
GenPurposeSkimmerData::HLTTriggerResultsE31Token_
edm::EDGetTokenT< edm::TriggerResults > HLTTriggerResultsE31Token_
Definition: GenPurposeSkimmerData.h:101
GenPurposeSkimmerData::probe_sc_phi_for_tree
double probe_sc_phi_for_tree[4]
Definition: GenPurposeSkimmerData.h:116
GenPurposeSkimmerData::probe_ele_hoe
double probe_ele_hoe[4]
Definition: GenPurposeSkimmerData.h:154
GenPurposeSkimmerData::probe_ele_eop
double probe_ele_eop[4]
Definition: GenPurposeSkimmerData.h:159
GenPurposeSkimmerData::analyze
void analyze(const edm::Event &, const edm::EventSetup &) override
Definition: GenPurposeSkimmerData.cc:125
GenPurposeSkimmerData::histofile
TFile * histofile
Definition: GenPurposeSkimmerData.h:111
GenPurposeSkimmerData::ctf_track_tip_bs
double ctf_track_tip_bs[20]
Definition: GenPurposeSkimmerData.h:218
reco::TrackBase::vy
double vy() const
y coordinate of the reference point on track
Definition: TrackBase.h:629
GenPurposeSkimmerData::probe_tree
TTree * probe_tree
Definition: GenPurposeSkimmerData.h:110
pwdgSkimBPark_cfi.electrons
electrons
Definition: pwdgSkimBPark_cfi.py:6
GenPurposeSkimmerData::probe_iso_user
double probe_iso_user[4]
Definition: GenPurposeSkimmerData.h:139
GenPurposeSkimmerData::probe_ele_pin
double probe_ele_pin[4]
Definition: GenPurposeSkimmerData.h:160
GenPurposeSkimmerData::ctf_track_phi
double ctf_track_phi[20]
Definition: GenPurposeSkimmerData.h:216
GenPurposeSkimmerData::muon_vz
double muon_vz[4]
Definition: GenPurposeSkimmerData.h:221
MET
GenPurposeSkimmerData::sc_multi5x5_eta
double sc_multi5x5_eta[5]
Definition: GenPurposeSkimmerData.h:214
GenPurposeSkimmerData::probe_ecal_isolation_value
double probe_ecal_isolation_value[4]
Definition: GenPurposeSkimmerData.h:141
AlignmentPI::index
index
Definition: AlignmentPayloadInspectorHelper.h:46
GenPurposeSkimmerData::HLTCollectionE31_
edm::InputTag HLTCollectionE31_
Definition: GenPurposeSkimmerData.h:96
GenPurposeSkimmerData::sc_hybrid_eta
double sc_hybrid_eta[5]
Definition: GenPurposeSkimmerData.h:213
cms::Exception
Definition: Exception.h:70
electronIdCutBasedExt_cfi.deltaEtaIn
deltaEtaIn
Definition: electronIdCutBasedExt_cfi.py:119
GenPurposeSkimmerData::probe_ele_dfi
double probe_ele_dfi[4]
Definition: GenPurposeSkimmerData.h:158
EgHLTOffHistBins_cfi.e2x5
e2x5
Definition: EgHLTOffHistBins_cfi.py:21
GenPurposeSkimmerData::EndcapMinEta
double EndcapMinEta
Definition: GenPurposeSkimmerData.h:184
GenPurposeSkimmerData::sc_hybrid_phi
double sc_hybrid_phi[5]
Definition: GenPurposeSkimmerData.h:213
electronIdCutBasedExt_cfi.deltaPhiIn
deltaPhiIn
Definition: electronIdCutBasedExt_cfi.py:120
GenPurposeSkimmerData::MetCollectionTag_
edm::InputTag MetCollectionTag_
Definition: GenPurposeSkimmerData.h:86
edm::HandleBase::isValid
bool isValid() const
Definition: HandleBase.h:70
edm::Event
Definition: Event.h:73
GenPurposeSkimmerData::event_mcMET_sig
double event_mcMET_sig
Definition: GenPurposeSkimmerData.h:209
GenPurposeSkimmerData::probe_sc_pass_fiducial_cut
int probe_sc_pass_fiducial_cut[4]
Definition: GenPurposeSkimmerData.h:118
GenPurposeSkimmerData::HLTTriggerResultsE31_
edm::InputTag HLTTriggerResultsE31_
Definition: GenPurposeSkimmerData.h:100
reco::TrackBase::dxy
double dxy() const
dxy parameter. (This is the transverse impact parameter w.r.t. to (0,0,0) ONLY if refPoint is close t...
Definition: TrackBase.h:593
GenPurposeSkimmerData::probe_ele_eta_for_tree
double probe_ele_eta_for_tree[4]
Definition: GenPurposeSkimmerData.h:122
reco::CaloCluster::energy
double energy() const
cluster energy
Definition: CaloCluster.h:149
HLTTauDQMOffline_cfi.MET
MET
Definition: HLTTauDQMOffline_cfi.py:70
GenPurposeSkimmerData::MetCollectionToken_
edm::EDGetTokenT< reco::CaloMETCollection > MetCollectionToken_
Definition: GenPurposeSkimmerData.h:87
edm::InputTag
Definition: InputTag.h:15
reco::TrackCollection
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:14
pfMETBenchmark_cfi.pfMET
pfMET
Definition: pfMETBenchmark_cfi.py:3
GenPurposeSkimmerData::event_mcMET
double event_mcMET
Definition: GenPurposeSkimmerData.h:209