tpia_particle.cc File Reference

#include <string.h>
#include <tpia_target.h>

Go to the source code of this file.

Functions

tpia_particle * tpia_particle_create (statusMessageReporting *smr)
int tpia_particle_initialize (statusMessageReporting *, tpia_particle *particle)
tpia_particle * tpia_particle_free (statusMessageReporting *smr, tpia_particle *particle)
int tpia_particle_release (statusMessageReporting *smr, tpia_particle *particle)
int tpia_particle_freeInternalList (statusMessageReporting *smr)
tpia_particle * tpia_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 51 of file tpia_particle.cc.

References tpia_particle_initialize().

Referenced by tpia_particle_getInternalID().

00051                                                                    {
00052 
00053     //tpia_particle *particle = xData_malloc2( smr, sizeof( tpia_particle ), 0, "particle" );
00054     tpia_particle *particle = (tpia_particle*) xData_malloc2( smr, sizeof( tpia_particle ), 0, "particle" );
00055 
00056     if( particle == NULL ) return( NULL );
00057     tpia_particle_initialize( smr, particle );
00058     return( particle );
00059 }

tpia_particle* tpia_particle_free ( statusMessageReporting *  smr,
tpia_particle *  particle 
)

Definition at line 72 of file tpia_particle.cc.

References tpia_particle_release(), and xData_free().

Referenced by tpia_particle_freeInternalList(), and tpia_particle_getInternalID().

00072                                                                                           {
00073 
00074     int i, j;
00075     tpia_particle **p;
00076 
00077     for( i = 0, p = particleSortedList; i < numberOfParticles; i++, p++ ) {
00078         if( *p == particle ) {
00079             numberOfParticles--;
00080             for( j = i; j < numberOfParticles; j++, p++ ) *p = p[1];
00081             break;
00082         }
00083     }
00084     if( particle == particleListEnd ) particleListEnd = particle->prior;
00085     if( particle == particleList ) particleList = particle->next;
00086     if( particle->prior != NULL ) particle->prior->next = particle->next;
00087     if( particle->next != NULL ) particle->next->prior = particle->prior;
00088     tpia_particle_release( smr, particle );
00089     xData_free( smr, particle );
00090     return( NULL );
00091 }

int tpia_particle_freeInternalList ( statusMessageReporting *  smr  ) 

Definition at line 103 of file tpia_particle.cc.

References tpia_particle_free(), and xData_free().

00103                                                                   {
00104 
00105     while( particleList != NULL ) tpia_particle_free( smr, particleList );
00106     //particleSortedList = xData_free( smr, particleSortedList );
00107     particleSortedList = (tpia_particle**) xData_free( smr, particleSortedList );
00108     return( 0 );
00109 }

tpia_particle* tpia_particle_getInternalID ( statusMessageReporting *  smr,
const char *const   name 
)

Definition at line 113 of file tpia_particle.cc.

References smr_isOk(), tpi_spectralID_parse(), tpia_miscNameToZAm(), tpia_particle_create(), tpia_particle_free(), and tpia_particleMass_AMU().

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

