CMS 3D CMS Logo

ConeIsolationAlgorithm.cc
Go to the documentation of this file.
2 using namespace std;
3 using namespace reco;
4 using namespace edm;
5 
7 
9 {
10  //FIXME: use unsigned int where needed
11  m_cutPixelHits = parameters.getParameter<int>("MinimumNumberOfPixelHits"); // not used
12  m_cutTotalHits = parameters.getParameter<int>("MinimumNumberOfHits");
13  m_cutMaxTIP = parameters.getParameter<double>("MaximumTransverseImpactParameter");
14  m_cutMinPt = parameters.getParameter<double>("MinimumTransverseMomentum");
15  m_cutMaxChiSquared = parameters.getParameter<double>("MaximumChiSquared");
16  dZ_vertex = parameters.getParameter<double>("DeltaZetTrackVertex"); // to be modified
17  useVertexConstrain_ = parameters.getParameter<bool>("useVertex");
18 
19  matching_cone = parameters.getParameter<double>("MatchingCone");
20  signal_cone = parameters.getParameter<double>("SignalCone");
21  isolation_cone = parameters.getParameter<double>("IsolationCone");
22  pt_min_isolation = parameters.getParameter<double>("MinimumTransverseMomentumInIsolationRing");
23  pt_min_leadTrack = parameters.getParameter<double>("MinimumTransverseMomentumLeadingTrack");
24  n_tracks_isolation_ring = parameters.getParameter<int>("MaximumNumberOfTracksIsolationRing");
25 
26  useFixedSizeCone = parameters.getParameter<bool>("UseFixedSizeCone");
27  variableConeParameter = parameters.getParameter<double>("VariableConeParameter");
28  variableMaxCone = parameters.getParameter<double>("VariableMaxCone");
29  variableMinCone = parameters.getParameter<double>("VariableMinCone");
30 }
31 
33  desc.add<int>("MinimumNumberOfPixelHits",2);
34  desc.add<int>("MinimumNumberOfHits",8);
35  desc.add<double>("MaximumTransverseImpactParameter",0.03);
36  desc.add<double>("MinimumTransverseMomentum",1.0);
37  desc.add<double>("MaximumChiSquared",100.0);
38  desc.add<double>("DeltaZetTrackVertex",0.2);
39  desc.add<bool>("useVertex",true);
40  desc.add<double>("MatchingCone",0.1);
41  desc.add<double>("SignalCone",0.07);
42  desc.add<double>("IsolationCone",0.45);
43  desc.add<double>("MinimumTransverseMomentumInIsolationRing",0.0);
44  desc.add<double>("MinimumTransverseMomentumLeadingTrack",6.0);
45  desc.add<int>("MaximumNumberOfTracksIsolationRing",0);
46  desc.add<bool>("UseFixedSizeCone",true);
47  desc.add<double>("VariableConeParameter",3.5);
48  desc.add<double>("VariableMaxCone",0.17);
49  desc.add<double>("VariableMinCone",0.05);
50 }
51 
52 pair<float,IsolatedTauTagInfo> ConeIsolationAlgorithm::tag(const JetTracksAssociationRef & jetTracks, const Vertex & pv)
53 {
54  const edm::RefVector<reco::TrackCollection> & tracks = jetTracks->second;
56 
57  // Selection of the Tracks
58  float z_pv = pv.z();
59  for(auto && track : tracks)
60  {
61  if ( (track)->pt() > m_cutMinPt &&
62  (track)->normalizedChi2() < m_cutMaxChiSquared &&
63  fabs((track)->dxy(pv.position())) < m_cutMaxTIP &&
64  (track)->recHitsSize() >= (unsigned int) m_cutTotalHits &&
65  (track)->hitPattern().numberOfValidPixelHits() >= m_cutPixelHits )
66  {
67  if (useVertexConstrain_ && z_pv > -500.) {
68  if (fabs((track)->dz(pv.position())) < dZ_vertex)
69  myTracks.push_back(track);
70  } else
71  myTracks.push_back(track);
72  }
73  }
74  IsolatedTauTagInfo resultExtended(myTracks,jetTracks);
75 
76  double r_sigCone = signal_cone;
77  double energyJet = jetTracks->first->energy();
78  if (not useFixedSizeCone) {
79  r_sigCone = std::min(variableMaxCone, variableConeParameter / energyJet);
80  r_sigCone = std::max((double)r_sigCone, variableMinCone);
81  }
82 
83  // now I can use it for the discriminator;
84  math::XYZVector jetDir(jetTracks->first->px(), jetTracks->first->py(), jetTracks->first->pz());
85  float discriminator = 0.;
86  if (useVertexConstrain_) {
87  // In this case all the selected tracks comes from the same vertex, so no need to pass the dZ_vertex requirement to the discriminator
88  const TrackRef myLeadTk = resultExtended.leadingSignalTrack( matching_cone, pt_min_leadTrack);
89  resultExtended.setLeadingTrack(myLeadTk);
90  discriminator = resultExtended.discriminator(jetDir, matching_cone, r_sigCone, isolation_cone, pt_min_leadTrack, pt_min_isolation, n_tracks_isolation_ring);
91  resultExtended.setDiscriminator(discriminator);
92  } else {
93  // In this case the dZ_vertex is used to associate the tracks to the Z_imp parameter of the Leading Track
94  const TrackRef myLeadTk = resultExtended.leadingSignalTrack( matching_cone, pt_min_leadTrack);
95  resultExtended.setLeadingTrack(myLeadTk);
96  discriminator = resultExtended.discriminator(jetDir, matching_cone, r_sigCone, isolation_cone, pt_min_leadTrack, pt_min_isolation, n_tracks_isolation_ring, dZ_vertex);
97  resultExtended.setDiscriminator(discriminator);
98  }
99 
100  return std::make_pair(discriminator, resultExtended);
101 }
T getParameter(std::string const &) const
static void fillDescription(edm::ParameterSetDescription &desc)
const Point & position() const
position
Definition: Vertex.h:109
void setDiscriminator(double discriminator)
def pv(vc)
Definition: MetAnalyzer.py:7
double z() const
z coordinate
Definition: Vertex.h:115
T min(T a, T b)
Definition: MathUtil.h:58
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void setLeadingTrack(const TrackRef)
std::pair< float,reco::IsolatedTauTagInfo > tag(const reco::JetTracksAssociationRef &jetTracks, const reco::Vertex &pv)
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:30
const TrackRef leadingSignalTrack() const
fixed size matrix
HLT enums.
void push_back(value_type const &ref)
Add a Ref<C, T> to the RefVector.
Definition: RefVector.h:69