61 m_trackMaker(
"InDet::SiTrackMaker_xk/InDetTrigSiTrackMaker"),
62 m_trigInDetTrackFitter(
"TrigInDetTrackFitter"),
63 m_trigZFinder(
"TrigZFinder/TrigZFinder", this ),
64 m_trackSummaryTool(
"Trk::ITrackSummaryTool/ITrackSummaryTool"),
65 m_disTrkFitter(
"Trk::GlobalChi2Fitter/InDetTrackFitter"),
68 m_doZFinderOnly(false),
69 m_storeZFinderVertices(false),
72 m_countRoIwithEnoughHits(0),
73 m_countRoIwithTracks(0),
77 m_particleHypothesis(
Trk::
pion),
78 m_useNewLayerNumberScheme(false),
85 m_doDisappearingTrk(false),
87 m_standaloneMode(false)
98 declareProperty(
"zVertexResolution",
m_tcs.
m_zvError = 10.0,
" Half-width (mm) in z of z region used to filter seeds when doFastZVertexSeeding enabled" );
99 declareProperty(
"zVertexResolutionEndcap",
m_tcs.
m_zvErrorEndcap = -1,
" Half-width (mm) in z of region used to filter seeds when doFastZVertexSeeding enabled, for endcap pixels; set to zVertexResolution value later if left negative" );
148 "TrackCollection name");
152 "TrackCollection name");
251 ATH_MSG_INFO(
" FTF configures in Large Radius Tracking Mode");
261 float lut_range[4] = {0.0,3.0,0.0,9.0};
265 if (lut_fileName.empty()) {
266 ATH_MSG_ERROR(
"Cannot find TrigSeedML LUT file " << lut_fileName);
267 return StatusCode::FAILURE;
271 std::ifstream ifs(lut_fileName.c_str());
274 ifs >>
row >> col0 >> col1;
286 if (conn_fileName.empty()) {
287 ATH_MSG_WARNING(
"Cannot find layer connections file " << conn_fileName);
291 std::ifstream ifs(conn_fileName.c_str());
295 ATH_MSG_INFO(
"Layer connections are initialized from file " << conn_fileName);
367 return StatusCode::SUCCESS;
384 const std::vector<TrigInDetSiLayer>* pVL =
m_numberingTool->layerGeometry();
395 return StatusCode::SUCCESS;
402 outputTracks = std::make_unique<TrackCollection>();
427 if ( roiCollection->
size()>1 )
ATH_MSG_WARNING(
"More than one Roi in the collection: " <<
m_roiCollectionKey <<
", this is not supported - use a composite Roi: Using the first Roi ONLY" );
429 if ( roiCollection->
size()==0) {
431 return StatusCode::FAILURE;
444 return StatusCode::SUCCESS;
453 const EventContext& ctx)
const {
471 auto monTime =
Monitored::Group(
m_monTool, mnt_roi_nTracks, mnt_roi_nSPs, mnt_timer_Total, mnt_timer_SpacePointConversion,
472 mnt_timer_PatternReco, mnt_timer_TripletMaking, mnt_timer_CombTracking, mnt_timer_TrackFitter,
473 mnt_timer_dEdxTrk, mnt_timer_disTrkZVertex, mnt_timer_disTrk);
478 mnt_timer_Total.start();
479 mnt_timer_SpacePointConversion.start();
482 mnt_roi_lastStageExecuted = 1;
484 std::vector<TrigSiSpacePointBase> convertedSpacePoints;
485 convertedSpacePoints.reserve(5000);
487 std::map<Identifier, std::vector<long int> > siClusterMap;
493 long int trackIndex=0;
498 ATH_CHECK(
m_spacePointTool->getSpacePoints(roi, convertedSpacePoints, mnt_roi_nSPsPIX, mnt_roi_nSPsSCT, ctx, &siClusterMap));
504 mnt_timer_SpacePointConversion.stop();
505 mnt_roi_nSPs = mnt_roi_nSPsPIX + mnt_roi_nSPsSCT;
508 ATH_MSG_DEBUG(
"REGTEST / Found " << mnt_roi_nSPs <<
" space points.");
509 ATH_MSG_DEBUG(
"REGTEST / Found " << mnt_roi_nSPsPIX <<
" Pixel space points.");
510 ATH_MSG_DEBUG(
"REGTEST / Found " << mnt_roi_nSPsSCT <<
" SCT space points.");
511 ATH_MSG_DEBUG(
"REGTEST / converted space points size = " << convertedSpacePoints.size());
515 ATH_MSG_DEBUG(
"No tracks found - too few hits in ROI to run " << mnt_roi_nSPs);
517 return StatusCode::SUCCESS;
520 mnt_roi_lastStageExecuted = 2;
524 std::unique_ptr<TrigRoiDescriptor> tmpRoi = std::make_unique<TrigRoiDescriptor>(roi);
527 auto vertices = std::make_unique<TrigVertexCollection>();
528 std::vector<float> vZv;
533 mnt_timer_ZFinder.start();
536 tmpRoi = std::make_unique<TrigRoiDescriptor>(
true);
539 vertices = std::make_unique<TrigVertexCollection>(*
m_trigZFinder->findZ( convertedSpacePoints, roi));
545 vZv.reserve(vertices->size());
546 for (
const auto vertex : *vertices) {
549 float zMinus =
z - 7.0;
550 float zPlus =
z + 7.0;
560 mnt_timer_ZFinder.stop();
568 return StatusCode::SUCCESS;
573 mnt_roi_lastStageExecuted = 3;
575 mnt_timer_PatternReco.start();
577 mnt_timer_TripletMaking.start();
579 std::vector<TrigInDetTriplet> triplets;
580 std::vector<GNN_TrigTracklet> tracklets;
585 seedGen.loadSpacePoints(convertedSpacePoints);
590 std::vector<GNN_TrigTracklet> vGNN_Tracks;
594 for(
auto&
track : tracklets) {
595 for(
auto& seed :
track.m_seeds) {
596 triplets.emplace_back(seed);
605 seedGen.loadSpacePoints(convertedSpacePoints);
608 seedGen.createSeeds(tmpRoi.get(), vZv);
611 seedGen.createSeeds(tmpRoi.get());
614 seedGen.getSeeds(triplets);
625 unsigned int nTrackSeeds =
m_useTracklets ? tracklets.size() : triplets.size();
629 mnt_timer_TripletMaking.stop();
630 mnt_roi_lastStageExecuted = 4;
632 mnt_timer_CombTracking.start();
636 std::vector<std::tuple<bool, double,Trk::Track*>> qualityTracks;
637 qualityTracks.reserve(nTrackSeeds);
642 long int trackIndex=0;
650 std::vector<Trk::Track*> disFailTrks;
651 std::vector<Trk::Track*> disCombTrks;
652 std::vector<std::tuple<bool, double, Trk::Track*>> qualityDisFailTrks;
653 std::vector<std::tuple<bool, double, Trk::Track*>> qualityDisCombTrks;
654 int disTrk_n_disCombTrks=0;
655 int disTrk_n_disCombTrks_cleaning=0;
656 int disTrk_n_disFailTrks=0;
657 int disTrk_n_disFailTrks_cleaning=0;
661 for(
unsigned int seedIdx=0;seedIdx!=nTrackSeeds;seedIdx++) {
663 std::vector<const Trk::SpacePoint*> spVec;
666 for(
const auto& sp : tracklets[seedIdx].m_track) {
667 spVec.push_back(sp->offlineSpacePoint());
677 spVec = {osp1, osp2, osp3};
682 std::vector<Identifier> clusterIds;
692 std::list<Trk::Track*> tracks;
693 std::list<Trk::Track*> tracksFail;
694 std::list<Trk::Track*> tracksAll =
m_trackMaker->getTracks(ctx, trackEventData, spVec);
700 tracksFail = tracksAll;
704 ATH_MSG_VERBOSE(
"size of tracks=" << tracks.size() <<
", tracksFail=" << tracksFail.size() <<
": resultCode=" << resultCode);
706 for(std::list<Trk::Track*>::const_iterator
t=tracks.begin();
t!=tracks.end(); ++
t) {
707 if( ! (*
t) )
continue;
709 disTrk_n_disCombTrks++;
712 disTrk_n_disCombTrks_cleaning++;
713 disCombTrks.push_back((*
t));
714 qualityDisCombTrks.emplace_back(std::make_tuple(
true, -
disTrackQuality((*
t)), (*
t)));
717 for(std::list<Trk::Track*>::const_iterator
t=tracksFail.begin();
t!=tracksFail.end(); ++
t) {
718 if( ! (*
t) )
continue;
720 disTrk_n_disFailTrks++;
723 disTrk_n_disFailTrks_cleaning++;
724 disFailTrks.push_back((*
t));
725 qualityDisFailTrks.emplace_back(std::make_tuple(
true, -
disTrackQuality((*
t)), (*
t)));
733 for(std::list<Trk::Track*>::const_iterator
t=tracks.begin();
t!=tracks.end(); ++
t) {
735 float d0 = (*t)->perigeeParameters()==0 ? 10000.0 : (*t)->perigeeParameters()->parameters()[
Trk::d0];
738 qualityTracks.push_back(std::make_tuple(
false,0,(*
t)));
746 qualityTracks.push_back(std::make_tuple(
true, -
trackQuality((*
t)), (*
t)));
749 qualityTracks.push_back(std::make_tuple(
true, 0, (*
t)));
757 ATH_MSG_DEBUG(
"===> nr of disFailTrks=" << disTrk_n_disFailTrks <<
" -> cleaning pass=" << disTrk_n_disFailTrks_cleaning);
758 ATH_MSG_DEBUG(
"===> nr of disCombTrks=" << disTrk_n_disCombTrks <<
" -> cleaning pass=" << disTrk_n_disCombTrks_cleaning);
775 initialTracks.
reserve(qualityTracks.size());
781 std::vector<unsigned int> indexDisCombTrk;
782 for(
const auto&
q : qualityTracks) {
783 bool needed_for_disCombTrk =
false;
786 for(
const auto& qdis : qualityDisCombTrks ) {
787 if( std::get<2>(qdis) == trk_q ) {
788 needed_for_disCombTrk = std::get<0>(qdis);
792 if( needed_for_disCombTrk)
ATH_MSG_VERBOSE(
"idx=" <<
idx <<
" ===> neded for disCombTrk");
794 if (std::get<0>(
q)==
true) {
800 delete std::get<2>(
q);
803 if( needed_for_disCombTrk ) {
808 delete std::get<2>(
q);
814 qualityTracks.clear();
819 mnt_timer_CombTracking.stop();
820 mnt_timer_PatternReco.stop();
822 mnt_roi_lastStageExecuted = 5;
824 mnt_timer_TrackFitter.start();
832 outputTracks = std::move(initialTracks);
840 mnt_timer_dEdxTrk.start();
847 if( outputTracks.
empty() ) {
852 bool do_recoverDisCombTrk =
true;
854 ATH_MSG_DEBUG(
"part of initialTracks fails in fitting. do not try to recover DisCombTracks");
855 do_recoverDisCombTrk =
false;
859 fittedExtraDisCombTracks.
reserve(extraDisCombTracks.
size());
863 if( extraDisCombTracks.
size() > 0 ) {
866 for (
auto fittedTrack = fittedExtraDisCombTracks.
begin(); fittedTrack!=fittedExtraDisCombTracks.
end(); ++fittedTrack) {
869 fittedDisCombTrks.
push_back(*fittedTrack);
876 for (
auto fittedTrack = outputTracks.
begin(); fittedTrack!=outputTracks.
end(); ) {
877 if ((*fittedTrack)->perigeeParameters()) {
878 float d0 = (*fittedTrack)->perigeeParameters()->parameters()[
Trk::d0];
879 float z0 = (*fittedTrack)->perigeeParameters()->parameters()[
Trk::z0];
882 ATH_MSG_DEBUG(
"REGTEST / Reject track after fit with d0 = " <<
d0 <<
" z0= " <<
z0
889 fittedTrack = outputTracks.
erase(fittedTrack);
898 fittedTrack = outputTracks.
erase(fittedTrack);
907 if(std::abs((*fittedTrack)->perigeeParameters()->parameters()[
Trk::qOverP]) >= 1
e-9){
908 trkPt =
std::sin((*fittedTrack)->perigeeParameters()->parameters()[
Trk::theta])/std::abs((*fittedTrack)->perigeeParameters()->parameters()[
Trk::qOverP]);
912 fittedTrack = outputTracks.
erase(fittedTrack);
922 mnt_timer_TrackFitter.stop();
929 for (
auto fittedTrack = outputTracks.
begin();fittedTrack!=outputTracks.
end();++fittedTrack) {
939 if(
std::find(indexDisCombTrk.begin(),indexDisCombTrk.end(),
idx)!=indexDisCombTrk.end() ) {
941 fittedDisCombTrks.
push_back(*fittedTrack);
949 if( outputTracks.
empty() ) {
952 mnt_roi_lastStageExecuted = 6;
954 mnt_roi_nTracks = outputTracks.
size();
957 std::vector<double> disTrk_v_xVtx;
958 std::vector<double> disTrk_v_yVtx;
959 std::vector<double> disTrk_v_zVtx;
961 mnt_timer_disTrkZVertex.start();
963 mnt_timer_disTrkZVertex.stop();
968 mnt_timer_disTrk.start();
969 ATH_CHECK(
findDisTracks(ctx,outputTracks,qualityDisFailTrks,qualityDisCombTrks,fittedDisCombTrks,disTrk_v_xVtx,disTrk_v_yVtx,disTrk_v_zVtx) );
970 mnt_timer_disTrk.stop();
976 if( !outputTracks.
empty() )
980 fillMon(outputTracks, *vertices, roi, ctx);
982 mnt_roi_lastStageExecuted = 7;
984 mnt_timer_Total.stop();
986 return StatusCode::SUCCESS;
995 double quality = 0. ;
996 const double W = 17.;
1014 std::set<const Trk::PrepRawData*>
clusters;
1018 std::sort(QT.begin(), QT.end(),
1019 [](
const std::tuple<bool, double, Trk::Track*>& lhs,
const std::tuple<bool, double, Trk::Track*>& rhs) {
1020 return std::get<1>(lhs) < std::get<1>(rhs); } );
1022 for (
auto&
q : QT) {
1024 m = std::get<2>(
q)->measurementsOnTrack()->begin(),
1025 me = std::get<2>(
q)->measurementsOnTrack()->end ();
1028 for(;
m!=me; ++
m ) {
1040 std::get<0>(
q) =
false;
1050 ATH_MSG_INFO(
"=========================================================");
1051 ATH_MSG_INFO(
"TrigFastTrackFinder::finalize() - TrigFastTrackFinder Statistics: ");
1055 ATH_MSG_INFO(
"=========================================================");
1057 return StatusCode::SUCCESS;
1066 if (siCLOT==
nullptr)
continue;
1068 if (siCL==
nullptr)
continue;
1073 if(pixCL==
nullptr)
continue;
1077 clusterMap[
id].push_back(trackIdx);
1083 if(pCL!=
nullptr) vIds.push_back(pCL->
identify());
1086 if(pCL!=
nullptr) vIds.push_back(pCL->
identify());
1091 std::vector<long int> xSection;
1093 std::map<Identifier, std::vector<long int> >
::iterator itm0 = clusterMap.find(*vIds.begin());
1094 if(itm0 == clusterMap.end())
return false;
1095 xSection.reserve((*itm0).second.size());
1096 std::copy((*itm0).second.begin(), (*itm0).second.end(), std::back_inserter(xSection));
1097 std::vector<Identifier>::const_iterator
it = vIds.begin();++
it;
1098 for(;
it!=vIds.end();++
it) {
1099 std::map<Identifier, std::vector<long int> >
::iterator itm1 = clusterMap.find(*
it);
1100 if(itm1 == clusterMap.end())
return false;
1101 std::vector<long int>
tmp;
1102 std::set_intersection(xSection.begin(), xSection.end(), (*itm1).second.begin(),(*itm1).second.end(), std::back_inserter(
tmp));
1103 if(
tmp.empty())
return false;
1106 xSection.reserve(
tmp.size());
1109 return !xSection.empty();
1126 auto monRoI =
Monitored::Group(
m_monTool, mnt_roi_eta, mnt_roi_phi, mnt_roi_etaWidth, mnt_roi_phiWidth, mnt_roi_z, mnt_roi_zWidth);
1129 for(
unsigned int i=0;
i<roi.
size();
i++) {
1132 mnt_roi_eta = subroi->
eta();
1133 mnt_roi_phi = subroi->
phi();
1136 mnt_roi_z = subroi->
zed();
1143 mnt_roi_eta = roi.
eta();
1144 mnt_roi_phi = roi.
phi();
1147 mnt_roi_z = roi.
zed();
1151 std::vector<float> mnt_trk_pt;
1152 std::vector<float> mnt_trk_a0;
1153 std::vector<float> mnt_trk_z0;
1154 std::vector<float> mnt_trk_phi0;
1155 std::vector<float> mnt_trk_eta;
1156 std::vector<float> mnt_trk_chi2dof;
1157 std::vector<float> mnt_trk_nSiHits;
1158 std::vector<float> mnt_trk_nPIXHits;
1159 std::vector<float> mnt_trk_nSCTHits;
1160 std::vector<float> mnt_trk_a0beam;
1161 std::vector<float> mnt_trk_z0beam;
1162 std::vector<float> mnt_trk_dPhi0;
1163 std::vector<float> mnt_trk_dEta;
1179 mon_nSiHits, mon_nPIXHits, mon_nSCTHits, mon_a0beam, mon_z0beam, mon_dPhi0, mon_dEta);
1181 std::vector<float> mnt_roi_zVertices;
1185 mon_roi_nZvertices = vertices.
size();
1186 for (
const auto vertex : vertices) {
1187 mnt_roi_zVertices.push_back(
vertex->z());
1190 for (
auto track : tracks) {
1192 if(trackPars==
nullptr) {
1196 if(trackPars->covariance()==
nullptr) {
1200 float a0 = trackPars->parameters()[
Trk::d0];
1201 float z0 = trackPars->parameters()[
Trk::z0];
1205 mnt_trk_a0.push_back(
a0);
1206 mnt_trk_z0.push_back(
z0);
1207 mnt_trk_phi0.push_back(
phi0);
1210 mnt_trk_eta.push_back(
eta);
1211 for(
unsigned int i=0;
i<roi.
size();
i++) {
1213 mnt_trk_dEta.push_back(
eta - (roi.
at(
i))->eta());
1232 mnt_trk_pt.push_back(
pT);
1233 mnt_trk_chi2dof.push_back(
chi2);
1237 for(
auto tSOS =
track->trackStateOnSurfaces()->begin();
1238 tSOS!=
track->trackStateOnSurfaces()->end(); ++tSOS) {
1247 mnt_trk_nPIXHits.push_back(nPix);
1248 mnt_trk_nSCTHits.push_back(nSct/2);
1249 mnt_trk_nSiHits.push_back(nPix + nSct/2);
1251 ATH_MSG_DEBUG(
"REGTEST / track npix/nsct/phi0/pt/eta/d0/z0/chi2: " <<
1261 bool goodTrack = std::fabs(
pT)>1000. && (nPix + nSct/2) > 3 && nSct > 0;
1270 std::vector<float> mnt_layer_IBL;
1271 std::vector<float> mnt_layer_PixB;
1272 std::vector<float> mnt_layer_PixE;
1273 std::vector<float> mnt_layer_SCTB;
1274 std::vector<float> mnt_layer_SCTE;
1275 std::vector<float> mnt_hit_IBLPhiResidual;
1276 std::vector<float> mnt_hit_IBLEtaResidual;
1277 std::vector<float> mnt_hit_IBLPhiPull;
1278 std::vector<float> mnt_hit_IBLEtaPull;
1279 std::vector<float> mnt_hit_PIXBarrelPhiResidual;
1280 std::vector<float> mnt_hit_PIXBarrelEtaResidual;
1281 std::vector<float> mnt_hit_PIXBarrelPhiPull;
1282 std::vector<float> mnt_hit_PIXBarrelEtaPull;
1283 std::vector<float> mnt_hit_SCTBarrelResidual;
1284 std::vector<float> mnt_hit_SCTBarrelPull;
1285 std::vector<float> mnt_hit_PIXEndcapPhiResidual;
1286 std::vector<float> mnt_hit_PIXEndcapEtaResidual;
1287 std::vector<float> mnt_hit_PIXEndcapPhiPull;
1288 std::vector<float> mnt_hit_PIXEndcapEtaPull;
1289 std::vector<float> mnt_hit_SCTEndcapResidual;
1290 std::vector<float> mnt_hit_SCTEndcapPull;
1291 std::vector<float> mnt_hit_PIXBarrelL1PhiResidual;
1292 std::vector<float> mnt_hit_PIXBarrelL1EtaResidual;
1293 std::vector<float> mnt_hit_PIXBarrelL2PhiResidual;
1294 std::vector<float> mnt_hit_PIXBarrelL2EtaResidual;
1295 std::vector<float> mnt_hit_PIXBarrelL3PhiResidual;
1296 std::vector<float> mnt_hit_PIXBarrelL3EtaResidual;
1297 std::vector<float> mnt_hit_PIXEndcapL1PhiResidual;
1298 std::vector<float> mnt_hit_PIXEndcapL1EtaResidual;
1299 std::vector<float> mnt_hit_PIXEndcapL2PhiResidual;
1300 std::vector<float> mnt_hit_PIXEndcapL2EtaResidual;
1301 std::vector<float> mnt_hit_PIXEndcapL3PhiResidual;
1302 std::vector<float> mnt_hit_PIXEndcapL3EtaResidual;
1303 std::vector<float> mnt_hit_SCTBarrelL1PhiResidual;
1304 std::vector<float> mnt_hit_SCTBarrelL2PhiResidual;
1305 std::vector<float> mnt_hit_SCTBarrelL3PhiResidual;
1306 std::vector<float> mnt_hit_SCTBarrelL4PhiResidual;
1307 std::vector<float> mnt_hit_SCTEndcapL1PhiResidual;
1308 std::vector<float> mnt_hit_SCTEndcapL2PhiResidual;
1309 std::vector<float> mnt_hit_SCTEndcapL3PhiResidual;
1310 std::vector<float> mnt_hit_SCTEndcapL4PhiResidual;
1311 std::vector<float> mnt_hit_SCTEndcapL5PhiResidual;
1312 std::vector<float> mnt_hit_SCTEndcapL6PhiResidual;
1313 std::vector<float> mnt_hit_SCTEndcapL7PhiResidual;
1314 std::vector<float> mnt_hit_SCTEndcapL8PhiResidual;
1315 std::vector<float> mnt_hit_SCTEndcapL9PhiResidual;
1325 auto mon_hit_PIXBarrelPhiResidual =
Monitored::Collection(
"hit_PIXBarrelPhiResidual",mnt_hit_PIXBarrelPhiResidual);
1326 auto mon_hit_PIXBarrelEtaResidual =
Monitored::Collection(
"hit_PIXBarrelEtaResidual",mnt_hit_PIXBarrelEtaResidual);
1327 auto mon_hit_PIXBarrelPhiPull =
Monitored::Collection(
"hit_PIXBarrelPhiPull",mnt_hit_PIXBarrelPhiPull);
1328 auto mon_hit_PIXBarrelEtaPull =
Monitored::Collection(
"hit_PIXBarrelEtaPull",mnt_hit_PIXBarrelEtaPull);
1329 auto mon_hit_SCTBarrelResidual =
Monitored::Collection(
"hit_SCTBarrelResidual",mnt_hit_SCTBarrelResidual);
1331 auto mon_hit_PIXEndcapPhiResidual =
Monitored::Collection(
"hit_PIXEndcapPhiResidual",mnt_hit_PIXEndcapPhiResidual);
1332 auto mon_hit_PIXEndcapEtaResidual =
Monitored::Collection(
"hit_PIXEndcapEtaResidual",mnt_hit_PIXEndcapEtaResidual);
1333 auto mon_hit_PIXEndcapPhiPull =
Monitored::Collection(
"hit_PIXEndcapPhiPull",mnt_hit_PIXEndcapPhiPull);
1334 auto mon_hit_PIXEndcapEtaPull =
Monitored::Collection(
"hit_PIXEndcapEtaPull",mnt_hit_PIXEndcapEtaPull);
1335 auto mon_hit_SCTEndcapResidual =
Monitored::Collection(
"hit_SCTEndcapResidual",mnt_hit_SCTEndcapResidual);
1337 auto mon_hit_PIXBarrelL1PhiResidual =
Monitored::Collection(
"hit_PIXBarrelL1PhiResidual",mnt_hit_PIXBarrelL1PhiResidual);
1338 auto mon_hit_PIXBarrelL1EtaResidual =
Monitored::Collection(
"hit_PIXBarrelL1EtaResidual",mnt_hit_PIXBarrelL1EtaResidual);
1339 auto mon_hit_PIXBarrelL2PhiResidual =
Monitored::Collection(
"hit_PIXBarrelL2PhiResidual",mnt_hit_PIXBarrelL2PhiResidual);
1340 auto mon_hit_PIXBarrelL2EtaResidual =
Monitored::Collection(
"hit_PIXBarrelL2EtaResidual",mnt_hit_PIXBarrelL2EtaResidual);
1341 auto mon_hit_PIXBarrelL3PhiResidual =
Monitored::Collection(
"hit_PIXBarrelL3PhiResidual",mnt_hit_PIXBarrelL3PhiResidual);
1342 auto mon_hit_PIXBarrelL3EtaResidual =
Monitored::Collection(
"hit_PIXBarrelL3EtaResidual",mnt_hit_PIXBarrelL3EtaResidual);
1343 auto mon_hit_PIXEndcapL1PhiResidual =
Monitored::Collection(
"hit_PIXEndcapL1PhiResidual",mnt_hit_PIXEndcapL1PhiResidual);
1344 auto mon_hit_PIXEndcapL1EtaResidual =
Monitored::Collection(
"hit_PIXEndcapL1EtaResidual",mnt_hit_PIXEndcapL1EtaResidual);
1345 auto mon_hit_PIXEndcapL2PhiResidual =
Monitored::Collection(
"hit_PIXEndcapL2PhiResidual",mnt_hit_PIXEndcapL2PhiResidual);
1346 auto mon_hit_PIXEndcapL2EtaResidual =
Monitored::Collection(
"hit_PIXEndcapL2EtaResidual",mnt_hit_PIXEndcapL2EtaResidual);
1347 auto mon_hit_PIXEndcapL3PhiResidual =
Monitored::Collection(
"hit_PIXEndcapL3PhiResidual",mnt_hit_PIXEndcapL3PhiResidual);
1348 auto mon_hit_PIXEndcapL3EtaResidual =
Monitored::Collection(
"hit_PIXEndcapL3EtaResidual",mnt_hit_PIXEndcapL3EtaResidual);
1349 auto mon_hit_SCTBarrelL1PhiResidual =
Monitored::Collection(
"hit_SCTBarrelL1PhiResidual",mnt_hit_SCTBarrelL1PhiResidual);
1350 auto mon_hit_SCTBarrelL2PhiResidual =
Monitored::Collection(
"hit_SCTBarrelL2PhiResidual",mnt_hit_SCTBarrelL2PhiResidual);
1351 auto mon_hit_SCTBarrelL3PhiResidual =
Monitored::Collection(
"hit_SCTBarrelL3PhiResidual",mnt_hit_SCTBarrelL3PhiResidual);
1352 auto mon_hit_SCTBarrelL4PhiResidual =
Monitored::Collection(
"hit_SCTBarrelL4PhiResidual",mnt_hit_SCTBarrelL4PhiResidual);
1353 auto mon_hit_SCTEndcapL1PhiResidual =
Monitored::Collection(
"hit_SCTEndcapL1PhiResidual",mnt_hit_SCTEndcapL1PhiResidual);
1354 auto mon_hit_SCTEndcapL2PhiResidual =
Monitored::Collection(
"hit_SCTEndcapL2PhiResidual",mnt_hit_SCTEndcapL2PhiResidual);
1355 auto mon_hit_SCTEndcapL3PhiResidual =
Monitored::Collection(
"hit_SCTEndcapL3PhiResidual",mnt_hit_SCTEndcapL3PhiResidual);
1356 auto mon_hit_SCTEndcapL4PhiResidual =
Monitored::Collection(
"hit_SCTEndcapL4PhiResidual",mnt_hit_SCTEndcapL4PhiResidual);
1357 auto mon_hit_SCTEndcapL5PhiResidual =
Monitored::Collection(
"hit_SCTEndcapL5PhiResidual",mnt_hit_SCTEndcapL5PhiResidual);
1358 auto mon_hit_SCTEndcapL6PhiResidual =
Monitored::Collection(
"hit_SCTEndcapL6PhiResidual",mnt_hit_SCTEndcapL6PhiResidual);
1359 auto mon_hit_SCTEndcapL7PhiResidual =
Monitored::Collection(
"hit_SCTEndcapL7PhiResidual",mnt_hit_SCTEndcapL7PhiResidual);
1360 auto mon_hit_SCTEndcapL8PhiResidual =
Monitored::Collection(
"hit_SCTEndcapL8PhiResidual",mnt_hit_SCTEndcapL8PhiResidual);
1361 auto mon_hit_SCTEndcapL9PhiResidual =
Monitored::Collection(
"hit_SCTEndcapL9PhiResidual",mnt_hit_SCTEndcapL9PhiResidual);
1363 auto monRes =
Monitored::Group(
m_monTool, mon_layer_IBL, mon_layer_PixB, mon_layer_PixE, mon_layer_SCTB, mon_layer_SCTE, mon_hit_IBLPhiResidual, mon_hit_IBLEtaResidual, mon_hit_IBLPhiPull, mon_hit_IBLEtaPull, mon_hit_PIXBarrelPhiResidual, mon_hit_PIXBarrelEtaResidual, mon_hit_PIXBarrelPhiPull, mon_hit_PIXBarrelEtaPull, mon_hit_SCTBarrelResidual, mon_hit_SCTBarrelPull, mon_hit_PIXEndcapPhiResidual, mon_hit_PIXEndcapEtaResidual, mon_hit_PIXEndcapPhiPull, mon_hit_PIXEndcapEtaPull, mon_hit_SCTEndcapResidual, mon_hit_SCTEndcapPull, mon_hit_PIXBarrelL1PhiResidual, mon_hit_PIXBarrelL1EtaResidual, mon_hit_PIXBarrelL2PhiResidual, mon_hit_PIXBarrelL2EtaResidual, mon_hit_PIXBarrelL3PhiResidual, mon_hit_PIXBarrelL3EtaResidual, mon_hit_PIXEndcapL1PhiResidual, mon_hit_PIXEndcapL1EtaResidual, mon_hit_PIXEndcapL2PhiResidual, mon_hit_PIXEndcapL2EtaResidual, mon_hit_PIXEndcapL3PhiResidual, mon_hit_PIXEndcapL3EtaResidual, mon_hit_SCTBarrelL1PhiResidual, mon_hit_SCTBarrelL2PhiResidual, mon_hit_SCTBarrelL3PhiResidual, mon_hit_SCTBarrelL4PhiResidual, mon_hit_SCTEndcapL1PhiResidual, mon_hit_SCTEndcapL2PhiResidual, mon_hit_SCTEndcapL3PhiResidual, mon_hit_SCTEndcapL4PhiResidual, mon_hit_SCTEndcapL5PhiResidual, mon_hit_SCTEndcapL6PhiResidual, mon_hit_SCTEndcapL7PhiResidual, mon_hit_SCTEndcapL8PhiResidual, mon_hit_SCTEndcapL9PhiResidual);
1365 std::vector<TrigL2HitResidual> vResid;
1368 if(!scRes.isSuccess())
return;
1374 switch(
it->regionId()) {
1376 mnt_layer_PixB.push_back(pixlayer);
1377 mnt_hit_PIXBarrelPhiResidual.push_back(
it->phiResidual());
1378 mnt_hit_PIXBarrelPhiPull.push_back(
it->phiPull());
1379 mnt_hit_PIXBarrelEtaResidual.push_back(
it->etaResidual());
1380 mnt_hit_PIXBarrelEtaPull.push_back(
it->etaPull());
1381 if (pixlayer == 1) {
1382 mnt_hit_PIXBarrelL1PhiResidual.push_back(
it->phiResidual());
1383 mnt_hit_PIXBarrelL1EtaResidual.push_back(
it->etaResidual());
1385 if (pixlayer == 2) {
1386 mnt_hit_PIXBarrelL2PhiResidual.push_back(
it->phiResidual());
1387 mnt_hit_PIXBarrelL2EtaResidual.push_back(
it->etaResidual());
1389 if (pixlayer == 3) {
1390 mnt_hit_PIXBarrelL3PhiResidual.push_back(
it->phiResidual());
1391 mnt_hit_PIXBarrelL3EtaResidual.push_back(
it->etaResidual());
1396 mnt_layer_PixE.push_back(pixlayer);
1397 mnt_hit_PIXEndcapPhiResidual.push_back(
it->phiResidual());
1398 mnt_hit_PIXEndcapPhiPull.push_back(
it->phiPull());
1399 mnt_hit_PIXEndcapEtaResidual.push_back(
it->etaResidual());
1400 mnt_hit_PIXEndcapEtaPull.push_back(
it->etaPull());
1401 if (pixlayer == 0) {
1402 mnt_hit_PIXEndcapL1PhiResidual.push_back(
it->phiResidual());
1403 mnt_hit_PIXEndcapL1EtaResidual.push_back(
it->etaResidual());
1405 if (pixlayer == 1) {
1406 mnt_hit_PIXEndcapL2PhiResidual.push_back(
it->phiResidual());
1407 mnt_hit_PIXEndcapL2EtaResidual.push_back(
it->etaResidual());
1409 if (pixlayer == 2) {
1410 mnt_hit_PIXEndcapL3PhiResidual.push_back(
it->phiResidual());
1411 mnt_hit_PIXEndcapL3EtaResidual.push_back(
it->etaResidual());
1415 mnt_layer_SCTB.push_back(sctlayer);
1416 mnt_hit_SCTBarrelResidual.push_back(
it->phiResidual());
1417 mnt_hit_SCTBarrelPull.push_back(
it->phiPull());
1418 if (sctlayer == 0) {
1419 mnt_hit_SCTBarrelL1PhiResidual.push_back(
it->phiResidual());
1421 if (sctlayer == 1) {
1422 mnt_hit_SCTBarrelL2PhiResidual.push_back(
it->phiResidual());
1424 if (sctlayer == 2) {
1425 mnt_hit_SCTBarrelL3PhiResidual.push_back(
it->phiResidual());
1427 if (sctlayer == 3) {
1428 mnt_hit_SCTBarrelL4PhiResidual.push_back(
it->phiResidual());
1433 mnt_layer_SCTE.push_back(sctlayer);
1434 mnt_hit_SCTEndcapResidual.push_back(
it->phiResidual());
1435 mnt_hit_SCTEndcapPull.push_back(
it->phiPull());
1436 if (sctlayer == 0) {
1437 mnt_hit_SCTEndcapL1PhiResidual.push_back(
it->phiResidual());
1439 if (sctlayer == 1) {
1440 mnt_hit_SCTEndcapL2PhiResidual.push_back(
it->phiResidual());
1442 if (sctlayer == 2) {
1443 mnt_hit_SCTEndcapL3PhiResidual.push_back(
it->phiResidual());
1445 if (sctlayer == 3) {
1446 mnt_hit_SCTEndcapL4PhiResidual.push_back(
it->phiResidual());
1448 if (sctlayer == 4) {
1449 mnt_hit_SCTEndcapL5PhiResidual.push_back(
it->phiResidual());
1451 if (sctlayer == 5) {
1452 mnt_hit_SCTEndcapL6PhiResidual.push_back(
it->phiResidual());
1454 if (sctlayer == 6) {
1455 mnt_hit_SCTEndcapL7PhiResidual.push_back(
it->phiResidual());
1457 if (sctlayer == 7) {
1458 mnt_hit_SCTEndcapL8PhiResidual.push_back(
it->phiResidual());
1460 if (sctlayer == 8) {
1461 mnt_hit_SCTEndcapL9PhiResidual.push_back(
it->phiResidual());
1465 mnt_layer_IBL.push_back(pixlayer);
1467 mnt_hit_IBLPhiResidual.push_back(
it->phiResidual());
1468 mnt_hit_IBLPhiPull.push_back(
it->phiPull());
1469 mnt_hit_IBLEtaResidual.push_back(
it->etaResidual());
1470 mnt_hit_IBLEtaPull.push_back(
it->etaPull());
1474 mnt_hit_PIXBarrelPhiResidual.push_back(
it->phiResidual());
1475 mnt_hit_PIXBarrelPhiPull.push_back(
it->phiPull());
1476 mnt_hit_PIXBarrelEtaResidual.push_back(
it->etaResidual());
1477 mnt_hit_PIXBarrelEtaPull.push_back(
it->etaPull());
1494 size_t actualSize =
m_accelTool->exportSeedMakingJob(tcs, roi, vsp, *dataBuffer);
1496 ATH_MSG_DEBUG(
"SeedMakingJob is ready, data size for transfer = " <<actualSize);
1498 std::shared_ptr<TrigAccel::OffloadBuffer> pBuff = std::make_shared<TrigAccel::OffloadBuffer>(dataBuffer);
1507 std::shared_ptr<TrigAccel::OffloadBuffer> pOB = pJob->
getOutput();
1522 ATH_CHECK( dEdxTrkHandle.
record(std::make_unique<xAOD::TrigCompositeContainer>(), std::make_unique<xAOD::TrigCompositeAuxContainer>()) );
1525 ATH_CHECK( dEdxHitHandle.
record(std::make_unique<xAOD::TrigCompositeContainer>(), std::make_unique<xAOD::TrigCompositeAuxContainer>()) );
1529 ATH_CHECK( disTrkCandHandle.
record(std::make_unique<xAOD::TrigCompositeContainer>(), std::make_unique<xAOD::TrigCompositeAuxContainer>()) );
1531 return StatusCode::SUCCESS;
1537 float abseta = std::fabs(
eta);
1548 const float PixBR6limit = 1.29612;
1549 const float PixBR5limit = 1.45204;
1550 const float PixBR4limit = 1.64909;
1551 const float PixBR3limit = 1.90036;
1552 const float PixBR2limit = 2.2146;
1558 if( abseta > PixBR2limit )
return 2;
1566 if( abseta > PixBR2limit )
return 2;
1581 if( abseta < PixBR6limit )
return 7;
1582 else if( abseta < PixBR5limit )
return 6;
1590 if( abseta < PixBR5limit )
return 7;
1591 else if( abseta < PixBR4limit )
return 6;
1599 if( abseta < PixBR4limit )
return 7;
1607 if( abseta < PixBR4limit )
return 6;
1608 else if( abseta < PixBR3limit )
return 6;
1616 if( abseta < PixBR3limit )
return 7;
1624 if( abseta < PixBR3limit )
return 6;
1632 if( abseta < PixBR3limit )
return 7;
1640 if( abseta < PixBR3limit )
return 7;
1658 ATH_CHECK( dEdxTrkHandle.
record(std::make_unique<xAOD::TrigCompositeContainer>(), std::make_unique<xAOD::TrigCompositeAuxContainer>()) );
1659 auto dEdxTrkContainer = dEdxTrkHandle.
ptr();
1663 ATH_CHECK( dEdxHitHandle.
record(std::make_unique<xAOD::TrigCompositeContainer>(), std::make_unique<xAOD::TrigCompositeAuxContainer>()) );
1664 auto dEdxHitContainer = dEdxHitHandle.
ptr();
1666 std::vector<float> mnt_dedx;
1667 std::vector<int> mnt_dedx_nusedhits;
1677 static constexpr
float TRKCUT_PTGEV_LOOSE = 3.0;
1678 static constexpr
float TRKCUT_PTGEV_TIGHT = 10.0;
1679 static constexpr
float TRKCUT_DEDX_LOOSE = 1.25;
1680 static constexpr
float TRKCUT_DEDX_TIGHT = 1.55;
1682 for (
const auto track: outputTracks) {
1684 float shift_x = 0;
float shift_y = 0;
1695 if (not igt) {
continue;}
1698 int pixelhits=0;
int n_usedhits=0;
1699 std::vector<float> v_pixhit_dedx; std::vector<float> v_pixhit_tot; std::vector<float> v_pixhit_trkchi2; std::vector<float> v_pixhit_trkndof;
1700 std::vector<int> v_pixhit_iblovfl; std::vector<int> v_pixhit_loc; std::vector<int> v_pixhit_layer;
1701 float dedx =
dEdx(
track,pixelhits,n_usedhits,v_pixhit_dedx,v_pixhit_tot,v_pixhit_trkchi2,v_pixhit_trkndof,
1702 v_pixhit_iblovfl,v_pixhit_loc,v_pixhit_layer);
1705 mnt_dedx.push_back(dedx);
1706 mnt_dedx_nusedhits.push_back(n_usedhits);
1708 bool hpt = (theTrackInfo.
ptGeV >= TRKCUT_PTGEV_TIGHT && dedx >= TRKCUT_DEDX_LOOSE);
1709 bool lpt = (theTrackInfo.
ptGeV >= TRKCUT_PTGEV_LOOSE && dedx >= TRKCUT_DEDX_TIGHT);
1710 if( ! hpt && ! lpt )
continue;
1713 dEdxTrkContainer->push_back(dEdxTrk);
1714 dEdxTrk->
setDetail<
int> (
"dEdxTrk_id", i_track);
1716 dEdxTrk->
setDetail<
float>(
"dEdxTrk_eta", theTrackInfo.
eta);
1717 dEdxTrk->
setDetail<
float>(
"dEdxTrk_phi", theTrackInfo.
phi0);
1719 dEdxTrk->
setDetail<
float>(
"dEdxTrk_dedx", dedx);
1720 dEdxTrk->
setDetail<
int> (
"dEdxTrk_dedx_n_usedhits", n_usedhits);
1726 for(
unsigned int i=0;
i<v_pixhit_dedx.size();
i++) {
1728 dEdxHitContainer->push_back(dEdxHit);
1729 dEdxHit->
setDetail<
int> (
"dEdxHit_trkid", i_track);
1730 dEdxHit->
setDetail<
float>(
"dEdxHit_dedx", v_pixhit_dedx[
i]);
1731 dEdxHit->
setDetail<
float>(
"dEdxHit_tot", v_pixhit_tot[
i]);
1732 dEdxHit->
setDetail<
float>(
"dEdxHit_trkchi2", v_pixhit_trkchi2[
i]);
1733 dEdxHit->
setDetail<
float>(
"dEdxHit_trkndof", v_pixhit_trkndof[
i]);
1734 dEdxHit->
setDetail<
int> (
"dEdxHit_iblovfl", v_pixhit_iblovfl[
i]);
1735 dEdxHit->
setDetail<
int> (
"dEdxHit_loc", v_pixhit_loc[
i]);
1736 dEdxHit->
setDetail<
int> (
"dEdxHit_layer", v_pixhit_layer[
i]);
1739 return StatusCode::SUCCESS;
1745 std::vector<float>& v_pixhit_dedx, std::vector<float>& v_pixhit_tot,
1746 std::vector<float>& v_pixhit_trkchi2, std::vector<float>& v_pixhit_trkndof,
1747 std::vector<int>& v_pixhit_iblovfl, std::vector<int>& v_pixhit_loc, std::vector<int>& v_pixhit_layer)
const
1749 const float Pixel_sensorthickness=.025;
1750 const float IBL_3D_sensorthickness=.023;
1751 const float IBL_PLANAR_sensorthickness=.020;
1753 const float energyPair = 3.68e-6;
1754 const float sidensity = 2.329;
1756 float conversion_factor=energyPair/sidensity;
1763 v_pixhit_dedx.clear();
1764 v_pixhit_tot.clear();
1765 v_pixhit_trkchi2.clear();
1766 v_pixhit_trkndof.clear();
1767 v_pixhit_iblovfl.clear();
1768 v_pixhit_loc.clear();
1769 v_pixhit_layer.clear();
1771 const int PIXLOC_IBL_PL = 0;
1772 const int PIXLOC_IBL_3D = 1;
1773 const int PIXLOC_PIX_LY = 2;
1774 const int PIXLOC_PIX_EC = 3;
1775 const int PIXLOC_IBL_UNKNOWN = 4;
1776 const int PIXLOC_PIX_UNKNOWN = 5;
1778 std::multimap<float,int> dEdxMap;
1779 float dEdxValue = 0;
1783 if (recoTrackStates) {
1791 for ( ; tsosIter != tsosIterEnd; ++tsosIter) {
1796 if ( measurement ==
nullptr ) {
1801 if(
tp ==
nullptr ) {
1806 if ( pixclus ==
nullptr ) {
1811 if( prd ==
nullptr ) {
1816 float dotProd =
tp->momentum().dot(
tp->associatedSurface().normal());
1817 float cosalpha = std::abs(dotProd/
tp->momentum().mag());
1818 ATH_MSG_VERBOSE(
"dotProd / cosalpha = " << dotProd <<
" / " << cosalpha);
1819 if (std::abs(cosalpha)<.16)
continue;
1821 const std::vector<int>& v_tots = prd->
totList();
1846 const float overflowIBLToT = 16;
1847 for (
int pixToT : v_tots) {
1848 if (pixToT >= overflowIBLToT) {
1855 if(((eta_module>=-10 && eta_module<=-7)||(eta_module>=6 && eta_module<=9)) && (std::abs(locy)<10. && (locx>-8.33 && locx <8.3)) ){
1856 thickness = IBL_3D_sensorthickness;
1857 loc = PIXLOC_IBL_3D;
1859 else if((eta_module>=-6 && eta_module<=5) && (std::abs(locy)<20. &&( locx >-8.33 && locx <8.3 )) ){
1860 thickness = IBL_PLANAR_sensorthickness;
1861 loc = PIXLOC_IBL_PL;
1865 loc = PIXLOC_IBL_UNKNOWN;
1868 else if(
bec==0 && std::abs(locy)<30. && (( locx > -8.20 && locx < -0.60 ) || ( locx > 0.50 && locx < 8.10 ) ) ){
1869 thickness = Pixel_sensorthickness;
1870 loc = PIXLOC_PIX_LY;
1872 else if(std::abs(
bec) == 2 && std::abs(locy)<30. && ( ( locx > -8.15 && locx < -0.55 ) || ( locx > 0.55 && locx < 8.15 ) ) ) {
1873 thickness = Pixel_sensorthickness;
1874 loc = PIXLOC_PIX_EC;
1878 loc = PIXLOC_IBL_UNKNOWN;
1882 if( loc != PIXLOC_IBL_UNKNOWN && loc != PIXLOC_PIX_UNKNOWN ) {
1883 dEdxValue =
charge*conversion_factor/thickness;
1884 dEdxMap.insert(std::pair<float,int>(dEdxValue, iblOverflow));
1888 v_pixhit_dedx.push_back(dEdxValue); v_pixhit_tot.push_back(
tot);
1889 v_pixhit_trkchi2.push_back(
chi2); v_pixhit_trkndof.push_back(
ndof);
1890 v_pixhit_iblovfl.push_back(iblOverflow); v_pixhit_loc.push_back(loc); v_pixhit_layer.push_back(
layer);
1897 float averagedEdx=0.;
1902 for (std::pair<float,int> itdEdx : dEdxMap) {
1904 if(itdEdx.second==0){
1906 averagedEdx += itdEdx.first;
1909 if(itdEdx.second > 0){
1914 if (((
int)pixelhits >= 5) and ((
int)n_usedhits >= (
int)pixelhits-2)) {
1920 if((
int)IBLOverflow>0 and ((
int)pixelhits==3) and (
int)n_usedhits==1) {
1924 if((
int)IBLOverflow>0 and ((
int)pixelhits==4) and (
int)n_usedhits==2) {
1929 if (((
int)pixelhits > 1) and ((
int)n_usedhits >=(
int)pixelhits-1)) {
1934 if((
int)IBLOverflow>0 and (
int)pixelhits==1){
1936 averagedEdx=itdEdx.first;
1941 if (n_usedhits > 0 or (n_usedhits==0 and(
int)IBLOverflow>0 and (
int)pixelhits==1)) {
1942 if(n_usedhits > 0) averagedEdx = averagedEdx / n_usedhits;
1944 ATH_MSG_DEBUG(
"=====> averaged dEdx = " << averagedEdx <<
" =====>");;
1945 ATH_MSG_DEBUG(
" +++ Used hits: " << n_usedhits <<
", IBL overflows: " << IBLOverflow );;
1946 ATH_MSG_DEBUG(
" +++ Original number of measurements = " << pixelhits <<
" (map size = " << dEdxMap.size() <<
") ");
1957 const float PT_CUT = 3.0;
1959 const double FAIL_CHI2_OV_NDOF_CUT = 20.0;
1961 const int COMB_N_HITS_IBL_OR_BL_CUT = 1;
1962 const int COMB_N_HITS_PIX_BR_CUT = 3;
1963 const double COMB_CHI2_OV_NDOF_PIX_BR_CUT = 3.0;
1964 const int COMB_N_GOOD_HITS_SCT_BR_CUT = 2;
1965 const int COMB_N_GOOD_DOUBLEHITS_SCT_BR_CUT = 0;
1968 if( trk==
nullptr )
return false;
1970 if( trk->
fitQuality()==
nullptr )
return false;
1973 if( !seed.s1().isPixel() || !seed.s2().isPixel() || !seed.s3().isPixel() )
return false;
1974 float s1_z = seed.s1().z();
1975 float s2_z = seed.s2().z();
1976 float s3_z = seed.s3().z();
1977 const float PIXEL_BARREL_Z = 410.0;
1978 if( std::abs(s1_z) > PIXEL_BARREL_Z || std::abs(s2_z) > PIXEL_BARREL_Z || std::abs(s3_z) > PIXEL_BARREL_Z )
return false;
1979 ATH_MSG_VERBOSE(
"FTF::isCleaningPassDisTrack> ... barrel cut passed");
1986 if(
pt/1000.0 < PT_CUT )
return false;
1993 if( std::abs(
ndof) < 1
e-12 )
return false;
1994 if(
chi2/
ndof > FAIL_CHI2_OV_NDOF_CUT )
return false;
1995 ATH_MSG_VERBOSE(
"FTF::isCleaningPassDisTrack> ... (failTrk) Chi2 cut passed");
2001 int n_hits_iblbl = barrelInfo[0].nHits + barrelInfo[1].nHits;
2002 if( n_hits_iblbl < COMB_N_HITS_IBL_OR_BL_CUT )
return false;
2005 int n_hits_pixbr = 0;
2006 double chi2_pixbr = 0;
2008 for(
unsigned int ily=0; ily<=3; ily++) {
2009 n_hits_pixbr += barrelInfo[ily].nHits;
2010 chi2_pixbr += barrelInfo[ily].chiSq;
2011 ndof_pixbr += barrelInfo[ily].nDof;
2013 if( n_hits_pixbr < COMB_N_HITS_PIX_BR_CUT )
return false;
2014 if( ndof_pixbr < 1 )
return false;
2015 double chi2_ov_ndof_pixbr = chi2_pixbr / ndof_pixbr;
2016 if( chi2_ov_ndof_pixbr > COMB_CHI2_OV_NDOF_PIX_BR_CUT )
return false;
2017 ATH_MSG_VERBOSE(
"FTF::isCleaningPassDisTrack> ... (combTrk) Pix cut passed");
2020 int n_hits_sctbr_good = 0;
2021 int n_doublehits_sctbr_good = 0;
2022 for(
unsigned int ily=4; ily<=7; ily++) {
2023 n_hits_sctbr_good += barrelInfo[ily].nGood;
2024 if( barrelInfo[ily].
nGood >= 2 ) n_doublehits_sctbr_good++;
2026 if( n_hits_sctbr_good > COMB_N_GOOD_HITS_SCT_BR_CUT )
return false;
2027 if( n_doublehits_sctbr_good > COMB_N_GOOD_DOUBLEHITS_SCT_BR_CUT )
return false;
2028 ATH_MSG_VERBOSE(
"FTF::isCleaningPassDisTrack> ... (combTrk) SCT cut passed");
2035 std::array<TrigFastTrackFinder::OneLayerInfo_t, TrigFastTrackFinder::N_BARREL_LAYERS>
2038 static constexpr
double CHI2_GOOD_CUT = 3.0;
2040 std::array<TrigFastTrackFinder::OneLayerInfo_t, TrigFastTrackFinder::N_BARREL_LAYERS>
result{};
2044 if (recoTrackStates) {
2047 for ( ; tsosIter != tsosIterEnd; ++tsosIter) {
2055 bool chi2_good = (
x2 <= CHI2_GOOD_CUT);
2058 if (pixclus!=
nullptr) {
2073 if (sctclus!=
nullptr) {
2099 double quality_pixel = 0. ;
2100 double quality_sct = 0. ;
2102 const double W = 17.;
2117 if( pixclus !=0 ) quality_pixel +=
q;
2118 else quality_sct +=
q;
2123 double quality = quality_pixel;
2124 quality -= quality_sct;
2125 if( quality < 0. ) quality = 0.;
2139 double xVTX =
vertex.x();
2140 double yVTX =
vertex.y();
2141 double tiltXZ = beamSpotHandle->beamTilt(0);
2142 double tiltYZ = beamSpotHandle->beamTilt(1);
2145 const double CLUSTCUT_DIST_SIGMA = 5.0;
2146 const double CLUSTCUT_DIST = 2.5;
2147 const double CLUSTCUT_SEED_PT = 3.0;
2149 const int VTXCUT_N_TRACKS = 3;
2150 const int VTXCUT_ALGO = 1;
2152 std::vector<std::tuple<int,double,double,Trk::Track*>> QT;
2153 QT.reserve(tracks.
size());
2155 for (
auto t=tracks.
begin();
t!=tracks.
end(); ++
t) {
2163 QT.emplace_back(std::make_tuple(-1,
pt,
pt,(*
t)));
2167 std::sort(QT.begin(), QT.end(),
2168 [](
const std::tuple<int,double,double,Trk::Track*>& lhs,
const std::tuple<int,double,double,Trk::Track*>& rhs) {
2169 return std::get<1>(lhs) > std::get<1>(rhs); } );
2172 std::vector<int> cluster_ntrk;
2173 std::vector<double> cluster_ptsum;
2174 std::vector<double> cluster_z;
2175 std::vector<double> cluster_wsum;
2176 std::vector<double> cluster_zerr;
2177 std::vector<double> cluster_w2sum;
2179 for(
unsigned int i=0;
i<QT.size(); ++
i) {
2181 double z =
t->perigeeParameters()->parameters()[
Trk::z0];
2182 double zerr = sqrt((*(
t->perigeeParameters()->covariance()))(
Trk::z0,
Trk::z0));
2183 double w = std::get<2>(QT[
i]);
2184 double pt = std::get<1>(QT[
i]);
2186 cluster_ntrk.push_back(1); cluster_ptsum.push_back(
pt);
2187 cluster_z.push_back(
w*
z); cluster_wsum.push_back(
w);
2188 cluster_zerr.push_back(
w*zerr*
w*zerr); cluster_w2sum.push_back(
w*
w);
2192 const int IDX_INITIAL = 100;
2193 double dist_min = 100.0;
2195 for(
unsigned j=0; j<cluster_z.size(); ++j) {
2196 double dist = std::abs(
z - cluster_z[j]/cluster_wsum[j]);
2197 if( dist < dist_min ) {
2202 int match_idx = IDX_INITIAL;
2203 if(
idx_min != IDX_INITIAL ) {
2204 double c_zerr_min = std::sqrt(cluster_zerr[
idx_min]/cluster_w2sum[
idx_min]);
2205 double err = std::sqrt(zerr*zerr+c_zerr_min*c_zerr_min);
2206 if( std::abs(
err) < 1
e-12 )
err = 1
e-12;
2207 double dist = dist_min /
err;
2208 if( dist < CLUSTCUT_DIST_SIGMA && dist_min < CLUSTCUT_DIST ) { match_idx =
idx_min; }
2211 if( match_idx == IDX_INITIAL ) {
2212 if(
pt > CLUSTCUT_SEED_PT && dist_min > CLUSTCUT_DIST ) {
2213 cluster_ntrk.push_back(1); cluster_ptsum.push_back(
pt);
2214 cluster_z.push_back(
w*
z); cluster_wsum.push_back(
w);
2215 cluster_zerr.push_back(
w*zerr*
w*zerr); cluster_w2sum.push_back(
w*
w);
2219 int new_n = cluster_ntrk[match_idx] + 1;
2220 double new_ptsum = cluster_ptsum[match_idx] +
pt;
2221 double new_z = cluster_z[match_idx] +
w*
z;
2222 double new_wsum = cluster_wsum[match_idx] +
w;
2223 double new_zerr = cluster_zerr[match_idx] +
w*zerr*
w*zerr;
2224 double new_w2sum = cluster_w2sum[match_idx] +
w*
w;
2225 cluster_ntrk[match_idx] = new_n;
2226 cluster_ptsum[match_idx] = new_ptsum;
2227 cluster_z[match_idx] = new_z;
2228 cluster_wsum[match_idx] = new_wsum;
2229 cluster_zerr[match_idx] = new_zerr;
2230 cluster_w2sum[match_idx] = new_w2sum;
2235 std::vector<std::tuple<double,double,double,int>> zVtx;
2236 zVtx.reserve(tracks.
size());
2237 for(
unsigned int i=0;
i<cluster_z.size();
i++) {
2238 if( cluster_ntrk[
i] < VTXCUT_N_TRACKS )
continue;
2239 double z = cluster_z[
i] / cluster_wsum[
i];
2240 double zerr = std::sqrt(cluster_zerr[
i] / cluster_w2sum[
i]);
2241 zVtx.push_back(std::make_tuple(cluster_ptsum[
i],
z,zerr,cluster_ntrk[
i]));
2244 if( VTXCUT_ALGO == 1 ) {
2245 std::sort(zVtx.begin(), zVtx.end(),
2246 [](
const std::tuple<double,double,double,int>& lhs,
const std::tuple<double,double,double,int>& rhs) {
2247 return std::get<0>(lhs) > std::get<0>(rhs); } );
2249 ATH_MSG_VERBOSE(
"disTrkZVtertex> ===== looping zVtx size: " << zVtx.size());
2250 for(
unsigned int i=0;
i<zVtx.size();
i++) {
2251 double z = std::get<1>(zVtx[
i]);
2252 double zerr = std::get<2>(zVtx[
i]);
2253 double pt = std::get<0>(zVtx[
i]);
2254 int n = std::get<3>(zVtx[
i]);
2255 v_zvtx.push_back(
z);
2256 v_xvtx.push_back(xVTX - tiltXZ*
z);
2257 v_yvtx.push_back(yVTX - tiltYZ*
z);
2258 ATH_MSG_VERBOSE(
"disTrkZVtertex> Vertex cand i=" <<
i <<
": z = " <<
z <<
" +- " << zerr <<
", sum n / pt = " <<
n <<
" / " <<
pt);
2267 mnt_disTrk_nVtx = v_zvtx.size();
2268 if(v_zvtx.size()>0) {
2269 mnt_disTrk_xVtx = v_xvtx[0];
2270 mnt_disTrk_yVtx = v_yvtx[0];
2271 mnt_disTrk_zVtx = v_zvtx[0];
2277 const double TRKCUT_CHI2_OV_NDOF = 3.0;
2278 const double TRKCUT_PT = 1.0;
2279 const double TRKCUT_D0 = 2.0;
2280 const int TRKCUT_N_HITS_INNER = 1;
2281 const int TRKCUT_N_HITS_PIX = 3;
2282 const int TRKCUT_N_HITS = 7;
2285 if ( !
t->perigeeParameters() )
return false;
2286 if ( !
t->fitQuality() )
return false;
2287 if (
t->trackSummary()==0 ) {
2289 if (
t->trackSummary()==0 )
return false;
2293 double chi2 =
t->fitQuality()->chiSquared();
2294 double ndof =
t->fitQuality()->doubleNumberDoF();
2295 if( std::abs(
ndof) < 1
e-2 )
return false;
2297 if( chi2_ov_ndof > TRKCUT_CHI2_OV_NDOF )
return false;
2305 if(
pt < TRKCUT_PT )
return false;
2308 double d0 =
t->perigeeParameters()->parameters()[
Trk::d0];
2309 if( std::abs(
d0) > TRKCUT_D0 )
return false;
2314 int n_hits_inner = n_hits_innermost + n_hits_next_to_innermost;
2317 if( n_hits_inner < TRKCUT_N_HITS_INNER )
return false;
2318 if( n_hits_pix < TRKCUT_N_HITS_PIX )
return false;
2319 if( (n_hits_pix+n_hits_sct) < TRKCUT_N_HITS )
return false;
2327 const int N_FREE_PIX_HITS_CUT = 2;
2329 std::set<const Trk::PrepRawData*>
clusters;
2333 std::sort(QT.begin(), QT.end(),
2334 [](
const std::tuple<bool, double, Trk::Track*>& lhs,
const std::tuple<bool, double, Trk::Track*>& rhs) {
2335 return std::get<1>(lhs) < std::get<1>(rhs); } );
2337 for (
auto&
q : QT) {
2339 m = std::get<2>(
q)->measurementsOnTrack()->begin(),
2340 me = std::get<2>(
q)->measurementsOnTrack()->end ();
2343 for(;
m!=me; ++
m ) {
2353 if((
nf >= N_FREE_PIX_HITS_CUT) || (
nf ==
nc) ) {
2357 std::get<0>(
q) =
false;
2364 std::vector<std::tuple<bool, double, Trk::Track*>>& qualityDisFailTrks,
2365 std::vector<std::tuple<bool, double, Trk::Track*>>& qualityDisCombTrks,
2367 const std::vector<double>& v_xvtx,
2368 const std::vector<double>& v_yvtx,
2369 const std::vector<double>& v_zvtx)
const
2372 ATH_CHECK( disTrkCandHandle.
record(std::make_unique<xAOD::TrigCompositeContainer>(), std::make_unique<xAOD::TrigCompositeAuxContainer>()) );
2373 auto disTrkCandContainer = disTrkCandHandle.
ptr();
2382 auto monDisTrk =
Monitored::Group(
m_monTool, mnt_disFailTrk_n, mnt_disFailTrk_nclone, mnt_disFailTrk_ncand, mnt_disCombTrk_n, mnt_disCombTrk_nclone, mnt_disCombTrk_ncand);
2385 std::vector<Trk::Track*> tracksForIso;
2386 for (
auto t=tracks.
begin();
t!=tracks.
end(); ++
t) {
2391 const std::string
prefix =
"disTrkCand";
2395 initialDisFailTrks.
reserve(qualityDisFailTrks.size());
2396 std::vector<int> resultCodes;
2397 for(
const auto&
q : qualityDisFailTrks) {
2398 if (std::get<0>(
q)==
true) {
2402 delete std::get<2>(
q);
2405 ATH_MSG_VERBOSE(
"===> nr of disFailTrk=" << qualityDisFailTrks.size() <<
" -> clone removal=" << initialDisFailTrks.
size());
2409 int n_disFailTrkCands =
recoAndFillDisTrkCand(
prefix, &fittedDisFailTrks, tracksForIso, disTrkCandContainer, v_xvtx, v_yvtx, v_zvtx,
true);
2412 mnt_disFailTrk_n = qualityDisFailTrks.size();
2413 mnt_disFailTrk_nclone = initialDisFailTrks.
size();
2414 mnt_disFailTrk_ncand = n_disFailTrkCands;
2417 ATH_MSG_VERBOSE(
"===> nr of disCombTrk=" << qualityDisCombTrks.size() <<
" -> clone removal=" << fittedDisCombTrks.
size());
2418 int n_disCombTrkCands =
recoAndFillDisTrkCand(
prefix, &fittedDisCombTrks, tracksForIso, disTrkCandContainer, v_xvtx, v_yvtx, v_zvtx,
false);
2421 mnt_disCombTrk_n = qualityDisCombTrks.size();
2422 mnt_disCombTrk_nclone = fittedDisCombTrks.
size();
2423 mnt_disCombTrk_ncand = n_disCombTrkCands;
2425 return StatusCode::SUCCESS;
2430 const float PRESEL_PT_GEV = 5.0;
2431 const float PRESEL_REFIT_PT_GEV_P3S1 = 10.0;
2432 const double PRESEL_D0_WRTVTX = 5.0;
2433 const double PRESEL_Z0_WRTVTX = 50.0;
2436 if( trk ==
nullptr )
return false;
2439 if( cat==DisTrkCategory::Pix4l_Sct1p || cat==DisTrkCategory::Pix3l_Sct1p ) {
if( refitTrk ==
nullptr )
return false; }
2442 if( std::abs(refit_d0_wrtVtx) > PRESEL_D0_WRTVTX )
return false;
2445 if( std::abs(refit_z0_wrtVtx) > PRESEL_Z0_WRTVTX )
return false;
2448 std::vector<float> v_ptGeV;
2449 std::vector<Trk::Track*> v_trk;
2450 v_trk.push_back(trk);
2451 if( refitTrk !=
nullptr ) v_trk.push_back(refitTrk);
2452 for(
auto t : v_trk) {
2457 v_ptGeV.push_back(ptGeV);
2459 bool isLowPt =
true;
2460 for(
auto pt : v_ptGeV) {
2461 if(
pt > PRESEL_PT_GEV ) { isLowPt =
false;
break; }
2463 if( isLowPt )
return false;
2466 if( cat==DisTrkCategory::Pix3l_Sct1p ) {
2467 float refitPt = v_ptGeV[1];
2468 if( refitPt < PRESEL_REFIT_PT_GEV_P3S1 )
return false;
2477 const double PRESEL_D0_WRTVTX = 5.0;
2478 const double PRESEL_Z0_WRTVTX = 50.0;
2479 const int PRESEL_N_GOOD_BR_LAYERS_PIX = 3;
2480 const double PRESEL_CHI2_OV_NDOF_PIX_BR_CUT = 5.0;
2483 if( trk ==
nullptr )
return false;
2490 double chi2_pixbr = 0.0;
2492 int n_good_brlayers_pix = 0;
2493 for(
unsigned int ily=0; ily<=3; ily++) {
2494 if( barrelLayerInfo[ily].
nGood >= 1 ) n_good_brlayers_pix++;
2495 chi2_pixbr += barrelLayerInfo[ily].chiSq;
2496 ndof_pixbr += barrelLayerInfo[ily].nDof;
2498 if( n_good_brlayers_pix < PRESEL_N_GOOD_BR_LAYERS_PIX )
return false;
2500 if( ndof_pixbr < 1 )
return false;
2501 double chi2_ov_ndof_pixbr = chi2_pixbr / ndof_pixbr;
2502 if( chi2_ov_ndof_pixbr > PRESEL_CHI2_OV_NDOF_PIX_BR_CUT )
return false;
2505 if( std::abs(d0_wrtVtx) > PRESEL_D0_WRTVTX )
return false;
2508 if( std::abs(z0_wrtVtx) > PRESEL_Z0_WRTVTX )
return false;
2515 Trk::Track*
t,
const std::vector<double>& v_xvtx,
const std::vector<double>& v_yvtx,
const std::vector<double>& v_zvtx)
const
2520 float trk_z0 =
t->perigeeParameters()->parameters()[
Trk::z0];
2521 float z0_min = 9999;
2522 for(
unsigned int i_vtx=0; i_vtx<v_zvtx.size(); i_vtx++) {
2523 float z = v_zvtx[i_vtx];
2524 if( std::abs(trk_z0-
z) < z0_min ) {
2525 z0_min = std::abs(trk_z0-
z);
2527 vtx_x = v_xvtx[i_vtx];
2528 vtx_y = v_yvtx[i_vtx];
2534 std::unique_ptr<const Trk::TrackParameters>
tmp =
2535 m_extrapolator->extrapolateDirectly(Gaudi::Hive::currentContext(), (*(
t->perigeeParameters())), persf);
2546 int n_good_brlayers_pix = 0;
2548 for(
unsigned int ily=0; ily<8; ily++) {
2549 if( ily<=3 &&
result[ily].
nGood >= 1 ) n_good_brlayers_pix++;
2551 n_hits_sct +=
result[ily].nHits;
2558 if( n_good_brlayers_pix == 4 ) {
2559 if( n_hits_sct==0 ) { cat=DisTrkCategory::Pix4l_Sct0; }
2560 else { cat=DisTrkCategory::Pix4l_Sct1p; }
2562 else if( n_good_brlayers_pix == 3 ) {
2563 if( n_hits_sct==0 ) { cat=DisTrkCategory::Pix3l_Sct0; }
2564 else { cat=DisTrkCategory::Pix3l_Sct1p; }
2571 std::vector<Trk::Track*> vtmp;
2576 bool fillIso, std::vector<Trk::Track*>& tracksForIso)
const
2584 int n_hits_innermost=-1;
int n_hits_next_to_innermost=-1;
int n_hits_inner=-1;
int n_hits_pix=-1;
int n_hits_sct=-1;
2585 if( trk !=
nullptr ) {
2601 n_hits_inner = n_hits_innermost + n_hits_next_to_innermost;
2617 float theta_wrtVtx=0;
float eta_wrtVtx=0;
float pt_wrtVtx=0;
float d0_wrtVtx=0;
float z0_wrtVtx=0;
float phi_wrtVtx=0;
2618 if( vertexPerigee !=
nullptr ) {
2619 theta_wrtVtx = vertexPerigee->parameters()[
Trk::theta];
2621 float qOverP_wrtVtx = std::abs(vertexPerigee->parameters()[
Trk::qOverP]);
2622 if ( qOverP_wrtVtx < 1
e-12 ) qOverP_wrtVtx = 1
e-12;
2623 pt_wrtVtx =
std::sin(theta_wrtVtx)/qOverP_wrtVtx;
2624 d0_wrtVtx = vertexPerigee->parameters()[
Trk::d0];
2625 z0_wrtVtx = vertexPerigee->parameters()[
Trk::z0];
2626 phi_wrtVtx = vertexPerigee->parameters()[
Trk::phi];
2628 comp->setDetail<
float>(
prefix+
"_pt_wrtVtx", pt_wrtVtx);
2629 comp->setDetail<
float>(
prefix+
"_eta_wrtVtx", eta_wrtVtx);
2630 comp->setDetail<
float>(
prefix+
"_phi_wrtVtx", phi_wrtVtx);
2631 comp->setDetail<
float>(
prefix+
"_d0_wrtVtx", d0_wrtVtx);
2632 comp->setDetail<
float>(
prefix+
"_z0_wrtVtx", z0_wrtVtx);
2635 std::array<OneLayerInfo_t, N_BARREL_LAYERS> barrelInfo{};
2637 comp->setDetail<
float>(
prefix+
"_chi2sum_br_ibl", barrelInfo[0].chiSq);
2638 comp->setDetail<
float>(
prefix+
"_chi2sum_br_pix1", barrelInfo[1].chiSq);
2639 comp->setDetail<
float>(
prefix+
"_chi2sum_br_pix2", barrelInfo[2].chiSq);
2640 comp->setDetail<
float>(
prefix+
"_chi2sum_br_pix3", barrelInfo[3].chiSq);
2641 comp->setDetail<
float>(
prefix+
"_chi2sum_br_sct1", barrelInfo[4].chiSq);
2642 comp->setDetail<
float>(
prefix+
"_chi2sum_br_sct2", barrelInfo[5].chiSq);
2643 comp->setDetail<
float>(
prefix+
"_chi2sum_br_sct3", barrelInfo[6].chiSq);
2644 comp->setDetail<
float>(
prefix+
"_chi2sum_br_sct4", barrelInfo[7].chiSq);
2645 comp->setDetail<
float>(
prefix+
"_ndofsum_br_ibl", barrelInfo[0].nDof);
2646 comp->setDetail<
float>(
prefix+
"_ndofsum_br_pix1", barrelInfo[1].nDof);
2647 comp->setDetail<
float>(
prefix+
"_ndofsum_br_pix2", barrelInfo[2].nDof);
2648 comp->setDetail<
float>(
prefix+
"_ndofsum_br_pix3", barrelInfo[3].nDof);
2649 comp->setDetail<
float>(
prefix+
"_ndofsum_br_sct1", barrelInfo[4].nDof);
2650 comp->setDetail<
float>(
prefix+
"_ndofsum_br_sct2", barrelInfo[5].nDof);
2651 comp->setDetail<
float>(
prefix+
"_ndofsum_br_sct3", barrelInfo[6].nDof);
2652 comp->setDetail<
float>(
prefix+
"_ndofsum_br_sct4", barrelInfo[7].nDof);
2656 const float ISOL_CALC_Z0_DIFF_CUT = 2.5;
2657 const float ISOL_CALC_DR_CUT_TO_AVOID_ZERO = 0.015;
2658 float iso1_dr01=0;
float iso1_dr02=0;
2659 float iso2_dr01=0;
float iso2_dr02=0;
2660 float iso3_dr01=0;
float iso3_dr02=0;
2661 for(
auto t=tracksForIso.begin();
t!=tracksForIso.end();
t++) {
2662 float z0_t = (*t)->perigeeParameters()->parameters()[
Trk::z0];
2663 if( std::abs(z0_t -
z0) <= ISOL_CALC_Z0_DIFF_CUT ) {
2664 float theta_t = (*t)->perigeeParameters()->parameters()[
Trk::theta];
2665 float qOverP_t= std::abs((*t)->perigeeParameters()->parameters()[
Trk::qOverP]);
2666 if ( qOverP_t < 1
e-12 ) qOverP_t = 1
e-12;
2667 float pt_t =
std::sin(theta_t)/qOverP_t;
2668 float phi_t = (*t)->perigeeParameters()->parameters()[
Trk::phi];
2670 float deta = eta_t -
eta;
2671 float dphi = std::abs(phi_t -
phi);
2673 float dr = std::sqrt(deta*deta + dphi*dphi);
2674 if(
dr > ISOL_CALC_DR_CUT_TO_AVOID_ZERO && dr<0.1 && pt_t > 1.0*
Gaudi::Units::GeV ) iso1_dr01 += pt_t;
2675 if(
dr > ISOL_CALC_DR_CUT_TO_AVOID_ZERO && dr<0.2 && pt_t > 1.0*
Gaudi::Units::GeV ) iso1_dr02 += pt_t;
2677 if(
dr > ISOL_CALC_DR_CUT_TO_AVOID_ZERO && dr<0.1 && pt_t > 2.0*
Gaudi::Units::GeV ) iso2_dr01 += pt_t;
2678 if(
dr > ISOL_CALC_DR_CUT_TO_AVOID_ZERO && dr<0.2 && pt_t > 2.0*
Gaudi::Units::GeV ) iso2_dr02 += pt_t;
2680 if(
dr > ISOL_CALC_DR_CUT_TO_AVOID_ZERO && dr<0.1 && pt_t > 3.0*
Gaudi::Units::GeV ) iso3_dr01 += pt_t;
2681 if(
dr > ISOL_CALC_DR_CUT_TO_AVOID_ZERO && dr<0.2 && pt_t > 3.0*
Gaudi::Units::GeV ) iso3_dr02 += pt_t;
2684 comp->setDetail<
float>(
prefix+
"_iso1_dr01", iso1_dr01);
2685 comp->setDetail<
float>(
prefix+
"_iso1_dr02", iso1_dr02);
2686 comp->setDetail<
float>(
prefix+
"_iso2_dr01", iso2_dr01);
2687 comp->setDetail<
float>(
prefix+
"_iso2_dr02", iso2_dr02);
2688 comp->setDetail<
float>(
prefix+
"_iso3_dr01", iso3_dr01);
2689 comp->setDetail<
float>(
prefix+
"_iso3_dr02", iso3_dr02);
2696 const std::vector<double>& v_xvtx,
2697 const std::vector<double>& v_yvtx,
2698 const std::vector<double>& v_zvtx,
2703 int n_stored_tracks = 0;
2705 for (
auto trk = tracks->
begin(); trk!=tracks->
end(); ++trk) {
2709 if( ptrk ==
nullptr )
continue;
2713 std::unique_ptr<const Trk::TrackParameters> vertexPerigee =
extrapolateDisTrackToBS(ptrk,v_xvtx,v_yvtx,v_zvtx);
2716 double d0_wrtVtx = 0;
2717 double z0_wrtVtx = 0;
2718 if( vertexPerigee !=
nullptr ) {
2719 d0_wrtVtx = vertexPerigee->parameters()[
Trk::d0];
2720 z0_wrtVtx = vertexPerigee->parameters()[
Trk::z0];
2731 std::unique_ptr<Trk::Track> refit_trk =
disTrk_refit(ptrk);
2735 double refit_d0 = 0;
2736 double refit_z0 = 0;
2737 double refit_d0_wrtVtx = 0;
2738 double refit_z0_wrtVtx = 0;
2739 std::unique_ptr<const Trk::TrackParameters> refitVertexPerigee =
nullptr;
2740 if( refit_trk !=
nullptr ) {
2742 if( refitVertexPerigee ==
nullptr ) {
2748 refit_d0_wrtVtx = refitVertexPerigee->parameters()[
Trk::d0];
2749 refit_z0_wrtVtx = refitVertexPerigee->parameters()[
Trk::z0];
2750 ATH_MSG_VERBOSE(
"refit trk d0 : " << refit_d0 <<
" -> extrapolate -> " << refit_d0_wrtVtx);
2751 ATH_MSG_VERBOSE(
"refit trk z0 : " << refit_z0 <<
" -> extrapolate -> " << refit_z0_wrtVtx);
2762 comp->makePrivateStore();
2766 int is_fail = isFail ? 1 : 0;
2774 prefix = base_prefix +
"_refit";
2775 if( refit_trk !=
nullptr ) {
2788 return n_stored_tracks;
2793 std::unique_ptr<Trk::Track> newtrack =
nullptr;
2795 if(
t ==
nullptr )
return newtrack;
2802 if( origPerigee ==
nullptr )
return newtrack;
2806 std::vector<const Trk::MeasurementBase*>
vec;
2807 int n_measurements = 0;
2808 int n_measurements_refit = 0;
2810 if (recoTrackStates) {
2813 for ( ; tsosIter != tsosIterEnd; ++tsosIter) {
2820 if ( !pixclus && sctclus ) to_add =
false;
2822 vec.push_back(measurement);
2823 n_measurements_refit++;
2828 ATH_MSG_VERBOSE(
"... Nr of measurments / refit = " << n_measurements <<
" / " << n_measurements_refit);
2833 if( newtrack!=0 && newtrack.get() ) {
2848 chi2 =
t->fitQuality()->chiSquared();
2849 ndof =
t->fitQuality()->doubleNumberDoF();
2850 d0 =
t->perigeeParameters()->parameters()[
Trk::d0];
2851 z0 =
t->perigeeParameters()->parameters()[
Trk::z0];