CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
TrackIPTagInfo.cc
Go to the documentation of this file.
1 #include <cmath>
2 #include <map>
3 
4 #include <Math/VectorUtil.h>
5 
13 
14 using namespace reco;
15 using namespace std;
16 
17 static double etaRel(const math::XYZVector &dir, const math::XYZVector &track)
18 {
19  double momPar = dir.Dot(track);
20  double energy = sqrt(track.Mag2() + ROOT::Math::Square(0.13957));
21  return 0.5 * log((energy + momPar) / (energy - momPar));
22 }
23 
26 
27  math::XYZVector jetDir = jet()->momentum().Unit();
28  bool havePv = primaryVertex().isNonnull();
29  GlobalPoint pv;
30  if (havePv)
31  pv = GlobalPoint(primaryVertex()->x(),
32  primaryVertex()->y(),
33  primaryVertex()->z());
34 
35  std::vector<size_t> indexes = sortedIndexes(); // use default criterium
36  for(std::vector<size_t>::const_iterator it = indexes.begin();
37  it != indexes.end(); ++it)
38  {
39  using namespace ROOT::Math;
40  TrackRef track = m_selectedTracks[*it];
41  const TrackIPData *data = &m_data[*it];
42  math::XYZVector trackMom = track->momentum();
43  double trackMag = std::sqrt(trackMom.Mag2());
44 
45  vars.insert(btau::trackMomentum, trackMag, true);
46  vars.insert(btau::trackEta, trackMom.Eta(), true);
47  vars.insert(btau::trackEtaRel, etaRel(jetDir, trackMom), true);
48  vars.insert(btau::trackPtRel, VectorUtil::Perp(trackMom, jetDir), true);
49  vars.insert(btau::trackPPar, jetDir.Dot(trackMom), true);
50  vars.insert(btau::trackDeltaR, VectorUtil::DeltaR(trackMom, jetDir), true);
51  vars.insert(btau::trackPtRatio, VectorUtil::Perp(trackMom, jetDir) / trackMag, true);
52  vars.insert(btau::trackPParRatio, jetDir.Dot(trackMom) / trackMag, true);
53  vars.insert(btau::trackSip3dVal, data->ip3d.value(), true);
54  vars.insert(btau::trackSip3dSig, data->ip3d.significance(), true);
55  vars.insert(btau::trackSip2dVal, data->ip2d.value(), true);
56  vars.insert(btau::trackSip2dSig, data->ip2d.significance(), true);
57  vars.insert(btau::trackDecayLenVal, havePv ? (data->closestToJetAxis - pv).mag() : -1.0, true);
58  vars.insert(btau::trackJetDistVal, data->distanceToJetAxis.value(), true);
59  vars.insert(btau::trackJetDistSig, data->distanceToJetAxis.significance(), true);
60  vars.insert(btau::trackGhostTrackDistVal, data->distanceToGhostTrack.value(), true);
61  vars.insert(btau::trackGhostTrackDistSig, data->distanceToGhostTrack.significance(), true);
62  vars.insert(btau::trackGhostTrackWeight, data->ghostTrackWeight, true);
63  vars.insert(btau::trackChi2, track->normalizedChi2(), true);
64  vars.insert(btau::trackNTotalHits, track->hitPattern().numberOfValidHits(), true);
65  vars.insert(btau::trackNPixelHits, track->hitPattern().numberOfValidPixelHits(), true);
66  }
67  vars.finalize();
68  return vars;
69 }
70 
71 TrackRefVector TrackIPTagInfo::sortedTracks(std::vector<size_t> indexes) const
72 {
73  TrackRefVector tr;
74  for(size_t i =0 ; i < indexes.size(); i++) tr.push_back(m_selectedTracks[indexes[i]]);
75  return tr;
76 }
77 
79 {
80  float cut=-1e99;
81  if((mode == Prob3D || mode == Prob2D)) cut=1e99;
82  return sortedIndexesWithCut(cut,mode);
83 }
84 
85 std::vector<size_t> TrackIPTagInfo::sortedIndexesWithCut(float cut, SortCriteria mode) const
86 {
87  multimap<float,size_t> sortedIdx;
88  size_t nSelectedTracks = m_selectedTracks.size();
89  std::vector<size_t> result;
90 
91 //check if probabilities are available
92  if((mode == Prob3D || mode == Prob2D) && ! hasProbabilities())
93  {
94  return result;
95  }
96 
97  for(size_t i=0;i<nSelectedTracks;i++)
98  {
99  float sortingKey;
100  switch(mode)
101  {
102  case IP3DSig:
103  sortingKey=m_data[i].ip3d.significance();
104  break;
105  case IP2DSig:
106  sortingKey=m_data[i].ip2d.significance();
107  break;
108  case IP3DValue:
109  sortingKey=m_data[i].ip3d.value();
110  break;
111  case IP2DValue:
112  sortingKey=m_data[i].ip2d.value();
113  break;
114  case Prob3D:
115  sortingKey=m_prob3d[i];
116  break;
117  case Prob2D:
118  sortingKey=m_prob2d[i];
119  break;
120 
121  default:
122  sortingKey=i;
123  }
124  sortedIdx.insert(std::pair<float,size_t>(sortingKey,i));
125  }
126 
127 //Descending:
128 if(mode == IP3DSig || mode == IP2DSig ||mode == IP3DValue || mode == IP2DValue)
129  {
130  for(std::multimap<float,size_t>::reverse_iterator it = sortedIdx.rbegin(); it!=sortedIdx.rend(); it++)
131  if(it->first >= cut) result.push_back(it->second);
132  } else
133 //Ascending:
134  {
135  for(std::multimap<float,size_t>::iterator it = sortedIdx.begin(); it!=sortedIdx.end(); it++)
136  if(it->first <= cut) result.push_back(it->second);
137  }
138  return result;
139 }
int i
Definition: DBlmapReader.cc:9
virtual TaggingVariableList taggingVariables(void) const
returns a description of the extended informations in a TaggingVariableList
std::vector< size_t > sortedIndexesWithCut(float cut, SortCriteria mode=IP3DSig) const
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
double double double z
T sqrt(T t)
Definition: SSEVec.h:46
tuple result
Definition: query.py:137
std::vector< size_t > sortedIndexes(SortCriteria mode=IP3DSig) const
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:31
static double etaRel(const math::XYZVector &dir, const math::XYZVector &track)
reco::TrackRefVector sortedTracks(std::vector< size_t > indexes) const
ROOT::Math::PositionVector3D< ROOT::Math::Cartesian3D< float >, ROOT::Math::GlobalCoordinateSystemTag > GlobalPoint
point in global coordinate system
Definition: Point3D.h:18
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
void push_back(value_type const &ref)
Add a Ref&lt;C, T&gt; to the RefVector.
Definition: RefVector.h:64
dbl *** dir
Definition: mlp_gen.cc:35
x
Definition: VDTMath.h:216
void insert(const TaggingVariable &variable, bool delayed=false)