17static std::string GIDI_basePath(
char const *a_path );
18static std::string GIDI_basePath( std::string
const a_path );
19static std::string GIDI_addPaths( std::string
const &a_base, std::string
const &a_path );
33static FileType fileType( std::string
const &a_path ) {
63 MapWalkDirectoryCallbackData( std::string
const &a_projectileID, std::string
const &a_targetID, std::string
const &a_library, std::string
const &a_evaluation ) :
88 if( ( mapWalkDirectoryCallbackData->
m_targetID ==
"" ) || ( mapWalkDirectoryCallbackData->
m_targetID == a_protareEntry->
targetID( ) ) ) {
89 if( ( mapWalkDirectoryCallbackData->
m_library ==
"" ) || ( mapWalkDirectoryCallbackData->
m_library == a_library ) ) {
112 m_name( a_node.
name( ) ),
113 m_parent( a_parent ),
115 m_cumulativePath( GIDI_addPaths( a_basePath, m_path ) ) {
161 BaseEntry( a_node, a_basePath, a_parent ),
188 std::string
const &a_library, std::string
const &a_evaluation )
const {
190 return( m_map->findProtareEntry( a_projectileID, a_targetID, a_library, a_evaluation ) );
206 std::regex
const &a_targetID, std::regex
const &a_library, std::regex
const &a_evaluation )
const {
208 return( m_map->findProtareEntries( a_protareEntries, a_projectileID, a_targetID, a_library, a_evaluation ) );
224std::string
Import::protareFilename( std::string
const &a_projectileID, std::string
const &a_targetID, std::string
const &a_library,
225 std::string
const &a_evaluation,
PathForm a_form )
const {
227 return( m_map->protareFilename( a_projectileID, a_targetID, a_library, a_evaluation, a_form ) );
240 return( m_map->availableEvaluations( a_projectileID, a_targetID ) );
252 std::string attributes;
265 BaseEntry( a_node, a_basePath, a_parent ),
311 std::string
const &a_library, std::string
const &a_evaluation )
const {
314 if( a_targetID !=
targetID( ) )
return(
nullptr );
315 if( ( a_library !=
"" ) && (
parent( )->
library( ) != a_library ) )
return(
nullptr );
316 if( ( a_evaluation ==
"" ) || ( a_evaluation ==
evaluation( ) ) )
return(
this );
333 std::regex
const &a_targetID, std::regex
const &a_library, std::regex
const &a_evaluation )
const {
335 if( regex_match( m_projectileID, a_projectileID ) ) {
336 if( regex_match( m_targetID, a_targetID ) ) {
338 if( regex_match( m_evaluation, a_evaluation ) ) a_protareEntries.push_back(
this );
354bool ProtareBase::isMatch( std::string
const &a_projectileID, std::string
const &a_targetID, std::string
const &a_evaluation )
const {
357 if( a_targetID != m_targetID )
return(
false );
358 if( a_evaluation ==
"" )
return(
true );
359 return( a_evaluation == m_evaluation );
372 m_isPhotoAtomic( false ) {
407 return(
protareSingle( a_construction, a_pops, a_particleSubstitution ) );
422 std::vector<std::string> libraries1;
437 std::string attributes;
491 std::vector<std::string> libraries1;
499 if(
parent ==
nullptr )
break;
507 return( protareTNSL );
523 std::vector<std::string> libraries1;
538 std::string attributes;
558 initialize( a_fileName, a_pops, a_parent );
572 initialize( a_node, a_fileName, a_pops, a_parent );
583void Map::initialize( std::string
const &a_fileName,
PoPI::Database const &a_pops,
Map const *a_parent ) {
591 initialize(
map, a_fileName, a_pops, a_parent );
604void Map::initialize(
HAPI::Node const &a_node, std::string
const &a_fileName,
PoPI::Database const &a_pops,
Map const *a_parent ) {
607 m_fileName = a_fileName;
609 m_projectilesLoaded =
false;
611 std::string basePath = GIDI_basePath( m_realFileName );
622 m_entries.push_back(
new Import( child, a_pops, basePath,
this ) ); }
624 m_entries.push_back(
new Protare( child, a_pops, basePath,
this ) ); }
625 else if( strcmp( child.name( ).c_str( ),
GIDI_TNSLChars ) == 0 ) {
626 m_entries.push_back(
new TNSL( child, a_pops, basePath,
this ) ); }
628 throw Exception( std::string(
"Invalid entry '" ) + child.name( ) + std::string(
"' in map file " ) + a_fileName );
638 for( std::vector<BaseEntry *>::const_iterator iter = m_entries.begin( ); iter < m_entries.end( ); ++iter )
delete *iter;
646 if( ( m_library ==
"" ) && ( m_parent !=
nullptr ) )
return( m_parent->resolvedLibrary( ) );
659 a_libraries.push_back( m_library );
660 if( m_parent !=
nullptr ) m_parent->libraries( a_libraries );
676 std::string
const &a_evaluation )
const {
680 for( std::vector<BaseEntry *>::const_iterator iter = m_entries.begin( ); iter != m_entries.end( ); ++iter ) {
681 protareEntry = (*iter)->
findProtareEntry( a_projectileID, a_targetID, a_library, a_evaluation );
682 if( protareEntry !=
nullptr )
break;
684 return( protareEntry );
700 std::regex
const &a_targetID, std::regex
const &a_library, std::regex
const &a_evaluation )
const {
702 for( std::vector<BaseEntry *>::const_iterator iter = m_entries.begin( ); iter != m_entries.end( ); ++iter ) {
703 (*iter)->findProtareEntries( a_protareEntries, a_projectileID, a_targetID, a_library, a_evaluation );
719std::string
Map::protareFilename( std::string
const &a_projectileID, std::string
const &a_targetID, std::string
const &a_library,
724 if( protareEntry !=
nullptr )
return( protareEntry->
path( a_form ) );
740 if( protareEntry ==
nullptr )
return(
false );
755 std::vector<std::string> list;
757 for( std::vector<BaseEntry *>::const_iterator iter1 = m_entries.begin( ); iter1 != m_entries.end( ); ++iter1 ) {
761 std::vector<std::string> sub_list = _mapEntry->
availableEvaluations( a_projectileID, a_targetID );
762 for( std::vector<std::string>::const_iterator iter2 = sub_list.begin( ); iter2 != sub_list.end( ); ++iter2 )
763 list.push_back( *iter2 ); }
767 if( protareEntry->
isMatch( a_projectileID, a_targetID ) ) list.push_back( protareEntry->
evaluation( ) );
788 std::string
const &a_targetID, std::string
const &a_library, std::string
const &a_evaluation,
LUPI_maybeUnused bool a_targetRequiredInGlobalPoPs,
LUPI_maybeUnused bool a_ignorePoPs )
const {
790 std::string targetID( a_targetID );
791 std::string atomicTargetID;
799 if( protareEntry !=
nullptr ) {
808 atomicTargetID = targetID;
812 if( protareEntry !=
nullptr ) {
813 particleSubstitution.insert( { atomicTargetID,
ParticleInfo( targetID, a_pops, a_pops,
true ) } );
814 atomic = protareEntry->
protare( a_construction, a_pops, particleSubstitution );
815 particleSubstitution.clear( );
821 if( protareEntry !=
nullptr ) nuclear = protareEntry->
protare( a_construction, a_pops, particleSubstitution );
826 if( protareEntry !=
nullptr ) nuclear = protareEntry->
protare( a_construction, a_pops, particleSubstitution );
829 if( nuclear ==
nullptr ) {
831 else if( atomic ==
nullptr ) {
838 protareComposite->
append( nuclear );
839 protareComposite->
append( atomic );
856std::vector<ProtareBase const *>
Map::directory( std::string
const &a_projectileID, std::string
const &a_targetID, std::string
const &a_library,
857 std::string
const &a_evaluation )
const {
878 for( std::size_t i1 = 0; i1 <
size( ); ++i1 ) {
884 Import const *mapEntry =
static_cast<Import const *
>( entry );
885 if( !mapEntry->
map( )->
walk( a_mapWalkCallBack, a_userData, a_level + 1 ) )
return(
true ); }
887 if( !a_mapWalkCallBack(
static_cast<ProtareBase const *
>( entry ), m_library, a_userData, a_level ) )
return(
true ); }
889 std::cerr <<
" ERROR: unknown map entry name: " << entry->
name( ) << std::endl;
908 std::ofstream fileio;
909 fileio.open( a_fileName.c_str( ) );
910 for( std::list<std::string>::iterator iter = writeInfo.
m_lines.begin( ); iter != writeInfo.
m_lines.end( ); ++iter ) fileio << *iter << std::endl;
925 std::string attributes;
933 for(
auto iter = m_entries.begin( ); iter != m_entries.end( ); ++iter ) (*iter)->toXMLList( a_writeInfo, indent2 );
946 std::size_t found = m_fileName.rfind(
'.' );
947 std::string
RIS_fileName( m_fileName.substr( 0, found ) );
974 if( !m_projectilesLoaded ) {
977 m_projectilesLoaded =
true;
979 return( m_projectiles );
997 if(
findProtareEntry( a_projectile, a_target ) !=
nullptr )
return( a_target );
999 if( a_pops.
exists( a_target ) ) {
1000 std::string particleID = a_pops.
final( a_target );
1007 nuclide = nucleus->nuclide( );
1010 std::string targetRegexString( isotope->chemicalElement( )->symbol( ) +
"[0-9]+" );
1012 std::vector<ProtareBase const *> protareEntries;
1013 findProtareEntries( protareEntries, std::regex( a_projectile ), std::regex( targetRegexString ) );
1014 if( protareEntries.size( ) > 0 ) {
1016 std::map<int, std::string> choices;
1017 for(
auto entryIter = protareEntries.begin( ); entryIter != protareEntries.end( ); ++entryIter ) {
1019 int diffA = nuclide->A( ) - nuclide2.
A( );
1021 choices[diffA] = nuclide2.
ID( );
1026 for(
int doTwo = 0; doTwo < 2; ++doTwo ) {
1027 for( std::size_t index = 0; index < choices.size( ); ++index ) {
1028 auto iter = choices.find( diff );
1029 if( iter != choices.end( ) )
return( (*iter).second );
1032 iter = choices.find( diff );
1033 if( iter != choices.end( ) )
return( (*iter).second );
1035 diff = -diff + step *
offset;
1060static std::string GIDI_basePath(
char const *a_path ) {
1064 strcpy( realPath, a_path );
1065 if( ( p1 = strrchr( realPath,
'/' ) ) !=
nullptr ) {
1068 strcpy( realPath,
"." );
1070 std::string basePath( realPath );
1081static std::string GIDI_basePath( std::string
const a_path ) {
1083 return( GIDI_basePath( a_path.c_str( ) ) );
1094static std::string GIDI_addPaths( std::string
const &a_base, std::string
const &a_path ) {
1096 std::string path( a_path );
G4ThreadLocal T * G4GeomSplitter< T >::offset
#define GIDI_MapInteractionTNSLChars
#define GIDI_MapInteractionAtomicChars
#define GIDI_projectileChars
#define GIDI_evaluationChars
#define GIDI_FILE_SEPARATOR
#define GIDI_mapFormatVersion_0_1Chars
#define GIDI_standardTargetChars
#define GIDI_protareChars
#define GIDI_MapInteractionNuclearChars
#define GIDI_interactionChars
#define GIDI_libraryChars
#define GIDI_mapFormatVersion_0_2Chars
#define GIDI_emptyFileNameChars
#define GIDI_standardEvaluationChars
#define LUPI_XML_verionEncoding
#define GNDS_formatVersion_2_0Chars
#define GNDS_formatVersion_2_0_LLNL_4Chars
std::map< G4String, G4ParticleDefinition *, std::less< G4String > > Map
PhotoMode photoMode() const
virtual EntryType entryType() const =0
void libraries(std::vector< std::string > &a_libraries) const
std::string const & name() const
BaseEntry(HAPI::Node const &a_node, std::string const &a_basePath, Map const *a_parent)
Map const * parent() const
std::string path(PathForm a_form=PathForm::real) const
std::string protareFilename(std::string const &a_projectileID, std::string const &a_targetID, std::string const &a_library="", std::string const &a_evaluation="", PathForm a_form=PathForm::real) const
void toXMLList(GUPI::WriteInfo &a_writeInfo, std::string const &a_indent="") const
Import(HAPI::Node const &a_node, PoPI::Database const &a_pops, std::string const &a_basePath, Map const *a_parent)
ProtareBase const * findProtareEntry(std::string const &a_projectileID, std::string const &a_targetID, std::string const &a_library="", std::string const &a_evaluation="") const
std::vector< std::string > availableEvaluations(std::string const &a_projectileID, std::string const &a_targetID) const
void findProtareEntries(FindProtareEntries &a_protareEntries, std::regex const &a_projectileID, std::regex const &a_targetID, std::regex const &a_library=std::regex(".*"), std::regex const &a_evaluation=std::regex(".*")) const
std::string const & m_targetID
std::string const & m_library
std::string const & m_projectileID
MapWalkDirectoryCallbackData(std::string const &a_projectileID, std::string const &a_targetID, std::string const &a_library, std::string const &a_evaluation)
std::string const & m_evaluation
std::vector< ProtareBase const * > m_protareEntries
void libraries(std::vector< std::string > &a_libraries) const
void saveAs(std::string const &a_fileName) const
ProtareBase const * findProtareEntry(std::string const &a_projectileID, std::string const &a_targetID, std::string const &a_library="", std::string const &a_evaluation="") const
GIDI::Protare * protare(Construction::Settings const &a_construction, PoPI::Database const &a_pops, std::string const &a_projectileID, std::string const &a_targetID, std::string const &a_library="", std::string const &a_evaluation="", bool a_targetRequiredInGlobalPoPs=true, bool a_requiredInPoPs=true) const
std::string replacementTarget(PoPI::Database const &a_pops, std::string const &a_projectile, std::string const &a_target)
void findProtareEntries(FindProtareEntries &a_protareEntries, std::regex const &a_projectileID, std::regex const &a_targetID, std::regex const &a_library=std::regex(".*"), std::regex const &a_evaluation=std::regex(".*")) const
RISI::Projectiles const & RIS_load(std::string const &a_energyUnit)
std::string const & resolvedLibrary() const
Map(std::string const &a_fileName, PoPI::Database const &a_pops, Map const *a_parent=nullptr)
std::vector< std::string > availableEvaluations(std::string const &a_projectileID, std::string const &a_targetID) const
bool walk(MapWalkCallBack a_mapWalkCallBack, void *a_userData, int a_level=0) const
std::string RIS_fileName()
bool isTNSL_target(std::string const &a_targetID) const
void toXMLList(GUPI::WriteInfo &a_writeInfo, std::string const &a_indent="") const
std::string protareFilename(std::string const &a_projectileID, std::string const &a_targetID, std::string const &a_library="", std::string const &a_evaluation="", BaseEntry::PathForm a_form=BaseEntry::PathForm::real) const
std::vector< ProtareBase const * > directory(std::string const &a_projectileID="", std::string const &a_targetID="", std::string const &a_library="", std::string const &a_evaluation="") const
std::string const & resolvedLibrary() const
void findProtareEntries(FindProtareEntries &a_protareEntries, std::regex const &a_projectileID, std::regex const &a_targetID, std::regex const &a_library=std::regex(".*"), std::regex const &a_evaluation=std::regex(".*")) const
void setInteraction(std::string const &a_interaction)
std::string const & evaluation() const
virtual GIDI::Protare * protare(Construction::Settings const &a_construction, PoPI::Database const &a_pops, ParticleSubstitution const &a_particleSubstitution) const =0
ProtareBase const * findProtareEntry(std::string const &a_projectileID, std::string const &a_targetID, std::string const &a_library="", std::string const &a_evaluation="") const
std::string const & interaction() const
bool isMatch(std::string const &a_projectileID, std::string const &a_targetID, std::string const &a_evaluation="") const
std::string const & library() const
std::string const & projectileID() const
std::string const & targetID() const
ProtareBase(HAPI::Node const &a_node, std::string const &a_basePath, Map const *const a_map)
GIDI::ProtareSingle * protareSingle(Construction::Settings const &a_construction, PoPI::Database const &a_pops, ParticleSubstitution const &a_particleSubstitution) const
GIDI::Protare * protare(Construction::Settings const &a_construction, PoPI::Database const &a_pops, ParticleSubstitution const &a_particleSubstitution) const
void toXMLList(GUPI::WriteInfo &a_writeInfo, std::string const &a_indent="") const
GIDI::Protare * protare(Construction::Settings const &a_construction, PoPI::Database const &a_pops, ParticleSubstitution const &a_particleSubstitution) const
std::string const & standardTarget() const
TNSL(HAPI::Node const &a_node, PoPI::Database const &a_pops, std::string const &a_basePath, Map const *const a_parent)
std::string const & standardEvaluation() const
void toXMLList(GUPI::WriteInfo &a_writeInfo, std::string const &a_indent="") const
GIDI::ProtareSingle * protareSingle(Construction::Settings const &a_construction, PoPI::Database const &a_pops, ParticleSubstitution const &a_particleSubstitution) const
void append(Protare *a_protare)
void setTarget(ParticleInfo const &a_target)
void setProjectile(ParticleInfo const &a_projectile)
ParticleInfo const & target() const
ParticleInfo const & projectile() const
std::string const & moniker() const
Ancestry(std::string const &a_moniker, std::string const &a_attribute="")
void addNodeStarterEnder(std::string const &indent, std::string const &a_moniker, std::string const &a_attributes="")
void push_back(std::string const &a_line)
std::list< std::string > m_lines
void addNodeEnder(std::string const &a_moniker)
std::string incrementalIndent(std::string const &indent)
void addNodeStarter(std::string const &indent, std::string const &a_moniker, std::string const &a_attributes="")
std::string addAttribute(std::string const &a_name, std::string const &a_value) const
virtual Node first_child()=0
std::string attribute_as_string(const char *a_name) const
Node child(const char *name) const
bool isChemicalElement() const
std::string const & ID(void) const
T const & get(std::string const &a_id) const
std::string final(std::string const &a_id, bool a_returnAtMetaStableAlias=false) const
bool exists(std::string const &a_id) const
bool isParticle(std::string const &a_id) const
Particle const & particle(std::string const &a_id) const
std::string const & symbol()
int hasNucleus(void) const
bool MapWalkDirectoryCallback(ProtareBase const *a_protareEntry, std::string const &a_library, void *a_data, LUPI_maybeUnused int a_level)
void readRIS(std::string const &a_fileName, std::string const &a_energyUnit, Projectiles &a_projectiles)
bool(* MapWalkCallBack)(Map::ProtareBase const *a_protareEntry, std::string const &a_library, void *a_userData, int a_level)
std::map< std::string, ParticleInfo > ParticleSubstitution
bool exists(std::string const &a_path)
std::string realPath(std::string const &a_path)
bool compareSpecialParticleIDs(std::string const &a_id1, std::string const &a_id2)
static std::string const photon
static std::string const neutron