13 static const float TrackerBoundsRadius = 112;
14 static const float TrackerBoundsHalfLength = 273.5;
16 return ((point.
transverse() < TrackerBoundsRadius)
17 && (
abs(point.
z()) < TrackerBoundsHalfLength));
22 template <
unsigned int N>
27 theLinP(linP.
clone()), theUpdator(updator.
clone()),
28 theSmoother(smoother.
clone()), theLTrackFactory ( ltsf.
clone() )
33 template <
unsigned int N>
38 thePSet(pSet), theLinP(linP.
clone()), theUpdator(updator.
clone()),
39 theSmoother(smoother.
clone()), theLTrackFactory ( ltsf.
clone() )
45 template <
unsigned int N>
54 theMaxStep = original.
maxStep();
59 template <
unsigned int N>
65 delete theLTrackFactory;
69 template <
unsigned int N>
72 theMaxShift = thePSet.getParameter<
double>(
"maxDistance");
73 theMaxStep = thePSet.getParameter<
int>(
"maxNbrOfIterations");
76 template <
unsigned int N>
79 thePSet.addParameter<
double>(
"maxDistance", 0.01);
80 thePSet.addParameter<
int>(
"maxNbrOfIterations", 10);
84 template <
unsigned int N>
89 GlobalPoint linP = theLinP->getLinearizationPoint(tracks);
90 if (!insideTrackerBounds(linP)) linP =
GlobalPoint(0,0,0);
96 std::vector<RefCountedVertexTrack> vtContainer = linearizeTracks(tracks, state);
97 return fit(vtContainer, state,
false);
100 template <
unsigned int N>
102 const std::vector<RefCountedVertexTrack> &
tracks,
106 return fit(tracks, state,
true );
109 template <
unsigned int N>
114 GlobalPoint linP = tracks[0]->linearizedTrack()->linearizationPoint();
118 return fit(tracks, state,
false);
125 template <
unsigned int N>
134 std::vector<RefCountedVertexTrack> vtContainer = linearizeTracks(tracks, state);
135 return fit(vtContainer, state,
false);
143 template <
unsigned int N>
149 std::vector<RefCountedVertexTrack> vtContainer;
151 if (tracks.size() > 1) {
153 GlobalPoint linP = theLinP->getLinearizationPoint(tracks);
154 if (!insideTrackerBounds(linP)) linP =
GlobalPoint(0,0,0);
158 vtContainer = linearizeTracks(tracks, lpState);
161 vtContainer = linearizeTracks(tracks, beamSpotState);
164 return fit(vtContainer, beamSpotState,
true);
173 template <
unsigned int N>
175 const std::vector<reco::TransientTrack> &
tracks,
180 std::vector<RefCountedVertexTrack> vtContainer = linearizeTracks(tracks, state);
181 return fit(vtContainer, state,
true);
188 template <
unsigned int N>
190 const std::vector<RefCountedVertexTrack> &
tracks,
195 return fit(tracks, state,
true);
201 template <
unsigned int N>
202 vector<typename SequentialVertexFitter<N>::RefCountedVertexTrack>
204 const std::vector<reco::TransientTrack> &
tracks,
208 std::vector<RefCountedVertexTrack> finalTracks;
209 finalTracks.reserve(tracks.size());
210 for(vector<reco::TransientTrack>::const_iterator
i = tracks.begin();
211 i != tracks.end();
i++) {
213 = theLTrackFactory->linearizedTrackState(linP, *
i);
215 finalTracks.push_back(vTrData);
225 template <
unsigned int N>
226 vector<typename SequentialVertexFitter<N>::RefCountedVertexTrack>
228 const std::vector<RefCountedVertexTrack> &
tracks,
233 std::vector<RefCountedVertexTrack> finalTracks;
234 finalTracks.reserve(tracks.size());
235 for(
typename std::vector<RefCountedVertexTrack>::const_iterator
i = tracks.begin();
236 i != tracks.end();
i++) {
238 (**i).linearizedTrack()->stateWithNewLinearizationPoint(linP);
243 theVTrackFactory.vertexTrack(lTrData,state, (**i).
weight() );
244 finalTracks.push_back(vTrData);
252 template <
unsigned int N>
255 const VertexState priorVertex,
bool withPrior )
const
257 std::vector<RefCountedVertexTrack> initialTracks;
261 CachingVertex<N> returnVertex(priorVertexPosition,priorVertexError,initialTracks,0);
264 priorVertexPosition,priorVertexError,initialTracks,0);
267 std::vector<RefCountedVertexTrack> globalVTracks =
tracks;
270 bool validVertex =
true;
277 if(step != 0) globalVTracks = reLinearizeTracks(tracks,
281 for (
typename std::vector<RefCountedVertexTrack>::const_iterator
i
282 = globalVTracks.begin();
i != globalVTracks.end();
i++) {
283 fVertex = theUpdator->add(fVertex,*
i);
287 validVertex = fVertex.
isValid();
289 if (validVertex && hasNan(fVertex.
position())) {
290 LogDebug(
"RecoVertex/SequentialVertexFitter")
291 <<
"Fitted position is NaN.\n";
295 if (validVertex && !insideTrackerBounds(fVertex.
position())) {
296 LogDebug(
"RecoVertex/SequentialVertexFitter")
297 <<
"Fitted position is out of tracker bounds.\n";
309 previousPosition = newPosition;
312 returnVertex = fVertex;
313 globalVTracks.clear();
315 }
while ( (step != theMaxStep) &&
316 (((previousPosition - newPosition).
transverse() > theMaxShift) ||
320 LogDebug(
"RecoVertex/SequentialVertexFitter")
321 <<
"Fitted position is invalid (out of tracker bounds or has NaN). Returned vertex is invalid\n";
325 if (step >= theMaxStep) {
326 LogDebug(
"RecoVertex/SequentialVertexFitter")
327 <<
"The maximum number of steps has been exceeded. Returned vertex is invalid\n";
332 returnVertex = theSmoother->smooth(returnVertex);
std::vector< RefCountedVertexTrack > reLinearizeTracks(const std::vector< RefCountedVertexTrack > &tracks, const VertexState state) const
VertexState vertexState() const
const VertexUpdator< N > * vertexUpdator() const
CachingVertex< N > fit(const std::vector< RefCountedVertexTrack > &tracks, const VertexState priorVertex, bool withPrior) const
Global3DPoint GlobalPoint
T transverse() const
Another name for perp()
const AbstractLTSFactory< N > * linearizedTrackStateFactory() const
GlobalPoint position() const
virtual CachingVertex< N > vertex(const std::vector< reco::TransientTrack > &tracks) const
const VertexSmoother< N > * vertexSmoother() const
virtual ~SequentialVertexFitter()
GlobalWeight weight() const
const edm::ParameterSet parameterSet() const
GlobalPoint position() const
virtual LinearizationPointFinder * clone() const =0
CLHEP::HepSymMatrix AlgebraicSymMatrix
const int maxStep() const
GlobalError error() const
std::vector< RefCountedVertexTrack > linearizeTracks(const std::vector< reco::TransientTrack > &tracks, const VertexState state) const
void setDefaultParameters()
const float maxShift() const
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point
const LinearizationPointFinder * linearizationPointFinder() const