From b2b8dc19ae759e67004023d407645548666a8fc8 Mon Sep 17 00:00:00 2001 From: Xiaocong Ai <xiaocong.ai@cern.ch> Date: Sun, 21 Jul 2024 14:02:30 +0200 Subject: [PATCH] fix CKF2 eventInfo and add acts output configuration in faser_reco --- .../Reconstruction/scripts/faser_reco.py | 18 +++++++++++++++--- .../FaserActsKalmanFilter/python/CKF2Config.py | 18 ++++++++++-------- .../Acts/FaserActsKalmanFilter/src/CKF2.cxx | 1 - .../src/RootTrajectoryStatesWriterTool.cxx | 1 + .../src/TrackClassification.cxx | 13 +++++++++++-- 5 files changed, 37 insertions(+), 14 deletions(-) diff --git a/Control/CalypsoExample/Reconstruction/scripts/faser_reco.py b/Control/CalypsoExample/Reconstruction/scripts/faser_reco.py index 0235dfa4f..f2d32291a 100755 --- a/Control/CalypsoExample/Reconstruction/scripts/faser_reco.py +++ b/Control/CalypsoExample/Reconstruction/scripts/faser_reco.py @@ -280,11 +280,22 @@ if useCKF: # Do both forward and backward tracking from FaserActsKalmanFilter.CKF2Config import CKF2Cfg if not args.isOverlay: - # 4-station tracks - acc.merge(CKF2Cfg(configFlags, noDiagnostics=True)) + # 4-station tracking forward + acc.merge(CKF2Cfg(configFlags, + actsOutputTag=f"{filestem}_4station_forward", + noDiagnostics=True)) + + # 4-station tracking backward + acc.merge(CKF2Cfg(configFlags, name="CKF_Back", + actsOutputTag=f"{filestem}_4station_backward", + OutputCollection="CKFTrackCollectionBackward", + BackwardPropagation=True, + noDiagnostics=True)) + # Add tracking collection with no IFT - acc.merge(CKF2Cfg(configFlags, maskedLayers=[0, 1, 2], name="CKF_woIFT", + acc.merge(CKF2Cfg(configFlags, maskedLayers=[0, 1, 2], name="CKF_woIFT", + actsOutputTag=f"{filestem}_3station_forward", OutputCollection="CKFTrackCollectionWithoutIFT", BackwardPropagation=False, noDiagnostics=True)) @@ -292,6 +303,7 @@ if useCKF: # Backward tracking with no IFT acc.merge(CKF2Cfg(configFlags, maskedLayers=[0, 1, 2], name="CKF_Back_woIFT", + actsOutputTag=f"{filestem}_3station_backward", OutputCollection="CKFTrackCollectionBackwardWithoutIFT", BackwardPropagation=True, noDiagnostics=True)) diff --git a/Tracking/Acts/FaserActsKalmanFilter/python/CKF2Config.py b/Tracking/Acts/FaserActsKalmanFilter/python/CKF2Config.py index 964d0d5b4..ade113b47 100644 --- a/Tracking/Acts/FaserActsKalmanFilter/python/CKF2Config.py +++ b/Tracking/Acts/FaserActsKalmanFilter/python/CKF2Config.py @@ -29,7 +29,7 @@ def CKF2_OutputCfg(flags): return acc -def CKF2Cfg(flags, **kwargs): +def CKF2Cfg(flags, actsOutputTag, **kwargs): # acc = ComponentAccumulator() acc = FaserSCT_GeometryCfg(flags) acc.merge(MagneticFieldSvcCfg(flags)) @@ -61,14 +61,16 @@ def CKF2Cfg(flags, **kwargs): trajectory_states_writer_tool = CompFactory.RootTrajectoryStatesWriterTool() trajectory_states_writer_tool.noDiagnostics = kwargs.get("noDiagnostics", True) + trajectory_states_writer_tool.FilePath = f"{actsOutputTag}_track_states_ckf.root" trajectory_states_writer_tool1 = CompFactory.RootTrajectoryStatesWriterTool() trajectory_states_writer_tool1.noDiagnostics = kwargs.get("noDiagnostics", True) - trajectory_states_writer_tool1.FilePath = "track_states_ckf1.root" + trajectory_states_writer_tool1.FilePath = f"{actsOutputTag}_track_states_ckf1.root" trajectory_summary_writer_tool = CompFactory.RootTrajectorySummaryWriterTool() trajectory_summary_writer_tool.noDiagnostics = kwargs.get("noDiagnostics", True) + trajectory_summary_writer_tool.FilePath = f"{actsOutputTag}_track_summary_ckf.root" trajectory_summary_writer_tool1 = CompFactory.RootTrajectorySummaryWriterTool() - trajectory_summary_writer_tool1.FilePath = "track_summary_ckf1.root" + trajectory_summary_writer_tool1.FilePath = f"{actsOutputTag}_track_summary_ckf1.root" trajectory_summary_writer_tool1.noDiagnostics = kwargs.get("noDiagnostics", True) actsExtrapolationTool = CompFactory.FaserActsExtrapolationTool("FaserActsExtrapolationTool") @@ -88,8 +90,8 @@ def CKF2Cfg(flags, **kwargs): kalman_fitter1 = CompFactory.KalmanFitterTool(name="fitterTool1") kalman_fitter1.noDiagnostics = kwargs.get("noDiagnostics", True) kalman_fitter1.ActsLogging = "INFO" - kalman_fitter1.SummaryWriter = True - kalman_fitter1.StatesWriter = False + kalman_fitter1.SummaryWriter = kwargs.get("SummaryWriter", False) + kalman_fitter1.StatesWriter = kwargs.get("StatesWriter", False) kalman_fitter1.SeedCovarianceScale = 10 kalman_fitter1.isMC = flags.Input.isMC kalman_fitter1.RootTrajectoryStatesWriterTool = trajectory_states_writer_tool1 @@ -100,13 +102,13 @@ def CKF2Cfg(flags, **kwargs): ckf.ActsLogging = "INFO" ckf.RootTrajectoryStatesWriterTool = trajectory_states_writer_tool ckf.RootTrajectorySummaryWriterTool = trajectory_summary_writer_tool - #todo + #@todo #ckf.PerformanceWriterTool = trajectory_performance_writer_tool ckf.TrackingGeometryTool=actsTrackingGeometryTool ckf.isMC = flags.Input.isMC ckf.noDiagnostics = kwargs.get("noDiagnostics", True) - ckf.SummaryWriter = True - ckf.StatesWriter = False + ckf.SummaryWriter = kwargs.get("SummaryWriter", False) + ckf.StatesWriter = kwargs.get("StatesWriter", False) ckf.PerformanceWriter = False ckf.nMax = 10 diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/CKF2.cxx b/Tracking/Acts/FaserActsKalmanFilter/src/CKF2.cxx index 687908a49..38afb57d5 100644 --- a/Tracking/Acts/FaserActsKalmanFilter/src/CKF2.cxx +++ b/Tracking/Acts/FaserActsKalmanFilter/src/CKF2.cxx @@ -217,7 +217,6 @@ StatusCode CKF2::execute() { else return false; }); - while (not allTracks.empty()) { TrackInfo selected = allTracks.front(); diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/RootTrajectoryStatesWriterTool.cxx b/Tracking/Acts/FaserActsKalmanFilter/src/RootTrajectoryStatesWriterTool.cxx index 9982aa0db..56f1d5afb 100644 --- a/Tracking/Acts/FaserActsKalmanFilter/src/RootTrajectoryStatesWriterTool.cxx +++ b/Tracking/Acts/FaserActsKalmanFilter/src/RootTrajectoryStatesWriterTool.cxx @@ -317,6 +317,7 @@ StatusCode RootTrajectoryStatesWriterTool::write(const Acts::GeometryContext& gc if (isMC) { // truthQ = 1; // truthMomentum = 1; + //@todo: this can break and the reasons needs to be understood identifyContributingParticles(*simData, track, particleHitCounts); if (not particleHitCounts.empty()) { // Get the barcode of the majority truth particle diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/TrackClassification.cxx b/Tracking/Acts/FaserActsKalmanFilter/src/TrackClassification.cxx index 0b618a1f5..0142377a5 100644 --- a/Tracking/Acts/FaserActsKalmanFilter/src/TrackClassification.cxx +++ b/Tracking/Acts/FaserActsKalmanFilter/src/TrackClassification.cxx @@ -45,8 +45,17 @@ void identifyContributingParticles( } std::vector<int> barcodes {}; // register all particles that generated this hit - IndexSourceLink sl = - state.getUncalibratedSourceLink().template get<IndexSourceLink>(); + //@todo: this can break. Need to understand the reason!!! + if(not state.hasUncalibratedSourceLink()){ + throw std::runtime_error("The measurement state does not have a source link?"); + } + Acts::SourceLink sl_acts = state.getUncalibratedSourceLink(); + IndexSourceLink sl = sl_acts.template get<IndexSourceLink>(); + // IndexSourceLink sl = + // state.getUncalibratedSourceLink().template get<IndexSourceLink>(); + if(sl.hit()==nullptr){ + throw std::runtime_error("The source hit is empty"); + } for (const Identifier &id : sl.hit()->rdoList()) { if (simDataCollection.count(id) == 0) { continue; //@todo:is this correct? -- GitLab