@@ -167,11 +167,10 @@ void QSim::UploadComponents( const SSim* ssim )
167167 LOG (LEVEL ) << " propcom null, snam::PROPCOM " << snam::PROPCOM ;
168168 }
169169
170-
171170 const NP * icdf = ssim->get (snam::ICDF );
172- if ( icdf == nullptr )
171+ if ( icdf == nullptr )
173172 {
174- LOG (error ) << " icdf null, snam::ICDF " << snam::ICDF ;
173+ LOG (LEVEL ) << " no scintillation ICDF, skip QScint upload. snam::ICDF: " << snam::ICDF ;
175174 }
176175 else
177176 {
@@ -180,7 +179,6 @@ void QSim::UploadComponents( const SSim* ssim )
180179 LOG (LEVEL ) << scint->desc ();
181180 }
182181
183-
184182 // TODO: make this more like the others : acting on the available inputs rather than the mode
185183 bool is_simtrace = SEventConfig::IsRGModeSimtrace () ;
186184 if (is_simtrace == false )
@@ -324,21 +322,23 @@ void QSim::init()
324322 bool MISSING_PMT = REQUIRE_PMT == true && has_PMT == false ;
325323
326324 LOG (LEVEL )
327- << " MISSING_PMT " << ( MISSING_PMT ? " YES" : " NO " )
328- << " has_PMT " << ( has_PMT ? " YES" : " NO " )
329- << " QSim::pmt " << ( pmt ? " YES" : " NO " )
330- << " QSim::pmt->d_pmt " << ( sim->pmt ? " YES" : " NO " )
331- << " [" << _QSim__REQUIRE_PMT << " ] " << ( REQUIRE_PMT ? " YES" : " NO " )
332- ;
333-
334- LOG_IF (fatal, MISSING_PMT )
325+ << " MISSING_PMT " << (MISSING_PMT ? " YES" : " NO " )
326+ << " has_PMT " << (has_PMT ? " YES" : " NO " )
327+ << " QSim::pmt " << (pmt ? " YES" : " NO " )
328+ << " QSim::pmt->d_pmt " << (sim->pmt ? " YES" : " NO " )
329+ << " QSim::scint " << (scint ? " YES" : " NO " )
330+ << " QSim::scint->d_scint " << (sim->scint ? " YES" : " NO " )
331+ << " [" << _QSim__REQUIRE_PMT << " ] " << (REQUIRE_PMT ? " YES" : " NO " );
332+
333+ LOG_IF (fatal, MISSING_PMT )
335334 << " MISSING_PMT ABORT "
336- << " MISSING_PMT " << ( MISSING_PMT ? " YES" : " NO " )
337- << " has_PMT " << ( has_PMT ? " YES" : " NO " )
338- << " QSim::pmt " << ( pmt ? " YES" : " NO " )
339- << " QSim::pmt->d_pmt " << ( sim->pmt ? " YES" : " NO " )
340- << " [" << _QSim__REQUIRE_PMT << " ] " << ( REQUIRE_PMT ? " YES" : " NO " )
341- ;
335+ << " MISSING_PMT " << (MISSING_PMT ? " YES" : " NO " )
336+ << " has_PMT " << (has_PMT ? " YES" : " NO " )
337+ << " QSim::pmt " << (pmt ? " YES" : " NO " )
338+ << " QSim::pmt->d_pmt " << (sim->pmt ? " YES" : " NO " )
339+ << " QSim::scint " << (scint ? " YES" : " NO " )
340+ << " QSim::scint->d_scint " << (sim->scint ? " YES" : " NO " )
341+ << " [" << _QSim__REQUIRE_PMT << " ] " << (REQUIRE_PMT ? " YES" : " NO " );
342342
343343 assert (MISSING_PMT == false ) ;
344344 if (MISSING_PMT ) std::raise (SIGINT );
@@ -350,6 +350,26 @@ void QSim::init()
350350 LOG (LEVEL ) << descComponents () ;
351351}
352352
353+ bool QSim::hasScint () const
354+ {
355+ return sim != nullptr && scint != nullptr && sim->scint != nullptr ;
356+ }
357+
358+ void QSim::requireScint (const char *caller) const
359+ {
360+ bool missing_scint = hasScint () == false ;
361+
362+ LOG_IF (fatal, missing_scint)
363+ << caller << " requires scintillation data, but QSim was initialized without QScint"
364+ << " scint " << (scint ? " YES" : " NO " ) << " sim " << (sim ? " YES" : " NO " )
365+ << " sim->scint " << (sim && sim->scint ? " YES" : " NO " ) << " snam::ICDF "
366+ << snam::ICDF ;
367+
368+ assert (missing_scint == false );
369+ if (missing_scint)
370+ std::raise (SIGINT );
371+ }
372+
353373/* *
354374QSim::setLauncher
355375------------------
@@ -898,6 +918,7 @@ qsim* QSim::getDevicePtr() const
898918
899919char QSim::getScintTexFilterMode () const
900920{
921+ requireScint (" QSim::getScintTexFilterMode" );
901922 return scint->tex ->getFilterMode () ;
902923}
903924
@@ -941,25 +962,24 @@ std::string QSim::descComponents() const
941962{
942963 std::stringstream ss ;
943964 ss << std::endl
944- << " QSim::descComponents"
945- << std::endl
946- << " (QBase)base " << ( base ? " YES" : " NO " ) << std::endl
947- << " (QEvt)qev " << ( qev ? " YES" : " NO " ) << std::endl
948- << " (SEvt)sev " << ( sev ? " YES" : " NO " ) << std::endl
949- << " (QRng)rng " << ( rng ? " YES" : " NO " ) << std::endl
950- << " (QScint)scint " << ( scint ? " YES" : " NO " ) << std::endl
951- << " (QCerenkov)cerenkov " << ( cerenkov ? " YES" : " NO " ) << std::endl
952- << " (QBnd)bnd " << ( bnd ? " YES" : " NO " ) << std::endl
953- << " (QOptical)optical " << ( optical ? " YES" : " NO " ) << std::endl
954- << " (QDebug)debug_ " << ( debug_ ? " YES" : " NO " ) << std::endl
955- << " (QProp)prop " << ( prop ? " YES" : " NO " ) << std::endl
956- << " (QPMT)pmt " << ( pmt ? " YES" : " NO " ) << std::endl
957- << " (QMultiFilm)multifilm " << ( multifilm ? " YES" : " NO " ) << std::endl
958- << " (qsim)sim " << ( sim ? " YES" : " NO " ) << std::endl
959- << " (qsim)d_sim " << ( d_sim ? " YES" : " NO " ) << std::endl
960- << " (qdebug)dbg " << ( dbg ? " YES" : " NO " ) << std::endl
961- << " (qdebug)d_dbg " << ( d_dbg ? " YES" : " NO " ) << std::endl
962- ;
965+ << " QSim::descComponents" << std::endl
966+ << " (QBase)base " << (base ? " YES" : " NO " ) << std::endl
967+ << " (QEvt)qev " << (qev ? " YES" : " NO " ) << std::endl
968+ << " (SEvt)sev " << (sev ? " YES" : " NO " ) << std::endl
969+ << " (QRng)rng " << (rng ? " YES" : " NO " ) << std::endl
970+ << " (QScint)scint " << (scint ? " YES" : " NO " ) << std::endl
971+ << " (QCerenkov)cerenkov " << (cerenkov ? " YES" : " NO " ) << std::endl
972+ << " (QBnd)bnd " << (bnd ? " YES" : " NO " ) << std::endl
973+ << " (QOptical)optical " << (optical ? " YES" : " NO " ) << std::endl
974+ << " (QDebug)debug_ " << (debug_ ? " YES" : " NO " ) << std::endl
975+ << " (QProp)prop " << (prop ? " YES" : " NO " ) << std::endl
976+ << " (QPMT)pmt " << (pmt ? " YES" : " NO " ) << std::endl
977+ << " (QMultiFilm)multifilm " << (multifilm ? " YES" : " NO " ) << std::endl
978+ << " (qsim)sim " << (sim ? " YES" : " NO " ) << std::endl
979+ << " (qsim)hasScint " << (hasScint () ? " YES" : " NO " ) << std::endl
980+ << " (qsim)d_sim " << (d_sim ? " YES" : " NO " ) << std::endl
981+ << " (qdebug)dbg " << (dbg ? " YES" : " NO " ) << std::endl
982+ << " (qdebug)d_dbg " << (d_dbg ? " YES" : " NO " ) << std::endl;
963983 std::string s = ss.str ();
964984 return s ;
965985}
@@ -1171,6 +1191,7 @@ extern void QSim_scint_wavelength( dim3 numBlocks, dim3 threadsPerBlock, qsim*
11711191
11721192NP * QSim::scint_wavelength (unsigned num_wavelength, unsigned & hd_factor )
11731193{
1194+ requireScint (" QSim::scint_wavelength" );
11741195
11751196 bool qsim_disable_hd = ssys::getenvbool (" QSIM_DISABLE_HD" );
11761197 hd_factor = qsim_disable_hd ? 0u : scint->tex ->getHDFactor () ;
@@ -1239,6 +1260,8 @@ extern void QSim_dbg_gs_generate(dim3 numBlocks, dim3 threadsPerBlock, qsim* sim
12391260NP * QSim::dbg_gs_generate (unsigned num_photon, unsigned type )
12401261{
12411262 assert ( type == SCINT_GENERATE || type == CERENKOV_GENERATE );
1263+ if (type == SCINT_GENERATE )
1264+ requireScint (" QSim::dbg_gs_generate" );
12421265
12431266 configureLaunch ( num_photon, 1 );
12441267 sphoton* d_photon = QU ::device_alloc<sphoton>(num_photon, " QSim::dbg_gs_generate:num_photon" ) ;
@@ -2053,5 +2076,3 @@ std::string QSim::Switches() // static
20532076{
20542077 return Desc (' ,' );
20552078}
2056-
2057-
0 commit comments