diff options
Diffstat (limited to 'src/optics.c')
-rw-r--r-- | src/optics.c | 134 |
1 files changed, 116 insertions, 18 deletions
diff --git a/src/optics.c b/src/optics.c index 7782678..73f884e 100644 --- a/src/optics.c +++ b/src/optics.c @@ -33,23 +33,74 @@ char optics_err[256]; static double avg_index_h2o = 0.0, avg_index_d2o = 0.0; /* Absorption coefficients for H2O, D2O, and acrylic as a function of - * wavelength from SNOMAN. - * - * Note: These numbers come from mcprod/media_qoca_d2o_20060110.cmd. */ -static double absorption_coefficient_d2o_wavelengths[6] = {337.0, 365.0, 386.0, 420.0, 500.0, 620.0}; -static double absorption_coefficient_d2o[6] = {6.057e-05, 2.680e-05, 3.333e-05, 3.006e-05, 2.773e-05, 2.736e-05}; -static double rayleigh_scl_fac_d2o = 1.000; -static double isothermal_comp_d2o = 4.92e-10; - -static double absorption_coefficient_h2o_wavelengths[6] = {337.0, 365.0, 386.0, 420.0, 500.0, 620.0}; -static double absorption_coefficient_h2o[6] = {8.410e-05, 2.880e-06, 1.431e-04, 1.034e-04, 5.239e-04, 2.482e-03}; -static double rayleigh_scl_fac_acrylic = 0.950; -static double isothermal_comp_acrylic = 3.55e-10; - -static double absorption_coefficient_acrylic_wavelengths[6] = {337.0, 365.0, 386.0, 420.0, 500.0, 620.0}; -static double absorption_coefficient_acrylic[6] = {5.610e-02, 2.279e-02, 1.204e-02, 7.587e-03, 7.036e-03, 7.068e-03}; -static double rayleigh_scl_fac_h2o = 0.870; -static double isothermal_comp_h2o = 4.78e-10; + * wavelength from SNOMAN. */ +static double absorption_coefficient_d2o_wavelengths[6]; +static double absorption_coefficient_d2o[6]; +static double rayleigh_scl_fac_d2o; +static double isothermal_comp_d2o; + +static double absorption_coefficient_h2o_wavelengths[6]; +static double absorption_coefficient_h2o[6]; +static double rayleigh_scl_fac_acrylic; +static double isothermal_comp_acrylic; + +static double absorption_coefficient_acrylic_wavelengths[6]; +static double absorption_coefficient_acrylic[6]; +static double rayleigh_scl_fac_h2o; +static double isothermal_comp_h2o; + +typedef struct optics_constants { + double absorption_coefficient_d2o_wavelengths[6]; + double absorption_coefficient_d2o[6]; + double rayleigh_scl_fac_d2o; + double isothermal_comp_d2o; + + double absorption_coefficient_h2o_wavelengths[6]; + double absorption_coefficient_h2o[6]; + double rayleigh_scl_fac_acrylic; + double isothermal_comp_acrylic; + + double absorption_coefficient_acrylic_wavelengths[6]; + double absorption_coefficient_acrylic[6]; + double rayleigh_scl_fac_h2o; + double isothermal_comp_h2o; +} optics_constants; + +/* Note: These numbers come from mcprod/media_qoca_d2o_20060110.cmd. */ +optics_constants d2o_constants = { + .absorption_coefficient_d2o_wavelengths = {337.0, 365.0, 386.0, 420.0, 500.0, 620.0}, + .absorption_coefficient_d2o = {6.057e-05, 2.680e-05, 3.333e-05, 3.006e-05, 2.773e-05, 2.736e-05}, + .rayleigh_scl_fac_d2o = 1.000, + .isothermal_comp_d2o = 4.92e-10, + + .absorption_coefficient_h2o_wavelengths = {337.0, 365.0, 386.0, 420.0, 500.0, 620.0}, + .absorption_coefficient_h2o = {8.410e-05, 2.880e-06, 1.431e-04, 1.034e-04, 5.239e-04, 2.482e-03}, + .rayleigh_scl_fac_acrylic = 0.950, + .isothermal_comp_acrylic = 3.55e-10, + + .absorption_coefficient_acrylic_wavelengths = {337.0, 365.0, 386.0, 420.0, 500.0, 620.0}, + .absorption_coefficient_acrylic = {5.610e-02, 2.279e-02, 1.204e-02, 7.587e-03, 7.036e-03, 7.068e-03}, + .rayleigh_scl_fac_h2o = 0.870, + .isothermal_comp_h2o = 4.78e-10, +}; + +/* Note: These numbers come from mcprod/media_qoca_salt_20060420.cmd. */ +optics_constants salt_constants = { + .absorption_coefficient_d2o_wavelengths = {337.0, 365.0, 386.0, 420.0, 500.0, 620.0}, + .absorption_coefficient_d2o = {1.024e-04, 8.922e-05, 8.763e-05, 9.653e-05, 1.207e-05, 1.177e-05}, + .rayleigh_scl_fac_d2o = 1.289, + .isothermal_comp_d2o = 4.92e-10, + + .absorption_coefficient_h2o_wavelengths = {337.0, 365.0, 386.0, 420.0, 500.0, 620.0}, + .absorption_coefficient_h2o = {1.068e-06, 1.022e-05, 4.123e-05, 2.193e-04, 4.344e-04, 2.498e-03}, + .rayleigh_scl_fac_h2o = 0.870, + .isothermal_comp_h2o = 4.78e-10, + + .absorption_coefficient_acrylic_wavelengths = {337.0, 365.0, 386.0, 420.0, 500.0, 620.0}, + .absorption_coefficient_acrylic = {5.610e-02, 2.279e-02, 1.204e-02, 7.587e-03, 7.036e-03, 7.068e-03}, + .rayleigh_scl_fac_acrylic = 0.950, + .isothermal_comp_acrylic = 3.55e-10, +}; static int initialized = 0; @@ -513,7 +564,7 @@ static double gsl_cerenkov(double wavelength, void *params) return qe/pow(wavelength,2); } -int optics_init(void) +int optics_init(int run) { int i; double norm; @@ -523,6 +574,53 @@ int optics_init(void) gsl_integration_cquad_workspace *w; gsl_function F; + if (run < 19999) { + for (i = 0; i < LEN(absorption_coefficient_d2o_wavelengths); i++) { + absorption_coefficient_d2o_wavelengths[i] = d2o_constants.absorption_coefficient_d2o_wavelengths[i]; + absorption_coefficient_d2o[i] = d2o_constants.absorption_coefficient_d2o[i]; + } + rayleigh_scl_fac_d2o = d2o_constants.rayleigh_scl_fac_d2o; + isothermal_comp_d2o = d2o_constants.isothermal_comp_d2o; + + for (i = 0; i < LEN(absorption_coefficient_h2o_wavelengths); i++) { + absorption_coefficient_h2o_wavelengths[i] = d2o_constants.absorption_coefficient_h2o_wavelengths[i]; + absorption_coefficient_h2o[i] = d2o_constants.absorption_coefficient_h2o[i]; + } + rayleigh_scl_fac_h2o = d2o_constants.rayleigh_scl_fac_h2o; + isothermal_comp_h2o = d2o_constants.isothermal_comp_h2o; + + for (i = 0; i < LEN(absorption_coefficient_acrylic_wavelengths); i++) { + absorption_coefficient_acrylic_wavelengths[i] = d2o_constants.absorption_coefficient_acrylic_wavelengths[i]; + absorption_coefficient_acrylic[i] = d2o_constants.absorption_coefficient_acrylic[i]; + } + rayleigh_scl_fac_acrylic = d2o_constants.rayleigh_scl_fac_acrylic; + isothermal_comp_acrylic = d2o_constants.isothermal_comp_acrylic; + } else if (run < 33907) { + for (i = 0; i < LEN(absorption_coefficient_d2o_wavelengths); i++) { + absorption_coefficient_d2o_wavelengths[i] = salt_constants.absorption_coefficient_d2o_wavelengths[i]; + absorption_coefficient_d2o[i] = salt_constants.absorption_coefficient_d2o[i]; + } + rayleigh_scl_fac_d2o = salt_constants.rayleigh_scl_fac_d2o; + isothermal_comp_d2o = salt_constants.isothermal_comp_d2o; + + for (i = 0; i < LEN(absorption_coefficient_h2o_wavelengths); i++) { + absorption_coefficient_h2o_wavelengths[i] = salt_constants.absorption_coefficient_h2o_wavelengths[i]; + absorption_coefficient_h2o[i] = salt_constants.absorption_coefficient_h2o[i]; + } + rayleigh_scl_fac_h2o = salt_constants.rayleigh_scl_fac_h2o; + isothermal_comp_h2o = salt_constants.isothermal_comp_h2o; + + for (i = 0; i < LEN(absorption_coefficient_acrylic_wavelengths); i++) { + absorption_coefficient_acrylic_wavelengths[i] = salt_constants.absorption_coefficient_acrylic_wavelengths[i]; + absorption_coefficient_acrylic[i] = salt_constants.absorption_coefficient_acrylic[i]; + } + rayleigh_scl_fac_acrylic = salt_constants.rayleigh_scl_fac_acrylic; + isothermal_comp_acrylic = salt_constants.isothermal_comp_acrylic; + } else { + sprintf(optics_err, "no optics info for ncd or h2o phase!"); + return -1; + } + w = gsl_integration_cquad_workspace_alloc(100); F.function = &gsl_cerenkov; |