ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PoPs.h
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file PoPs.h
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 
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;
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 );
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 );
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 );
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 
90 int PoP_initialize( statusMessageReporting *smr, PoP *pop );
91 int PoP_release( PoP *pop );
92 PoP *PoP_free( PoP *pop );
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 
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. */