Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
105 changes: 105 additions & 0 deletions include/AT_StoppingPower.h
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,28 @@ int AT_Mass_Stopping_Power_with_no( const long stopping_power_source_no,
const long material_no,
double stopping_power_MeV_cm2_g[]);

/**
* Retrieves the electronic mass stopping power in MeV*cm2/g
* for total kinetic energies given in MeV.
*
* Each E_MeV[i] value is converted internally to MeV/u using particle_no[i]
* before the stopping power is calculated.
*
* @param[in] stopping_power_source_no id of the data source
* @param[in] n number of energies / particles
* @param[in] E_MeV total kinetic energies in MeV (array of size n)
* @param[in] particle_no particle numbers (array of size n)
* @param[in] material_no material number
* @param[out] stopping_power_MeV_cm2_g stopping powers (array of size n)
* @return status
*/
int AT_Mass_Stopping_Power_E_MeV_with_no( const long stopping_power_source_no,
const long n,
const double E_MeV[],
const long particle_no[],
const long material_no,
double stopping_power_MeV_cm2_g[]);

/**
* Retrieves the electronic stopping power in keV/um for
* the requested energies and particles for a specified
Expand All @@ -154,6 +176,29 @@ int AT_Stopping_Power_with_no( const long stopping_power_source_no,
const long particle_no[],
const long material_no,
double stopping_power_keV_um[]);

/**
* Retrieves the electronic stopping power in keV/um
* for total kinetic energies given in MeV.
*
* Each E_MeV[i] value is converted internally to MeV/u using particle_no[i]
* before the stopping power is calculated.
*
* @param[in] stopping_power_source_no id of the data source
* @param[in] n number of energies / particles
* @param[in] E_MeV total kinetic energies in MeV (array of size n)
* @param[in] particle_no particle numbers (array of size n)
* @param[in] material_no material number
* @param[out] stopping_power_keV_um stopping powers (array of size n)
* @return status
*/
int AT_Stopping_Power_E_MeV_with_no( const long stopping_power_source_no,
const long n,
const double E_MeV[],
const long particle_no[],
const long material_no,
double stopping_power_keV_um[]);

/**
* TODO
* @param[in] stopping_power_source_no
Expand All @@ -166,6 +211,66 @@ double AT_Energy_MeV_u_from_Stopping_Power_single( const long stopping_power_sou
const double Stopping_Power_MeV_cm2_g, const long particle_no,
const long material_no);

/**
* Retrieves the stopping power in keV/um for a
* single particle with total kinetic energy given in MeV.
*
* The total kinetic energy is converted to MeV/u using particle_no
* before the stopping power is calculated.
*
* @param[in] stopping_power_source_no id of the data source
* @param[in] E_MeV total kinetic energy in MeV
* @param[in] particle_no particle number
* @param[in] material_no material number
* @return stopping power in keV/um
*/
double AT_Stopping_Power_E_MeV_single( const long stopping_power_source_no,
const double E_MeV, const long particle_no,
const long material_no);

/**
* Retrieves the mass stopping power in MeV*cm2/g
* for a single particle with total kinetic energy given in MeV.
*
* The total kinetic energy is converted to MeV/u using particle_no
* before the stopping power is calculated.
*
* @param[in] stopping_power_source_no id of the data source
* @param[in] E_MeV total kinetic energy in MeV
* @param[in] particle_no particle number
* @param[in] material_no material number
* @return mass stopping power in MeV*cm2/g
*/
double AT_Mass_Stopping_Power_E_MeV_single( const long stopping_power_source_no,
const double E_MeV, const long particle_no,
const long material_no);

/**
* Retrieves the stopping power in keV/um for a
* single particle with kinetic energy given in MeV/u.
*
* @param[in] stopping_power_source_no id of the data source
* @param[in] E_MeV_u kinetic energy in MeV/u
* @param[in] particle_no particle number
* @param[in] material_no material number
* @return stopping power in keV/um
*/
double AT_Stopping_Power_E_MeV_u_single( const long stopping_power_source_no,
const double E_MeV_u, const long particle_no,
const long material_no);

/**
* Retrieves the mass stopping power in MeV*cm2/g
* for a single particle with kinetic energy given in MeV/u.
*
* @param[in] stopping_power_source_no id of the data source
* @param[in] E_MeV_u kinetic energy in MeV/u
* @param[in] particle_no particle number
* @param[in] material_no material number
* @return mass stopping power in MeV*cm2/g
*/
double AT_Mass_Stopping_Power_E_MeV_u_single( const long stopping_power_source_no,
const double E_MeV_u, const long particle_no,
const long material_no);

