138 if (!originalTracks.
isValid()) {
140 finalTracks =
nullptr;
141 return StatusCode::FAILURE;
148 return StatusCode::FAILURE;
151 ATH_MSG_DEBUG(
"Input track collection size: " << originalTracks->size());
154 for (
const Trk::Track* track : *originalTracks) {
156 ATH_MSG_DEBUG(
"Dealing with track: " << trackCount <<
" / " << originalTracks->size());
158 bool acceptedTrack =
true;
162 ATH_MSG_DEBUG(
"Track selection OK for track: " << trackCount);
163 const Trk::Perigee* measuredPerigee = track->perigeeParameters();
164 if(!measuredPerigee){
169 if(!(measuredPerigee->covariance()) ){
182 double correctedQoverP(0), correctedQoverPError(0);
186 correctedQoverP = measuredPerigee->parameters()[
Trk::qOverP];
187 correctedQoverPError = 1e6;
190 double correctedD0(0), correctedD0Error(0);
194 correctedD0 = measuredPerigee->parameters()[
Trk::d0];
195 correctedD0Error = 1e6;
198 double correctedZ0(0), correctedZ0Error(0);
202 correctedZ0 = measuredPerigee->parameters()[
Trk::z0];
203 correctedZ0Error = 1e6;
211 std::vector<Trk::DefinedParameter> constrainedPars;
212 constrainedPars.push_back( constrainedD0 ) ;
213 constrainedPars.push_back( constrainedZ0 ) ;
214 constrainedPars.push_back( constrainedqOverP ) ;
217 constrainedCov.setZero();
218 constrainedCov( 0, 0 ) = correctedD0Error;
219 constrainedCov( 1, 1 ) = correctedZ0Error;
220 constrainedCov( 2, 2 ) = correctedQoverPError;
226 std::move(constrainedCov), *surf) ;
230 std::vector<const Trk::MeasurementBase*> vecOfMB;
231 if (pmot) vecOfMB.push_back(pmot);
236 for (;it!=itend;++it)
237 vecOfMB.push_back(*it);
240 it = track->outliersOnTrack()->begin();
241 itend = track->outliersOnTrack()->end();
243 for (;it!=itend;++it)
244 vecOfMB.push_back(*it);
248 vecOfMB, *measuredPerigee,
252 if (constrainedFittedTrack){
255 if(!constrainedPerigee){
259 <<
" pt: " << 1/measuredPerigee->parameters()[
Trk::qOverP] * 1e-3 * sin(measuredPerigee->parameters()[
Trk::theta])
260 <<
" d0: " << measuredPerigee->parameters()[
Trk::d0]
261 <<
" z0: " << measuredPerigee->parameters()[
Trk::z0] );
262 ATH_MSG_DEBUG(
"constraint values --> momentum: " << 1/correctedQoverP * 1e-3
263 <<
" pt: " << 1/correctedQoverP * 1e-3 * sin(measuredPerigee->parameters()[
Trk::theta])
264 <<
" d0: " << correctedD0
265 <<
" z0: " << correctedZ0 );
267 <<
" pt: " << 1/constrainedPerigee->parameters()[
Trk::qOverP] * 1e-3 * sin(constrainedPerigee->parameters()[
Trk::theta])
268 <<
" d0: " << constrainedPerigee->parameters()[
Trk::d0]
269 <<
" z0: " << constrainedPerigee->parameters()[
Trk::z0] );
272 constrainedFittedTrack->
setTrackSummary( std::make_unique<Trk::TrackSummary> (*track->trackSummary()) );
287 ->fit(Gaudi::Hive::currentContext(),
293 if(unconstrainedFittedTrack) {
305 return StatusCode::SUCCESS;
392 if( measuredPerigee->parameters()[
Trk::qOverP] > 0)
397 double pt = std::abs(1./(measuredPerigee->parameters()[
Trk::qOverP]))* sin(measuredPerigee->parameters()[
Trk::theta]) *1e-3;
398 double eta = -log(tan(measuredPerigee->parameters()[
Trk::theta]/2.));
399 double phi = measuredPerigee->parameters()[
Trk::phi];
404 double constraintErr =
m_etaphiMap_P->GetBinError(binNumber);
409 delta = delta * 0.001;
411 correctedQoverP = measuredPerigee->parameters()[
Trk::qOverP] * (1.+
charge *pt *delta );
412 correctedQoverPError = perr;
415 double qoverpFracError = perr/
pow(measuredPerigee->parameters()[
Trk::qOverP], 2);
416 qoverpFracError +=
pow(constraintErr,2);
417 correctedQoverPError = qoverpFracError*correctedQoverP*correctedQoverP;
421 ATH_MSG_DEBUG(
" == input pt: " << pt <<
" deltaSagitta: " << delta <<
" final pt: " << sin(measuredPerigee->parameters()[
Trk::theta]) * 1e-3/correctedQoverP);