Skip to content

Commit a6a728e

Browse files
authored
Hide known warnings and reduce verbosity related to Geant4 geometry and tracker (#2151)
* Have scoped logger truncate and remove colors from debug messages This is why the "turds" error was still showing up * Note and suppress g4 track warning messages * Improve debug message about regions * Reduce verbosity of debug messages * Suppress acknowledged warning * Fix comment * Update test to allow for fewer tangent normals
1 parent 93c89d0 commit a6a728e

File tree

6 files changed

+100
-19
lines changed

6 files changed

+100
-19
lines changed

src/geocel/GeantGeoParams.cc

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -532,10 +532,22 @@ std::vector<inp::Region> make_inp_regions(GeantGeoParams const& geo)
532532
result.push_back(region);
533533
}
534534
}
535-
CELER_LOG(debug) << "Loaded " << region_map.size() << " regions out of "
536-
<< G4RegionStore::GetInstance()->size()
537-
<< " Geant4 regions and created " << result.size()
538-
<< " new regions";
535+
536+
auto* region_store = G4RegionStore::GetInstance();
537+
CELER_ASSERT(region_store);
538+
539+
if (!region_store->empty() || !result.empty())
540+
{
541+
CELER_LOG(debug) << "Loaded " << region_map.size()
542+
<< " regions out of "
543+
<< G4RegionStore::GetInstance()->size()
544+
<< " Geant4 regions and created " << result.size()
545+
<< " new regions";
546+
}
547+
else
548+
{
549+
CELER_LOG(debug) << "Geant4 has no regions, and none were created";
550+
}
539551

540552
// Add regions to result vector
541553
for (auto&& [g4reg, volumes] : region_map)

