CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
RegressionEnergyPatElectronProducer.cc
Go to the documentation of this file.
2 
17 
18 #include <iostream>
19 
20 using namespace edm ;
21 using namespace std ;
22 using namespace reco ;
23 using namespace pat ;
24 
25 
27 {
28 
29  inputElectrons_ = cfg.getParameter<edm::InputTag>("inputElectronsTag");
30  inputCollectionType_ = cfg.getParameter<uint32_t>("inputCollectionType");
31  rhoInputTag_ = cfg.getParameter<edm::InputTag>("rhoCollection");
32  verticesInputTag_ = cfg.getParameter<edm::InputTag>("vertexCollection");
33  energyRegressionType_ = cfg.getParameter<uint32_t>("energyRegressionType");
34  regressionInputFile_ = cfg.getParameter<std::string>("regressionInputFile");
35  recHitCollectionEB_ = cfg.getParameter<edm::InputTag>("recHitCollectionEB");
36  recHitCollectionEE_ = cfg.getParameter<edm::InputTag>("recHitCollectionEE");
37  nameEnergyReg_ = cfg.getParameter<std::string>("nameEnergyReg");
38  nameEnergyErrorReg_ = cfg.getParameter<std::string>("nameEnergyErrorReg");
39  debug_ = cfg.getUntrackedParameter<bool>("debug");
40  useReducedRecHits_ = cfg.getParameter<bool>("useRecHitCollections");
41  produceValueMaps_ = cfg.getParameter<bool>("produceValueMaps");
42 
43  // if Gsf Electrons; useReducedRecHits should be used)
44  if(inputCollectionType_ == 0 && !useReducedRecHits_) {
45  throw cms::Exception("InconsistentParameters") << " *** Inconsistent configuration : if you read GsfElectrons, you should set useRecHitCollections to true and provide the correcte values to recHitCollectionEB and recHitCollectionEE (most probably reducedEcalRecHitsEB and reducedEcalRecHitsEE )" << std::endl;
46  }
47 
48  if(inputCollectionType_ == 0 && !produceValueMaps_) {
49  std::cout << " You are running on GsfElectrons and the producer is not configured to produce ValueMaps with the results. In that case, it does not nothing !! " << std::endl;
50  }
51 
52  if (inputCollectionType_ == 0) {
53  // do nothing
54  } else if (inputCollectionType_ == 1) {
55  produces<ElectronCollection>();
56  } else {
57  throw cms::Exception("InconsistentParameters") << " inputCollectionType should be either 0 (GsfElectrons) or 1 (pat::Electrons) " << std::endl;
58  }
59 
60 
61  //set regression type
63  if (energyRegressionType_ == 1) type = ElectronEnergyRegressionEvaluate::kNoTrkVar;
64  else if (energyRegressionType_ == 2) type = ElectronEnergyRegressionEvaluate::kWithSubCluVar;
65  else if (energyRegressionType_ == 3) type = ElectronEnergyRegressionEvaluate::kWithTrkVar;
66 
67  //load weights and initialize
68  regressionEvaluator_ = new ElectronEnergyRegressionEvaluate();
69  regressionEvaluator_->initialize(regressionInputFile_.c_str(),type);
70 
71  if(produceValueMaps_) {
72  produces<edm::ValueMap<double> >(nameEnergyReg_);
73  produces<edm::ValueMap<double> >(nameEnergyErrorReg_);
74  }
75 
76 
77  //****************************************************************************************
78  //set up regression calculator
79  //****************************************************************************************
80 
81  geomInitialized_ = false;
82 
83  std::cout << " Finished initialization " << std::endl;
84 
85 }
86 
88 {
89  delete regressionEvaluator_;
90 
91 }
92 
94 {
95 
96  assert(regressionEvaluator_->isInitialized());
97  if (!geomInitialized_) {
98  edm::ESHandle<CaloTopology> theCaloTopology;
99  setup.get<CaloTopologyRecord>().get(theCaloTopology);
100  ecalTopology_ = & (*theCaloTopology);
101 
102  edm::ESHandle<CaloGeometry> theCaloGeometry;
103  setup.get<CaloGeometryRecord>().get(theCaloGeometry);
104  caloGeometry_ = & (*theCaloGeometry);
105  geomInitialized_ = true;
106  }
107 
108 
109  //**************************************************************************
110  //Get Number of Vertices
111  //**************************************************************************
112  Handle<reco::VertexCollection> hVertexProduct;
113  event.getByLabel(verticesInputTag_,hVertexProduct);
114  const reco::VertexCollection inVertices = *(hVertexProduct.product());
115 
116  // loop through all vertices
117  Int_t nvertices = 0;
118  for (reco::VertexCollection::const_iterator inV = inVertices.begin();
119  inV != inVertices.end(); ++inV) {
120 
121  //pass these vertex cuts
122  if (inV->ndof() >= 4
123  && inV->position().Rho() <= 2.0
124  && fabs(inV->z()) <= 24.0
125  ) {
126  nvertices++;
127  }
128  }
129 
130  //**************************************************************************
131  //Get Rho
132  //**************************************************************************
133  double rho = 0;
134  Handle<double> hRhoKt6PFJets;
135  event.getByLabel(rhoInputTag_, hRhoKt6PFJets);
136  rho = (*hRhoKt6PFJets);
137 
138  //*************************************************************************
139  // Get the RecHits
140  //************************************************************************
141 
144  if (useReducedRecHits_) {
145  event.getByLabel( recHitCollectionEB_, pEBRecHits );
146  event.getByLabel( recHitCollectionEE_, pEERecHits );
147  }
148 
149  edm::Handle<GsfElectronCollection> gsfCollectionH ;
150  edm::Handle<ElectronCollection> patCollectionH;
151  if ( inputCollectionType_ == 0 ) {
152  event.getByLabel ( inputElectrons_,gsfCollectionH ) ;
153  nElectrons_ = gsfCollectionH->size();
154  }
155  if ( inputCollectionType_ == 1 ) {
156  event.getByLabel ( inputElectrons_,patCollectionH ) ;
157  nElectrons_ = patCollectionH->size();
158  }
159 
160  // prepare the two even if only one is used
161  std::auto_ptr<ElectronCollection> patElectrons( new ElectronCollection ) ;
162 
163  // Fillers for ValueMaps:
164  std::auto_ptr<edm::ValueMap<double> > regrEnergyMap(new edm::ValueMap<double>() );
165  edm::ValueMap<double>::Filler energyFiller(*regrEnergyMap);
166 
167  std::auto_ptr<edm::ValueMap<double> > regrEnergyErrorMap(new edm::ValueMap<double>() );
168  edm::ValueMap<double>::Filler energyErrorFiller(*regrEnergyErrorMap);
169 
170 
171  // Reserve the vectors with outputs
172  std::vector<double> energyValues;
173  std::vector<double> energyErrorValues;
174  energyValues.reserve(nElectrons_);
175  energyErrorValues.reserve(nElectrons_);
176 
177 
178  for(unsigned iele=0; iele < nElectrons_ ; ++iele) {
179 
180  const GsfElectron * ele = ( inputCollectionType_ == 0 ) ? &(*gsfCollectionH)[iele] : &(*patCollectionH)[iele] ;
181  if (debug_) {
182  std::cout << "***********************************************************************\n";
183  std::cout << "Run Lumi Event: " << event.id().run() << " " << event.luminosityBlock() << " " << event.id().event() << "\n";
184  std::cout << "Pat Electron : " << ele->pt() << " " << ele->eta() << " " << ele->phi() << "\n";
185  }
186 
187  pat::Electron * myPatElectron = (inputCollectionType_ == 0 ) ? 0 : new pat::Electron((*patCollectionH)[iele]);
188  // Get RecHit Collection
189  const EcalRecHitCollection * recHits=0;
190  if (useReducedRecHits_) {
191  if(ele->isEB()) {
192  recHits = pEBRecHits.product();
193  } else
194  recHits = pEERecHits.product();
195  } else {
196  recHits = (*patCollectionH)[iele].recHits();
197  }
198 
199  SuperClusterHelper * mySCHelper = 0 ;
200  if ( inputCollectionType_ == 0 ) {
201  mySCHelper = new SuperClusterHelper(&(*ele),recHits,ecalTopology_,caloGeometry_);
202  } else if ( inputCollectionType_ == 1) {
203  mySCHelper = new SuperClusterHelper( &(*patCollectionH)[iele], recHits,ecalTopology_,caloGeometry_);
204  }
205 
206  // apply regression energy
207  Double_t FinalMomentum = 0;
208  Double_t FinalMomentumError = 0;
209  Double_t RegressionMomentum = 0;
210  Double_t RegressionMomentumError = 0;
211 
212  if (energyRegressionType_ == 1) {
213 
214  RegressionMomentum = regressionEvaluator_->regressionValueNoTrkVar( mySCHelper->rawEnergy(),
215  mySCHelper->eta(),
216  mySCHelper->phi(),
217  mySCHelper->r9(),
218  mySCHelper->etaWidth(),
219  mySCHelper->phiWidth(),
220  mySCHelper->clustersSize(),
221  mySCHelper->hadronicOverEm(),
222  rho,
223  nvertices,
224  mySCHelper->seedEta(),
225  mySCHelper->seedPhi(),
226  mySCHelper->seedEnergy(),
227  mySCHelper->e3x3(),
228  mySCHelper->e5x5(),
229  mySCHelper->sigmaIetaIeta(),
230  mySCHelper->spp(),
231  mySCHelper->sep(),
232  mySCHelper->eMax(),
233  mySCHelper->e2nd(),
234  mySCHelper->eTop(),
235  mySCHelper->eBottom(),
236  mySCHelper->eLeft(),
237  mySCHelper->eRight(),
238  mySCHelper->e2x5Max(),
239  mySCHelper->e2x5Top(),
240  mySCHelper->e2x5Bottom(),
241  mySCHelper->e2x5Left(),
242  mySCHelper->e2x5Right(),
243  mySCHelper->ietaSeed(),
244  mySCHelper->iphiSeed(),
245  mySCHelper->etaCrySeed(),
246  mySCHelper->phiCrySeed(),
247  mySCHelper->preshowerEnergyOverRaw(),
248  debug_);
249  RegressionMomentumError = regressionEvaluator_->regressionUncertaintyNoTrkVar(
250  mySCHelper->rawEnergy(),
251  mySCHelper->eta(),
252  mySCHelper->phi(),
253  mySCHelper->r9(),
254  mySCHelper->etaWidth(),
255  mySCHelper->phiWidth(),
256  mySCHelper->clustersSize(),
257  mySCHelper->hadronicOverEm(),
258  rho,
259  nvertices,
260  mySCHelper->seedEta(),
261  mySCHelper->seedPhi(),
262  mySCHelper->seedEnergy(),
263  mySCHelper->e3x3(),
264  mySCHelper->e5x5(),
265  mySCHelper->sigmaIetaIeta(),
266  mySCHelper->spp(),
267  mySCHelper->sep(),
268  mySCHelper->eMax(),
269  mySCHelper->e2nd(),
270  mySCHelper->eTop(),
271  mySCHelper->eBottom(),
272  mySCHelper->eLeft(),
273  mySCHelper->eRight(),
274  mySCHelper->e2x5Max(),
275  mySCHelper->e2x5Top(),
276  mySCHelper->e2x5Bottom(),
277  mySCHelper->e2x5Left(),
278  mySCHelper->e2x5Right(),
279  mySCHelper->ietaSeed(),
280  mySCHelper->iphiSeed(),
281  mySCHelper->etaCrySeed(),
282  mySCHelper->phiCrySeed(),
283  mySCHelper->preshowerEnergyOverRaw(),
284  debug_);
285 
286  // PAT method
287  if(inputCollectionType_ == 1) {
288  myPatElectron->setEcalRegressionEnergy(RegressionMomentum, RegressionMomentumError);
289  }
290  energyValues.push_back(RegressionMomentum);
291  energyErrorValues.push_back(RegressionMomentumError);
292 
293 
294  } else if (energyRegressionType_ == 2) {// ECAL regression with subcluster information
295  RegressionMomentum = regressionEvaluator_->regressionValueWithSubClusters(
296  mySCHelper->rawEnergy(),
297  mySCHelper->eta(),
298  mySCHelper->phi(),
299  mySCHelper->r9(),
300  mySCHelper->etaWidth(),
301  mySCHelper->phiWidth(),
302  mySCHelper->clustersSize(),
303  mySCHelper->hadronicOverEm(),
304  rho,
305  nvertices,
306  mySCHelper->seedEta(),
307  mySCHelper->seedPhi(),
308  mySCHelper->seedEnergy(),
309  mySCHelper->e3x3(),
310  mySCHelper->e5x5(),
311  mySCHelper->sigmaIetaIeta(),
312  mySCHelper->spp(),
313  mySCHelper->sep(),
314  mySCHelper->eMax(),
315  mySCHelper->e2nd(),
316  mySCHelper->eTop(),
317  mySCHelper->eBottom(),
318  mySCHelper->eLeft(),
319  mySCHelper->eRight(),
320  mySCHelper->e2x5Max(),
321  mySCHelper->e2x5Top(),
322  mySCHelper->e2x5Bottom(),
323  mySCHelper->e2x5Left(),
324  mySCHelper->e2x5Right(),
325  mySCHelper->ietaSeed(),
326  mySCHelper->iphiSeed(),
327  mySCHelper->etaCrySeed(),
328  mySCHelper->phiCrySeed(),
329  mySCHelper->preshowerEnergyOverRaw(),
330  ele->ecalDrivenSeed(),
331  ele->isEBEtaGap(),
332  ele->isEBPhiGap(),
333  ele->isEEDeeGap(),
334  mySCHelper->eSubClusters(),
335  mySCHelper->subClusterEnergy(1),
336  mySCHelper->subClusterEta(1),
337  mySCHelper->subClusterPhi(1),
338  mySCHelper->subClusterEmax(1),
339  mySCHelper->subClusterE3x3(1),
340  mySCHelper->subClusterEnergy(2),
341  mySCHelper->subClusterEta(2),
342  mySCHelper->subClusterPhi(2),
343  mySCHelper->subClusterEmax(2),
344  mySCHelper->subClusterE3x3(2),
345  mySCHelper->subClusterEnergy(3),
346  mySCHelper->subClusterEta(3),
347  mySCHelper->subClusterPhi(3),
348  mySCHelper->subClusterEmax(3),
349  mySCHelper->subClusterE3x3(3),
350  mySCHelper->nPreshowerClusters(),
351  mySCHelper->eESClusters(),
352  mySCHelper->esClusterEnergy(0),
353  mySCHelper->esClusterEta(0),
354  mySCHelper->esClusterPhi(0),
355  mySCHelper->esClusterEnergy(1),
356  mySCHelper->esClusterEta(1),
357  mySCHelper->esClusterPhi(1),
358  mySCHelper->esClusterEnergy(2),
359  mySCHelper->esClusterEta(2),
360  mySCHelper->esClusterPhi(2),
361  ele->isEB(),
362  debug_);
363  RegressionMomentumError = regressionEvaluator_->regressionUncertaintyWithSubClusters(
364  mySCHelper->rawEnergy(),
365  mySCHelper->eta(),
366  mySCHelper->phi(),
367  mySCHelper->r9(),
368  mySCHelper->etaWidth(),
369  mySCHelper->phiWidth(),
370  mySCHelper->clustersSize(),
371  mySCHelper->hadronicOverEm(),
372  rho,
373  nvertices,
374  mySCHelper->seedEta(),
375  mySCHelper->seedPhi(),
376  mySCHelper->seedEnergy(),
377  mySCHelper->e3x3(),
378  mySCHelper->e5x5(),
379  mySCHelper->sigmaIetaIeta(),
380  mySCHelper->spp(),
381  mySCHelper->sep(),
382  mySCHelper->eMax(),
383  mySCHelper->e2nd(),
384  mySCHelper->eTop(),
385  mySCHelper->eBottom(),
386  mySCHelper->eLeft(),
387  mySCHelper->eRight(),
388  mySCHelper->e2x5Max(),
389  mySCHelper->e2x5Top(),
390  mySCHelper->e2x5Bottom(),
391  mySCHelper->e2x5Left(),
392  mySCHelper->e2x5Right(),
393  mySCHelper->ietaSeed(),
394  mySCHelper->iphiSeed(),
395  mySCHelper->etaCrySeed(),
396  mySCHelper->phiCrySeed(),
397  mySCHelper->preshowerEnergyOverRaw(),
398  ele->ecalDrivenSeed(),
399  ele->isEBEtaGap(),
400  ele->isEBPhiGap(),
401  ele->isEEDeeGap(),
402  mySCHelper->eSubClusters(),
403  mySCHelper->subClusterEnergy(1),
404  mySCHelper->subClusterEta(1),
405  mySCHelper->subClusterPhi(1),
406  mySCHelper->subClusterEmax(1),
407  mySCHelper->subClusterE3x3(1),
408  mySCHelper->subClusterEnergy(2),
409  mySCHelper->subClusterEta(2),
410  mySCHelper->subClusterPhi(2),
411  mySCHelper->subClusterEmax(2),
412  mySCHelper->subClusterE3x3(2),
413  mySCHelper->subClusterEnergy(3),
414  mySCHelper->subClusterEta(3),
415  mySCHelper->subClusterPhi(3),
416  mySCHelper->subClusterEmax(3),
417  mySCHelper->subClusterE3x3(3),
418  mySCHelper->nPreshowerClusters(),
419  mySCHelper->eESClusters(),
420  mySCHelper->esClusterEnergy(0),
421  mySCHelper->esClusterEta(0),
422  mySCHelper->esClusterPhi(0),
423  mySCHelper->esClusterEnergy(1),
424  mySCHelper->esClusterEta(1),
425  mySCHelper->esClusterPhi(1),
426  mySCHelper->esClusterEnergy(2),
427  mySCHelper->esClusterEta(2),
428  mySCHelper->esClusterPhi(2),
429  ele->isEB(),
430  debug_);
431 
432  // PAT method
433  if(inputCollectionType_ == 1) {
434  myPatElectron->setEcalRegressionEnergy(RegressionMomentum, RegressionMomentumError);
435  }
436  energyValues.push_back(RegressionMomentum);
437  energyErrorValues.push_back(RegressionMomentumError);
438 
439 
440  }
441 
442  else if (energyRegressionType_ == 3) {
443  RegressionMomentum = regressionEvaluator_->regressionValueWithTrkVar(ele->p(),
444  mySCHelper->rawEnergy(),
445  mySCHelper->eta(),
446  mySCHelper->phi(),
447  mySCHelper->etaWidth(),
448  mySCHelper->phiWidth(),
449  mySCHelper->clustersSize(),
450  mySCHelper->hadronicOverEm(),
451  mySCHelper->r9(),
452  rho,
453  nvertices,
454  mySCHelper->seedEta(),
455  mySCHelper->seedPhi(),
456  mySCHelper->seedEnergy(),
457  mySCHelper->e3x3(),
458  mySCHelper->e5x5(),
459  mySCHelper->sigmaIetaIeta(),
460  mySCHelper->spp(),
461  mySCHelper->sep(),
462  mySCHelper->eMax(),
463  mySCHelper->e2nd(),
464  mySCHelper->eTop(),
465  mySCHelper->eBottom(),
466  mySCHelper->eLeft(),
467  mySCHelper->eRight(),
468  mySCHelper->e2x5Max(),
469  mySCHelper->e2x5Top(),
470  mySCHelper->e2x5Bottom(),
471  mySCHelper->e2x5Left(),
472  mySCHelper->e2x5Right(),
473  ele->pt(),
474  ele->trackMomentumAtVtx().R(),
475  ele->fbrem(),
476  ele->charge(),
477  ele->eSuperClusterOverP(),
478  mySCHelper->ietaSeed(),
479  mySCHelper->iphiSeed(),
480  mySCHelper->etaCrySeed(),
481  mySCHelper->phiCrySeed(),
482  mySCHelper->preshowerEnergy(),
483  debug_);
484  RegressionMomentumError = regressionEvaluator_->regressionUncertaintyWithTrkVar(
485  ele->p(),
486  mySCHelper->rawEnergy(),
487  mySCHelper->eta(),
488  mySCHelper->phi(),
489  mySCHelper->etaWidth(),
490  mySCHelper->phiWidth(),
491  mySCHelper->clustersSize(),
492  mySCHelper->hadronicOverEm(),
493  mySCHelper->r9(),
494  rho,
495  nvertices,
496  mySCHelper->seedEta(),
497  mySCHelper->seedPhi(),
498  mySCHelper->seedEnergy(),
499  mySCHelper->e3x3(),
500  mySCHelper->e5x5(),
501  mySCHelper->sigmaIetaIeta(),
502  mySCHelper->spp(),
503  mySCHelper->sep(),
504  mySCHelper->eMax(),
505  mySCHelper->e2nd(),
506  mySCHelper->eTop(),
507  mySCHelper->eBottom(),
508  mySCHelper->eLeft(),
509  mySCHelper->eRight(),
510  mySCHelper->e2x5Max(),
511  mySCHelper->e2x5Top(),
512  mySCHelper->e2x5Bottom(),
513  mySCHelper->e2x5Left(),
514  mySCHelper->e2x5Right(),
515  ele->pt(),
516  ele->trackMomentumAtVtx().R(),
517  ele->fbrem(),
518  ele->charge(),
519  ele->eSuperClusterOverP(),
520  mySCHelper->ietaSeed(),
521  mySCHelper->iphiSeed(),
522  mySCHelper->etaCrySeed(),
523  mySCHelper->phiCrySeed(),
524  mySCHelper->preshowerEnergy(),
525  debug_);
526  FinalMomentum = RegressionMomentum;
527  FinalMomentumError = RegressionMomentumError;
528  math::XYZTLorentzVector oldMomentum = ele->p4();
530  ( oldMomentum.x()*FinalMomentum/oldMomentum.t(),
531  oldMomentum.y()*FinalMomentum/oldMomentum.t(),
532  oldMomentum.z()*FinalMomentum/oldMomentum.t(),
533  FinalMomentum ) ;
534 
535  myPatElectron->correctEcalEnergy(RegressionMomentum, RegressionMomentumError);
536  myPatElectron->correctMomentum(newMomentum,ele->trackMomentumError(),FinalMomentumError);
537 
538  energyValues.push_back(RegressionMomentum);
539  energyErrorValues.push_back(RegressionMomentumError);
540  } else {
541  cout << "Error: RegressionType = " << energyRegressionType_ << " is not supported.\n";
542  }
543 
544  if(inputCollectionType_ == 1) {
545  patElectrons->push_back(*myPatElectron);
546  }
547  if (myPatElectron) delete myPatElectron;
548  if (mySCHelper) delete mySCHelper;
549  } // loop on electrons
550 
551  // Write the new collection in the event (AOD case)
552  if(inputCollectionType_ == 1) {
553  event.put(patElectrons) ;
554  }
555 
556  // now AOD case: write ValueMaps
557  if (produceValueMaps_) {
558 
559  if ( inputCollectionType_ ==0 ) {
560  energyFiller.insert( gsfCollectionH, energyValues.begin(), energyValues.end() );
561  energyErrorFiller.insert( gsfCollectionH, energyErrorValues.begin(), energyErrorValues.end() );
562  } else if ( inputCollectionType_ ==1 ) {
563  energyFiller.insert( patCollectionH, energyValues.begin(), energyValues.end() );
564  energyErrorFiller.insert( patCollectionH, energyErrorValues.begin(), energyErrorValues.end() );
565  }
566 
567  energyFiller.fill();
568  energyErrorFiller.fill();
569  event.put(regrEnergyMap,nameEnergyReg_);
570  event.put(regrEnergyErrorMap,nameEnergyErrorReg_);
571  }
572 
573 }
574 
575 
type
Definition: HCALResponse.h:22
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
void correctEcalEnergy(float newEnergy, float newEnergyError)
Definition: GsfElectron.h:729
virtual double p() const
magnitude of momentum vector
virtual void produce(edm::Event &, const edm::EventSetup &)
float trackMomentumError() const
Definition: GsfElectron.h:715
float eESClusters() const
float e2x5Max() const
bool isEBEtaGap() const
Definition: GsfElectron.h:335
const LorentzVector & p4(P4Kind kind) const
Definition: GsfElectron.cc:204
float eSuperClusterOverP() const
Definition: GsfElectron.h:229
float esClusterEnergy(unsigned i) const
float sigmaIetaIeta() const
float subClusterE3x3(unsigned i) const
void correctMomentum(const LorentzVector &p4, float trackMomentumError, float p4Error)
Definition: GsfElectron.h:734
math::XYZVectorF trackMomentumAtVtx() const
Definition: GsfElectron.h:272
Definition: DDAxes.h:10
void insert(const H &h, I begin, I end)
Definition: ValueMap.h:53
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
float fbrem() const
Definition: GsfElectron.h:639
DEFINE_FWK_MODULE(HiMixingModule)
float eSubClusters() const
float e2x5Right() const
bool isEEDeeGap() const
Definition: GsfElectron.h:338
virtual double eta() const
momentum pseudorapidity
float eBottom() const
bool isEB() const
Definition: GsfElectron.h:330
float e2x5Bottom() const
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:30
float esClusterEta(unsigned i) const
float etaWidth() const
float rawEnergy() const
float subClusterEnergy(unsigned i) const
float eLeft() const
float preshowerEnergyOverRaw() const
virtual int charge() const
electric charge
float eRight() const
float e2x5Top() const
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
std::vector< Electron > ElectronCollection
collectin of Electron objects
Definition: ElectronFwd.h:9
float preshowerEnergy() const
float hadronicOverEm() const
float phiWidth() const
float subClusterEmax(unsigned i) const
float esClusterPhi(unsigned i) const
float subClusterPhi(unsigned i) const
virtual double pt() const
transverse momentum
const T & get() const
Definition: EventSetup.h:55
float seedEta() const
Analysis-level electron class.
Definition: Electron.h:52
T const * product() const
Definition: Handle.h:74
bool isEBPhiGap() const
Definition: GsfElectron.h:336
float nPreshowerClusters() const
tuple cout
Definition: gather_cfg.py:121
float seedPhi() const
float clustersSize() const
float subClusterEta(unsigned i) const
float seedEnergy() const
virtual double phi() const
momentum azimuthal angle
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
float e2x5Left() const
void setEcalRegressionEnergy(double val, double err)
set regression1
Definition: Electron.h:215
bool ecalDrivenSeed() const
Definition: GsfElectron.h:172