CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
CombinedSVComputer.cc
Go to the documentation of this file.
2 
3 using namespace reco;
4 
5 
7 {
8  edm::ParameterSet psetCopy(pset);
9  psetCopy.addParameter<double>("jetDeltaRMax", 99999.0);
10  return psetCopy;
11 }
12 
14  trackFlip(params.getParameter<bool>("trackFlip")),
15  vertexFlip(params.getParameter<bool>("vertexFlip")),
16  charmCut(params.getParameter<double>("charmCut")),
17  sortCriterium(TrackSorting::getCriterium(params.getParameter<std::string>("trackSort"))),
18  trackSelector(params.getParameter<edm::ParameterSet>("trackSelection")),
19  trackNoDeltaRSelector(dropDeltaR(params.getParameter<edm::ParameterSet>("trackSelection"))),
20  trackPseudoSelector(params.getParameter<edm::ParameterSet>("trackPseudoSelection")),
21  pseudoMultiplicityMin(params.getParameter<unsigned int>("pseudoMultiplicityMin")),
22  trackMultiplicityMin(params.getParameter<unsigned int>("trackMultiplicityMin")),
23  minTrackWeight(params.getParameter<double>("minimumTrackWeight")),
24  useTrackWeights(params.getParameter<bool>("useTrackWeights")),
25  vertexMassCorrection(params.getParameter<bool>("correctVertexMass")),
26  pseudoVertexV0Filter(params.getParameter<edm::ParameterSet>("pseudoVertexV0Filter")),
27  trackPairV0Filter(params.getParameter<edm::ParameterSet>("trackPairV0Filter"))
28 {
30 
31  // define used TaggingVariables
34 
52 
64 
65  // sort TaggingVariables for faster lookup later
67 }
68 
69 inline double CombinedSVComputer::flipValue(double value, bool vertex) const
70 {
71  return (vertex ? vertexFlip : trackFlip) ? -value : value;
72 }
73 
75  int size, bool vertex) const
76 {
77  IterationRange range;
78  if (vertex ? vertexFlip : trackFlip) {
79  range.begin = size - 1;
80  range.end = -1;
81  range.increment = -1;
82  } else {
83  range.begin = 0;
84  range.end = size;
85  range.increment = +1;
86  }
87 
88  return range;
89 }
90 
91 const btag::TrackIPData &
94  const reco::Jet &jet,
95  const GlobalPoint &pv) const
96 {
98  trackIPTagInfo.selectedTracks();
99  const std::vector<btag::TrackIPData> &ipData =
100  trackIPTagInfo.impactParameterData();
101  std::vector<std::size_t> indices = trackIPTagInfo.sortedIndexes(sort);
102 
103  IterationRange range = flipIterate(indices.size(), false);
104  TrackKinematics kin;
105  range_for(i, range) {
106  std::size_t idx = indices[i];
107  const btag::TrackIPData &data = ipData[idx];
108  const Track &track = *tracks[idx]->bestTrack();
109 
110  if (!trackNoDeltaRSelector(track, data, jet, pv))
111  continue;
112 
113  kin.add(track);
114  if (kin.vectorSum().M() > charmCut)
115  return data;
116  }
117 
118  static const btag::TrackIPData dummy = {
119  GlobalPoint(),
120  GlobalPoint(),
121  Measurement1D(-1.0, 1.0),
122  Measurement1D(-1.0, 1.0),
123  Measurement1D(-1.0, 1.0),
124  Measurement1D(-1.0, 1.0),
125  0.
126  };
127  return dummy;
128 }
129 
130 const btag::TrackIPData &
131 CombinedSVComputer::threshTrack(const TrackIPTagInfo &trackIPTagInfo,
132  const btag::SortCriteria sort,
133  const reco::Jet &jet,
134  const GlobalPoint &pv) const
135 {
136  const edm::RefVector<TrackCollection> &tracks =
137  trackIPTagInfo.selectedTracks();
138  const std::vector<btag::TrackIPData> &ipData =
139  trackIPTagInfo.impactParameterData();
140  std::vector<std::size_t> indices = trackIPTagInfo.sortedIndexes(sort);
141 
142  IterationRange range = flipIterate(indices.size(), false);
143  TrackKinematics kin;
144  range_for(i, range) {
145  std::size_t idx = indices[i];
146  const btag::TrackIPData &data = ipData[idx];
147  const Track &track = *tracks[idx];
148 
149  if (!trackNoDeltaRSelector(track, data, jet, pv))
150  continue;
151 
152  kin.add(track);
153  if (kin.vectorSum().M() > charmCut)
154  return data;
155  }
156 
157  static const btag::TrackIPData dummy = {
158  GlobalPoint(),
159  GlobalPoint(),
160  Measurement1D(-1.0, 1.0),
161  Measurement1D(-1.0, 1.0),
162  Measurement1D(-1.0, 1.0),
163  Measurement1D(-1.0, 1.0),
164  0.
165  };
166  return dummy;
167 }
168 
169 
172  const SecondaryVertexTagInfo &svInfo) const
173 {
174  using namespace ROOT::Math;
175 
176  edm::RefToBase<Jet> jet = ipInfo.jet();
177  math::XYZVector jetDir = jet->momentum().Unit();
178  TaggingVariableList vars;
179 
180  TrackKinematics vertexKinematics;
181 
182  double vtx_track_ptSum = 0.;
183  double vtx_track_ESum = 0.;
184 
185  // the following is specific depending on the type of vertex
186  int vtx = -1;
187  unsigned int numberofvertextracks = 0;
188 
189  IterationRange range = flipIterate(svInfo.nVertices(), true);
190  range_for(i, range) {
191 
192  numberofvertextracks = numberofvertextracks + (svInfo.secondaryVertex(i)).nTracks();
193 
194  const Vertex &vertex = svInfo.secondaryVertex(i);
195  bool hasRefittedTracks = vertex.hasRefittedTracks();
196  for(reco::Vertex::trackRef_iterator track = vertex.tracks_begin(); track != vertex.tracks_end(); track++) {
197  double w = vertex.trackWeight(*track);
198  if (w < minTrackWeight)
199  continue;
200  if (hasRefittedTracks) {
201  const Track actualTrack = vertex.refittedTrack(*track);
202  vertexKinematics.add(actualTrack, w);
203  if( isUsed(btau::trackEtaRel) ) vars.insert(btau::trackEtaRel, reco::btau::etaRel(jetDir,actualTrack.momentum()), true);
204  if(vtx < 0) // calculate this only for the first vertex
205  {
206  vtx_track_ptSum += std::sqrt(actualTrack.momentum().Perp2());
207  vtx_track_ESum += std::sqrt(actualTrack.momentum().Mag2() + ROOT::Math::Square(ParticleMasses::piPlus));
208  }
209  } else {
210  vertexKinematics.add(**track, w);
211  if( isUsed(btau::trackEtaRel) ) vars.insert(btau::trackEtaRel, reco::btau::etaRel(jetDir,(*track)->momentum()), true);
212  if(vtx < 0) // calculate this only for the first vertex
213  {
214  vtx_track_ptSum += std::sqrt((*track)->momentum().Perp2());
215  vtx_track_ESum += std::sqrt((*track)->momentum().Mag2() + ROOT::Math::Square(ParticleMasses::piPlus));
216  }
217  }
218  }
219 
220  if (vtx < 0) vtx = i;
221  }
222  if(vtx>=0){
223  if( isUsed(btau::vertexNTracks) ) vars.insert(btau::vertexNTracks, numberofvertextracks, true);
224  if( isUsed(btau::vertexFitProb) ) vars.insert(btau::vertexFitProb,(svInfo.secondaryVertex(vtx)).normalizedChi2(), true);
225  }
226 
227  // after we collected vertex information we let the common code complete the job
228  fillCommonVariables(vars,vertexKinematics,ipInfo,svInfo,vtx_track_ptSum,vtx_track_ESum);
229 
230  vars.finalize();
231  return vars;
232 }
233 
236  const CandSecondaryVertexTagInfo &svInfo) const
237 {
238  using namespace ROOT::Math;
239 
240  edm::RefToBase<Jet> jet = ipInfo.jet();
241  math::XYZVector jetDir = jet->momentum().Unit();
242  TaggingVariableList vars;
243 
244  TrackKinematics vertexKinematics;
245 
246  double vtx_track_ptSum = 0.;
247  double vtx_track_ESum = 0.;
248 
249  // the following is specific depending on the type of vertex
250  int vtx = -1;
251  unsigned int numberofvertextracks = 0;
252 
253  IterationRange range = flipIterate(svInfo.nVertices(), true);
254  range_for(i, range) {
255 
256  numberofvertextracks = numberofvertextracks + (svInfo.secondaryVertex(i)).numberOfSourceCandidatePtrs();
257 
258  const reco::VertexCompositePtrCandidate &vertex = svInfo.secondaryVertex(i);
259  const std::vector<CandidatePtr> tracks = vertex.daughterPtrVector();
260  for(std::vector<CandidatePtr>::const_iterator track = tracks.begin(); track != tracks.end(); ++track) {
261  vertexKinematics.add(*(*track)->bestTrack(), 1.0);
262  if( isUsed(btau::trackEtaRel) ) vars.insert(btau::trackEtaRel, reco::btau::etaRel(jetDir,(*track)->momentum()), true);
263  if(vtx < 0) // calculate this only for the first vertex
264  {
265  vtx_track_ptSum += std::sqrt((*track)->momentum().Perp2());
266  vtx_track_ESum += std::sqrt((*track)->momentum().Mag2() + ROOT::Math::Square(ParticleMasses::piPlus));
267  }
268  }
269 
270  if (vtx < 0) vtx = i;
271  }
272  if(vtx>=0){
273  if( isUsed(btau::vertexNTracks) ) vars.insert(btau::vertexNTracks, numberofvertextracks, true);
274  if( isUsed(btau::vertexFitProb) ) vars.insert(btau::vertexFitProb,(svInfo.secondaryVertex(vtx)).vertexNormalizedChi2(), true);
275  }
276 
277  // after we collected vertex information we let the common code complete the job
278  fillCommonVariables(vars,vertexKinematics,ipInfo,svInfo,vtx_track_ptSum,vtx_track_ESum);
279 
280  vars.finalize();
281  return vars;
282 }
283 
const double piPlus
Definition: ParticleMasses.h:9
int i
Definition: DBlmapReader.cc:9
reco::btag::SortCriteria getCriterium(const std::string &name)
Definition: TrackSorting.cc:11
trackRef_iterator tracks_end() const
last iterator over tracks
Definition: Vertex.cc:44
const VTX & secondaryVertex(unsigned int index) const
Track refittedTrack(const TrackBaseRef &track) const
Base class for all types of Jets.
Definition: Jet.h:20
double etaRel(const math::XYZVector &dir, const math::XYZVector &track)
reco::TrackSelector trackNoDeltaRSelector
bool hasRefittedTracks() const
Checks whether refitted tracks are stored.
Definition: Vertex.h:134
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
const Container & selectedTracks() const
Definition: IPTagInfo.h:100
static edm::ParameterSet dropDeltaR(const edm::ParameterSet &pset)
virtual reco::TaggingVariableList operator()(const reco::TrackIPTagInfo &ipInfo, const reco::SecondaryVertexTagInfo &svInfo) const
CombinedSVComputer(const edm::ParameterSet &params)
const Vector & momentum() const
track momentum vector
Definition: TrackBase.h:651
T sqrt(T t)
Definition: SSEVec.h:48
void addParameter(std::string const &name, T const &value)
Definition: ParameterSet.h:142
float trackWeight(const TREF &r) const
returns the weight with which a Track has contributed to the vertex-fit.
Definition: Vertex.h:74
std::vector< size_t > sortedIndexes(btag::SortCriteria mode=reco::btag::IP3DSig) const
Definition: IPTagInfo.h:237
IterationRange flipIterate(int size, bool vertex) const
const std::vector< btag::TrackIPData > & impactParameterData() const
Definition: IPTagInfo.h:90
#define range_for(i, x)
tuple tracks
Definition: testEve_cfg.py:39
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:30
tuple idx
DEBUGGING if hasattr(process,&quot;trackMonIterativeTracking2012&quot;): print &quot;trackMonIterativeTracking2012 D...
double flipValue(double value, bool vertex) const
virtual Vector momentum() const GCC11_FINAL
spatial momentum vector
edm::ParameterSet dropDeltaR(const edm::ParameterSet &pset) const
const reco::btag::TrackIPData & threshTrack(const reco::CandIPTagInfo &trackIPTagInfo, const reco::btag::SortCriteria sort, const reco::Jet &jet, const GlobalPoint &pv) const
bool isUsed(reco::btau::TaggingVariableName var) const
void useTaggingVariable(reco::btau::TaggingVariableName var)
void fillCommonVariables(reco::TaggingVariableList &vars, reco::TrackKinematics &vertexKinematics, const IPTI &ipInfo, const SVTI &svInfo, double &vtx_track_ptSum, double &vtx_track_ESum) const
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
const daughters & daughterPtrVector() const
references to daughtes
std::vector< TrackBaseRef >::const_iterator trackRef_iterator
The iteratator for the vector&lt;TrackRef&gt;
Definition: Vertex.h:37
Container input_container
Definition: IPTagInfo.h:52
T w() const
trackRef_iterator tracks_begin() const
first iterator over tracks
Definition: Vertex.cc:39
tuple size
Write out results.
tuple trackSelector
Tracks selection.
Definition: valSkim_cff.py:4
tuple useTrackWeights
Definition: alignBH_cfg.py:24