CMS 3D CMS Logo

EgammaTrackExtractor.cc
Go to the documentation of this file.
23 
24 #include <string>
25 #include <vector>
26 
27 namespace egammaisolation {
28 
30  public:
34 
35  ~EgammaTrackExtractor() override {}
36 
37  void fillVetos(const edm::Event& ev, const edm::EventSetup& evSetup, const reco::TrackCollection& track) override {}
38 
40  const edm::EventSetup& evSetup,
41  const reco::Track& track) const;
42 
44  const edm::EventSetup& evSetup,
45  const reco::Track& muon) const override {
46  edm::LogWarning("EgammaIsolationAlgos|EgammaTrackExtractor")
47  << "This Function is not implemented, bad IsoDeposit Returned";
49  }
50 
52  const edm::EventSetup& evSetup,
53  const reco::Candidate& muon) const override;
54 
55  private:
57 
58  private:
59  // Parameter set
62  double minCandEt_;
63  double theDiff_r;
64  double theDiff_z;
65  double theDR_Max;
66  double theDR_Veto;
71  unsigned int theNHits_Min;
72  double theChi2Ndof_Max;
73  double theChi2Prob_Min;
74  double thePt_Min;
75  std::vector<double> paramForIsolBarrel_;
76  std::vector<double> paramForIsolEndcap_;
78  int dzOption;
79  };
80 
81 } // namespace egammaisolation
82 
86 
87 using namespace edm;
88 using namespace std;
89 using namespace reco;
90 using namespace egammaisolation;
92 
93 EgammaTrackExtractor::EgammaTrackExtractor(const ParameterSet& par, edm::ConsumesCollector& iC)
94  : theTrackCollectionToken(iC.consumes<View<Track> >(par.getParameter<edm::InputTag>("inputTrackCollection"))),
95  theDepositLabel(par.getUntrackedParameter<std::string>("DepositLabel")),
96  theDiff_r(par.getParameter<double>("Diff_r")),
97  theDiff_z(par.getParameter<double>("Diff_z")),
98  theDR_Max(par.getParameter<double>("DR_Max")),
99  theDR_Veto(par.getParameter<double>("DR_Veto")),
100  theBeamlineOption(par.getParameter<std::string>("BeamlineOption")),
101  theBeamSpotToken(iC.mayConsume<reco::BeamSpot>(par.getParameter<edm::InputTag>("BeamSpotLabel"))),
102  theNHits_Min(par.getParameter<unsigned int>("NHits_Min")),
103  theChi2Ndof_Max(par.getParameter<double>("Chi2Ndof_Max")),
104  theChi2Prob_Min(par.getParameter<double>("Chi2Prob_Min")),
105  thePt_Min(par.getParameter<double>("Pt_Min")),
106  dzOptionString(par.getParameter<std::string>("dzOption")) {
107  if (!dzOptionString.compare("dz"))
109  else if (!dzOptionString.compare("vz"))
111  else if (!dzOptionString.compare("bs"))
113  else if (!dzOptionString.compare("vtx"))
115  else
117 }
118 
120  const edm::EventSetup& evSetup,
121  const reco::Track& track) const {
123  return reco::IsoDeposit::Vetos(1, veto(dir));
124 }
125 
128  result.vetoDir = dir;
129  result.dR = theDR_Veto;
130  return result;
131 }
132 
134  const EventSetup& eventSetup,
135  const Candidate& candTk) const {
136  static const std::string metname = "EgammaIsolationAlgos|EgammaTrackExtractor";
137 
139  double dzCut = 0;
140 
141  reco::TrackBase::Point beamPoint(0, 0, 0);
142  if (theBeamlineOption == "BeamSpotFromEvent") {
143  //pick beamSpot
144  auto beamSpotH = event.getHandle(theBeamSpotToken);
145 
146  if (beamSpotH.isValid()) {
147  beamPoint = beamSpotH->position();
148  }
149  }
150 
151  if (candTk.isElectron()) {
152  const reco::GsfElectron* elec = dynamic_cast<const reco::GsfElectron*>(&candTk);
153  candDir = reco::isodeposit::Direction(elec->gsfTrack()->eta(), elec->gsfTrack()->phi());
154  } else {
155  candDir = reco::isodeposit::Direction(candTk.eta(), candTk.phi());
156  }
157 
158  IsoDeposit deposit(candDir);
159  deposit.setVeto(veto(candDir));
160  deposit.addCandEnergy(candTk.et());
161 
162  for (auto const& itrTr : event.get(theTrackCollectionToken)) {
163  if (candDir.deltaR(reco::isodeposit::Direction(itrTr.eta(), itrTr.phi())) > theDR_Max)
164  continue;
165 
166  if (itrTr.normalizedChi2() > theChi2Ndof_Max)
167  continue;
168 
169  if (itrTr.pt() < thePt_Min)
170  continue;
171 
172  if (theChi2Prob_Min > 0 && ChiSquaredProbability(itrTr.chi2(), itrTr.ndof()) < theChi2Prob_Min)
173  continue;
174 
175  if (theNHits_Min > 0 && itrTr.numberOfValidHits() < theNHits_Min)
176  continue;
177 
178  if (candTk.isElectron()) {
179  const reco::GsfElectron* elec = dynamic_cast<const reco::GsfElectron*>(&candTk);
180  switch (dzOption) {
182  dzCut = elec->gsfTrack()->dz() - itrTr.dz();
183  break;
185  dzCut = elec->gsfTrack()->vz() - itrTr.vz();
186  break;
188  dzCut = elec->gsfTrack()->dz(beamPoint) - itrTr.dz(beamPoint);
189  break;
191  dzCut = itrTr.dz(elec->gsfTrack()->vertex());
192  break;
193  default:
194  dzCut = elec->gsfTrack()->vz() - itrTr.vz();
195  break;
196  }
197  } else {
198  switch (dzOption) {
200  dzCut = itrTr.dz() - candTk.vertex().z();
201  break;
203  dzCut = itrTr.vz() - candTk.vertex().z();
204  break;
206  dzCut = itrTr.dz(beamPoint) - candTk.vertex().z();
207  break;
209  dzCut = itrTr.dz(candTk.vertex());
210  break;
211  default:
212  dzCut = itrTr.vz() - candTk.vertex().z();
213  break;
214  }
215  }
216 
217  if (fabs(dzCut) > theDiff_z)
218  continue;
219 
220  if (fabs(itrTr.dxy(beamPoint)) > theDiff_r)
221  continue;
222 
223  deposit.addDeposit(reco::isodeposit::Direction(itrTr.eta(), itrTr.phi()), itrTr.pt());
224  }
225 
226  return deposit;
227 }
double theDR_Veto
Maximum cone angle for deposits.
edm::EDGetTokenT< edm::View< reco::Track > > theTrackCollectionToken
std::string dzOptionString
Endcap requirements to determine if isolated for selective filling.
virtual reco::IsoDeposit::Vetos vetos(const edm::Event &ev, const edm::EventSetup &evSetup, const reco::Track &track) const
void setVeto(const Veto &aVeto)
Set veto.
Definition: IsoDeposit.h:82
virtual double et() const =0
transverse energy
const std::string metname
void fillVetos(const edm::Event &ev, const edm::EventSetup &evSetup, const reco::TrackCollection &track) override
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:14
double theChi2Prob_Min
trk.normalizedChi2 < theChi2Ndof_Max
void addDeposit(double dr, double deposit)
Add deposit (ie. transverse energy or pT)
Definition: IsoDeposit.cc:19
GsfTrackRef gsfTrack() const override
reference to a GsfTrack
Definition: GsfElectron.h:156
EgammaTrackExtractor(const edm::ParameterSet &par, edm::ConsumesCollector &&iC)
double thePt_Min
ChiSquaredProbability(trk.chi2,trk.ndof) > theChi2Prob_Min.
edm::InputTag barrelEcalHitsTag_
"NONE", "BeamSpotFromEvent"
std::string theDepositLabel
Track Collection Label.
void addCandEnergy(double et)
Set energy or pT attached to cand trajectory.
Definition: IsoDeposit.h:132
float ChiSquaredProbability(double chiSquared, double nrDOF)
virtual const Point & vertex() const =0
vertex position
math::XYZPoint Point
point in the space
Definition: TrackBase.h:80
reco::IsoDeposit::Veto veto(const reco::IsoDeposit::Direction &dir) const
reco::IsoDeposit IsoDeposit
Definition: Isolation.h:7
double theDiff_z
transverse distance to vertex
std::vector< double > paramForIsolBarrel_
min track pt to include into iso deposit
unsigned int theNHits_Min
BeamSpot name.
std::vector< Veto > Vetos
Definition: IsoDeposit.h:65
reco::IsoDeposit deposit(const edm::Event &ev, const edm::EventSetup &evSetup, const reco::Track &muon) const override
fixed size matrix
HLT enums.
edm::EDGetTokenT< reco::BeamSpot > theBeamSpotToken
double deltaR(const Direction &dir2) const
#define DEFINE_EDM_PLUGIN(factory, type, name)
Log< level::Warning, false > LogWarning
double theChi2Ndof_Max
trk.numberOfValidHits >= theNHits_Min
virtual bool isElectron() const =0
std::string theBeamlineOption
Veto cone angle.
Definition: event.py:1
virtual double phi() const =0
momentum azimuthal angle
virtual double eta() const =0
momentum pseudorapidity
std::vector< double > paramForIsolEndcap_
Barrel requirements to determine if isolated for selective filling.