CMS 3D CMS Logo

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