1
0
Fork 0
mirror of https://github.com/gwm17/catima.git synced 2024-11-26 20:18:51 -05:00
catima/config.h

105 lines
2.3 KiB
C
Raw Normal View History

2017-07-25 12:19:11 -04:00
/// \file config.h
#ifndef CONFIG
#define CONFIG
#include <cstring>
namespace catima{
/**
* \enum z_eff_type
* enum to select formulat to calculate effective charge of the Projectile
*/
2019-05-10 15:08:08 -04:00
enum z_eff_type:unsigned char {
2017-07-25 12:19:11 -04:00
none = 0,
pierce_blann = 1,
anthony_landorf = 2,
2018-01-15 09:11:51 -05:00
hubert = 3,
winger = 4,
schiwietz = 5,
2018-01-18 13:20:42 -05:00
global = 6,
atima14 = 7
2017-07-25 12:19:11 -04:00
};
/**
* enum to select which calculation to skip
*/
2018-07-31 09:34:41 -04:00
enum skip_calculation:unsigned char{
2017-07-25 12:19:11 -04:00
skip_none = 0,
skip_tof = 1,
skip_sigma_a = 2,
2018-07-31 09:34:41 -04:00
skip_sigma_r = 4,
skip_reactions = 128
2017-07-25 12:19:11 -04:00
};
/**
* enum to select which dEdx correction to skip
*/
2018-07-31 09:34:41 -04:00
enum corrections:unsigned char{
2017-07-25 12:19:11 -04:00
no_barkas = 1,
no_lindhard = 2,
2018-10-31 14:14:29 -04:00
no_shell_correction = 4,
no_highenergy = 8
2017-07-25 12:19:11 -04:00
};
2018-01-18 13:20:42 -05:00
/**
* enum to select which dEdx straggling options
*/
2019-05-10 15:08:08 -04:00
enum omega_types:unsigned char{
2018-01-18 13:20:42 -05:00
atima = 0,
bohr = 1,
};
2019-05-10 15:08:08 -04:00
/**
* enum to select which how low energy part is calculated
*/
enum low_energy_types:unsigned char{
srim_85 = 0,
srim_95 = 1,
};
2017-07-25 12:19:11 -04:00
/**
* structure to store calculation configuration
* each group of options are grouped and enum are suppose to use
* see catima::z_eff_type, catima::skip_calculation, catima::corrections
*
* check catima::z_effective()
*
*/
struct Config{
2019-05-10 15:08:08 -04:00
#ifndef GLOBAL
2018-07-31 09:34:41 -04:00
unsigned char z_effective=z_eff_type::pierce_blann;
2019-05-10 15:08:08 -04:00
#else
unsigned char z_effective=z_eff_type::atima14;
#endif
2018-07-31 11:40:25 -04:00
#ifdef REACTIONS
2018-07-31 09:34:41 -04:00
unsigned char skip=skip_none;
#else
unsigned char skip=skip_calculation::skip_reactions;
#endif
2019-05-10 15:08:08 -04:00
unsigned char corrections = 0;
unsigned char calculation = 1;
2017-07-25 12:19:11 -04:00
};
2019-05-10 15:08:08 -04:00
inline void set_config_lowenergy(Config c, low_energy_types lt){
2019-05-13 14:51:09 -04:00
c.calculation = c.calculation & (lt<<2);
2019-05-10 15:08:08 -04:00
}
inline unsigned char config_lowenergy(const Config c){
2019-05-13 14:51:09 -04:00
return (c.calculation>>2) & 0x7;
2019-05-10 15:08:08 -04:00
}
inline void set_config_omega(Config c, omega_types ot){
2019-05-13 14:51:09 -04:00
c.calculation = c.calculation & ot;
2019-05-10 15:08:08 -04:00
}
inline unsigned char config_omega(const Config c){
2019-05-13 14:51:09 -04:00
return c.calculation & 0x3;
2019-05-10 15:08:08 -04:00
}
2017-07-25 12:19:11 -04:00
extern Config default_config;
}
#endif