#endif /* AT_STOPPINGPOWER_H_ */
105 changes: 105 additions & 0 deletions src/AT_StoppingPower.c
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,33 @@ int AT_Mass_Stopping_Power_with_no( const long stopping_power_source_no,
return result;
}

int AT_Mass_Stopping_Power_E_MeV_with_no( const long stopping_power_source_no,
const long n,
const double E_MeV[],
const long particle_no[],
const long material_no,
double stopping_power_MeV_cm2_g[]){

double *E_MeV_u = malloc((size_t)n * sizeof(*E_MeV_u));
Comment thread
witNie marked this conversation as resolved.
if (E_MeV_u == NULL) {
fprintf(stderr, "Memory allocation failed\n");
exit(1);
}

for (long i = 0; i < n; i++) {
E_MeV_u[i] = AT_E_MeV_u_from_E_MeV(E_MeV[i], particle_no[i]);
}
int result = AT_Mass_Stopping_Power_with_no(stopping_power_source_no,
n,
E_MeV_u,
particle_no,
material_no,
stopping_power_MeV_cm2_g);

free(E_MeV_u);
return result;
}

int AT_Stopping_Power_with_no( const long stopping_power_source_no,
const long n,
const double E_MeV_u[],
Expand All @@ -148,7 +175,32 @@ int AT_Stopping_Power_with_no( const long stopping_power_source_no,
return result;
}

int AT_Stopping_Power_E_MeV_with_no( const long stopping_power_source_no,
const long n,
const double E_MeV[],
const long particle_no[],
const long material_no,
double stopping_power_keV_um[]){

double *E_MeV_u = malloc((size_t)n * sizeof(*E_MeV_u));
if (E_MeV_u == NULL) {
fprintf(stderr, "Memory allocation failed\n");
exit(1);
}

for (long i = 0; i < n; i++) {
E_MeV_u[i] = AT_E_MeV_u_from_E_MeV(E_MeV[i], particle_no[i]);
}
int result = AT_Stopping_Power_with_no(stopping_power_source_no,
n,
E_MeV_u,
particle_no,
material_no,
stopping_power_keV_um);

free(E_MeV_u);
return result;
}

double AT_Energy_MeV_u_from_Stopping_Power_single( const long stopping_power_source_no,
const double Stopping_Power_MeV_cm2_g,
Expand Down Expand Up @@ -211,5 +263,58 @@ double AT_Energy_MeV_u_from_Stopping_Power_single( const long stopping_power_sou
return -1;
}

double AT_Stopping_Power_E_MeV_single( const long stopping_power_source_no,
const double E_MeV, const long particle_no,
const long material_no){

double stopping_power_keV_um;
AT_Stopping_Power_E_MeV_with_no(stopping_power_source_no,
1,
&E_MeV,
&particle_no,
material_no,
&stopping_power_keV_um);
return stopping_power_keV_um;
}

double AT_Mass_Stopping_Power_E_MeV_single( const long stopping_power_source_no,
const double E_MeV, const long particle_no,
const long material_no){

double stopping_power_MeV_cm2_g;
AT_Mass_Stopping_Power_E_MeV_with_no(stopping_power_source_no,
1,
&E_MeV,
&particle_no,
material_no,
&stopping_power_MeV_cm2_g);
return stopping_power_MeV_cm2_g;
}

double AT_Stopping_Power_E_MeV_u_single( const long stopping_power_source_no,
const double E_MeV_u, const long particle_no,
const long material_no){

double stopping_power_keV_um;
AT_Stopping_Power_with_no(stopping_power_source_no,
1,
&E_MeV_u,
&particle_no,
material_no,
&stopping_power_keV_um);
return stopping_power_keV_um;
}

double AT_Mass_Stopping_Power_E_MeV_u_single( const long stopping_power_source_no,
const double E_MeV_u, const long particle_no,
const long material_no){

double stopping_power_MeV_cm2_g;
AT_Mass_Stopping_Power_with_no(stopping_power_source_no,
1,
&E_MeV_u,
&particle_no,
material_no,
&stopping_power_MeV_cm2_g);
return stopping_power_MeV_cm2_g;
}
Loading