@@ -23,22 +23,23 @@ DBSelectView::DBSelectView(const std::shared_ptr<GOptions>& gopts, GDetectorCons
2323 dbhost = gopts->getScalarString (" sql" );
2424 experiment = gopts->getScalarString (" experiment" );
2525
26- if (sqlite3_open (dbhost.c_str (), &db) != SQLITE_OK || !isGeometryTableValid ()) {
27- std::cerr << " Database Warning: Failed to open or validate database: " << dbhost << std::endl;
28- sqlite3_close (db);
29- db = nullptr ;
26+ // try local dir, gemc installation, then example dir
27+ std::vector<std::string> dirs = {
28+ " ." ,
29+ gutilities::gemc_root ().string (),
30+ (gutilities::gemc_root () / " examples" ).string ()
31+ };
3032
31- std::filesystem::path gemcRoot = gutilities::gemc_root ();
32- dbhost = gemcRoot.string () + " /examples/gemc.db" ;
3333
34- if ( sqlite3_open (dbhost. c_str (), &db) != SQLITE_OK || ! isGeometryTableValid ()) {
35- std::cerr << " Database Error: Failed to open or validate backup database: " << dbhost << std::endl;
36- sqlite3_close (db);
37- db = nullptr ;
38- std::exit ( 1 );
39- }
40- else { std::cerr << " Database Warning: Using backup database: " << dbhost << std::endl; }
34+ auto dbPath = gutilities::searchForFileInLocations (dirs, dbhost);
35+ if (!dbPath) { log-> error ( ERR_GSQLITEERROR , " Failed to find database file. Exiting. " ); }
36+
37+ if ( sqlite3_open_v2 (dbPath. value (). c_str (), &db, SQLITE_OPEN_READONLY , nullptr ) != SQLITE_OK || ! isGeometryTableValid ()) {
38+ sqlite3_close (db );
39+ db = nullptr ;
40+ log-> error ( ERR_GSQLITEERROR , " Failed to open or validate database" , dbhost);
4141 }
42+ log->info (1 , " Opened database: " + dbhost, " found at " , dbPath.value ());
4243
4344 setupUI ();
4445
@@ -56,10 +57,7 @@ DBSelectView::DBSelectView(const std::shared_ptr<GOptions>& gopts, GDetectorCons
5657 break ;
5758 }
5859 }
59- if (!expFound) {
60- std::cerr << " Error: Experiment \" " << experiment << " \" not found in database. Exiting." << std::endl;
61- std::exit (1 );
62- }
60+ if (!expFound) { log->error (ERR_EXPERIMENTNOTFOUND , experiment, " not found in database." , dbhost); }
6361
6462 // Apply selections from GSystem objects.
6563 applyGSystemSelections ();
@@ -88,17 +86,15 @@ bool DBSelectView::isGeometryTableValid() const {
8886 sqlite3_stmt* stmt = nullptr ;
8987 const char * sql_query = " SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='geometry'" ;
9088 if (sqlite3_prepare_v2 (db, sql_query, -1 , &stmt, nullptr ) != SQLITE_OK ) {
91- std::cerr << " SQL Error: Failed to check geometry table existence: " << sqlite3_errmsg (db) << std::endl;
92- return false ;
89+ log->error (ERR_GSQLITEERROR , " SQL Error: Failed to check geometry table existence:" , sqlite3_errmsg (db));
9390 }
9491 bool tableExists = false ;
9592 if (sqlite3_step (stmt) == SQLITE_ROW ) { tableExists = sqlite3_column_int (stmt, 0 ) > 0 ; }
9693 sqlite3_finalize (stmt);
9794 if (!tableExists) return false ;
9895 sql_query = " SELECT COUNT(*) FROM geometry" ;
9996 if (sqlite3_prepare_v2 (db, sql_query, -1 , &stmt, nullptr ) != SQLITE_OK ) {
100- std::cerr << " SQL Error: Failed to count rows in geometry table: " << sqlite3_errmsg (db) << std::endl;
101- return false ;
97+ log->error (ERR_GSQLITEERROR , " SQL Error: Failed to count rows in geometry table:" , sqlite3_errmsg (db));
10298 }
10399 bool hasData = false ;
104100 if (sqlite3_step (stmt) == SQLITE_ROW ) { hasData = sqlite3_column_int (stmt, 0 ) > 0 ; }
@@ -221,10 +217,7 @@ void DBSelectView::loadExperiments() {
221217 sqlite3_stmt* stmt = nullptr ;
222218 const char * sql_query = " SELECT DISTINCT experiment FROM geometry" ;
223219 int rc = sqlite3_prepare_v2 (db, sql_query, -1 , &stmt, nullptr );
224- if (rc != SQLITE_OK ) {
225- std::cerr << " Failed to prepare experiment query: " << sqlite3_errmsg (db) << std::endl;
226- return ;
227- }
220+ if (rc != SQLITE_OK ) { log->error (ERR_GSQLITEERROR , " Failed to prepare experiment query:" , sqlite3_errmsg (db)); }
228221 while (sqlite3_step (stmt) == SQLITE_ROW ) {
229222 const char * expText = reinterpret_cast <const char *>(sqlite3_column_text (stmt, 0 ));
230223 if (expText) {
@@ -294,7 +287,7 @@ int DBSelectView::getGeometryCount(const std::string& system, const std::string&
294287 sqlite3_bind_int (stmt, 4 , run);
295288 if (sqlite3_step (stmt) == SQLITE_ROW ) { count = sqlite3_column_int (stmt, 0 ); }
296289 }
297- else { std::cerr << " getGeometryCount: prepare failed: " << sqlite3_errmsg (db) << std::endl ; }
290+ else { log-> error ( ERR_GSQLITEERROR , " SQL Error: Failed togetGeometryCounte: " , sqlite3_errmsg (db)) ; }
298291 sqlite3_finalize (stmt);
299292 return count;
300293}
@@ -333,8 +326,7 @@ bool DBSelectView::systemAvailable(const std::string& system, const std::string&
333326 std::string query = " SELECT COUNT(*) FROM geometry WHERE system = ? AND variation = ? AND run = ?" ;
334327 sqlite3_stmt* stmt = nullptr ;
335328 if (sqlite3_prepare_v2 (db, query.c_str (), -1 , &stmt, nullptr ) != SQLITE_OK ) {
336- std::cerr << " systemAvailable: prepare failed: " << sqlite3_errmsg (db) << std::endl;
337- return false ;
329+ log->error (ERR_GSQLITEERROR , " SQL Error:systemAvailable: prepare failed:e:" , sqlite3_errmsg (db));
338330 }
339331 sqlite3_bind_text (stmt, 1 , system.c_str (), -1 , SQLITE_TRANSIENT );
340332 sqlite3_bind_text (stmt, 2 , variation.c_str (), -1 , SQLITE_TRANSIENT );
@@ -503,9 +495,7 @@ void DBSelectView::reload_geometry() {
503495 log->info (0 , SFUNCTION_NAME , " : Reloading geometry..." );
504496
505497 auto reloaded_system = get_gsystems ();
506- for (auto & gsys : reloaded_system) {
507- log->info (2 , SFUNCTION_NAME , " : reloaded system: " , gsys->getName ());
508- }
498+ for (auto & gsys : reloaded_system) { log->info (2 , SFUNCTION_NAME , " : reloaded system: " , gsys->getName ()); }
509499
510500 // Reload the geometry using the updated GSystem objects.
511501 gDetectorConstruction ->reload_geometry (reloaded_system);
0 commit comments