diff --git a/Control/CalypsoExample/Reconstruction/scripts/faser_reco.py b/Control/CalypsoExample/Reconstruction/scripts/faser_reco.py index 0235dfa4f465e39327b64d88b9c38158d79703fb..f2d32291af23d8e9c696b7b6b99f74e27a9a3d12 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 964d0d5b4ed76e0abcce10b5a0c44ab4b95689a1..ade113b4756a687dc1d2325d1cbb37f69e2a4a02 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 687908a4956dcc545bc92d2806712d080e8f0fac..38afb57d5cc62f9bfe31521f15553d6a163a76c7 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 9982aa0db3ee073898821dab9bb328538a53d5c6..56f1d5afb28c703a8255ac6b5d889908cd940d2e 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 0b618a1f5403d91b9d4a12b2790d579e21cd6931..0142377a59edaadba1cae2b01377e011530f0d20 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?