diff --git a/Tracking/Acts/FaserActsGeometry/src/FaserActsLayerBuilder.cxx b/Tracking/Acts/FaserActsGeometry/src/FaserActsLayerBuilder.cxx index 649f2503cb69c93b96b8e454727998656898eccf..18d30a048a1f41fad4739de97eb1c22650ee2eb7 100644 --- a/Tracking/Acts/FaserActsGeometry/src/FaserActsLayerBuilder.cxx +++ b/Tracking/Acts/FaserActsGeometry/src/FaserActsLayerBuilder.cxx @@ -297,7 +297,10 @@ FaserActs::CuboidVolumeBuilder::VolumeConfig FaserActsLayerBuilder::buildDipoleV Acts::Surface::makeShared<Acts::DiscSurface>( transformCenter, rmin, rmax); - Transform3 transformInner(Translation3(0., 0., (zpos-zhalflength)*1_mm)); + // @note: 0.001 mm is added to avoid overlapping surfaces and volume boundarys; + // This can cause issue in boundary intersecton check as any tiny overstepLimit is not allowed here: + // https://github.com/acts-project/acts/blob/v32.0.2/Core/src/Geometry/TrackingVolume.cpp#L485 + Transform3 transformInner(Translation3(0., 0., (zpos-zhalflength+0.001)*1_mm)); std::shared_ptr<Acts::DiscSurface> innerBoundary = Acts::Surface::makeShared<Acts::DiscSurface>( @@ -371,7 +374,10 @@ FaserActs::CuboidVolumeBuilder::VolumeConfig FaserActsLayerBuilder::buildScintVo // surfacecfg.rBounds=rBounds; - Transform3 transformInner(Translation3(xpos*1_mm, ypos*1_mm, (zpos-zhalflength)*1_mm)); + // @note: 0.001 mm is added to avoid overlapping surfaces and volume boundarys; + // This can cause issue in boundary intersecton check as any tiny overstepLimit is not allowed here: + // https://github.com/acts-project/acts/blob/v32.0.2/Core/src/Geometry/TrackingVolume.cpp#L485 + Transform3 transformInner(Translation3(xpos*1_mm, ypos*1_mm, (zpos-zhalflength+0.001)*1_mm)); std::shared_ptr<Acts::PlaneSurface> innerBoundary = Acts::Surface::makeShared<Acts::PlaneSurface>( @@ -382,13 +388,16 @@ FaserActs::CuboidVolumeBuilder::VolumeConfig FaserActsLayerBuilder::buildScintVo Acts::Surface::makeShared<Acts::PlaneSurface>( transformCenter, rBounds); - Transform3 transformOuter(Translation3(xpos*1_mm, ypos*1_mm, (zpos+zhalflength)*1_mm)); + // @note: 0.001 mm is added to avoid overlapping surfaces and volume boundarys; + // This can cause issue in boundary intersecton check as any tiny overstepLimit is not allowed here: + // https://github.com/acts-project/acts/blob/v32.0.2/Core/src/Geometry/TrackingVolume.cpp#L485 + // @todo: since no material is mapped to trigger or dipole station, will remove the trigger/dipole station building in ACTS + Transform3 transformOuter(Translation3(xpos*1_mm, ypos*1_mm, (zpos+zhalflength-0.001)*1_mm)); std::shared_ptr<Acts::PlaneSurface> outerBoundary = Acts::Surface::makeShared<Acts::PlaneSurface>( transformOuter, rBounds); - // set bin size to 2 Acts::BinUtility materialBinUtil(2, (0.-xhalflength)*1_mm, xhalflength*1_mm, Acts::open, Acts::binX); materialBinUtil += @@ -417,6 +426,7 @@ FaserActs::CuboidVolumeBuilder::VolumeConfig FaserActsLayerBuilder::buildScintVo volumeConfig.layerCfg = layerConfigs; volumeConfig.name = name; + return volumeConfig; } diff --git a/Tracking/Acts/FaserActsKalmanFilter/python/CKF2Config.py b/Tracking/Acts/FaserActsKalmanFilter/python/CKF2Config.py index ade113b4756a687dc1d2325d1cbb37f69e2a4a02..8b64aa57d8d7927c84b31ffae8c224b9b868a3a7 100644 --- a/Tracking/Acts/FaserActsKalmanFilter/python/CKF2Config.py +++ b/Tracking/Acts/FaserActsKalmanFilter/python/CKF2Config.py @@ -115,6 +115,7 @@ def CKF2Cfg(flags, actsOutputTag, **kwargs): ckf.chi2Max = 25 # Protect against running out of memory on busy events ckf.maxSteps = 5000 + ckf.addFittedParamsToTrack = True acc.addEventAlgo(ckf) # acc.merge(CKF2_OutputCfg(flags)) return acc diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/CKF2.cxx b/Tracking/Acts/FaserActsKalmanFilter/src/CKF2.cxx index 20e645d12e8d9bbcbaf806490946cf194ceefa74..1bdb46e54bfe78763f8f65abb49132cbc0073109 100644 --- a/Tracking/Acts/FaserActsKalmanFilter/src/CKF2.cxx +++ b/Tracking/Acts/FaserActsKalmanFilter/src/CKF2.cxx @@ -245,7 +245,9 @@ StatusCode CKF2::execute() { //const auto& charge = track.charge(); ATH_MSG_DEBUG("Fitted parameters"); ATH_MSG_DEBUG(" params: " << params.transpose()); - fittedParams = Acts::BoundTrackParameters(track.referenceSurface().getSharedPtr(), track.parameters(), track.covariance(), Acts::ParticleHypothesis::muon()); + if(m_addFittedParamsToTrack){ + fittedParams = Acts::BoundTrackParameters(track.referenceSurface().getSharedPtr(), track.parameters(), track.covariance(), Acts::ParticleHypothesis::muon()); + } } else { ATH_MSG_WARNING("No fitted parameters at target position" << targetZposition); } @@ -255,7 +257,7 @@ StatusCode CKF2::execute() { //@todo: make the KF refit configurable std::unique_ptr<Trk::Track> trk2 = m_kalmanFitterTool1->fit( ctx, gctx, trk.get(), Acts::BoundVector::Zero(), m_isMC); - if (trk2) { + if (trk2 != nullptr) { outputTracks->push_back(std::move(trk2)); } else { outputTracks->push_back(std::move(trk)); @@ -270,10 +272,10 @@ StatusCode CKF2::execute() { // } if (m_statesWriter && !m_noDiagnostics) { - ATH_CHECK(m_trajectoryStatesWriterTool->write(gctx, tracks, m_isMC)); + ATH_CHECK(m_trajectoryStatesWriterTool->write(gctx, selectedTracks, m_isMC)); } if (m_summaryWriter && !m_noDiagnostics) { - ATH_CHECK(m_trajectorySummaryWriterTool->write(gctx, tracks, m_isMC)); + ATH_CHECK(m_trajectorySummaryWriterTool->write(gctx, selectedTracks, m_isMC)); } // ATH_CHECK(allTrackContainer.record(std::move(outputAllTracks))); ATH_CHECK(trackContainer.record(std::move(outputTracks))); diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/CKF2.h b/Tracking/Acts/FaserActsKalmanFilter/src/CKF2.h index 7e6810e8d3f316eac3c1c1e493b9f25b34156c3f..121770f7fb1c994ae4a3902ec7ec952335230608 100644 --- a/Tracking/Acts/FaserActsKalmanFilter/src/CKF2.h +++ b/Tracking/Acts/FaserActsKalmanFilter/src/CKF2.h @@ -96,6 +96,7 @@ private: Gaudi::Property<bool> m_resolvePassive {this, "resolvePassive", false}; Gaudi::Property<bool> m_resolveMaterial {this, "resolveMaterial", true}; Gaudi::Property<bool> m_resolveSensitive {this, "resolveSensitive", true}; + Gaudi::Property<bool> m_addFittedParamsToTrack {this, "addFittedParamsToTrack", true}; Gaudi::Property<double> m_maxSteps {this, "maxSteps", 10000}; Gaudi::Property<double> m_chi2Max {this, "chi2Max", 15}; Gaudi::Property<unsigned long> m_nMax {this, "nMax", 10};