LibSakura  3.0
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
sakura.h
Go to the documentation of this file.
1 /*
2  * @SAKURA_LICENSE_HEADER_START@
3  * Copyright (C) 2013-2016
4  * National Astronomical Observatory of Japan
5  * 2-21-1, Osawa, Mitaka, Tokyo, 181-8588, Japan.
6  *
7  * This file is part of Sakura.
8  *
9  * Sakura is free software: you can redistribute it and/or modify it under
10  * the terms of the GNU Lesser General Public License as published by the
11  * Free Software Foundation, either version 3 of the License, or (at your
12  * option) any later version.
13  *
14  * Sakura is distributed in the hope that it will be useful, but WITHOUT
15  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
16  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
17  * License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public License
20  * along with Sakura. If not, see <http://www.gnu.org/licenses/>.
21  * @SAKURA_LICENSE_HEADER_END@
22  */
33 #ifndef LIBSAKURA_LIBSAKURA_SAKURA_H_
34 #define LIBSAKURA_LIBSAKURA_SAKURA_H_
35 
36 #include <stddef.h>
37 #include <stdbool.h>
38 #include <stdint.h>
39 #include <sys/types.h>
40 
41 #include <libsakura/config.h>
42 
43 #if defined(__GNUC__) || defined(__GNUG__)
44 # define LIBSAKURA_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
45 #else
46 # define LIBSAKURA_WARN_UNUSED_RESULT /* Don't ignore result value */
47 #endif
48 
49 #define LIBSAKURA_NOEXCEPT /* noexcept */
50 
51 #ifdef __cplusplus
52 extern "C" {
53 
54 #if __cplusplus >= 201103L
55 # undef LIBSAKURA_NOEXCEPT
56 # define LIBSAKURA_NOEXCEPT noexcept
57 #endif
58 
59 #endif
60 
64 typedef enum {LIBSAKURA_SYMBOL(Status_kOK) = 0,LIBSAKURA_SYMBOL(Status_kNG) = 1,LIBSAKURA_SYMBOL(Status_kInvalidArgument) = 2,LIBSAKURA_SYMBOL(Status_kNoMemory) = 3,LIBSAKURA_SYMBOL(Status_kUnknownError) = 99
82 }LIBSAKURA_SYMBOL (Status);
83 
97 typedef void *(*LIBSAKURA_SYMBOL(UserAllocator))(size_t size);
98 
111 typedef void (*LIBSAKURA_SYMBOL(UserDeallocator))(void *pointer);
112 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(Initialize)(
126 LIBSAKURA_SYMBOL(UserAllocator) allocator,
127 LIBSAKURA_SYMBOL(UserDeallocator) deallocator)
129 
137 void LIBSAKURA_SYMBOL(CleanUp)() LIBSAKURA_NOEXCEPT;
138 
146 double LIBSAKURA_SYMBOL(GetCurrentTime)() LIBSAKURA_NOEXCEPT;
147 
148 /*
149  * memory alignment(for SIMD)
150  */
160 bool LIBSAKURA_SYMBOL(IsAligned)(void const *ptr) LIBSAKURA_NOEXCEPT;
161 
169 size_t LIBSAKURA_SYMBOL (GetAlignment)() LIBSAKURA_NOEXCEPT;
170 
184 void *LIBSAKURA_SYMBOL(AlignAny)(size_t size_of_arena, void *arena,
185  size_t size_required) LIBSAKURA_NOEXCEPT;
199 float *LIBSAKURA_SYMBOL(AlignFloat)(size_t elements_in_arena, float *arena,
200  size_t elements_required) LIBSAKURA_NOEXCEPT;
201 
205 double *LIBSAKURA_SYMBOL(AlignDouble)(size_t elements_in_arena, double *arena,
206  size_t elements_required) LIBSAKURA_NOEXCEPT;
207 
217 typedef struct {
221  size_t count;
225  double sum;
229  double square_sum;
233  float min;
237  float max;
241  ssize_t index_of_min;
245  ssize_t index_of_max;
246 }LIBSAKURA_SYMBOL(StatisticsResultFloat);
247 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(ComputeStatisticsFloat)(
264  size_t num_data, float const data[], bool const is_valid[],
265  LIBSAKURA_SYMBOL(StatisticsResultFloat) *result) LIBSAKURA_NOEXCEPT;
266 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(ComputeAccurateStatisticsFloat)(
274  size_t num_data, float const data[], bool const is_valid[],
275  LIBSAKURA_SYMBOL(StatisticsResultFloat) *result) LIBSAKURA_NOEXCEPT;
276 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(SortValidValuesDenselyFloat)(
290  size_t num_data, bool const is_valid[], float data[],
291  size_t *new_num_data) LIBSAKURA_NOEXCEPT;
292 
315 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(ComputeMedianAbsoluteDeviationFloat)(
316  size_t num_data, float const data[], float new_data[])
317  LIBSAKURA_NOEXCEPT;
318 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(GridConvolvingFloat)(
376  size_t num_spectra, size_t start_spectrum, size_t end_spectrum,
377  bool const spectrum_mask[/*num_spectra*/],
378  double const x[/*num_spectra*/], double const y[/*num_spectra*/],
379  size_t support, size_t sampling, size_t num_polarizations,
380  uint32_t const polarization_map[/*num_polarizations*/],
381  size_t num_channels, uint32_t const channel_map[/*num_channels*/],
382  bool const mask/*[num_spectra][num_polarizations]*/[/*num_channels*/],
383  float const value/*[num_spectra][num_polarizations]*/[/*num_channels*/],
384  float const weight/*[num_spectra]*/[/*num_channels*/], bool weight_only,
385  size_t num_convolution_table/*= ceil(sqrt(2.)*(support+1)*sampling)*/,
386  float const convolution_table[/*num_convolution_table*/],
387  size_t num_polarizations_for_grid, size_t num_channels_for_grid,
388  size_t width, size_t height,
389  double weight_sum/*[num_polarizations_for_grid]*/[/*num_channels_for_grid*/],
390  float weight_of_grid/*[height][width][num_polarizations_for_grid]*/[/*num_channels_for_grid*/],
391  float grid/*[height][width][num_polarizations_for_grid]*/[/*num_channels_for_grid*/])
392  LIBSAKURA_NOEXCEPT LIBSAKURA_WARN_UNUSED_RESULT;
393 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(SetTrueIfInRangesInclusiveFloat)(
428  size_t num_data, float const data[/*num_data*/], size_t num_condition,
429  float const lower_bounds[/*num_condition*/],
430  float const upper_bounds[/*num_condition*/], bool result[/*num_data*/])
431  LIBSAKURA_NOEXCEPT;
432 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(SetTrueIfInRangesInclusiveInt)(
437  size_t num_data, int const data[/*num_data*/], size_t num_condition,
438  int const lower_bounds[/*num_condition*/],
439  int const upper_bounds[/*num_condition*/], bool result[/*num_data*/])
440  LIBSAKURA_NOEXCEPT;
441 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(SetTrueIfInRangesExclusiveFloat)(
477  size_t num_data, float const data[/*num_data*/], size_t num_condition,
478  float const lower_bounds[/*num_condition*/],
479  float const upper_bounds[/*num_condition*/], bool result[/*num_data*/])
480  LIBSAKURA_NOEXCEPT;
481 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(SetTrueIfInRangesExclusiveInt)(
486  size_t num_data, int const data[/*num_data*/], size_t num_condition,
487  int const lower_bounds[/*num_condition*/],
488  int const upper_bounds[/*num_condition*/], bool result[/*num_data*/])
489  LIBSAKURA_NOEXCEPT;
490 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(SetTrueIfGreaterThanFloat)(
516  size_t num_data, float const data[/*num_data*/], float threshold,
517  bool result[/*num_data*/]) LIBSAKURA_NOEXCEPT;
518 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(SetTrueIfGreaterThanInt)(
523  size_t num_data, int const data[/*num_data*/], int threshold,
524  bool result[/*num_data*/]) LIBSAKURA_NOEXCEPT;
525 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(SetTrueIfGreaterThanOrEqualsFloat)(
551  size_t num_data, float const data[/*num_data*/], float threshold,
552  bool result[/*num_data*/]) LIBSAKURA_NOEXCEPT;
553 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(SetTrueIfGreaterThanOrEqualsInt)(
558  size_t num_data, int const data[/*num_data*/], int threshold,
559  bool result[/*num_data*/]) LIBSAKURA_NOEXCEPT;
560 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(SetTrueIfLessThanFloat)(
586  size_t num_data, float const data[/*num_data*/], float threshold,
587  bool result[/*num_data*/]) LIBSAKURA_NOEXCEPT;
588 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(SetTrueIfLessThanInt)(
593  size_t num_data, int const data[/*num_data*/], int threshold,
594  bool result[/*num_data*/]) LIBSAKURA_NOEXCEPT;
595 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(SetTrueIfLessThanOrEqualsFloat)(
621  size_t num_data, float const data[/*num_data*/], float threshold,
622  bool result[/*num_data*/]) LIBSAKURA_NOEXCEPT;
623 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(SetTrueIfLessThanOrEqualsInt)(
628  size_t num_data, int const data[/*num_data*/], int threshold,
629  bool result[/*num_data*/]) LIBSAKURA_NOEXCEPT;
630 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(SetFalseIfNanOrInfFloat)(
648  size_t num_data, float const data[/*num_data*/],
649  bool result[/*num_data*/]) LIBSAKURA_NOEXCEPT;
650 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(Uint8ToBool)(size_t num_data,
666  uint8_t const data[/*num_data*/], bool result[/*num_data*/])
667  LIBSAKURA_NOEXCEPT;
668 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(Uint32ToBool)(size_t num_data,
673  uint32_t const data[/*num_data*/], bool result[/*num_data*/])
674  LIBSAKURA_NOEXCEPT;
675 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(InvertBool)(size_t num_data,
692  bool const data[/*num_data*/], bool result[/*num_data*/])
693  LIBSAKURA_NOEXCEPT;
694 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(OperateBitwiseAndUint8)(
731  uint8_t bit_mask, size_t num_data, uint8_t const data[/*num_data*/],
732  bool const edit_mask[/*num_data*/], uint8_t result[/*num_data*/])
733  LIBSAKURA_NOEXCEPT;LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(OperateBitwiseAndUint32)(
738  uint32_t bit_mask, size_t num_data, uint32_t const data[/*num_data*/],
739  bool const edit_mask[/*num_data*/], uint32_t result[/*num_data*/])
740  LIBSAKURA_NOEXCEPT;
741 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(OperateBitwiseConverseNonImplicationUint8)(
779  uint8_t bit_mask, size_t num_data, uint8_t const data[/*num_data*/],
780  bool const edit_mask[/*num_data*/], uint8_t result[/*num_data*/])
781  LIBSAKURA_NOEXCEPT;LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(OperateBitwiseConverseNonImplicationUint32)(
786  uint32_t bit_mask, size_t num_data, uint32_t const data[/*num_data*/],
787  bool const edit_mask[/*num_data*/], uint32_t result[/*num_data*/])
788  LIBSAKURA_NOEXCEPT;
789 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(OperateBitwiseImplicationUint8)(
826  uint8_t bit_mask, size_t num_data, uint8_t const data[/*num_data*/],
827  bool const edit_mask[/*num_data*/], uint8_t result[/*num_data*/])
828  LIBSAKURA_NOEXCEPT;LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(OperateBitwiseImplicationUint32)(
833  uint32_t bit_mask, size_t num_data, uint32_t const data[/*num_data*/],
834  bool const edit_mask[/*num_data*/], uint32_t result[/*num_data*/])
835  LIBSAKURA_NOEXCEPT;
836 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(OperateBitwiseNotUint8)(
865  size_t num_data, uint8_t const data[/*num_data*/],
866  bool const edit_mask[/*num_data*/], uint8_t result[/*num_data*/])
867  LIBSAKURA_NOEXCEPT;LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(OperateBitwiseNotUint32)(
872  size_t num_data, uint32_t const data[/*num_data*/],
873  bool const edit_mask[/*num_data*/], uint32_t result[/*num_data*/])
874  LIBSAKURA_NOEXCEPT;
875 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(OperateBitwiseOrUint8)(
912  uint8_t bit_mask, size_t num_data, uint8_t const data[/*num_data*/],
913  bool const edit_mask[/*num_data*/], uint8_t result[/*num_data*/])
914  LIBSAKURA_NOEXCEPT;LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(OperateBitwiseOrUint32)(
919  uint32_t bit_mask, size_t num_data, uint32_t const data[/*num_data*/],
920  bool const edit_mask[/*num_data*/], uint32_t result[/*num_data*/])
921  LIBSAKURA_NOEXCEPT;
922 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(OperateBitwiseXorUint8)(
959  uint8_t bit_mask, size_t num_data, uint8_t const data[/*num_data*/],
960  bool const edit_mask[/*num_data*/], uint8_t result[/*num_data*/])
961  LIBSAKURA_NOEXCEPT;LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(OperateBitwiseXorUint32)(
966  uint32_t bit_mask, size_t num_data, uint32_t const data[/*num_data*/],
967  bool const edit_mask[/*num_data*/], uint32_t result[/*num_data*/])
968  LIBSAKURA_NOEXCEPT;
969 
973 typedef enum {LIBSAKURA_SYMBOL(InterpolationMethod_kNearest),
977 LIBSAKURA_SYMBOL(InterpolationMethod_kLinear),
981 LIBSAKURA_SYMBOL(InterpolationMethod_kPolynomial),
985 LIBSAKURA_SYMBOL(InterpolationMethod_kSpline),
989 LIBSAKURA_SYMBOL(InterpolationMethod_kNumElements)
993 }LIBSAKURA_SYMBOL(InterpolationMethod);
994 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(InterpolateXAxisFloat)(
1083 LIBSAKURA_SYMBOL(InterpolationMethod) interpolation_method,
1084  uint8_t polynomial_order, size_t num_base,
1085  double const base_position[/*num_base*/], size_t num_array,
1086  float const base_data[/*num_base*num_array*/],
1087  bool const base_mask[/*num_base*num_array*/], size_t num_interpolated,
1088  double const interpolated_position[/*num_interpolated*/],
1089  float interpolated_data[/*num_interpolated*num_array*/],
1090  bool interpolated_mask[/*num_interpolated*num_array*/])
1092 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(InterpolateYAxisFloat)(
1097 LIBSAKURA_SYMBOL(InterpolationMethod) interpolation_method,
1098  uint8_t polynomial_order, size_t num_base,
1099  double const base_position[/*num_base*/], size_t num_array,
1100  float const base_data[/*num_base*num_array*/],
1101  bool const base_mask[/*num_base*num_array*/], size_t num_interpolated,
1102  double const interpolated_position[/*num_interpolated*/],
1103  float interpolated_data[/*num_interpolated*num_array*/],
1104  bool interpolated_mask[/*num_interpolated*num_array*/])
1105  LIBSAKURA_NOEXCEPT;
1106 
1146 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(CalibrateDataWithArrayScalingFloat)(
1147  size_t num_data, float const scaling_factor[/*num_data*/],
1148  float const data[/*num_data*/], float const reference[/*num_data*/],
1149  float result[/*num_data*/]) LIBSAKURA_NOEXCEPT;
1150 
1187 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(CalibrateDataWithConstScalingFloat)(
1188  float scaling_factor, size_t num_data, float const data[/*num_data*/],
1189  float const reference[/*num_data*/], float result[/*num_data*/])
1190  LIBSAKURA_NOEXCEPT;
1191 
1195 struct LIBSAKURA_SYMBOL(Convolve1DContextFloat);
1196 
1228 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(CreateGaussianKernelFloat)(
1229  float kernel_width, size_t num_kernel, float kernel[])
1230  LIBSAKURA_NOEXCEPT LIBSAKURA_WARN_UNUSED_RESULT;
1231 
1249 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(CreateConvolve1DContextFFTFloat)(
1250  size_t num_kernel, float const kernel[/*num_kernel*/],
1251  struct LIBSAKURA_SYMBOL(Convolve1DContextFloat) **context)
1252  LIBSAKURA_NOEXCEPT LIBSAKURA_WARN_UNUSED_RESULT;
1253 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(Convolve1DFloat)(size_t num_kernel,
1295  float const kernel[/*num_kernel*/], size_t num_data,
1296  float const input_data[/*num_data*/],
1297  bool const input_mask[/*num_data*/], float output_data[/*num_data*/],
1298  float output_weight[/*num_data*/]) LIBSAKURA_NOEXCEPT;LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(Convolve1DFFTFloat)(
1320  struct LIBSAKURA_SYMBOL(Convolve1DContextFloat) const *context,
1321  size_t num_data, float const input_data[/*num_data*/],
1322  float output_data[/*num_data*/]) LIBSAKURA_NOEXCEPT;LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(DestroyConvolve1DContextFloat)(
1333  struct LIBSAKURA_SYMBOL(Convolve1DContextFloat) *context)
1334  LIBSAKURA_NOEXCEPT;
1335 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(GetLSQCoefficientsDouble)(
1405  size_t const num_data, float const data[/*num_data*/],
1406  bool const mask[/*num_data*/], size_t const num_model_bases,
1407  double const basis_data[/*num_model_bases*num_data*/],
1408  size_t const num_lsq_bases,
1409  size_t const use_bases_idx[/*num_lsq_bases*/],
1410  double lsq_matrix[/*num_lsq_bases*num_lsq_bases*/],
1411  double lsq_vector[/*num_lsq_bases*/])
1412  LIBSAKURA_NOEXCEPT LIBSAKURA_WARN_UNUSED_RESULT;
1413 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(UpdateLSQCoefficientsDouble)(
1484  size_t const num_data, float const data[/*num_data*/],
1485  bool const mask[/*num_data*/], size_t const num_exclude_indices,
1486  size_t const exclude_indices[/*num_data*/],
1487  size_t const num_model_bases,
1488  double const basis_data[/*num_model_bases*num_data*/],
1489  size_t const num_lsq_bases,
1490  size_t const use_bases_idx[/*num_lsq_bases*/],
1491  double lsq_matrix[/*num_lsq_bases*num_lsq_bases*/],
1492  double lsq_vector[/*num_lsq_bases*/])
1493  LIBSAKURA_NOEXCEPT LIBSAKURA_WARN_UNUSED_RESULT;
1494 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(SolveSimultaneousEquationsByLUDouble)(
1522  size_t num_equations,
1523  double const in_matrix[/*num_equations*num_equations*/],
1524  double const in_vector[/*num_equations*/],
1525  double out[/*num_equations*/])
1526  LIBSAKURA_NOEXCEPT LIBSAKURA_WARN_UNUSED_RESULT;
1527 
1528 //LM part----------------------------------------------------------------
1560 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(LMFitGaussianFloat)(
1561  size_t const num_data, float const data[/*num_data*/],
1562  bool const mask[/*num_data*/], size_t const num_peaks,
1563  double height[/*num_peaks*/], double err_height[/*num_peaks*/],
1564  double center[/*num_peaks*/], double err_center[/*num_peaks*/],
1565  double sigma[/*num_peaks*/], double err_sigma[/*num_peaks*/])
1566  LIBSAKURA_NOEXCEPT LIBSAKURA_WARN_UNUSED_RESULT;
1567 
1571 typedef enum {LIBSAKURA_SYMBOL(LSQFitStatus_kOK) = 0,
1575 LIBSAKURA_SYMBOL(LSQFitStatus_kNG) = 1,
1579 LIBSAKURA_SYMBOL(LSQFitStatus_kNotEnoughData) = 2,
1583 LIBSAKURA_SYMBOL(LSQFitStatus_kNumElements)
1587 }LIBSAKURA_SYMBOL(LSQFitStatus);
1588 
1592 typedef enum {LIBSAKURA_SYMBOL(LSQFitType_kPolynomial),
1596 LIBSAKURA_SYMBOL(LSQFitType_kChebyshev),
1600 LIBSAKURA_SYMBOL(LSQFitType_kNumElements)
1604 }LIBSAKURA_SYMBOL(LSQFitType);
1605 
1609 struct LIBSAKURA_SYMBOL(LSQFitContextFloat);
1610 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(CreateLSQFitContextPolynomialFloat)(
1636 LIBSAKURA_SYMBOL(LSQFitType) const lsqfit_type, uint16_t order, size_t num_data,
1637  struct LIBSAKURA_SYMBOL(LSQFitContextFloat) **context)
1639 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(CreateLSQFitContextCubicSplineFloat)(
1660  uint16_t npiece, size_t num_data,
1661  struct LIBSAKURA_SYMBOL(LSQFitContextFloat) **context)
1662  LIBSAKURA_NOEXCEPT LIBSAKURA_WARN_UNUSED_RESULT;
1663 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(CreateLSQFitContextSinusoidFloat)(
1685  uint16_t nwave, size_t num_data,
1686  struct LIBSAKURA_SYMBOL(LSQFitContextFloat) **context)
1687  LIBSAKURA_NOEXCEPT LIBSAKURA_WARN_UNUSED_RESULT;
1688 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(DestroyLSQFitContextFloat)(
1700  struct LIBSAKURA_SYMBOL(LSQFitContextFloat) *context)
1702 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(LSQFitPolynomialFloat)(
1772  struct LIBSAKURA_SYMBOL(LSQFitContextFloat) const *context,
1773  uint16_t order, size_t num_data, float const data[/*num_data*/],
1774  bool const mask[/*num_data*/], float clip_threshold_sigma,
1775  uint16_t num_fitting_max, size_t num_coeff, double coeff[/*num_coeff*/],
1776  float best_fit[/*num_data*/], float residual[/*num_data*/],
1777  bool final_mask[/*num_data*/], float *rms,
1778  LIBSAKURA_SYMBOL(LSQFitStatus) *lsqfit_status)
1779  LIBSAKURA_NOEXCEPT LIBSAKURA_WARN_UNUSED_RESULT;
1780 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(LSQFitCubicSplineFloat)(
1858  struct LIBSAKURA_SYMBOL(LSQFitContextFloat) const *context,
1859  size_t num_pieces, size_t num_data, float const data[/*num_data*/],
1860  bool const mask[/*num_data*/], float clip_threshold_sigma,
1861  uint16_t num_fitting_max, double coeff[/*num_pieces*/][4],
1862  float best_fit[/*num_data*/], float residual[/*num_data*/],
1863  bool final_mask[/*num_data*/], float *rms,
1864  size_t boundary[/*num_pieces+1*/],
1865  LIBSAKURA_SYMBOL(LSQFitStatus) *lsqfit_status)
1866  LIBSAKURA_NOEXCEPT LIBSAKURA_WARN_UNUSED_RESULT;
1867 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(LSQFitSinusoidFloat)(
1946  struct LIBSAKURA_SYMBOL(LSQFitContextFloat) const *context,
1947  size_t num_nwave, size_t const nwave[/*num_nwave*/], size_t num_data,
1948  float const data[/*num_data*/], bool const mask[/*num_data*/],
1949  float clip_threshold_sigma, uint16_t num_fitting_max, size_t num_coeff,
1950  double coeff[/*num_coeff*/], float best_fit[/*num_data*/],
1951  float residual[/*num_data*/], bool final_mask[/*num_data*/], float *rms,
1952  LIBSAKURA_SYMBOL(LSQFitStatus) *lsqfit_status)
1953  LIBSAKURA_NOEXCEPT LIBSAKURA_WARN_UNUSED_RESULT;
1954 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(SubtractPolynomialFloat)(
1980  struct LIBSAKURA_SYMBOL(LSQFitContextFloat) const *context,
1981  size_t num_data, float const data[/*num_data*/], size_t num_coeff,
1982  double const coeff[/*num_coeff*/], float out[/*num_data*/])
1983  LIBSAKURA_NOEXCEPT LIBSAKURA_WARN_UNUSED_RESULT;
1984 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(SubtractCubicSplineFloat)(
2017  struct LIBSAKURA_SYMBOL(LSQFitContextFloat) const *context,
2018  size_t num_data, float const data[/*num_data*/], size_t num_pieces,
2019  double const coeff[/*num_pieces*/][4],
2020  size_t const boundary[/*num_pieces+1*/], float out[/*num_data*/])
2021  LIBSAKURA_NOEXCEPT LIBSAKURA_WARN_UNUSED_RESULT;
2022 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(SubtractSinusoidFloat)(
2058  struct LIBSAKURA_SYMBOL(LSQFitContextFloat) const *context,
2059  size_t num_data, float const data[/*num_data*/], size_t num_nwave,
2060  size_t const nwave[/*num_nwave*/], size_t num_coeff,
2061  double const coeff[/*num_coeff*/], float out[/*num_data*/])
2062  LIBSAKURA_NOEXCEPT LIBSAKURA_WARN_UNUSED_RESULT;
2063 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(GetNumberOfCoefficientsFloat)(
2083  struct LIBSAKURA_SYMBOL(LSQFitContextFloat) const *context,
2084  uint16_t order, size_t *num_coeff)
2085  LIBSAKURA_NOEXCEPT LIBSAKURA_WARN_UNUSED_RESULT;
2086 
2131 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(FlipArrayFloat)(
2132  bool inner_most_untouched, size_t dims, size_t const elements[],
2133  float const src[], float dst[]) LIBSAKURA_NOEXCEPT;
2134 
2171 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(UnflipArrayFloat)(
2172  bool inner_most_untouched, size_t dims, size_t const elements[],
2173  float const src[], float dst[]) LIBSAKURA_NOEXCEPT;
2174 
2178 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(FlipArrayDouble)(
2179  bool inner_most_untouched, size_t dims, size_t const elements[],
2180  double const src[], double dst[]) LIBSAKURA_NOEXCEPT;
2181 
2185 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(UnflipArrayDouble)(
2186  bool inner_most_untouched, size_t dims, size_t const elements[],
2187  double const src[], double dst[]) LIBSAKURA_NOEXCEPT;
2188 
2192 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(FlipArrayDouble2)(
2193  bool inner_most_untouched, size_t dims, size_t const elements[],
2194  double const src[][2], double dst[][2]) LIBSAKURA_NOEXCEPT;
2195 
2199 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(UnflipArrayDouble2)(
2200  bool inner_most_untouched, size_t dims, size_t const elements[],
2201  double const src[][2], double dst[][2]) LIBSAKURA_NOEXCEPT;
2202 
2291 LIBSAKURA_SYMBOL(Status) LIBSAKURA_SYMBOL(CreateMaskNearEdgeDouble)(
2292  float fraction, double pixel_size, size_t num_data, double const x[],
2293  double const y[], double const *blc_x, double const *blc_y,
2294  double const *trc_x, double const *trc_y, bool mask[]);
2295 
2296 #ifdef __cplusplus
2297 }
2298 /* extern "C" */
2299 #endif
2300 
2301 #endif /* LIBSAKURA_LIBSAKURA_SAKURA_H_ */
size_t count
number of valid data
Definition: sakura.h:221
#define LIBSAKURA_SYMBOL(x)
Definition: config.h:34
ssize_t index_of_min
index for one of min value.
Definition: sakura.h:241
float min
min value of valid data.
Definition: sakura.h:233
#define LIBSAKURA_NOEXCEPT
Definition: sakura.h:49
double sum
sum of valid data
Definition: sakura.h:225
float max
max value of valid data.
Definition: sakura.h:237
#define LIBSAKURA_WARN_UNUSED_RESULT
Definition: sakura.h:46
double square_sum
sum of squared valid data
Definition: sakura.h:229
ssize_t index_of_max
index for one of max value.
Definition: sakura.h:245