Geant4 Cross Reference |
1 /* 2 # <<BEGIN-copyright>> 3 # <<END-copyright>> 4 */ 5 6 #ifndef PoPs_h_included 7 #define PoPs_h_included 8 9 /* Disable Effective C++ warnings in PoP code. */ 10 #if __INTEL_COMPILER > 1399 11 #pragma warning( disable:593 ) 12 #endif 13 14 #include <statusMessageReporting.h> 15 /* 16 * MPI stuff. 17 */ 18 #ifdef PoPs_MPI 19 #include <mpi.h> 20 #endif 21 22 #if defined __cplusplus 23 extern "C" { 24 namespace GIDI { 25 #endif 26 27 #define POPS_VERSION_MAJOR 1 28 #define POPS_VERSION_MINOR 0 29 #define POPS_VERSION_PATCHLEVEL 5 30 31 #define PoPs_packageSymbol "PoPs (properties of particles)" 32 #define PoPs_packageName PoPs_packageSymbol " (properties of particles)" 33 typedef struct PoP_s PoP; 34 35 enum PoPs_errorTokens { PoPs_errorToken_Okay, PoPs_errorToken_badName, PoPs_errorToken_badIndex, PoPs_errorToken_badUnitConversion }; 36 enum PoPs_genre { PoPs_genre_invalid, PoPs_genre_unknown, PoPs_genre_alias, PoPs_genre_photon, PoPs_genre_lepton, 37 PoPs_genre_quark, PoPs_genre_meson, PoPs_genre_baryon, PoPs_genre_nucleus, PoPs_genre_atom }; 38 /* 39 * In the following struct, 'index' is the index of the particle (proper or aliased) in the list of particles. If a particle 40 * is a proper particle its properIndex is -1. Otherwise, it is the index of the aliased particle's proper particle. If a proper 41 * particle does not have an aliased particle referring to it, aliasIndex is -1. If a proper particle has aliaes particles, 42 * its aliasIndex is the index of its first aliased particle. If a second alias is added to a proper particle, then its first 43 * aliased particle's aliasIndex is the index of that particle, and so on. The last aliased particle added has aliasIndex = -1. 44 */ 45 struct PoP_s { /* Any changes here must be reflected in functions PoP_initialize and PoP_copyParticle and in file PoPs_Bcast.c logic. */ 46 int index, properIndex, aliasIndex; 47 enum PoPs_genre genre; 48 char const *name; 49 int Z, A, l; 50 double mass; /* Mass to be added to base. */ 51 char const *massUnit; 52 }; 53 54 extern int PoPs_smr_ID; 55 56 const char *PoPs_version( void ); 57 int PoPs_versionMajor( void ); 58 int PoPs_versionMinor( void ); 59 int PoPs_versionPatchLevel( void ); 60 61 int PoPs_register( void ); 62 int PoPs_readDatabase( statusMessageReporting *smr, char const *fileName ); 63 int PoPs_release( statusMessageReporting *smr ); 64 PoP *PoPs_addParticleIfNeeded( statusMessageReporting *smr, PoP *pop ); 65 PoP *PoPs_copyAddParticleIfNeeded( statusMessageReporting *smr, PoP *pop ); 66 PoP *PoPs_addAliasIfNeeded( statusMessageReporting *smr, char const *name, char const *alias ); 67 int PoPs_numberOfParticle( void ); 68 int PoPs_particleIndex( char const *name ); 69 int PoPs_particleIndex_smr( statusMessageReporting *smr, char const *name, char const *file, int line, char const *func ); 70 char const *PoPs_getName_atIndex( statusMessageReporting *smr, int index ); 71 double PoPs_getMassInUnitOf( statusMessageReporting *smr, char const *name, char const *unit ); 72 double PoPs_getMassInUnitOf_atIndex( statusMessageReporting *smr, int index, char const *unit ); 73 enum PoPs_genre PoPs_getGenre( statusMessageReporting *smr, char const *name ); 74 enum PoPs_genre PoPs_getGenre_atIndex( statusMessageReporting *smr, int index ); 75 int PoPs_getZ_A_l( statusMessageReporting *smr, char const *name, int *Z, int *A, int *l ); 76 int PoPs_getZ_A_l_atIndex( statusMessageReporting *smr, int index, int *Z, int *A, int *l ); 77 int PoPs_hasNucleus( statusMessageReporting *smr, char const *name, int protonIsNucleus ); 78 int PoPs_hasNucleus_atIndex( statusMessageReporting *smr, int index, int protonIsNucleus ); 79 char const *PoPs_getAtomsName( statusMessageReporting *smr, char const *name ); 80 char const *PoPs_getAtomsName_atIndex( statusMessageReporting *smr, int index ); 81 int PoPs_getAtomsIndex( statusMessageReporting *smr, char const *name ); 82 int PoPs_getAtomsIndex_atIndex( statusMessageReporting *smr, int index ); 83 PoP *PoPs_getParticle_atIndex( int index ); 84 85 char const *PoPs_genreTokenToString( enum PoPs_genre genre ); 86 void PoPs_print( int sorted ); 87 void PoPs_write( FILE *f, int sorted ); 88 89 PoP *PoP_new( statusMessageReporting *smr ); 90 int PoP_initialize( statusMessageReporting *smr, PoP *pop ); 91 int PoP_release( PoP *pop ); 92 PoP *PoP_free( PoP *pop ); 93 int PoP_copyParticle( statusMessageReporting *smr, PoP *desc, PoP *src ); 94 PoP *PoP_makeParticle( statusMessageReporting *smr, enum PoPs_genre genre, char const *name, double mass, char const *massUnit ); 95 int PoP_setZ_A_l( statusMessageReporting *smr, PoP *pop, int Z, int A, int l ); 96 int PoP_getIndex( PoP *pop ); 97 char const *PoP_getName( PoP *pop ); 98 99 int PoPs_particleReadDatabase( statusMessageReporting *smr, char const *name ); 100 PoP *PoPs_particleCreateLoadInfo( statusMessageReporting *smr, const char *name ); 101 int PoPs_particleLoadInfo( statusMessageReporting *smr, const char *name, PoP *pop ); 102 103 double PoP_getMassInUnitOf( statusMessageReporting *smr, PoP *pop, char const *unit ); 104 105 PoP *PoP_makeAlias( statusMessageReporting *smr, char const *name, char const *alias ); 106 107 int PoPs_unitConversionRatio( char const *_from, char const *_to, double *ratio ); 108 109 int lPoPs_addParticleIfNeeded( statusMessageReporting *smr, char const *name, char const *special ); 110 111 /* 112 * MPI stuff. 113 */ 114 #ifdef PoPs_MPI 115 int PoPs_Bcast( statusMessageReporting *smr, MPI_Comm comm, int bossRank ); 116 #endif 117 118 /* Use the next function with caution as it is only for initial testing of the package and will soon be gone. */ 119 int PoPs_setBDFLS_File( char const *name ); 120 121 #if defined __cplusplus 122 } 123 } 124 #endif 125 126 #endif /* End of PoPs_h_included. */ 127