CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
IsolatedTauTagInfo.cc
Go to the documentation of this file.
4 #include <Math/GenVector/VectorUtil.h>
5 
6 using namespace edm;
7 using namespace reco;
8 
9 const RefVector<TrackCollection> IsolatedTauTagInfo::tracksInCone( const math::XYZVector& myVector, const float size, const float pt_min) const {
10 
12 
13  RefVector<TrackCollection>::const_iterator myTrack = selectedTracks_.begin();
14  for(;myTrack != selectedTracks_.end(); myTrack++)
15  {
16  const math::XYZVector trackMomentum = (*myTrack)->momentum() ;
17  float pt_tk = (*myTrack)->pt();
18  float deltaR = ROOT::Math::VectorUtil::DeltaR(myVector, trackMomentum);
19  if ( deltaR < size && pt_tk > pt_min) tmp.push_back( *myTrack);
20  }
21 
22  // sort(tmp.begin(), tmp.end(), SortByDescendingTrackPt());
23  return tmp;
24 }
25 
26 const RefVector<TrackCollection> IsolatedTauTagInfo::tracksInCone( const math::XYZVector& myVector, const float size, const float pt_min, const float z_pv, const float dz_lt) const {
27 
29 
30  RefVector<TrackCollection>::const_iterator myTrack = selectedTracks_.begin();
31  for(;myTrack != selectedTracks_.end(); myTrack++)
32  {
33  const math::XYZVector trackMomentum = (*myTrack)->momentum() ;
34  float pt_tk = (*myTrack)->pt();
35  float deltaR = ROOT::Math::VectorUtil::DeltaR(myVector, trackMomentum);
36  if ( deltaR < size && pt_tk > pt_min && fabs((*myTrack)->dz() - z_pv) < dz_lt) tmp.push_back( *myTrack);
37  }
38 
39  // sort(tmp.begin(), tmp.end(), SortByDescendingTrackPt());
40  return tmp;
41 }
42 
43 
44 void IsolatedTauTagInfo::setLeadingTrack(const TrackRef leadTk) {
45  leadTrack_ = leadTk ;
46 
47 }
48 
49 const TrackRef IsolatedTauTagInfo::leadingSignalTrack() const {
50  return leadTrack_;
51 }
52 
53 const TrackRef IsolatedTauTagInfo::leadingSignalTrack(const float rm_cone, const float pt_min) const {
54 
55  const Jet & myjet = * jet();
56  math::XYZVector jet3Vec (myjet.px(),myjet.py(),myjet.pz()) ;
57 
58  const RefVector<TrackCollection> sTracks = tracksInCone(jet3Vec, rm_cone, pt_min);
59  TrackRef leadTk;
60  float pt_cut = pt_min;
61  if (sTracks.size() >0)
62  {
64  for(;myTrack!=sTracks.end();myTrack++)
65  {
66  if((*myTrack)->pt() > pt_cut) {
67  leadTk = *myTrack;
68  pt_cut = (*myTrack)->pt();
69  }
70  }
71  }
72  return leadTk;
73 }
74 
75 
76 const TrackRef IsolatedTauTagInfo::leadingSignalTrack(const math::XYZVector& myVector, const float rm_cone, const float pt_min) const {
77  const RefVector<TrackCollection> sTracks = tracksInCone(myVector, rm_cone, pt_min);
78  TrackRef leadTk;
79  float pt_cut = pt_min;
80  if (sTracks.size() >0)
81  {
83  for(;myTrack!=sTracks.end();myTrack++)
84  {
85  if((*myTrack)->pt() > pt_cut) {
86  leadTk = *myTrack;
87  pt_cut = (*myTrack)->pt();
88  }
89  }
90  }
91  return leadTk;
92 }
93 
94 float IsolatedTauTagInfo::discriminator(float m_cone, float sig_cone, float iso_cone, float pt_min_lt, float pt_min_tk, int nTracksIsoRing) const
95 {
96  double myDiscriminator = 0.;
97  const TrackRef leadTk = leadingSignalTrack(m_cone, pt_min_lt);
98 
99  if(!leadTk) {
100  return myDiscriminator;
101  }
102  //if signal cone is greater then the isolation cone and the leadTk exists, the jet is isolated.
103  if(sig_cone > iso_cone) return 1.;
104 
105  math::XYZVector trackMomentum = leadTk->momentum() ;
106  const RefVector<TrackCollection> signalTracks = tracksInCone(trackMomentum, sig_cone, pt_min_tk);
107  const RefVector<TrackCollection> isolationTracks = tracksInCone(trackMomentum, iso_cone, pt_min_tk);
108 
109  if (signalTracks.size() > 0 && (int)(isolationTracks.size() - signalTracks.size()) <= nTracksIsoRing)
110  myDiscriminator=1;
111 
112  return myDiscriminator;
113 }
114 
115 float IsolatedTauTagInfo::discriminator(const math::XYZVector& myVector, float m_cone, float sig_cone, float iso_cone, float pt_min_lt, float pt_min_tk, int nTracksIsoRing) const
116 {
117  double myDiscriminator = 0;
118  //if signal cone is greater then the isolation cone and the leadTk exists, the jet is isolated.
119  if(sig_cone > iso_cone) return 1.;
120 
121 const TrackRef leadTk = leadingSignalTrack(myVector, m_cone, pt_min_lt);
122  if(!leadTk) return myDiscriminator;
123 
124  //if signal cone is greater then the isolation cone and the leadTk exists, the jet is isolated.
125  if(sig_cone > iso_cone) return 1.;
126 
127  math::XYZVector trackMomentum = leadTk->momentum() ;
128  const RefVector<TrackCollection> signalTracks = tracksInCone(trackMomentum, sig_cone, pt_min_tk);
129  const RefVector<TrackCollection> isolationTracks = tracksInCone(trackMomentum, iso_cone, pt_min_tk);
130 
131  if (signalTracks.size() > 0 && (int)(isolationTracks.size() - signalTracks.size()) <= nTracksIsoRing)
132  myDiscriminator=1;
133 
134  return myDiscriminator;
135 }
136 
137 float IsolatedTauTagInfo::discriminator(float m_cone, float sig_cone, float iso_cone, float pt_min_lt, float pt_min_tk, int nTracksIsoRing, float dz_lt) const
138 {
139  double myDiscriminator = 0;
140 
141  const TrackRef leadTk = leadingSignalTrack(m_cone, pt_min_lt);
142 
143  if(!leadTk) {
144  return myDiscriminator;
145  }
146  //if signal cone is greater then the isolation cone and the leadTk exists, the jet is isolated.
147  if(sig_cone > iso_cone) return 1.;
148 
149  math::XYZVector trackMomentum = leadTk->momentum() ;
150  float z_pv = leadTk->dz();
151  const RefVector<TrackCollection> signalTracks = tracksInCone(trackMomentum, sig_cone, pt_min_tk, z_pv, dz_lt);
152  const RefVector<TrackCollection> isolationTracks = tracksInCone(trackMomentum, iso_cone, pt_min_tk, z_pv, dz_lt);
153 
154  if (signalTracks.size() > 0 && (int)(isolationTracks.size() - signalTracks.size()) <= nTracksIsoRing)
155  myDiscriminator=1;
156 
157  return myDiscriminator;
158 }
159 
160 float IsolatedTauTagInfo::discriminator(const math::XYZVector& myVector, float m_cone, float sig_cone, float iso_cone, float pt_min_lt, float pt_min_tk, int nTracksIsoRing, float dz_lt) const
161 {
162  double myDiscriminator = 0;
163 
164 const TrackRef leadTk = leadingSignalTrack(myVector, m_cone, pt_min_lt);
165  if(!leadTk) return myDiscriminator;
166  //if signal cone is greater then the isolation cone and the leadTk exists, the jet is isolated.
167  if(sig_cone > iso_cone) return 1.;
168 
169  math::XYZVector trackMomentum = leadTk->momentum() ;
170  float z_pv = leadTk->dz();
171  const RefVector<TrackCollection> signalTracks = tracksInCone(trackMomentum, sig_cone, pt_min_tk, z_pv, dz_lt);
172  const RefVector<TrackCollection> isolationTracks = tracksInCone(trackMomentum, iso_cone, pt_min_tk, z_pv, dz_lt);
173 
174  if (signalTracks.size() > 0 && (int)(isolationTracks.size() - signalTracks.size()) <= nTracksIsoRing)
175  myDiscriminator=1;
176 
177  return myDiscriminator;
178 }
Base class for all types of Jets.
Definition: Jet.h:20
tuple discriminator
const_iterator end() const
Termination of iteration.
Definition: RefVector.h:255
const_iterator begin() const
Initialize an iterator over the RefVector.
Definition: RefVector.h:250
double deltaR(double eta1, double eta2, double phi1, double phi2)
Definition: TreeUtility.cc:17
virtual double px() const
x coordinate of momentum vector
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:30
virtual double pz() const
z coordinate of momentum vector
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
void push_back(value_type const &ref)
Add a Ref&lt;C, T&gt; to the RefVector.
Definition: RefVector.h:62
size_type size() const
Size of the RefVector.
Definition: RefVector.h:99
tuple size
Write out results.
virtual double py() const
y coordinate of momentum vector