diff --git a/Trigger/TrigFTK/FTK_DataProviderSvc/FTK_DataProviderSvc/FTK_DataProviderSvc.h b/Trigger/TrigFTK/FTK_DataProviderSvc/FTK_DataProviderSvc/FTK_DataProviderSvc.h index 811b5bf6f66d431e0b6797718a99b7563d1c2d73..e9bd4a76d19c39a1fd527eabfb78ca1399bf7388 100644 --- a/Trigger/TrigFTK/FTK_DataProviderSvc/FTK_DataProviderSvc/FTK_DataProviderSvc.h +++ b/Trigger/TrigFTK/FTK_DataProviderSvc/FTK_DataProviderSvc/FTK_DataProviderSvc.h @@ -92,7 +92,7 @@ class FTK_DataProviderSvc : public virtual IFTK_DataProviderSvc, virtual public virtual VxContainer* getVxContainer(const ftk::FTK_TrackType trackType); virtual xAOD::VertexContainer* getVertexContainer(const bool withRefit); - + StatusCode getVertexContainer(xAOD::VertexContainer* vertex, const bool withRefit); virtual void handle( const Incident &incident ); @@ -215,6 +215,8 @@ class FTK_DataProviderSvc : public virtual IFTK_DataProviderSvc, virtual public float m_dPhiCut; float m_dEtaCut; bool m_useViewContainers; + bool m_barrelOnly; + float m_barrelMaxCotTheta; }; diff --git a/Trigger/TrigFTK/FTK_DataProviderSvc/cmt/requirements b/Trigger/TrigFTK/FTK_DataProviderSvc/cmt/requirements index 2ea9b566d4932013b50e0e7a76840ec1bdbf09df..d324a438ac8e95c57c832f73186b53707af48179 100644 --- a/Trigger/TrigFTK/FTK_DataProviderSvc/cmt/requirements +++ b/Trigger/TrigFTK/FTK_DataProviderSvc/cmt/requirements @@ -36,7 +36,6 @@ use TrkParameters TrkParameters-* Tracking/TrkEvent use TrkRIO_OnTrack TrkRIO_OnTrack-* Tracking/TrkEvent use PixelConditionsServices PixelConditionsServices-* InnerDetector/InDetConditions use TrkFitterInterfaces TrkFitterInterfaces-* Tracking/TrkFitter -use IRegionSelector IRegionSelector-* DetectorDescription use TrkFitterUtils TrkFitterUtils-* Tracking/TrkFitter use TrkToolInterfaces TrkToolInterfaces-* Tracking/TrkTools use TrkTrackSummary TrkTrackSummary-* Tracking/TrkEvent diff --git a/Trigger/TrigFTK/FTK_DataProviderSvc/src/FTK_DataProviderSvc.cxx b/Trigger/TrigFTK/FTK_DataProviderSvc/src/FTK_DataProviderSvc.cxx index f4d0e3ec6da027d3d6a45d840887d466d53a2a86..5501c42c8db2d47ad6aea69245dc8508c847fbab 100644 --- a/Trigger/TrigFTK/FTK_DataProviderSvc/src/FTK_DataProviderSvc.cxx +++ b/Trigger/TrigFTK/FTK_DataProviderSvc/src/FTK_DataProviderSvc.cxx @@ -63,6 +63,7 @@ #include "VxVertex/VxContainer.h" #include "VxVertex/VxCandidate.h" +#include "IRegionSelector/IRoiDescriptor.h" #include "IRegionSelector/RoiUtil.h" #include <map> @@ -140,7 +141,9 @@ FTK_DataProviderSvc::FTK_DataProviderSvc(const std::string& name, ISvcLocator* s m_rejectBadTracks(false), m_dPhiCut(0.4), m_dEtaCut(0.6), - m_useViewContainers(true) + m_useViewContainers(true), + m_barrelOnly(false), + m_barrelMaxCotTheta(2.) { declareProperty("TrackCollectionName",m_trackCacheName); declareProperty("TrackParticleContainerName",m_trackParticleCacheName); @@ -168,6 +171,8 @@ FTK_DataProviderSvc::FTK_DataProviderSvc(const std::string& name, ISvcLocator* s declareProperty("BadTrackdPhiCut", m_dPhiCut); declareProperty("BadTrackdEtaCut", m_dEtaCut); declareProperty("UseViewContainers",m_useViewContainers); + declareProperty("BarrelOnly",m_useViewContainers); + declareProperty("BarrelMaxCotTheta",m_barrelMaxCotTheta); } FTK_DataProviderSvc::~FTK_DataProviderSvc(){ @@ -212,6 +217,7 @@ StatusCode FTK_DataProviderSvc::initialize() { ATH_MSG_INFO( "SCT_ClusterContainer name : " << m_SCT_ClusterContainerName); ATH_MSG_INFO( "PRD Truth SCT name: " << m_ftkSctTruthName); ATH_MSG_INFO( "PRD Truth Pixel name : " << m_ftkPixelTruthName); + ATH_MSG_INFO( "Maximum CotTheta for FTK Barrel set to : " << m_barrelMaxCotTheta); if (m_useViewContainers) { ATH_MSG_INFO(" Using View containers"); } else { @@ -255,8 +261,8 @@ xAOD::TrackParticleContainer* FTK_DataProviderSvc::getTrackParticlesInRoi(const // Get FTK track const FTK_RawTrack* ftk_track= m_ftk_tracks->at(ftk_track_index); // check if track is inside RoI - if (roi.isFullscan() || (RoiUtil::containsPhi( roi,ftk_track->getPhi()) && RoiUtil::contains(roi, ftk_track->getZ0(), ftk_track->getCotTh()))) { - + if (roi.isFullscan() || (RoiUtil::containsPhi(roi,ftk_track->getPhi()) && RoiUtil::contains(roi, ftk_track->getZ0(), ftk_track->getCotTh()))) { + //if (roi.isFullscan() || (roi.containsPhi(ftk_track->getPhi()) && roi.contains(ftk_track->getZ0(), ftk_track->getCotTh()))) {//Old interface if( m_refit_tp_map[ftk_track_index]>-1) { // tp is in cache @@ -297,7 +303,8 @@ xAOD::TrackParticleContainer* FTK_DataProviderSvc::getTrackParticlesInRoi(const // Get FTK track const FTK_RawTrack* ftk_track= m_ftk_tracks->at(ftk_track_index); - if (RoiUtil::containsPhi(roi,ftk_track->getPhi()) && RoiUtil::contains(roi,ftk_track->getZ0(), ftk_track->getCotTh())) { + if (RoiUtil::containsPhi(roi,ftk_track->getPhi()) && RoiUtil::contains(roi,ftk_track->getZ0(), ftk_track->getCotTh())) { + //if (roi.containsPhi(ftk_track->getPhi()) && roi.contains(ftk_track->getZ0(), ftk_track->getCotTh())) { // check track is inside RoI if( m_conv_tp_map[ftk_track_index]>-1) { @@ -341,6 +348,7 @@ xAOD::TrackParticleContainer* FTK_DataProviderSvc::getTrackParticlesInRoi(const StatusCode FTK_DataProviderSvc::fillTrackParticleCache(const bool withRefit){ ATH_MSG_DEBUG("FTK_DataProviderSvc::fillTrackParticleCache called with Refit " << withRefit); + if (initTrackParticleCache(withRefit).isFailure()) { return StatusCode::FAILURE; } @@ -559,11 +567,21 @@ VxContainer* FTK_DataProviderSvc::getVxContainer(const ftk::FTK_TrackType trackT getFTK_RawTracksFromSG(); if (!m_gotRawTracks) return userVertex; - m_raw_vx = m_RawVertexFinderTool->findVertex(m_ftk_tracks); + if (!m_barrelOnly) { + m_raw_vx = m_RawVertexFinderTool->findVertex(m_ftk_tracks); + } else { + FTK_RawTrackContainer barrel_tracks; + for (auto pTrack = m_ftk_tracks->begin(); pTrack != m_ftk_tracks->end(); pTrack++) { + if (fabs((*pTrack)->getCotTh()) < m_barrelMaxCotTheta) { + barrel_tracks.push_back(*pTrack); + } + } + m_raw_vx = m_RawVertexFinderTool->findVertex(&barrel_tracks); + } std::string cacheName=m_VxContainerCacheName+"Raw"; StatusCode sc = m_storeGate->record( m_raw_vx, cacheName); if (sc.isFailure()) { - ATH_MSG_DEBUG( "fillVxContainer: Failed to record VxCollection " << cacheName ); + ATH_MSG_DEBUG( "getVxContainer: Failed to record VxCollection " << cacheName ); delete(m_raw_vx); return userVertex; } @@ -689,6 +707,38 @@ xAOD::VertexContainer* FTK_DataProviderSvc::getVertexContainer(const bool withRe } +StatusCode FTK_DataProviderSvc::getVertexContainer(xAOD::VertexContainer* userVertex, const bool withRefit){ + + if (fillTrackParticleCache(withRefit).isFailure()) return StatusCode::SUCCESS; + + if (withRefit) { // get vertex from refitted tracks + if (!m_got_refit_vertex) { + ATH_MSG_DEBUG( "getVertexContainer: filling VertexContainer from refitted tracks "); + m_got_refit_vertex = fillVertexContainerCache(withRefit, m_refit_tp); + } + if (m_got_refit_vertex) { + ATH_MSG_DEBUG( "getVertexContainer: cache contains " << m_refit_vertex->size() << " vertices from refitted tracks"); + for (auto pv = m_refit_vertex->begin(); pv != m_refit_vertex->end(); ++pv) { + userVertex->push_back(new xAOD::Vertex(*(*pv))); + } + } + } else { // get vertex from converted tracks + if (!m_got_conv_vertex) { + ATH_MSG_DEBUG( "getVertexContainer: filling VertexContainer from converted tracks "); + m_got_conv_vertex = fillVertexContainerCache(withRefit, m_conv_tp); + } + if (m_got_conv_vertex) { + ATH_MSG_DEBUG( "getVertexContainer: cache contains " << m_conv_vertex->size() << " vertices from converted tracks"); + for (auto pv = m_conv_vertex->begin(); pv != m_conv_vertex->end(); ++pv) { + xAOD::Vertex* vert = new xAOD::Vertex(*(*pv)); + userVertex->push_back(vert); + } + } + } + return StatusCode::SUCCESS; + +} + TrackCollection* FTK_DataProviderSvc::getTracks(const bool withRefit){ @@ -743,7 +793,7 @@ TrackCollection* FTK_DataProviderSvc::getTracksInRoi(const IRoiDescriptor& roi, const FTK_RawTrack* ftk_track= m_ftk_tracks->at(ftk_track_index); if (roi.isFullscan() || (RoiUtil::containsPhi(roi,ftk_track->getPhi()) && RoiUtil::contains(roi,ftk_track->getZ0(), ftk_track->getCotTh()))) { - + //if (roi.isFullscan() || (roi.containsPhi(ftk_track->getPhi()) && roi.contains(ftk_track->getZ0(), ftk_track->getCotTh()))) { Trk::Track* track = this->getCachedTrack(ftk_track_index, withRefit); if (track != nullptr) userTracks->push_back(track); } @@ -768,6 +818,7 @@ Trk::Track* FTK_DataProviderSvc::getCachedTrack(const unsigned int ftk_track_ind // First check if the converted track is in teh cache and create it if it isn't if( m_conv_track_map[ftk_track_index]>-1) { /// Track already converted /// + ATH_MSG_VERBOSE( "m_conv_track_map[" <<ftk_track_index<<"]= "<<m_conv_track_map[ftk_track_index]); track = m_conv_tracks->at((unsigned int) m_conv_track_map[ftk_track_index]); if (track == nullptr) { ATH_MSG_VERBOSE( "getCachedTrack: failed to retrieve converted track with index " << m_conv_track_map[ftk_track_index] << " corresponding to FTK track " << ftk_track_index); @@ -929,12 +980,29 @@ StatusCode FTK_DataProviderSvc::initTrackCache(bool withRefit) { } if (m_gotRawTracks) { - - m_conv_track_map.reserve(m_ftk_tracks->size()); - m_refit_track_map.reserve(m_ftk_tracks->size()); - for (unsigned int i = 0; i!=m_ftk_tracks->size(); i++) m_conv_track_map.push_back(-1); - for (unsigned int i = 0; i!=m_ftk_tracks->size(); i++) m_refit_track_map.push_back(-1); - ATH_MSG_VERBOSE( "initTrackCache: converted track cache initialised "); + if (m_conv_track_map.size()==0) { + m_conv_track_map.reserve(m_ftk_tracks->size()); + if (!m_barrelOnly) { + for (unsigned int i = 0; i!=m_ftk_tracks->size(); i++) m_conv_track_map.push_back(-1); + } else { + unsigned int ftk_track_index = 0, nBarrel=0; + for (auto pTrack = m_ftk_tracks->begin(); pTrack != m_ftk_tracks->end(); ftk_track_index++, pTrack++){ + if (fabs((*pTrack)->getCotTh()) < m_barrelMaxCotTheta) { + m_conv_track_map.push_back(-1); + nBarrel++; + } else { + m_conv_track_map.push_back(-2); // do not use this track + } + } + } + + ATH_MSG_VERBOSE( "initTrackCache: converted track map initialised with size " << m_ftk_tracks->size()); + } + if (m_refit_track_map.size()==0) { + m_refit_track_map.reserve(m_ftk_tracks->size()); + for (unsigned int i = 0; i!=m_ftk_tracks->size(); i++) m_refit_track_map.push_back(-1); + ATH_MSG_VERBOSE( "initTrackCache: refitted track map initialised with size " << m_ftk_tracks->size()); + } } } if (withRefit) { @@ -955,8 +1023,13 @@ return (m_gotRawTracks? StatusCode::SUCCESS : StatusCode::FAILURE) ; StatusCode FTK_DataProviderSvc::initTrackParticleCache(bool withRefit) { - if (not m_gotRawTracks) return StatusCode::FAILURE; - + getFTK_RawTracksFromSG(); + if (not m_gotRawTracks) { + return StatusCode::FAILURE; + } + if (initTrackCache(withRefit).isFailure()) { + return StatusCode::FAILURE; + } if (withRefit) { @@ -984,7 +1057,7 @@ StatusCode FTK_DataProviderSvc::initTrackParticleCache(bool withRefit) { } m_refit_tp_map.reserve(m_ftk_tracks->size()); for (unsigned int i = 0; i!=m_ftk_tracks->size(); i++) m_refit_tp_map.push_back(-1); - ATH_MSG_VERBOSE( "initTrackParticleCache: cache initialized for refitted TracksParticles"); + ATH_MSG_VERBOSE( "initTrackParticleCache: map initialized for refitted TracksParticles with size " << m_ftk_tracks->size()); } } else { @@ -1012,7 +1085,7 @@ StatusCode FTK_DataProviderSvc::initTrackParticleCache(bool withRefit) { } m_conv_tp_map.reserve(m_ftk_tracks->size()); for (unsigned int i = 0; i!=m_ftk_tracks->size(); i++) m_conv_tp_map.push_back(-1); - ATH_MSG_VERBOSE( "initTrackParticleCache: cache initialized for converted TracksParticles"); + ATH_MSG_VERBOSE( "initTrackParticleCache: map initialized for converted TracksParticles, map size "<<m_ftk_tracks->size()); } }