00113                                                                                                    {
00114 
00115     int i, iCmp, min, mid, max, Z, A, m;
00116     tpia_particle *particle;
00117     char *EOP;
00118 
00119     iCmp = 0;
00120     min = mid = 0;
00121     max = numberOfParticles;
00122     while( min != max ) {
00123         mid = ( min + max ) / 2;
00124         iCmp = strcmp( name, particleSortedList[mid]->name );
00125         if( iCmp == 0 ) return( particleSortedList[mid] );
00126         if( iCmp < 0 ) {
00127             max = mid - 1;
00128             if( mid == 0 ) max = 0; }
00129         else {
00130             min = mid + 1;
00131             if( min > max ) min = max;
00132         }
00133     }
00134     mid = min;
00135     if( numberOfParticles > 0 ) {
00136         iCmp = strcmp( name, particleSortedList[mid]->name );
00137         if( iCmp == 0 ) return( particleSortedList[mid] );
00138         if( ( iCmp < 0 ) && ( mid != 0 ) ) {
00139             mid--;
00140             iCmp = strcmp( name, particleSortedList[mid]->name );
00141         }
00142     }
00143 
00144     if( ( particle = tpia_particle_create( smr ) ) == NULL ) return( NULL );
00145     if( ( particle->spectralID = tpi_spectralID_parse( smr, name, &(EOP) ) ) == NULL ) return( tpia_particle_free( smr, particle ) );
00146     particle->name = particle->spectralID->name;
00147     if( tpia_miscNameToZAm( smr, particle->name, &Z, &A, &m ) != 0 ) return( tpia_particle_free( smr, particle ) );
00148     particle->prior = NULL;
00149     particle->next = NULL;
00150     particle->Z = Z;
00151     particle->A = A;
00152     particle->m = m;
00153     particle->mass = tpia_particleMass_AMU( smr, particle->name );
00154     if( !smr_isOk( smr ) ) return( tpia_particle_free( smr, particle ) );
00155     particle->fullMass_MeV = tpia_AMU2MeV * particle->mass + particle->spectralID->level;
00156 
00157     if( sizeOfParticleSortedList < ( numberOfParticles + 1 ) ) {
00158         if( sizeOfParticleSortedList == 0 ) {
00159             sizeOfParticleSortedList = initialSizeOfList; }
00160         else {
00161             sizeOfParticleSortedList += incrementalSizeOfList;
00162         }
00163         //if( ( particleSortedList = xData_realloc2( smr, particleSortedList, sizeOfParticleSortedList * sizeof( tpia_particle * ), 
00164         if( ( particleSortedList = (tpia_particle** ) xData_realloc2( smr, particleSortedList, sizeOfParticleSortedList * sizeof( tpia_particle * ), 
00165             "particleSortedList" ) ) == NULL ) return( tpia_particle_free( smr, particle ) );
00166     }
00167 
00168     if( particleList == NULL ) {
00169         particle->ordinal = 0;
00170         particleListEnd = particleList = particle; }
00171     else {
00172         particle->ordinal = particleListEnd->ordinal + 1;
00173         particle->prior = particleListEnd;
00174         particleListEnd->next = particle;
00175         particleListEnd = particle;
00176     }
00177 
00178     if( ( mid != 0 ) || ( iCmp > 0 ) ) mid++;
00179     for( i = numberOfParticles; i > mid; i-- ) particleSortedList[i] = particleSortedList[i-1];
00180     particleSortedList[mid] = particle;
00181     numberOfParticles++;
00182 
00183     return( particle );
00184 }

int tpia_particle_initialize ( statusMessageReporting *  ,
tpia_particle *  particle 
)

Definition at line 64 of file tpia_particle.cc.

Referenced by tpia_particle_create().

00064                                                                                   {
00065 
00066     memset( particle, 0, sizeof( tpia_particle ) );
00067     return( 0 );
00068 }

int tpia_particle_printInternalSortedList ( statusMessageReporting *   ) 

Definition at line 189 of file tpia_particle.cc.

00189                                                                       {
00190 
00191     int i;
00192 
00193     for( i = 0; i < numberOfParticles; i++ ) printf( "%s\n", particleSortedList[i]->name );
00194     return( 0 );
00195 }

int tpia_particle_release ( statusMessageReporting *  smr,
tpia_particle *  particle 
)

Definition at line 95 of file tpia_particle.cc.

References tpi_spectralID_free().

Referenced by tpia_particle_free().

00095                                                                                   {
00096 
00097     if( particle->spectralID != NULL ) tpi_spectralID_free( smr, particle->spectralID );
00098     return( 0 );
00099 }


Generated on Mon May 27 17:51:16 2013 for Geant4 by  doxygen 1.4.7