src/geocel/GeantGeoUtils.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ std::ostream& operator<<(std::ostream& os, StreamableLV const& plv)
128128
*/
129129
void reset_geant_geometry()
130130
{
131-
CELER_LOG(status) << "Resetting Geant4 geometry stores";
131+
CELER_LOG(debug) << "Resetting Geant4 geometry stores";
132132

133133
std::string msg;
134134
{

test/PersistentSP.hh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,8 +152,8 @@ void PersistentSP<T>::Env::TearDown()
152152
}
153153
else if (use_count == 1)
154154
{
155-
CELER_LOG(info) << "Clearing persistent " << this->desc << " '"
156-
<< this->key << "'";
155+
CELER_LOG(debug) << "Clearing persistent " << this->desc << " '"
156+
<< this->key << "'";
157157
}
158158
else
159159
{

test/corecel/ScopedLogStorer.cc

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,23 @@
1313
#include "corecel/io/Logger.hh"
1414
#include "corecel/io/LoggerTypes.hh"
1515
#include "corecel/io/Repr.hh"
16+
#include "corecel/sys/Environment.hh"
1617

1718
#include "StringSimplifier.hh"
1819

1920
namespace celeritas
2021
{
2122
namespace test
2223
{
24+
namespace
25+
{
26+
void debug_clog(LogProvenance, LogLevel lev, std::string msg)
27+
{
28+
std::clog << color_code('x') << to_cstring(lev) << ": " << msg
29+
<< color_code(' ') << std::endl;
30+
}
31+
} // namespace
32+
2333
//---------------------------------------------------------------------------//
2434
/*!
2535
* Construct reference to log to temporarily replace.
@@ -59,15 +69,36 @@ ScopedLogStorer::~ScopedLogStorer()
5969

6070
//---------------------------------------------------------------------------//
6171
//! Save a log message
62-
void ScopedLogStorer::operator()(LogProvenance, LogLevel lev, std::string msg)
72+
void ScopedLogStorer::operator()(LogProvenance prov,
73+
LogLevel lev,
74+
std::string msg)
6375
{
6476
static LogLevel const debug_level
6577
= log_level_from_env("CELER_LOG_SCOPED", LogLevel::warning);
6678
if (lev >= debug_level)
6779
{
68-
std::clog << color_code('x') << to_cstring(lev) << ": " << msg
69-
<< color_code(' ') << std::endl;
80+
if (getenv_flag("CELER_LOG_SCOPED_VERBOSE", false).value)
81+
{
82+
// Print entire message
83+
debug_clog(prov, lev, msg);
84+
}
85+
else
86+
{
87+
// Strip colors and only write the first line
88+
static std::regex const strip_ansi_regex("\033\\[[0-9;]*m");
89+
auto temp_msg = std::regex_replace(msg, strip_ansi_regex, "");
90+
auto newline_pos = temp_msg.find_first_of('\n');
91+
if (newline_pos != std::string::npos)
92+
{
93+
// Erase newline and after
94+
temp_msg.erase(newline_pos);
95+
temp_msg
96+
+= "... [truncated: set CELER_LOG_SCOPED_VERBOSE to show]";
97+
}
98+
debug_clog(prov, lev, temp_msg);
99+
}
70100
}
101+
71102
if (lev < min_level_)
72103
{
73104
return;

test/geocel/CheckedGeoTrackView.cc

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -421,8 +421,9 @@ void CheckedGeoTrackView::cross_boundary()
421421
// Check for tangent crossing warning
422422
if (soft_zero(dot_product(t_->dir(), post_norm)))
423423
{
424-
CELER_LOG(warning) << "Crossed at a tangent normal "
425-
<< repr(post_norm) << ": " << *this;
424+
CELER_LOG_LOCAL(warning)
425+
<< "Crossed at a tangent normal " << repr(post_norm)
426+
<< ": post-crossing state is " << *this;
426427
}
427428
}
428429
}

test/geocel/g4/GeantGeo.test.cc

Lines changed: 44 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include <regex>
88
#include <string_view>
99
#include <G4LogicalVolume.hh>
10+
#include <G4StateManager.hh>
1011
#include <G4VSensitiveDetector.hh>
1112

1213
#include "corecel/Config.hh"
@@ -25,10 +26,8 @@
2526
#include "geocel/ScopedGeantExceptionHandler.hh"
2627
#include "geocel/ScopedGeantLogger.hh"
2728
#include "geocel/UnitUtils.hh"
28-
#include "geocel/VolumeParams.hh"
29-
#include "geocel/g4/GeantGeoData.hh"
30-
#include "geocel/g4/GeantGeoTrackView.hh"
31-
#include "geocel/inp/Model.hh"
29+
#include "geocel/VolumeParams.hh" // IWYU pragma: keep
30+
#include "geocel/inp/Model.hh" // IWYU pragma: keep
3231
#include "geocel/rasterize/SafetyImager.hh"
3332

3433
#include "GeantGeoTestBase.hh"
@@ -84,6 +83,27 @@ class GeantGeoTest : public GeantGeoTestBase
8483

8584
ScopedGeantExceptionHandler exception_handler;
8685
ScopedGeantLogger logger{celeritas::world_logger()};
86+
87+
void SetUp() override
88+
{
89+
GeantGeoTestBase::SetUp();
90+
ASSERT_TRUE(this->geometry());
91+
92+
auto* sm = G4StateManager::GetStateManager();
93+
CELER_ASSERT(sm);
94+
// Have ScopedGeantExceptionHandler treat tracking errors like runtime
95+
EXPECT_TRUE(sm->SetNewState(G4ApplicationState::G4State_EventProc));
96+
}
97+
98+
void TearDown() override
99+
{
100+
ASSERT_TRUE(this->geometry());
101+
102+
// Restore G4 state just in case it matters
103+
auto* sm = G4StateManager::GetStateManager();
104+
EXPECT_TRUE(sm->SetNewState(G4ApplicationState::G4State_PreInit));
105+
GeantGeoTestBase::TearDown();
106+
}
87107
};
88108

89109
//---------------------------------------------------------------------------//
@@ -295,7 +315,13 @@ TEST_F(FourLevelsTest, consecutive_compute)
295315

296316
TEST_F(FourLevelsTest, detailed_track)
297317
{
318+
ScopedLogStorer scoped_log_{&self_logger()};
298319
this->impl().test_detailed_tracking();
320+
321+
// "Finding next step up to ... when previous step 4 was already
322+
// calculated"
323+
static char const* const expected_log_levels[] = {"warning", "warning"};
324+
EXPECT_VEC_EQ(expected_log_levels, scoped_log_.levels()) << scoped_log_;
299325
}
300326

301327
TEST_F(FourLevelsTest, safety)
@@ -803,11 +829,14 @@ TEST_F(SimpleCmsTest, trace)
803829

804830
TEST_F(SimpleCmsTest, detailed_track)
805831
{
806-
if (CELERITAS_USE_VECGEOM && !CELERITAS_VECGEOM_SURFACE)
832+
ScopedLogStorer scoped_log_{&self_logger()};
833+
this->impl().test_detailed_tracking();
834+
if (geant4_version >= Version{11})
807835
{
808-
GTEST_SKIP() << "FIXME: VecGeom surface v1,v2 both trigger a G4 error";
836+
// G4 11.3: "Accuracy error or slightly inaccurate position shift."
837+
static char const* const expected_log_levels[] = {"error", "error"};
838+
EXPECT_VEC_EQ(expected_log_levels, scoped_log_.levels()) << scoped_log_;
809839
}
810-
this->impl().test_detailed_tracking();
811840
}
812841

813842
//---------------------------------------------------------------------------//
@@ -851,7 +880,15 @@ TEST_F(SolidsTest, accessors)
851880

852881
TEST_F(SolidsTest, trace)
853882
{
883+
ScopedLogStorer scoped_log_{&self_logger()};
854884
TestImpl(this).test_trace();
885+
if (geant4_version >= Version{11})
886+
{
887+
// G4 11.3 report normal directions perpendicular to track direction
888+
// due to coincident surfaces; and at least one of the tangents is
889+
// machine-dependent
890+
EXPECT_GE(scoped_log_.levels().size(), 3) << scoped_log_;
891+
}
855892
}
856893

857894
//---------------------------------------------------------------------------//

0 commit comments

Comments
 (0)