From c3f5f1916b08200f33612103b30c98359f3f83bd Mon Sep 17 00:00:00 2001
From: John Kenneth Anders <john.kenneth.anders@cern.ch>
Date: Mon, 11 Mar 2019 10:26:15 +0000
Subject: [PATCH] Merge branch 'PatchBeamEffectsAlgForEmptyGenEvents_21.0' into
 '21.0'

Protection for empty GenEvents in BeamEffectsAlg::patchSignalProcessVertex(...)

See merge request atlas/athena!21768
---
 .../BeamEffects/share/BeamEffectsAlg_test.ref   | 17 ++++++++++-------
 Simulation/BeamEffects/src/BeamEffectsAlg.cxx   | 15 ++++++++++-----
 .../BeamEffects/test/BeamEffectsAlg_test.cxx    |  6 ++++++
 3 files changed, 26 insertions(+), 12 deletions(-)

diff --git a/Simulation/BeamEffects/share/BeamEffectsAlg_test.ref b/Simulation/BeamEffects/share/BeamEffectsAlg_test.ref
index 7ba79842529..bb42b8c5d05 100644
--- a/Simulation/BeamEffects/share/BeamEffectsAlg_test.ref
+++ b/Simulation/BeamEffects/share/BeamEffectsAlg_test.ref
@@ -1,4 +1,4 @@
-[==========] Running 6 tests from 1 test case.
+[==========] Running 7 tests from 1 test case.
 [----------] Global test environment set-up.
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
@@ -11,14 +11,17 @@ EventLoopMgr      WARNING No events will be processed from external input.
 HistogramPersis...WARNING Histograms saving not required.
 ApplicationMgr       INFO Application Manager Initialized successfully
 ApplicationMgr Ready
-[----------] 6 tests from BeamEffectsAlg_test
+[----------] 7 tests from BeamEffectsAlg_test
 [ RUN      ] BeamEffectsAlg_test.empty_alg_execute
 ClassIDSvc           INFO  getRegistryEntries: read 1507 CLIDRegistry entries for module ALL
 BeamEffectsAlg      FATAL No input McEventCollection called GEN_EVENT in StoreGate.
 [       OK ] BeamEffectsAlg_test.empty_alg_execute (179 ms)
 [ RUN      ] BeamEffectsAlg_test.set_properties
 ClassIDSvc           INFO  getRegistryEntries: read 359 CLIDRegistry entries for module ALL
-[       OK ] BeamEffectsAlg_test.set_properties (2 ms)
+[       OK ] BeamEffectsAlg_test.set_properties (1 ms)
+[ RUN      ] BeamEffectsAlg_test.patchSignalProcessVertex_empty_GenEvent
+BeamEffectsAlg    WARNING No signal_process_vertex found. Empty GenEvent!
+[       OK ] BeamEffectsAlg_test.patchSignalProcessVertex_empty_GenEvent (0 ms)
 [ RUN      ] BeamEffectsAlg_test.signal_process_vertex_exists
 [       OK ] BeamEffectsAlg_test.signal_process_vertex_exists (1 ms)
 [ RUN      ] BeamEffectsAlg_test.add_signal_process_vertex_atlasG4
@@ -26,9 +29,9 @@ ClassIDSvc           INFO  getRegistryEntries: read 359 CLIDRegistry entries for
 [ RUN      ] BeamEffectsAlg_test.add_signal_process_vertex_isfG4
 [       OK ] BeamEffectsAlg_test.add_signal_process_vertex_isfG4 (0 ms)
 [ RUN      ] BeamEffectsAlg_test.execute_pass_through
-[       OK ] BeamEffectsAlg_test.execute_pass_through (1 ms)
-[----------] 6 tests from BeamEffectsAlg_test (183 ms total)
+[       OK ] BeamEffectsAlg_test.execute_pass_through (0 ms)
+[----------] 7 tests from BeamEffectsAlg_test (19 ms total)
 
 [----------] Global test environment tear-down
-[==========] 6 tests from 1 test case ran. (572 ms total)
-[  PASSED  ] 6 tests.
+[==========] 7 tests from 1 test case ran. (75 ms total)
+[  PASSED  ] 7 tests.
diff --git a/Simulation/BeamEffects/src/BeamEffectsAlg.cxx b/Simulation/BeamEffects/src/BeamEffectsAlg.cxx
index 75648f1fd49..7b5d6c38e74 100644
--- a/Simulation/BeamEffects/src/BeamEffectsAlg.cxx
+++ b/Simulation/BeamEffects/src/BeamEffectsAlg.cxx
@@ -101,13 +101,18 @@ namespace Simulation
         ge.set_signal_process_vertex( signalVertex );
       }
       else {
-        ATH_MSG_DEBUG("No signal_process_vertex found - using the first GenVertex in the event.");
-        HepMC::GenVertex *signalVertex = *(ge.vertices_begin());
-        ge.set_signal_process_vertex( signalVertex );
+        if (!ge.vertices_empty()) {
+          ATH_MSG_DEBUG("No signal_process_vertex found - using the first GenVertex in the event.");
+          HepMC::GenVertex *signalVertex = *(ge.vertices_begin());
+          ge.set_signal_process_vertex( signalVertex );
+        }
       }
       if( !ge.signal_process_vertex() ) { // Insanity check
-        ATH_MSG_ERROR("Failed to set signal_process_vertex for GenEvent!!");
-        return StatusCode::FAILURE;
+        if (!ge.vertices_empty()) {
+          ATH_MSG_ERROR("Failed to set signal_process_vertex for GenEvent!!");
+          return StatusCode::FAILURE;
+        }
+        ATH_MSG_WARNING("No signal_process_vertex found. Empty GenEvent!");
       }
     }
     else {
diff --git a/Simulation/BeamEffects/test/BeamEffectsAlg_test.cxx b/Simulation/BeamEffects/test/BeamEffectsAlg_test.cxx
index afac3c679c1..42e2b0b50dd 100644
--- a/Simulation/BeamEffects/test/BeamEffectsAlg_test.cxx
+++ b/Simulation/BeamEffects/test/BeamEffectsAlg_test.cxx
@@ -99,6 +99,12 @@ namespace SimTesting {
     ASSERT_TRUE( m_alg->setProperty( "ISFRun", true).isSuccess()  );
   }
 
+  TEST_F(BeamEffectsAlg_test, patchSignalProcessVertex_empty_GenEvent) {
+    HepMC::GenEvent ge;
+    ASSERT_TRUE( patchSignalProcessVertex(ge).isSuccess() );
+    ASSERT_TRUE( ge.signal_process_vertex()==nullptr );
+  }
+
   TEST_F(BeamEffectsAlg_test, signal_process_vertex_exists) {
     HepMC::GenEvent ge;
     CLHEP::HepLorentzVector myPos( 1.0, 1.0, 1.0, 1.0);
-- 
GitLab