20 return StatusCode::FAILURE;
24 return StatusCode::SUCCESS;
29 AthAlgTool(
t,
n,
p), m_extrapolator(
"Trk::Extrapolator") ,m_zOffset(3.)
31 declareInterface<InDetTrackClusterCleaningTool>(
this);
44 const EventContext& ctx = Gaudi::Hive::currentContext();
45 std::vector<const Trk::Track*> clusterSeed(0);
46 std::vector<const Trk::Track*> outliers(0);
48 std::vector<const Trk::Track*>::const_iterator inb = cluster.begin();
49 std::vector<const Trk::Track*>::const_iterator ine = cluster.end();
51 unsigned int cluster_size = 0;
55 for(std::vector<const Trk::Track*>::const_iterator
i = inb;
i != ine; ++
i)
65 z_center += perigee->parameters()[
Trk::z0];
69 ATH_MSG_WARNING(
"The Track provided does not contain perigee parameters");
73 ATH_MSG_DEBUG(
"Z center is: "<<z_center<<
" for tracks: "<<cluster_size);
75 if(cluster_size != 0) {
76 z_center = z_center/cluster_size;
80 for(std::vector<const Trk::Track*>::const_iterator
i = inb;
i != ine; ++
i)
89 double z0 = measPerigee->parameters()[
Trk::z0];
95 if(std::abs(z_center-
z0)< sigma_z0*
m_zOffset) clusterSeed.push_back(*
i);
98 else outliers.push_back(*
i);
100 outliers.push_back(*
i);
101 ATH_MSG_WARNING(
"This track has no meas perigee. Regarded as outlyer");
105 std::pair<std::vector<const Trk::Track*>,std::vector<const Trk::Track*> >
result(clusterSeed, outliers);
109 std::pair<std::vector<const Trk::TrackParameters *>,
112 const EventContext& ctx = Gaudi::Hive::currentContext();
113 std::vector<const Trk::TrackParameters*> clusterSeed(0);
114 std::vector<const xAOD::TrackParticle*> outliers(0);
118 std::vector<const xAOD::TrackParticle*>::const_iterator inb = cluster.begin();
119 std::vector<const xAOD::TrackParticle*>::const_iterator ine = cluster.end();
121 unsigned int cluster_size = 0;
123 ATH_MSG_DEBUG(
"Receiving a cluster of size: "<< cluster.size());
128 for(std::vector<const xAOD::TrackParticle*>::const_iterator
i = inb;
i != ine; ++
i){
132 (*i)->perigeeParameters(),
138 z_center += perigee->parameters()[
Trk::z0];
143 "The TrackParticle provided does not contain perigee parameters");
147 ATH_MSG_DEBUG(
"Z center is: "<<z_center<<
" for tracks: "<<cluster_size);
149 if(cluster_size != 0) {
150 z_center = z_center/cluster_size;
155 for(std::vector<const xAOD::TrackParticle*>::const_iterator
i = inb;
i != ine; ++
i)
159 (*i)->perigeeParameters(),
165 if(
nullptr!=measPerigee)
167 double z0 = measPerigee->parameters()[
Trk::z0];
171 ATH_MSG_DEBUG(
"Perigee Z0 and corresponding sigma "<<
z0<<
" "<<sigma_z0);
174 ATH_MSG_DEBUG(
"discriminant "<<std::abs(z_center-
z0)<<
" "<< sigma_z0*3.0);
177 if(std::abs(z_center-
z0)< sigma_z0*3.0) clusterSeed.push_back(&((*i)->perigeeParameters()));
180 else outliers.push_back(*
i);
182 outliers.push_back(*
i);
183 ATH_MSG_WARNING(
"This track has no meas perigee. Regarded as outlyer");
187 std::pair<std::vector<const Trk::TrackParameters *>,
188 std::vector<const xAOD::TrackParticle *> >
result(clusterSeed, outliers);