Skip to content

Commit d88ac3a

Browse files
authored
Merge pull request #202 from aglowacki/master
Revert tails calc back to prev version
2 parents cb395c6 + 176bd2c commit d88ac3a

23 files changed

+517
-115
lines changed

CMakeLists.txt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
#POSSIBILITY OF SUCH DAMAGE.
4545

4646

47-
cmake_minimum_required(VERSION 3.5)
47+
cmake_minimum_required(VERSION 3.20)
4848

4949
project(XRF_Maps)
5050

@@ -445,6 +445,11 @@ ELSEIF (UNIX)
445445
# link against the Python library. The resulting shared library will have
446446
# missing symbols, but that's perfectly fine -- they will be resolved at
447447
# import time.
448+
449+
set(CMAKE_INSTALL_RPATH $ORIGIN)
450+
set_target_properties(libxrf_io PROPERTIES INSTALL_RPATH "$ORIGIN")
451+
set_target_properties(xrf_maps PROPERTIES INSTALL_RPATH "$ORIGIN")
452+
448453
IF (BUILD_WITH_ZMQ)
449454
target_link_libraries(libxrf_io PRIVATE cppzmq cppzmq-static )
450455
target_link_libraries(xrf_maps PRIVATE cppzmq cppzmq-static )
@@ -454,7 +459,7 @@ ELSEIF (UNIX)
454459
IF(APPLE)
455460
set_target_properties(libxrf_fit libxrf_io PROPERTIES SUFFIX ".dylib")
456461
set_target_properties(libxrf_fit libxrf_io PROPERTIES COMPILE_FLAGS "-DDARWIN")
457-
set_target_properties(libxrf_fit libxrf_io PROPERTIES MACOSX_RPATH ".")
462+
set_target_properties(libxrf_fit libxrf_io PROPERTIES MACOSX_RPATH "$ORIGIN")
458463
set_target_properties(libxrf_fit libxrf_io PROPERTIES LINK_FLAGS "-undefined dynamic_lookup -dead_strip")
459464
IF (NOT ${U_CMAKE_BUILD_TYPE} MATCHES DEBUG)
460465
add_custom_command(TARGET libxrf_fit POST_BUILD COMMAND strip -u -r ${PROJECT_SOURCE_DIR}/bin/libxrf_fit.dylib)

