Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Functions
tpia_particle.cc File Reference
#include <string.h>
#include <tpia_target.h>
#include "G4Types.hh"

Go to the source code of this file.

Functions

tpia_particletpia_particle_create (statusMessageReporting *smr)
 
int tpia_particle_initialize (statusMessageReporting *, tpia_particle *particle)
 
tpia_particletpia_particle_free (statusMessageReporting *smr, tpia_particle *particle)
 
int tpia_particle_release (statusMessageReporting *smr, tpia_particle *particle)
 
int tpia_particle_freeInternalList (statusMessageReporting *smr)
 
tpia_particletpia_particle_getInternalID (statusMessageReporting *smr, const char *const name)
 
int tpia_particle_printInternalSortedList (statusMessageReporting *)
 

Function Documentation

tpia_particle* tpia_particle_create ( statusMessageReporting smr)

Definition at line 52 of file tpia_particle.cc.

References tpia_particle_initialize(), and xData_malloc2.

Referenced by tpia_particle_getInternalID().

52  {
53 
54  //tpia_particle *particle = xData_malloc2( smr, sizeof( tpia_particle ), 0, "particle" );
55  tpia_particle *particle = (tpia_particle*) xData_malloc2( smr, sizeof( tpia_particle ), 0, "particle" );
56 
57  if( particle == NULL ) return( NULL );
58  tpia_particle_initialize( smr, particle );
59  return( particle );
60 }
#define xData_malloc2(smr, size, zero, forItem)
Definition: xData.h:313
int tpia_particle_initialize(statusMessageReporting *, tpia_particle *particle)
tpia_particle* tpia_particle_free ( statusMessageReporting smr,
tpia_particle particle 
)

Definition at line 73 of file tpia_particle.cc.

References tpia_particle_s::next, tpia_particle_s::prior, tpia_particle_release(), and xData_free().

Referenced by tpia_particle_freeInternalList(), and tpia_particle_getInternalID().

73  {
74 
75  int i, j;
76  tpia_particle **p;
77 
78  for( i = 0, p = particleSortedList; i < numberOfParticles; i++, p++ ) {
79  if( *p == particle ) {
80  numberOfParticles--;
81  for( j = i; j < numberOfParticles; j++, p++ ) *p = p[1];
82  break;
83  }
84  }
85  if( particle == particleListEnd ) particleListEnd = particle->prior;
86  if( particle == particleList ) particleList = particle->next;
87  if( particle->prior != NULL ) particle->prior->next = particle->next;
88  if( particle->next != NULL ) particle->next->prior = particle->prior;
89  tpia_particle_release( smr, particle );
90  xData_free( smr, particle );
91  return( NULL );
92 }
const char * p
Definition: xmltok.h:285
void * xData_free(statusMessageReporting *smr, void *p)
Definition: xDataMisc.cc:89
tpia_particle * prior
Definition: tpia_target.h:125
tuple particleList
tpia_particle * next
Definition: tpia_target.h:126
int tpia_particle_release(statusMessageReporting *smr, tpia_particle *particle)
int tpia_particle_freeInternalList ( statusMessageReporting smr)

Definition at line 104 of file tpia_particle.cc.

References tpia_particle_free(), and xData_free().

104  {
105 
106  while( particleList != NULL ) tpia_particle_free( smr, particleList );
107  //particleSortedList = xData_free( smr, particleSortedList );
108  particleSortedList = (tpia_particle**) xData_free( smr, particleSortedList );
109  return( 0 );
110 }
void * xData_free(statusMessageReporting *smr, void *p)
Definition: xDataMisc.cc:89
tpia_particle * tpia_particle_free(statusMessageReporting *smr, tpia_particle *particle)
tpia_particle* tpia_particle_getInternalID ( statusMessageReporting smr,
const char *const  name 
)

Definition at line 114 of file tpia_particle.cc.

References tpia_particle_s::A, tpia_particle_s::fullMass_MeV, tpi_spectralID_s::level, python.hepunit::m, tpia_particle_s::m, tpia_particle_s::mass, G4INCL::Math::max(), G4INCL::Math::min(), tpi_spectralID_s::name, tpia_particle_s::name, tpia_particle_s::next, tpia_particle_s::ordinal, tpia_particle_s::prior, smr_isOk(), tpia_particle_s::spectralID, tpi_spectralID_parse(), tpia_AMU2MeV, tpia_miscNameToZAm(), tpia_particle_create(), tpia_particle_free(), tpia_particleMass_AMU(), xData_realloc2, and tpia_particle_s::Z.

Referenced by tpia_product_getFromElement(), tpia_target_heated_read(), and tpia_target_read().

