43 for (
unsigned int i=0;
i<10;++
i) {
48 declareInterface<ITrackSelectorTool>(
this);
67 "Only check TRT PID if all hits are Xe hits");
77 return StatusCode::SUCCESS;
86 evt->beamPosSigmaX(),
evt->beamPosSigmaY(),
evt->beamPosSigmaZ(),
87 evt->beamTiltXZ(),
evt->beamTiltYZ(),
evt->beamPosSigmaXY());
90 ATH_MSG_WARNING(
" Cannot get beamSpot center from xAOD::EventInfo. Using (0,0,0)... " );
95 if (beamSpotHandle.isValid()) {
98 ATH_MSG_WARNING(
" Cannot get beamSpot center from BeamSpotData. Using (0,0,0)... " );
110 double abs_eta = (tanThetaOver2 == 0) ? 999.0 : std::fabs(
std::log(tanThetaOver2) );
123 const EventContext& ctx = Gaudi::Hive::currentContext();
126 const bool vertexSuppliedByUser{vx!=
nullptr};
129 if (not vertexSuppliedByUser) {
134 for (
const auto *
i : *
track.trackParameters()){
143 firstmeaspar=
track.perigeeParameters();
145 ATH_MSG_WARNING(
" First measurment on track is missing. Using perigee Parameters, but they are missing: 0 pointer! Track selection failed " );
147 if (not vertexSuppliedByUser)
delete myVertex;
158 track.info().particleHypothesis()).release();
159 perigee = extrapolatedParameters
160 ?
dynamic_cast<const Trk::Perigee*
>(extrapolatedParameters)
162 if (perigee==
nullptr || !perigee->covariance() ) {
164 if (extrapolatedParameters!=
nullptr) {
165 ATH_MSG_WARNING(
"The return object of the extrapolator was not a perigee even if a perigeeSurface was used!");
166 delete extrapolatedParameters;
167 if (not vertexSuppliedByUser)
delete myVertex;
170 if (not vertexSuppliedByUser)
delete myVertex;
176 double d0 = perigee->parameters()[
Trk::d0];
177 double z0 = perigee->parameters()[
Trk::z0];
180 double ratioTrk = 1.0;
182 bool isSilicon = (nclus > 0);
185 int ntrt = nTrtHits + nTrtOutliers;
190 ATH_MSG_FATAL(
"eProbabilityHT not available for Trk::Tracks only xAOD::TrackParticle objects" );
199 (ntrt>15 && ntrt<=25 && ratioTrk>=
m_trRatio2) ||
200 (ntrt>25 && ratioTrk>=
m_trRatio3)) pass =
true;
211 if ( ratioTrk >= trRatioTRT ) pass =
true;
218 double sd0sq =
err(0,0);
219 double sd0 = (sd0sq>0.)?std::sqrt(sd0sq):0.;
220 double sz0sq =
err(1,1);
221 double sz0 = (sz0sq>0.)?std::sqrt(sz0sq):0.;
229 ATH_MSG_FATAL(
"eProbabilityHT not available for Trk::Tracks only xAOD::TrackParticle objects" );
235 if (not vertexSuppliedByUser)
delete myVertex;
236 if (perigee!=
track.perigeeParameters())
delete perigee;
242 const EventContext& ctx = Gaudi::Hive::currentContext();
247 const bool vertexSuppliedByUser{vx!=
nullptr};
249 if (not vertexSuppliedByUser) {
255 for (
const auto *
i :
track.trackParameters()){
263 firstmeaspar=&(
track.definingParameters());
265 ATH_MSG_WARNING(
" Track Paraemters at first measurement not found. Perigee not found. Cannot do TrackSelection..." );
266 if (not vertexSuppliedByUser)
delete myVertex;
273 perigee = extrapolatedParameters
274 ?
dynamic_cast<const Trk::Perigee*
>(extrapolatedParameters)
276 if (perigee ==
nullptr || !perigee->covariance()) {
278 if (extrapolatedParameters!=
nullptr) {
279 ATH_MSG_WARNING(
"The return object of the extrapolator was not a perigee even if a perigeeSurface was used!" );
280 delete extrapolatedParameters;
281 if (not vertexSuppliedByUser)
delete myVertex;
284 if (not vertexSuppliedByUser)
delete myVertex;
290 double d0 = perigee->parameters()[
Trk::d0];
291 double z0 = perigee->parameters()[
Trk::z0];
294 double ratioTrk = 1.0;
296 bool isSilicon = (nclus > 0);
299 int ntrt = nTrtHits + nTrtOutliers;
305 ATH_MSG_FATAL(
"eProbabilityHT not available for Trk::TrackParticleBase only xAOD::TrackParticle objects" );
314 (ntrt>15 && ntrt<=25 && ratioTrk>=
m_trRatio2) ||
315 (ntrt>25 && ratioTrk>=
m_trRatio3)) pass =
true;
326 if ( ratioTrk >= trRatioTRT ) pass =
true;
333 double sd0sq =
err(0,0);
334 double sd0 = (sd0sq>0.)?std::sqrt(sd0sq):0.;
335 double sz0sq =
err(1,1);
336 double sz0 = (sz0sq>0.)?std::sqrt(sz0sq):0.;
345 ATH_MSG_FATAL(
"eProbabilityHT not available for Trk::TrackParticleBase only xAOD::TrackParticle objects" );
350 if (not vertexSuppliedByUser)
delete myVertex;
351 if (perigee!=&(
track.definingParameters()))
delete perigee;
358 const EventContext& ctx,
362 return vertex->position();
373 if (beamSpotHandle.isValid()) {
374 return beamSpotHandle->beamVtx().position();
383 const EventContext& ctx = Gaudi::Hive::currentContext();
392 if (extrapolatedParameters ==
nullptr) {
393 ATH_MSG_WARNING(
"Extrapolation to the vertex failed: " << perigeeSurface
400 double d0 = extrapolatedParameters->parameters()[
Trk::d0];
401 double z0 = extrapolatedParameters->parameters()[
Trk::z0];
403 double ratioTrk = 1.0;
405 bool isSilicon = (nclus > 0);
408 int ntrt = nTrtHits + nTrtOutliers;
424 (ntrt>15 && ntrt<=25 && ratioTrk>=
m_trRatio2) ||
425 (ntrt>25 && ratioTrk>=
m_trRatio3)) pass =
true;
436 if ( ratioTrk >= trRatioTRT ) pass =
true;
443 double sd0sq =
err(0,0);
444 double sd0 = (sd0sq>0.)?std::sqrt(sd0sq):0.;
445 double sz0sq =
err(1,1);
446 double sz0 = (sz0sq>0.)?std::sqrt(sz0sq):0.;
460 delete extrapolatedParameters;