@@ -276,8 +276,6 @@ DLL_EXPORT Range get_energy_range(const T_real min_energy, const T_real max_ener
276276{
277277
278278 struct Range energy_range;
279-
280- // data_struct::ArrayTr<double> ev = energy_offset + (energy * energy_slope) + (Eigen::pow(energy, (double)2.0) * energy_quad);
281279 energy_range.min = static_cast <size_t >(round ((min_energy - energy_offset) / energy_slope));
282280 energy_range.max = static_cast <size_t >(round ((max_energy - energy_offset) / energy_slope));
283281 // if (xmax > used_chan - 1) or (xmax <= np.amin([xmin, used_chan / 20.])):
@@ -305,19 +303,59 @@ DLL_EXPORT Range get_energy_range(const size_t spectra_size, const Fit_Parameter
305303 params->value (STR_ENERGY_SLOPE));
306304}
307305
308- // - ----------------------------------------------------------------------------
306+ // ----------------------------------------------------------------------------
309307
310308template <typename T_real>
311- DLL_EXPORT const ArrayTr<T_real> gen_energy_vector (const Range& energy_range, const Fit_Parameters< T_real>& params )
309+ ArrayTr<T_real> generate_energy_array (const Range energy_range, const T_real energy_offset, const T_real energy_slope, const T_real energy_quad )
312310{
313- const T_real energy_offset = params.value (STR_ENERGY_OFFSET);
314- const T_real energy_slope = params.value (STR_ENERGY_SLOPE);
315- const T_real energy_quad = params.value (STR_ENERGY_QUADRATIC);
316- ArrayTr<T_real> energy = ArrayTr<T_real>::LinSpaced (energy_range.count (), energy_range.min , energy_range.max );
317- ArrayTr<T_real> ev = energy_offset + (energy * energy_slope) + (Eigen::pow (energy, (T_real)2.0 ) * energy_quad);
311+ const ArrayTr<T_real>energy = ArrayTr<T_real>::LinSpaced (energy_range.count (), energy_range.min , energy_range.max );
312+ const ArrayTr<T_real>ev = energy_offset + (energy * energy_slope) + (Eigen::pow (energy, (T_real)2.0 ) * energy_quad);
318313 return ev;
319314}
320315
316+
317+ // ----------------------------------------------------------------------------
318+
319+ template <typename T_real>
320+ ArrayTr<T_real> generate_energy_array (const Range energy_range, const Fit_Parameters<T_real> * const fit_params)
321+ {
322+ T_real energy_offset = 0.0 ;
323+ T_real energy_slope = 0.0 ;
324+ T_real energy_quad = 0.0 ;
325+ if (fit_params != nullptr )
326+ {
327+ if (fit_params->contains (STR_ENERGY_OFFSET))
328+ {
329+ energy_offset = fit_params->value (STR_ENERGY_OFFSET);
330+ }
331+ else
332+ {
333+ logW<< " Missing fit parameter " <<STR_ENERGY_OFFSET<<" \n " ;
334+ }
335+ if (fit_params->contains (STR_ENERGY_SLOPE))
336+ {
337+ energy_slope = fit_params->value (STR_ENERGY_SLOPE);
338+ }
339+ else
340+ {
341+ logW<< " Missing fit parameter " <<STR_ENERGY_SLOPE<<" \n " ;
342+ }
343+ if (fit_params->contains (STR_ENERGY_QUADRATIC))
344+ {
345+ energy_quad = fit_params->value (STR_ENERGY_QUADRATIC);
346+ }
347+ else
348+ {
349+ logW<< " Missing fit parameter " <<STR_ENERGY_QUADRATIC<<" \n " ;
350+ }
351+ }
352+ else
353+ {
354+ logW<< " fit parameters is " <<STR_ENERGY_QUADRATIC<<" \n " ;
355+ }
356+ return generate_energy_array (energy_range, energy_offset, energy_slope, energy_quad);
357+ }
358+
321359// -----------------------------------------------------------------------------
322360
323361} // namespace data_struct
0 commit comments