114  {
115 
116  int i, iCmp, min, mid, max, Z, A, m;
117  tpia_particle *particle;
118  char *EOP;
119 
120  iCmp = 0;
121  min = mid = 0;
122  max = numberOfParticles;
123  while( min != max ) {
124  mid = ( min + max ) / 2;
125  iCmp = strcmp( name, particleSortedList[mid]->name );
126  if( iCmp == 0 ) return( particleSortedList[mid] );
127  if( iCmp < 0 ) {
128  max = mid - 1;
129  if( mid == 0 ) max = 0; }
130  else {
131  min = mid + 1;
132  if( min > max ) min = max;
133  }
134  }
135  mid = min;
136  if( numberOfParticles > 0 ) {
137  iCmp = strcmp( name, particleSortedList[mid]->name );
138  if( iCmp == 0 ) return( particleSortedList[mid] );
139  if( ( iCmp < 0 ) && ( mid != 0 ) ) {
140  mid--;
141  iCmp = strcmp( name, particleSortedList[mid]->name );
142  }
143  }
144 
145  if( ( particle = tpia_particle_create( smr ) ) == NULL ) return( NULL );
146  if( ( particle->spectralID = tpi_spectralID_parse( smr, name, &(EOP) ) ) == NULL ) return( tpia_particle_free( smr, particle ) );
147  particle->name = particle->spectralID->name;
148  if( tpia_miscNameToZAm( smr, particle->name, &Z, &A, &m ) != 0 ) return( tpia_particle_free( smr, particle ) );
149  particle->prior = NULL;
150  particle->next = NULL;
151  particle->Z = Z;
152  particle->A = A;
153  particle->m = m;
154  particle->mass = tpia_particleMass_AMU( smr, particle->name );
155  if( !smr_isOk( smr ) ) return( tpia_particle_free( smr, particle ) );
156  particle->fullMass_MeV = tpia_AMU2MeV * particle->mass + particle->spectralID->level;
157 
158  if( sizeOfParticleSortedList < ( numberOfParticles + 1 ) ) {
159  if( sizeOfParticleSortedList == 0 ) {
160  sizeOfParticleSortedList = initialSizeOfList; }
161  else {
162  sizeOfParticleSortedList += incrementalSizeOfList;
163  }
164  //if( ( particleSortedList = xData_realloc2( smr, particleSortedList, sizeOfParticleSortedList * sizeof( tpia_particle * ),
165  if( ( particleSortedList = (tpia_particle** ) xData_realloc2( smr, particleSortedList, sizeOfParticleSortedList * sizeof( tpia_particle * ),
166  "particleSortedList" ) ) == NULL ) return( tpia_particle_free( smr, particle ) );
167  }
168 
169  if( particleList == NULL ) {
170  particle->ordinal = 0;
171  particleListEnd = particleList = particle; }
172  else {
173  particle->ordinal = particleListEnd->ordinal + 1;
174  particle->prior = particleListEnd;
175  particleListEnd->next = particle;
176  particleListEnd = particle;
177  }
178 
179  if( ( mid != 0 ) || ( iCmp > 0 ) ) mid++;
180  for( i = numberOfParticles; i > mid; i-- ) particleSortedList[i] = particleSortedList[i-1];
181  particleSortedList[mid] = particle;
182  numberOfParticles++;
183 
184  return( particle );
185 }
tpi_spectralID * tpi_spectralID_parse(statusMessageReporting *smr, char const *str, char **EOP)
Definition: tpi_IDs.cc:218
const XML_Char * name
#define tpia_AMU2MeV
Definition: tpia_target.h:101
double fullMass_MeV
Definition: tpia_target.h:130
int tpia_miscNameToZAm(statusMessageReporting *smr, const char *name, int *Z, int *A, int *m)
Definition: tpia_misc.cc:105
tpi_spectralID * spectralID
Definition: tpia_target.h:132
double level
Definition: tpi_IDs.h:68
#define xData_realloc2(smr, old, size, forItem)
Definition: xData.h:314
double tpia_particleMass_AMU(statusMessageReporting *smr, const char *name)
Definition: tpia_mass.cc:887
int smr_isOk(statusMessageReporting *smr)
tpia_particle * prior
Definition: tpia_target.h:125
T max(const T t1, const T t2)
brief Return the largest of the two arguments
tuple particleList
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
tpia_particle * tpia_particle_create(statusMessageReporting *smr)
char * name
Definition: tpi_IDs.h:63
tpia_particle * next
Definition: tpia_target.h:126
tpia_particle * tpia_particle_free(statusMessageReporting *smr, tpia_particle *particle)
int tpia_particle_initialize ( statusMessageReporting ,
tpia_particle particle 
)

Definition at line 65 of file tpia_particle.cc.

Referenced by tpia_particle_create().

65  {
66 
67  memset( particle, 0, sizeof( tpia_particle ) );
68  return( 0 );
69 }
int tpia_particle_printInternalSortedList ( statusMessageReporting )

Definition at line 190 of file tpia_particle.cc.

190  {
191 
192  int i;
193 
194  for( i = 0; i < numberOfParticles; i++ ) printf( "%s\n", particleSortedList[i]->name );
195  return( 0 );
196 }
const XML_Char * name
int tpia_particle_release ( statusMessageReporting smr,
tpia_particle particle 
)

Definition at line 96 of file tpia_particle.cc.

References tpia_particle_s::spectralID, and tpi_spectralID_free().

Referenced by tpia_particle_free().

96  {
97 
98  if( particle->spectralID != NULL ) tpi_spectralID_free( smr, particle->spectralID );
99  return( 0 );
100 }
tpi_spectralID * spectralID
Definition: tpia_target.h:132
void * tpi_spectralID_free(statusMessageReporting *smr, tpi_spectralID *spectralID)
Definition: tpi_IDs.cc:191