From 0f6254409164f607956c268617f96ad9396f58e1 Mon Sep 17 00:00:00 2001 From: Chengdong Fu <fucd@ihep.ac.cn> Date: Wed, 21 Oct 2020 11:00:23 +0800 Subject: [PATCH] separate common track system by oneself --- Digitisers/SimpleDigi/src/PlanarDigiAlg.cpp | 8 +-- .../src/ForwardTrackingAlg.cpp | 4 +- .../src/SiliconTrackingAlg.cpp | 30 +++++------ .../src/SpacePointBuilderAlg.cpp | 17 +++---- .../SiliconTracking/src/TrackSubsetAlg.cpp | 4 +- .../TrackSystemSvc/ITrackSystemSvc.h | 4 +- Service/TrackSystemSvc/src/TrackSystemSvc.cpp | 50 ++++++++----------- Service/TrackSystemSvc/src/TrackSystemSvc.h | 6 +-- 8 files changed, 58 insertions(+), 65 deletions(-) diff --git a/Digitisers/SimpleDigi/src/PlanarDigiAlg.cpp b/Digitisers/SimpleDigi/src/PlanarDigiAlg.cpp index 113f2d8b..482082a0 100644 --- a/Digitisers/SimpleDigi/src/PlanarDigiAlg.cpp +++ b/Digitisers/SimpleDigi/src/PlanarDigiAlg.cpp @@ -91,10 +91,10 @@ StatusCode PlanarDigiAlg::initialize() return StatusCode::FAILURE; } - MarlinTrk::IMarlinTrkSystem* _trksystem = _trackSystemSvc->getTrackSystem(); + MarlinTrk::IMarlinTrkSystem* _trksystem = _trackSystemSvc->getTrackSystem(this); _trksystem->init(); - _trackSystemSvc->removeTrackSystem(); + _trackSystemSvc->removeTrackSystem(this); return GaudiAlgorithm::initialize(); } @@ -338,8 +338,8 @@ StatusCode PlanarDigiAlg::execute() float weight = 1.0; debug() <<" Set relation between " - << " sim hit " << SimTHit - << " to tracker hit " << trkHit + << " sim hit " << SimTHit.id() + << " to tracker hit " << trkHit.id() << " with a weight of " << weight << endmsg; trkHit.addToRawHits(SimTHit.getObjectID()); diff --git a/Reconstruction/SiliconTracking/src/ForwardTrackingAlg.cpp b/Reconstruction/SiliconTracking/src/ForwardTrackingAlg.cpp index 6833e404..7583b9f3 100644 --- a/Reconstruction/SiliconTracking/src/ForwardTrackingAlg.cpp +++ b/Reconstruction/SiliconTracking/src/ForwardTrackingAlg.cpp @@ -137,7 +137,7 @@ StatusCode ForwardTrackingAlg::initialize(){ error() << "Failed to find TrackSystemSvc ..." << endmsg; return StatusCode::FAILURE; } - _trkSystem = _trackSystemSvc->getTrackSystem(); + _trkSystem = _trackSystemSvc->getTrackSystem(this); if( _trkSystem == 0 ){ error() << "Cannot initialize MarlinTrkSystem of Type: KalTest" <<endmsg; @@ -150,7 +150,7 @@ StatusCode ForwardTrackingAlg::initialize(){ _trkSystem->setOption( MarlinTrk::IMarlinTrkSystem::CFG::useSmoothing, _SmoothOn) ; //smoothing // initialise the tracking system - //_trkSystem->init() ; + _trkSystem->init() ; /**********************************************************************************************/ /* Do a few checks, if the set parameters are right */ diff --git a/Reconstruction/SiliconTracking/src/SiliconTrackingAlg.cpp b/Reconstruction/SiliconTracking/src/SiliconTrackingAlg.cpp index 9dc29640..06822bb9 100644 --- a/Reconstruction/SiliconTracking/src/SiliconTrackingAlg.cpp +++ b/Reconstruction/SiliconTracking/src/SiliconTrackingAlg.cpp @@ -64,7 +64,7 @@ DECLARE_COMPONENT( SiliconTrackingAlg ) SiliconTrackingAlg::SiliconTrackingAlg(const std::string& name, ISvcLocator* svcLoc) : GaudiAlgorithm(name, svcLoc) { - + //_description = "Pattern recognition in silicon trackers"; _fastfitter = new MarlinTrk::HelixFit(); @@ -111,7 +111,7 @@ StatusCode SiliconTrackingAlg::initialize() { error() << "Failed to find TrackSystemSvc ..." << endmsg; return StatusCode::FAILURE; } - _trksystem = _trackSystemSvc->getTrackSystem(); + _trksystem = _trackSystemSvc->getTrackSystem(this); if( _trksystem == 0 ){ error() << "Cannot initialize MarlinTrkSystem of Type: KalTest" <<endmsg; @@ -448,12 +448,12 @@ int SiliconTrackingAlg::InitialiseFTD() { const float eps = 1.0e-07; // V must be the global z axis if( fabs(V.dot(Z)) > eps ) { - error() << "SiliconTrackingAlg: VXD Hit measurment vectors V is not in the global X-Y plane. \n\n exit(1) called from file " << __FILE__ << " and line " << __LINE__ << endmsg; + error() << "SiliconTrackingAlg: FTD Hit measurment vectors V is not in the global X-Y plane. \n\n exit(1) called from file " << __FILE__ << " and line " << __LINE__ << endmsg; exit(1); } if( fabs(U.dot(Z)) > eps ) { - error() << "SiliconTrackingAlg: VXD Hit measurment vectors U is not in the global X-Y plane. \n\n exit(1) called from file " << __FILE__ << " and line " << __LINE__ << endmsg; + error() << "SiliconTrackingAlg: FTD Hit measurment vectors U is not in the global X-Y plane. \n\n exit(1) called from file " << __FILE__ << " and line " << __LINE__ << endmsg; exit(1); } // SJA:FIXME Here dU and dV are almost certainly dX and dY ... should test ... @@ -491,7 +491,7 @@ int SiliconTrackingAlg::InitialiseFTD() { else { layer = 2*layer + 1; } - + //debug() << "_petalBasedFTDWithOverlaps = true layer->2*layer,2layer+1 according to petalIndex = " << petalIndex << endmsg; } if (layer >= _nlayersFTD) { fatal() << "SiliconTrackingAlg => fatal error in FTD : layer is outside allowed range : " << layer << " number of layers = " << _nlayersFTD << endmsg; @@ -509,7 +509,7 @@ int SiliconTrackingAlg::InitialiseFTD() { int iCode = iSemiSphere + 2*layer + 2*_nlayersFTD*iPhi; _sectorsFTD[iCode].push_back( hitExt ); - debug() << " FTD Pixel Hit added : @ " << pos[0] << " " << pos[1] << " " << pos[2] << " drphi " << hitExt->getResolutionRPhi() << " dz " << hitExt->getResolutionZ() << " iPhi = " << iPhi << " iSemiSphere " << iSemiSphere << " iCode = " << iCode << " layer = " << layer << endmsg; + debug() << " FTD Pixel Hit added : @ " << pos[0] << " " << pos[1] << " " << pos[2] << " drphi " << hitExt->getResolutionRPhi() << " dz " << hitExt->getResolutionZ() << " iPhi = " << iPhi << " iSemiSphere " << iSemiSphere << " iCode = " << iCode << " layer = " << layer << " cellID = " << hit.getCellID() << endmsg; } } // Reading out FTD SpacePoint Collection @@ -579,7 +579,6 @@ int SiliconTrackingAlg::InitialiseFTD() { unsigned int petalIndex = static_cast<unsigned int>(getModuleID(hit)); if ( _petalBasedFTDWithOverlaps == true ) { - // as we are dealing with staggered petals we will use 2*nlayers in each directions +/- z // the layers will follow the even odd numbering of the petals if ( petalIndex % 2 == 0 ) { @@ -588,7 +587,7 @@ int SiliconTrackingAlg::InitialiseFTD() { else { layer = 2*layer + 1; } - + //debug() << "_petalBasedFTDWithOverlaps = true layer->2*layer,2layer+1 according to petalIndex = " << petalIndex << endmsg; } if (layer >= _nlayersFTD) { @@ -607,7 +606,7 @@ int SiliconTrackingAlg::InitialiseFTD() { int iCode = iSemiSphere + 2*layer + 2*_nlayersFTD*iPhi; _sectorsFTD[iCode].push_back( hitExt ); - debug() << " FTD SpacePoint Hit added : @ " << pos[0] << " " << pos[1] << " " << pos[2] << " drphi " << hitExt->getResolutionRPhi() << " dz " << hitExt->getResolutionZ() << " iPhi = " << iPhi << " iSemiSphere " << iSemiSphere << " iCode = " << iCode << " layer = " << layer << endmsg; + debug() << " FTD SpacePoint Hit added : @ " << pos[0] << " " << pos[1] << " " << pos[2] << " drphi " << hitExt->getResolutionRPhi() << " dz " << hitExt->getResolutionZ() << " iPhi = " << iPhi << " iSemiSphere " << iSemiSphere << " iCode = " << iCode << " layer = " << layer << " cellID = " << hit.getCellID() << endmsg; } } @@ -677,7 +676,7 @@ int SiliconTrackingAlg::InitialiseVTX() { exit(1); } TrackerHitExtended * hitExt = new TrackerHitExtended(hit); - debug() << "Saved TrackerHit pointer in TrackerHitExtended " << ielem << ": " << hitExt->getTrackerHit() << std::endl; + //debug() << "Saved TrackerHit id in TrackerHitExtended " << ielem << ": " << hitExt->getTrackerHit().id() << std::endl; // SJA:FIXME: just use planar res for now hitExt->setResolutionRPhi(hit.getCovMatrix()[2]); @@ -799,7 +798,7 @@ int SiliconTrackingAlg::InitialiseVTX() { // or a PIXEL based SIT, using 2D TrackerHitPlane like the VXD above // by fucd //else if ( ( trkhit_P = dynamic_cast<TrackerHitPlane*>( hitCollection->getElementAt( ielem ) ) ) ) { - else if( UTIL::BitSet32( trkhit.getType() )[ 31 ]){ + else if( UTIL::BitSet32( trkhit.getType() )[ 3 ]){ // first we need to check if the measurement vectors are aligned with the global coordinates //gear::Vector3D U(1.0,trkhit_P->getU()[1],trkhit_P->getU()[0],gear::Vector3D::spherical); //gear::Vector3D V(1.0,trkhit_P->getV()[1],trkhit_P->getV()[0],gear::Vector3D::spherical); @@ -907,6 +906,7 @@ StatusCode SiliconTrackingAlg::finalize(){ //delete _trksystem ; _trksystem = 0; //delete _histos ; _histos = 0; info() << "Processed " << _nEvt << " events " << endmsg; + info() << lcio::ILDCellID0::encoder_string << " " << UTIL::ILDCellID0::encoder_string << endmsg; return GaudiAlgorithm::finalize(); } @@ -2052,7 +2052,7 @@ void SiliconTrackingAlg::AttachRemainingVTXHitsSlow() { // Here we are trying to find if a hits are too close i.e. closer than _minDistToDelta edm4hep::ConstTrackerHit trkhit1 = hit->getTrackerHit(); edm4hep::ConstTrackerHit trkhit2 = hitVector[IHIT]->getTrackerHit(); - + if ( trkhit1.getCellID() == trkhit2.getCellID() ){ // i.e. they are in the same sensor float distance = 0.; @@ -2691,9 +2691,9 @@ void SiliconTrackingAlg::FinalRefit(edm4hep::TrackCollection* trk_col) { continue ; } //TrackImpl* Track = new TrackImpl ; - auto track = trk_col->create(); + //auto track = trk_col->create(); //fucd - //edm4hep::Track track;// = new edm4hep::Track; + edm4hep::Track track;// = new edm4hep::Track; // setup initial dummy covariance matrix //std::vector<float> covMatrix; //covMatrix.resize(15); @@ -2840,7 +2840,7 @@ void SiliconTrackingAlg::FinalRefit(edm4hep::TrackCollection* trk_col) { //trk_col->addElement(Track); //fucd - //trk_col->push_back(track); + trk_col->push_back(track); for(int i=0;i<track.trackStates_size();i++){ // 1 = lcio::EVENT::TrackState::AtIP edm4hep::TrackState trkStateIP = track.getTrackStates(i); diff --git a/Reconstruction/SiliconTracking/src/SpacePointBuilderAlg.cpp b/Reconstruction/SiliconTracking/src/SpacePointBuilderAlg.cpp index e907b93a..956b4251 100644 --- a/Reconstruction/SiliconTracking/src/SpacePointBuilderAlg.cpp +++ b/Reconstruction/SiliconTracking/src/SpacePointBuilderAlg.cpp @@ -59,10 +59,10 @@ StatusCode SpacePointBuilderAlg::initialize() { return StatusCode::FAILURE; } - MarlinTrk::IMarlinTrkSystem* _trksystem = _trackSystemSvc->getTrackSystem(); + MarlinTrk::IMarlinTrkSystem* _trksystem = _trackSystemSvc->getTrackSystem(this); _trksystem->init(); - _trackSystemSvc->removeTrackSystem(); + _trackSystemSvc->removeTrackSystem(this); return GaudiAlgorithm::initialize(); } @@ -204,7 +204,8 @@ StatusCode SpacePointBuilderAlg::execute(){ spacePoint.setType( UTIL::set_bit( spacePoint.getType() , UTIL::ILDTrkHitTypeBit::COMPOSITE_SPACEPOINT ) ) ; - spCol->push_back( spacePoint ); + spCol->push_back( spacePoint ); + debug() << "Hit accepted id = " << spacePoint.id() << " cellID = " << spacePoint.getCellID() << endmsg; //debug() << "push_back space point's id=" << spCol->at(spCol->size()-1).id() << endmsg; createdSpacePoints++; @@ -433,12 +434,12 @@ edm4hep::TrackerHit SpacePointBuilderAlg::createSpacePoint( edm4hep::ConstTracke cov_plane(1,1) = (0.5 * du2) / cos2_alpha; cov_plane(2,2) = (0.5 * du2) / sin2_alpha; - debug() << "\t cov_plane = " << cov_plane << endmsg; - debug() << "\tstrip_angle = " << VA.angle(VB)/(M_PI/180) / 2.0 << " degrees " << endmsg; + debug() << "cov_plane = " << cov_plane << endmsg; + debug() << "strip_angle = " << VA.angle(VB)/(M_PI/180) / 2.0 << " degrees " << endmsg; CLHEP::HepSymMatrix cov_xyz= cov_plane.similarity(rot_sensor_matrix); - debug() << "\t cov_xyz = " << cov_xyz << endmsg; + debug() << "cov_xyz = " << cov_xyz << endmsg; std::array<float, 6> cov; //EVENT::FloatVec cov( 9 ) ; @@ -453,9 +454,7 @@ edm4hep::TrackerHit SpacePointBuilderAlg::createSpacePoint( edm4hep::ConstTracke } spacePoint.setCovMatrix(cov); - - debug() << "\tHit accepted id=" << spacePoint.id() << endmsg; - + return spacePoint; } /* diff --git a/Reconstruction/SiliconTracking/src/TrackSubsetAlg.cpp b/Reconstruction/SiliconTracking/src/TrackSubsetAlg.cpp index 2a241cf5..2efe0f52 100644 --- a/Reconstruction/SiliconTracking/src/TrackSubsetAlg.cpp +++ b/Reconstruction/SiliconTracking/src/TrackSubsetAlg.cpp @@ -63,7 +63,7 @@ StatusCode TrackSubsetAlg::initialize() { error() << "Failed to find TrackSystemSvc ..." << endmsg; return StatusCode::FAILURE; } - _trkSystem = _trackSystemSvc->getTrackSystem(); + _trkSystem = _trackSystemSvc->getTrackSystem(this); if( _trkSystem == 0 ){ error() << "Cannot initialize MarlinTrkSystem of Type: KalTest" <<endmsg; @@ -76,7 +76,7 @@ StatusCode TrackSubsetAlg::initialize() { _trkSystem->setOption( MarlinTrk::IMarlinTrkSystem::CFG::useSmoothing, _SmoothOn) ; //smoothing // initialise the tracking system - //_trkSystem->init() ; + _trkSystem->init() ; return GaudiAlgorithm::initialize(); } diff --git a/Service/TrackSystemSvc/TrackSystemSvc/ITrackSystemSvc.h b/Service/TrackSystemSvc/TrackSystemSvc/ITrackSystemSvc.h index 699d26ba..88a2d31d 100644 --- a/Service/TrackSystemSvc/TrackSystemSvc/ITrackSystemSvc.h +++ b/Service/TrackSystemSvc/TrackSystemSvc/ITrackSystemSvc.h @@ -13,9 +13,9 @@ class ITrackSystemSvc: virtual public IService { virtual ~ITrackSystemSvc() = default; //Get the track manager - virtual MarlinTrk::IMarlinTrkSystem* getTrackSystem() = 0; + virtual MarlinTrk::IMarlinTrkSystem* getTrackSystem(void* address=0) = 0; - virtual void removeTrackSystem() = 0; + virtual void removeTrackSystem(void* address=0) = 0; }; #endif diff --git a/Service/TrackSystemSvc/src/TrackSystemSvc.cpp b/Service/TrackSystemSvc/src/TrackSystemSvc.cpp index 3f1abc0d..2964fc9d 100644 --- a/Service/TrackSystemSvc/src/TrackSystemSvc.cpp +++ b/Service/TrackSystemSvc/src/TrackSystemSvc.cpp @@ -8,15 +8,15 @@ DECLARE_COMPONENT(TrackSystemSvc) TrackSystemSvc::TrackSystemSvc(const std::string& name, ISvcLocator* svc) - : base_class(name, svc), - m_trackSystem(nullptr){ + : base_class(name, svc){ } TrackSystemSvc::~TrackSystemSvc(){ } -MarlinTrk::IMarlinTrkSystem* TrackSystemSvc::getTrackSystem(){ - if(!m_trackSystem){ +MarlinTrk::IMarlinTrkSystem* TrackSystemSvc::getTrackSystem(void* address){ + std::map<void*, MarlinTrk::IMarlinTrkSystem*>::iterator it=m_trackSystems.find(address); + if(it==m_trackSystems.end()){ gear::GearMgr* mgr=0; auto _gear = service<IGearSvc>("GearSvc"); if ( !_gear ) { @@ -34,45 +34,39 @@ MarlinTrk::IMarlinTrkSystem* TrackSystemSvc::getTrackSystem(){ fatal() << "Both GearSvc and GeoSvc invalid!" << endmsg; return 0; } - - m_trackSystem = new MarlinTrk::MarlinKalTest( *mgr, _geoSvc ) ; + debug() << "GearMgr=" << mgr << " GeoSvc=" << _geoSvc << endmsg; + MarlinTrk::IMarlinTrkSystem* sys = new MarlinTrk::MarlinKalTest( *mgr, _geoSvc ); + m_trackSystems[address] = sys; + debug() << "Track system created successfully for " << address << endmsg; + return sys; } - return m_trackSystem; + return it->second; } StatusCode TrackSystemSvc::initialize(){ - - auto _gear = service<IGearSvc>("GearSvc"); - if ( !_gear ) { - error() << "Failed to find GearSvc ..." << endmsg; - return StatusCode::FAILURE; + for(std::map<void*, MarlinTrk::IMarlinTrkSystem*>::iterator it=m_trackSystems.begin();it!=m_trackSystems.end();it++){ + delete it->second; } - gear::GearMgr* mgr = _gear->getGearMgr(); + m_trackSystems.clear(); - auto _geoSvc = service<IGeoSvc>("GeoSvc"); - if ( !_geoSvc ) { - error() << "Failed to find GeoSvc ..." << endmsg; - return StatusCode::FAILURE; - } - m_trackSystem = new MarlinTrk::MarlinKalTest( *mgr, _geoSvc ) ; + m_trackSystems[0] = getTrackSystem(0); return StatusCode::SUCCESS; } -void TrackSystemSvc::removeTrackSystem(){ - if ( m_trackSystem ) { - delete m_trackSystem; - m_trackSystem = nullptr; +void TrackSystemSvc::removeTrackSystem(void* address){ + std::map<void*, MarlinTrk::IMarlinTrkSystem*>::iterator it=m_trackSystems.find(address); + if ( it!=m_trackSystems.end() ) { + delete it->second; + m_trackSystems.erase(it); } return; } StatusCode TrackSystemSvc::finalize(){ - - // if ( m_trackSystem ) { - // delete m_trackSystem; - // m_trackSystem = nullptr; - // } + for(std::map<void*, MarlinTrk::IMarlinTrkSystem*>::iterator it=m_trackSystems.begin();it!=m_trackSystems.end();it++){ + delete it->second; + } return StatusCode::SUCCESS; } diff --git a/Service/TrackSystemSvc/src/TrackSystemSvc.h b/Service/TrackSystemSvc/src/TrackSystemSvc.h index 45830a4f..b03dbd9b 100644 --- a/Service/TrackSystemSvc/src/TrackSystemSvc.h +++ b/Service/TrackSystemSvc/src/TrackSystemSvc.h @@ -9,14 +9,14 @@ class TrackSystemSvc : public extends<Service, ITrackSystemSvc>{ TrackSystemSvc(const std::string& name, ISvcLocator* svc); ~TrackSystemSvc(); - MarlinTrk::IMarlinTrkSystem* getTrackSystem() override; - void removeTrackSystem() override; + MarlinTrk::IMarlinTrkSystem* getTrackSystem(void* address=0) override; + void removeTrackSystem(void* address=0) override; StatusCode initialize() override; StatusCode finalize() override; private: - MarlinTrk::IMarlinTrkSystem* m_trackSystem; + std::map<void*, MarlinTrk::IMarlinTrkSystem*> m_trackSystems; }; #endif -- GitLab