24 inline double square(
const double tosquare) {
27 double dist(
const std::pair<Amg::Vector3D,Amg::Vector3D>& pairofpos) {
29 return std::sqrt(square(
diff.x())+square(
diff.y())+square(
diff.z()));
37 static const InterfaceID IID_ITrackPairsSelector(
"InDet::TrackPairsSelector", 1, 0);
41 const std::string&
name,
59 declareInterface<TrackPairsSelector>(
this);
72 return IID_ITrackPairsSelector;
81 return StatusCode::FAILURE;
88 return StatusCode::FAILURE;
93 return StatusCode::SUCCESS;
98 return StatusCode::SUCCESS;
113 if (!(
m_helpertool->momFraction(perPos, perNeg))) pass =
false;
137 if(nclusNeg>0 && nclusPos>0) sCase = 0;
138 if((nclusNeg>0 && nclusPos==0) || (nclusNeg==0 && nclusPos>0)) sCase = 1;
139 if(nclusNeg==0 && nclusPos==0) sCase = 2;
155 ATH_MSG_WARNING(
"Track Particle does not contain first Measurement track parameters");
169 ATH_MSG_WARNING(
"Track Particle does not contain first Measurement track parameters");
173 double firstRpos = parPos.
position().perp();
174 double firstRneg = parNeg.
position().perp();
177 double detaCut = 0.0;
180 }
else if(sCase == 1) {
182 }
else if(sCase == 2) {
183 if(fabs(perPos->
eta())<0.6 && fabs(perNeg->
eta())<0.6) detaCut = 10000.;
193 double dinit = 1000.;
196 }
else if(sCase == 1) {
198 }
else if(sCase == 2) {
206 double maxDist = 1000.;
209 }
else if(sCase == 1) {
211 }
else if(sCase == 2) {
216 std::optional<Trk::ITrkDistanceFinder::TwoPoints>
result
219 if (!
result)
return false;
241 if (!(
m_helpertool->momFraction(perPos, perNeg))) pass =
false;
244 double init_pos = 0.;
double init_neg = 0.;
247 if(!mb_pos || !mb_neg) {pass =
false;
return pass;}
249 init_pos = (*itp_pos)->globalPosition().perp();
251 init_neg = (*itp_neg)->globalPosition().perp();
254 if ((init_neg<=m_maxR && init_pos>
m_maxR) || (init_neg>
m_maxR && init_pos<=
m_maxR)) sCase = 1;
258 double detaCut = 0.0;
261 }
else if(sCase == 1) {
263 }
else if(sCase == 2) {
272 double dinit = 1000.;
275 }
else if(sCase == 1) {
277 }
else if(sCase == 2) {
280 if(fabs(init_pos - init_neg) > dinit) pass =
false;
283 double maxDist = 1000.;
286 }
else if(sCase == 1) {
288 }
else if(sCase == 2) {
292 double newDistance = 1000000.;
293 std::optional<Trk::ITrkDistanceFinder::TwoPoints>
result
299 newDistance = dist (
result.value());
300 if (newDistance>maxDist) pass =
false;
304 double d_beta = (perPos->momentum().dot(perNeg->momentum())) /
305 (perPos->momentum().mag() * perNeg->momentum().mag());
312 std::map<std::string, float>
316 return {{
"minimumDistanceTrk", cache.
m_distance},