23 return StatusCode::FAILURE;
29 return StatusCode::FAILURE;
38 return StatusCode::FAILURE;
45 return StatusCode::FAILURE;
49 return StatusCode::SUCCESS;
56 m_breakingDistance(3.),
57 m_addingDistance(0.1),
58 m_useMaxInCluster(false),
60 m_ignoreBeamSpot(false),
61 m_vtxSeedFinder(
"Trk::CrossDistancesSeedFinder"),
62 m_extrapolator(
"Trk::Extrapolator")
64 declareInterface<IMultiPVSeedFinder>(
this);
91 const EventContext& ctx = Gaudi::Hive::currentContext();
92 std::vector<const Trk::Track*> preselectedTracks(0);
93 std::vector<const Trk::Track*>::const_iterator tr = tracks.begin();
94 std::vector<const Trk::Track*>::const_iterator tre = tracks.end();
98 for(;tr!=tre;++tr)
if(
m_trkFilter->decision(**tr,&beamRecVertex)) preselectedTracks.push_back(*tr);
108 " vtx seed y: " << myVertex.
position().y() <<
109 " vtx seed z: " << myVertex.
position().z());
110 beamVertex = &myVertex;
114 std::vector< std::vector<const Trk::Track *> >
result(0);
117 if(!preselectedTracks.empty())
119 std::vector<int> indexOfSorted =
m_sortingTool->sortedIndex(preselectedTracks,beamVertex);
121 std::vector<const Trk::Track *> tmp_cluster(0);
126 if(!indexOfSorted.empty()){
133 float lastTrackZ0 = -999.;
134 if(exPerigee) { lastTrackZ0 = exPerigee->parameters()[
Trk::z0];
delete exPerigee; }
136 ATH_MSG_WARNING(
"Impossible to extrapolate the first track; returning 0 container for this event");
142 float prevTrackZ0 = 0.;
146 for(
unsigned int i=0;
i<indexOfSorted.size();++
i)
150 float currentTrackZ0 = lexPerigee->parameters()[
Trk::z0];
153 if(!
i) prevTrackZ0 = currentTrackZ0;
158 std::abs(currentTrackZ0 - prevTrackZ0)>addingDistance) ||
164 tmp_cluster.push_back(preselectedTracks[indexOfSorted[
i]]);
165 lastTrackZ0 = currentTrackZ0;
168 tmp_cluster.push_back(preselectedTracks[indexOfSorted[
i]]);
170 if(
i==indexOfSorted.size()-1 &&
int(tmp_cluster.size())>
m_ignoreLevel)
result.push_back(tmp_cluster);
175 float diff = std::abs(currentTrackZ0-prevTrackZ0);
176 if(addingDistance <
diff) addingDistance =
diff;
178 prevTrackZ0 = currentTrackZ0;
189 const EventContext& ctx = Gaudi::Hive::currentContext();
191 std::vector<const xAOD::TrackParticle*> preselectedTracks(0);
196 beamposition.
setPosition(beamSpotHandle->beamVtx().position());
199 for (
const auto *
track : tracks) {
203 std::vector<const Trk::TrackParameters*> perigeeList;
204 std::vector<const xAOD::TrackParticle*>::const_iterator trackBegin=tracks.begin();
205 std::vector<const xAOD::TrackParticle*>::const_iterator trackEnd=tracks.end();
206 for (std::vector<const xAOD::TrackParticle*>::const_iterator trackIter=trackBegin;trackIter!=trackEnd;++trackIter)
208 perigeeList.push_back(&((*trackIter)->perigeeParameters()));
216 " vtx seed y: " << myVertex.
position().y() <<
217 " vtx seed z: " << myVertex.
position().z());
224 std::vector< std::vector<const Trk::TrackParameters *> >
result(0);
225 if(!preselectedTracks.empty())
227 std::vector<int> indexOfSorted =
m_sortingTool->sortedIndex(preselectedTracks, &beamposition);
229 std::vector<const Trk::TrackParameters *> tmp_cluster(0);
238 float lastTrackZ0 = -999.;
239 if(exPerigee) { lastTrackZ0 = exPerigee->parameters()[
Trk::z0];
delete exPerigee; }
242 ATH_MSG_WARNING(
"Impossible to extrapolate the first track; returning 0 container for this event");
249 float prevTrackZ0 =0.;
254 for(
unsigned int i=0;
i<indexOfSorted.size();++
i){
264 float currentTrackZ0 = lexPerigee->parameters()[
Trk::z0];
267 if(!
i) prevTrackZ0 = currentTrackZ0;
271 std::abs(currentTrackZ0 - prevTrackZ0) > addingDistance) ||
277 lastTrackZ0 = currentTrackZ0;
284 if(
i==indexOfSorted.size()-1 &&
int(tmp_cluster.size())>
m_ignoreLevel)
result.push_back(tmp_cluster);
291 float diff = std::abs(currentTrackZ0-prevTrackZ0);
292 if(addingDistance <
diff) addingDistance =
diff;
294 prevTrackZ0 = currentTrackZ0;