CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SoftPFElectronProducer.cc
Go to the documentation of this file.
11 
12 #include <cmath>
13 
15 {
16  gsfElectronTag_ = conf.getParameter<edm::InputTag>("Electrons");
17 
18  barrelPtCuts_ = conf.getParameter<std::vector<double> >("BarrelPtCuts");
19  barreldRGsfTrackElectronCuts_ = conf.getParameter<std::vector<double> >("BarreldRGsfTrackElectronCuts");
20  barrelEemPinRatioCuts_ = conf.getParameter<std::vector<double> >("BarrelEemPinRatioCuts");
21  barrelMVACuts_ = conf.getParameter<std::vector<double> >("BarrelMVACuts");
22  barrelInversedRFirstLastHitCuts_ = conf.getParameter<std::vector<double> >("BarrelInversedRFirstLastHitCuts");
23  barrelRadiusFirstHitCuts_ = conf.getParameter<std::vector<double> >("BarrelRadiusFirstHitCuts");
24  barrelZFirstHitCuts_ = conf.getParameter<std::vector<double> >("BarrelZFirstHitCuts");
25 
26  forwardPtCuts_ = conf.getParameter<std::vector<double> >("ForwardPtCuts");
27  forwardInverseFBremCuts_ = conf.getParameter<std::vector<double> >("ForwardInverseFBremCuts");
28  forwarddRGsfTrackElectronCuts_ = conf.getParameter<std::vector<double> >("ForwarddRGsfTrackElectronCuts");
29  forwardRadiusFirstHitCuts_ = conf.getParameter<std::vector<double> >("ForwardRadiusFirstHitCuts");
30  forwardZFirstHitCuts_ = conf.getParameter<std::vector<double> >("ForwardZFirstHitCuts");
31  forwardMVACuts_ = conf.getParameter<std::vector<double> >("ForwardMVACuts");
32 
33  produces<reco::GsfElectronCollection>();
34 }
35 
37 {
38 
39 }
40 
42 {
43  std::auto_ptr<reco::GsfElectronCollection> output(new reco::GsfElectronCollection);
44 
46  iEvent.getByLabel(gsfElectronTag_, gsfCandidates);
47 
48  // this will throw if the input collection is not present
49  const reco::GsfElectronCollection & gsfCollection = *(gsfCandidates.product());
50 
51  for (unsigned int i = 0 ; i != gsfCollection.size(); ++i)
52  {
53  if (not isClean(gsfCollection[i]))
54  continue;
55 
56  output->push_back(gsfCollection[i]);
57  }
58 
59  iEvent.put(output);
60 }
61 
63 {
64  const double ecalEnergy = gsfcandidate.superCluster()->energy();
65  const double pIn = gsfcandidate.gsfTrack()->innerMomentum().R();
66  const double pOut = gsfcandidate.gsfTrack()->outerMomentum().R();
67  const double EemPinRatio = (ecalEnergy - pIn)/(ecalEnergy + pIn);
68  //const double EemPoutRatio = (ecalEnergy - pOut)/(ecalEnergy + pOut);
69  const double pt = gsfcandidate.pt();
70  const double fbrem = (pIn - pOut)/pIn;
71  const double dRGsfTrackElectron = deltaR(gsfcandidate.gsfTrack()->eta(), gsfcandidate.gsfTrack()->phi(), gsfcandidate.eta(), gsfcandidate.phi());
72  const double mva = gsfcandidate.mva();
73  const math::XYZPoint firstHit = gsfcandidate.gsfTrack()->innerPosition();
74  const math::XYZPoint lastHit = gsfcandidate.gsfTrack()->outerPosition();
75  const double inversedRFirstLastHit = 1.0/deltaR(firstHit.eta(), firstHit.phi(), lastHit.eta(), lastHit.phi());
76  const double radiusFirstHit = firstHit.Rho();
77  const double zFirstHit = firstHit.Z();
78  /*std::cout << "This particle has " << pt << " "
79  << 1.0/fbrem << " "
80  << dRGsfTrackElectron << " "
81  << EemPoutRatio << " "
82  << mva << std::endl;*/
83  if(fabs(gsfcandidate.eta()) < 1.5)
84  {
85  // use barrel cuts
86  if( barrelPtCuts_.front() > pt || barrelPtCuts_.back() < pt) return false;
87  if( barreldRGsfTrackElectronCuts_.front() > dRGsfTrackElectron || barreldRGsfTrackElectronCuts_.back() < dRGsfTrackElectron) return false;
88  if( barrelEemPinRatioCuts_.front() > EemPinRatio || barrelEemPinRatioCuts_.back() < EemPinRatio) return false;
89  if( barrelMVACuts_.front() > mva || barrelMVACuts_.back() < mva) return false;
90  if( barrelInversedRFirstLastHitCuts_.front() > inversedRFirstLastHit || barrelInversedRFirstLastHitCuts_.back() < inversedRFirstLastHit) return false;
91  if( barrelRadiusFirstHitCuts_.front() > radiusFirstHit || barrelRadiusFirstHitCuts_.back() < radiusFirstHit) return false;
92  if( barrelZFirstHitCuts_.front() > zFirstHit || barrelZFirstHitCuts_.back() < zFirstHit) return false;
93  }
94  else
95  {
96  // use endcap cuts
97  if( forwardPtCuts_.front() > pt || forwardPtCuts_.back() < pt) return false;
98  if( forwardInverseFBremCuts_.front() > 1.0/fbrem || forwardInverseFBremCuts_.back() < 1.0/fbrem) return false;
99  if( forwarddRGsfTrackElectronCuts_.front() > dRGsfTrackElectron || forwarddRGsfTrackElectronCuts_.back() < dRGsfTrackElectron) return false;
100  if( forwardRadiusFirstHitCuts_.front() > radiusFirstHit || forwardRadiusFirstHitCuts_.back() < radiusFirstHit) return false;
101  if( forwardZFirstHitCuts_.front() > zFirstHit || forwardZFirstHitCuts_.back() < zFirstHit) return false;
102  if( forwardMVACuts_.front() > mva || forwardMVACuts_.back() < mva) return false;
103  }
104 
105  return true;
106 }
107 
std::vector< double > forwardRadiusFirstHitCuts_
T getParameter(std::string const &) const
int i
Definition: DBlmapReader.cc:9
std::vector< double > forwardPtCuts_
bool isClean(const reco::GsfElectron &gsfcandidate)
virtual void produce(edm::Event &iEvent, const edm::EventSetup &iSetup)
std::vector< double > forwardInverseFBremCuts_
SuperClusterRef superCluster() const
reference to a SuperCluster
Definition: GsfElectron.h:168
std::vector< double > barrelEemPinRatioCuts_
std::vector< double > forwarddRGsfTrackElectronCuts_
std::vector< GsfElectron > GsfElectronCollection
collection of GsfElectron objects
virtual double eta() const
momentum pseudorapidity
std::vector< double > barrelInversedRFirstLastHitCuts_
float mva() const
Definition: GsfElectron.h:548
int iEvent
Definition: GenABIO.cc:243
std::vector< double > barrelRadiusFirstHitCuts_
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:84
std::vector< double > barrelPtCuts_
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:355
tuple conf
Definition: dbtoconf.py:185
double deltaR(double eta1, double eta2, double phi1, double phi2)
Definition: TreeUtility.cc:17
GsfTrackRef gsfTrack() const
reference to a GsfTrack
Definition: GsfElectron.h:169
virtual double pt() const
transverse momentum
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:13
T const * product() const
Definition: Handle.h:74
std::vector< double > barrelZFirstHitCuts_
std::vector< double > barrelMVACuts_
virtual double phi() const
momentum azimuthal angle
std::vector< double > barreldRGsfTrackElectronCuts_
std::vector< double > forwardMVACuts_
SoftPFElectronProducer(const edm::ParameterSet &conf)
std::vector< double > forwardZFirstHitCuts_