CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SoftPFElectronTagInfoProducer.cc
Go to the documentation of this file.
18 
19 // Transient Track and IP
25 #include <cmath>
27 
29  PVerTag_(conf.getParameter<edm::InputTag>("primaryVertex") ),
30  PFJet_ (conf.getParameter<edm::InputTag>("jets") )
31 {
32  produces<reco::SoftLeptonTagInfoCollection>();
33 }
34 
36 {
37 
38 }
39 
41 {
43 
45  iSetup.get<TransientTrackRecord>().get("TransientTrackBuilder", builder);
47 
49  iEvent.getByLabel(PVerTag_, PVCollection);
50 // if(!PVCollection.isValid() || PVCollection->empty()) return;
51  if(!PVCollection.isValid()) return;
52  if(!PVCollection->empty()){
53  goodvertex = true;
54  vertex=&PVCollection->front();
55  }else goodvertex = false;
56 
58  iEvent.getByLabel("offlineBeamSpot", bsHandle);
59  const reco::BeamSpot &beamspot = *bsHandle.product();
60 
62  iEvent.getByLabel("allConversions", hConversions);
63 
64  std::vector<edm::RefToBase<reco::Jet> > jets;
65 
67  iEvent.getByLabel(PFJet_, inputJets);
68  unsigned int size = inputJets->size();
69  jets.resize(size);
70  for (unsigned int i = 0; i < size; i++){
71  jets[i] = inputJets->refAt(i);
73  const std::vector<reco::CandidatePtr> JetConst = jets[i]->getJetConstituents();
74  for (unsigned ic=0;ic<JetConst.size();++ic){
75  const reco::PFCandidate* pfc = dynamic_cast <const reco::PFCandidate*> (JetConst[ic].get());
76  if(JetConst[ic].get()!=NULL && pfc==NULL) continue;
77  if(pfc->particleId()==2){
78  bool matchConv=ConversionTools::hasMatchedConversion(*((*pfc).gsfElectronRef().get()),hConversions,beamspot.position());
79  if(!isElecClean(iEvent,pfc) || matchConv)continue;
80  reco::TransientTrack transientTrack=transientTrackBuilder->build(pfc->gsfTrackRef().get());
81  float sip3d= IPTools::signedImpactParameter3D(transientTrack, GlobalVector(jets[i]->px(), jets[i]->py(), jets[i]->pz()), *vertex).second.significance();
82  if(fabs(sip3d<200)) Elec.push_back(*(pfc));
83  }
84  }
85 // std::cout<< "push_back the softleptontaginfo..." << std::endl;
86  reco::SoftLeptonTagInfo result_electrons = tagElec( jets[i], Elec );
87  ElecTI->push_back(result_electrons);
88 
89  }
90  std::auto_ptr<reco::SoftLeptonTagInfoCollection> ElecTagInfoCollection(ElecTI);
91  iEvent.put(ElecTagInfoCollection);
92 }
93 
94 
98 ) {
100  info.setJetRef( jet );
101  if(goodvertex){
102  for(reco::PFCandidateCollection::const_iterator lepton = leptons.begin(); lepton != leptons.end(); ++lepton) {
103  reco::TrackBaseRef trkRef(lepton->gsfTrackRef());
104  reco::SoftLeptonProperties properties=fillElecProperties(*lepton, *jet);
105  info.insert(trkRef, properties );
106  }
107  }
108  return info;
109 }
110 
114  prop.sip2d = IPTools::signedTransverseImpactParameter(transientTrack, GlobalVector(jet.px(), jet.py(), jet.pz()), *vertex).second.significance();
115  prop.sip3d = IPTools::signedImpactParameter3D(transientTrack, GlobalVector(jet.px(), jet.py(), jet.pz()), *vertex).second.significance();
116  prop.deltaR = deltaR(jet, elec);
117  prop.ptRel = ( (jet.p4().Vect()-elec.gsfElectronRef().get()->p4().Vect()).Cross(elec.gsfElectronRef().get()->p4().Vect()) ).R() / jet.p4().Vect().R(); // | (Pj-Pu) X Pu | / | Pj |
118  float mag = elec.gsfElectronRef().get()->p4().Vect().R()*jet.p4().Vect().R();
119  float dot = elec.gsfElectronRef().get()->p4().Dot(jet.p4());
120  prop.etaRel = -log((mag - dot)/(mag + dot)) / 2.;
121  prop.ratio = elec.gsfElectronRef().get()->p() / jet.energy();
122  prop.ratioRel = elec.gsfElectronRef().get()->p4().Dot(jet.p4()) / jet.p4().Vect().Mag2();
123  return prop;
124 }
125 
126 
128 {
129  const reco::HitPattern& hitPattern = PFcandidate->gsfTrackRef().get()->hitPattern();
130  //check that the first hit is a pixel hit
131  uint32_t hit = hitPattern.getHitPattern(0);
132  bool hitCondition= !(hitPattern.validHitFilter(hit) && ( (hitPattern.pixelBarrelHitFilter(hit) && hitPattern.getLayer(hit) < 3) || hitPattern.pixelEndcapHitFilter(hit)));
133  if(hitCondition) return false;
134  // if(PFcandidate->mva_e_pi()<0.6)return false;
135 
136  return true;
137 }
138 
int i
Definition: DBlmapReader.cc:9
static uint32_t getLayer(uint32_t pattern)
Definition: HitPattern.h:485
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
reco::SoftLeptonTagInfo tagElec(const edm::RefToBase< reco::Jet > &, reco::PFCandidateCollection &)
Base class for all types of Jets.
Definition: Jet.h:21
std::pair< bool, Measurement1D > signedTransverseImpactParameter(const reco::TransientTrack &track, const GlobalVector &direction, const reco::Vertex &vertex)
Definition: IPTools.cc:50
reco::TransientTrack build(const reco::Track *p) const
std::pair< bool, Measurement1D > signedImpactParameter3D(const reco::TransientTrack &track, const GlobalVector &direction, const reco::Vertex &vertex)
Definition: IPTools.cc:71
#define NULL
Definition: scimark2.h:8
void setJetRef(const edm::Ref< T > &jetRef)
Definition: JetTagInfo.h:25
reco::SoftLeptonProperties fillElecProperties(const reco::PFCandidate &, const reco::Jet &)
SoftPFElectronTagInfoProducer(const edm::ParameterSet &conf)
std::vector< SoftLeptonTagInfo > SoftLeptonTagInfoCollection
void insert(const edm::RefToBase< reco::Track > &lepton, const SoftLeptonProperties &properties)
virtual void produce(edm::Event &, const edm::EventSetup &)
virtual double energy() const
energy
int iEvent
Definition: GenABIO.cc:243
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:85
vector< PseudoJet > jets
reco::GsfElectronRef gsfElectronRef() const
return a reference to the corresponding GsfElectron if any
Definition: PFCandidate.cc:479
static bool validHitFilter(uint32_t pattern)
Definition: HitPattern.h:529
bool isValid() const
Definition: HandleBase.h:76
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:356
static bool hasMatchedConversion(const reco::GsfElectron &ele, const edm::Handle< reco::ConversionCollection > &convCol, const math::XYZPoint &beamspot, bool allowCkfMatch=true, float lxyMin=2.0, float probMin=1e-6, unsigned int nHitsBeforeVtxMax=0)
tuple conf
Definition: dbtoconf.py:185
double deltaR(double eta1, double eta2, double phi1, double phi2)
Definition: TreeUtility.cc:17
std::vector< reco::PFCandidate > PFCandidateCollection
collection of PFCandidates
bool isElecClean(edm::Event &, const reco::PFCandidate *)
virtual double px() const
x coordinate of momentum vector
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:62
T const * product() const
Definition: Handle.h:74
virtual double pz() const
z coordinate of momentum vector
Particle reconstructed by the particle flow algorithm.
Definition: PFCandidate.h:33
T dot(const Basic3DVector &v) const
Scalar product, or &quot;dot&quot; product, with a vector of same type.
reco::GsfTrackRef gsfTrackRef() const
Definition: PFCandidate.cc:376
static bool pixelEndcapHitFilter(uint32_t pattern)
Definition: HitPattern.h:399
const Point & position() const
position
Definition: BeamSpot.h:63
T const * get() const
Returns C++ pointer to the item.
Definition: Ref.h:242
uint32_t getHitPattern(int position) const
Definition: HitPattern.cc:144
virtual const LorentzVector & p4() const
four-momentum Lorentz vector
tuple size
Write out results.
virtual double py() const
y coordinate of momentum vector
static bool pixelBarrelHitFilter(uint32_t pattern)
Definition: HitPattern.h:392
const TransientTrackBuilder * transientTrackBuilder
Global3DVector GlobalVector
Definition: GlobalVector.h:10