src/core/process_whole.cpp

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -254,16 +254,23 @@ void load_and_fit_quatification_datasets(data_struct::Analysis_Job<double>* anal
254254
for (auto& itr : standard_itr.element_standard_weights)
255255
{
256256
data_struct::Element_Info<double>* e_info = data_struct::Element_Info_Map<double>::inst()->get_element(itr.first);
257-
elements_to_fit[itr.first] = new data_struct::Fit_Element_Map<double>(itr.first, e_info);
258-
elements_to_fit[itr.first]->init_energy_ratio_for_detector_element(detector->detector_element, standard_itr.disable_Ka_for_quantification, standard_itr.disable_La_for_quantification);
259-
260-
if (element_amt_in_all_standards.count(e_info->number) > 0)
257+
if( e_info != nullptr )
261258
{
262-
element_amt_in_all_standards[e_info->number] += 1.0;
259+
elements_to_fit[itr.first] = new data_struct::Fit_Element_Map<double>(itr.first, e_info);
260+
elements_to_fit[itr.first]->init_energy_ratio_for_detector_element(detector->detector_element, standard_itr.disable_Ka_for_quantification, standard_itr.disable_La_for_quantification);
261+
262+
if (element_amt_in_all_standards.count(e_info->number) > 0)
263+
{
264+
element_amt_in_all_standards[e_info->number] += 1.0;
265+
}
266+
else
267+
{
268+
element_amt_in_all_standards[e_info->number] = 1.0;
269+
}
263270
}
264271
else
265272
{
266-
element_amt_in_all_standards[e_info->number] = 1.0;
273+
logE<<"Could not find element: "<< itr.first <<"\n";
267274
}
268275
}
269276

src/data_struct/params_override.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,10 @@ class DLL_EXPORT Params_Override
7171

7272
Params_Override()
7373
{
74-
si_escape_factor = 0.0;
75-
ge_escape_factor = 0.0;
74+
//si_escape_factor = 0.0;
75+
//ge_escape_factor = 0.0;
7676
si_escape_enabled = false;
77-
ge_escape_enabled = false;
77+
//ge_escape_enabled = false;
7878
fit_snip_width = 0.5;
7979
us_amp_sens_num = 1;
8080
us_amp_sens_unit = "";
@@ -97,10 +97,10 @@ class DLL_EXPORT Params_Override
9797
Params_Override(std::string dir, int detector)
9898
{
9999

100-
si_escape_factor = 0.0;
101-
ge_escape_factor = 0.0;
100+
///si_escape_factor = 0.0;
101+
//ge_escape_factor = 0.0;
102102
si_escape_enabled = false;
103-
ge_escape_enabled = false;
103+
//ge_escape_enabled = false;
104104
fit_snip_width = 0.0;
105105
us_amp_sens_num = 1;
106106
us_amp_sens_unit = "";
@@ -211,10 +211,10 @@ class DLL_EXPORT Params_Override
211211
Fit_Element_Map_Dict<T_real> elements_to_fit;
212212
std::string detector_element;
213213

214-
T_real si_escape_factor;
215-
T_real ge_escape_factor;
214+
//T_real si_escape_factor;
215+
//T_real ge_escape_factor;
216216
bool si_escape_enabled;
217-
bool ge_escape_enabled;
217+
//bool ge_escape_enabled;
218218
T_real fit_snip_width;
219219

220220
std::string be_window_thickness;

src/data_struct/spectra.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ DLL_EXPORT ArrayTr<T_real> snip_background(const Spectra<T_real> * const spectra
344344

345345
energy = energy_offset + (energy * energy_linear) + (Eigen::pow(energy, (T_real)2.0) * energy_quadratic);
346346

347-
ArrayTr<T_real> tmp = std::pow((energy_offset / (T_real)2.3548), (T_real)2.0) + energy * (T_real)2.96 * energy_linear;
347+
ArrayTr<T_real> tmp = std::pow((energy_offset / (T_real)2.3548), (T_real)2.0) + energy * (T_real)3.58 * energy_linear;
348348
tmp = tmp.unaryExpr([](T_real r) { return r < 0.0 ? (T_real)0.0 : r; });
349349

350350
//ArrayTr<T_real> fwhm = 2.35 * std::sqrt(tmp);

src/data_struct/spectra_line.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,14 @@ void Spectra_Line<T_real>::resize_and_zero(size_t cols, size_t samples)
9494

9595
// ----------------------------------------------------------------------------
9696

97+
template<typename T_real>
98+
void Spectra_Line<T_real>::resize_samples(size_t samples)
99+
{
100+
_alloc_spectra_size(samples);
101+
}
102+
103+
// ----------------------------------------------------------------------------
104+
97105
template<typename T_real>
98106
void Spectra_Line<T_real>::alloc_row_size(size_t n)
99107
{

src/data_struct/spectra_line.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ class DLL_EXPORT Spectra_Line
7373

7474
void resize_and_zero(size_t cols, size_t samples);
7575

76+
void resize_samples(size_t samples);
77+
7678
void alloc_row_size(size_t n);
7779

7880
void recalc_elapsed_livetime();

src/data_struct/spectra_volume.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,17 @@ void Spectra_Volume<T_real>::resize_and_zero(size_t rows, size_t cols, size_t sa
8484

8585
// ----------------------------------------------------------------------------
8686

87+
template<typename T_real>
88+
void Spectra_Volume<T_real>::resize_samples(size_t samples)
89+
{
90+
for(size_t i=0; i<_data_vol.size(); i++)
91+
{
92+
_data_vol[i].resize_samples(samples);
93+
}
94+
}
95+
96+
// ----------------------------------------------------------------------------
97+
8798
template<typename T_real>
8899
Spectra<T_real> Spectra_Volume<T_real>::integrate()
89100
{

src/data_struct/spectra_volume.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ class DLL_EXPORT Spectra_Volume
7272
const Spectra_Line<T_real>& operator [](std::size_t row) const { return _data_vol[row]; }
7373

7474
void resize_and_zero(size_t rows, size_t cols, size_t samples);
75+
76+
void resize_samples(size_t samples);
7577

7678
Spectra<T_real> integrate();
7779

src/fitting/models/gaussian_model.cpp

Lines changed: 5 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ void Gaussian_Model<T_real>::set_fit_params_preset(Fit_Params_Preset preset)
146146

147147
switch (preset)
148148
{
149+
case Fit_Params_Preset::NOT_SET:
149150
case Fit_Params_Preset::MATRIX_BATCH_FIT: //matrix batch fit
150151
_fit_parameters[STR_ENERGY_OFFSET].bound_type = E_Bound_Type::FIXED;
151152
_fit_parameters[STR_ENERGY_SLOPE].bound_type = E_Bound_Type::FIXED;
@@ -580,7 +581,7 @@ const Spectra<T_real> Gaussian_Model<T_real>::model_spectrum_element(const Fit_P
580581
for (size_t idx = 0; idx < energy_ratios.size(); idx++)
581582
{
582583
const Element_Energy_Ratio<T_real>& er_struct = energy_ratios.at(idx);
583-
T_real sigma = std::sqrt( std::pow((fitp->at(STR_FWHM_OFFSET).value / (T_real)2.3548), (T_real)2.0) + (er_struct.energy * (T_real)2.96 * fitp->at(STR_FWHM_FANOPRIME).value ) );
584+
T_real sigma = std::sqrt( std::pow((fitp->at(STR_FWHM_OFFSET).value / (T_real)2.3548), (T_real)2.0) + (er_struct.energy * (T_real)3.58 * fitp->at(STR_FWHM_FANOPRIME).value ) );
584585
T_real f_step = std::abs<T_real>( er_struct.mu_fraction * ( fitp->at(STR_F_STEP_OFFSET).value + (fitp->at(STR_F_STEP_LINEAR).value * er_struct.energy)));
585586
T_real f_tail = std::abs<T_real>( fitp->at(STR_F_TAIL_OFFSET).value + (fitp->at(STR_F_TAIL_LINEAR).value * er_struct.mu_fraction));
586587
T_real kb_f_tail = std::abs<T_real>( fitp->at(STR_KB_F_TAIL_OFFSET).value + (fitp->at(STR_KB_F_TAIL_LINEAR).value * er_struct.mu_fraction));
@@ -719,44 +720,16 @@ const ArrayTr<T_real> Gaussian_Model<T_real>::peak(T_real gain, T_real sigma, co
719720
template<typename T_real>
720721
const ArrayTr<T_real> Gaussian_Model<T_real>::step(T_real gain, T_real sigma, const ArrayTr<T_real>& delta_energy, T_real peak_E) const
721722
{
722-
/*
723-
ArrayTr<T_real>counts = delta_energy.unaryExpr([gain, sigma, peak_E](T_real v)
724-
{
725-
T_real val = ((T_real)(M_SQRT2) * sigma);
726-
val = std::erfc(v / val);
727-
val = peak_E * val;
728-
val = (T_real)2.0 / val;
729-
return gain / val;
730-
});
731-
return counts;
732-
*/
733723
return delta_energy.unaryExpr([gain, sigma, peak_E](T_real v) { return gain / (T_real)2.0 / peak_E * std::erfc(v / ((T_real)(M_SQRT2)*sigma)); });
734-
735-
/*
736-
ArrayTr<T_real>counts(delta_energy.size());
737-
for (unsigned int i = 0; i < delta_energy.size(); i++)
738-
{
739-
counts[i] = gain / (T_real)2.0 / peak_E * std::erfc((T_real)delta_energy[i] / ((T_real)(M_SQRT2) * sigma));
740-
}
741-
*/
742-
743724
}
744725

745726
// ----------------------------------------------------------------------------
746727

747728
template<typename T_real>
748729
const ArrayTr<T_real> Gaussian_Model<T_real>::tail(T_real gain, T_real sigma, const ArrayTr<T_real> &delta_energy, T_real gamma) const
749730
{
750-
751-
T_real val = pow(gamma, (T_real)2.0);
752-
val = exp((T_real)-0.5 / val);
753-
val = sigma / val;
754-
val = gamma / val;
755-
val = (T_real)2.0 / val;
756-
val = gain / val;
757-
758731

759-
// T_real val = gain / ( (T_real)2.0 * gamma * sigma * exp( (T_real)-0.5 / pow(gamma, (T_real)2.0) ) );
732+
T_real val = gain / ( (T_real)2.0 * gamma * sigma * exp( (T_real)-0.5 / pow(gamma, (T_real)2.0) ) );
760733
return delta_energy.unaryExpr([val,sigma,gamma](T_real v) { return (v < (T_real)0.0) ?
761734
std::exp(v/ (gamma * sigma)) * val * std::erfc(v / ( ((T_real)(M_SQRT2)*sigma) + ((T_real)1.0/(gamma*(T_real)(M_SQRT2))) ) )
762735
:
@@ -771,7 +744,7 @@ const ArrayTr<T_real> Gaussian_Model<T_real>::elastic_peak(const Fit_Parameters<
771744
{
772745
ArrayTr<T_real> counts(ev.size());
773746
counts.setZero();
774-
T_real sigma = std::sqrt( std::pow( (fitp->at(STR_FWHM_OFFSET).value / (T_real)2.3548), (T_real)2.0 ) + (fitp->at(STR_COHERENT_SCT_ENERGY).value * (T_real)2.96 * fitp->at(STR_FWHM_FANOPRIME).value ) );
747+
T_real sigma = std::sqrt( std::pow( (fitp->at(STR_FWHM_OFFSET).value / (T_real)2.3548), (T_real)2.0 ) + (fitp->at(STR_COHERENT_SCT_ENERGY).value * (T_real)3.58 * fitp->at(STR_FWHM_FANOPRIME).value ) );
775748
if(false == std::isfinite(sigma))
776749
{
777750
logE << "sigma = " << sigma << "\n";
@@ -786,10 +759,7 @@ const ArrayTr<T_real> Gaussian_Model<T_real>::elastic_peak(const Fit_Parameters<
786759

787760
fvalue = fvalue * std::pow((T_real)10.0, fitp->at(STR_COHERENT_SCT_AMPLITUDE).value);
788761

789-
//Spectra value = fvalue * this->peak(gain, *sigma, delta_energy);
790-
//counts = counts + value;
791762
counts += ( fvalue * this->peak(gain, sigma, delta_energy) );
792-
////counts += fvalue * (gain / ( sigma * (T_real)(SQRT_2xPI) ) * Eigen::exp((T_real)-0.5 * Eigen::pow((delta_energy / sigma), (T_real)2.0) ) );
793763

794764
return counts;
795765
}
@@ -805,7 +775,7 @@ const ArrayTr<T_real> Gaussian_Model<T_real>::compton_peak(const Fit_Parameters<
805775

806776
T_real compton_E = fitp->at(STR_COHERENT_SCT_ENERGY).value/((T_real)1.0 +(fitp->at(STR_COHERENT_SCT_ENERGY).value / (T_real)511.0 ) * ((T_real)1.0 -std::cos( fitp->at(STR_COMPTON_ANGLE).value * (T_real)2.0 * (T_real)(M_PI) / (T_real)360.0 )));
807777

808-
T_real sigma = std::sqrt( std::pow( (fitp->at(STR_FWHM_OFFSET).value/(T_real)2.3548), (T_real)2.0) + (compton_E * (T_real)2.96 * fitp->at(STR_FWHM_FANOPRIME).value ) );
778+
T_real sigma = std::sqrt( std::pow( (fitp->at(STR_FWHM_OFFSET).value/(T_real)2.3548), (T_real)2.0) + (compton_E * (T_real)3.58 * fitp->at(STR_FWHM_FANOPRIME).value ) );
809779
if(false == std::isfinite(sigma))
810780
{
811781
logE << "sigma = " << sigma << "\n";

src/fitting/optimizers/nlopt_optimizer.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ double gen_residuals_nlopt(const std::vector<double> &x, std::vector<double> &gr
144144
ud->fit_parameters->from_array_d(x);
145145

146146
// Model spectra based on new fit parameters
147-
ud->func(ud->fit_parameters, &(ud->energy_range), &(ud->spectra_model));
147+
ud->func(ud->fit_model, ud->fit_parameters, &(ud->energy_range), &(ud->spectra_model));
148148
// Add background
149149
ud->spectra_model += ud->spectra_background;
150150

@@ -411,15 +411,16 @@ OPTIMIZER_OUTCOME NLOPT_Optimizer<T_real>::minimize(Fit_Parameters<T_real>*fit_p
411411
//-----------------------------------------------------------------------------
412412

413413
template<typename T_real>
414-
OPTIMIZER_OUTCOME NLOPT_Optimizer<T_real>::minimize_func(Fit_Parameters<T_real> *fit_params,
415-
const Spectra<T_real>* const spectra,
416-
const Range energy_range,
417-
const ArrayTr<T_real>* background,
418-
Gen_Func_Def<T_real> gen_func,
419-
bool use_weights)
414+
OPTIMIZER_OUTCOME NLOPT_Optimizer<T_real>::minimize_func(const Base_Model<T_real>* const model,
415+
Fit_Parameters<T_real> *fit_params,
416+
const Spectra<T_real>* const spectra,
417+
const Range energy_range,
418+
const ArrayTr<T_real>* background,
419+
Gen_Func_Def<T_real> gen_func,
420+
bool use_weights)
420421
{
421422
Gen_User_Data<T_real> ud;
422-
fill_gen_user_data(ud, fit_params, spectra, energy_range, background, gen_func, use_weights);
423+
fill_gen_user_data(ud, fit_params, model, spectra, energy_range, background, gen_func, use_weights);
423424

424425
std::vector<double> fitp_arr;
425426
std::vector<double> lb_arr;

0 commit comments

Comments
 (0)