├── Documentation └── ewtPython Dependencies.txt ├── Notebook Examples └── Empirical_Wavelet_Transform_1D.ipynb ├── README.md ├── Tests ├── 1d │ ├── csig1.csv │ ├── csig1I.csv │ ├── csig1R.csv │ ├── eeg.csv │ ├── seismic.csv │ ├── sig1.csv │ ├── sig2.csv │ ├── sig3.csv │ └── sig4.csv └── 2d │ ├── building.csv │ └── texture.csv ├── ewt ├── __init__.py ├── __pycache__ │ ├── Boundaries.cpython-36.pyc │ ├── EWT_1D.cpython-36.pyc │ ├── Tests.cpython-36.pyc │ ├── __init__.cpython-36.pyc │ ├── ewt1d.cpython-36.pyc │ ├── ewt2d.cpython-36.pyc │ └── utilities.cpython-36.pyc ├── boundaries.py ├── ewt1d.py ├── ewt2d.py └── utilities.py ├── ewt_testing.py ├── test_EWT1D.py └── test_EWT2D.py /Documentation/ewtPython Dependencies.txt: -------------------------------------------------------------------------------- 1 | boundaries.py 2 | - removeTrends 3 | - spectrumRegularize 4 | - ewt_GSSDetect 5 | - GSS 6 | - localmin 7 | - removePlateaus 8 | - lengthScaleCurve 9 | - otsu 10 | - empriicalLaw 11 | - halfNormal 12 | - ewtkmeans 13 | - ewt_localMaxBounds 14 | - ewt_localMaxMinBounds 15 | - ewt_adaptiveBounds 16 | 17 | utilities 18 | ewt_params 19 | spectrumRegularize 20 | removeTrends 21 | - ewt_closing 22 | - ewt_dilation 23 | - ewt_erosion 24 | - ewt_opening 25 | - ewt_dilation 26 | - ewt_erosion 27 | - localmin 28 | showewt1dBoundaries 29 | show2DTensorBoundaries 30 | show2DLPBoundaries 31 | show2DCurveletBoundaries 32 | showEWT1DCoefficients 33 | ShowEWT2DCoefficients 34 | 35 | 36 | ewt1d.py 37 | ewt1d 38 | - ewt_boundariesDetect 39 | - ewt_LP_Filterbank 40 | iewt1d 41 | ewt_LP_Filterbank 42 | - ewt_LP_Scaling 43 | - ewt_beta 44 | - ewt_LP_Wavelet 45 | - ewt_beta 46 | - ewt_LP_Scaling_Complex 47 | - ewt_beta 48 | - ewt_LP_Wavelet_Complex 49 | - ewt_beta 50 | - ewt_LP_Wavelet_ComplexLow 51 | - ewt_beta 52 | - ewt_LP_Wavelet_ComplexHigh 53 | - ewt_beta 54 | 55 | ewt2d.py 56 | ewt2dTensor 57 | - ewt_boundariesDetect 58 | - ewt_LP_Filterbank 59 | iewt2dTensor 60 | 61 | ewt2dLP 62 | - ewt_boundariesDetect 63 | -ewt2d_LPFilterbank 64 | - ewt2d_LPscaling 65 | - ewt_beta 66 | - ewt2d_LPwavelet 67 | - ewt_beta 68 | iewt2dLP 69 | 70 | 71 | ewt2d_Ridgelet 72 | - ppfft 73 | - fracfft 74 | - ewt_boundariesDetect 75 | - ewt_LP_Filterbank 76 | 77 | iewt2dRidgelet 78 | - ippfft 79 | - appfft 80 | - fracfft 81 | ewt2dCurvelet 82 | - ewt_boundariesDetect 83 | - ewt2d_curveletFilterbank 84 | iewt2dCurvelet 85 | 86 | ewt2d_curveletFilterbank 87 | - ppfft 88 | - fracfft 89 | - ewt2d_curveletScaling 90 | - ewt_beta 91 | - ewt2d_curveletWavelet 92 | - ewt_beta 93 | - 94 | 95 | ewwt.py 96 | ewt2dWatershed 97 | - ewt2d_watershedBoundariesDetect 98 | - ewt_RemoveTrends 99 | - ewt_spectrumRegularize 100 | - ewwt_getMaxima 101 | - gss2d 102 | - local_min2d #DEPRECATED 103 | - localmin Diags 104 | - otsu 105 | - empiricallaw 106 | - halfNormal 107 | - ewtkmeans 108 | - ewwt_getBoundaries 109 | 110 | - ewt2d_arbitraryFilterbank 111 | - ewt2d_arbitraryFilter 112 | - chamferDist 113 | 114 | 115 | iewt2dWatershed 116 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # The Empirical Wavelet Transform for Python 3 | ### By Basile Hurat 4 | 5 | ## Introduction 6 | This is documentation for the empirical wavelet transform package in Python. Empirical wavelets are a generalization of wavelets. A family of empirical wavelets can be formed from the translation, scaling, and modulation of a mother wavelet. This allows them to be more adaptive than traditional wavelets, and algorithms have been used to construct a family of wavelets that are based on the information of the signal they decompose. The following papers go into more detail on empirical wavelets: 7 | 1. ewt1d 8 | 2. ewt2d 9 | 3. scalespace 10 | 4. ewwt 11 | 5. continuous 12 | 13 | This package is originally based on the MATLAB package by Jerome Gilles (https://www.mathworks.com/matlabcentral/fileexchange/42141-empirical-wavelet-transforms), and includes python implementations of some functions (ppfft,ippfft,appfft,fracfft) based on the MATLAB code by Michael Elad (https://elad.cs.technion.ac.il/software/) . 14 | 15 | The primary functions in this package are: 16 | - ewt1d.py 17 | - **ewt1d**: 1D empirical wavelet transform 18 | - **iewt1d**: 1D inverse empirical wavelet transform 19 | - ewt2d.py 20 | - **ewt2dTensor**: 2D empirical tensor transform 21 | - **iewt2dTensor**: 2D inverse empirical tensor transform 22 | - **ewt2dLP**: 2D empirical Littlewood-Paley transform 23 | - **iewt2dLP**: 2D inverse empirical Littlewood-Paley transform 24 | - **ewt2dRidgelet**: the 2D empirical ridgelet transform 25 | - **iewt2dRidgelet**: 2D inverse empirical ridgelet transform 26 | - **ewt2dCurvelet**: 2D empirical curvelet transform 27 | - **iewt2dCurvelet**: 2D inverse empirical curvelet transform 28 | - utilities.py 29 | - **ewt_params**: Class which contains all empirical wavelet transform parameters 30 | - **showewt1dBoundaries**: Shows boundaries superimposed on spectrum for 1D 31 | - **show2DTensorBoundaries**: Shows boundaries superimposed on spectrum 32 | - **show2DLPBoundaries**: Shows boundaries superimposed on spectrum 33 | - **show2DCurveletBoundaries**: Shows boundaries superimposed on spectrum 34 | - **showEWT1DCoefficients**: Shows resulting coefficients of ewt for 1D 35 | - **ShowEWT2DCoefficients**: Shows resulting coefficients of ewt for 1D 36 | 37 | 38 | ## EWT Parameter Guide 39 | There are many parameters for the empirical wavelet transform functions, all of which are held within the ewt_params() class. This section goes over what each parameter does and the options within that parameter, if appropriate. 40 | First, to set parameters to default, you call the class with no input. Then, you may change parameters as you please 41 | Ex: 42 | 43 | import ewt 44 | params = ewt.utilities.ewt_params() 45 | params.log = 1 46 | 47 | Here are the parameters based on their use 48 | 49 | #### Signal Pre-processing Parameters: 50 | * **log**: Boolean. If 1, performs log of magnitude spectrum of signal before detecting boundaries 51 | * **removeTrends**: Preprocesses by removing global trends within signal. Options include: 52 | * 'none': no changes 53 | * 'plaw': power law fit 54 | * 'poly': polynomial fit 55 | * **degree**: polynomial degree value if you choose 'poly' in removeTrends 56 | * 'morpho': Average of opening and closing operators 57 | * 'tophat': Morphological tophat operator 58 | * 'opening': opening morphological operator 59 | * **spectrumRegularize**: Preprocesses by regularizing the original signal. Options include 60 | * 'gaussian': Gaussian smoothing 61 | * **lengthFilter**: Gaussian filter size 62 | * **sigmaFilter**: Gaussian standard deviation 63 | * 'average': box filter smoothing 64 | * **lengthFilter**: box filter size 65 | * 'closing': morphological closing operator 66 | * **lengthFilter**: operator filter size 67 | 68 | #### Boundary Parameters 69 | * **detect**: Method for detecting boundaries. Options include: 70 | * 'scalespace': Use scalespace representations to determine boundaries,. 71 | * **typeDetect**: Method for scalespace to use to determine meaningful extrema 72 | * 'locmax': Returns midpoints between N highest maxima. 73 | * 'locmaxmin': Returns lowest minima between N highest maxima. 74 | * 'locmaxminf': Same as above except function finds minima from original signal, not pre-processed signal. 75 | * 'adaptive': Returns lowest minima between a set of points init_bounds 76 | * **init_bounds**: array of initial bounds to look for lowest minima between 77 | * 'adaptivereg': Same as above except function finds minima from original signal, not pre-processed signal. 78 | 79 | 80 | - **N**: Determines number of boundaries for all boundary detection methods other than 'scalespace' 81 | 82 | #### Empirical Wavelet Parameters 83 | * **option**: (1,2,3) Option desired when using empirical curvelet transform 84 | 85 | 86 | ## Using EWT for 1D Signals 87 | 88 | Begin by loading ewt package and other necessary packages 89 | 90 | import numpy as np 91 | import scipy as sp 92 | import matplotlib.pyplot as plt 93 | Load a signal and ewt parameter class. Then alter defaults as you please 94 | 95 | x = np.arange(0,1,.001) 96 | f = 6*x + np.cos(8*np.pi*x) + 0.5*np.cos(40*np.pi*x) 97 | params = ewt.utilities.ewt_params() 98 | params.log = 1 99 | params.removeTrends = 'opening' 100 | Then, perform the empirical wavelet transform. If you are working in 1d, then it simply is 101 | 102 | [ewtc,mfb,bounds] = ewt.ewt1d.ewt1d(f,params) 103 | 104 | The ewtc variable holds your empirical wavelet coefficients, the mfb variable holds your empirical wavelets, and the bounds variable gives you the detected bounds that defined your filterbank. 105 | 106 | To perform an inversed empirical wavelet transform, you use 107 | 108 | reconstruction = ewt.ewt1d.iewt1d(ewtc,mfb) 109 | 110 | ## Using EWT for 2D Signals 111 | In 2D, you have multiple options, which differ in numbers of outputs. Your options include: 112 | |function name|Output # | Description | support shape | 113 | |--|--|--|--| 114 | | ewt2dTensor | 5 | Empirical Tensor Transform | Rectangular in Fourier Domain| 115 | | ewt2dLP | 3 | Empirical Littlewood-Paley Transform | Ring in Fourier Domain| 116 | | ewt2dRidgelet | 3 | Empirical Ridgelet Transform | Rectangular in Pseudo-Polar Fourier Domain| 117 | | ewt2dCurvelet* | 4 | Empirical Curvelet Transform | Polar wedges in Fourier Domain| 118 | *The empirical Curvelet transform has multiple options for detecting the boundaries that defined the polar wedges. They are described below 119 | * Option 1: Detects scales and angles independently 120 | * Option 2: Detects scales first, and then detects angles for each scale 121 | * Option 3: Detects angles first, and then detects scales for each angle 122 | 123 | With this, we walk you through an example with 2D EWT. 124 | 125 | Begin by loading ewt package and other necessary packages 126 | 127 | import numpy as np 128 | import scipy as sp 129 | import matplotlib.pyplot as plt 130 | Load an image and ewt parameter class. Then alter defaults as you please 131 | 132 | x = np.arange(0,1,.001) 133 | f = 6*x + np.cos(8*np.pi*x) + 0.5*np.cos(40*np.pi*x) 134 | params = ewt.utilities.ewt_params() 135 | params.log = 1 136 | params.removeTrends = 'opening' 137 | params.option = 2 138 | Then, to perform the 2D empirical wavelet transform, it is straightforward. Here, we perform the empirical curvelet transform but other 2D transforms follow a similar structure. 139 | 140 | [ewtc,mfb,scale_bound,angle_bound] = ewt.ewt2d.ewt2dCurvelet(f,params) 141 | Once again, ewtc holds the empirical curvelet coefficients and mfb holds the empirical curvelet filters. The detected scale bounds and angular bounds are held in separate variables. 142 | 143 | To perform the inverse 2D empirical wavelet transform, you use the relevant inverse function: 144 | 145 | reconstruction = iewt2dCurvelet(ewtc,mfb) 146 | 147 | ## Displaying And Viewing Results 148 | Once you have performed the empirical wavelet transform on your signal, there are two things that useful to visualize: the empirical wavelet coefficients and the detected boundaries that define the empirical wavelet supports. There is a family of functions for each type of visualization. 149 | 150 | We begin with the visualization of empirical wavelet coefficients. There is a function for each dimension, with the following parameters: 151 | 152 | showEWT1DCoefficients(ewtc) 153 | showEWT2DCoefficients(ewtc,ewt_type,option = 1) 154 | 155 | where ewtc is the empirical wavelet coefficients, ewt_type is a string dictating which type you want ('tensor', 'lp', 'ridgelet', 'curvelet'), and option dictates the curvelet option you used. This creates a figure which shows each empirical wavelet coefficient is shown in a different subfigure. 156 | 157 | 158 | As for the the visualization of boundaries, the following functions exist: 159 | 160 | showewt1dBoundaries(f,bounds): 161 | show2DTensorBoundaries(f,bounds_row,bounds_col) 162 | show2DLPBoundaries(f,bounds_scales) 163 | show2DCurveletBoundaries(f,option,bounds_scales,bounds_angles) 164 | 165 | where f is the original signal, 'bounds' variables contain the bounds, and option dictates the option you used for the empirical curvelet transform. *Note: For ridgelets, you use the function for LP Empirical Wavelets!* These functions show a figure with the magnitude spectrum of the image and superimposed on it lines which show the detected boundary. 166 | ## Glossary of Functions 167 | This section names each function contained within this package. We present them based on the files they are found in. Documentation for the individual functions can be found in block comments at the top of each function. 168 | 169 | ### ewt1d 170 | * ewt1d 171 | * iewt1d 172 | * ewt_LP_Filterbank 173 | * ewt_LP_Scaling 174 | * ewt_LP_Wavelet 175 | * ewt_LP_Scaling_Complex 176 | * ewt_LP_Wavelet_ComplexLow 177 | * ewt_LP_Wavelet_CompelxHigh 178 | * ewt_beta 179 | 180 | ### ewt2d 181 | * ewt2dTensor 182 | * iewt2dTensor 183 | * ewt2dLP 184 | * iewt2dLP 185 | * ewt2d_LPFilterbank 186 | * ewt2d_LPscaling 187 | * ewt2d_LPwavelet 188 | * ewt2dRidgelet 189 | * iewt2dRidgelet 190 | * ewt2dCurvelet 191 | * iewt2dCurvelet 192 | * ewt2d_curveletFilterbank 193 | * ewt2d_curveletScaling 194 | * ewt2d_curveletWavelet 195 | * ppfft 196 | * fracfft 197 | * ippfft 198 | * appfft 199 | 200 | ### Boundaries 201 | * ewt_boundariesDetect 202 | * ewt_localMaxBounds 203 | * ewt_localMaxMinBounds 204 | * ewt_adaptiveBounds 205 | * ewt_GSSDetect 206 | * GSS 207 | * lengthScaleCurve 208 | * localmin 209 | * removePlateaus 210 | * otsu 211 | * empiricalLaw 212 | * halfNormal 213 | * ewtkmeans 214 | ### Utilities 215 | * ewt_params (Class) 216 | * spectrumRegularize 217 | * removeTrends 218 | * ewt_opening 219 | * ewt_closing 220 | * ewt_erosion 221 | * ewt_dilation 222 | * showewt1dBoundaries 223 | * show2DTensorBoundaries 224 | * show2DLPBoundaries 225 | * show2DCurveletBoundaries 226 | * showEWT1DCoefficients 227 | * showEWT2DCoefficients -------------------------------------------------------------------------------- /Tests/1d/csig1I.csv: -------------------------------------------------------------------------------- 1 | -9.08E-11,9.08E-11,-9.08E-11,9.08E-11,-9.08E-11,9.08E-11,-9.08E-11,9.08E-11,-9.08E-11,9.08E-11,-9.08E-11,9.08E-11,-9.08E-11,9.08E-11,-9.08E-11,9.08E-11,-9.08E-11,9.08E-11,-9.08E-11,9.08E-11,-9.08E-11,9.08E-11,-9.08E-11,9.08E-11,-9.09E-11,9.09E-11,-9.09E-11,9.09E-11,-9.09E-11,9.09E-11,-9.09E-11,9.09E-11,-9.09E-11,9.09E-11,-9.09E-11,9.09E-11,-9.09E-11,9.09E-11,-9.09E-11,9.10E-11,-9.10E-11,9.10E-11,-9.10E-11,9.10E-11,-9.10E-11,9.10E-11,-9.10E-11,9.10E-11,-9.10E-11,9.11E-11,-9.11E-11,9.11E-11,-9.11E-11,9.11E-11,-9.11E-11,9.11E-11,-9.11E-11,9.12E-11,-9.12E-11,9.12E-11,-9.12E-11,9.12E-11,-9.12E-11,9.12E-11,-9.12E-11,9.13E-11,-9.13E-11,9.13E-11,-9.13E-11,9.13E-11,-9.13E-11,9.14E-11,-9.14E-11,9.14E-11,-9.14E-11,9.14E-11,-9.14E-11,9.15E-11,-9.15E-11,9.15E-11,-9.15E-11,9.15E-11,-9.15E-11,9.16E-11,-9.16E-11,9.16E-11,-9.16E-11,9.16E-11,-9.17E-11,9.17E-11,-9.17E-11,9.17E-11,-9.17E-11,9.18E-11,-9.18E-11,9.18E-11,-9.18E-11,9.18E-11,-9.19E-11,9.19E-11,-9.19E-11,9.19E-11,-9.20E-11,9.20E-11,-9.20E-11,9.20E-11,-9.21E-11,9.21E-11,-9.21E-11,9.21E-11,-9.21E-11,9.22E-11,-9.22E-11,9.22E-11,-9.23E-11,9.23E-11,-9.23E-11,9.23E-11,-9.24E-11,9.24E-11,-9.24E-11,9.24E-11,-9.25E-11,9.25E-11,-9.25E-11,9.26E-11,-9.26E-11,9.26E-11,-9.26E-11,9.27E-11,-9.27E-11,9.27E-11,-9.28E-11,9.28E-11,-9.28E-11,9.29E-11,-9.29E-11,9.29E-11,-9.29E-11,9.30E-11,-9.30E-11,9.30E-11,-9.31E-11,9.31E-11,-9.31E-11,9.32E-11,-9.32E-11,9.32E-11,-9.33E-11,9.33E-11,-9.33E-11,9.34E-11,-9.34E-11,9.35E-11,-9.35E-11,9.35E-11,-9.36E-11,9.36E-11,-9.36E-11,9.37E-11,-9.37E-11,9.37E-11,-9.38E-11,9.38E-11,-9.39E-11,9.39E-11,-9.39E-11,9.40E-11,-9.40E-11,9.41E-11,-9.41E-11,9.41E-11,-9.42E-11,9.42E-11,-9.43E-11,9.43E-11,-9.43E-11,9.44E-11,-9.44E-11,9.45E-11,-9.45E-11,9.46E-11,-9.46E-11,9.46E-11,-9.47E-11,9.47E-11,-9.48E-11,9.48E-11,-9.49E-11,9.49E-11,-9.50E-11,9.50E-11,-9.51E-11,9.51E-11,-9.51E-11,9.52E-11,-9.52E-11,9.53E-11,-9.53E-11,9.54E-11,-9.54E-11,9.55E-11,-9.55E-11,9.56E-11,-9.56E-11,9.57E-11,-9.57E-11,9.58E-11,-9.58E-11,9.59E-11,-9.59E-11,9.60E-11,-9.60E-11,9.61E-11,-9.61E-11,9.62E-11,-9.62E-11,9.63E-11,-9.63E-11,9.64E-11,-9.65E-11,9.65E-11,-9.66E-11,9.66E-11,-9.67E-11,9.67E-11,-9.68E-11,9.68E-11,-9.69E-11,9.70E-11,-9.70E-11,9.71E-11,-9.71E-11,9.72E-11,-9.72E-11,9.73E-11,-9.74E-11,9.74E-11,-9.75E-11,9.75E-11,-9.76E-11,9.77E-11,-9.77E-11,9.78E-11,-9.78E-11,9.79E-11,-9.80E-11,9.80E-11,-9.81E-11,9.82E-11,-9.82E-11,9.83E-11,-9.84E-11,9.84E-11,-9.85E-11,9.85E-11,-9.86E-11,9.87E-11,-9.87E-11,9.88E-11,-9.89E-11,9.89E-11,-9.90E-11,9.91E-11,-9.91E-11,9.92E-11,-9.93E-11,9.94E-11,-9.94E-11,9.95E-11,-9.96E-11,9.96E-11,-9.97E-11,9.98E-11,-9.98E-11,9.99E-11,-1.00E-10,1.00E-10,-1.00E-10,1.00E-10,-1.00E-10,1.00E-10,-1.00E-10,1.01E-10,-1.01E-10,1.01E-10,-1.01E-10,1.01E-10,-1.01E-10,1.01E-10,-1.01E-10,1.01E-10,-1.01E-10,1.01E-10,-1.01E-10,1.01E-10,-1.02E-10,1.02E-10,-1.02E-10,1.02E-10,-1.02E-10,1.02E-10,-1.02E-10,1.02E-10,-1.02E-10,1.02E-10,-1.02E-10,1.02E-10,-1.02E-10,1.03E-10,-1.03E-10,1.03E-10,-1.03E-10,1.03E-10,-1.03E-10,1.03E-10,-1.03E-10,1.03E-10,-1.03E-10,1.03E-10,-1.04E-10,1.04E-10,-1.04E-10,1.04E-10,-1.04E-10,1.04E-10,-1.04E-10,1.04E-10,-1.04E-10,1.04E-10,-1.04E-10,1.05E-10,-1.05E-10,1.05E-10,-1.05E-10,1.05E-10,-1.05E-10,1.05E-10,-1.05E-10,1.05E-10,-1.05E-10,1.05E-10,-1.06E-10,1.06E-10,-1.06E-10,1.06E-10,-1.06E-10,1.06E-10,-1.06E-10,1.06E-10,-1.06E-10,1.06E-10,-1.07E-10,1.07E-10,-1.07E-10,1.07E-10,-1.07E-10,1.07E-10,-1.07E-10,1.07E-10,-1.07E-10,1.08E-10,-1.08E-10,1.08E-10,-1.08E-10,1.08E-10,-1.08E-10,1.08E-10,-1.08E-10,1.08E-10,-1.09E-10,1.09E-10,-1.09E-10,1.09E-10,-1.09E-10,1.09E-10,-1.09E-10,1.09E-10,-1.09E-10,1.10E-10,-1.10E-10,1.10E-10,-1.10E-10,1.10E-10,-1.10E-10,1.10E-10,-1.10E-10,1.10E-10,-1.11E-10,1.11E-10,-1.11E-10,1.11E-10,-1.11E-10,1.11E-10,-1.11E-10,1.11E-10,-1.12E-10,1.12E-10,-1.12E-10,1.12E-10,-1.12E-10,1.12E-10,-1.12E-10,1.12E-10,-1.13E-10,1.13E-10,-1.13E-10,1.13E-10,-1.13E-10,1.13E-10,-1.13E-10,1.14E-10,-1.14E-10,1.14E-10,-1.14E-10,1.14E-10,-1.14E-10,1.14E-10,-1.14E-10,1.15E-10,-1.15E-10,1.15E-10,-1.15E-10,1.15E-10,-1.15E-10,1.15E-10,-1.16E-10,1.16E-10,-1.16E-10,1.16E-10,-1.16E-10,1.16E-10,-1.16E-10,1.17E-10,-1.17E-10,1.17E-10,-1.17E-10,1.17E-10,-1.17E-10,1.18E-10,-1.18E-10,1.18E-10,-1.18E-10,1.18E-10,-1.18E-10,1.18E-10,-1.19E-10,1.19E-10,-1.19E-10,1.19E-10,-1.19E-10,1.19E-10,-1.20E-10,1.20E-10,-1.20E-10,1.20E-10,-1.20E-10,1.20E-10,-1.21E-10,1.21E-10,-1.21E-10,1.21E-10,-1.21E-10,1.21E-10,-1.22E-10,1.22E-10,-1.22E-10,1.22E-10,-1.22E-10,1.22E-10,-1.23E-10,1.23E-10,-1.23E-10,1.23E-10,-1.23E-10,1.23E-10,-1.24E-10,1.24E-10,-1.24E-10,1.24E-10,-1.24E-10,1.25E-10,-1.25E-10,1.25E-10,-1.25E-10,1.25E-10,-1.25E-10,1.26E-10,-1.26E-10,1.26E-10,-1.26E-10,1.26E-10,-1.27E-10,1.27E-10,-1.27E-10,1.27E-10,-1.27E-10,1.28E-10,-1.28E-10,1.28E-10,-1.28E-10,1.28E-10,-1.29E-10,1.29E-10,-1.29E-10,1.29E-10,-1.29E-10,1.30E-10,-1.30E-10,1.30E-10,-1.30E-10,1.30E-10,-1.31E-10,1.31E-10,-1.31E-10,1.31E-10,-1.32E-10,1.32E-10,-1.32E-10,1.32E-10,-1.32E-10,1.33E-10,-1.33E-10,1.33E-10,-1.33E-10,1.33E-10,-1.34E-10,1.34E-10,-1.34E-10,1.34E-10,-1.35E-10,1.35E-10,-1.35E-10,1.35E-10,-1.36E-10,1.36E-10,-1.36E-10,1.36E-10,-1.37E-10,1.37E-10,-1.37E-10,1.37E-10,-1.37E-10,1.38E-10,-1.38E-10,1.38E-10,-1.38E-10,1.39E-10,-1.39E-10,1.39E-10,-1.39E-10,1.40E-10,-1.40E-10,1.40E-10,-1.41E-10,1.41E-10,-1.41E-10,1.41E-10,-1.42E-10,1.42E-10,-1.42E-10,1.42E-10,-1.43E-10,1.43E-10,-1.43E-10,1.43E-10,-1.44E-10,1.44E-10,-1.44E-10,1.45E-10,-1.45E-10,1.45E-10,-1.45E-10,1.46E-10,-1.46E-10,1.46E-10,-1.47E-10,1.47E-10,-1.47E-10,1.47E-10,-1.48E-10,1.48E-10,-1.48E-10,1.49E-10,-1.49E-10,1.49E-10,-1.50E-10,1.50E-10,-1.50E-10,1.51E-10,-1.51E-10,1.51E-10,-1.51E-10,1.52E-10,-1.52E-10,1.52E-10,-1.53E-10,1.53E-10,-1.53E-10,1.54E-10,-1.54E-10,1.54E-10,-1.55E-10,1.55E-10,-1.55E-10,1.56E-10,-1.56E-10,1.56E-10,-1.57E-10,1.57E-10,-1.57E-10,1.58E-10,-1.59E-10,1.58E-10,-1.59E-10,1.59E-10,-1.59E-10,1.60E-10,-1.61E-10,1.60E-10,-1.61E-10,1.61E-10,-1.62E-10,1.64E-10,-1.62E-10,1.61E-10,-1.64E-10,1.64E-10,-1.65E-10,1.66E-10,-1.61E-10,1.64E-10,-1.70E-10,1.66E-10,-1.66E-10,1.66E-10,-1.62E-10,1.73E-10,-1.74E-10,1.62E-10,-1.67E-10,1.68E-10,-1.69E-10,1.84E-10,-1.67E-10,1.54E-10,-1.79E-10,1.76E-10,-1.77E-10,1.83E-10,-1.45E-10,1.64E-10,-2.09E-10,1.73E-10,-1.71E-10,1.67E-10,-1.35E-10,2.19E-10,-2.25E-10,1.23E-10,-1.64E-10,1.70E-10,-1.74E-10,2.86E-10,-1.47E-10,4.87E-11,-2.38E-10,2.14E-10,-2.18E-10,2.59E-10,3.27E-11,1.19E-10,-4.44E-10,1.69E-10,-1.56E-10,1.25E-10,1.05E-10,5.02E-10,-5.29E-10,-2.05E-10,-9.23E-11,1.35E-10,-1.60E-10,9.33E-10,4.53E-11,-7.10E-10,-5.96E-10,4.19E-10,-4.38E-10,6.97E-10,1.25E-09,-2.06E-10,-1.92E-09,8.22E-11,3.35E-12,-2.05E-10,1.65E-09,2.25E-09,-2.34E-09,-2.32E-09,3.87E-10,-1.14E-10,-6.16E-11,4.78E-09,1.32E-09,-5.28E-09,-2.73E-09,1.59E-09,-1.67E-09,3.13E-09,8.38E-09,-2.00E-09,-1.04E-08,-5.51E-10,1.00E-09,-2.15E-09,1.02E-08,1.21E-08,-1.22E-08,-1.41E-08,2.98E-09,-1.42E-09,3.49E-10,2.53E-08,8.55E-09,-2.94E-08,-1.42E-08,7.70E-09,-7.97E-09,1.53E-08,4.52E-08,-1.06E-08,-5.33E-08,-4.24E-09,6.31E-09,-1.21E-08,5.23E-08,6.11E-08,-5.93E-08,-7.22E-08,1.52E-08,-7.28E-09,1.54E-09,1.22E-07,4.44E-08,-1.42E-07,-6.92E-08,3.61E-08,-3.66E-08,6.89E-08,2.13E-07,-4.63E-08,-2.47E-07,-2.28E-08,3.10E-08,-5.66E-08,2.34E-07,2.77E-07,-2.59E-07,-3.25E-07,6.58E-08,-3.03E-08,3.24E-09,5.25E-07,2.01E-07,-6.06E-07,-3.02E-07,1.53E-07,-1.52E-07,2.78E-07,8.90E-07,-1.77E-07,-1.02E-06,-1.04E-07,1.32E-07,-2.33E-07,9.26E-07,1.12E-06,-1.01E-06,-1.30E-06,2.51E-07,-1.09E-07,-2.95E-09,2.01E-06,8.06E-07,-2.30E-06,-1.17E-06,5.76E-07,-5.60E-07,1.00E-06,3.30E-06,-5.96E-07,-3.73E-06,-4.16E-07,4.97E-07,-8.50E-07,3.26E-06,4.03E-06,-3.49E-06,-4.60E-06,8.45E-07,-3.45E-07,-6.44E-08,6.85E-06,2.86E-06,-7.72E-06,-4.03E-06,1.93E-06,-1.84E-06,3.19E-06,1.09E-05,-1.76E-06,-1.21E-05,-1.46E-06,1.66E-06,-2.75E-06,1.02E-05,1.28E-05,-1.07E-05,-1.45E-05,2.52E-06,-9.57E-07,-3.61E-07,2.07E-05,8.99E-06,-2.31E-05,-1.23E-05,5.74E-06,-5.35E-06,9.04E-06,3.17E-05,-4.57E-06,-3.50E-05,-4.55E-06,4.89E-06,-7.89E-06,2.82E-05,3.64E-05,-2.93E-05,-4.05E-05,6.67E-06,-2.33E-06,-1.42E-06,5.56E-05,2.51E-05,-6.12E-05,-3.35E-05,1.52E-05,-1.38E-05,2.27E-05,8.24E-05,-1.04E-05,-8.99E-05,-1.25E-05,1.28E-05,-2.01E-05,6.94E-05,9.15E-05,-7.09E-05,-0.000100444,1.56E-05,-4.96E-06,-4.48E-06,0.000132694,6.20E-05,-0.000144291,-8.07E-05,3.56E-05,-3.17E-05,5.06E-05,0.000190098,-2.07E-05,-0.00020491,-3.04E-05,2.97E-05,-4.54E-05,0.000151844,0.000204471,-0.000152446,-0.000221459,3.24E-05,-9.18E-06,-1.18E-05,0.000281139,0.00013616,-0.000302009,-0.000172814,7.41E-05,-6.46E-05,0.000100178,0.000389406,-3.56E-05,-0.000414922,-6.53E-05,6.12E-05,-9.11E-05,0.000294922,0.000405678,-0.000290961,-0.000433671,5.95E-05,-1.47E-05,-2.66E-05,0.000529048,0.000265094,-0.00056143,-0.00032856,0.000136928,-0.000116863,0.000175864,0.000708457,-5.26E-05,-0.000746201,-0.000124402,0.000112078,-0.00016234,0.000508733,0.000714993,-0.000493428,-0.000753667,9.61E-05,-1.99E-05,-5.12E-05,0.000882803,0.000459854,-0.000928593,-0.000554388,0.000226698,-0.000191977,0.000279662,0.001139981,-6.50E-05,-0.001186298,-0.000222199,0.000198055,-0.000269692,0.000781448,0.001134396,-0.000775758,-0.001122862,0.000103884,-1.79E-05,-4.71E-05,0.001231604,0.000807174,-0.001440272,-0.000824812,0.000413645,-0.000462411,0.000609482,0.00147595,-2.90E-05,-0.001475294,-0.000714326,0.000714784,-0.000766164,0.001056864,0.0019582,-0.001715722,-0.000565206,-0.000413442,3.65E-05,0.000476337,5.01E-05,0.002407549,-0.002965705,-0.00072983,0.00219327,-0.002404456,0.003168656,-0.000462312,-0.000879059,-0.000793602,-0.004210729,0.005639294,-0.001783039,0.002557968,0.004567619,-0.009265527,0.000456271,-0.006973828,-0.000141555,0.007621828,0.000693331,0.015472029,-0.005036865,-0.005210484,-0.004486844,-0.02384098,-0.001271572,-0.008558935,0.005979911,0.019172492,0.00768309,0.029544933,-0.000893242,-0.008370101,-0.008670212,-0.030165665,-0.01308131,-0.033387622,0,0.033387622,0.01308131,0.030165665,0.008670212,0.008370101,0.000893242,-0.029544933,-0.00768309,-0.019172492,-0.005979911,0.008558935,0.001271572,0.02384098,0.004486844,0.005210484,0.005036865,-0.015472029,-0.000693331,-0.007621828,0.000141555,0.006973828,-0.000456271,0.009265527,-0.004567619,-0.002557968,0.001783039,-0.005639294,0.004210729,0.000793602,0.000879059,0.000462312,-0.003168656,0.002404456,-0.00219327,0.00072983,0.002965705,-0.002407549,-5.01E-05,-0.000476337,-3.65E-05,0.000413442,0.000565206,0.001715722,-0.0019582,-0.001056864,0.000766164,-0.000714784,0.000714326,0.001475294,2.90E-05,-0.00147595,-0.000609482,0.000462411,-0.000413645,0.000824812,0.001440272,-0.000807174,-0.001231604,4.71E-05,1.79E-05,-0.000103884,0.001122862,0.000775758,-0.001134396,-0.000781448,0.000269692,-0.000198055,0.000222199,0.001186298,6.50E-05,-0.001139981,-0.000279662,0.000191977,-0.000226698,0.000554388,0.000928593,-0.000459854,-0.000882803,5.12E-05,1.99E-05,-9.61E-05,0.000753667,0.000493428,-0.000714993,-0.000508733,0.00016234,-0.000112078,0.000124402,0.000746201,5.26E-05,-0.000708457,-0.000175864,0.000116863,-0.000136928,0.00032856,0.00056143,-0.000265094,-0.000529048,2.66E-05,1.47E-05,-5.95E-05,0.000433671,0.000290961,-0.000405678,-0.000294922,9.11E-05,-6.12E-05,6.53E-05,0.000414922,3.56E-05,-0.000389406,-0.000100178,6.46E-05,-7.41E-05,0.000172814,0.000302009,-0.00013616,-0.000281139,1.18E-05,9.18E-06,-3.24E-05,0.000221459,0.000152446,-0.000204471,-0.000151844,4.54E-05,-2.97E-05,3.04E-05,0.00020491,2.07E-05,-0.000190098,-5.06E-05,3.17E-05,-3.56E-05,8.07E-05,0.000144291,-6.20E-05,-0.000132694,4.48E-06,4.96E-06,-1.56E-05,0.000100444,7.09E-05,-9.15E-05,-6.94E-05,2.01E-05,-1.28E-05,1.25E-05,8.99E-05,1.04E-05,-8.24E-05,-2.27E-05,1.38E-05,-1.52E-05,3.35E-05,6.12E-05,-2.51E-05,-5.56E-05,1.42E-06,2.33E-06,-6.67E-06,4.05E-05,2.93E-05,-3.64E-05,-2.82E-05,7.89E-06,-4.89E-06,4.55E-06,3.50E-05,4.57E-06,-3.17E-05,-9.04E-06,5.35E-06,-5.74E-06,1.23E-05,2.31E-05,-8.99E-06,-2.07E-05,3.61E-07,9.57E-07,-2.52E-06,1.45E-05,1.07E-05,-1.28E-05,-1.02E-05,2.75E-06,-1.66E-06,1.46E-06,1.21E-05,1.76E-06,-1.09E-05,-3.19E-06,1.84E-06,-1.93E-06,4.03E-06,7.72E-06,-2.86E-06,-6.85E-06,6.44E-08,3.45E-07,-8.45E-07,4.60E-06,3.49E-06,-4.03E-06,-3.26E-06,8.50E-07,-4.97E-07,4.16E-07,3.73E-06,5.96E-07,-3.30E-06,-1.00E-06,5.60E-07,-5.76E-07,1.17E-06,2.30E-06,-8.06E-07,-2.01E-06,2.95E-09,1.09E-07,-2.51E-07,1.30E-06,1.01E-06,-1.12E-06,-9.26E-07,2.33E-07,-1.32E-07,1.04E-07,1.02E-06,1.77E-07,-8.90E-07,-2.78E-07,1.52E-07,-1.53E-07,3.02E-07,6.06E-07,-2.01E-07,-5.25E-07,-3.24E-09,3.03E-08,-6.58E-08,3.25E-07,2.59E-07,-2.77E-07,-2.34E-07,5.66E-08,-3.10E-08,2.28E-08,2.47E-07,4.63E-08,-2.13E-07,-6.89E-08,3.66E-08,-3.61E-08,6.92E-08,1.42E-07,-4.44E-08,-1.22E-07,-1.54E-09,7.28E-09,-1.52E-08,7.22E-08,5.93E-08,-6.11E-08,-5.23E-08,1.21E-08,-6.31E-09,4.24E-09,5.33E-08,1.06E-08,-4.52E-08,-1.53E-08,7.97E-09,-7.70E-09,1.42E-08,2.94E-08,-8.55E-09,-2.53E-08,-3.49E-10,1.42E-09,-2.98E-09,1.41E-08,1.22E-08,-1.21E-08,-1.02E-08,2.15E-09,-1.00E-09,5.51E-10,1.04E-08,2.00E-09,-8.38E-09,-3.13E-09,1.67E-09,-1.59E-09,2.73E-09,5.28E-09,-1.32E-09,-4.78E-09,6.16E-11,1.14E-10,-3.87E-10,2.32E-09,2.34E-09,-2.25E-09,-1.65E-09,2.05E-10,-3.35E-12,-8.22E-11,1.92E-09,2.06E-10,-1.25E-09,-6.97E-10,4.38E-10,-4.19E-10,5.96E-10,7.10E-10,-4.53E-11,-9.33E-10,1.60E-10,-1.35E-10,9.23E-11,2.05E-10,5.29E-10,-5.02E-10,-1.05E-10,-1.25E-10,1.56E-10,-1.69E-10,4.44E-10,-1.19E-10,-3.27E-11,-2.59E-10,2.18E-10,-2.14E-10,2.38E-10,-4.87E-11,1.47E-10,-2.86E-10,1.74E-10,-1.70E-10,1.64E-10,-1.23E-10,2.25E-10,-2.19E-10,1.35E-10,-1.67E-10,1.71E-10,-1.73E-10,2.09E-10,-1.64E-10,1.45E-10,-1.83E-10,1.77E-10,-1.76E-10,1.79E-10,-1.54E-10,1.67E-10,-1.84E-10,1.69E-10,-1.68E-10,1.67E-10,-1.62E-10,1.74E-10,-1.73E-10,1.62E-10,-1.66E-10,1.66E-10,-1.66E-10,1.70E-10,-1.64E-10,1.61E-10,-1.66E-10,1.65E-10,-1.64E-10,1.64E-10,-1.61E-10,1.62E-10,-1.64E-10,1.62E-10,-1.61E-10,1.61E-10,-1.60E-10,1.61E-10,-1.60E-10,1.59E-10,-1.59E-10,1.59E-10,-1.58E-10,1.59E-10,-1.58E-10,1.57E-10,-1.57E-10,1.57E-10,-1.56E-10,1.56E-10,-1.56E-10,1.55E-10,-1.55E-10,1.55E-10,-1.54E-10,1.54E-10,-1.54E-10,1.53E-10,-1.53E-10,1.53E-10,-1.52E-10,1.52E-10,-1.52E-10,1.51E-10,-1.51E-10,1.51E-10,-1.51E-10,1.50E-10,-1.50E-10,1.50E-10,-1.49E-10,1.49E-10,-1.49E-10,1.48E-10,-1.48E-10,1.48E-10,-1.47E-10,1.47E-10,-1.47E-10,1.47E-10,-1.46E-10,1.46E-10,-1.46E-10,1.45E-10,-1.45E-10,1.45E-10,-1.45E-10,1.44E-10,-1.44E-10,1.44E-10,-1.43E-10,1.43E-10,-1.43E-10,1.43E-10,-1.42E-10,1.42E-10,-1.42E-10,1.42E-10,-1.41E-10,1.41E-10,-1.41E-10,1.41E-10,-1.40E-10,1.40E-10,-1.40E-10,1.39E-10,-1.39E-10,1.39E-10,-1.39E-10,1.38E-10,-1.38E-10,1.38E-10,-1.38E-10,1.37E-10,-1.37E-10,1.37E-10,-1.37E-10,1.37E-10,-1.36E-10,1.36E-10,-1.36E-10,1.36E-10,-1.35E-10,1.35E-10,-1.35E-10,1.35E-10,-1.34E-10,1.34E-10,-1.34E-10,1.34E-10,-1.33E-10,1.33E-10,-1.33E-10,1.33E-10,-1.33E-10,1.32E-10,-1.32E-10,1.32E-10,-1.32E-10,1.32E-10,-1.31E-10,1.31E-10,-1.31E-10,1.31E-10,-1.30E-10,1.30E-10,-1.30E-10,1.30E-10,-1.30E-10,1.29E-10,-1.29E-10,1.29E-10,-1.29E-10,1.29E-10,-1.28E-10,1.28E-10,-1.28E-10,1.28E-10,-1.28E-10,1.27E-10,-1.27E-10,1.27E-10,-1.27E-10,1.27E-10,-1.26E-10,1.26E-10,-1.26E-10,1.26E-10,-1.26E-10,1.25E-10,-1.25E-10,1.25E-10,-1.25E-10,1.25E-10,-1.25E-10,1.24E-10,-1.24E-10,1.24E-10,-1.24E-10,1.24E-10,-1.23E-10,1.23E-10,-1.23E-10,1.23E-10,-1.23E-10,1.23E-10,-1.22E-10,1.22E-10,-1.22E-10,1.22E-10,-1.22E-10,1.22E-10,-1.21E-10,1.21E-10,-1.21E-10,1.21E-10,-1.21E-10,1.21E-10,-1.20E-10,1.20E-10,-1.20E-10,1.20E-10,-1.20E-10,1.20E-10,-1.19E-10,1.19E-10,-1.19E-10,1.19E-10,-1.19E-10,1.19E-10,-1.18E-10,1.18E-10,-1.18E-10,1.18E-10,-1.18E-10,1.18E-10,-1.18E-10,1.17E-10,-1.17E-10,1.17E-10,-1.17E-10,1.17E-10,-1.17E-10,1.16E-10,-1.16E-10,1.16E-10,-1.16E-10,1.16E-10,-1.16E-10,1.16E-10,-1.15E-10,1.15E-10,-1.15E-10,1.15E-10,-1.15E-10,1.15E-10,-1.15E-10,1.14E-10,-1.14E-10,1.14E-10,-1.14E-10,1.14E-10,-1.14E-10,1.14E-10,-1.14E-10,1.13E-10,-1.13E-10,1.13E-10,-1.13E-10,1.13E-10,-1.13E-10,1.13E-10,-1.12E-10,1.12E-10,-1.12E-10,1.12E-10,-1.12E-10,1.12E-10,-1.12E-10,1.12E-10,-1.11E-10,1.11E-10,-1.11E-10,1.11E-10,-1.11E-10,1.11E-10,-1.11E-10,1.11E-10,-1.10E-10,1.10E-10,-1.10E-10,1.10E-10,-1.10E-10,1.10E-10,-1.10E-10,1.10E-10,-1.10E-10,1.09E-10,-1.09E-10,1.09E-10,-1.09E-10,1.09E-10,-1.09E-10,1.09E-10,-1.09E-10,1.09E-10,-1.08E-10,1.08E-10,-1.08E-10,1.08E-10,-1.08E-10,1.08E-10,-1.08E-10,1.08E-10,-1.08E-10,1.07E-10,-1.07E-10,1.07E-10,-1.07E-10,1.07E-10,-1.07E-10,1.07E-10,-1.07E-10,1.07E-10,-1.06E-10,1.06E-10,-1.06E-10,1.06E-10,-1.06E-10,1.06E-10,-1.06E-10,1.06E-10,-1.06E-10,1.06E-10,-1.05E-10,1.05E-10,-1.05E-10,1.05E-10,-1.05E-10,1.05E-10,-1.05E-10,1.05E-10,-1.05E-10,1.05E-10,-1.05E-10,1.04E-10,-1.04E-10,1.04E-10,-1.04E-10,1.04E-10,-1.04E-10,1.04E-10,-1.04E-10,1.04E-10,-1.04E-10,1.04E-10,-1.03E-10,1.03E-10,-1.03E-10,1.03E-10,-1.03E-10,1.03E-10,-1.03E-10,1.03E-10,-1.03E-10,1.03E-10,-1.03E-10,1.02E-10,-1.02E-10,1.02E-10,-1.02E-10,1.02E-10,-1.02E-10,1.02E-10,-1.02E-10,1.02E-10,-1.02E-10,1.02E-10,-1.02E-10,1.02E-10,-1.01E-10,1.01E-10,-1.01E-10,1.01E-10,-1.01E-10,1.01E-10,-1.01E-10,1.01E-10,-1.01E-10,1.01E-10,-1.01E-10,1.01E-10,-1.01E-10,1.00E-10,-1.00E-10,1.00E-10,-1.00E-10,1.00E-10,-1.00E-10,1.00E-10,-9.99E-11,9.98E-11,-9.98E-11,9.97E-11,-9.96E-11,9.96E-11,-9.95E-11,9.94E-11,-9.94E-11,9.93E-11,-9.92E-11,9.91E-11,-9.91E-11,9.90E-11,-9.89E-11,9.89E-11,-9.88E-11,9.87E-11,-9.87E-11,9.86E-11,-9.85E-11,9.85E-11,-9.84E-11,9.84E-11,-9.83E-11,9.82E-11,-9.82E-11,9.81E-11,-9.80E-11,9.80E-11,-9.79E-11,9.78E-11,-9.78E-11,9.77E-11,-9.77E-11,9.76E-11,-9.75E-11,9.75E-11,-9.74E-11,9.74E-11,-9.73E-11,9.72E-11,-9.72E-11,9.71E-11,-9.71E-11,9.70E-11,-9.70E-11,9.69E-11,-9.68E-11,9.68E-11,-9.67E-11,9.67E-11,-9.66E-11,9.66E-11,-9.65E-11,9.65E-11,-9.64E-11,9.63E-11,-9.63E-11,9.62E-11,-9.62E-11,9.61E-11,-9.61E-11,9.60E-11,-9.60E-11,9.59E-11,-9.59E-11,9.58E-11,-9.58E-11,9.57E-11,-9.57E-11,9.56E-11,-9.56E-11,9.55E-11,-9.55E-11,9.54E-11,-9.54E-11,9.53E-11,-9.53E-11,9.52E-11,-9.52E-11,9.51E-11,-9.51E-11,9.51E-11,-9.50E-11,9.50E-11,-9.49E-11,9.49E-11,-9.48E-11,9.48E-11,-9.47E-11,9.47E-11,-9.46E-11,9.46E-11,-9.46E-11,9.45E-11,-9.45E-11,9.44E-11,-9.44E-11,9.43E-11,-9.43E-11,9.43E-11,-9.42E-11,9.42E-11,-9.41E-11,9.41E-11,-9.41E-11,9.40E-11,-9.40E-11,9.39E-11,-9.39E-11,9.39E-11,-9.38E-11,9.38E-11,-9.37E-11,9.37E-11,-9.37E-11,9.36E-11,-9.36E-11,9.36E-11,-9.35E-11,9.35E-11,-9.35E-11,9.34E-11,-9.34E-11,9.33E-11,-9.33E-11,9.33E-11,-9.32E-11,9.32E-11,-9.32E-11,9.31E-11,-9.31E-11,9.31E-11,-9.30E-11,9.30E-11,-9.30E-11,9.29E-11,-9.29E-11,9.29E-11,-9.29E-11,9.28E-11,-9.28E-11,9.28E-11,-9.27E-11,9.27E-11,-9.27E-11,9.26E-11,-9.26E-11,9.26E-11,-9.26E-11,9.25E-11,-9.25E-11,9.25E-11,-9.24E-11,9.24E-11,-9.24E-11,9.24E-11,-9.23E-11,9.23E-11,-9.23E-11,9.23E-11,-9.22E-11,9.22E-11,-9.22E-11,9.21E-11,-9.21E-11,9.21E-11,-9.21E-11,9.21E-11,-9.20E-11,9.20E-11,-9.20E-11,9.20E-11,-9.19E-11,9.19E-11,-9.19E-11,9.19E-11,-9.18E-11,9.18E-11,-9.18E-11,9.18E-11,-9.18E-11,9.17E-11,-9.17E-11,9.17E-11,-9.17E-11,9.17E-11,-9.16E-11,9.16E-11,-9.16E-11,9.16E-11,-9.16E-11,9.15E-11,-9.15E-11,9.15E-11,-9.15E-11,9.15E-11,-9.15E-11,9.14E-11,-9.14E-11,9.14E-11,-9.14E-11,9.14E-11,-9.14E-11,9.13E-11,-9.13E-11,9.13E-11,-9.13E-11,9.13E-11,-9.13E-11,9.12E-11,-9.12E-11,9.12E-11,-9.12E-11,9.12E-11,-9.12E-11,9.12E-11,-9.12E-11,9.11E-11,-9.11E-11,9.11E-11,-9.11E-11,9.11E-11,-9.11E-11,9.11E-11,-9.11E-11,9.10E-11,-9.10E-11,9.10E-11,-9.10E-11,9.10E-11,-9.10E-11,9.10E-11,-9.10E-11,9.10E-11,-9.10E-11,9.09E-11,-9.09E-11,9.09E-11,-9.09E-11,9.09E-11,-9.09E-11,9.09E-11,-9.09E-11,9.09E-11,-9.09E-11,9.09E-11,-9.09E-11,9.09E-11,-9.09E-11,9.09E-11,-9.08E-11,9.08E-11,-9.08E-11,9.08E-11,-9.08E-11,9.08E-11,-9.08E-11,9.08E-11,-9.08E-11,9.08E-11,-9.08E-11,9.08E-11,-9.08E-11,9.08E-11,-9.08E-11,9.08E-11,-9.08E-11,9.08E-11,-9.08E-11,9.08E-11,-9.08E-11,9.08E-11 2 | -------------------------------------------------------------------------------- /Tests/1d/csig1R.csv: -------------------------------------------------------------------------------- 1 | 5.00E-08,5.00E-08,5.00E-08,4.99E-08,5.00E-08,4.99E-08,5.00E-08,4.99E-08,5.01E-08,4.99E-08,5.01E-08,4.99E-08,5.01E-08,4.99E-08,5.01E-08,4.98E-08,5.02E-08,4.98E-08,5.02E-08,4.98E-08,5.02E-08,4.98E-08,5.03E-08,4.98E-08,5.03E-08,4.98E-08,5.03E-08,4.98E-08,5.04E-08,4.98E-08,5.04E-08,4.98E-08,5.04E-08,4.98E-08,5.05E-08,4.98E-08,5.05E-08,4.98E-08,5.05E-08,4.97E-08,5.06E-08,4.97E-08,5.06E-08,4.97E-08,5.07E-08,4.97E-08,5.07E-08,4.97E-08,5.08E-08,4.97E-08,5.08E-08,4.98E-08,5.09E-08,4.98E-08,5.09E-08,4.98E-08,5.09E-08,4.98E-08,5.10E-08,4.98E-08,5.10E-08,4.98E-08,5.11E-08,4.98E-08,5.12E-08,4.98E-08,5.12E-08,4.98E-08,5.13E-08,4.98E-08,5.13E-08,4.98E-08,5.14E-08,4.99E-08,5.14E-08,4.99E-08,5.15E-08,4.99E-08,5.16E-08,4.99E-08,5.16E-08,4.99E-08,5.17E-08,4.99E-08,5.17E-08,5.00E-08,5.18E-08,5.00E-08,5.19E-08,5.00E-08,5.19E-08,5.00E-08,5.20E-08,5.00E-08,5.21E-08,5.01E-08,5.21E-08,5.01E-08,5.22E-08,5.01E-08,5.23E-08,5.02E-08,5.24E-08,5.02E-08,5.24E-08,5.02E-08,5.25E-08,5.02E-08,5.26E-08,5.03E-08,5.27E-08,5.03E-08,5.28E-08,5.03E-08,5.28E-08,5.04E-08,5.29E-08,5.04E-08,5.30E-08,5.05E-08,5.31E-08,5.05E-08,5.32E-08,5.05E-08,5.33E-08,5.06E-08,5.33E-08,5.06E-08,5.34E-08,5.07E-08,5.35E-08,5.07E-08,5.36E-08,5.07E-08,5.37E-08,5.08E-08,5.38E-08,5.08E-08,5.39E-08,5.09E-08,5.40E-08,5.09E-08,5.41E-08,5.10E-08,5.42E-08,5.10E-08,5.43E-08,5.11E-08,5.44E-08,5.11E-08,5.45E-08,5.12E-08,5.46E-08,5.13E-08,5.47E-08,5.13E-08,5.48E-08,5.14E-08,5.49E-08,5.14E-08,5.50E-08,5.15E-08,5.51E-08,5.16E-08,5.53E-08,5.16E-08,5.54E-08,5.17E-08,5.55E-08,5.17E-08,5.56E-08,5.18E-08,5.57E-08,5.19E-08,5.58E-08,5.19E-08,5.60E-08,5.20E-08,5.61E-08,5.21E-08,5.62E-08,5.22E-08,5.63E-08,5.22E-08,5.65E-08,5.23E-08,5.66E-08,5.24E-08,5.67E-08,5.25E-08,5.68E-08,5.25E-08,5.70E-08,5.26E-08,5.71E-08,5.27E-08,5.72E-08,5.28E-08,5.74E-08,5.29E-08,5.75E-08,5.30E-08,5.77E-08,5.30E-08,5.78E-08,5.31E-08,5.79E-08,5.32E-08,5.81E-08,5.33E-08,5.82E-08,5.34E-08,5.84E-08,5.35E-08,5.85E-08,5.36E-08,5.87E-08,5.37E-08,5.88E-08,5.38E-08,5.90E-08,5.39E-08,5.91E-08,5.40E-08,5.93E-08,5.41E-08,5.95E-08,5.42E-08,5.96E-08,5.43E-08,5.98E-08,5.44E-08,6.00E-08,5.45E-08,6.01E-08,5.46E-08,6.03E-08,5.47E-08,6.05E-08,5.48E-08,6.06E-08,5.50E-08,6.08E-08,5.51E-08,6.10E-08,5.52E-08,6.12E-08,5.53E-08,6.13E-08,5.54E-08,6.15E-08,5.55E-08,6.17E-08,5.57E-08,6.19E-08,5.58E-08,6.21E-08,5.59E-08,6.23E-08,5.60E-08,6.25E-08,5.62E-08,6.27E-08,5.63E-08,6.28E-08,5.64E-08,6.30E-08,5.66E-08,6.32E-08,5.67E-08,6.34E-08,5.68E-08,6.37E-08,5.70E-08,6.39E-08,5.71E-08,6.41E-08,5.73E-08,6.43E-08,5.74E-08,6.45E-08,5.76E-08,6.47E-08,5.77E-08,6.49E-08,5.78E-08,6.51E-08,5.80E-08,6.54E-08,5.82E-08,6.56E-08,5.83E-08,6.58E-08,5.85E-08,6.60E-08,5.86E-08,6.63E-08,5.88E-08,6.65E-08,5.89E-08,6.67E-08,5.91E-08,6.70E-08,5.93E-08,6.72E-08,5.94E-08,6.75E-08,5.96E-08,6.77E-08,5.98E-08,6.80E-08,6.00E-08,6.82E-08,6.01E-08,6.85E-08,6.03E-08,6.87E-08,6.05E-08,6.90E-08,6.07E-08,6.92E-08,6.09E-08,6.95E-08,6.11E-08,6.98E-08,6.12E-08,7.00E-08,6.14E-08,7.03E-08,6.16E-08,7.06E-08,6.18E-08,7.09E-08,6.20E-08,7.11E-08,6.22E-08,7.14E-08,6.24E-08,7.17E-08,6.26E-08,7.20E-08,6.28E-08,7.23E-08,6.31E-08,7.26E-08,6.33E-08,7.29E-08,6.35E-08,7.32E-08,6.37E-08,7.35E-08,6.39E-08,7.38E-08,6.41E-08,7.41E-08,6.44E-08,7.44E-08,6.46E-08,7.48E-08,6.48E-08,7.51E-08,6.51E-08,7.54E-08,6.53E-08,7.57E-08,6.55E-08,7.61E-08,6.58E-08,7.64E-08,6.60E-08,7.67E-08,6.63E-08,7.71E-08,6.65E-08,7.74E-08,6.68E-08,7.78E-08,6.70E-08,7.81E-08,6.73E-08,7.85E-08,6.75E-08,7.88E-08,6.78E-08,7.92E-08,6.81E-08,7.96E-08,6.83E-08,8.00E-08,6.86E-08,8.03E-08,6.89E-08,8.07E-08,6.92E-08,8.11E-08,6.95E-08,8.15E-08,6.97E-08,8.19E-08,7.00E-08,8.23E-08,7.03E-08,8.27E-08,7.06E-08,8.31E-08,7.09E-08,8.35E-08,7.12E-08,8.39E-08,7.15E-08,8.43E-08,7.18E-08,8.48E-08,7.22E-08,8.52E-08,7.25E-08,8.56E-08,7.28E-08,8.61E-08,7.31E-08,8.65E-08,7.35E-08,8.70E-08,7.38E-08,8.74E-08,7.41E-08,8.79E-08,7.45E-08,8.83E-08,7.48E-08,8.88E-08,7.52E-08,8.93E-08,7.55E-08,8.98E-08,7.59E-08,9.03E-08,7.62E-08,9.08E-08,7.66E-08,9.13E-08,7.70E-08,9.18E-08,7.73E-08,9.23E-08,7.77E-08,9.28E-08,7.81E-08,9.33E-08,7.85E-08,9.38E-08,7.89E-08,9.44E-08,7.93E-08,9.49E-08,7.97E-08,9.54E-08,8.01E-08,9.60E-08,8.05E-08,9.66E-08,8.09E-08,9.71E-08,8.14E-08,9.77E-08,8.18E-08,9.83E-08,8.22E-08,9.89E-08,8.27E-08,9.94E-08,8.31E-08,1.00E-07,8.35E-08,1.01E-07,8.40E-08,1.01E-07,8.45E-08,1.02E-07,8.49E-08,1.03E-07,8.54E-08,1.03E-07,8.59E-08,1.04E-07,8.64E-08,1.04E-07,8.69E-08,1.05E-07,8.73E-08,1.06E-07,8.78E-08,1.06E-07,8.84E-08,1.07E-07,8.89E-08,1.08E-07,8.94E-08,1.09E-07,8.99E-08,1.09E-07,9.05E-08,1.10E-07,9.10E-08,1.11E-07,9.15E-08,1.11E-07,9.21E-08,1.12E-07,9.27E-08,1.13E-07,9.32E-08,1.14E-07,9.38E-08,1.14E-07,9.44E-08,1.15E-07,9.50E-08,1.16E-07,9.56E-08,1.17E-07,9.62E-08,1.18E-07,9.68E-08,1.18E-07,9.74E-08,1.19E-07,9.81E-08,1.20E-07,9.87E-08,1.21E-07,9.94E-08,1.22E-07,1.00E-07,1.23E-07,1.01E-07,1.24E-07,1.01E-07,1.25E-07,1.02E-07,1.26E-07,1.03E-07,1.26E-07,1.03E-07,1.27E-07,1.04E-07,1.28E-07,1.05E-07,1.29E-07,1.06E-07,1.30E-07,1.06E-07,1.31E-07,1.07E-07,1.32E-07,1.08E-07,1.33E-07,1.09E-07,1.34E-07,1.09E-07,1.35E-07,1.10E-07,1.36E-07,1.11E-07,1.38E-07,1.12E-07,1.39E-07,1.13E-07,1.40E-07,1.14E-07,1.41E-07,1.14E-07,1.42E-07,1.15E-07,1.43E-07,1.16E-07,1.44E-07,1.17E-07,1.46E-07,1.18E-07,1.47E-07,1.19E-07,1.48E-07,1.20E-07,1.49E-07,1.21E-07,1.51E-07,1.22E-07,1.52E-07,1.23E-07,1.53E-07,1.24E-07,1.54E-07,1.25E-07,1.56E-07,1.26E-07,1.57E-07,1.27E-07,1.59E-07,1.28E-07,1.60E-07,1.29E-07,1.61E-07,1.30E-07,1.63E-07,1.31E-07,1.64E-07,1.32E-07,1.66E-07,1.33E-07,1.67E-07,1.35E-07,1.69E-07,1.36E-07,1.70E-07,1.37E-07,1.72E-07,1.38E-07,1.74E-07,1.39E-07,1.75E-07,1.41E-07,1.77E-07,1.42E-07,1.79E-07,1.43E-07,1.80E-07,1.44E-07,1.82E-07,1.46E-07,1.84E-07,1.47E-07,1.86E-07,1.49E-07,1.87E-07,1.50E-07,1.89E-07,1.51E-07,1.91E-07,1.53E-07,1.93E-07,1.54E-07,1.95E-07,1.56E-07,1.97E-07,1.57E-07,1.99E-07,1.59E-07,2.01E-07,1.60E-07,2.03E-07,1.62E-07,2.05E-07,1.64E-07,2.08E-07,1.65E-07,2.10E-07,1.67E-07,2.12E-07,1.69E-07,2.14E-07,1.71E-07,2.17E-07,1.72E-07,2.19E-07,1.74E-07,2.21E-07,1.76E-07,2.24E-07,1.78E-07,2.26E-07,1.80E-07,2.29E-07,1.82E-07,2.32E-07,1.84E-07,2.34E-07,1.86E-07,2.37E-07,1.88E-07,2.40E-07,1.91E-07,2.42E-07,1.92E-07,2.45E-07,1.94E-07,2.48E-07,1.97E-07,2.52E-07,1.98E-07,2.54E-07,2.01E-07,2.56E-07,2.03E-07,2.63E-07,2.07E-07,2.62E-07,2.08E-07,2.66E-07,2.09E-07,2.72E-07,2.18E-07,2.73E-07,2.13E-07,2.77E-07,2.17E-07,2.78E-07,2.27E-07,2.91E-07,2.21E-07,2.84E-07,2.27E-07,2.86E-07,2.29E-07,3.09E-07,2.39E-07,2.90E-07,2.33E-07,3.01E-07,2.27E-07,3.15E-07,2.67E-07,3.11E-07,2.30E-07,3.15E-07,2.37E-07,3.04E-07,2.81E-07,3.59E-07,2.37E-07,3.10E-07,2.58E-07,3.03E-07,2.56E-07,4.08E-07,2.97E-07,2.97E-07,2.54E-07,3.36E-07,2.14E-07,3.89E-07,4.00E-07,3.56E-07,2.04E-07,3.60E-07,2.30E-07,2.92E-07,4.28E-07,5.41E-07,2.11E-07,2.88E-07,2.96E-07,2.43E-07,2.68E-07,7.08E-07,4.54E-07,1.91E-07,2.40E-07,3.49E-07,5.17E-08,5.62E-07,8.62E-07,4.13E-07,-1.04E-08,4.05E-07,9.81E-08,9.59E-08,9.14E-07,1.14E-06,2.17E-09,5.31E-08,3.40E-07,-1.34E-07,1.95E-07,1.74E-06,9.68E-07,-3.62E-07,6.78E-08,2.64E-07,-6.77E-07,1.05E-06,2.49E-06,5.00E-07,-9.23E-07,4.19E-07,-4.84E-07,-7.81E-07,2.53E-06,3.18E-06,-8.33E-07,-9.47E-07,3.86E-07,-1.59E-06,-2.13E-07,5.13E-06,2.67E-06,-2.39E-06,-6.58E-07,-1.52E-07,-3.24E-06,2.46E-06,7.77E-06,7.09E-07,-4.04E-06,2.91E-07,-2.44E-06,-3.80E-06,7.50E-06,9.57E-06,-3.51E-06,-4.28E-06,4.25E-07,-6.21E-06,-1.70E-06,1.53E-05,7.87E-06,-8.63E-06,-3.03E-06,-1.47E-06,-1.09E-05,6.24E-06,2.31E-05,1.37E-06,-1.32E-05,-2.92E-07,-7.99E-06,-1.26E-05,2.11E-05,2.75E-05,-1.08E-05,-1.38E-05,4.41E-07,-1.88E-05,-6.18E-06,4.22E-05,2.20E-05,-2.52E-05,-9.62E-06,-4.92E-06,-3.11E-05,1.53E-05,6.25E-05,3.48E-06,-3.66E-05,-2.08E-06,-2.17E-05,-3.50E-05,5.39E-05,7.17E-05,-2.82E-05,-3.73E-05,4.29E-07,-4.88E-05,-1.77E-05,0.000105133,5.61E-05,-6.37E-05,-2.55E-05,-1.26E-05,-7.74E-05,3.45E-05,0.00015129,9.33E-06,-8.90E-05,-6.54E-06,-5.11E-05,-8.47E-05,0.000123506,0.000167706,-6.43E-05,-8.82E-05,4.23E-07,-0.000110975,-4.35E-05,0.000234019,0.000127921,-0.000141669,-5.87E-05,-2.72E-05,-0.000169636,6.99E-05,0.000326179,2.33E-05,-0.000191279,-1.60E-05,-0.000106013,-0.000180681,0.00025204,0.00034964,-0.000129086,-0.000183873,5.45E-07,-0.000223058,-9.34E-05,0.000463752,0.000259783,-0.000278582,-0.000119274,-5.12E-05,-0.000329582,0.000126212,0.000625444,5.17E-05,-0.000364183,-3.33E-05,-0.000194647,-0.000341016,0.000457424,0.000648455,-0.000229185,-0.000339328,1.15E-06,-0.000397324,-0.000176388,0.00081725,0.000468988,-0.000485236,-0.000214547,-8.44E-05,-0.000567834,0.000201887,0.001066968,9.99E-05,-0.000614429,-5.97E-05,-0.000318478,-0.00056738,0.000734601,0.001071112,-0.00035884,-0.000560539,1.17E-05,-0.000636983,-0.000288932,0.001284007,0.000737453,-0.000724997,-0.000366239,-0.000108518,-0.00085793,0.000247648,0.001676861,0.000108283,-0.000887435,-6.68E-05,-0.000548676,-0.000694284,0.000910799,0.001637662,-0.000452427,-0.001027175,0.000328822,-0.001175589,-0.000245849,0.001935209,0.000635404,-0.000415236,-0.001170959,9.26E-05,-0.000919857,-0.000368677,0.003573847,-0.000722783,-0.000648791,0.000168127,-0.002355045,0.000822013,-0.00047562,0.003546288,0.00109659,-0.002575694,0.003955677,-0.004269049,0.00048503,0.003509186,-0.001165957,0.006698719,-0.001216231,0.006158275,0.004316084,-0.001400712,0.013964331,0.000258155,0.010231132,0.013544012,0.003806177,0.018126308,0.002221377,0.016066967,0.019775776,0.018941118,0.051733289,0.036151078,0.046459759,0.035506662,0.002008562,0.013284172,-0.000102908,0.028544738,0.045183594,0.078887203,0.153486321,0.078887203,0.045183594,0.028544738,-0.000102908,0.013284172,0.002008562,0.035506662,0.046459759,0.036151078,0.051733289,0.018941118,0.019775776,0.016066967,0.002221377,0.018126308,0.003806177,0.013544012,0.010231132,0.000258155,0.013964331,-0.001400712,0.004316084,0.006158275,-0.001216231,0.006698719,-0.001165957,0.003509186,0.00048503,-0.004269049,0.003955677,-0.002575694,0.00109659,0.003546288,-0.00047562,0.000822013,-0.002355045,0.000168127,-0.000648791,-0.000722783,0.003573847,-0.000368677,-0.000919857,9.26E-05,-0.001170959,-0.000415236,0.000635404,0.001935209,-0.000245849,-0.001175589,0.000328822,-0.001027175,-0.000452427,0.001637662,0.000910799,-0.000694284,-0.000548676,-6.68E-05,-0.000887435,0.000108283,0.001676861,0.000247648,-0.00085793,-0.000108518,-0.000366239,-0.000724997,0.000737453,0.001284007,-0.000288932,-0.000636983,1.17E-05,-0.000560539,-0.00035884,0.001071112,0.000734601,-0.00056738,-0.000318478,-5.97E-05,-0.000614429,9.99E-05,0.001066968,0.000201887,-0.000567834,-8.44E-05,-0.000214547,-0.000485236,0.000468988,0.00081725,-0.000176388,-0.000397324,1.15E-06,-0.000339328,-0.000229185,0.000648455,0.000457424,-0.000341016,-0.000194647,-3.33E-05,-0.000364183,5.17E-05,0.000625444,0.000126212,-0.000329582,-5.12E-05,-0.000119274,-0.000278582,0.000259783,0.000463752,-9.34E-05,-0.000223058,5.45E-07,-0.000183873,-0.000129086,0.00034964,0.00025204,-0.000180681,-0.000106013,-1.60E-05,-0.000191279,2.33E-05,0.000326179,6.99E-05,-0.000169636,-2.72E-05,-5.87E-05,-0.000141669,0.000127921,0.000234019,-4.35E-05,-0.000110975,4.23E-07,-8.82E-05,-6.43E-05,0.000167706,0.000123506,-8.47E-05,-5.11E-05,-6.54E-06,-8.90E-05,9.33E-06,0.00015129,3.45E-05,-7.74E-05,-1.26E-05,-2.55E-05,-6.37E-05,5.61E-05,0.000105133,-1.77E-05,-4.88E-05,4.29E-07,-3.73E-05,-2.82E-05,7.17E-05,5.39E-05,-3.50E-05,-2.17E-05,-2.08E-06,-3.66E-05,3.48E-06,6.25E-05,1.53E-05,-3.11E-05,-4.92E-06,-9.62E-06,-2.52E-05,2.20E-05,4.22E-05,-6.18E-06,-1.88E-05,4.41E-07,-1.38E-05,-1.08E-05,2.75E-05,2.11E-05,-1.26E-05,-7.99E-06,-2.92E-07,-1.32E-05,1.37E-06,2.31E-05,6.24E-06,-1.09E-05,-1.47E-06,-3.03E-06,-8.63E-06,7.87E-06,1.53E-05,-1.70E-06,-6.21E-06,4.25E-07,-4.28E-06,-3.51E-06,9.57E-06,7.50E-06,-3.80E-06,-2.44E-06,2.91E-07,-4.04E-06,7.09E-07,7.77E-06,2.46E-06,-3.24E-06,-1.52E-07,-6.58E-07,-2.39E-06,2.67E-06,5.13E-06,-2.13E-07,-1.59E-06,3.86E-07,-9.47E-07,-8.33E-07,3.18E-06,2.53E-06,-7.81E-07,-4.84E-07,4.19E-07,-9.23E-07,5.00E-07,2.49E-06,1.05E-06,-6.77E-07,2.64E-07,6.78E-08,-3.62E-07,9.68E-07,1.74E-06,1.95E-07,-1.34E-07,3.40E-07,5.31E-08,2.17E-09,1.14E-06,9.14E-07,9.59E-08,9.81E-08,4.05E-07,-1.04E-08,4.13E-07,8.62E-07,5.62E-07,5.17E-08,3.49E-07,2.40E-07,1.91E-07,4.54E-07,7.08E-07,2.68E-07,2.43E-07,2.96E-07,2.88E-07,2.11E-07,5.41E-07,4.28E-07,2.92E-07,2.30E-07,3.60E-07,2.04E-07,3.56E-07,4.00E-07,3.89E-07,2.14E-07,3.36E-07,2.54E-07,2.97E-07,2.97E-07,4.08E-07,2.56E-07,3.03E-07,2.58E-07,3.10E-07,2.37E-07,3.59E-07,2.81E-07,3.04E-07,2.37E-07,3.15E-07,2.30E-07,3.11E-07,2.67E-07,3.15E-07,2.27E-07,3.01E-07,2.33E-07,2.90E-07,2.39E-07,3.09E-07,2.29E-07,2.86E-07,2.27E-07,2.84E-07,2.21E-07,2.91E-07,2.27E-07,2.78E-07,2.17E-07,2.77E-07,2.13E-07,2.73E-07,2.18E-07,2.72E-07,2.09E-07,2.66E-07,2.08E-07,2.62E-07,2.07E-07,2.63E-07,2.03E-07,2.56E-07,2.01E-07,2.54E-07,1.98E-07,2.52E-07,1.97E-07,2.48E-07,1.94E-07,2.45E-07,1.92E-07,2.42E-07,1.91E-07,2.40E-07,1.88E-07,2.37E-07,1.86E-07,2.34E-07,1.84E-07,2.32E-07,1.82E-07,2.29E-07,1.80E-07,2.26E-07,1.78E-07,2.24E-07,1.76E-07,2.21E-07,1.74E-07,2.19E-07,1.72E-07,2.17E-07,1.71E-07,2.14E-07,1.69E-07,2.12E-07,1.67E-07,2.10E-07,1.65E-07,2.08E-07,1.64E-07,2.05E-07,1.62E-07,2.03E-07,1.60E-07,2.01E-07,1.59E-07,1.99E-07,1.57E-07,1.97E-07,1.56E-07,1.95E-07,1.54E-07,1.93E-07,1.53E-07,1.91E-07,1.51E-07,1.89E-07,1.50E-07,1.87E-07,1.49E-07,1.86E-07,1.47E-07,1.84E-07,1.46E-07,1.82E-07,1.44E-07,1.80E-07,1.43E-07,1.79E-07,1.42E-07,1.77E-07,1.41E-07,1.75E-07,1.39E-07,1.74E-07,1.38E-07,1.72E-07,1.37E-07,1.70E-07,1.36E-07,1.69E-07,1.35E-07,1.67E-07,1.33E-07,1.66E-07,1.32E-07,1.64E-07,1.31E-07,1.63E-07,1.30E-07,1.61E-07,1.29E-07,1.60E-07,1.28E-07,1.59E-07,1.27E-07,1.57E-07,1.26E-07,1.56E-07,1.25E-07,1.54E-07,1.24E-07,1.53E-07,1.23E-07,1.52E-07,1.22E-07,1.51E-07,1.21E-07,1.49E-07,1.20E-07,1.48E-07,1.19E-07,1.47E-07,1.18E-07,1.46E-07,1.17E-07,1.44E-07,1.16E-07,1.43E-07,1.15E-07,1.42E-07,1.14E-07,1.41E-07,1.14E-07,1.40E-07,1.13E-07,1.39E-07,1.12E-07,1.38E-07,1.11E-07,1.36E-07,1.10E-07,1.35E-07,1.09E-07,1.34E-07,1.09E-07,1.33E-07,1.08E-07,1.32E-07,1.07E-07,1.31E-07,1.06E-07,1.30E-07,1.06E-07,1.29E-07,1.05E-07,1.28E-07,1.04E-07,1.27E-07,1.03E-07,1.26E-07,1.03E-07,1.26E-07,1.02E-07,1.25E-07,1.01E-07,1.24E-07,1.01E-07,1.23E-07,1.00E-07,1.22E-07,9.94E-08,1.21E-07,9.87E-08,1.20E-07,9.81E-08,1.19E-07,9.74E-08,1.18E-07,9.68E-08,1.18E-07,9.62E-08,1.17E-07,9.56E-08,1.16E-07,9.50E-08,1.15E-07,9.44E-08,1.14E-07,9.38E-08,1.14E-07,9.32E-08,1.13E-07,9.27E-08,1.12E-07,9.21E-08,1.11E-07,9.15E-08,1.11E-07,9.10E-08,1.10E-07,9.05E-08,1.09E-07,8.99E-08,1.09E-07,8.94E-08,1.08E-07,8.89E-08,1.07E-07,8.84E-08,1.06E-07,8.78E-08,1.06E-07,8.73E-08,1.05E-07,8.69E-08,1.04E-07,8.64E-08,1.04E-07,8.59E-08,1.03E-07,8.54E-08,1.03E-07,8.49E-08,1.02E-07,8.45E-08,1.01E-07,8.40E-08,1.01E-07,8.35E-08,1.00E-07,8.31E-08,9.94E-08,8.27E-08,9.89E-08,8.22E-08,9.83E-08,8.18E-08,9.77E-08,8.14E-08,9.71E-08,8.09E-08,9.66E-08,8.05E-08,9.60E-08,8.01E-08,9.54E-08,7.97E-08,9.49E-08,7.93E-08,9.44E-08,7.89E-08,9.38E-08,7.85E-08,9.33E-08,7.81E-08,9.28E-08,7.77E-08,9.23E-08,7.73E-08,9.18E-08,7.70E-08,9.13E-08,7.66E-08,9.08E-08,7.62E-08,9.03E-08,7.59E-08,8.98E-08,7.55E-08,8.93E-08,7.52E-08,8.88E-08,7.48E-08,8.83E-08,7.45E-08,8.79E-08,7.41E-08,8.74E-08,7.38E-08,8.70E-08,7.35E-08,8.65E-08,7.31E-08,8.61E-08,7.28E-08,8.56E-08,7.25E-08,8.52E-08,7.22E-08,8.48E-08,7.18E-08,8.43E-08,7.15E-08,8.39E-08,7.12E-08,8.35E-08,7.09E-08,8.31E-08,7.06E-08,8.27E-08,7.03E-08,8.23E-08,7.00E-08,8.19E-08,6.97E-08,8.15E-08,6.95E-08,8.11E-08,6.92E-08,8.07E-08,6.89E-08,8.03E-08,6.86E-08,8.00E-08,6.83E-08,7.96E-08,6.81E-08,7.92E-08,6.78E-08,7.88E-08,6.75E-08,7.85E-08,6.73E-08,7.81E-08,6.70E-08,7.78E-08,6.68E-08,7.74E-08,6.65E-08,7.71E-08,6.63E-08,7.67E-08,6.60E-08,7.64E-08,6.58E-08,7.61E-08,6.55E-08,7.57E-08,6.53E-08,7.54E-08,6.51E-08,7.51E-08,6.48E-08,7.48E-08,6.46E-08,7.44E-08,6.44E-08,7.41E-08,6.41E-08,7.38E-08,6.39E-08,7.35E-08,6.37E-08,7.32E-08,6.35E-08,7.29E-08,6.33E-08,7.26E-08,6.31E-08,7.23E-08,6.28E-08,7.20E-08,6.26E-08,7.17E-08,6.24E-08,7.14E-08,6.22E-08,7.11E-08,6.20E-08,7.09E-08,6.18E-08,7.06E-08,6.16E-08,7.03E-08,6.14E-08,7.00E-08,6.12E-08,6.98E-08,6.11E-08,6.95E-08,6.09E-08,6.92E-08,6.07E-08,6.90E-08,6.05E-08,6.87E-08,6.03E-08,6.85E-08,6.01E-08,6.82E-08,6.00E-08,6.80E-08,5.98E-08,6.77E-08,5.96E-08,6.75E-08,5.94E-08,6.72E-08,5.93E-08,6.70E-08,5.91E-08,6.67E-08,5.89E-08,6.65E-08,5.88E-08,6.63E-08,5.86E-08,6.60E-08,5.85E-08,6.58E-08,5.83E-08,6.56E-08,5.82E-08,6.54E-08,5.80E-08,6.51E-08,5.78E-08,6.49E-08,5.77E-08,6.47E-08,5.76E-08,6.45E-08,5.74E-08,6.43E-08,5.73E-08,6.41E-08,5.71E-08,6.39E-08,5.70E-08,6.37E-08,5.68E-08,6.34E-08,5.67E-08,6.32E-08,5.66E-08,6.30E-08,5.64E-08,6.28E-08,5.63E-08,6.27E-08,5.62E-08,6.25E-08,5.60E-08,6.23E-08,5.59E-08,6.21E-08,5.58E-08,6.19E-08,5.57E-08,6.17E-08,5.55E-08,6.15E-08,5.54E-08,6.13E-08,5.53E-08,6.12E-08,5.52E-08,6.10E-08,5.51E-08,6.08E-08,5.50E-08,6.06E-08,5.48E-08,6.05E-08,5.47E-08,6.03E-08,5.46E-08,6.01E-08,5.45E-08,6.00E-08,5.44E-08,5.98E-08,5.43E-08,5.96E-08,5.42E-08,5.95E-08,5.41E-08,5.93E-08,5.40E-08,5.91E-08,5.39E-08,5.90E-08,5.38E-08,5.88E-08,5.37E-08,5.87E-08,5.36E-08,5.85E-08,5.35E-08,5.84E-08,5.34E-08,5.82E-08,5.33E-08,5.81E-08,5.32E-08,5.79E-08,5.31E-08,5.78E-08,5.30E-08,5.77E-08,5.30E-08,5.75E-08,5.29E-08,5.74E-08,5.28E-08,5.72E-08,5.27E-08,5.71E-08,5.26E-08,5.70E-08,5.25E-08,5.68E-08,5.25E-08,5.67E-08,5.24E-08,5.66E-08,5.23E-08,5.65E-08,5.22E-08,5.63E-08,5.22E-08,5.62E-08,5.21E-08,5.61E-08,5.20E-08,5.60E-08,5.19E-08,5.58E-08,5.19E-08,5.57E-08,5.18E-08,5.56E-08,5.17E-08,5.55E-08,5.17E-08,5.54E-08,5.16E-08,5.53E-08,5.16E-08,5.51E-08,5.15E-08,5.50E-08,5.14E-08,5.49E-08,5.14E-08,5.48E-08,5.13E-08,5.47E-08,5.13E-08,5.46E-08,5.12E-08,5.45E-08,5.11E-08,5.44E-08,5.11E-08,5.43E-08,5.10E-08,5.42E-08,5.10E-08,5.41E-08,5.09E-08,5.40E-08,5.09E-08,5.39E-08,5.08E-08,5.38E-08,5.08E-08,5.37E-08,5.07E-08,5.36E-08,5.07E-08,5.35E-08,5.07E-08,5.34E-08,5.06E-08,5.33E-08,5.06E-08,5.33E-08,5.05E-08,5.32E-08,5.05E-08,5.31E-08,5.05E-08,5.30E-08,5.04E-08,5.29E-08,5.04E-08,5.28E-08,5.03E-08,5.28E-08,5.03E-08,5.27E-08,5.03E-08,5.26E-08,5.02E-08,5.25E-08,5.02E-08,5.24E-08,5.02E-08,5.24E-08,5.02E-08,5.23E-08,5.01E-08,5.22E-08,5.01E-08,5.21E-08,5.01E-08,5.21E-08,5.00E-08,5.20E-08,5.00E-08,5.19E-08,5.00E-08,5.19E-08,5.00E-08,5.18E-08,5.00E-08,5.17E-08,4.99E-08,5.17E-08,4.99E-08,5.16E-08,4.99E-08,5.16E-08,4.99E-08,5.15E-08,4.99E-08,5.14E-08,4.99E-08,5.14E-08,4.98E-08,5.13E-08,4.98E-08,5.13E-08,4.98E-08,5.12E-08,4.98E-08,5.12E-08,4.98E-08,5.11E-08,4.98E-08,5.10E-08,4.98E-08,5.10E-08,4.98E-08,5.09E-08,4.98E-08,5.09E-08,4.98E-08,5.09E-08,4.98E-08,5.08E-08,4.97E-08,5.08E-08,4.97E-08,5.07E-08,4.97E-08,5.07E-08,4.97E-08,5.06E-08,4.97E-08,5.06E-08,4.97E-08,5.05E-08,4.98E-08,5.05E-08,4.98E-08,5.05E-08,4.98E-08,5.04E-08,4.98E-08,5.04E-08,4.98E-08,5.04E-08,4.98E-08,5.03E-08,4.98E-08,5.03E-08,4.98E-08,5.03E-08,4.98E-08,5.02E-08,4.98E-08,5.02E-08,4.98E-08,5.02E-08,4.98E-08,5.01E-08,4.99E-08,5.01E-08,4.99E-08,5.01E-08,4.99E-08,5.01E-08,4.99E-08,5.00E-08,4.99E-08,5.00E-08,4.99E-08,5.00E-08 2 | -------------------------------------------------------------------------------- /Tests/1d/eeg.csv: -------------------------------------------------------------------------------- 1 | -10446.33398,-10442.35156,-10437.05859,-10443.2041,-10447.44434,-10441.61426,-10438.39453,-10445.56152,-10445.59277,-10440.90723,-10439.38672,-10438.47168,-10442.32715,-10438.69336,-10435.53418,-10442.49609,-10444.34473,-10444.52734,-10444.6416,-10439.12207,-10447.43457,-10447.50879,-10440.63965,-10441.14258,-10442.09863,-10448.62793,-10440.67773,-10438.13379,-10444.25488,-10450.82031,-10442.48242,-10435.92578,-10440.52051,-10447.94824,-10439.81934,-10438.84375,-10443.49902,-10447.1416,-10440.65137,-10439.77441,-10440.44629,-10442.87598,-10447.3125,-10443.44336,-10441.09375,-10448.71875,-10447.02734,-10440.60449,-10440.3418,-10446.28223,-10447.89551,-10438.36816,-10439.50781,-10443.7627,-10449.13184,-10440.64063,-10436.07129,-10441.12793,-10445.86133,-10445.1543,-10440.95898,-10442.07617,-10446.56738,-10446.64551,-10441.77246,-10440.28516,-10445.28711,-10442.55566,-10437.20215,-10440.49609,-10449.94238,-10444.23242,-10438.03711,-10441.33496,-10447.7666,-10447.04785,-10443.64746,-10442.75684,-10446.54297,-10445.61328,-10441.88574,-10434.00879,-10443.16016,-10447.6084,-10443.47852,-10438.21191,-10445.58691,-10444.25488,-10444.9834,-10439.27344,-10440.67188,-10444.45605,-10441.10547,-10438.94727,-10433.93457,-10441.85156,-10441.80371,-10436.44141,-10436.63867,-10442.41895,-10441.11719,-10435.90625,-10431.30762,-10444.75977,-10441.84863,-10439.05273,-10431.48242,-10440.11426,-10447.44824,-10443.00391,-10438.33008,-10442.95703,-10442.18848,-10438.74219,-10437.02734,-10437.13379,-10442.80176,-10439.2627,-10434.60742,-10439.3457,-10442.10645,-10446.36621,-10434.47559,-10439.32227,-10443.66113,-10449.56641,-10443.85645,-10444.07813,-10449.31152,-10455.68457,-10447.90527,-10442.17188,-10447.10742,-10450.91895,-10443.96191,-10442.0459,-10444.65918,-10449.45605,-10444.69434,-10438.80176,-10440.43164,-10447.29395,-10445.86816,-10442.78809,-10441.89746,-10448.69727,-10443.82715,-10440.95508,-10439.59277,-10449.04395,-10453.9707,-10443.89453,-10447.76367,-10451.29199,-10451.28223,-10449.25098,-10441.44043,-10451.53027,-10450.59668,-10444.37793,-10448.66602,-10443.21484,-10450.68164,-10446.70117,-10444.7998,-10440.98633,-10449.81641,-10448.23145,-10447.33008,-10442.05469,-10449.78906,-10455.58301,-10448.37012,-10447.66406,-10452.58887,-10453.04102,-10445.70703,-10446.56348,-10449.96191,-10455.91016,-10449.24023,-10445.57031,-10452.7998,-10453.58887,-10449.99609,-10444.82715,-10447.09082,-10455.34961,-10449.12402,-10446.39551,-10451.57617,-10453.97559,-10453.50098,-10450.38184,-10448.73145,-10453.81445,-10455.36816,-10448.15527,-10446.67285,-10452.88672,-10453.80859,-10446.17188,-10442.5752,-10451.55762,-10454.56152,-10447.94043,-10443.76074,-10454.29102,-10454.94531,-10452.63672,-10443.86328,-10444.63281,-10452.19141,-10448.52539,-10445.72461,-10448.21094,-10449.02832,-10445.0498,-10443.18359,-10447.54688,-10449.02832,-10451.38477,-10447.47461,-10439.52051,-10452.10449,-10449.20215,-10446.99609,-10441.84863,-10453.19531,-10447.55371,-10445.08301,-10445.37207,-10447.69824,-10457.0166,-10452.48438,-10448.1582,-10446.84473,-10454.55469,-10443.79199,-10444.32422,-10448.00195,-10448.0293,-10451.26367,-10444.31641,-10441.98438,-10451.53516,-10449.87988,-10448.24512,-10441.53027,-10447.3584,-10451.88574,-10439.65527,-10435.28418,-10446.5293,-10449.16504,-10446.32617,-10439.93066,-10446.43848,-10451.45801,-10450.13477,-10445.88379,-10448.0293,-10451.47461,-10446.55371,-10443.52051,-10443.78125,-10451.50195,-10451.0918,-10445.06641,-10447.45996,-10452.54004,-10457.4834,-10448.62402,-10444.67773,-10454.91309,-10456.56055,-10450.81641,-10446.43164,-10451.59375,-10457.82715,-10454.75684,-10449.4834,-10456.3877,-10455.38477,-10451.75684,-10451.39844,-10453.22656,-10455.85938,-10456.73145,-10452.19727,-10447.97461,-10450.18555,-10450.54785,-10443.94434,-10445.70215,-10449.43262,-10456.80859,-10446.30273,-10447.66211,-10455.83496,-10454.84277,-10448.8877,-10442.12598,-10453.15723,-10457.8584,-10440.99805,-10438.80176,-10446.10938,-10445.45996,-10443.2832,-10440.8252,-10439.93359,-10445.18262,-10446.04883,-10447.1416,-10446.53418,-10454.60742,-10451.63965,-10448.2832,-10447.27539,-10453.00488,-10451.29395,-10441.40625,-10445.12207,-10450.1416,-10455.41699,-10446.35547,-10437.64746,-10449.33203,-10457.95605,-10447.66309,-10441.50781,-10443.46387,-10450.96484,-10446.91309,-10446.8125,-10444.13867,-10453.79004,-10450.98535,-10440.19629,-10448.56152,-10449.08594,-10454.37598,-10446.90625,-10447.01855,-10450.81738,-10450.76074,-10446.125,-10444.28809,-10453.04785,-10453.67969,-10447.68164,-10441.28809,-10454.72363,-10452.25391,-10445.25586,-10447.65137,-10447.68262,-10450.2168,-10452.91406,-10446.54883,-10445.05078,-10452.34277,-10452.66406,-10444.9248,-10445.60059,-10447.63184,-10452.53809,-10446.50293,-10445.95313,-10453.15234,-10452.16211,-10448.37305,-10443.59082,-10451.0498,-10449.8418,-10447.45117,-10444.75098,-10450.95605,-10454.88672,-10451.00977,-10447.0498,-10450.98828,-10451.42285,-10450.62695,-10444.33301,-10445.00195,-10448.4043,-10443.88086,-10445.91406,-10440.54785,-10447.56348,-10445.68848,-10442.88184,-10436.81543,-10448.09863,-10447.33984,-10442.06445,-10440.30566,-10446.18555,-10448.00293,-10445.6543,-10443.66895,-10445.91406,-10449.20313,-10445.79395,-10441.6084,-10449.74023,-10452.69336,-10446.73145,-10446.86914,-10444.96875,-10453.38281,-10445.05078,-10449.33105,-10443.43066,-10454.33691,-10451.28418,-10444.56445,-10444.67676,-10446.45508,-10454.73535,-10447.5791,-10441.44824,-10446.46582,-10452.86133,-10445.81934,-10442.8291,-10448.14941,-10451.90332,-10449.09277,-10446.71094,-10444.07813,-10450.96875,-10446.93262,-10440.1123,-10440.23242,-10442.49121,-10444.95996,-10440.03613,-10439.66602,-10450.88184,-10447.8916,-10444.84961,-10441.95313,-10449.44238,-10453.50488,-10449.27637,-10443.20117,-10452.23926,-10456.49414,-10444.80859,-10442.05957,-10445.26074,-10449.48145,-10445.91309,-10439.80273,-10447.04199,-10447.50586,-10441.86133,-10435.33203,-10436.37988,-10440.18164,-10438.87891,-10438.68066,-10438.09473,-10442.95801,-10448.19141,-10441.15625,-10435.50879,-10448.83398,-10445.22949,-10442.92773,-10443.13086,-10448.30176,-10449.67188,-10443.18555,-10442.88184,-10443.79004,-10447.7793,-10442.76074,-10442.92383,-10444.79297,-10443.27344,-10441.64941,-10438.50098,-10440.50977,-10443.33594,-10447.51953,-10443.8125,-10437.31348,-10443.67676,-10448.77148,-10442.96777,-10441.41406,-10447.49707,-10451.57813,-10440.76074,-10438.21582,-10447.32227,-10451.46484,-10445.93066,-10437.05762,-10448.35254,-10446.27832,-10442.64941,-10439.59375,-10441.7793,-10445.9248,-10444.23926,-10438.91211,-10438.12109,-10449.63574,-10448.21875,-10445.42578,-10441.29785,-10448.77148,-10446.46191,-10440.0293,-10437.02344,-10440.65332,-10448.40625,-10439.72559,-10437.52832,-10440.82813,-10448.19727,-10441.35547,-10440.02148,-10442.26074,-10448.68652,-10445.36914,-10437.92871,-10441.65723,-10446.30957,-10442.12793,-10437.73242,-10436.36035,-10444.70605,-10441.08398,-10437.72363,-10438.00195,-10443.43066,-10447.07129,-10438.30664,-10432.4541,-10444.34961,-10449.23828,-10441.80762,-10435.38379,-10443.91992,-10447.21973,-10440.15137,-10434.78809,-10441.37012,-10444.62891,-10444.9541,-10437.05664,-10445.19922,-10447.0625,-10444.75488,-10435.82715,-10438.69043,-10443.35645,-10443.17188,-10436.70605,-10440.18555,-10449.15527,-10449.47363,-10439.42969,-10437.18848,-10441.81445,-10444.66602,-10443.33984,-10436.93945,-10447.7041,-10449.60645,-10447.80762,-10445.29004,-10443.94824,-10444.83789,-10447.55566,-10443.91309,-10445.84863,-10446.28027,-10449.66309,-10443.0498,-10446.14355,-10448.99609,-10445.7207,-10440.09082,-10441.25293,-10444.45508,-10449.7207,-10439.51953,-10440.49121,-10447.81445,-10449.12598,-10441.34277,-10442.61914,-10444.51465,-10450.79883,-10446.35254,-10444.7334,-10446.95703,-10448.61035,-10446.15723,-10442.27148,-10447.37207,-10452.00195,-10449.08203,-10445.97461,-10442.38086,-10450.84082,-10452.29688,-10446.35449,-10440.47852,-10448.78613,-10453.42188,-10450.86914,-10445.78516,-10453.03906,-10453.3418,-10445.29297,-10442.43652,-10449.73438,-10450.12988,-10445.7666,-10442.87109,-10443.98633,-10454.4834,-10449.72754,-10444.70605,-10447.26855,-10446.5625,-10449.67188,-10446.40137,-10443.49219,-10451.5,-10447.86133,-10436.76953,-10436.82422,-10444.30469,-10454.18457,-10446.67383,-10440.23926,-10440.79688,-10449.92969,-10440.26758,-10436.54492,-10440.53613,-10446.68164,-10440.25195,-10434.52832,-10448.06152,-10448.3457,-10442.45898,-10439.31934,-10440.57422,-10443.95996,-10445.32129,-10440.17578,-10440.41504,-10448.9209,-10447.41113,-10441.1748,-10438.58691,-10444.22656,-10447.5918,-10444.7334,-10437.32129,-10441.90527,-10449.50488,-10443.17383,-10437.12891,-10446.84863,-10448.13672,-10444.80566,-10441.03516,-10445.43848,-10447.62207,-10446.08887,-10441.03906,-10443.28027,-10446.81836,-10443.55566,-10438.31934,-10441.44824,-10444.65137,-10445.86621,-10441.88379,-10442.36133,-10446.00977,-10451.12207,-10442.38672,-10439.37402,-10443.16309,-10448.43164,-10441.61719,-10433.95703,-10441.83105,-10449.73242,-10443.64648,-10440.93359,-10442.29492,-10446.17188,-10442.19727,-10445.51953,-10436.83789,-10445.39355,-10443.5293,-10440.20996,-10442.5752,-10446.91406,-10448.76172,-10439.4209,-10435.56934,-10442.26172,-10446.53027,-10440.75195,-10434.93848,-10447.51367,-10447.35449,-10443.85938,-10434.47656,-10440.75586,-10443.85352,-10438.69238,-10437.2168,-10439.6416,-10444.20898,-10444.36523,-10440.60645,-10437.89648,-10445.89063,-10444.36426,-10439.16309,-10435.98926,-10443.70215,-10445.03418,-10440.01074,-10433.06055,-10441.75,-10446.66309,-10435.70117,-10434.18848,-10440.64453,-10440.19043,-10430.88965,-10428.35059,-10435.2627,-10441.36133,-10433.49805,-10431.19141,-10436.37012,-10442.16309,-10438.70508,-10435.7666,-10437.28809,-10440.9043,-10442.62793,-10438.28418,-10435.65527,-10444.7793,-10442.33789,-10437.12207,-10435.35547,-10440.64844,-10447.625,-10435.44727,-10434.63379,-10442.1875,-10445.54395,-10438.49609,-10434.53809,-10436.93262,-10444.95313,-10441.10742,-10439.37695,-10443.0293,-10442.11133,-10441.39063,-10440.71289,-10444.77637,-10443.58496,-10447.08301,-10438.00098,-10439.0498,-10441.63379,-10440.05859,-10436.75879,-10435.33203,-10433.77539,-10442.63867,-10438.63574,-10431.28418,-10434.11816,-10440.47461,-10433.23633,-10428.54199,-10434.27441,-10439.55078,-10434.37012,-10432.59082,-10437.20605,-10440.77734,-10439.54883,-10431.1709,-10434.95898,-10438.83984,-10439.57813,-10436.90137,-10433.27344,-10442.85059,-10438.59082,-10433.47559,-10431.03906,-10437.18848,-10441.92676,-10435.28809,-10430.70605,-10437.05371,-10442.0957,-10433.79492,-10434.83398,-10438.5498,-10441.26367,-10437.91992,-10439.94141,-10434.80176,-10437.76172,-10438.81152,-10433.10938,-10440.82129,-10442.85938,-10439.27832,-10438.35742,-10436.96777,-10440.50977,-10441.43164,-10437.00195,-10432.89063,-10435.80176,-10439.64844,-10433.08496,-10434.77148,-10443.33008,-10443.84473,-10430.04883,-10433.05176,-10438.06152,-10442.36426,-10438.76758,-10435.04199,-10437.39453,-10439.40234,-10437.11426,-10429.91504,-10429.60156,-10434.88867,-10440.3291,-10437.21973,-10430.45703,-10442.27734,-10441.10156,-10432.61523,-10434.94336,-10439.23242,-10438.94043,-10433.85742,-10431.49316,-10434.2793,-10442.22168,-10433.37012,-10429.5498,-10435.04492,-10436.27441,-10434.72949,-10433.3623,-10435.65234,-10442.30371,-10441.66699,-10432.70898,-10431.73145,-10436.91016,-10439.09961,-10430.25,-10428.80762,-10437.33008,-10441.61719,-10434.26855,-10431.53125,-10435.7666,-10444.10645,-10433.74121,-10429.13672,-10440.32129,-10445.41699,-10436.74316,-10434.69922,-10439.67578,-10445.22656,-10437.31445,-10436.5498,-10433.17188,-10441.18555,-10436.86523,-10432.11816,-10430.11426,-10442.03516,-10439.71289,-10430.79492,-10430.12207,-10435.25195,-10434.50293,-10429.73242,-10431.21094,-10433.03711,-10438.85254,-10432.18945,-10427.58984,-10429.43555,-10438.41797,-10433.63965,-10434.12695,-10436.69531,-10438.76855,-10435.875,-10434.41113,-10434.26855,-10438.32227,-10436.6748,-10431.81543,-10432.56055,-10442.08203,-10436.32422,-10431.72656,-10428.79297,-10438.65918,-10441.90234,-10430.1084,-10426.78809,-10432.83105,-10440.24121,-10431.14551,-10428.6377,-10439.69043,-10441.31934,-10438.44531,-10439.73047,-10438.25977,-10438.92578,-10438.03906,-10433.19531,-10437.47266,-10442.47559,-10439.58008,-10430.08301,-10433.11621,-10437.81641,-10436.24805,-10435.40137,-10432.17676,-10442.00781,-10440.80957,-10436.3418,-10431.96777,-10432.89355,-10440.53418,-10437.52539,-10425.66113,-10436.22852,-10438.60059,-10434.76367,-10429.46973,-10434.60059,-10437.5166,-10435.06445,-10428.96777,-10433.14648,-10433.78125,-10436.17969,-10427.63184,-10429.52441,-10433.91992,-10434.08105,-10434.00781,-10428.05078,-10435.0459,-10439.875,-10429.66504,-10430.00391,-10431.2373,-10437.50391,-10430.76855,-10426.94434,-10429.94141,-10434.18359,-10431.25684,-10422.13086,-10430.86816,-10434.17285,-10435.29785,-10431.47559,-10432.54199,-10438.69531,-10436.8457,-10428.43652,-10428.35547,-10434.84766,-10432.25586,-10429.47656,-10428.21289,-10434.09863,-10438.38574,-10430.9834,-10419.84961,-10435.59473,-10433.5127,-10425.89355,-10425.69238,-10429.13281,-10430.2002,-10430.71289,-10425.72754,-10431.29395,-10435.2334,-10429.12402,-10425.19824,-10423.55176,-10431.3457,-10433.5498,-10425.53125,-10427.16699,-10433.15918,-10434.07422,-10428.63965,-10424.16699,-10431.15625,-10431.21387,-10430.96289,-10425.3623,-10432.99512,-10433.15527,-10431.69824,-10428.1123,-10428.87598,-10432.45215,-10426.5625,-10427.01465,-10426.85742,-10432.14551,-10434.04395,-10429.28711,-10424.5293,-10435.87305,-10434.42871,-10428.76953,-10431.61621,-10434.52441,-10431.32813,-10426.19922,-10426.91602,-10431.47559,-10433.43652,-10424.33887,-10422.58008,-10429.56934,-10431.2002,-10426.59961,-10423.86133,-10433.24707,-10431.89648,-10427.47754,-10423.0957,-10424.90723,-10425.25195,-10423.68945,-10424.21289,-10425.39453,-10427.06738,-10428.86523,-10424.11035,-10425.44238,-10430.74902,-10432.77539,-10428.8916,-10424.7666,-10431.9082,-10436.70605,-10426.45117,-10421.8291,-10429.93555,-10435.41406,-10429.15332,-10421.96289,-10422.84375,-10428.4834,-10426.00098,-10421.70508,-10425.12109,-10429.32227,-10425.87012,-10426.44141,-10423.52051,-10431.50879,-10432.93555,-10429.80273,-10424.19824,-10433.68359,-10436.00879,-10422.32227,-10419.06934,-10428.95898,-10434.52832,-10426.95117,-10420.52344,-10427.0332,-10429.28223,-10426.2334,-10424.70313,-10430.91211,-10436.66797,-10434.56738,-10428.08008,-10429.73438,-10434.11426,-10435.93555,-10427.20703,-10426.01855,-10433.49023,-10437.57715,-10431.48633,-10425.20898,-10433.99316,-10434.35156,-10426.96191,-10422.96582,-10429.49023,-10437.68848,-10427.85059,-10418.77539,-10430.88281,-10436.63965,-10422.99414,-10425.57324,-10429.31348,-10435.98242,-10433.30078,-10431.57129,-10429.59375,-10434.34668,-10436.0332,-10430.66113,-10429.72363,-10435.25879,-10431.03027,-10428.4873,-10426.25488,-10432.5166,-10433.88281,-10423.4541,-10418.92969,-10427.93066,-10435.23633,-10431.67188,-10425.15332,-10433.37988,-10436.7041,-10431.2627,-10429.21094,-10430.99707,-10433.91406,-10431.25879,-10426.5625,-10428.61035,-10432.39355,-10431.61914,-10424.32422,-10432.91113,-10433.93359,-10432.29297,-10428.31348,-10429.52539,-10437.49512,-10435.23145,-10430.69824,-10426.81445,-10433.93848,-10437.18652,-10429.11035,-10422.3291,-10435.29102,-10432.58203,-10431.9502,-10426.66602,-10434.875,-10435.44043,-10434.59473,-10429.68945,-10429.5293,-10432.3877,-10431.79004,-10428.44336,-10422.75684,-10432.92578,-10429.57813,-10423.58203,-10425.06738,-10428.57813,-10431.7207,-10428.52246,-10421.04297,-10427.42871,-10434.72949,-10425.83398,-10423.33984,-10427.33203,-10432.55762,-10426.85156,-10426.2998,-10431.97852,-10433.85254,-10432.46582,-10428.96777,-10428.9873,-10430.23633,-10426.35352,-10422.32715,-10421.90625,-10426.0791,-10431.73926,-10425.02344,-10422.99023,-10426.96191,-10427.64258,-10419.45508,-10414.2666,-10423.80957,-10427.3252,-10418.74707,-10414.7207,-10420.83203,-10428.62109,-10424.01563,-10423.22754,-10427.16211,-10427.35352,-10428.8252,-10425.24902,-10424.78711,-10428.49805,-10430.87402,-10429.84082,-10425.34473,-10434.80469,-10437.59082,-10426.97168,-10425.09961,-10426.71191,-10434.61816,-10425.0166,-10422.39258,-10426.8916,-10432.3291,-10427.45801,-10418.26074,-10423.29785,-10430.37891,-10424.69727,-10423.84473,-10426.34082,-10428.71875,-10428.98438,-10423.73145,-10421.73242,-10425.94141,-10423.39746,-10425.29492,-10420.30957,-10429.88281,-10434.33887,-10423.27441,-10419.83887,-10426.27832,-10432.30859,-10421.64746,-10420.29102,-10429.14355,-10429.88574,-10424.85742,-10424.04004,-10425.87109,-10434.21875,-10428.97656,-10424.89453,-10429.00781,-10429.57129,-10431.46387,-10424.13184,-10425.31738,-10427.5791,-10427.68262,-10421.5459,-10424.34375,-10427.48828,-10427.2832,-10422.10254,-10418.0293,-10429.39258,-10434.12109,-10423.8877,-10417.56641,-10429.2168,-10430.80176,-10427.44043,-10423.02832,-10427.81836,-10430.85449,-10429.58691,-10424.84375,-10422.87793,-10429.20996,-10429.92578,-10424.61035,-10429.22949,-10427.01465,-10434.30859,-10428.59863,-10425.47656,-10424.88965,-10431.02441,-10425.05566,-10421.87891,-10429.14453,-10430.86523,-10428.40039,-10426.00781,-10428.96973,-10435.33496,-10425.89355,-10425.25586,-10423.93555,-10427.69824,-10425.58496,-10424.48926,-10422.71484,-10430.50391,-10427.44434,-10421.97168,-10426.40918,-10433.1709,-10428.87891,-10424.40723,-10423.32324,-10429.60547,-10433.5918,-10427.7207,-10423.75488,-10428.78516,-10430.34277,-10425.88184,-10421.8418,-10425.15918,-10430.64746,-10425.45898,-10419.07227,-10429.90918,-10432.20117,-10428.0625,-10424.56055,-10432.4541,-10431.02344,-10425.4668,-10422.30176,-10425.11914,-10428.3623,-10428.45605,-10421.39941,-10417.80566,-10425.2373,-10428.43555,-10417.87109,-10417.0752,-10422.49609,-10431.32617,-10424.04785,-10423.89063,-10430.83398,-10433.97949,-10425.91992,-10423.08594,-10429.27441,-10429.80957,-10427.19629,-10423.44043,-10426.49121,-10432.99902,-10431.0332,-10426.36914,-10421.90039,-10429.71387,-10429.56445,-10425.44434,-10426.48438,-10431.89941,-10435.76465,-10422.83203,-10424.12305,-10430.47559,-10436.77637,-10430.1709,-10423.13086,-10430.96875,-10434.15625,-10431.94238,-10424.45996,-10430.05664,-10432.45605,-10426.67969,-10421.47656,-10424.06445,-10424.33496,-10427.09375,-10423.74707,-10426.0166,-10430.9209,-10430.45117,-10422.15625,-10421.89648,-10426.58887,-10430.97363,-10423.00684,-10418.08789,-10425.63672,-10433.33789,-10426.10156,-10424.3125,-10435.55762,-10432.8623,-10428.40234,-10425.25781,-10428.59961,-10433.47656,-10431.80469,-10423.0127,-10422.33984,-10427.88184,-10428,-10421.7666,-10425.07324,-10431.23535,-10431.28516,-10422.83984,-10426.98145,-10427.99512,-10429.31348,-10429.9873,-10422.95117,-10433.3125,-10437.70996,-10431.63086,-10428.10645,-10435.65527,-10438.19141,-10432.7793,-10426.49512,-10427.44824,-10436,-10431.42578,-10430.89844,-10422.60352,-10429.96289,-10431.60059,-10422.86523,-10422.71484,-10430.0625,-10430.9668,-10424.49609,-10423.19043,-10430.38574,-10424.66992,-10428.83301,-10424.13184,-10430.37793,-10432.32813,-10429.23828,-10426.74219,-10429.51758,-10431.75977,-10433.10449,-10426.69141,-10429.47656,-10431.54785,-10428.55469,-10428.40137,-10428.34277,-10430.11328,-10432.71484,-10425.75684,-10427.53711,-10436.57129,-10432.07324,-10429.2373,-10424.11914,-10431.08984,-10434.75977,-10428.21387,-10428.04688,-10436.07129,-10441.82324,-10437.8125,-10425.94922,-10434.38965,-10436.99219,-10427.31152,-10426.32813,-10427.33008,-10435.38379,-10431.8457,-10429.77832,-10430.07324,-10429.87207,-10429.23145,-10433.6377,-10431.64355,-10432.98145,-10436.2002,-10428.82031,-10424.6709,-10431.28613,-10432.08691,-10432.26953,-10425.78125,-10435.16016,-10439.38867,-10436.05762,-10427.04297,-10432.8418,-10437.9209,-10433.48242,-10428.66602,-10431.6875,-10435.95313,-10431.90332,-10424.20996,-10428.28711,-10429.69629,-10430.56348,-10427.1377,-10425.75,-10432.24805,-10434.53516,-10424.78223,-10420.64063,-10432.66602,-10435.95313,-10424.50391,-10420.87207,-10427.02539,-10433.25684,-10430.60645,-10425.82227,-10433.8252,-10431.14551,-10427.78516,-10424.97949,-10423.18457,-10427.33887,-10426.69434,-10424.72656,-10422.36133,-10427.58984,-10427.05566,-10422.92188,-10423.28516,-10429.9541,-10433.7002,-10420.04102,-10421.47363,-10427.66699,-10434.31348,-10422.55762,-10419.28516,-10427.34082,-10434.5459,-10425.75293,-10423.44336,-10428.20996,-10432.42676,-10426.77832,-10428.09668,-10431.54395,-10435.85254,-10431.18066,-10427.97852,-10430.37891,-10434.44141,-10432.03613,-10427.6875,-10423.09277,-10430.39941,-10431.74219,-10427.2041,-10425.83203,-10436.99512,-10440.3252,-10429.28223,-10425.33105,-10431.37012,-10435.3877,-10429.62012,-10426.99121,-10433.12305,-10430.9375,-10428.02832,-10424.58301,-10431.35449,-10429.95508,-10429.72363,-10428.83301,-10426.37598,-10433.4502,-10436.59668,-10430.94531,-10431.83008,-10435.74121,-10435.41895,-10430.50684,-10431.31055,-10434.1416,-10440.05371,-10432.20703,-10426.62207,-10428.19434,-10430.88281,-10424.38965,-10425.82422,-10428.11719,-10430.80273,-10428.95215,-10423.79785,-10426.1748,-10430.48535,-10433.05273,-10429.87891,-10430.84277,-10434.5293,-10434.95605,-10436.7334,-10429.94238,-10436.49609,-10435.45996,-10424.51758,-10423.19531,-10429.53711,-10430.14063,-10424.61719,-10428.0625,-10427.54492,-10435.65234,-10437.72656,-10431.39941,-10433.34277,-10441.12012,-10431.82227,-10428.06836,-10430.05371,-10431.41309,-10426.68457,-10428.58398,-10423.44434,-10432.01855,-10431.33594,-10428.5752,-10423.77734,-10433.15332,-10439.02637,-10427.5127,-10422.66016,-10431.1416,-10434.05176,-10426.50586,-10424.96777,-10429.94727,-10436.36426,-10428.1416,-10424.30664,-10437.24707,-10433.86719,-10432.19629,-10426.24316,-10428.9873,-10430.32324,-10431.85938,-10425.4375,-10431.87305,-10435.50879,-10429.80957,-10427.65625,-10423.80469,-10435.34961,-10436.19434,-10429.66602,-10426.02539,-10433.65332,-10440.18262,-10434.46289,-10427.73047,-10434.0498,-10438.53906,-10435.375,-10428.0918,-10433.53613,-10434.97168,-10429.54297,-10424.02051,-10426.76953,-10432.88086,-10431.13867,-10425.09277,-10425.91699,-10433.88867,-10438.7666,-10425.75879,-10430.4248,-10435.72168,-10433.55957,-10432.61426,-10424.68848,-10430.84277,-10436.48438,-10427.35254,-10430.73535,-10429.44531,-10433.20898,-10429.22461,-10425.22266,-10430.69141,-10437.06836,-10431.76855,-10429.64941,-10430.53516,-10435.0293,-10433.56152,-10427.68066,-10426.52148,-10428.8623,-10430.12305,-10426.53125,-10424.65332,-10429.79883,-10437.86328,-10430.86035,-10425.16406,-10432.34863,-10432.04883,-10429.50488,-10426.88477,-10429.25488,-10432.25586,-10432.51855,-10427.56836,-10429.98242,-10430.52344,-10428.9834,-10429.59766,-10427.67773,-10431.64648,-10431.55859,-10428.02637,-10428.46484,-10432.52539,-10437.87402,-10431.40527,-10428.34668,-10440.54395,-10439.48828,-10431.7168,-10429.36816,-10436.1084,-10436.14453,-10433.07227,-10426.44434,-10433.94238,-10438.37988,-10433.53809,-10430.89453,-10426.55859,-10432.85156,-10432.3584,-10424.06543,-10424.19922,-10430.17383,-10431.39258,-10422.44629,-10424.54492,-10434.2666,-10432.73438,-10429.80957,-10429.4375,-10436.78223,-10432.5498,-10427.23535,-10422.80762,-10428.49902,-10434.86523,-10425.62988,-10425.9209,-10431.34961,-10435.95215,-10434.06348,-10425.83691,-10427.5918,-10426.66016,-10430.83789,-10430.9668,-10429.85156,-10433.24805,-10437.77441,-10434.4375,-10432.25879,-10431.2793,-10435.4502,-10425.9502,-10426.41699,-10436.5752,-10438.25,-10430.2168,-10431.84277,-10437.98438,-10442.35449,-10429.94824,-10426.20996,-10432.13672,-10435.94336,-10435.50293,-10432.12109,-10436.52246,-10435.23828,-10436.8916,-10429.34766,-10430.23047,-10432.77051,-10436.06152,-10428.35938,-10424.15234,-10428.46289,-10437.25977,-10427.88379,-10418.86426,-10431.17773,-10436.37305,-10427.42773,-10422.7959,-10433.13965,-10437.95801,-10433.10254,-10428.98535,-10437.27832,-10435.52637,-10433.17773,-10427.29883,-10432.7041,-10431.5791,-10435.82617,-10432.52539,-10433.28809,-10435.78809,-10435.79688,-10430.89453,-10428.00879,-10436.82227,-10439.65527,-10432.41895,-10427.42676,-10434.72168,-10442.85059,-10436.83594,-10431.19336,-10432.7959,-10438.76465,-10431.77539,-10427.36816,-10434.11523,-10432.51563,-10426.55176,-10421.37891,-10425.46484,-10425.7207,-10424.30859,-10423.79297,-10427.19824,-10431.49219,-10435.68164,-10425.70508,-10425.08496,-10429.03223,-10434.13281,-10427.33887,-10422.8584,-10431.48926,-10435.95313,-10430.4248,-10424.65723,-10427.87988,-10436.04883,-10431.02148,-10427.93652,-10426.40527,-10432.10449,-10431.66699,-10425.87695,-10423.75391,-10428.78711,-10429.89941,-10422.67676,-10423.10547,-10429.75488,-10430.55273,-10423.95313,-10424.84766,-10430.66797,-10436.1582,-10426.62402,-10425.02832,-10430.97949,-10438.50195,-10425.78516,-10417.99414,-10426.05664,-10429.65723,-10424.16504,-10417.74707,-10427.77246,-10429.9668,-10425.43945,-10427.79785,-10429.2168,-10431.33301,-10429.76465,-10424.33008,-10428.60156,-10439.18164,-10434.94434,-10428.80078,-10428.55469,-10437.19531,-10436.66406,-10432.46289,-10428.30078,-10441.40723,-10443.8457,-10435.26074,-10420.58105,-10433.61523,-10435.89551,-10428.62109,-10425.22949,-10427.94727,-10429.75098,-10428.91602,-10422.45117,-10423.33301,-10428.58789,-10430.5,-10424.24512,-10431.04395,-10430.7334,-10434.25293,-10424.91113,-10423.98438,-10432.28223,-10432.31738,-10427.54102,-10424.2168,-10432.54004,-10433.71484,-10426.1582,-10421.91016,-10430.2334,-10434.86035,-10428.75586,-10423.81543,-10433.01172,-10435.89063,-10434.4834,-10425.13281,-10429.70215,-10435.57129,-10434.47852,-10428.85254,-10426.78125,-10434.72266,-10433.94531,-10430.9707,-10424.93262,-10435.09668,-10434.91016,-10427.53027,-10422.87695,-10431.24219,-10437.18066,-10426.71777,-10416.80371,-10423.68652,-10431.5,-10425.50879,-10423.17969,-10430.37305,-10430.50586,-10431.20801,-10429.20117,-10427.36914,-10430.23535,-10427.02637,-10422.0957,-10423.60059,-10423.39551,-10430.9248,-10425.07324,-10421.71484,-10433.2832,-10431.89941,-10427.88086,-10421.00879,-10429.97949,-10431.88965,-10428.01074,-10419.04785,-10428.13086,-10426.45313,-10427.0127,-10425.02344,-10427.37793,-10428.43164,-10430.1416,-10422.05664,-10423.75195,-10430.83984,-10430.15723,-10427.8877,-10425.6084,-10428.43848,-10431.4668,-10423.6582,-10422.57617,-10426.00977,-10431.21777,-10423.53125,-10419.95117,-10426.18359,-10427.48633,-10419.72754,-10414.28027,-10422.33301,-10427.20508,-10429.06738,-10418.85645,-10423.11133,-10430.73633,-10428.56445,-10425.91895,-10423.75684,-10428.83594,-10431.91797,-10425.37305,-10427.90137,-10425.62207,-10426.33301,-10419.00684,-10422.85059,-10422.1084,-10429.56055,-10422.82031,-10422.92969,-10429.92676,-10436.08594,-10423.08398,-10419.89746,-10426.73242,-10431.93652,-10427.89844,-10426.11719,-10422.50391,-10430.83887,-10428.0127,-10422.99902,-10420.30957,-10426.1748,-10429.59082,-10418.28125,-10419.63477,-10425.1543,-10426.99316,-10419.78418,-10417.81445,-10426.15918,-10428.65137,-10422.00293,-10423.24414,-10427.42285,-10433.85059,-10428.33301,-10423.51367,-10431.92188,-10433.55469,-10430.82422,-10428.0332,-10430.34375,-10426.83887,-10430.13672,-10423.1084,-10425.7002,-10432.40137,-10429.67188,-10422.24316,-10424.52832,-10431.31348,-10431.86621,-10426.09766,-10422.82227,-10429.625,-10431.94727,-10424.93652,-10425.78027,-10430.42188,-10430.68066,-10424.80176,-10422.23926,-10428.41309,-10425.87109,-10421.04883,-10420.39453,-10422.37207,-10429.44336,-10426.54785,-10421.89941,-10422.79883,-10432.11035,-10428.21973,-10428.29492,-10427.20801,-10435.85352,-10434.1748,-10425.86133,-10423.97754,-10425.9873,-10431.77539,-10420.07031,-10422.38477,-10427.2002,-10426.66113,-10420.55078,-10421.87109,-10423.4082,-10431.72656,-10429.43457,-10421.38379,-10427.93652,-10429.21777,-10432.93262,-10426.80566,-10427.00781,-10427.82422,-10431.35254,-10425.2334,-10424.88477,-10432.63477,-10431.9248,-10430.28418,-10424.2793,-10432.13867,-10436.92285,-10429.5625,-10424.50098,-10430.78809,-10435.27051,-10426.09863,-10422.65918,-10427.4375,-10428.71387,-10427.34961,-10425.89551,-10426.8584,-10433.84668,-10426.35645,-10427.54004,-10429.25391,-10430.51758,-10435.87109,-10426.14648,-10428.43848,-10437.46777,-10434.09082,-10425.55566,-10421.96387,-10423.27637,-10433.10352,-10423.99121,-10420.7832,-10421.85449,-10427.95215,-10417.74414,-10418.45898,-10422.02832,-10422.28125,-10419.6416,-10419.82715,-10417.94922,-10424.16602,-10426.22363,-10418.99707,-10427.79785,-10430.78125,-10433.03613,-10426.23926,-10426.99707,-10430.18359,-10435.0752,-10433.46191,-10422.30957,-10431.56152,-10432.38281,-10423.98242,-10418.66895,-10422.34082,-10432.30176,-10418.06641,-10422.21484,-10422.6416,-10423.94922,-10424.01953,-10417.12695,-10419.90039,-10426.64258,-10429.78613,-10425.70605,-10425.4043,-10426.52734,-10428.38281,-10418.4541,-10421.85938,-10424.62305,-10431.26367,-10425.86816,-10417.78809,-10432.0166,-10427.91895,-10423.06348,-10416.8457,-10424.97461,-10427.95508,-10422.31738,-10423.48145,-10425.07031,-10428.63379,-10430.22949,-10423.64551,-10426.8457,-10432.5166,-10428.95703,-10425.79492,-10424.3916,-10431.49316,-10429.19531,-10421.24023,-10417.83984,-10423.79883,-10426.0293,-10422.23438,-10413.32324,-10418.25391,-10422.8291,-10421.70313,-10416.83496,-10426.47266,-10427.57324,-10424.97363,-10428.16602,-10427.35449,-10427.70117,-10430.39941,-10424.78906,-10430.58398,-10429.99609,-10431.62109,-10425.28125,-10423.48828,-10431.9248,-10427.09668,-10421.58008,-10420.7334,-10428.88379,-10431.37891,-10421.9043,-10414.55762,-10424.7832,-10427.66992,-10417.7334,-10419.64258,-10426.12305,-10426.10938,-10423.84961,-10419.97461,-10424.09375,-10423.07227,-10425.35156,-10418.4043,-10420.70508,-10423.23242,-10423.52734,-10415.8916,-10420.56738,-10421.89941,-10425.66895,-10419.13281,-10417.68945,-10421.875,-10424.42578,-10416.83496,-10410.5791,-10420.1748,-10425.18066,-10417.91406,-10413.31055,-10420.61035,-10421.89746,-10418.88477,-10415.5918,-10422.35156,-10422.78223,-10422.57617,-10417.70898,-10415.30566,-10422.61816,-10426.61133,-10423.29395,-10418.41309,-10424.85938,-10430.62305,-10422.70996,-10418.37305,-10423.79785,-10424.94043,-10420.26367,-10414.03711,-10420.17969,-10424.36816,-10417.92773,-10415.81738,-10424.00195,-10424.03027,-10418.93262,-10420.16602,-10422.41016,-10426.8291,-10425.79883,-10423.69336,-10424.00781,-10428.55469,-10426.16504,-10419.3916,-10419.14746,-10423.13574,-10422.69922,-10422.03418,-10414.80469,-10421.23047,-10427.25293,-10420.84961,-10416.25098,-10420.45313,-10422.02539,-10414.70215,-10418.56445,-10425.74805,-10429.0498,-10427.11133,-10428.70605,-10426.1377,-10428.20996,-10422.6709,-10419.58301,-10418.33691,-10423.92578,-10422.17676,-10418.20605,-10417.19824,-10423.43262,-10428.06152,-10420.01074,-10417.85449,-10425.08398,-10428.6416,-10418.86523,-10415.03418,-10420.46484,-10426.18359,-10421.78516,-10421.35254,-10418.88574,-10424.20508,-10418.33496,-10417.39063,-10417.00586,-10424.80859,-10423.10742,-10425.80957,-10426.30566,-10425.32031,-10427.53223,-10421.83301,-10420.14551,-10426.04297,-10426.08301,-10421.13379,-10417.0625,-10423.75,-10424.73438,-10417.59668,-10412.37988,-10419.41309,-10420.61621,-10420.35645,-10413.11914,-10416.3418,-10421.0791,-10420.09961,-10413.45313,-10415.75293,-10418.99219,-10420.56055,-10417.51563,-10416.03418,-10422.07813,-10421.7627,-10414.61816,-10409.90234,-10417.69824,-10423.0127,-10417.52832,-10413.57617,-10420.68945,-10423.72754,-10413.57227,-10414.01074,-10421.80273,-10426.79883,-10420.89355,-10414.52637,-10417.08887,-10421.21777,-10420.125,-10416.28809,-10421.99805,-10419.80078,-10423.81055,-10413.66699,-10417.60352,-10421.95215,-10425.27441,-10415.2666,-10413.12012,-10419.63867,-10425.14844,-10417.53809,-10413.92773,-10421.12988,-10424.17773,-10414.74219,-10413.75586,-10417.05762,-10427.04785,-10420.79688,-10419.26758,-10423.39355,-10426.03809,-10423.94727,-10414.23145,-10420.49902,-10419.48047,-10426.81445,-10422.49902,-10420.68457,-10427.63086,-10425.39648,-10420.4707,-10417.0752,-10417.79785,-10426.24219,-10419.18945,-10417.30176,-10422.38477,-10430.09668,-10422.7207,-10418.66895,-10423.62891,-10431.75586,-10423.98828,-10418.66406,-10418.8877,-10420.70703,-10419.69531,-10416.95898,-10418.14355,-10418.88867,-10420.06934,-10414.74414,-10417.64746,-10420.65234,-10424.86133,-10415.20703,-10418.81934,-10425.91992,-10427.25879,-10419.82715,-10415.24609,-10424.64355,-10430.91406,-10417.72461,-10416.16895,-10422.94434,-10425.13477,-10422.58301,-10413.04395,-10418.95898,-10419.4375,-10421.10938,-10410.51367,-10412.28027,-10415.00977,-10417.47754,-10415.84961,-10415.11426,-10421.62012,-10421.20898,-10415.19434,-10413.3457,-10421.82813,-10423.70215,-10418.24023,-10411.56055,-10416.81738,-10424.74219,-10416.94141,-10415.87402,-10420.68262,-10422.68848,-10417.52148,-10411.86719,-10411.20996,-10417.81348,-10419.4707,-10414.01953,-10414.62109,-10418.07715,-10414.67871,-10411.10645,-10413.16895,-10425.70605,-10423.2666,-10415.62598,-10417.8125,-10421.36914,-10423.21777,-10416.98145,-10412.69336,-10424.16113,-10430.44141,-10426.98828,-10420.33984,-10424.83203,-10427.9873,-10421.28809,-10413.01953,-10416.35938,-10423.50195,-10416.55664,-10413.75977,-10418.8418,-10421.18164,-10420.79492,-10410.3457,-10413.08008,-10419.24609,-10423.98926,-10411.59766,-10414.77344,-10419.79688,-10429.01563,-10421.63281,-10417.56348,-10422.57324,-10427.77344,-10425.04785,-10419.59375,-10420.24414,-10425.22363,-10421.76758,-10418.93652,-10418.97168,-10423.6416,-10416.98145,-10413.46387,-10410.40918,-10419.01074,-10420.43945,-10414.43164,-10411.31641,-10422.77246,-10418.4541,-10413.1582,-10408.50879,-10416.19434,-10423.49512,-10412.74902,-10406.56348,-10416.7041,-10420.6084,-10411.01465,-10409.06152,-10417.61621,-10419.50293,-10414.50488,-10408.5957,-10414.31543,-10421.04199,-10419.18848,-10420.99805,-10419.52637,-10418.76367,-10418.83789,-10413.37402,-10408.07813,-10407.74121,-10412.80078,-10408.62695,-10409.98438,-10416.69824,-10421.13379,-10416.07227,-10411.70508,-10421.47852,-10420.71973,-10415.01367,-10417.05273,-10418.33691,-10423.20117,-10415.53809,-10417.35645,-10421.06348,-10425.46973,-10422.81836,-10420.31055,-10425.1416,-10426.79785,-10426.35156,-10414.89648,-10412.03027,-10416.49902,-10424.21777,-10416.6377,-10413.75977,-10419.61426,-10425.30078,-10416.91797,-10410.51465,-10422.06543,-10423.83887,-10421.85742,-10416.89844,-10422.62891,-10424.3623,-10421.43066,-10416.71289,-10420.26855,-10420.96387,-10419.28516,-10416.17676,-10417.99121,-10422.55469,-10419.49707,-10417.875,-10413.90723,-10420.40527,-10420.78418,-10421.67871,-10418.91699,-10425.58398,-10430.77246,-10422.69531,-10417.97656,-10420.72852,-10431.37695,-10424.24707,-10418.6377,-10425.00098,-10424.80664,-10423.05762,-10424.16406,-10424.41309,-10425.2002,-10421.16113,-10418.87305,-10417.58301,-10421.70215,-10417.86621,-10415.68848,-10413.68262,-10417.76172,-10423.45703,-10417.26367,-10414.67871,-10416.36621,-10422.8252,-10415.75977,-10414.34375,-10419.16797,-10427.09766,-10419.79492,-10415.43262,-10419.09375,-10419.37402,-10420.43848,-10419.52344,-10415.7627,-10417.58594,-10415.56934,-10412.83105,-10411.28418,-10419.88672,-10420.34961,-10418.85645,-10412.37988,-10422.10156,-10424.38965,-10417.50195,-10412.25879,-10417.54492,-10426.41699,-10418.39063,-10413.80371,-10419.19336,-10420.57715,-10419.3291,-10411.83008,-10420.58301,-10426.75293,-10422.09375,-10416.56836,-10418.55957,-10420.10254,-10419.2627,-10419.80469,-10416.50879,-10422.48242,-10417.35254,-10418.62793,-10415.62207,-10420.46094,-10421.81934,-10412.7959,-10414.07129,-10422.53613,-10422.86328,-10415.52734,-10408.86426,-10412.11816,-10422.64648,-10417.47266,-10418.51465,-10417.6582,-10422.67773,-10418.74707,-10413.51367,-10413.98242,-10418.58691,-10416.97461,-10407.09082,-10412.5752,-10413.93457,-10419.17969,-10417.81055,-10416.47754,-10423.64844,-10422.03223,-10413.01758,-10408.81348,-10417.69043,-10425.75488,-10417.44336,-10411.65527,-10413.8584,-10419.65625,-10413.64258,-10406.24023,-10414.6084,-10417.86133,-10416.03711,-10412.63379,-10416.8623,-10419.83301,-10423.51563,-10422.18066,-10420.41602,-10420.06055,-10419.37109,-10418.2959,-10414.76367,-10418.66211,-10419.77051,-10415.78809,-10410.84473,-10411.50977,-10420.0127,-10419.58301,-10411.13672,-10422.00781,-10423.48926,-10417.90234,-10416.00977,-10421.88184,-10418.49414,-10424.35254,-10416.17676,-10421.33008,-10423.90723,-10424.33887,-10418.02832,-10415.4375,-10418.61523,-10415.82617,-10409.73242,-10406.61719,-10412.15527,-10418.34766,-10411.03809,-10406.61035,-10415.94629,-10425.43848,-10419.03809,-10411.27441,-10419.68652,-10423.24609,-10418.71191,-10419.63086,-10418.63672,-10424.48926,-10418.0625,-10417.06738,-10416.13379,-10421.10254,-10419.05859,-10416.99414,-10412.64844,-10414.61035,-10423.70605,-10412.84082,-10413.03711,-10415.45898,-10419.53418,-10415.89746,-10412.70215,-10420.0918,-10425.94824,-10420.19043,-10415.92676,-10424.00488,-10427,-10422.87109,-10420.17285,-10422.34668,-10421.92383,-10423.99219,-10414.87598,-10418.13965,-10428.57617,-10425.57617,-10424.15039,-10421.56348,-10426.85742,-10430.36133,-10423.4834,-10418.03125,-10422.54785,-10425.93848,-10417.86133,-10415.69434,-10421.70898,-10425.45605,-10420.76758,-10419.65527,-10429.1123,-10434.39355,-10427.94531,-10422.99023,-10420.7373,-10422.08203,-10423.83496,-10419.9707,-10419.23535,-10418.46094,-10416.83594,-10412.19922,-10409.08301,-10414.15332,-10423.49219,-10415.87793,-10414.42285,-10415.28516,-10419.62305,-10412.09082,-10407.17676,-10421.43555,-10426.46875,-10422.78223,-10417.75684,-10424.28906,-10428.07324,-10422.61523,-10420.73535,-10423.06152,-10420.69727,-10421.69629,-10413.92676,-10411.56641,-10420.97656,-10419.13574,-10419.2041,-10418.11621,-10423.31836,-10424.9082,-10418.12988,-10416.84277,-10423.61035,-10422.71387,-10421.05762,-10413.54688,-10420.66895,-10424.89746,-10423.13574,-10416.93066,-10420.63379,-10424.61035,-10421.68066,-10417.2627,-10416.2334,-10423.05176,-10421.80273,-10419.7627,-10417.60254,-10420.39844,-10419.02832,-10415.12109,-10416.00391,-10422.6875,-10426.09375,-10416.62207,-10414.52441,-10422.08789,-10427.9375,-10421.60156,-10417.74219,-10421.34766,-10425.9834,-10422.49609,-10418.08496,-10424.59863,-10422.82227,-10421.61914,-10415.1377,-10417.05762,-10422.83887,-10423.21777,-10420.25586,-10419.23145,-10420.48828,-10421.75977,-10416.56348,-10415.99902,-10416.94727,-10423.46875,-10412.41309,-10414.63965,-10419.0166,-10421.63965,-10417.8418,-10411.96777,-10421.28613,-10424.62793,-10420.06152,-10415.27246,-10419.67969,-10422.9834,-10421.20117,-10416.37305,-10418.35254,-10423.38574,-10421.6084,-10418.23633 2 | -------------------------------------------------------------------------------- /Tests/1d/sig1.csv: -------------------------------------------------------------------------------- 1 | 1.5,1.501934408,1.50174154,1.499433098,1.495028537,1.488554987,1.480047143,1.469547135,1.457104357,1.442775273,1.426623199,1.408718047,1.389136058,1.367959497,1.345276329,1.321179877,1.29576845,1.269144961,1.241416519,1.212694009,1.183091658,1.152726582,1.121718329,1.090188406,1.058259805,1.026056516,0.993703045,0.961323919,0.9290432,0.896983999,0.865267989,0.83401493,0.803342202,0.773364336,0.744192573,0.715934426,0.688693257,0.662567871,0.637652135,0.614034605,0.591798183,0.571019792,0.551770077,0.53411313,0.518106239,0.503799667,0.491236459,0.480452274,0.471475247,0.464325887,0.459016994,0.455553621,0.453933048,0.454144807,0.456170721,0.459984985,0.465554268,0.472837855,0.481787805,0.492349155,0.50446013,0.518052404,0.533051363,0.549376417,0.566941311,0.58565448,0.605419411,0.62613503,0.64769611,0.669993685,0.692915493,0.716346418,0.740168956,0.764263681,0.788509723,0.812785252,0.836967963,0.860935566,0.884566274,0.90773929,0.930335292,0.952236906,0.97332918,0.993500039,1.012640739,1.0306463,1.047415927,1.062853414,1.07686753,1.089372388,1.100287789,1.109539544,1.117059776,1.122787193,1.126667338,1.128652811,1.128703459,1.126786549,1.122876895,1.116956974,1.109016994,1.099054946,1.087076613,1.073095561,1.057133087,1.039218145,1.01938724,0.997684287,0.97416045,0.948873943,0.921889812,0.89327968,0.863121479,0.831499142,0.798502286,0.76422586,0.728769782,0.692238552,0.654740842,0.616389082,0.577299017,0.537589262,0.49738084,0.456796712,0.4159613,0.375,0.3340387,0.293203288,0.25261916,0.212410738,0.172700983,0.133610918,0.095259158,0.057761448,0.021230218,-0.01422586,-0.048502286,-0.081499142,-0.113121479,-0.14327968,-0.171889812,-0.198873943,-0.22416045,-0.247684287,-0.26938724,-0.289218145,-0.307133087,-0.323095561,-0.337076613,-0.349054946,-0.359016994,-0.366956974,-0.372876895,-0.376786549,-0.378703459,-0.378652811,-0.376667338,-0.372787193,-0.367059776,-0.359539544,-0.350287789,-0.339372388,-0.32686753,-0.312853414,-0.297415927,-0.2806463,-0.262640739,-0.243500039,-0.22332918,-0.202236906,-0.180335292,-0.15773929,-0.134566274,-0.110935566,-0.086967963,-0.062785252,-0.038509723,-0.014263681,0.009831044,0.033653582,0.057084507,0.080006315,0.10230389,0.12386497,0.144580589,0.16434552,0.183058689,0.200623583,0.216948637,0.231947596,0.24553987,0.257650845,0.268212195,0.277162145,0.284445732,0.290015015,0.293829279,0.295855193,0.296066952,0.294446379,0.290983006,0.285674113,0.278524753,0.269547726,0.258763541,0.246200333,0.231893761,0.21588687,0.198229923,0.178980208,0.158201817,0.135965395,0.112347865,0.087432129,0.061306743,0.034065574,0.005807427,-0.023364336,-0.053342202,-0.08401493,-0.115267989,-0.146983999,-0.1790432,-0.211323919,-0.243703045,-0.276056516,-0.308259805,-0.340188406,-0.371718329,-0.402726582,-0.433091658,-0.462694009,-0.491416519,-0.519144961,-0.54576845,-0.571179877,-0.595276329,-0.617959497,-0.639136058,-0.658718047,-0.676623199,-0.692775273,-0.707104357,-0.719547135,-0.730047143,-0.738554987,-0.745028537,-0.749433098,-0.75174154,-0.751934408,-0.75,-0.745934408,-0.73974154,-0.731433098,-0.721028537,-0.708554987,-0.694047143,-0.677547135,-0.659104357,-0.638775273,-0.616623199,-0.592718047,-0.567136058,-0.539959497,-0.511276329,-0.481179877,-0.44976845,-0.417144961,-0.383416519,-0.348694009,-0.313091658,-0.276726582,-0.239718329,-0.202188406,-0.164259805,-0.126056516,-0.087703045,-0.049323919,-0.0110432,0.027016001,0.064732011,0.10198507,0.138657798,0.174635664,0.209807427,0.244065574,0.277306743,0.309432129,0.340347865,0.369965395,0.398201817,0.424980208,0.450229923,0.47388687,0.495893761,0.516200333,0.534763541,0.551547726,0.566524753,0.579674113,0.590983006,0.600446379,0.608066952,0.613855193,0.617829279,0.620015015,0.620445732,0.619162145,0.616212195,0.611650845,0.60553987,0.597947596,0.588948637,0.578623583,0.567058689,0.55434552,0.540580589,0.52586497,0.51030389,0.494006315,0.477084507,0.459653582,0.441831044,0.423736319,0.405490277,0.387214748,0.369032037,0.351064434,0.333433726,0.31626071,0.299664708,0.283763094,0.26867082,0.254499961,0.241359261,0.2293537,0.218584073,0.209146586,0.20113247,0.194627612,0.189712211,0.186460456,0.184940224,0.185212807,0.187332662,0.191347189,0.197296541,0.205213451,0.215123105,0.227043026,0.240983006,0.256945054,0.274923387,0.294904439,0.316866913,0.340781855,0.36661276,0.394315713,0.42383955,0.455126057,0.488110188,0.52272032,0.558878521,0.596500858,0.635497714,0.67577414,0.717230218,0.759761448,0.803259158,0.847610918,0.892700983,0.938410738,0.98461916,1.031203288,1.0780387,1.125,1.1719613,1.218796712,1.26538084,1.311589262,1.357299017,1.402389082,1.446740842,1.490238552,1.532769782,1.57422586,1.614502286,1.653499142,1.691121479,1.72727968,1.761889812,1.794873943,1.82616045,1.855684287,1.88338724,1.909218145,1.933133087,1.955095561,1.975076613,1.993054946,2.009016994,2.022956974,2.034876895,2.044786549,2.052703459,2.058652811,2.062667338,2.064787193,2.065059776,2.063539544,2.060287789,2.055372388,2.04886753,2.040853414,2.031415927,2.0206463,2.008640739,1.995500039,1.98132918,1.966236906,1.950335292,1.93373929,1.916566274,1.898935566,1.880967963,1.862785252,1.844509723,1.826263681,1.808168956,1.790346418,1.772915493,1.755993685,1.73969611,1.72413503,1.709419411,1.69565448,1.682941311,1.671376417,1.661051363,1.652052404,1.64446013,1.638349155,1.633787805,1.630837855,1.629554268,1.629984985,1.632170721,1.636144807,1.641933048,1.649553621,1.659016994,1.670325887,1.683475247,1.698452274,1.715236459,1.733799667,1.754106239,1.77611313,1.799770077,1.825019792,1.851798183,1.880034605,1.909652135,1.940567871,1.972693257,2.005934426,2.040192573,2.075364336,2.111342202,2.14801493,2.185267989,2.222983999,2.2610432,2.299323919,2.337703045,2.376056516,2.414259805,2.452188406,2.489718329,2.526726582,2.563091658,2.598694009,2.633416519,2.667144961,2.69976845,2.731179877,2.761276329,2.789959497,2.817136058,2.842718047,2.866623199,2.888775273,2.909104357,2.927547135,2.944047143,2.958554987,2.971028537,2.981433098,2.98974154,2.995934408,3,3.001934408,3.00174154,2.999433098,2.995028537,2.988554987,2.980047143,2.969547135,2.957104357,2.942775273,2.926623199,2.908718047,2.889136058,2.867959497,2.845276329,2.821179877,2.79576845,2.769144961,2.741416519,2.712694009,2.683091658,2.652726582,2.621718329,2.590188406,2.558259805,2.526056516,2.493703045,2.461323919,2.4290432,2.396983999,2.365267989,2.33401493,2.303342202,2.273364336,2.244192573,2.215934426,2.188693257,2.162567871,2.137652135,2.114034605,2.091798183,2.071019792,2.051770077,2.03411313,2.018106239,2.003799667,1.991236459,1.980452274,1.971475247,1.964325887,1.959016994,1.955553621,1.953933048,1.954144807,1.956170721,1.959984985,1.965554268,1.972837855,1.981787805,1.992349155,2.00446013,2.018052404,2.033051363,2.049376417,2.066941311,2.08565448,2.105419411,2.12613503,2.14769611,2.169993685,2.192915493,2.216346418,2.240168956,2.264263681,2.288509723,2.312785252,2.336967963,2.360935566,2.384566274,2.40773929,2.430335292,2.452236906,2.47332918,2.493500039,2.512640739,2.5306463,2.547415927,2.562853414,2.57686753,2.589372388,2.600287789,2.609539544,2.617059776,2.622787193,2.626667338,2.628652811,2.628703459,2.626786549,2.622876895,2.616956974,2.609016994,2.599054946,2.587076613,2.573095561,2.557133087,2.539218145,2.51938724,2.497684287,2.47416045,2.448873943,2.421889812,2.39327968,2.363121479,2.331499142,2.298502286,2.26422586,2.228769782,2.192238552,2.154740842,2.116389082,2.077299017,2.037589262,1.99738084,1.956796712,1.9159613,1.875,1.8340387,1.793203288,1.75261916,1.712410738,1.672700983,1.633610918,1.595259158,1.557761448,1.521230218,1.48577414,1.451497714,1.418500858,1.386878521,1.35672032,1.328110188,1.301126057,1.27583955,1.252315713,1.23061276,1.210781855,1.192866913,1.176904439,1.162923387,1.150945054,1.140983006,1.133043026,1.127123105,1.123213451,1.121296541,1.121347189,1.123332662,1.127212807,1.132940224,1.140460456,1.149712211,1.160627612,1.17313247,1.187146586,1.202584073,1.2193537,1.237359261,1.256499961,1.27667082,1.297763094,1.319664708,1.34226071,1.365433726,1.389064434,1.413032037,1.437214748,1.461490277,1.485736319,1.509831044,1.533653582,1.557084507,1.580006315,1.60230389,1.62386497,1.644580589,1.66434552,1.683058689,1.700623583,1.716948637,1.731947596,1.74553987,1.757650845,1.768212195,1.777162145,1.784445732,1.790015015,1.793829279,1.795855193,1.796066952,1.794446379,1.790983006,1.785674113,1.778524753,1.769547726,1.758763541,1.746200333,1.731893761,1.71588687,1.698229923,1.678980208,1.658201817,1.635965395,1.612347865,1.587432129,1.561306743,1.534065574,1.505807427,1.476635664,1.446657798,1.41598507,1.384732011,1.353016001,1.3209568,1.288676081,1.256296955,1.223943484,1.191740195,1.159811594,1.128281671,1.097273418,1.066908342,1.037305991,1.008583481,0.980855039,0.95423155,0.928820123,0.904723671,0.882040503,0.860863942,0.841281953,0.823376801,0.807224727,0.792895643,0.780452865,0.769952857,0.761445013,0.754971463,0.750566902,0.74825846,0.748065592,0.75,0.754065592,0.76025846,0.768566902,0.778971463,0.791445013,0.805952857,0.822452865,0.840895643,0.861224727,0.883376801,0.907281953,0.932863942,0.960040503,0.988723671,1.018820123,1.05023155,1.082855039,1.116583481,1.151305991,1.186908342,1.223273418,1.260281671,1.297811594,1.335740195,1.373943484,1.412296955,1.450676081,1.4889568,1.527016001,1.564732011,1.60198507,1.638657798,1.674635664,1.709807427,1.744065574,1.777306743,1.809432129,1.840347865,1.869965395,1.898201817,1.924980208,1.950229923,1.97388687,1.995893761,2.016200333,2.034763541,2.051547726,2.066524753,2.079674113,2.090983006,2.100446379,2.108066952,2.113855193,2.117829279,2.120015015,2.120445732,2.119162145,2.116212195,2.111650845,2.10553987,2.097947596,2.088948637,2.078623583,2.067058689,2.05434552,2.040580589,2.02586497,2.01030389,1.994006315,1.977084507,1.959653582,1.941831044,1.923736319,1.905490277,1.887214748,1.869032037,1.851064434,1.833433726,1.81626071,1.799664708,1.783763094,1.76867082,1.754499961,1.741359261,1.7293537,1.718584073,1.709146586,1.70113247,1.694627612,1.689712211,1.686460456,1.684940224,1.685212807,1.687332662,1.691347189,1.697296541,1.705213451,1.715123105,1.727043026,1.740983006,1.756945054,1.774923387,1.794904439,1.816866913,1.840781855,1.86661276,1.894315713,1.92383955,1.955126057,1.988110188,2.02272032,2.058878521,2.096500858,2.135497714,2.17577414,2.217230218,2.259761448,2.303259158,2.347610918,2.392700983,2.438410738,2.48461916,2.531203288,2.5780387,2.625,2.6719613,2.718796712,2.76538084,2.811589262,2.857299017,2.902389082,2.946740842,2.990238552,3.032769782,3.07422586,3.114502286,3.153499142,3.191121479,3.22727968,3.261889812,3.294873943,3.32616045,3.355684287,3.38338724,3.409218145,3.433133087,3.455095561,3.475076613,3.493054946,3.509016994,3.522956974,3.534876895,3.544786549,3.552703459,3.558652811,3.562667338,3.564787193,3.565059776,3.563539544,3.560287789,3.555372388,3.54886753,3.540853414,3.531415927,3.5206463,3.508640739,3.495500039,3.48132918,3.466236906,3.450335292,3.43373929,3.416566274,3.398935566,3.380967963,3.362785252,3.344509723,3.326263681,3.308168956,3.290346418,3.272915493,3.255993685,3.23969611,3.22413503,3.209419411,3.19565448,3.182941311,3.171376417,3.161051363,3.152052404,3.14446013,3.138349155,3.133787805,3.130837855,3.129554268,3.129984985,3.132170721,3.136144807,3.141933048,3.149553621,3.159016994,3.170325887,3.183475247,3.198452274,3.215236459,3.233799667,3.254106239,3.27611313,3.299770077,3.325019792,3.351798183,3.380034605,3.409652135,3.440567871,3.472693257,3.505934426,3.540192573,3.575364336,3.611342202,3.64801493,3.685267989,3.722983999,3.7610432,3.799323919,3.837703045,3.876056516,3.914259805,3.952188406,3.989718329,4.026726582,4.063091658,4.098694009,4.133416519,4.167144961,4.19976845,4.231179877,4.261276329,4.289959497,4.317136058,4.342718047,4.366623199,4.388775273,4.409104357,4.427547135,4.444047143,4.458554987,4.471028537,4.481433098,4.48974154,4.495934408,4.5,4.501934408,4.50174154,4.499433098,4.495028537,4.488554987,4.480047143,4.469547135,4.457104357,4.442775273,4.426623199,4.408718047,4.389136058,4.367959497,4.345276329,4.321179877,4.29576845,4.269144961,4.241416519,4.212694009,4.183091658,4.152726582,4.121718329,4.090188406,4.058259805,4.026056516,3.993703045,3.961323919,3.9290432,3.896983999,3.865267989,3.83401493,3.803342202,3.773364336,3.744192573,3.715934426,3.688693257,3.662567871,3.637652135,3.614034605,3.591798183,3.571019792,3.551770077,3.53411313,3.518106239,3.503799667,3.491236459,3.480452274,3.471475247,3.464325887,3.459016994,3.455553621,3.453933048,3.454144807,3.456170721,3.459984985,3.465554268,3.472837855,3.481787805,3.492349155,3.50446013,3.518052404,3.533051363,3.549376417,3.566941311,3.58565448,3.605419411,3.62613503,3.64769611,3.669993685,3.692915493,3.716346418,3.740168956,3.764263681,3.788509723,3.812785252,3.836967963,3.860935566,3.884566274,3.90773929,3.930335292,3.952236906,3.97332918,3.993500039,4.012640739,4.0306463,4.047415927,4.062853414,4.07686753,4.089372388,4.100287789,4.109539544,4.117059776,4.122787193,4.126667338,4.128652811,4.128703459,4.126786549,4.122876895,4.116956974,4.109016994,4.099054946,4.087076613,4.073095561,4.057133087,4.039218145,4.01938724,3.997684287,3.97416045,3.948873943,3.921889812,3.89327968,3.863121479,3.831499142,3.798502286,3.76422586,3.728769782,3.692238552,3.654740842,3.616389082,3.577299017,3.537589262,3.49738084,3.456796712,3.4159613,3.375,3.3340387,3.293203288,3.25261916,3.212410738,3.172700983,3.133610918,3.095259158,3.057761448,3.021230218,2.98577414,2.951497714,2.918500858,2.886878521,2.85672032,2.828110188,2.801126057,2.77583955,2.752315713,2.73061276,2.710781855,2.692866913,2.676904439,2.662923387,2.650945054,2.640983006,2.633043026,2.627123105,2.623213451,2.621296541,2.621347189,2.623332662,2.627212807,2.632940224,2.640460456,2.649712211,2.660627612,2.67313247,2.687146586,2.702584073,2.7193537,2.737359261,2.756499961,2.77667082,2.797763094,2.819664708,2.84226071,2.865433726,2.889064434,2.913032037,2.937214748,2.961490277,2.985736319,3.009831044,3.033653582,3.057084507,3.080006315,3.10230389,3.12386497,3.144580589,3.16434552,3.183058689,3.200623583,3.216948637,3.231947596,3.24553987,3.257650845,3.268212195,3.277162145,3.284445732,3.290015015,3.293829279,3.295855193,3.296066952,3.294446379,3.290983006,3.285674113,3.278524753,3.269547726,3.258763541,3.246200333,3.231893761,3.21588687,3.198229923,3.178980208,3.158201817,3.135965395,3.112347865,3.087432129,3.061306743,3.034065574,3.005807427,2.976635664,2.946657798,2.91598507,2.884732011,2.853016001,2.8209568,2.788676081,2.756296955,2.723943484,2.691740195,2.659811594,2.628281671,2.597273418,2.566908342,2.537305991,2.508583481,2.480855039,2.45423155,2.428820123,2.404723671,2.382040503,2.360863942,2.341281953,2.323376801,2.307224727,2.292895643,2.280452865,2.269952857,2.261445013,2.254971463,2.250566902,2.24825846,2.248065592,2.25,2.254065592,2.26025846,2.268566902,2.278971463,2.291445013,2.305952857,2.322452865,2.340895643,2.361224727,2.383376801,2.407281953,2.432863942,2.460040503,2.488723671,2.518820123,2.55023155,2.582855039,2.616583481,2.651305991,2.686908342,2.723273418,2.760281671,2.797811594,2.835740195,2.873943484,2.912296955,2.950676081,2.9889568,3.027016001,3.064732011,3.10198507,3.138657798,3.174635664,3.209807427,3.244065574,3.277306743,3.309432129,3.340347865,3.369965395,3.398201817,3.424980208,3.450229923,3.47388687,3.495893761,3.516200333,3.534763541,3.551547726,3.566524753,3.579674113,3.590983006,3.600446379,3.608066952,3.613855193,3.617829279,3.620015015,3.620445732,3.619162145,3.616212195,3.611650845,3.60553987,3.597947596,3.588948637,3.578623583,3.567058689,3.55434552,3.540580589,3.52586497,3.51030389,3.494006315,3.477084507,3.459653582,3.441831044,3.423736319,3.405490277,3.387214748,3.369032037,3.351064434,3.333433726,3.31626071,3.299664708,3.283763094,3.26867082,3.254499961,3.241359261,3.2293537,3.218584073,3.209146586,3.20113247,3.194627612,3.189712211,3.186460456,3.184940224,3.185212807,3.187332662,3.191347189,3.197296541,3.205213451,3.215123105,3.227043026,3.240983006,3.256945054,3.274923387,3.294904439,3.316866913,3.340781855,3.36661276,3.394315713,3.42383955,3.455126057,3.488110188,3.52272032,3.558878521,3.596500858,3.635497714,3.67577414,3.717230218,3.759761448,3.803259158,3.847610918,3.892700983,3.938410738,3.98461916,4.031203288,4.0780387,4.125,4.1719613,4.218796712,4.26538084,4.311589262,4.357299017,4.402389082,4.446740842,4.490238552,4.532769782,4.57422586,4.614502286,4.653499142,4.691121479,4.72727968,4.761889812,4.794873943,4.82616045,4.855684287,4.88338724,4.909218145,4.933133087,4.955095561,4.975076613,4.993054946,5.009016994,5.022956974,5.034876895,5.044786549,5.052703459,5.058652811,5.062667338,5.064787193,5.065059776,5.063539544,5.060287789,5.055372388,5.04886753,5.040853414,5.031415927,5.0206463,5.008640739,4.995500039,4.98132918,4.966236906,4.950335292,4.93373929,4.916566274,4.898935566,4.880967963,4.862785252,4.844509723,4.826263681,4.808168956,4.790346418,4.772915493,4.755993685,4.73969611,4.72413503,4.709419411,4.69565448,4.682941311,4.671376417,4.661051363,4.652052404,4.64446013,4.638349155,4.633787805,4.630837855,4.629554268,4.629984985,4.632170721,4.636144807,4.641933048,4.649553621,4.659016994,4.670325887,4.683475247,4.698452274,4.715236459,4.733799667,4.754106239,4.77611313,4.799770077,4.825019792,4.851798183,4.880034605,4.909652135,4.940567871,4.972693257,5.005934426,5.040192573,5.075364336,5.111342202,5.14801493,5.185267989,5.222983999,5.2610432,5.299323919,5.337703045,5.376056516,5.414259805,5.452188406,5.489718329,5.526726582,5.563091658,5.598694009,5.633416519,5.667144961,5.69976845,5.731179877,5.761276329,5.789959497,5.817136058,5.842718047,5.866623199,5.888775273,5.909104357,5.927547135,5.944047143,5.958554987,5.971028537,5.981433098,5.98974154,5.995934408,6,6.001934408,6.00174154,5.999433098,5.995028537,5.988554987,5.980047143,5.969547135,5.957104357,5.942775273,5.926623199,5.908718047,5.889136058,5.867959497,5.845276329,5.821179877,5.79576845,5.769144961,5.741416519,5.712694009,5.683091658,5.652726582,5.621718329,5.590188406,5.558259805,5.526056516,5.493703045,5.461323919,5.4290432,5.396983999,5.365267989,5.33401493,5.303342202,5.273364336,5.244192573,5.215934426,5.188693257,5.162567871,5.137652135,5.114034605,5.091798183,5.071019792,5.051770077,5.03411313,5.018106239,5.003799667,4.991236459,4.980452274,4.971475247,4.964325887,4.959016994,4.955553621,4.953933048,4.954144807,4.956170721,4.959984985,4.965554268,4.972837855,4.981787805,4.992349155,5.00446013,5.018052404,5.033051363,5.049376417,5.066941311,5.08565448,5.105419411,5.12613503,5.14769611,5.169993685,5.192915493,5.216346418,5.240168956,5.264263681,5.288509723,5.312785252,5.336967963,5.360935566,5.384566274,5.40773929,5.430335292,5.452236906,5.47332918,5.493500039,5.512640739,5.5306463,5.547415927,5.562853414,5.57686753,5.589372388,5.600287789,5.609539544,5.617059776,5.622787193,5.626667338,5.628652811,5.628703459,5.626786549,5.622876895,5.616956974,5.609016994,5.599054946,5.587076613,5.573095561,5.557133087,5.539218145,5.51938724,5.497684287,5.47416045,5.448873943,5.421889812,5.39327968,5.363121479,5.331499142,5.298502286,5.26422586,5.228769782,5.192238552,5.154740842,5.116389082,5.077299017,5.037589262,4.99738084,4.956796712,4.9159613,4.875,4.8340387,4.793203288,4.75261916,4.712410738,4.672700983,4.633610918,4.595259158,4.557761448,4.521230218,4.48577414,4.451497714,4.418500858,4.386878521,4.35672032,4.328110188,4.301126057,4.27583955,4.252315713,4.23061276,4.210781855,4.192866913,4.176904439,4.162923387,4.150945054,4.140983006,4.133043026,4.127123105,4.123213451,4.121296541,4.121347189,4.123332662,4.127212807,4.132940224,4.140460456,4.149712211,4.160627612,4.17313247,4.187146586,4.202584073,4.2193537,4.237359261,4.256499961,4.27667082,4.297763094,4.319664708,4.34226071,4.365433726,4.389064434,4.413032037,4.437214748,4.461490277,4.485736319,4.509831044,4.533653582,4.557084507,4.580006315,4.60230389,4.62386497,4.644580589,4.66434552,4.683058689,4.700623583,4.716948637,4.731947596,4.74553987,4.757650845,4.768212195,4.777162145,4.784445732,4.790015015,4.793829279,4.795855193,4.796066952,4.794446379,4.790983006,4.785674113,4.778524753,4.769547726,4.758763541,4.746200333,4.731893761,4.71588687,4.698229923,4.678980208,4.658201817,4.635965395,4.612347865,4.587432129,4.561306743,4.534065574,4.505807427,4.476635664,4.446657798,4.41598507,4.384732011,4.353016001,4.3209568,4.288676081,4.256296955,4.223943484,4.191740195,4.159811594,4.128281671,4.097273418,4.066908342,4.037305991,4.008583481,3.980855039,3.95423155,3.928820123,3.904723671,3.882040503,3.860863942,3.841281953,3.823376801,3.807224727,3.792895643,3.780452865,3.769952857,3.761445013,3.754971463,3.750566902,3.74825846,3.748065592,3.75,3.754065592,3.76025846,3.768566902,3.778971463,3.791445013,3.805952857,3.822452865,3.840895643,3.861224727,3.883376801,3.907281953,3.932863942,3.960040503,3.988723671,4.018820123,4.05023155,4.082855039,4.116583481,4.151305991,4.186908342,4.223273418,4.260281671,4.297811594,4.335740195,4.373943484,4.412296955,4.450676081,4.4889568,4.527016001,4.564732011,4.60198507,4.638657798,4.674635664,4.709807427,4.744065574,4.777306743,4.809432129,4.840347865,4.869965395,4.898201817,4.924980208,4.950229923,4.97388687,4.995893761,5.016200333,5.034763541,5.051547726,5.066524753,5.079674113,5.090983006,5.100446379,5.108066952,5.113855193,5.117829279,5.120015015,5.120445732,5.119162145,5.116212195,5.111650845,5.10553987,5.097947596,5.088948637,5.078623583,5.067058689,5.05434552,5.040580589,5.02586497,5.01030389,4.994006315,4.977084507,4.959653582,4.941831044,4.923736319,4.905490277,4.887214748,4.869032037,4.851064434,4.833433726,4.81626071,4.799664708,4.783763094,4.76867082,4.754499961,4.741359261,4.7293537,4.718584073,4.709146586,4.70113247,4.694627612,4.689712211,4.686460456,4.684940224,4.685212807,4.687332662,4.691347189,4.697296541,4.705213451,4.715123105,4.727043026,4.740983006,4.756945054,4.774923387,4.794904439,4.816866913,4.840781855,4.86661276,4.894315713,4.92383955,4.955126057,4.988110188,5.02272032,5.058878521,5.096500858,5.135497714,5.17577414,5.217230218,5.259761448,5.303259158,5.347610918,5.392700983,5.438410738,5.48461916,5.531203288,5.5780387,5.625,5.6719613,5.718796712,5.76538084,5.811589262,5.857299017,5.902389082,5.946740842,5.990238552,6.032769782,6.07422586,6.114502286,6.153499142,6.191121479,6.22727968,6.261889812,6.294873943,6.32616045,6.355684287,6.38338724,6.409218145,6.433133087,6.455095561,6.475076613,6.493054946,6.509016994,6.522956974,6.534876895,6.544786549,6.552703459,6.558652811,6.562667338,6.564787193,6.565059776,6.563539544,6.560287789,6.555372388,6.54886753,6.540853414,6.531415927,6.5206463,6.508640739,6.495500039,6.48132918,6.466236906,6.450335292,6.43373929,6.416566274,6.398935566,6.380967963,6.362785252,6.344509723,6.326263681,6.308168956,6.290346418,6.272915493,6.255993685,6.23969611,6.22413503,6.209419411,6.19565448,6.182941311,6.171376417,6.161051363,6.152052404,6.14446013,6.138349155,6.133787805,6.130837855,6.129554268,6.129984985,6.132170721,6.136144807,6.141933048,6.149553621,6.159016994,6.170325887,6.183475247,6.198452274,6.215236459,6.233799667,6.254106239,6.27611313,6.299770077,6.325019792,6.351798183,6.380034605,6.409652135,6.440567871,6.472693257,6.505934426,6.540192573,6.575364336,6.611342202,6.64801493,6.685267989,6.722983999,6.7610432,6.799323919,6.837703045,6.876056516,6.914259805,6.952188406,6.989718329,7.026726582,7.063091658,7.098694009,7.133416519,7.167144961,7.19976845,7.231179877,7.261276329,7.289959497,7.317136058,7.342718047,7.366623199,7.388775273,7.409104357,7.427547135,7.444047143,7.458554987,7.471028537,7.481433098,7.48974154,7.495934408,7.5 2 | -------------------------------------------------------------------------------- /Tests/1d/sig2.csv: -------------------------------------------------------------------------------- 1 | 2,1.995439974,1.981798824,1.959193728,1.927819316,1.887945933,1.839917242,1.784147164,1.721116204,1.651367185,1.575500425,1.494168407,1.408069991,1.317944204,1.224563687,1.128727835,1.031255703,0.932978736,0.834733398,0.737353744,0.641664025,0.548471373,0.458558646,0.372677482,0.291541631,0.215820635,0.146133884,0.083045129,0.027057491,-0.021391004,-0.061931295,-0.094266554,-0.118174813,-0.133510917,-0.140207804,-0.138277086,-0.127808933,-0.108971255,-0.082008203,-0.047237981,-0.00505001,0.044098551,0.099686872,0.161135101,0.227809523,0.299028207,0.374067079,0.452166368,0.532537369,0.61436947,0.696837363,0.779108397,0.860349991,0.939737045,1.016459293,1.089728515,1.158785562,1.222907119,1.281412155,1.333667991,1.379095944,1.417176497,1.447453933,1.469540413,1.483119448,1.487948738,1.483862354,1.470772244,1.448669046,1.417622203,1.377779379,1.329365185,1.272679217,1.208093435,1.136048889,1.057051851,0.971669346,0.880524164,0.784289366,0.683682345,0.579458501,0.47240457,0.363331683,0.253068203,0.142452412,0.032325112,-0.076477799,-0.183132706,-0.286835548,-0.386808908,-0.48230888,-0.572631624,-0.657119573,-0.735167227,-0.806226485,-0.869811467,-0.925502782,-0.97295121,-1.011880755,-1.04209105,-1.063459096,-1.075940304,-1.079568851,-1.074457326,-1.060795693,-1.038849553,-1.008957744,-0.971529292,-0.927039729,-0.876026827,-0.819085786,-0.756863897,-0.690054757,-0.619392062,-0.545643053,-0.469601659,-0.392081403,-0.313908137,-0.235912665,-0.158923324,-0.083758587,-0.011219749,0.057916224,0.122903645,0.183034762,0.237646089,0.28612434,0.327911914,0.362511893,0.389492493,0.408490941,0.419216742,0.421454296,0.415064857,0.399987807,0.376241238,0.34392183,0.303204038,0.254338584,0.19765027,0.13353514,0.062457002,-0.015056649,-0.098419274,-0.186990454,-0.280081541,-0.376961729,-0.476864503,-0.57899441,-0.68253408,-0.786651444,-0.890507086,-0.993261662,-1.094083311,-1.192155007,-1.286681781,-1.37689774,-1.46207284,-1.54151933,-1.614597827,-1.680722965,-1.73936856,-1.790072252,-1.832439583,-1.866147471,-1.890947053,-1.90666587,-1.91320937,-1.910561727,-1.898785961,-1.878023351,-1.848492166,-1.810485707,-1.764369682,-1.710578945,-1.649613615,-1.582034627,-1.508458731,-1.429553009,-1.346028938,-1.25863606,-1.168155323,-1.075392134,-0.981169205,-0.886319238,-0.791677527,-0.698074541,-0.606328542,-0.517238323,-0.43157611,-0.350080707,-0.273450937,-0.202339442,-0.137346884,-0.079016621,-0.027829887,0.01579848,0.051523709,0.079074155,0.098253699,0.108943484,0.111102957,0.104770221,0.090061683,0.067171011,0.036367396,-0.002006847,-0.047539336,-0.099751302,-0.158101851,-0.221992789,-0.290773953,-0.363748999,-0.44018161,-0.519302052,-0.600314035,-0.682401803,-0.764737405,-0.846488069,-0.926823627,-1.004923912,-1.079986066,-1.151231707,-1.217913863,-1.279323641,-1.334796555,-1.383718459,-1.425531039,-1.459736802,-1.485903537,-1.50366819,-1.512740127,-1.512903757,-1.504020493,-1.486030019,-1.458950879,-1.422880353,-1.377993645,-1.324542373,-1.262852387,-1.193320927,-1.116413144,-1.032658029,-0.942643766,-0.847012566,-0.746455021,-0.64170403,-0.533528345,-0.422725812,-0.310116338,-0.196534677,-0.082823077,0.030176136,0.141627976,0.250712145,0.356630258,0.458612862,0.555926207,0.647878696,0.733826959,0.8131815,0.885411869,0.950051298,1.006700787,1.055032575,1.094792986,1.125804612,1.147967824,1.161261588,1.165743586,1.161549633,1.148892409,1.128059501,1.099410782,1.06337515,1.020446652,0.971180033,0.91618574,0.856124439,0.791701081,0.723658576,0.652771132,0.579837317,0.505672896,0.431103532,0.356957381,0.284057682,0.213215376,0.145221845,0.080841818,0.020806523,-0.034192877,-0.083511477,-0.126556426,-0.162792247,-0.191745659,-0.213009841,-0.226248102,-0.231196936,-0.227668422,-0.215551952,-0.194815273,-0.165504836,-0.12774544,-0.081739184,-0.027763728,0.033830108,0.102621411,0.178122848,0.259784941,0.347000892,0.439111915,0.535413031,0.635159277,0.737572269,0.841847061,0.947159245,1.05267222,1.157544574,1.26093751,1.362022246,1.459987331,1.55404581,1.643442164,1.727458985,1.805423305,1.876712534,1.940759951,1.997059706,2.045171277,2.084723351,2.115417089,2.137028758,2.149411689,2.152497552,2.146296945,2.130899281,2.106471967,2.073258912,2.031578338,1.981819943,1.924441433,1.859964444,1.788969907,1.712092881,1.630016909,1.543467952,1.453207937,1.360027996,1.264741446,1.168176568,1.071169266,0.974555646,0.879164609,0.785810499,0.695285888,0.608354552,0.525744709,0.44814257,0.376186269,0.310460212,0.251489922,0.199737389,0.155596997,0.119392053,0.091371943,0.071709952,0.060501754,0.057764599,0.063437197,0.077380295,0.099377958,0.12913952,0.16630221,0.210434418,0.261039565,0.317560566,0.379384817,0.445849688,0.516248451,0.589836615,0.665838581,0.743454587,0.821867868,0.900251958,0.977778094,1.053622631,1.126974419,1.197042067,1.263061034,1.324300486,1.380069849,1.429725012,1.472674117,1.508382882,1.536379421,1.55625851,1.567685255,1.570398148,1.564211465,1.549016994,1.524785079,1.491564964,1.449484436,1.398748782,1.339639046,1.272509619,1.197785187,1.115957041,1.027578807,0.933261624,0.833668803,0.729510033,0.62153517,0.510527674,0.397297745,0.282675224,0.167502317,0.052626216,-0.061108331,-0.172866425,-0.281830331,-0.387206647,-0.488233252,-0.584185972,-0.674384923,-0.758200446,-0.835058607,-0.904446192,-0.965915179,-1.019086613,-1.063653882,-1.099385347,-1.126126303,-1.143800265,-1.152409553,-1.152035186,-1.142836066,-1.125047487,-1.098978952,-1.065011341,-1.023593445,-0.975237895,-0.920516526,-0.860055221,-0.794528267,-0.724652296,-0.651179834,-0.574892552,-0.496594238,-0.417103597,-0.337246897,-0.257850571,-0.179733797,-0.103701165,-0.03053546,0.039009356,0.104214901,0.164404815,0.218950832,0.267278413,0.308871911,0.343279205,0.37011577,0.389068148,0.399896782,0.402438192,0.396606481,0.382394141,0.359872165,0.329189465,0.290571588,0.244318753,0.190803228,0.130466055,0.063813174,-0.008589042,-0.086118782,-0.168104291,-0.25382981,-0.342541906,-0.433456142,-0.525764021,-0.618640149,-0.71124955,-0.802755063,-0.892324775,-0.979139389,-1.062399505,-1.141332706,-1.215200425,-1.2833045,-1.344993382,-1.399667929,-1.446786733,-1.485870945,-1.516508543,-1.538358007,-1.551151377,-1.554696654,-1.548879533,-1.533664449,-1.509094926,-1.475293228,-1.432459307,-1.380869074,-1.32087199,-1.252888013,-1.177403914,-1.094969013,-1.006190352,-0.911727361,-0.812286067,-0.708612886,-0.601488058,-0.491718789,-0.380132151,-0.267567814,-0.154870659,-0.042883358,0.067561033,0.175646388,0.280580679,0.381602918,0.477989831,0.569062192,0.654190762,0.732801785,0.804381988,0.868483045,0.92472546,0.972801837,1.012479512,1.043602517,1.066092862,1.079951122,1.085256333,1.082165177,1.070910489,1.05179908,1.025208902,0.991585583,0.951438363,0.905335453,0.853898886,0.797798873,0.737747743,0.674493501,0.608813075,0.541505296,0.473383692,0.405269151,0.337982509,0.272337149,0.209131658,0.14914262,0.093117604,0.041768403,-0.004235399,-0.044272495,-0.077775488,-0.104236048,-0.123209544,-0.13431911,-0.13725911,-0.131797966,-0.117780336,-0.095128607,-0.063843703,-0.024005189,0.024229318,0.080625434,0.144873978,0.216593601,0.295334065,0.380580127,0.471756003,0.568230378,0.669321899,0.774305123,0.882416852,0.99286281,1.10482459,1.217466828,1.329944519,1.441410425,1.551022508,1.657951312,1.761387239,1.860547656,1.954683755,2.04308712,2.125095944,2.200100822,2.267550091,2.326954661,2.377892282,2.420011235,2.45303339,2.476756614,2.491056516,2.495887492,2.491283084,2.477355633,2.454295243,2.422368048,2.381913815,2.333342893,2.27713254,2.213822661,2.144010988,2.068347755,1.987529908,1.902294904,1.813414156,1.721686175,1.62792948,1.532975331,1.437660352,1.342819114,1.249276734,1.157841563,1.069298031,0.984399699,0.903862599,0.828358899,0.758510975,0.69488591,0.637990506,0.588266824,0.5460883,0.511756483,0.485498407,0.467464627,0.457727948,0.456282829,0.463045505,0.477854794,0.500473599,0.530591085,0.567825517,0.611727726,0.661785184,0.717426632,0.778027247,0.842914275,0.911373099,0.982653684,1.055977328,1.130543682,1.20553796,1.280138279,1.353523064,1.424878457,1.493405656,1.558328122,1.618898597,1.674405854,1.724181141,1.76760424,1.804109102,1.833189006,1.854401184,1.867370891,1.871794865,1.867444155,1.854166297,1.831886806,1.800609976,1.76041899,1.711475324,1.654017459,1.58835891,1.514885589,1.434052533,1.346380004,1.25244903,1.152896389,1.048409112,0.93971853,0.827593935,0.712835903,0.596269333,0.478736278,0.361088619,0.244180654,0.128861659,0.015968502,-0.093681643,-0.199298399,-0.300125062,-0.395445168,-0.484588714,-0.566937964,-0.641932789,-0.709075502,-0.767935143,-0.818151162,-0.859436492,-0.891579963,-0.914448048,-0.927985923,-0.932217824,-0.927246717,-0.913253256,-0.890494067,-0.859299357,-0.820069864,-0.773273197,-0.719439578,-0.659157031,-0.59306606,-0.521853873,-0.446248183,-0.36701066,-0.284930084,-0.200815258,-0.11548775,-0.029774526,0.055499467,0.139518689,0.221484314,0.300621376,0.376185713,0.447470621,0.513813174,0.574600158,0.629273553,0.677335522,0.718352864,0.751960885,0.777866661,0.795851657,0.805773681,0.80756816,0.801248712,0.786907036,0.76471209,0.734908582,0.697814794,0.653819732,0.603379658,0.547014011,0.48530077,0.418871286,0.348404642,0.27462158,0.198278055,0.120158477,0.041068684,-0.038171264,-0.116734436,-0.193794436,-0.268532815,-0.340146411,-0.407854567,-0.470906141,-0.528586266,-0.580222796,-0.625192363,-0.662926019,-0.692914393,-0.714712321,-0.727942912,-0.732301018,-0.727556054,-0.713554182,-0.690219796,-0.657556332,-0.615646369,-0.564651039,-0.504808735,-0.436433143,-0.359910604,-0.275696835,-0.184313038,-0.086341431,0.017579764,0.126761823,0.240471474,0.357937234,0.478356099,0.600900494,0.724725453,0.848975947,0.972794298,1.09532762,1.215735207,1.333195828,1.446914829,1.556131012,1.660123214,1.758216524,1.849788097,1.934272498,2.011166547,2.080033597,2.140507236,2.192294356,2.235177576,2.269016994,2.293751252,2.309397899,2.316053065,2.313890431,2.303159513,2.284183278,2.257355108,2.223135136,2.182046002,2.134668044,2.081633991,2.023623182,1.961355384,1.895584247,1.827090463,1.75667469,1.685150297,1.613336007,1.542048488,1.472094969,1.404265945,1.339328031,1.278017033,1.221031301,1.169025409,1.122604235,1.082317485,1.048654711,1.022040864,1.002832431,0.991314181,0.98769655,0.992113696,1.004622232,1.025200653,1.053749463,1.090092,1.133975945,1.185075516,1.242994316,1.307268812,1.377372415,1.45272013,1.532673723,1.616547374,1.703613749,1.793110455,1.884246805,1.976210844,2.068176568,2.159311274,2.248782972,2.335767805,2.419457389,2.499066036,2.57383777,2.643053093,2.706035423,2.76215717,2.810845372,2.851586856,2.883932871,2.90750316,2.921989427,2.927158163,2.922852829,2.908995348,2.88558691,2.852708077,2.810518194,2.759254101,2.699228158,2.630825615,2.554501328,2.470775872,2.380231066,2.283504967,2.181286363,2.074308819,1.963344336,1.849196668,1.73269436,1.614683571,1.496020744,1.37756519,1.260171642,1.144682866,1.031922362,0.922687261,0.817741439,0.717808936,0.623567738,0.535643954,0.45460647,0.380962101,0.315151307,0.257544485,0.208438899,0.168056246,0.136540904,0.113958861,0.100297342,0.095465135,0.099293611,0.111538435,0.131881946,0.159936185,0.195246553,0.237296047,0.285510064,0.339261704,0.397877539,0.460643791,0.526812872,0.595610212,0.666241336,0.737899106,0.809771072,0.881046878,0.950925633,1.018623203,1.083379347,1.14446464,1.201187116,1.252898577,1.299000504,1.338949532,1.372262421,1.398520496,1.417373504,1.428542864,1.431824268,1.427089626,1.414288323,1.393447787,1.364673354,1.328147439,1.284128018,1.23294643,1.175004523,1.110771166,1.040778169,0.965615622,0.885926726,0.802402133,0.71577387,0.62680888,0.536302249,0.445070178,0.35394276,0.263756625,0.175347523,0.089542904,0.00715457,-0.071028549,-0.144247414,-0.211779645,-0.272945966,-0.327116278,-0.373715299,-0.412227728,-0.442202878,-0.463258754,-0.47508551,-0.477448294,-0.470189412,-0.453229833,-0.426569992,-0.390289895,-0.344548525,-0.289582558,-0.225704389,-0.153299494,-0.072823153,0.015203445,0.110197674,0.211520484,0.318481907,0.430347012,0.546342252,0.665662148,0.787476257,0.910936348,1.035183737,1.159356712,1.282597973,1.404062036,1.522922527,1.638379297,1.749665311,1.856053228,1.956861635,2.051460864,2.139278354,2.219803494,2.292591926,2.357269245,2.413534085,2.461160556,2.5,0.542305408,0.600244712,0.673415699,0.761175225,0.8626489,0.976744415,1.102168312,1.237445924,1.38094417,1.530896863,1.685432101,1.84260135,2.000409717,2.156846974,2.309918823,2.45767791,2.598254111,2.7298836,2.850936254,2.959940944,3.055608337,3.136850836,3.202799338,3.252816568,3.28650675,3.303721498,3.304561791,3.289376049,3.258754299,3.213518552,3.154709527,3.083569938,3.00152461,2.910157733,2.811187613,2.706439325,2.597815688,2.487267038,2.376760256,2.26824755,2.163635487,2.064754755,1.973331136,1.890958153,1.81907181,1.758927838,1.711581794,1.677872338,1.658407942,1.65355724,1.663443193,1.68794112,1.726680673,1.779051688,1.844213839,1.921109939,2.008482672,2.104894502,2.20875044,2.318323306,2.431781095,2.547216011,2.662674711,2.776189285,2.885808478,2.989628667,3.085824104,3.172675937,3.248599571,3.312169918,3.362144153,3.397481597,3.417360445,3.421191035,3.408625485,3.37956352,3.334154414,3.272795001,3.196123801,3.105011341,3.000546829,2.88402139,2.756908134,2.620839351,2.477581215,2.329006387,2.177064937,2.023754062,1.871087066,1.721062093,1.575631102,1.436669585,1.305947486,1.185101797,1.075611253,0.978773525,0.895685276,0.827225386,0.774041612,0.736540904,0.714883508,0.708980968,0.718498047,0.742858541,0.781254891,0.832661441,0.895851135,0.969415387,1.051786808,1.141264435,1.236041064,1.334232252,1.433906524,1.533116331,1.629929238,1.722458876,1.808895159,1.887533286,1.956801072,2.015284186,2.061748881,2.095161868,2.114707022,2.119798641,2.110091072,2.085484531,2.046127029,1.992412387,1.924974352,1.844676919,1.752601002,1.65002768,1.538418256,1.419391469,1.294698204,1.166194099,1.035810486,0.90552412,0.777326175,0.653190992,0.53504508,0.42473685,0.324007561,0.234463941,0.157552909,0.094538798,0.046483441,0.014229428,-0.001613192,-0.000676568,0.0171591,0.051763603,0.102758684,0.169523898,0.251206266,0.346733581,0.454831154,0.574041732,0.702748278,0.839199251,0.981535993,1.127821785,1.276072113,1.42428568,1.570475654,1.712700682,1.849095162,1.977898309,2.097481553,2.206373829,2.30328438,2.387122695,2.457015271,2.512318951,2.552630601,2.577793007,2.587896864,2.583278856,2.564515839,2.532415232,2.488001756,2.432500736,2.367318241,2.294018353,2.214297944,2.129959351,2.042881378,1.954989093,1.868222881,1.784507267,1.705719965,1.633661681,1.570027118,1.516377655,1.474116126,1.444464102,1.42844203,1.426852547,1.44026723,1.469016994,1.513186288,1.572611181,1.646881376,1.735346106,1.837123838,1.951115616,2.076021848,2.210362254,2.352498691,2.500660456,2.652971712,2.807480561,2.96218935,3.115085691,3.264173745,3.407505244,3.543209783,3.669523903,3.784818494,3.8876241,3.976653726,4.050822776,4.109265824,4.151349944,4.176684387,4.185126468,4.176783549,4.152011105,4.111406893,4.055801327,3.986244192,3.903987934,3.810467765,3.707278909,3.596151348,3.478922464,3.357508007,3.233871852,3.109995016,2.987844431,2.869341959,2.756334136,2.650563135,2.553639392,2.467016328,2.391967578,2.329567071,2.280672281,2.245910919,2.225671264,2.220096294,2.229081706,2.252277855,2.289095587,2.338715863,2.400103033,2.472021545,2.55305582,2.641632994,2.736048147,2.834491644,2.935078135,3.035876771,3.134942148,3.230345505,3.320205661,3.402719232,3.476189617,3.539054327,3.589910202,3.627536133,3.650912917,3.659239944,3.651948441,3.628711072,3.589447735,3.534327466,3.463766427,3.37842199,3.279183034,3.167156584,3.043651019,2.910156103,2.768320159,2.619924741,2.466857202,2.311081596,2.154608367,1.999463298,1.847656224,1.701149978,1.561830087,1.431475666,1.311731997,1.204085196,1.109839391,1.030096756,0.96574072,0.91742261,0.885551952,0.870290557,0.871550516,0.888996103,0.922049582,0.969900812,1.031520491,1.105676854,1.190955535,1.28578229,1.388448227,1.497137139,1.6099545,1.724957688,1.840186932,1.95369652,2.063585751,2.168029162,2.265305539,2.353825265,2.432155569,2.499043269,2.553434668,2.594492273,2.621608081,2.634413218,2.632783785,2.616842816,2.586958306,2.543737366,2.488016564,2.420848637,2.343485757,2.257359632,2.164058749,2.06530312,1.962916922,1.858799483,1.754895043,1.653161797,1.555540679,1.463924407,1.380127261,1.305856072,1.242682889,1.192019746,1.155095931,1.132938122,1.12635369,1.135917446,1.16196204,1.204572151,1.263582584,1.338580275,1.428910207,1.533685109,1.651798818,1.781943072,1.922627478,2.072202344,2.228884009,2.390782278,2.555929529,2.72231103,2.887895992,3.050668875,3.208660443,3.359978082,3.502834916,3.635577244,3.756709884,3.864919007,3.959092121,4.03833488,4.101984451,4.14961924,4.181064815,4.196395938,4.195934675,4.180244615,4.150121285,4.106578925,4.050833814,3.984284436,3.908488772,3.825139097,3.73603468,3.643052797,3.548118548,3.453173926,3.360146642,3.270919195,3.187298672,3.110987765,3.043557449,2.986421761,2.940815083,2.907772273,2.888111976,2.882423363,2.891056516,2.914116614,2.951462001,3.002706181,3.067223694,3.144159797,3.232443781,3.330805729,3.437796439,3.551810208,3.671110111,3.793855376,3.918130436,4.041975175,4.163415921,4.280496672,4.391310078,4.494027683,4.58692895,4.668428621,4.737101959,4.791707501,4.83120694,4.854781832,4.861846864,4.852059475,4.82532567,4.781801942,4.721893272,4.646247227,4.555744266,4.45148439,4.334770353,4.207087701,4.070081944,3.925533229,3.77532891,3.621434442,3.465863065,3.310644748,3.157794884,3.009283235,2.867003605,2.732744722,2.608162797,2.494756177,2.393842492,2.306538674,2.233744134,2.176127386,2.134116308,2.107892208,2.097387782,2.102288983,2.122040796,2.155856799,2.20273238,2.261461386,2.330655949,2.408769165,2.494120281,2.584921985,2.679309355,2.775370038,2.871175147,2.964810423,3.054407137,3.138172267,3.214417463,3.281586341,3.338279677,3.383278108,3.415561971,3.434327967,3.439002401,3.429250767,3.404983542,3.366358088,3.313776637,3.247880384,3.169539788,3.079841222,2.980070201,2.871691423,2.756325967,2.635725992,2.511747332,2.386320427,2.261420049,2.139034291,2.021133314,1.90963835,1.806391435,1.713126361,1.631441302,1.56277355,1.508376743,1.469300967,1.446376031,1.440198181,1.451120467,1.479246913,1.524430578,1.586275548,1.664142821,1.757159995,1.864234603,1.984070893,2.115189784,2.255951682,2.404581803,2.559197596,2.717837846,2.878492984,3.039136143,3.197754456,3.352380117,3.501120703,3.642188293,3.773926916,3.894837899,4.003602718,4.099102992,4.18043731,4.246934609,4.298163928,4.333940342,4.354327025,4.359633379,4.350409279,4.327435519,4.291710611,4.244434147,4.18698699,4.120908609,4.047871902,3.969655935,3.888116996,3.805158445,3.722699826,3.64264573,3.56685491,3.497110122,3.435089182,3.382337694,3.34024387,3.310015858,3.292661921,3.288973791,3.299513456,3.324603597,3.36432181,3.418498732,3.486720076,3.568332559,3.662453624,3.76798481,3.883628553,4.007908154,4.139190613,4.275711948,4.41560462,4.55692662,4.697691769,4.835900745,4.969572353,5.096774548,5.215654714,5.324468731,5.421608366,5.505626557,5.575260197,5.629450049,5.667357484,5.688377785,5.692149788,5.678561727,5.647753186,5.600113114,5.536273952,5.457101959,5.363683875,5.257310158,5.139455029,5.011753663,4.875976875,4.734003691,4.587792262,4.439349541,4.290700242,4.143855531,4.000781973,3.863371201,3.733410802,3.61255686,3.502308609,3.40398557,3.318707557,3.247377844,3.190669771,3.149016994,3.122607531,3.111381695,3.115033953,3.13301867,3.164559651,3.208663327,3.264135384,3.329600552,3.403525264,3.484242809,3.569980583,3.658889018,3.749071712,3.838616308,3.925625603,4.008248426,4.08470977,4.153339723,4.212600721,4.261112704,4.297675776,4.321290004,4.331172044,4.326768338,4.307764657,4.274091858,4.225927742,4.163695,4.088055265,3.999899373,3.900333975,3.790664719,3.672376261,3.547109419,3.416635836,3.282830537,3.147642827,3.013065976,2.88110618,2.753751273,2.632939692,2.520530188,2.418272741,2.327781162,2.250507797,2.187720734,2.140483878,2.109640201,2.095798438,2.099323432,2.120330284,2.1586824,2.213993468,2.285633327,2.372737641,2.474221229,2.588794836,2.714985078,2.851157258,2.995540679,3.146256074,3.301344703,3.458798667,3.61659197,3.772711818,3.925189689,4.072131669,4.211747572,4.342378407,4.462521738,4.570854552,4.666253268,4.747810578,4.814848859,4.86692993,4.903861025,4.925696867,4.932737832,4.925524214,4.904826704,4.87163321,4.827132258,4.772693207,4.709843616,4.640244102,4.565661111,4.487938004,4.408964943,4.330648036,4.254878238,4.183500498,4.118283635,4.060891439,4.012855423,3.975549686,3.950168279,3.937705411,3.93893885,3.954416734,3.984448048,4.029096883,4.08818059,4.16127185,4.247704636,4.346583965,4.4567993,4.577041378,4.705822209,4.841497937,4.982294185,5.126333506,5.271664495,5.416292109,5.558208715,5.695425384,5.826002929,5.948082201,6.059913175,6.159882347,6.246538039,6.318613186,6.375045265,6.414993038,6.437849859,6.443253321,6.431091104,6.401502922,6.354878542,6.291851905,6.213291443,6.120286741,6.014131761,5.896304877,5.768446055,5.632331524,5.489846332,5.342955239,5.193672383,5.04403021,4.896048147,4.751701527,4.612891232,4.481414549,4.358937693,4.246970424,4.14684316,4.059686948,3.986416603,3.927717277,3.884034677,3.855569079,3.842273222,3.843854134,3.859778837,3.889283856,3.931388364,3.984910777,4.048488503,4.120600565,4.199592715,4.28370465,4.371098898,4.459890923,4.548179951,4.634080058,4.715751001,4.791428325,4.859452252,4.918294905,4.966585433,5.003132635,5.026944731,5.037245963,5.033489758,5.01536825,4.982818008,4.936021874,4.875406887,4.801638314,4.715609889,4.618430415,4.511406929,4.396024698,4.273924364,4.146876596,4.016754641,3.885505221,3.755118208,3.627595588,3.504920174,3.389024576,3.281760913,3.184871741,3.099962662,3.028477038,2.971673217,2.93060462,2.906103012,2.898765217,2.908943484,2.936739665,2.982003287,3.044333555,3.123085251,3.217378445,3.326111855,3.447979652,3.581491442,3.724995125,3.876702245,4.034715459,4.197057678,4.36170243,4.526604956,4.689733565,4.849100748,5.002793554,5.149002772,5.286050435,5.412415232,5.526755431,5.627928929,5.715010152,5.787303509,5.844353204,5.885949254,5.912129619,5.923178405,5.919620186,5.902210522,5.871922834,5.829931844,5.777593835,5.716424061,5.648071653,5.574292419,5.496919975,5.41783567,5.33893776,5.262110347,5.189192555,5.121948437,5.062038098,5.010990477,4.970178232,4.94079512,4.923836228,4.920081381,4.930081972,4.954151444,4.992359555,5.044530539,5.110245177,5.18884675,5.279450796,5.380958496,5.492073495,5.611321888,5.737075062,5.86757502,6.000961813,6.135302624,6.268622061,6.398933171,6.524268705,6.642712109,6.752427794,6.851690165,6.938910988,7.012664634,7.071710826,7.115014507,7.141762539,7.151376941,7.143524491,7.118122502,7.075340711,7.015599234,6.939562623,6.848130112,6.742422213,6.623763871,6.493664428,6.353794732,6.205961732,6.052080972,5.894147399,5.734204964,5.574315474,5.4165272,5.262843719,5.115193492,4.975400649,4.845157436,4.725998769,4.619279275,4.526153197,4.447557465,4.384198208,4.336540904,4.304804336,4.288958429,4.288726022,4.303588518,4.332795341,4.375377042,4.430161839,4.495795334,4.570763092,4.653415722,4.741996062,4.83466804,4.929546749,5.024729257,5.118325679,5.208489994,5.293450142,5.371536912,5.441211163,5.501088954,5.549964177,5.586828339,5.610887178,5.62157385,5.618558476,5.601753896,5.571317545,5.527649409,5.471386104,5.403391157,5.324741662,5.236711493,5.140751362,5.038466027,4.931589007,4.821955204,4.711471865,4.602088346,4.495765147,4.394442705,4.300010455,4.214276626,4.13893926,4.075558916,4.025533476,3.990075469,3.970192258,3.966669409,3.980057509,4.010662637,4.058540644,4.123495327,4.20508054,4.302606202,4.415148106,4.541561388,4.680497438,4.830423984,4.989648052,5.156341424,5.328568201,5.504314049,5.681516648,5.858096897,6.031990351,6.201178425,6.363718864,6.517774999,6.661643337,6.793779051,6.912818966,7.017601693,7.10718458,7.180857234,7.238151387,7.278846963,7.302974257,7.310812178,7.302882606,7.279940944,7.242963012,7.193128512,7.131801301,7.060506808,6.980906942,6.894772887,6.803956234,6.710358872,6.615902158,6.522495818,6.432007095,6.346230613,6.266859457,6.195457903,6.133436244,6.08202811,6.042270629,6.014987759,6.000777044,6 2 | -------------------------------------------------------------------------------- /Tests/1d/sig3.csv: -------------------------------------------------------------------------------- 1 | 1.107923173,1.09926039,1.08946627,1.078741562,1.067267416,1.055203072,1.042684372,1.029823002,1.016706388,1.00339812,0.989938832,0.976347405,0.962622441,0.948743897,0.934674847,0.920363298,0.905744042,0.890740523,0.875266707,0.859228977,0.842528046,0.825060952,0.806723125,0.787410589,0.767022318,0.745462768,0.722644607,0.698491626,0.672941823,0.6459506,0.617494006,0.587571929,0.5562111,0.523467767,0.489429873,0.454218564,0.417988855,0.380929294,0.343260516,0.305232585,0.267121112,0.22922218,0.191846198,0.155310851,0.1199334,0.086022638,0.053870832,0.023746012,-0.004115041,-0.029512793,-0.05228967,-0.072333281,-0.089578039,-0.104005158,-0.115641061,-0.12455436,-0.130851599,-0.134672012,-0.136181583,-0.135566699,-0.133027682,-0.128772447,-0.123010533,-0.11594766,-0.107780958,-0.098694948,-0.088858305,-0.078421408,-0.067514639,-0.05624737,-0.044707559,-0.032961882,-0.021056285,-0.009016893,0.003148819,0.015450666,0.027914262,0.040579447,0.053498674,0.066735374,0.080362307,0.094459908,0.109114595,0.124417054,0.140460431,0.157338445,0.175143357,0.193963796,0.213882406,0.234973329,0.257299507,0.280909868,0.305836415,0.332091325,0.359664141,0.38851918,0.418593322,0.449794298,0.481999665,0.5150566,0.548782637,0.582967465,0.617375809,0.651751412,0.685822048,0.719305429,0.751915829,0.78337117,0.813400277,0.841750005,0.868191902,0.892528112,0.914596244,0.934273007,0.951476442,0.966166708,0.978345407,0.988053555,0.995368342,1.000398876,1.003281175,1.004172641,1.003246296,1.000685012,0.996675962,0.991405469,0.985054395,0.977794169,0.969783495,0.961165785,0.952067262,0.942595726,0.932839897,0.922869276,0.912734434,0.902467662,0.892083887,0.881581803,0.870945144,0.860144047,0.849136481,0.837869703,0.826281724,0.814302795,0.801856902,0.788863306,0.77523812,0.760895982,0.74575182,0.729722757,0.712730167,0.694701887,0.675574592,0.655296318,0.633829077,0.611151528,0.587261604,0.562179007,0.535947433,0.508636412,0.480342596,0.45119038,0.421331707,0.390944961,0.360232877,0.329419448,0.298745845,0.26846545,0.238838141,0.210124019,0.182576839,0.156437407,0.131927238,0.109242766,0.088550361,0.069982392,0.053634485,0.039564098,0.027790414,0.018295546,0.011026912,0.005900643,0.002805801,0.001609196,0.002160546,0.004297762,0.007852138,0.012653254,0.018533465,0.025331844,0.032897522,0.04109239,0.049793158,0.058892807,0.068301467,0.077946804,0.087773955,0.097745124,0.107838865,0.118049167,0.128384357,0.138865905,0.149527153,0.160412007,0.171573597,0.183072941,0.194977575,0.207360176,0.22029713,0.233867044,0.248149171,0.263221717,0.279160021,0.296034578,0.313908919,0.33283734,0.352862509,0.374013004,0.396300837,0.419719056,0.444239518,0.469810973,0.496357564,0.523777902,0.551944816,0.580705916,0.609885027,0.639284562,0.668688818,0.697868156,0.726583952,0.754594164,0.78165931,0.807548611,0.832046043,0.854956013,0.876108414,0.895362821,0.912611649,0.927782138,0.940837112,0.951774501,0.960625717,0.967452982,0.972345802,0.975416771,0.976796932,0.976630918,0.975072071,0.972277731,0.968404856,0.963606081,0.958026316,0.951799915,0.945048445,0.937879037,0.930383283,0.92263664,0.914698258,0.906611194,0.898402916,0.890086055,0.881659334,0.873108621,0.86440807,0.855521319,0.846402712,0.836998537,0.827248287,0.817085928,0.806441211,0.795241029,0.783410841,0.770876205,0.757564418,0.7434063,0.728338115,0.712303645,0.695256388,0.67716186,0.657999928,0.63776714,0.616478924,0.594171574,0.570903903,0.546758421,0.521841936,0.49628545,0.470243257,0.443891186,0.417423961,0.39105169,0.364995578,0.33948296,0.314741849,0.290995187,0.268455068,0.247317157,0.227755578,0.209918502,0.193924621,0.179860673,0.167780103,0.157702886,0.149616495,0.143477902,0.139216489,0.13673769,0.135927163,0.136655279,0.138781738,0.142160109,0.146642146,0.152081735,0.158338378,0.165280166,0.172786178,0.180748339,0.189072729,0.197680409,0.206507789,0.215506623,0.224643682,0.233900165,0.243270918,0.252763505,0.262397171,0.272201749,0.282216521,0.292489056,0.303074035,0.314032059,0.325428429,0.337331887,0.349813298,0.362944245,0.376795527,0.391435525,0.406928435,0.423332357,0.440697247,0.459062761,0.478456019,0.498889356,0.520358131,0.542838696,0.566286614,0.590635274,0.615794992,0.641652732,0.668072553,0.69489684,0.72194838,0.749033288,0.775944723,0.802467319,0.828382189,0.853472306,0.877528055,0.900352716,0.921767634,0.941616827,0.959770851,0.976129715,0.990624764,1.00321944,1.013908941,1.022718815,1.02970263,1.034938831,1.038526999,1.04058369,1.041238058,1.040627444,1.038893117,1.036176284,1.032614511,1.028338602,1.023470006,1.018118752,1.012381918,1.006342589,1.000069274,0.993615715,0.987021041,0.980310196,0.973494589,0.966572908,0.959532057,0.952348172,0.944987692,0.937408454,0.929560812,0.921388775,0.912831158,0.903822775,0.894295678,0.884180462,0.873407675,0.861909326,0.849620539,0.83648133,0.822438537,0.807447867,0.791476041,0.774502988,0.756524026,0.737551941,0.717618868,0.69677787,0.675104085,0.652695341,0.629672108,0.606176727,0.582371827,0.558437924,0.534570205,0.510974568,0.487863035,0.465448683,0.443940297,0.423536966,0.404422861,0.386762423,0.370696194,0.356337466,0.343769895,0.33304618,0.324187816,0.317185918,0.312003023,0.308575747,0.306818126,0.306625477,0.307878562,0.310447882,0.314197921,0.31899118,0.324691883,0.331169269,0.338300388,0.345972391,0.354084298,0.36254827,0.37129041,0.380251157,0.389385312,0.398661761,0.408062965,0.417584246,0.427232943,0.437027465,0.446996277,0.457176855,0.467614599,0.478361744,0.489476244,0.501020629,0.513060819,0.525664883,0.538901709,0.552839575,0.567544591,0.583079018,0.599499432,0.616854763,0.635184215,0.654515114,0.674860728,0.696218146,0.71856629,0.741864174,0.766049523,0.791037866,0.816722214,0.842973426,0.86964134,0.896556708,0.923533957,0.95037471,0.976872017,1.002815132,1.027994675,1.052207981,1.075264388,1.096990236,1.117233361,1.135866854,1.152791952,1.167939912,1.181272823,1.192783354,1.202493475,1.210452273,1.216732984,1.221429438,1.224652077,1.226523762,1.227175532,1.226742493,1.225359964,1.223160003,1.220268366,1.216801979,1.212866907,1.208556838,1.203952041,1.199118761,1.194109004,1.188960645,1.183697816,1.1783315,1.172860297,1.167271304,1.161541083,1.155636673,1.149516644,1.143132171,1.136428122,1.129344173,1.121815967,1.113776309,1.105156449,1.095887452,1.085901684,1.075134434,1.06352567,1.051021946,1.03757843,1.023161036,1.007748611,0.991335113,0.973931695,0.955568604,0.936296784,0.916189058,0.895340788,0.873869889,0.851916113,0.829639548,0.807218285,0.784845286,0.762724497,0.741066334,0.720082673,0.699981554,0.680961811,0.663207862,0.646884904,0.632134716,0.619072273,0.60778331,0.598322926,0.590715275,0.584954301,0.581005461,0.578808303,0.578279735,0.57931782,0.581805888,0.585616788,0.590617104,0.596671169,0.603644775,0.611408461,0.619840332,0.62882837,0.638272228,0.64808454,0.658191752,0.668534555,0.679067941,0.689760971,0.700596285,0.711569424,0.722688013,0.733970836,0.745446845,0.757154123,0.769138823,0.781454084,0.794158916,0.807317071,0.820995851,0.835264861,0.850194671,0.865855375,0.88231501,0.899637849,0.917882531,0.93710006,0.957331677,0.97860665,1.000940033,1.024330476,1.048758163,1.074182999,1.100543154,1.127754083,1.155708148,1.184274928,1.21330232,1.24261846,1.27203448,1.301348079,1.330347792,1.358817862,1.386543501,1.413316364,1.438939976,1.463234882,1.486043289,1.507232976,1.526700319,1.544372284,1.560207341,1.574195277,1.586355964,1.596737187,1.605411664,1.612473444,1.618033867,1.622217285,1.625156726,1.626989675,1.627854115,1.627884933,1.627210784,1.625951456,1.624215754,1.6220999,1.619686426,1.617043517,1.614224746,1.611269157,1.60820162,1.605033427,1.601763037,1.598376972,1.594850781,1.59115007,1.587231576,1.583044253,1.578530394,1.573626772,1.56826583,1.562376924,1.555887646,1.548725252,1.540818212,1.532097906,1.522500468,1.51196879,1.50045466,1.487921016,1.474344263,1.459716585,1.444048174,1.427369261,1.40973185,1.391211013,1.371905637,1.351938502,1.331455588,1.310624549,1.289632319,1.268681857,1.247988099,1.227773225,1.208261398,1.189673186,1.172219877,1.156097966,1.141484031,1.128530254,1.117360779,1.108069058,1.10071631,1.095331095,1.091910025,1.090419508,1.090798399,1.092961409,1.096803068,1.102202044,1.109025623,1.11713416,1.126385336,1.136638097,1.147756159,1.159611025,1.172084466,1.185070465,1.198476636,1.212225155,1.226253254,1.240513321,1.254972688,1.269613146,1.284430259,1.299432515,1.314640377,1.330085243,1.34580837,1.361859753,1.378296985,1.395184084,1.412590286,1.430588786,1.449255401,1.46866714,1.48890065,1.510030522,1.532127433,1.555256129,1.579473248,1.604825002,1.631344764,1.659050617,1.687942941,1.718002144,1.749186649,1.781431257,1.814646033,1.848715826,1.88350055,1.918836305,1.95453741,1.990399341,2.026202558,2.061717116,2.09670793,2.130940492,2.164186832,2.196231443,2.226876932,2.255949118,2.283301371,2.30881797,2.332416365,2.354048259,2.373699494,2.391388783,2.407165425,2.421106114,2.433311065,2.443899649,2.453005743,2.460773018,2.467350327,2.472887369,2.477530748,2.481420513,2.484687244,2.487449696,2.489813014,2.491867473,2.493687713,2.495332416,2.496844346,2.49825071,2.499563765,2.500781615,2.501889155,2.502859108,2.503653137,2.504222994,2.504511711,2.504454813,2.503981568,2.503016289,2.5014797,2.499290398,2.496366436,2.49262704,2.487994504,2.482396245,2.475767051,2.468051482,2.459206405,2.449203611,2.438032436,2.425702289,2.412244978,2.3977167,2.382199555,2.365802452,2.348661255,2.330938088,2.312819687,2.294514777,2.276250485,2.25826784,2.240816495,2.224148839,2.208513735,2.194150119,2.181280768,2.170106492,2.160801032,2.153506883,2.148332224,2.145349084,2.144592777,2.1460626,2.149723708,2.155510033,2.163328047,2.173061179,2.184574644,2.197720472,2.212342511,2.228281242,2.245378234,2.263480124,2.282442062,2.302130543,2.322425657,2.343222732,2.364433437,2.38598638,2.40782728,2.429918753,2.452239816,2.47478514,2.497564127,2.520599858,2.543927945,2.567595332,2.591659041,2.616184893,2.64124619,2.66692235,2.693297478,2.720458845,2.748495258,2.777495273,2.807545253,2.838727226,2.87111655,2.904779393,2.939770038,2.976128073,3.013875526,3.053014036,3.093522183,3.135353097,3.17843251,3.222657383,3.267895286,3.313984637,3.36073593,3.407934006,3.455341398,3.502702699,3.549749872,3.596208317,3.641803503,3.686267881,3.729347798,3.770810104,3.810448138,3.848086847,3.883586788,3.916846856,3.947805647,3.976441428,4.002770773,4.026845983,4.048751462,4.068599272,4.086524095,4.102677857,4.117224251,4.130333368,4.142176631,4.152922172,4.162730767,4.17175239,4.180123424,4.187964513,4.195379051,4.202452231,4.209250611,4.215822118,4.222196421,4.228385597,4.234385025,4.240174456,4.245719194,4.250971375,4.255871289,4.260348757,4.264324537,4.267711787,4.270417577,4.272344505,4.273392412,4.273460253,4.272448142,4.270259596,4.266804001,4.261999291,4.255774835,4.248074486,4.238859741,4.228112908,4.215840184,4.202074496,4.186877945,4.170343702,4.152597168,4.133796244,4.114130584,4.093819708,4.07310995,4.052270219,4.031586678,4.011356448,3.991880583,3.973456544,3.95637051,3.94088985,3.927256084,3.915678673,3.906329901,3.899341079,3.894800219,3.892751232,3.893194662,3.896089826,3.901358229,3.908888016,3.918539225,3.930149554,3.943540393,3.958522846,3.974903538,3.992490009,4.011095554,4.030543414,4.05067026,4.071328951,4.092390592,4.113745922,4.1353061,4.157002967,4.178788857,4.200636035,4.22253585,4.244497662,4.266547606,4.288727242,4.311092124,4.333710312,4.356660842,4.38003214,4.403920382,4.428427757,4.453660627,4.479727531,4.506737007,4.534795197,4.564003214,4.594454255,4.626230478,4.659399656,4.694011672,4.730094939,4.767652856,4.806660441,4.847061301,4.88876514,4.931645971,4.975541252,5.020252081,5.065544617,5.111152808,5.156782441,5.202116494,5.24682166,5.290555847,5.332976389,5.373748647,5.412554637,5.449101292,5.483128003,5.514413076,5.542778837,5.56809516,5.590281297,5.60930598,5.625185856,5.637982392,5.647797467,5.654767919,5.659059336,5.660859399,5.660371069,5.657805904,5.653377719,5.647296784,5.639764712,5.630970097,5.621084969,5.610262049,5.598632786,5.586306104,5.573367787,5.559880426,5.545883816,5.531395742,5.51641304,5.500912895,5.484854279,5.468179517,5.450815916,5.432677465,5.413666583,5.393675937,5.37259034,5.350288774,5.326646553,5.301537693,5.274837506,5.24642546,5.216188327,5.184023616,5.14984328,5.113577649,5.075179501,5.034628176,4.991933576,4.947139871,4.900328734,4.85162185,4.801182519,4.749216112,4.695969222,4.641727361,4.58681114,4.531570926,4.476380077,4.421626919,4.367705738,4.315007113,4.263908009,4.214762024,4.16789026,4.123573218,4.082044078,4.043483668,4.008017303,3.975713607,3.946585289,3.920591767,3.89764343,3.877607275,3.860313587,3.845563318,3.833135823,3.822796627,3.814304916,3.807420529,3.801910256,3.7975533,3.794145845,3.791504694,3.789470003,3.78790715,3.786707828,3.785790457,3.785100001,3.784607312,3.784308084,3.784221513,3.784388744,3.784871154,3.785748534,3.787117182,3.789087937,3.791784135,3.79533948,3.799895797,3.805600623,3.812604595,3.821058591,3.831110572,3.842902104,3.856564536,3.872214844,3.88995118,3.909848192,3.931952233,3.956276599,3.982796983,4.011447375,4.042116644,4.074646061,4.108828011,4.14440614,4.181077103,4.218494057,4.256271933,4.29399444,4.331222658,4.36750495,4.402387855,4.435427537,4.466201295,4.494318638,4.519431414,4.541242543,4.559512954,4.574066453,4.58479233,4.591645666,4.594645404,4.593870378,4.589453564,4.581574914,4.570453155,4.556336959,4.53949589,4.520211473,4.498768713,4.475448319,4.450519801,4.424235592,4.396826221,4.368496572,4.339423163,4.309752394,4.279599643,4.249049106,4.21815427,4.186938885,4.155398336,4.123501314,4.091191713,4.058390676,4.024998754,3.990898156,3.955955077,3.920022129,3.882940881,3.844544582,3.804661086,3.763116054,3.719736482,3.674354596,3.626812145,3.576965108,3.524688769,3.469883122,3.412478487,3.352441184,3.289779075,3.224546725,3.156849919,3.086849212,3.014762241,2.940864486,2.865488227,2.789019531,2.711893135,2.634585242,2.557604334,2.48148025,2.406751874,2.333953891,2.263603171,2.196185337,2.132142155,2.071860285,2.01566193,1.963797763,1.916442429,1.873692752,1.835568638,1.802016526,1.772915112,1.748082974,1.727287669,1.710255813,1.696683684,1.686247886,1.678615672,1.673454599,1.670441236,1.669268754,1.669653288,1.671339029,1.674102066,1.677753051,1.682138794,1.687142899,1.692685594,1.698722893,1.705245217,1.712275601,1.719867598,1.728102951,1.73708912,1.746956676,1.757856603,1.769957493,1.783442608,1.798506773,1.815353037,1.834189046,1.855223054,1.87865952,1.904694242,1.933509003,1.965265745,2.00010031,2.038115862,2.079376129,2.123898684,2.171648516,2.222532209,2.276393074,2.333007579,2.392083463,2.453259835,2.516109533,2.580143934,2.644820266,2.70955137,2.773717699,2.836681203,2.897800613,2.956447521,3.012022587,3.063971147,3.11179753,3.15507742,3.193467722,3.22671352,3.254651866,3.27721234,3.294414454,3.306362175,3.31323593,3.315282609,3.312804083,3.306144822,3.295679176,3.281798812,3.264900767,3.245376475,3.223602018,3.199929802,3.174681715,3.148143803,3.120562393,3.092141564,3.063041826,3.033379857,3.003229116,2.972621184,2.941547664,2.909962511,2.877784683,2.84490101,2.811169231,2.776421156,2.740465952,2.703093568,2.664078335,2.623182806,2.580161908,2.534767475,2.48675325,2.435880405,2.38192364,2.324677845,2.263965313,2.199643404,2.131612505,2.059824089,1.984288565,1.905082609,1.822355552,1.736334429,1.647327239,1.555724021,1.461995369,1.366688141,1.270418196,1.173860159,1.077734383,0.982791444,0.889794668,0.799501347,0.712643416,0.629908409,0.551921577,0.479229951,0.412289085,0.351453052,0.296968085,0.248970059,0.2074858,0.172438004,0.143653377,0.120873477,0.103767624,0.091947216,0.084980763,0.082409014,0.083759593,0.088560671,0.096353303,0.106702163,0.119204541,0.133497525,0.149263419,0.166233487,0.184190167,0.202967938,0.222453042,0.242582245,0.263340846,0.2847601,0.306914197,0.329916936,0.353918167,0.379100078,0.405673328,0.433873048,0.463954653,0.496189416,0.530859733,0.56825398,0.608660877,0.652363274,0.699631312,0.750714898,0.805835549,0.865177647,0.928879272,0.9970228,1.069625599,1.146631151,1.227901062,1.313208429,1.402233064,1.49455908,1.58967528,1.686978714,1.785781655,1.885322061,1.984777433,2.083281762,2.179945052,2.273874744,2.364198179,2.450085164,2.530769635,2.605569438,2.673903327,2.735304428,2.789429602,2.836064379,2.875123371,2.906646304,2.930790055,2.947817238,2.958082025,2.962013975,2.960100675,2.952869955,2.940872409,2.924664814,2.904794953,2.881788202,2.856136113,2.828287109,2.798639283,2.767535235,2.735258787,2.70203337,2.66802187,2.633327698,2.597996837,2.562020669,2.525339373,2.487845754,2.449389363,2.40978082,2.368796306,2.326182197,2.281659865,2.234930703,2.18568145,2.133589901,2.078331114,2.019584209,1.957039831,1.890408333,1.819428687,1.743878058,1.663581929,1.578424552,1.488359449,1.393419568,1.293726653,1.189499292,1.081059101,0.968834468,0.853361342,0.735280604,0.615331697,0.494342344,0.373214389,0.252906002,0.134410745,0.018734173,-0.093131118,-0.200230989,-0.301674678,-0.396658018,-0.48448391,-0.56457911,-0.636506611,-0.699973153,-0.754831622,-0.801078423,-0.838846152,-0.8683921,-0.890083329,-0.904379162,-0.911811973,-0.912967189,-0.908463334,-0.898932855,-0.885004351,-0.867286663,-0.84635516,-0.82274038,-0.796919087,-0.769307687,-0.740257836,-0.710054054,-0.678913082,-0.646984724,-0.614353894,-0.581043628,-0.547018813,-0.512190453,-0.476420294,-0.439525702,-0.401284712,-0.361441208,-0.319710251,-0.275783577,-0.229335355,-0.180028269,-0.127520063,-0.071470617,-0.011549672,0.052554732,0.121127098,0.194414598,0.272616609,0.355873836,0.444257283,0.537757457,0.636274245,0.739607986,0.847452311,0.959389344,1.074887841,1.193304765,1.313890694,1.435799316,1.558101033,1.679800521,1.799857795,1.917212143,2.030808061,2.139622129,2.2426897,2.339130192,2.428169845,2.509160904,2.581596367,2.645119716,2.69952928,2.744777216,2.780963345,2.808324353,2.827219068,2.838110684,2.841546847,2.838138607,2.82853911,2.813422895,2.793466489,2.769330842,2.741646016,2.710998351,2.677920214,2.64288229,2.606288299,2.568471915,2.529695647,2.490151388,2.449962347,2.409186081,2.367818356,2.325797635,2.283009977,2.239294215,2.194447303,2.148229786,2.100371358,2.05057654,1.998530536,1.943905337,1.886366179,1.825578453,1.761215171,1.692965057,1.620541308,1.543691026,1.462205239,1.37592936,1.284773871,1.188724885,1.087854195,0.982328328,0.872416045,0.758493743,0.641048166,0.520675928,0.398079414,0.27405876,0.14949982,0.025358199,-0.097360302,-0.21762228,-0.334391562,-0.446655334,-0.55345045,-0.653888776,-0.747180411,-0.832653729,-0.909771331,-0.978141242,-1.037522921,-1.08782796,-1.12911562,-1.161583627,-1.185554854,-1.201460709,-1.209822118,-1.211229075,-1.20631966,-1.195759406,-1.180221728,-1.160370039,-1.136841967,-1.110235982,-1.081100554,-1.049925862,-1.017137942,-0.983095101,-0.948086337,-0.912331513,-0.875982978,-0.839128343,-0.801794169,-0.7639503,-0.725514654,-0.68635831,-0.646310752,-0.60516522,-0.562684109,-0.518604431,-0.472643371,-0.424504004,-0.373881256,-0.320468196,-0.263962769,-0.204075031,-0.140534952,-0.073100805,-0.001568086,0.074221128,0.154368555,0.2389101,0.327806579,0.420935199,0.518082258,0.618937585,0.723091224,0.830032855,0.939154378,1.049755968,1.161055765,1.272203183,1.382295615,1.490398106,1.595565343,1.696865152,1.793402533,1.884343208,1.968935598,2.046530244,2.116595787,2.178730791,2.232670952,2.278291463,2.315604585,2.344752719,2.365997486,2.379705508,2.386331688,2.386400855,2.380488637,2.369202371,2.353162777,2.332986983,2.309273377,2.282588579,2.253456721,2.222351082,2.189688,2.155822949,2.12104853,2.085594172,2.049627246,2.013255338,1.976529425,1.939447716,1.901959964,1.863972075,1.825350897,1.785929082,1.74551,1.703872659,1.660776675,1.615967319,1.56918072,1.520149296,1.468607504,1.414297971,1.356978089,1.296427082,1.232453545,1.16490339,1.093668072,1.018692906,0.939985201,0.857621903,0.77175634,0.682623654,0.590544472,0.495926376,0.399262793,0.301128973,0.202174874,0.10311489,0.004714543,-0.092225563,-0.186888053,-0.278458691,-0.366147127,-0.449207585,-0.526958581,-0.598800773,-0.66423213,-0.722859726,-0.774407683,-0.818720955,-0.85576492,-0.885620918,-0.908478136,-0.924622352,-0.934422212,-0.938313779,-0.936784089,-0.930354475,-0.919564288,-0.904955614,-0.887059417,-0.866383439,-0.843402066,-0.818548224,-0.79220732,-0.764713093,-0.736345241,-0.707328614,-0.677833729,-0.647978401,-0.61783023,-0.587409759,-0.556694091,-0.525620824,-0.49409217,-0.461979164,-0.429125908,-0.395353825,-0.360465916,-0.32425106,-0.286488403,-0.24695189,-0.205415024,-0.161655914,-0.115462672,-0.066639197,-0.015011364,0.039566428,0.09720442,0.157970501,0.221883258,0.288905326,0.358937321,0.431812727,0.507294085,0.585070872,0.664759418,0.745905149,0.827987389,0.910426811,0.992595512,1.073829538,1.153443514,1.230746903,1.305061284,1.375737932,1.44217494,1.503833106,1.560249874,1.611050665,1.65595714,1.694792033,1.727480439,1.754047601,1.774613437,1.789384188,1.798641712,1.802731028,1.80204672,1.797018864,1.788099042,1.775746985,1.760418254,1.742553304,1.722568131,1.700846625,1.67773466,1.653535858,1.628508911,1.602866316,1.576774323,1.550353913,1.523682589,1.496796812,1.469694902,1.442340262,1.414664792,1.386572425,1.357942699,1.328634341,1.298488852,1.267334106,1.234987993,1.201262165,1.165965926,1.128910342,1.089912614,1.048800766,1.005418665,0.95963136,0.911330707,0.860441177,0.806925719,0.750791486,0.692095196,0.630947849,0.567518501,0.502036784,0.434793855,0.366141515,0.296489262,0.226299159,0.156078467,0.086370141,0.017741406,-0.049229257,-0.113966235,-0.175911475,-0.234539108,-0.289369364,-0.339981146,-0.386022676,-0.427219755,-0.463381267,-0.494401753,-0.520261001,-0.541020791,-0.55681905,-0.567861805,-0.574413403,-0.576785527,-0.575325534,-0.570404628,-0.562406352,-0.551715781,-0.538709746,-0.523748307,-0.507167618,-0.489274243,-0.470340903,-0.450603596,-0.430259951,-0.409468695,-0.388350054,-0.366986932,-0.345426693,-0.323683417,-0.301740468,-0.279553287,-0.257052313,-0.234145959,-0.210723611,-0.186658635,-0.16181138,-0.136032211,-0.1091646,-0.081048324,-0.051522818,-0.02043073,0.012378271,0.047043419,0.083688481,0.122417141,0.163308166,0.20641047,0.251738199,0.299266021,0.348924834,0.400598129,0.454119282,0.509270026,0.565780363,0.623330123,0.681552314,0.740038356,0.798345168,0.856003986,0.912530677,0.967437208,1.020243845,1.070491573,1.117754206,1.161649634,1.201849693,1.238088223,1.270166938,1.297958895,1.321409456,1.340534771,1.355417958,1.366203246,1.373088445,1.376316171,1.376164257,1.372935817,1.36694937,1.35852938,1.347997551,1.335665064,1.321825944,1.306751633,1.29068677,1.273846168,1.256412892,1.238537323,1.220337101,1.201897777,1.18327406,1.164491514,1.145548584,1.12641886,1.107053478,1.087383602,1.067322946,1.046770296,1.025612048,1.003724745,0.980977669,0.957235485,0.932361016,0.906218164,0.878675035,0.849607281,0.8189017,0.786460064,0.752203156,0.716074956,0.678046862,0.638121835,0.596338285,0.552773504,0.50754644,0.460819565,0.412799642,0.363737166,0.313924333,0.263691439,0.213401667,0.163444328,0.114226717,0.066164803,0.019673106,-0.024845856,-0.067012097,-0.106478205,-0.142938443,-0.176136482,-0.205871433,-0.232001918,-0.254448029,-0.273191148,-0.288271717,-0.299785133,-0.307876049,-0.312731412,-0.314572613,-0.31364713,-0.31022004,-0.30456573,-0.29696011,-0.287673537,-0.276964641,-0.265075136,-0.252225671,-0.238612709,-0.224406388,-0.209749284,-0.194755961,-0.179513211,-0.164080852,-0.14849297,-0.1327595,-0.116868052,-0.100785887,-0.084462006,-0.067829273,-0.050806569,-0.033300948,-0.015209806,0.003576936,0.023174585,0.043701362,0.065275951,0.088014912,0.112029884,0.137424598,0.164291662,0.192709149,0.222737033,0.254413519,0.287751398,0.322734525,0.359314605,0.397408445,0.43689588,0.477618565,0.519379818,0.56194567,0.605047245,0.648384528,0.691631511,0.734442625,0.776460296,0.817323384,0.856676168,0.894177533,0.929509952,0.962387853,0.992565001,1.019840547,1.04406349,1.065135364,1.083011083,1.097697943,1.109252922,1.117778452,1.123416943,1.126344364,1.126763201,1.124895132,1.120973729,1.115237453,1.107923173 2 | -------------------------------------------------------------------------------- /ewt/__init__.py: -------------------------------------------------------------------------------- 1 | __all__ = ['boundaries', 'ewt1d', 'ewt2d','utilities'] -------------------------------------------------------------------------------- /ewt/__pycache__/Boundaries.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bhurat/EWT-Python/48c855dc2df1a36b8b4221b3bdc609f1b82c4e32/ewt/__pycache__/Boundaries.cpython-36.pyc -------------------------------------------------------------------------------- /ewt/__pycache__/EWT_1D.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bhurat/EWT-Python/48c855dc2df1a36b8b4221b3bdc609f1b82c4e32/ewt/__pycache__/EWT_1D.cpython-36.pyc -------------------------------------------------------------------------------- /ewt/__pycache__/Tests.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bhurat/EWT-Python/48c855dc2df1a36b8b4221b3bdc609f1b82c4e32/ewt/__pycache__/Tests.cpython-36.pyc -------------------------------------------------------------------------------- /ewt/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bhurat/EWT-Python/48c855dc2df1a36b8b4221b3bdc609f1b82c4e32/ewt/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /ewt/__pycache__/ewt1d.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bhurat/EWT-Python/48c855dc2df1a36b8b4221b3bdc609f1b82c4e32/ewt/__pycache__/ewt1d.cpython-36.pyc -------------------------------------------------------------------------------- /ewt/__pycache__/ewt2d.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bhurat/EWT-Python/48c855dc2df1a36b8b4221b3bdc609f1b82c4e32/ewt/__pycache__/ewt2d.cpython-36.pyc -------------------------------------------------------------------------------- /ewt/__pycache__/utilities.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bhurat/EWT-Python/48c855dc2df1a36b8b4221b3bdc609f1b82c4e32/ewt/__pycache__/utilities.cpython-36.pyc -------------------------------------------------------------------------------- /ewt/boundaries.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | from scipy.special import iv, erf, erfinv 3 | from ewt.utilities import * 4 | 5 | 6 | """ 7 | ewt_boundariesDetect(absf, params) 8 | Adaptively detects boundaries in 1D magnitude Fourier spectrum based on the 9 | detection method chosen in params.detect 10 | Input: 11 | absf - magnitude Fourier spectrum 12 | params - parameters for EWT (see utilities) 13 | Output: 14 | bounds - resulting boundaries in index domain 15 | Author: Basile Hurat, Jerome Gilles""" 16 | def ewt_boundariesDetect(absf, params, sym = 1): 17 | if params.log == 1: #apply log parameter 18 | preproc = np.log(absf) 19 | else: 20 | preproc = np.copy(absf) 21 | if params.removeTrends.lower() != 'none': #apply removeTrend parameter 22 | preproc = removeTrends(absf, params) 23 | if params.spectrumRegularize.lower() != 'none': #apply spectrumRegularize parameter 24 | preproc = spectrumRegularize(preproc, params) 25 | 26 | #Choose detection method 27 | if params.detect == 'scalespace': 28 | bounds = ewt_GSSDetect(preproc, params, sym) 29 | elif params.detect == 'locmax': 30 | if sym == 1: 31 | bounds = ewt_localMaxBounds(preproc[0:len(preproc) // 2], params.N) 32 | else: 33 | bounds = ewt_localMaxBounds(preproc, params.N) 34 | elif params.detect == 'locmaxmin': 35 | if sym == 1: 36 | bounds = ewt_localMaxMinBounds(preproc[0:len(preproc) // 2], params.N) 37 | else: 38 | bounds = ewt_localMaxMinBounds(preproc, params.N) 39 | elif params.detect == 'locmaxminf': 40 | if sym == 1: 41 | bounds = ewt_localMaxMinBounds(preproc[0:len(preproc) // 2], params.N,absf[0:len(absf) // 2]) 42 | else: 43 | bounds = ewt_localMaxMinBounds(preproc, params.N, absf) 44 | elif params.detect == 'adaptivereg': 45 | if sym == 1: 46 | bounds = ewt_adaptiveBounds(preproc[0:len(preproc) // 2], params.init_bounds) 47 | else: 48 | bounds = ewt_adaptiveBounds(preproc, params.init_bounds) 49 | elif params.detect == 'adaptive': 50 | if sym == 1: 51 | bounds = ewt_adaptiveBounds(preproc[0:len(preproc) // 2], params.init_bounds,absf[0:len(absf) // 2]) 52 | else: 53 | bounds = ewt_adaptiveBounds(preproc, params.init_bounds, absf) 54 | for i in range(0, len(bounds)): 55 | if bounds[i] == 0: 56 | bounds = np.delete(bounds, i) 57 | break 58 | return bounds 59 | 60 | """ 61 | ewt_localMaxBounds(f, N) 62 | Detects N highest maxima, and returns the midpoints between them as detected 63 | boundaries 64 | Input: 65 | f - signal to detect maxima from (generally pre-processed magnitude spectrum) 66 | N - number of maxima to detect 67 | Output: 68 | bounds - resulting detected bounds in index domain 69 | Author: Basile Hurat, Jerome Gilles""" 70 | def ewt_localMaxBounds(f, N): 71 | #Detect maxima 72 | maxima = localmin(-f).astype(bool) 73 | index = np.arange(0, len(maxima)) 74 | maxindex = index[maxima] 75 | #If we have more than N, keep only N highest maxima values 76 | if N < len(maxindex): 77 | order = np.argsort(f[maxima])[-N:] 78 | maxindex = np.sort(maxindex[order]) 79 | else: 80 | N = len(maxindex) - 1 81 | #find midpoints 82 | bounds = np.zeros(N) 83 | bounds[0] = round(maxindex[0] / 2) 84 | for i in range(0, N-1): 85 | bounds[i + 1] = (maxindex[i] + maxindex[i + 1]) // 2 86 | return bounds 87 | 88 | """ 89 | ewt_localMaxMinBounds(f, N,f_orig) 90 | Detects N highest maxima, and returns the lowest minima between them as detected 91 | boundaries 92 | Input: 93 | f - signal to detect maxima and minima from (generally pre-processed 94 | magnitude spectrum) 95 | N - number of maxima to detect 96 | f_orig - (Optional) If given, detects minima from this instead of f 97 | Output: 98 | bounds - resulting detected bounds in index domain 99 | Author: Basile Hurat, Jerome Gilles""" 100 | def ewt_localMaxMinBounds(f, N, f_orig = []): 101 | #Get both maxima and minima of signal 102 | maxima = localmin(-f).astype(bool) 103 | if len(f_orig) == 0: 104 | minima = localmin(f).astype(bool) 105 | else: 106 | minima = localmin(f_orig).astype(bool) 107 | index = np.arange(0, len(maxima)) 108 | maxindex = index[maxima] 109 | minindex = index[minima] 110 | 111 | #If we have more than N, keep only N highest maxima values 112 | if N maxindex[i]] 125 | intervalmin = intervalmin[intervalmin < maxindex[i + 1]] 126 | bounds[i + 1] = intervalmin[np.argmin(f[intervalmin])] 127 | return bounds 128 | 129 | """ 130 | ewt_adaptiveBounds(f, N,f_orig) 131 | Adaptively detect from set of initial bounds. Returns lowest minima within a 132 | neighborhood of given bounds 133 | Input: 134 | f - signal to detect maxima and minima from (generally 135 | pre-processed magnitude spectrum) 136 | init_bounds0 - initial bounds to look at detection 137 | f_orig - (Optional) If given, detects minima from this instead of f 138 | Output: 139 | bounds - resulting detected bounds in index domain 140 | Author: Basile Hurat, Jerome Gilles""" 141 | def ewt_adaptiveBounds(f, init_bounds0, f_orig=[]): 142 | if len(f_orig) != 0: 143 | f = np.copy(f_orig) 144 | init_bounds = [] 145 | init_bounds[:] = init_bounds0 146 | init_bounds.insert(0, 0) 147 | init_bounds.append(len(f)) 148 | bounds = np.zeros(len(init_bounds) - 1) 149 | for i in range(0,len(init_bounds) - 1): 150 | neighb_low = round(init_bounds[i + 1] - round(abs(init_bounds[i + 1] - init_bounds[i])) / 2) 151 | neighb_high = round(init_bounds[i + 1] + round(abs(init_bounds[i + 1] - init_bounds[i])) / 2) 152 | bounds[i] = np.argmin(f[neighb_low:neighb_high + 1]) 153 | return np.unique(bounds) 154 | 155 | """ 156 | ewt_GSSDetect(f, params,sym) 157 | Detects boundaries using scale-space. 158 | Input: 159 | f - signal to detect boundaries between 160 | params - parameters for EWT (see utilities). Notably, the adaptive 161 | threshold from params.typeDetect 162 | sym - parameter whether or not the signal is symmetric. If true, 163 | returns bounds less than middle index 164 | Output: 165 | bounds - resulting detected bounds in index domain 166 | Author: Basile Hurat, Jerome Gilles""" 167 | def ewt_GSSDetect(f, params, sym): 168 | #Apply gaussian scale-space 169 | plane = GSS(f) 170 | #Get persistence (lengths) and indices of minima 171 | [lengths, indices] = lengthScaleCurve(plane) 172 | if sym == 1: 173 | lengths = lengths[indices < len(f) / 2 - 1] #Halve the spectrum 174 | indices= indices[indices < len(f) / 2 - 1] #Halve the spectrum 175 | #apply chosen thresholding method 176 | if params.typeDetect.lower() == 'otsu': 177 | thresh = otsu(lengths) 178 | bounds = indices[lengths >= thresh] 179 | 180 | elif params.typeDetect.lower() == 'mean': 181 | thresh = np.ceil(np.mean(lengths)) 182 | bounds = indices[lengths >= thresh] 183 | 184 | elif params.typeDetect.lower() == 'empiricallaw': 185 | thresh = empiricalLaw(lengths) 186 | bounds = indices[lengths >= thresh] 187 | 188 | elif params.typeDetect.lower() == 'halfnormal': 189 | thresh = halfNormal(lengths) 190 | bounds = indices[lengths >= thresh] 191 | 192 | elif params.typeDetect.lower() == 'kmeans': 193 | clusters = ewtkmeans(lengths, 1000) 194 | upper_cluster = clusters[lengths == max(lengths)][0] 195 | bounds = indices[clusters == upper_cluster] 196 | 197 | return bounds 198 | 199 | 200 | """ 201 | GSS(f) 202 | performs discrete 1D scale-space of signal and tracks minima through 203 | scale-space 204 | Input: 205 | f - input signal 206 | Output: 207 | plane - 2D plot of minima paths through scale-space representation of f 208 | Author: Basile Hurat, Jerome Gilles""" 209 | def GSS(f): 210 | t = 0.5 211 | n = 3 212 | num_iter = 1 * np.max([np.ceil(len(f) / n), 3]) 213 | #First, define scale-space kernel (discrete Gaussian kernel) 214 | ker = np.exp(-t) * iv(np.arange(-n, n + 1), t) 215 | ker = ker/np.sum(ker) 216 | 217 | #Initialize place to store result of each layer GSS 218 | plane = np.zeros([len(f), num_iter.astype(int) + 1]) 219 | plane[:, 0] = localmin(f) 220 | 221 | #Iterate through scalespace and store minima at each scale 222 | for i in range(1, num_iter.astype(int) + 1): 223 | f = np.pad(f, n, 'reflect') 224 | f = np.convolve(f, ker, 'same') 225 | f = f[n:-n] 226 | plane[:, i] = localmin(f) 227 | if np.sum(plane[:, i]) <= 2: 228 | break 229 | return plane 230 | 231 | """ 232 | lengthScaleCurve(plane) 233 | Given the 2D plot of minima paths in scale-space representation, this function 234 | extracts the persistence of each minima, as well as their starting position in 235 | signal 236 | Input: 237 | plane - 2D plot of minima paths through scale-space representation 238 | Output: 239 | lengths - persistence of each minimum 240 | indices - position of each minimum 241 | Author: Basile Hurat, Jerome Gilles""" 242 | def lengthScaleCurve(plane): 243 | [w,num_iter] = plane.shape 244 | num_curves = np.sum(plane[:, 0]) 245 | lengths = np.ones(num_curves.astype(int)) 246 | indices = np.zeros(num_curves.astype(int)) 247 | current_curve = 0 248 | 249 | for i in range(0, w): 250 | if plane[i, 0] == 1: 251 | indices[current_curve] = i 252 | i0 = i 253 | height = 2 254 | stop = 0 255 | while stop == 0: 256 | flag = 0 257 | for p in range(-1, 2): 258 | if (i + p < 0) or (i + p >= w): 259 | continue 260 | #If minimum at next iteration of scale-space, increment length 261 | #height, minimum location 262 | if plane[i + p, height] == 1: 263 | lengths[current_curve] += 1 264 | height += 1 265 | i0 += p 266 | flag = 1 267 | #Stop if pas number of iterations 268 | if height >= num_iter: 269 | stop = 1 270 | break 271 | #Stop if no minimum found 272 | if flag == 0: 273 | stop = 1 274 | #Go to next curve/minimum after done 275 | current_curve += 1 276 | 277 | return [lengths, indices] 278 | 279 | 280 | """ 281 | localmin(f): 282 | Givan an array f, returns a boolean array that represents positions of local 283 | minima - Note, handles minima plateaus by assigning all points on plateau as 284 | minima 285 | Input: 286 | f - an array of numbers 287 | Output: 288 | minima - boolean array of same length as f, which represents positions of 289 | local minima in f 290 | Author: Basile Hurat, Jerome Gilles""" 291 | def localmin(f): 292 | w = len(f) 293 | minima = np.zeros(w) 294 | for i in range(0, w): 295 | minima[i] = 1 296 | right = 1 297 | while 1: 298 | if i - right >= 0: 299 | if f[i - right] < f[i]: 300 | minima[i] = 0 301 | break 302 | elif f[i - right] == f[i]: 303 | right += 1 304 | else: 305 | break 306 | else: 307 | break 308 | if minima[i] == 1: 309 | left = 1 310 | while 1: 311 | if i + left < w: 312 | if f[i + left] < f[i]: 313 | minima[i] = 0 314 | break 315 | elif f[i + left] == f[i]: 316 | left += 1 317 | else: 318 | break 319 | else: 320 | break 321 | i = 0 322 | while i < w: 323 | if minima[i] == 1: 324 | j = i 325 | flat_count = 1 326 | flag = 0 327 | while (j + 1 < w) and (minima[j + 1] == 1): 328 | minima[j] = 0 329 | flat_count += 1 330 | j += 1 331 | flag = 1 332 | 333 | if flag == 1: 334 | minima[j - np.floor(flat_count/2).astype(int)] = 1 335 | minima[j] = 0 336 | i = j 337 | i += 1 338 | minima = removePlateaus(minima) 339 | minima[0] = 0 340 | minima[-1] = 0 341 | return minima 342 | 343 | def removePlateaus(x): 344 | w = len(x); i = 0 345 | flag = 0 346 | while i < w: 347 | if x[i] == 1: 348 | plateau = 1 349 | while 1: 350 | if i + plateau < w and x[i + plateau] == 1: 351 | plateau += 1 352 | print(f'{i}, plateau = {plateau}') 353 | else: 354 | flag = plateau > 1 355 | break 356 | if flag: 357 | x[i:i + plateau] = 0 358 | x[i + plateau // 2] = 1 359 | i = i + plateau 360 | else: 361 | i += 1 362 | return x 363 | 364 | """ 365 | otsu(lengths) 366 | 2-class classification method which minimizes the inter-class variance of the 367 | class probability and the respective class averages 368 | Input: 369 | lengths - array to be thresholded or classified 370 | Output: 371 | thresh - detected threshold that separates the two classes 372 | Author: Basile Hurat, Jerome Gilles""" 373 | def otsu(lengths): 374 | hist_max = np.max(lengths); 375 | histogram = np.histogram(lengths, hist_max.astype(int))[0] 376 | hist_normalized = histogram / np.sum(histogram) #normalize 377 | Q = hist_normalized.cumsum() 378 | 379 | bins = np.arange(hist_max) 380 | fn_min = np.inf 381 | thresh = -1 382 | 383 | for i in range(1, hist_max.astype(int)): 384 | p1, p2 = np.hsplit(hist_normalized, [i]) 385 | q1, q2 = Q[i], Q[hist_max.astype(int) - 1] - Q[i] 386 | if q1 < 1.e-6 or q2 < 1.e-6: 387 | continue 388 | b1, b2 = np.hsplit(bins, [i]) #weights 389 | 390 | #Means and variances 391 | m1 = np.sum(p1 * b1) / q1 392 | m2 = np.sum(p2 * b2) / q2 393 | v1 = np.sum((b1 - m1) ** 2 * p1) / q1 394 | v2 = np.sum((b2 - m2) ** 2 * p2) / q2 395 | 396 | #calculates the minimization function 397 | fn = v1 * q1 + v2 * q2 398 | if fn < fn_min: 399 | fn_min = fn 400 | thresh = i 401 | return thresh 402 | 403 | """ 404 | empiricalLaw(lengths) 405 | 2-class classification method which classifies by considering lengths which are 406 | epsilon meaningful for an empirical law. 407 | Input: 408 | lengths - array to be thresholded or classified 409 | Output: 410 | meaningful - boolean array of where meaningful lengths are 411 | Author: Basile Hurat, Jerome Gilles""" 412 | def empiricalLaw(lengths): 413 | hist_max = np.max(lengths); 414 | histogram = np.histogram(lengths, hist_max.astype(int))[0] 415 | hist_normalized = histogram / np.sum(histogram) #normalize 416 | Q = hist_normalized.cumsum() 417 | meaningful = np.where(Q > (1 - 1 / len(lengths)))[0][0] + 1 418 | return meaningful 419 | 420 | """ 421 | halfNormal(lengths) 422 | 2-class classification method which classifies by considering lengths which are 423 | epsilon-meaningful for a half-normal law fitted to the data. 424 | Input: 425 | lengths - array to be thresholded or classified 426 | Output: 427 | thresh - detected threshold that separates the two classes 428 | Author: Basile Hurat, Jerome Gilles""" 429 | def halfNormal(lengths): 430 | sigma=np.sqrt(np.pi) * np.mean(lengths) 431 | thresh = sigma * erfinv(erf(np.max(lengths) / sigma) - 1 / len(lengths)) 432 | return thresh 433 | 434 | """ 435 | ewtkmeans(lengths) 436 | 1D k-means clustering function for 2 class classification 437 | Input: 438 | lengths - array to be clustered or classified 439 | Output: 440 | closest - label array that gives final classification 441 | Author: Basile Hurat, Jerome Gilles""" 442 | def ewtkmeans(lengths,maxIter): 443 | k = 2 444 | centroids = np.zeros(k) 445 | distances = np.inf * np.ones([len(lengths), k]) 446 | closest = -np.ones([len(lengths), 2]) 447 | closest[:, 0] = distances[:, 0] 448 | breaker = 0 449 | for i in range(0, k): 450 | centroids[i] = np.random.uniform(1, np.max(lengths)) 451 | while breaker < maxIter: 452 | prev_closest = closest[:, 1] 453 | for i in range(0, k): 454 | distances[:, i] = np.abs(lengths - centroids[i]) 455 | closest[distances[:, i] < closest[:,0], 1] = i 456 | closest[distances[:, i] < closest[:,0], 0] = distances[distances[:, i] < closest[:, 0], i] 457 | if np.all(closest[:, 1] == prev_closest): 458 | break 459 | for i in range(0, i): 460 | centroids[i] = np.mean(lengths[closest[:, 1] == i]) 461 | if breaker == maxIter - 1: 462 | print('k-means did not converge') 463 | breaker += 1 464 | return closest[:, 1] 465 | -------------------------------------------------------------------------------- /ewt/ewt1d.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | from ewt.boundaries import * 3 | 4 | 5 | """ 6 | ewt1d(f,params) 7 | Performs the 1D empirical wavelet transform 8 | Input: 9 | f - 1D signal 10 | params - parameters for EWT (see utilities) 11 | Output: 12 | ewt - empirical wavelet coefficients 13 | mfb - empirical wavelet filter bank 14 | bounds - bounds detected on Fourier spectrum 15 | Author: Basile Hurat, Jerome Gilles""" 16 | 17 | def ewt1d(f, params): 18 | ff = np.fft.fft(f) 19 | real = all(np.isreal(f)) #Check if function is real 20 | #performs boundary detection 21 | 22 | bounds = ewt_boundariesDetect(np.abs(ff), params, real) 23 | if real: 24 | bounds = bounds * np.pi / (np.round(len(ff) / 2)) 25 | else: 26 | bounds = bounds * 2 * np.pi / len(ff) 27 | 28 | 29 | #From bounds, construct filter bank 30 | mfb = ewt_LP_Filterbank(bounds, len(ff), real) 31 | 32 | #Filter to get empirical wavelet coefficients 33 | ewt = [] 34 | for i in range(0, len(mfb)): 35 | if real: 36 | ewt.append(np.real(np.fft.ifft(np.conj(mfb[i]) * ff))) 37 | else: 38 | ewt.append(np.fft.ifft(np.conj(mfb[i]) * ff)) 39 | return [ewt, mfb, bounds] 40 | 41 | """ 42 | iewt1d(f,params) 43 | Performs the inverse 1D empirical wavelet transform 44 | Input: 45 | ewt - empirical wavelet coefficients 46 | mfb - empirical wavelet filter bank 47 | Output: 48 | rec - reconstruction of signal which generated empirical wavelet 49 | coefficients and empirical wavelet filter bank 50 | Author: Basile Hurat, Jerome Gilles""" 51 | 52 | def iewt1d(ewt, mfb): 53 | real = all(np.isreal(ewt[0])) 54 | if real: 55 | rec = np.zeros(len(ewt[0])) 56 | for i in range(0, len(ewt)): 57 | rec += np.real(np.fft.ifft(np.fft.fft(ewt[i]) * mfb[i])) 58 | else: 59 | rec = np.zeros(len(ewt[0])) * 0j 60 | for i in range(0, len(ewt)): 61 | rec += np.fft.ifft(np.fft.fft(ewt[i]) * mfb[i]) 62 | return rec 63 | 64 | """ 65 | ewt_LP_Filterbank(bounds,N) 66 | Construct empirical wavelet filterbank based on a set of boundaries in the 67 | Fourier spectrum 68 | Input: 69 | bounds - detected bounds in the Fourier spectrum 70 | N - desired size of filters (usually size of original signal) 71 | real - flag for if original signal is real or complex 72 | Output: 73 | mfb - resulting empirical wavelet filter bank 74 | Author: Basile Hurat, Jerome Gilles""" 75 | def ewt_LP_Filterbank(bounds, N, real): 76 | #Calculate Gamma 77 | gamma = 1 78 | for i in range(0, len(bounds) - 1): 79 | r = (bounds[i + 1] - bounds[i]) / (bounds[i + 1] + bounds[i]) 80 | if r < gamma and r > 1e-16: 81 | gamma = r 82 | if real: 83 | r = (np.pi - bounds[-1]) / (np.pi + bounds[-1]) 84 | else: 85 | r = (2 * np.pi - bounds[-1])/(2 * np.pi + bounds[-1]) 86 | if r < gamma: 87 | gamma = r 88 | gamma *= (1 - 1 / N) #ensures strict inequality 89 | if real == 0: 90 | num_bounds = len(bounds) 91 | i = 0 92 | while i < num_bounds: # if difference between bound and pi less than.. 93 | if num_bounds == 1: 94 | break 95 | if abs(bounds[i] - np.pi) < gamma: #gamma, remove 96 | bounds = np.delete(bounds, i) 97 | num_bounds -= 1 98 | else: 99 | i += 1 100 | 101 | aw = np.arange(0, 2 * np.pi - 1 / N, 2 * np.pi / N) 102 | if real == 1: 103 | aw[N // 2:] -= 2 * np.pi 104 | aw = np.abs(aw) 105 | filterbank = [] 106 | filterbank.append(ewt_LP_Scaling(bounds[0], aw, gamma, N)) 107 | for i in range(1, len(bounds)): 108 | filterbank.append(ewt_LP_Wavelet(bounds[i - 1],bounds[i], aw, gamma, N)) 109 | filterbank.append(ewt_LP_Wavelet(bounds[-1], np.pi, aw, gamma, N)) 110 | else: 111 | filterbank = [] 112 | filterbank.append(ewt_LP_Scaling_Complex(bounds[0], bounds[-1], aw, gamma, N)) 113 | for i in range(0, len(bounds) - 1): 114 | if ((bounds[i] <= np.pi) and (bounds[i + 1] > np.pi)): 115 | filterbank.append(ewt_LP_Wavelet_ComplexLow(bounds[i], aw, gamma, N)) 116 | filterbank.append(ewt_LP_Wavelet_ComplexHigh(bounds[i + 1], aw, gamma, N)) 117 | else: 118 | filterbank.append(ewt_LP_Wavelet(bounds[i], bounds[i + 1], aw, gamma, N)) 119 | return filterbank 120 | 121 | """ 122 | ewt_LP_Scaling(w1,aw,gamma,N) 123 | Constructs empirical scaling function, which is the low-pass filter for EWT 124 | filterbank 125 | Input: 126 | w1 - first bound, which delineates the end of low-pass filter 127 | aw - reference vector which goes from 0 to 2pi 128 | gamma - gamma value which guarantees tight frame 129 | Output: 130 | yms - resulting empirical scaling function 131 | Author: Basile Hurat, Jerome Gilles""" 132 | def ewt_LP_Scaling(w1, aw, gamma, N): 133 | mbn = (1 - gamma) * w1 #beginning of transition 134 | pbn = (1 + gamma) * w1 #end of transition 135 | an = 1 / (2 * gamma * w1) #scaling in beta function 136 | 137 | yms = 1.0 * (aw <= mbn) #if less than lower bound, equals 1 138 | yms += (aw > mbn) * (aw <= pbn) \ 139 | * np.cos(np.pi * ewt_beta(an * (aw - mbn)) / 2) #Transition area 140 | return yms 141 | 142 | """ 143 | ewt_LP_Wavelet(wn, wm, aw, gamma, N) 144 | Constructs empirical wavelet, which is a band-pass filter for EWT filterbank 145 | Input: 146 | wn - lower bound, which delineates the beginning of band-pass filter 147 | wm - higher bound, which delineates the end of band-pass filter 148 | aw - reference vector which goes from 0 to 2pi 149 | gamma - gamma value which guarantees tight frame 150 | Output: 151 | ymw - resulting empirical wavelet 152 | Author: Basile Hurat, Jerome Gilles""" 153 | def ewt_LP_Wavelet(wn, wm, aw, gamma, N): 154 | if wn > np.pi: #If greater than pi, subtract 2pi, otherwise dont 155 | a = 1 156 | else: 157 | a = 0 158 | 159 | mbn = wn - gamma * abs(wn - a * 2 * np.pi) #beginning of first transition 160 | pbn = wn + gamma * abs(wn - a * 2 * np.pi) #end of first transition 161 | an = 1 / (2 * gamma * abs(wn - a * 2 * np.pi)) #scaling in first transition's beta function 162 | 163 | if wm > np.pi: #If greater than pi, subtract 2pi, otherwise dont 164 | a=1 165 | else: 166 | a=0 167 | 168 | mbm = wm - gamma * abs(wm - a * 2 * np.pi) #beginning of second transition 169 | pbm = wm + gamma * abs(wm - a * 2 * np.pi) #end of second transition 170 | am = 1 / (2 * gamma * abs(wm - a * 2 * np.pi)) #scaling in second transition's beta function 171 | 172 | ymw = 1.0 * (aw > mbn) * (aw< pbm) #equals 1 between transition areas 173 | case = (aw > mbn) * (aw < pbn) 174 | ymw[case] *= np.sin(np.pi * ewt_beta(an * (aw[case] - mbn)) / 2) #1st transition area 175 | if wm < np.pi: 176 | case = (aw > mbm) * (aw < pbm) 177 | ymw[case] *= np.cos(np.pi * ewt_beta(am * (aw[case] - mbm)) / 2) #2nd transition area 178 | return ymw 179 | 180 | """ 181 | ewt_LP_Scaling_Complex(wn,wm,aw,gamma,N) 182 | Constructs assymmetrical scaling filter for complex wavelet with support 183 | [wn,wm] 184 | Input: 185 | wn - higher bound, which delineates the end of band-pass filter 186 | wm - higher bound, which delineates the end of band-pass filter 187 | aw - reference vector which goes from 0 to 2pi 188 | gamma - gamma value which guarantees tight frame 189 | Output: 190 | ymw - resulting empirical wavelet 191 | Author: Basile Hurat, Jerome Gilles""" 192 | def ewt_LP_Scaling_Complex(wn, wm, aw, gamma, N): 193 | if wn == wm: 194 | return np.ones(N) 195 | 196 | if wn > np.pi: #If greater than pi, subtract 2pi, otherwise dont 197 | a = 1 198 | else: 199 | a = 0 200 | 201 | mbn = wn - gamma * abs(wn - a * 2 * np.pi) #beginning of first transition 202 | pbn = wn + gamma * abs(wn - a * 2 * np.pi) #end of first transition 203 | an = 1 / (2 * gamma * abs(wn - a * 2 * np.pi)) #scaling in first transition's beta function 204 | 205 | if wm > np.pi: #If greater than pi, subtract 2pi, otherwise dont 206 | a=1 207 | else: 208 | a=0 209 | 210 | mbm = wm - gamma * abs(wm - a * 2 * np.pi) #beginning of second transition 211 | pbm = wm + gamma * abs(wm - a * 2 * np.pi) #end of second transition 212 | am = 1 / (2 * gamma * abs(wm - a * 2 * np.pi)) #scaling in second transition's beta function 213 | 214 | ymw = 1.0 * (aw <= mbn) + 1.0 * (aw >= pbm) #equals 1 between transition areas 215 | case = (aw >= mbn) * (aw <= pbn) 216 | ymw[case] = np.cos(np.pi * ewt_beta(an * (aw[case] - mbn)) / 2) #1nd transition area 217 | case = (aw >= mbm) * (aw <= pbm) 218 | ymw[case] = np.sin(np.pi * ewt_beta(am * (aw[case] - mbm)) / 2) #2st transition area 219 | return ymw 220 | 221 | """ 222 | ewt_LP_Wavelet_ComplexLow(wn,aw,gamma,N) 223 | Constructs upper transition for complex wavelet with support [wn,pi] 224 | Input: 225 | wn - lower bound, which delineates the beginning of band-pass filter 226 | aw - reference vector which goes from 0 to 2pi 227 | gamma - gamma value which guarantees tight frame 228 | Output: 229 | ymw - resulting empirical wavelet 230 | Author: Basile Hurat, Jerome Gilles""" 231 | def ewt_LP_Wavelet_ComplexLow(wn, aw, gamma, N): 232 | if wn > np.pi: #If greater than pi, subtract 2pi, otherwise dont 233 | a = 1 234 | else: 235 | a = 0 236 | 237 | an = 1 / (2 * gamma * abs(wn - a * 2 * np.pi)) #scaling in lowertransition's beta function 238 | mbn = wn - gamma * abs(wn - a * 2 * np.pi) #beginning of lower transition 239 | pbn = wn + gamma * abs(wn - a * 2 * np.pi) #end of lower transition 240 | 241 | ymw = 1.0 * (aw >= pbn) * (aw <= np.pi) 242 | case = (aw >= mbn) * (aw<=pbn) 243 | ymw[case] = np.sin(np.pi * ewt_beta(an * (aw[case] - mbn)) / 2) #lower transition area 244 | return ymw 245 | 246 | """ 247 | ewt_LP_Wavelet_ComplexHigh(wn,aw,gamma,N) 248 | Constructs upper transition for complex wavelet with support [pi,wn] 249 | Input: 250 | wn - higher bound, which delineates the end of band-pass filter 251 | aw - reference vector which goes from 0 to 2pi 252 | gamma - gamma value which guarantees tight frame 253 | Output: 254 | ymw - resulting empirical wavelet 255 | Author: Basile Hurat, Jerome Gilles""" 256 | def ewt_LP_Wavelet_ComplexHigh(wn, aw, gamma, N): 257 | if wn > np.pi: #If greater than pi, subtract 2pi, otherwise dont 258 | a = 1 259 | else: 260 | a = 0 261 | 262 | an = 1 / (2 * gamma * abs(wn - a * 2 * np.pi)) #scaling in upper transition's beta function 263 | mbn = wn - gamma * abs(wn - a * 2 * np.pi) #beginning of upper transition 264 | pbn = wn + gamma * abs(wn - a * 2 * np.pi) #end of upper transition 265 | 266 | ymw = 1.0 * (aw > np.pi) * (aw <= mbn) 267 | case = (aw >= mbn) * (aw <= pbn) 268 | ymw[case] = np.cos(np.pi * ewt_beta(an * (aw[case] - mbn)) / 2) #upper transition area 269 | return ymw 270 | 271 | """ 272 | ewt_beta(x) 273 | Beta function that is used in empirical wavelet and empirical scaling function 274 | construction 275 | Input: 276 | x - vector x as an input 277 | Output: 278 | bm - beta function applied to vector 279 | Author: Basile Hurat, Jerome Gilles""" 280 | def ewt_beta(x): 281 | bm = (x >= 0) * (x <= 1) \ 282 | * (x ** 4 * (35 - 84 * x + 70 * x ** 2 - 20 *x **3)) 283 | bm += (x > 1) 284 | return bm 285 | -------------------------------------------------------------------------------- /ewt/utilities.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | from scipy.signal import gaussian 3 | import matplotlib.pyplot as plt 4 | from matplotlib import patches 5 | from ewt.boundaries import * 6 | from math import ceil 7 | 8 | 9 | """ 10 | ewt_params() 11 | Parameter struct for empirical wavelet. Also sets defaults for each value. 12 | Parameters are as follow: 13 | log - whether or not you take log of spectrum 14 | removeTrends - Removes trends before finding boundaries 15 | spectrumRegularize - regularizes spectrum before finding boundaries 16 | lengthFilter - length for filters used in spectrum regularization 17 | sigmaFilter - sigma for gaussian filter used in spectrum regularization 18 | typeDetect - type of thresholding method for scale-space detection 19 | option - Curvelet option for 2D Curvelet EWT 20 | N 21 | detect 22 | init_bounds 23 | Author: Basile Hurat, Jerome Gilles""" 24 | class ewt_params: 25 | def __init__(self, log=0, removeTrends='none', degree=2, spectrumRegularize='none', lengthFilter=7, sigmaFilter=2, N=10, detect='scalespace', typeDetect='otsu', option=1, init_bounds=[4, 8, 13, 30], t=1, n=6, niter=4, includeCenter=0, edges=0, real=1, tau=0.1): 26 | self.log = log 27 | self.removeTrends = removeTrends 28 | self.degree = degree 29 | self.spectrumRegularize = spectrumRegularize 30 | self.lengthFilter = lengthFilter 31 | self.sigmaFilter = sigmaFilter 32 | self.N = N 33 | self.detect = detect 34 | self.typeDetect = typeDetect 35 | self.option = option 36 | self.init_bounds = init_bounds 37 | self.t = t 38 | self.n = n 39 | self.niter = niter 40 | self.includeCenter = includeCenter 41 | self.edges = edges 42 | self.real = real 43 | self.tau = tau 44 | 45 | """ 46 | spectrumRegularize(f,params) 47 | pre-processes spectrum before boundary detection by regularizing spectrum 48 | Options include: 49 | gaussian - gaussian smoothing: lengthFilter defines size of filter and 50 | sigmaFilter defines std dev of gaussian 51 | average - box filter smoothing: lengthFilter defines size of filter 52 | closing - compute the upper envelope via a morphological closing 53 | operator: lengthFilter defines size of filter 54 | Input: 55 | f - spectrum to regularize 56 | params - parameters for EWT (see utilities) Used for choice of 57 | regularization and details 58 | Output: 59 | f2 - regularized spectrum 60 | Author: Basile Hurat, Jerome Gilles""" 61 | def spectrumRegularize(f, params): 62 | if params.spectrumRegularize.lower() == 'gaussian': #gaussian 63 | f2 = np.pad(f,params.lengthFilter // 2, 'reflect') 64 | Reg_Filter = gaussian(params.lengthFilter, params.sigmaFilter) 65 | Reg_Filter = Reg_Filter / sum(Reg_Filter) 66 | f2 = np.convolve(f2, Reg_Filter, mode='same') 67 | return f2[params.lengthFilter // 2:-params.lengthFilter // 2] 68 | elif params.spectrumRegularize.lower() == 'average': #average 69 | f2 = np.pad(f,params.lengthFilter // 2, 'reflect') 70 | Reg_Filter = np.ones(params.lengthFilter) 71 | Reg_Filter = Reg_Filter / sum(Reg_Filter) 72 | f2 = np.convolve(f2, Reg_Filter, mode='same') 73 | return f2[params.lengthFilter//2:-params.lengthFilter//2] 74 | elif params.spectrumRegularize.lower() == 'closing': #closing 75 | f2 = np.zeros(len(f)) 76 | for i in range(0, len(f)): 77 | f2[i] = np.min(f[max(0 , i - params.lengthFilter):min(len(f) - 1, i + params.lengthFilter + 1)]) 78 | return f2 79 | 80 | def removeTrends(f, params): 81 | #still needs to be implemented 82 | if params.removeTrends.lower() == ' ': 83 | f = f / np.max(f) 84 | lw = np.log(np.arange(1, len(f) + 1)) 85 | s = -np.sum(lw * np.log(f)) / sum(lw ** 2) 86 | f2 = f - np.arange(1, len(f) + 1) ** (-s) 87 | 88 | elif params.removeTrends.lower() == 'poly': 89 | p = np.polyfit(np.arange(0, len(f)), f,params.degree) 90 | f2 = f - np.polyval(p, np.arange(0, len(f))) 91 | 92 | elif params.removeTrends.lower() == 'morpho': 93 | locmax = localmin(-f) 94 | sizeEl = len(f) 95 | n = 1 96 | nplus = 1 97 | while n < len(f): 98 | if locmax[n] == 1: 99 | if sizeEl > (n - nplus): 100 | sizeEl = n - nplus 101 | nplus = n 102 | n += 1 103 | n += 1 104 | f2 = f - (ewt_closing(f,sizeEl + 1) + ewt_opening(f,sizeEl + 1)) / 2 105 | 106 | elif params.removeTrends.lower() == 'tophat': 107 | locmax = localmin(-f) 108 | sizeEl = len(f) 109 | n = 1 110 | nplus = 1 111 | while n < len(f): 112 | if locmax[n] == 1: 113 | if sizeEl > (n - nplus): 114 | sizeEl = n - nplus 115 | nplus = n 116 | n += 1 117 | n += 1 118 | f2 = f - ewt_opening(f, sizeEl + 1) 119 | 120 | elif params.removeTrends.lower() == 'opening': 121 | locmax = localmin(-f) 122 | sizeEl = len(f) 123 | n = 1 124 | nplus = 1 125 | while n < len(f): 126 | if locmax[n] == 1: 127 | if sizeEl > (n - nplus): 128 | sizeEl = n - nplus 129 | nplus = n 130 | n += 1 131 | n += 1 132 | f2 = ewt_opening(f, sizeEl + 1) 133 | return f2 134 | 135 | def ewt_opening(f, sizeEl): 136 | ope = ewt_dilation(ewt_erosion(f, sizeEl), sizeEl) 137 | return ope 138 | 139 | def ewt_closing(f, sizeEl): 140 | clo = ewt_erosion(ewt_dilation(f, sizeEl), sizeEl) 141 | return clo 142 | 143 | def ewt_erosion(f, sizeEl): 144 | s = np.copy(f) 145 | for x in range(0, len(f)): 146 | s[x] = np.min(f[max(0, x - sizeEl):min(len(f), x + sizeEl)]) 147 | return s 148 | 149 | def ewt_dilation(f, sizeEl): 150 | s = np.copy(f) 151 | for x in range(0, len(f)): 152 | s[x] = np.max(f[max(0, x - sizeEl):min(len(f), x + sizeEl)]) 153 | return s 154 | 155 | """ 156 | showewt1dBoundaries(f,bounds) 157 | Plots boundaries of 1D EWT on top of magnitude spectrum of the signal 158 | Input: 159 | f - original signal 160 | bounds - detected bounds 161 | Author: Basile Hurat, Jerome Gilles""" 162 | def showewt1dBoundaries(f, bounds): 163 | ff = np.abs(np.fft.fft(f)) 164 | h = np.max(ff) 165 | plt.figure() 166 | plt.suptitle('1D EWT Boundaries') 167 | plt.plot( 168 | np.arange(0, np.pi + 1 / (len(ff) / 2), 169 | np.pi / (len(ff) / 2)), ff[0:len(ff) // 2 + 1] 170 | ) 171 | for i in range(0, len(bounds)): 172 | plt.plot([bounds[i], bounds[i]], [0, h - 1], 'r--') 173 | plt.show() 174 | 175 | """ 176 | showTensorBoundaries(f,bounds_row,bounds_col) 177 | Plots boundaries of 2D tensor EWT on top of magnitude spectrum of image 178 | Input: 179 | f - original image 180 | bounds_row - detected bounds on rows 181 | bounds_col - detected bounds on columns 182 | Author: Basile Hurat, Jerome Gilles""" 183 | def show2DTensorBoundaries(f, bounds_row, bounds_col): 184 | [h, w] = f.shape 185 | ff = np.fft.fft2(f) 186 | fig = plt.figure() 187 | plt.suptitle('2D EWT Tensor Boundaries') 188 | ax = fig.add_subplot(1, 1, 1) 189 | plt.imshow(np.log(np.abs(np.fft.fftshift(ff))), cmap='gray') 190 | 191 | #draw horizontal lines 192 | for i in range(0, len(bounds_row)): 193 | scaled_bound = bounds_row[i] * h / np.pi / 2 194 | plt.plot([h // 2 + scaled_bound, h // 2 + scaled_bound],[0, w - 1], 'r-') 195 | plt.plot([h // 2 - scaled_bound, h // 2 - scaled_bound],[0, w - 1], 'r-') 196 | #draw vertical lines 197 | for i in range(0, len(bounds_col)): 198 | scaled_bound = bounds_col[i] * w / np.pi / 2 199 | plt.plot([0, h - 1], [w // 2 + scaled_bound, w // 2 + scaled_bound], 'r-') 200 | plt.plot([0, h - 1], [w // 2 - scaled_bound, w // 2 - scaled_bound], 'r-') 201 | plt.show() 202 | 203 | def show2DLPBoundaries(f, bounds_scales): 204 | [h, w] = f.shape 205 | ff = np.fft.fft2(f) 206 | fig = plt.figure() 207 | plt.suptitle('2D EWT Littlewood-Paley or Ridgelet Boundaries') 208 | ax = fig.add_subplot(1, 1, 1) 209 | plt.imshow(np.log(np.abs(np.fft.fftshift(ff))), cmap='gray') 210 | 211 | #plot scale bounds 212 | for i in range(0, len(bounds_scales)): 213 | rad = bounds_scales[i] * h / np.pi / 2 214 | circ = plt.Circle((h // 2 + 1, w // 2 + 1), rad, color='r', fill=0) 215 | ax.add_patch(circ) 216 | plt.show() 217 | 218 | """ 219 | showCurveletBoundaries(f,option,bounds_scales,bounds_angles) 220 | Plots boundaries of 2D curvelet EWT on top of magnitude spectrum of image 221 | Input: 222 | f - original image 223 | option - option for Curvelet 224 | bounds_row - detected bounds on scales 225 | bounds_col - detected bounds on angles 226 | Author: Basile Hurat, Jerome Gilles""" 227 | def show2DCurveletBoundaries(f, option, bounds_scales, bounds_angles): 228 | [h, w] = f.shape 229 | ff = np.fft.fft2(f) 230 | fig = plt.figure() 231 | plt.suptitle('2D EWT Curvelet Boundaries') 232 | ax = fig.add_subplot(1, 1, 1) 233 | plt.imshow(np.log(np.abs(np.fft.fftshift(ff))), cmap='gray') 234 | if option == 1: #scales and angles detected separately 235 | #first plot scale bounds 236 | for i in range(0, len(bounds_scales)): 237 | rad = bounds_scales[i] * h / np.pi / 2 238 | circ = plt.Circle((h // 2 + 1,w // 2 + 1), rad, color='r', fill=0) 239 | ax.add_patch(circ) 240 | #Then plot the angle bounds 241 | for i in range(0, len(bounds_angles)): 242 | if abs(bounds_angles[i]) < np.pi / 4: 243 | #Do first half of line 244 | x0 = (1 + bounds_scales[0] * np.cos(bounds_angles[i]) / np.pi) * w // 2 245 | y0 = (1 + bounds_scales[0] * np.sin(bounds_angles[i]) / np.pi) * h // 2 246 | x1 = w - 1 247 | y1 = (h + w * np.tan(bounds_angles[i])) // 2 248 | plt.plot([x0, x1], [y0, y1], 'r-') 249 | #Do second half of line 250 | x2 = (1 - bounds_scales[0] * np.cos(bounds_angles[i]) / np.pi) * w // 2 251 | y2 = (1 - bounds_scales[0] * np.sin(bounds_angles[i]) / np.pi) * h // 2 252 | x3 = 0 253 | y3 = (h - w * np.tan(bounds_angles[i])) // 2 254 | plt.plot([x2, x3], [y2, y3], 'r-') 255 | else: 256 | x0 = (1 - bounds_scales[0] * np.cos(bounds_angles[i]) / np.pi) * w // 2 257 | y0 = (1 - bounds_scales[0] * np.sin(bounds_angles[i]) / np.pi) * h // 2 258 | x1 = (w + h / np.tan(bounds_angles[i])) // 2 259 | y1 = h - 1 260 | plt.plot([x0, x1], [y0, y1], 'r-') 261 | x2 = (1 + bounds_scales[0] * np.cos(bounds_angles[i]) / np.pi) * w // 2 262 | y2 = (1 + bounds_scales[0] * np.sin(bounds_angles[i]) / np.pi) * h // 2 263 | x3 = (h - w / np.tan(bounds_angles[i])) // 2 264 | y3 = 0 265 | plt.plot([x2, x3], [y2, y3], 'r-') 266 | 267 | elif option == 2: #scales detected first and angles detected per scale 268 | #first plot scale bounds 269 | for i in range(0, len(bounds_scales)): 270 | rad = bounds_scales[i] * h / np.pi / 2 271 | circ = plt.Circle((h // 2 + 1, w // 2 + 1),rad, color='r', fill=0) 272 | ax.add_patch(circ) 273 | #Then plot the angle bounds for each scale 274 | for i in range(0, len(bounds_scales) - 1): 275 | for j in range(0, len(bounds_angles[i])): 276 | if abs(bounds_angles[i][j]) < np.pi / 4: 277 | #Do first half of line 278 | x0 = (1 + bounds_scales[i] * np.cos(bounds_angles[i][j]) / np.pi) * (w // 2 + 1) 279 | y0 = (1 + bounds_scales[i] * np.sin(bounds_angles[i][j]) / np.pi) * (h // 2 + 1) 280 | x1 = (1 + bounds_scales[i + 1] * np.cos(bounds_angles[i][j]) / np.pi) * (w // 2 + 1) 281 | y1 = (1 + bounds_scales[i + 1] * np.sin(bounds_angles[i][j]) / np.pi) * (h // 2 + 1) 282 | plt.plot([x0, x1], [y0, y1], 'r-') 283 | #Do second half of line 284 | x2 = (1 - bounds_scales[i] * np.cos(bounds_angles[i][j]) / np.pi) *(w // 2 + 1) 285 | y2 = (1 - bounds_scales[i] * np.sin(bounds_angles[i][j]) / np.pi) *(h // 2 + 1) 286 | x3 = (1 - bounds_scales[i+1] * np.cos(bounds_angles[i][j]) / np.pi) *(w // 2 + 1) 287 | y3 = (1 - bounds_scales[i+1] * np.sin(bounds_angles[i][j]) / np.pi) *(h // 2 + 1) 288 | plt.plot([x2, x3], [y2, y3], 'r-') 289 | else: 290 | x0 = (1 - bounds_scales[i] * np.cos(bounds_angles[i][j]) / np.pi) * (w // 2 + 1) 291 | y0 = (1 - bounds_scales[i] * np.sin(bounds_angles[i][j]) / np.pi) * (h // 2 + 1) 292 | x1 = (1 - bounds_scales[i + 1] * np.cos(bounds_angles[i][j]) / np.pi) * (w // 2 + 1) 293 | y1 = (1 - bounds_scales[i + 1] * np.sin(bounds_angles[i][j]) / np.pi) * (h // 2 + 1) 294 | plt.plot([x0, x1], [y0, y1], 'r-') 295 | 296 | x2 = (1 + bounds_scales[i] * np.cos(bounds_angles[i][j]) / np.pi) * (w // 2 + 1) 297 | y2 = (1 + bounds_scales[i] * np.sin(bounds_angles[i][j]) / np.pi) * (h // 2 + 1) 298 | x3 = (1 + bounds_scales[i + 1] * np.cos(bounds_angles[i][j]) / np.pi) * (w // 2 + 1) 299 | y3 = (1 + bounds_scales[i + 1] * np.sin(bounds_angles[i][j]) / np.pi) * (h // 2 + 1) 300 | plt.plot([x2, x3], [y2, y3], 'r-') 301 | #Then take care of last scale 302 | for i in range(0, len(bounds_angles[-1])): 303 | if abs(bounds_angles[-1][i]) < np.pi / 4: 304 | #Do first half of line 305 | x0 = (1 + bounds_scales[-1] * np.cos(bounds_angles[-1][i]) / np.pi) * (w // 2 + 1) 306 | y0 = (1 + bounds_scales[-1] * np.sin(bounds_angles[-1][i]) / np.pi) * (h // 2 + 1) 307 | x1 = w - 1 308 | y1 = (h + w * np.tan(bounds_angles[-1][i])) // 2 309 | plt.plot([x0, x1], [y0, y1], 'r-') 310 | #Do second half of line 311 | x2 = (1 - bounds_scales[-1] * np.cos(bounds_angles[-1][i]) / np.pi) * (w // 2 + 1) 312 | y2 = (1 - bounds_scales[-1] * np.sin(bounds_angles[-1][i]) / np.pi) * (h // 2 + 1) 313 | x3 = 0 314 | y3 = (h - w * np.tan(bounds_angles[-1][i])) // 2 315 | plt.plot([x2, x3], [y2, y3], 'r-') 316 | else: 317 | x0 = (1 - bounds_scales[-1] * np.cos(bounds_angles[-1][i]) / np.pi) * (w // 2 + 1) 318 | y0 = (1 - bounds_scales[-1] * np.sin(bounds_angles[-1][i]) / np.pi) * (h // 2 + 1) 319 | x1 = (w + h / np.tan(bounds_angles[-1][i])) // 2 320 | y1 = h - 1 321 | plt.plot([x0, x1], [y0, y1], 'r-') 322 | x2 = (1 + bounds_scales[-1] * np.cos(bounds_angles[-1][i]) / np.pi) * (w // 2 + 1) 323 | y2 = (1 + bounds_scales[-1] * np.sin(bounds_angles[-1][i]) / np.pi) * (h // 2 + 1) 324 | x3 = (h - w / np.tan(bounds_angles[-1][i])) // 2 325 | y3 = 0 326 | plt.plot([x2, x3], [y2, y3], 'r-') 327 | 328 | elif option == 3: #angles detected first and scales detected per angle 329 | #plot first scale 330 | rad = bounds_scales[0][0] * h / np.pi / 2 331 | circ = plt.Circle((h // 2, w // 2), rad, color='r', fill=0) 332 | ax.add_patch(circ) 333 | 334 | #Plot angle bounds first 335 | for i in range(0, len(bounds_angles)): 336 | if abs(bounds_angles[i]) < np.pi / 4: 337 | #Do first half of line 338 | x0 = (1 + bounds_scales[0][0] * np.cos(bounds_angles[i]) / np.pi) * w // 2 339 | y0 = (1 + bounds_scales[0][0] * np.sin(bounds_angles[i]) / np.pi) * h // 2 340 | x1 = w - 1 341 | y1 = (h + w * np.tan(bounds_angles[i])) // 2 342 | plt.plot([x0, x1], [y0, y1], 'r-') 343 | #Do second half of line 344 | x2 = (1 - bounds_scales[0][0] * np.cos(bounds_angles[i]) / np.pi) * w // 2 345 | y2 = (1 - bounds_scales[0][0] * np.sin(bounds_angles[i]) / np.pi) * h // 2 346 | x3 = 0 347 | y3 = (h - w * np.tan(bounds_angles[i])) // 2 348 | plt.plot([x2, x3], [y2, y3], 'r-') 349 | else: 350 | x0 = (1 - bounds_scales[0][0] * np.cos(bounds_angles[i]) / np.pi) * w // 2 351 | y0 = (1 - bounds_scales[0][0] * np.sin(bounds_angles[i]) / np.pi) * h // 2 352 | x1 = (w + h / np.tan(bounds_angles[i])) // 2 353 | y1 = h - 1 354 | plt.plot([x0, x1], [y0, y1], 'r-') 355 | x2 = (1 + bounds_scales[0][0] * np.cos(bounds_angles[i]) / np.pi) * w // 2 356 | y2 = (1 + bounds_scales[0][0] * np.sin(bounds_angles[i]) / np.pi) * h // 2 357 | x3 = (h - w / np.tan(bounds_angles[i])) // 2 358 | y3 = 0 359 | plt.plot([x2, x3], [y2, y3], 'r-') 360 | #For each angular sector, plot arc for scale 361 | for i in range(0, len(bounds_angles) - 1): 362 | for j in range(0, len(bounds_scales[i + 1])): 363 | rad = bounds_scales[i + 1][j] * h / np.pi 364 | arc = patches.Arc( 365 | (h // 2, w // 2), 366 | rad, 367 | rad, 368 | 0, 369 | bounds_angles[i] * 180 / np.pi, 370 | bounds_angles[i + 1] * 180 / np.pi, 371 | color='r', 372 | Fill=0 373 | ) 374 | ax.add_patch(arc) 375 | arc2 = patches.Arc( 376 | (h // 2, w // 2), 377 | rad, 378 | rad, 379 | 0, 380 | 180 + bounds_angles[i] * 180 / np.pi, 381 | 180 + bounds_angles[i + 1] * 180 / np.pi, 382 | color='r', 383 | Fill=0 384 | ) 385 | ax.add_patch(arc2) 386 | #Plot arcs for last angular sector 387 | for i in range(0, len(bounds_scales[-1])): 388 | rad = bounds_scales[-1][i] * h / np.pi 389 | arc = patches.Arc( 390 | (h // 2, w // 2), 391 | rad, 392 | rad, 393 | 0, 394 | bounds_angles[-1] * 180 / np.pi, 395 | 180 + bounds_angles[1] * 180 / np.pi, 396 | color='r', 397 | Fill=0 398 | ) 399 | ax.add_patch(arc) 400 | arc2 = patches.Arc( 401 | (h // 2, w // 2), 402 | rad, 403 | rad, 404 | 0, 405 | 180 + bounds_angles[-1] * 180 / np.pi, 406 | 360 + bounds_angles[1] * 180 / np.pi, 407 | color='r', 408 | Fill=0 409 | ) 410 | ax.add_patch(arc2) 411 | else: 412 | return -1 413 | plt.show() 414 | 415 | """ 416 | showEWT1DCoefficients(ewtc) 417 | Plots coefficients of the 1D ewt 418 | Input: 419 | ewtc - 1D empirical wavelet coefficients gotten from the ewt1d function 420 | Author: Basile Hurat, Jerome Gilles""" 421 | def showEWT1DCoefficients(ewtc): 422 | if len(ewtc) < 10: 423 | fig = plt.figure() 424 | fig.suptitle("1D EWT coefficients") 425 | for i in range(0, len(ewtc)): 426 | plt.subplot(len(ewtc), 1, i + 1) 427 | plt.plot(ewtc[i]) 428 | plt.show() 429 | else: 430 | for i in range(0, len(ewtc)): 431 | if i % 10 == 0: 432 | plt.figure() 433 | plt.subplot(10, 1, i % 10 + 1) 434 | plt.plot(ewtc[i]) 435 | plt.show() 436 | 437 | """ 438 | showEWT2DCoefficients(ewtc) 439 | Plots coefficients of the 2D empirical wavelet transform 440 | Input: 441 | ewtc - 2D empirical wavelet coefficients 442 | ewt_type - the transform used to get the empirical wavelet coefficent 443 | option - (optional) the curvelet option, should you need to specify 444 | Author: Basile Hurat, Jerome Gilles""" 445 | def showEWT2DCoefficients(ewtc, ewt_type, option=1): 446 | if ewt_type.lower() == 'tensor': 447 | m = len(ewtc) 448 | n = len(ewtc[0]) 449 | fig = plt.figure() 450 | fig.suptitle("Tensor EWT coefficients") 451 | for i in range(0, m): 452 | for j in range(0, n): 453 | plt.subplot(m, n, i * m + j + 1) 454 | plt.xticks([]) 455 | plt.yticks([]) 456 | plt.grid(False) 457 | plt.imshow(ewtc[i][j], cmap='gray') 458 | plt.xlabel(f'i = {i}, j = {j}') 459 | plt.show() 460 | if ewt_type.lower() == 'lp': 461 | m = len(ewtc) 462 | fig = plt.figure() 463 | fig.suptitle("Littlewood-Paley EWT coefficients") 464 | for i in range(0, m): 465 | plt.subplot(np.ceil(np.sqrt(m)), np.ceil(np.sqrt(m)), i + 1) 466 | plt.xticks([]) 467 | plt.yticks([]) 468 | plt.grid(False) 469 | plt.imshow(ewtc[i], cmap='gray') 470 | plt.xlabel(f'i = {i}') 471 | plt.show() 472 | if ewt_type.lower() == 'ridgelet': 473 | m = len(ewtc) 474 | fig = plt.figure() 475 | fig.suptitle("Ridgelet EWT coefficients") 476 | for i in range(0, m): 477 | plt.subplot(np.ceil(np.sqrt(m)), np.ceil(np.sqrt(m)), i + 1) 478 | plt.xticks([]) 479 | plt.yticks([]) 480 | plt.grid(False) 481 | plt.imshow(ewtc[i], cmap='gray') 482 | plt.xlabel(f'i = {i}') 483 | plt.show() 484 | if ewt_type.lower() == 'curvelet': 485 | fig = plt.figure() 486 | fig.suptitle("Curvelet EWT coefficient for scale 0") 487 | plt.imshow(ewtc[0][0], cmap='gray') 488 | if option < 3: 489 | for i in range(1, len(ewtc)): 490 | fig = plt.figure() 491 | fig.suptitle(f'Curvelet EWT coefficients for scale {i}') 492 | m = len(ewtc[i]) 493 | for j in range(0, m): 494 | plt.subplot(ceil(np.sqrt(m)), ceil(np.sqrt(m)), j + 1) 495 | plt.xticks([]) 496 | plt.yticks([]) 497 | plt.grid(False) 498 | plt.imshow(ewtc[i][j], cmap='gray') 499 | plt.xlabel(f'Angle {j}') 500 | plt.show() 501 | else: 502 | for i in range(1, len(ewtc)): 503 | fig = plt.figure() 504 | fig.suptitle(f'Curvelet EWT coefficients for Angle {i}') 505 | m = len(ewtc[i]) 506 | for j in range(0, m): 507 | plt.subplot(np.ceil(np.sqrt(m)), np.ceil(np.sqrt(m)), j + 1) 508 | plt.xticks([]) 509 | plt.yticks([]) 510 | plt.grid(False) 511 | plt.imshow(ewtc[i][j], cmap='gray') 512 | plt.xlabel(f'Scale {j}') 513 | plt.show() -------------------------------------------------------------------------------- /ewt_testing.py: -------------------------------------------------------------------------------- 1 | import unittest 2 | from ewt import ewt2d 3 | from ewt import boundaries 4 | from ewt import ewt1d 5 | import ewt 6 | import numpy as np 7 | 8 | 9 | class EWTBlackboxTest(unittest.TestCase): 10 | def setUp(self): 11 | self.f = np.genfromtxt('Tests/2d/texture.csv', delimiter=',') 12 | self.f = (self.f - np.min(self.f)) / (np.max(self.f) - np.min(self.f)) 13 | self.params = ewt.utilities.ewt_params() 14 | 15 | def test_ewt1dEven(self): 16 | f = np.genfromtxt('Tests/1d/sig2.csv', delimiter=',') 17 | [ewtc, mfb, bounds] = ewt1d.ewt1d(f, self.params) 18 | recon = ewt1d.iewt1d(ewtc,mfb) 19 | self.assertTrue(np.sum((recon - f) ** 2) < 10 ** (-10)) 20 | 21 | def test_ewt1dOdd(self): 22 | f = np.genfromtxt('Tests/1d/sig2.csv', delimiter=',') 23 | f = f[0:-1] 24 | [ewtc, mfb, bounds] = ewt1d.ewt1d(f, self.params) 25 | recon = ewt1d.iewt1d(ewtc, mfb) 26 | self.assertTrue(np.sum((recon - f) ** 2) < 10 ** (-10)) 27 | 28 | def testewt2dCurvelet1Even(self): 29 | #Tests empirical curvelet transform + reconstruction for even images 30 | [ewtc, mfb, b1, b2] = ewt2d.ewt2dCurvelet(self.f, self.params) 31 | recon = ewt2d.iewt2dCurvelet(ewtc, mfb) 32 | self.assertTrue(np.sum((recon - self.f) ** 2) < 10 ** (-10)) 33 | 34 | def testewt2dCurvelet1Odd(self): 35 | #Tests empirical curvelet transform + reconstruction for odd images 36 | self.f = self.f[0:-1, 0:-1] 37 | [ewtc, mfb, b1, b2] = ewt2d.ewt2dCurvelet(self.f, self.params) 38 | recon = ewt2d.iewt2dCurvelet(ewtc, mfb) 39 | self.assertTrue(np.sum((recon - self.f) ** 2) < 10 ** (-10)) 40 | 41 | def testewt2dCurvelet2Even(self): 42 | #Tests empirical curvelet transform + reconstruction for even images 43 | self.params.option = 2 44 | [ewtc, mfb, b1, b2] = ewt2d.ewt2dCurvelet(self.f, self.params) 45 | recon = ewt2d.iewt2dCurvelet(ewtc, mfb) 46 | self.assertTrue(np.sum((recon - self.f) ** 2) < 10 ** (-10)) 47 | 48 | def testewt2dCurvelet2Odd(self): 49 | #Tests empirical curvelet transform + reconstruction for odd images 50 | self.f = self.f[0:-1, 0:-1] 51 | self.params.option = 2 52 | [ewtc,mfb,b1,b2] = ewt2d.ewt2dCurvelet(self.f, self.params) 53 | recon = ewt2d.iewt2dCurvelet(ewtc, mfb) 54 | self.assertTrue(np.sum((recon - self.f) ** 2) < 10 ** (-10)) 55 | 56 | def testewt2dCurvelet3Even(self): 57 | #Tests empirical curvelet transform + reconstruction for even images 58 | self.params.option = 3 59 | [ewtc, mfb, b1, b2] = ewt2d.ewt2dCurvelet(self.f, self.params) 60 | recon = ewt2d.iewt2dCurvelet(ewtc, mfb) 61 | self.assertTrue(np.sum((recon - self.f) ** 2) < 10 ** (-10)) 62 | 63 | def testewt2dCurvelet3Odd(self): 64 | #Tests empirical curvelet transform + reconstruction for odd images 65 | self.f = self.f[0:-1, 0:-1] 66 | self.params.option = 3 67 | [ewtc, mfb, b1, b2] = ewt2d.ewt2dCurvelet(self.f, self.params) 68 | recon = ewt2d.iewt2dCurvelet(ewtc, mfb) 69 | self.assertTrue(np.sum((recon - self.f) ** 2) < 10 ** (-10)) 70 | 71 | def testewt2dTensorEven(self): 72 | #Tests empirical tensor transform + reconstruction for odd images 73 | [ewtc, mfb1, mfb2, b1, b2] = ewt2d.ewt2dTensor(self.f, self.params) 74 | recon = ewt2d.iewt2dTensor(ewtc, mfb1, mfb2) 75 | self.assertTrue(np.sum((recon - self.f) ** 2) < 10 ** (-10)) 76 | 77 | def testewt2dTensorOdd(self): 78 | #Tests empirical tensor transform + reconstruction for odd images 79 | self.f = self.f[0:-1, 0:-1] 80 | [ewtc, mfb1, mfb2, b1, b2] = ewt2d.ewt2dTensor(self.f, self.params) 81 | recon = ewt2d.iewt2dTensor(ewtc, mfb1, mfb2) 82 | self.assertTrue(np.sum((recon - self.f) ** 2) < 10 ** (-10)) 83 | 84 | def testewt2dLPEven(self): 85 | #Tests empirical LP transform + reconstruction for odd images 86 | [ewtc, mfb, bounds] = ewt2d.ewt2dLP(self.f, self.params) 87 | recon = ewt2d.iewt2dLP(ewtc, mfb) 88 | self.assertTrue(np.sum((recon - self.f) ** 2) < 10 ** (-10)) 89 | 90 | def testewt2dLPOdd(self): 91 | #Tests empirical LP transform + reconstruction for odd images 92 | self.f = self.f[0:-1, 0:-1] 93 | [ewtc, mfb, bounds] = ewt2d.ewt2dLP(self.f, self.params) 94 | recon = ewt2d.iewt2dLP(ewtc, mfb) 95 | self.assertTrue(np.sum((recon - self.f) ** 2) < 10 ** (-10)) 96 | 97 | def testewt2dRidgeletEven(self): 98 | #Tests empirical ridgelet transform + reconstruction for odd images 99 | [ewtc, mfb, bounds] = ewt2d.ewt2dRidgelet(self.f, self.params) 100 | recon = ewt2d.iewt2dRidgelet(ewtc, mfb) 101 | self.assertTrue(np.sum((recon - self.f) ** 2) < 10 ** (-3)) 102 | 103 | def testewt2dRidgeletOdd(self): 104 | #Tests empirical ridgelet transform + reconstruction for odd images 105 | self.f = self.f[0:-1, 0:-1] 106 | [ewtc, mfb, bounds] = ewt2d.ewt2dRidgelet(self.f, self.params) 107 | recon = ewt2d.iewt2dRidgelet(ewtc, mfb, 1) 108 | self.assertTrue(np.sum((recon - self.f) ** 2) < 10 ** (-3)) 109 | 110 | def testppfft(self): 111 | #Tests pseudo-polar fourier transform 112 | ppff = ewt2d.ppfft(self.f) 113 | recon = ewt2d.ippfft(ppff) 114 | self.assertTrue(np.sum((recon - self.f) ** 2) < 10 ** (-10)) 115 | 116 | class EWT_UnitTest_Filters(unittest.TestCase): 117 | def test_ewt2d_curveletWavelet1(self): 118 | #Tests curvelet filterbank construction in typical example 119 | h = 127 120 | w = 127 121 | option = 1 122 | bounds_scales = [.5, .9, 1.3, 3] #between 0 and pi 123 | bounds_angles = [-2, -.5, .3] #between -3pi/4(-2.356+ and pi/4 (.7854) 124 | mfb = ewt2d.ewt2d_curveletFilterbank(bounds_scales, bounds_angles, h, w, option) 125 | tmp = np.zeros([h, w]) 126 | for i in range(0, len(mfb)): 127 | for j in range(0, len(mfb[i])): 128 | tmp += mfb[i][j] ** 2 129 | self.assertAlmostEqual(np.max(tmp), 1.0) 130 | self.assertAlmostEqual(np.min(tmp), 1.0) 131 | 132 | def test_ewt2d_curveletWavelet2(self): 133 | #Tests curvelet filterbank construction if given single angular bound 134 | h = 127 135 | w = 127 136 | option = 1 137 | bounds_scales = [.5, .9, 1.3, 3] #between 0 and pi 138 | bounds_angles = [.3] #between -3pi/4(-2.356+ and pi/4 (.7854) 139 | mfb = ewt2d.ewt2d_curveletFilterbank(bounds_scales, bounds_angles, h, w, option) 140 | tmp = np.zeros([h, w]) 141 | for i in range(0, len(mfb)): 142 | for j in range(0, len(mfb[i])): 143 | tmp += mfb[i][j] ** 2 144 | self.assertAlmostEqual(np.max(tmp), 1.0) 145 | self.assertAlmostEqual(np.min(tmp), 1.0) 146 | 147 | def test_ewt2d_curveletWavelet3(self): 148 | #Tests curvelet filterbank construction if given two scales that are very close 149 | h = 127 150 | w = 127 151 | option = 1 152 | epsilon = 0.0000000001 153 | bounds_scales = [.5, .9, 1.3, 1.3 + epsilon, 3] #between 0 and pi 154 | bounds_angles = [-2, -.5, .3] #between -3pi/4(-2.356+ and pi/4 (.7854) 155 | mfb = ewt2d.ewt2d_curveletFilterbank(bounds_scales, bounds_angles, h, w, option) 156 | tmp = np.zeros([h, w]) 157 | for i in range(0, len(mfb)): 158 | for j in range(0, len(mfb[i])): 159 | tmp += mfb[i][j] ** 2 160 | self.assertAlmostEqual(np.max(tmp), 1.0) 161 | self.assertAlmostEqual(np.min(tmp), 1.0) 162 | 163 | def test_ewt2d_curveletWavelet4(self): 164 | #Tests curvelet filterbank construction if given two angles that are very close 165 | h = 127 166 | w = 127 167 | option = 1 168 | bounds_scales = [.5, .9, 1.3, 3] #between 0 and pi 169 | epsilon = 0.0000000001 170 | bounds_angles = [-2, -.5 + epsilon, .3] #between -3pi/4(-2.356+ and pi/4 (.7854) 171 | mfb = ewt2d.ewt2d_curveletFilterbank(bounds_scales, bounds_angles, h, w, option) 172 | tmp = np.zeros([h, w]) 173 | for i in range(0, len(mfb)): 174 | for j in range(0, len(mfb[i])): 175 | tmp += mfb[i][j] ** 2 176 | self.assertAlmostEqual(np.max(tmp), 1.0) 177 | self.assertAlmostEqual(np.min(tmp), 1.0) 178 | 179 | def test_ewt2d_curveletWavelet5(self): 180 | #Tests curvelet filterbank construction if given no scales 181 | h = 127 182 | w = 127 183 | option = 1 184 | bounds_scales = [] #between 0 and pi 185 | bounds_angles = [-2, -.5, .3] #between -3pi/4(-2.356+ and pi/4 (.7854) 186 | mfb = ewt2d.ewt2d_curveletFilterbank(bounds_scales, bounds_angles, h, w, option) 187 | tmp = np.zeros([h, w]) 188 | for i in range(0, len(mfb)): 189 | for j in range(0, len(mfb[i])): 190 | tmp += mfb[i][j] ** 2 191 | self.assertAlmostEqual(np.max(tmp), 1.0) 192 | self.assertAlmostEqual(np.min(tmp), 1.0) 193 | 194 | def test_ewt2d_curveletWavelet6(self): 195 | #Tests curvelet filterbank construction if given no angles 196 | h = 127 197 | w = 127 198 | option = 1 199 | bounds_scales = [.5, .9, 1.3, 3] #between 0 and pi 200 | bounds_angles = [] #between -3pi/4(-2.356+ and pi/4 (.7854) 201 | mfb = ewt2d.ewt2d_curveletFilterbank(bounds_scales, bounds_angles, h, w, option) 202 | tmp = np.zeros([h, w]) 203 | for i in range(0, len(mfb)): 204 | for j in range(0, len(mfb[i])): 205 | tmp += mfb[i][j] ** 2 206 | self.assertAlmostEqual(np.max(tmp), 1.0) 207 | self.assertAlmostEqual(np.min(tmp), 1.0) 208 | 209 | def test_ewt2d_curveletWavelet7(self): 210 | #Tests curvelet filterbank construction if given scale out of bounds (below) 211 | h = 127 212 | w = 127 213 | option = 1 214 | bounds_scales = [-.5, .9, 1.3, 3] #between 0 and pi 215 | bounds_angles = [-2, -.5, .3] #between -3pi/4(-2.356+ and pi/4 (.7854) 216 | mfb = ewt2d.ewt2d_curveletFilterbank(bounds_scales, bounds_angles, h, w, option) 217 | tmp = np.zeros([h, w]) 218 | for i in range(0, len(mfb)): 219 | for j in range(0, len(mfb[i])): 220 | tmp += mfb[i][j] ** 2 221 | self.assertAlmostEqual(np.max(tmp), 1.0) 222 | self.assertAlmostEqual(np.min(tmp), 1.0) 223 | 224 | def test_ewt2d_curveletWavelet8(self): 225 | #Tests curvelet filterbank construction if given scale out of bounds (above) 226 | h = 127 227 | w = 127 228 | option = 1 229 | bounds_scales = [.5, .9, 1.3, 3.4] #between 0 and pi 230 | bounds_angles = [-2, -.5, .3] #between -3pi/4(-2.356+ and pi/4 (.7854) 231 | mfb = ewt2d.ewt2d_curveletFilterbank(bounds_scales, bounds_angles, h, w, option) 232 | tmp = np.zeros([h, w]) 233 | for i in range(0, len(mfb)): 234 | for j in range(0, len(mfb[i])): 235 | tmp += mfb[i][j] ** 2 236 | self.assertAlmostEqual(np.max(tmp), 1.0) 237 | self.assertAlmostEqual(np.min(tmp), 1.0) 238 | 239 | def test_ewt2d_curveletWavelet9(self): 240 | #Tests curvelet filterbank construction if given angle out of bounds (below) 241 | h = 127 242 | w = 127 243 | option = 1 244 | bounds_scales = [.5, .9, 1.3, 3] #between 0 and pi 245 | bounds_angles = [-3, -2, -.5, .3] #between -3pi/4(-2.356+ and pi/4 (.7854) 246 | mfb = ewt2d.ewt2d_curveletFilterbank(bounds_scales, bounds_angles, h, w, option) 247 | tmp = np.zeros([h, w]) 248 | for i in range(0, len(mfb)): 249 | for j in range(0, len(mfb[i])): 250 | tmp += mfb[i][j] ** 2 251 | self.assertAlmostEqual(np.max(tmp), 1.0) 252 | self.assertAlmostEqual(np.min(tmp), 1.0) 253 | 254 | def test_ewt2d_curveletWavelet10(self): 255 | #Tests curvelet filterbank construction if given angle out of bounds (above) 256 | h = 127 257 | w = 127 258 | option = 1 259 | bounds_scales = [.5, .9, 1.3, 3] #between 0 and pi 260 | bounds_angles = [-2, -.5, .3, 1.0] #between -3pi/4(-2.356+ and pi/4 (.7854) 261 | mfb = ewt2d.ewt2d_curveletFilterbank(bounds_scales, bounds_angles, h, w, option) 262 | tmp = np.zeros([h, w]) 263 | for i in range(0, len(mfb)): 264 | for j in range(0, len(mfb[i])): 265 | tmp += mfb[i][j] ** 2 266 | self.assertAlmostEqual(np.max(tmp), 1.0) 267 | self.assertAlmostEqual(np.min(tmp), 1.0) 268 | 269 | def test_ewt2d_LPWavelet1(self): 270 | #Tests LP filterbank construction in normal circumstances 271 | h = 127 272 | w = 127 273 | bounds_scales = [.5, .9, 1.3, 3] #between 0 and pi 274 | mfb = ewt2d.ewt2d_LPFilterbank(bounds_scales, h, w) 275 | tmp = np.zeros([h, w]) 276 | for i in range(0, len(mfb)): 277 | for j in range(0, len(mfb[i])): 278 | tmp += mfb[i][j] ** 2 279 | self.assertAlmostEqual(np.max(tmp), 1.0) 280 | self.assertAlmostEqual(np.min(tmp), 1.0) 281 | 282 | def test_ewt2d_LPWavelet2(self): 283 | #Tests LP filterbank construction if no scales detected 284 | h = 127 285 | w = 127 286 | bounds_scales = [] #between 0 and pi 287 | mfb = ewt2d.ewt2d_LPFilterbank(bounds_scales, h, w) 288 | tmp = np.zeros([h, w]) 289 | for i in range(0, len(mfb)): 290 | for j in range(0, len(mfb[i])): 291 | tmp += mfb[i][j] ** 2 292 | self.assertAlmostEqual(np.max(tmp), 1.0) 293 | self.assertAlmostEqual(np.min(tmp), 1.0) 294 | 295 | class EWT_UnitTest_Boundaries(unittest.TestCase): 296 | def test_boundaries_localmin1(self): 297 | #basic test for localmin 298 | inp = np.array([1, 0, 1]) 299 | out = np.array([0, 1, 0], 'bool') 300 | self.assertTrue(np.all(boundaries.localmin(inp) == out)) 301 | 302 | def test_boundaries_localmin2(self): 303 | #boundary test for localmin 304 | inp = np.array([0, 1, 2, 0, 1, 0]) 305 | out = np.array([0, 0, 0, 1, 0, 0], 'bool') 306 | self.assertTrue(np.all(boundaries.localmin(inp) == out)) 307 | 308 | def test_boundaries_localmin3(self): 309 | #even plateau test for localmin 310 | inp = np.array([2, 1, 0, 0, 1, 2]) 311 | out = np.array([0 ,0, 1, 0, 0, 0], 'bool') 312 | self.assertTrue(np.all(boundaries.localmin(inp) == out)) 313 | 314 | def test_boundaries_localmin4(self): 315 | #odd plateau test for localmin 316 | inp = np.array([2, 1, 0, 0, 0, 1, 2]) 317 | out = np.array([0 ,0, 0, 1, 0, 0, 0], 'bool') 318 | self.assertTrue(np.all(boundaries.localmin(inp) == out)) 319 | 320 | def test_boundaries_localmin5(self): 321 | #boundary even plateau test for localmin 322 | inp = np.array([0, 0, 1, 2, 0, 0]) 323 | out = np.array([0, 1, 0, 0, 1, 0], 'bool') 324 | self.assertTrue(np.all(boundaries.localmin(inp) == out)) 325 | 326 | def test_boundaries_localmin6(self): 327 | #boundary odd plateau test for localmin 328 | inp = np.array([0, 0, 0, 1, 2, 0, 0, 0]) 329 | out = np.array([0 ,1, 0, 0, 0, 0, 1, 0], 'bool') 330 | self.assertTrue(np.all(boundaries.localmin(inp) == out)) 331 | 332 | def test_boundaries_localmin7(self): 333 | #saddle test for localmin 334 | inp = np.array([3, 2, 2, 2, 1, 0, 2]) 335 | out = np.array([0 ,0, 0, 0, 0, 1, 0], 'bool') 336 | self.assertTrue(np.all(boundaries.localmin(inp) == out)) 337 | 338 | def test_boundaries_localmin8(self): 339 | #odd flat test for localmin 340 | inp = np.array([0, 0, 0]) 341 | out = np.array([0, 1, 0], 'bool') 342 | self.assertTrue(np.all(boundaries.localmin(inp) == out)) 343 | 344 | def test_boundaries_localmin9(self): 345 | #even flat test for localmin 346 | inp = np.array([0, 0, 0, 0]) 347 | out = np.array([0 ,1, 0, 0], 'bool') 348 | self.assertTrue(np.all(boundaries.localmin(inp) == out)) 349 | 350 | def test_boundaries_localmin10(self): 351 | #epsilon test for localmin 352 | epsilon = .00000000000000001 353 | inp = np.array([2, 1, 0 - epsilon, 0 + epsilon, 0 - epsilon, 1, 2]) 354 | out = np.array([0 ,0, 1, 0, 1, 0, 0], 'bool') 355 | self.assertTrue(np.all(boundaries.localmin(inp) == out)) 356 | 357 | if __name__ == '__main__': 358 | unittest.main() 359 | -------------------------------------------------------------------------------- /test_EWT1D.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | from scipy.special import iv 3 | import matplotlib.pyplot as plt 4 | from ewt.ewt1d import * 5 | from ewt.utilities import ewt_params 6 | 7 | 8 | """ 9 | Created on Mon Jun 8 15:44:06 2020 10 | Generates the results given by the 1D empirical wavelet transforms, which 11 | are described in the papers 12 | J. Gilles, "Empirical Wavelet Transform", IEEE Trans. on Signal Processing, 13 | 2013 14 | 15 | Feel free to try with your own signals and change parameters. 16 | @author: Basile Hurat 17 | """ 18 | 19 | plt.close('all') 20 | show_orig = 0 #show original signal 21 | show_bounds = 0 #show bounds 22 | show_coefs = 0 #show components 23 | show_recon = 0 #show reconstruction 24 | signal = 'csig1' 25 | 26 | real = 1 27 | if signal.lower() == 'csig1': 28 | fR = np.genfromtxt('Tests/1d/csig1R.csv', delimiter=',') 29 | fI = np.genfromtxt('Tests/1d/csig1I.csv', delimiter=',') 30 | f = fR + fI*1j 31 | real = 0 32 | else: 33 | f = np.genfromtxt('Tests/1d/'+signal+'.csv', delimiter=',') 34 | params = ewt_params() 35 | 36 | #Detect options include: 37 | #Scalespace, locmax, locmaxmin, locmaxminf, adaptive, adaptivreg 38 | params.detect = 'adaptive' 39 | params.typeDetect = 'otsu' 40 | [ewtc, mfb, bounds] = ewt1d(f, params) 41 | 42 | if show_orig == 1: 43 | plt.figure() 44 | plt.suptitle('Original signal') 45 | plt.plot(np.abs(f)) 46 | plt.show() 47 | if show_bounds == 1: 48 | print(f'# of detected bounds: {len(bounds)}') 49 | showewt1dBoundaries(f, bounds) 50 | if show_coefs == 1: 51 | showEWT1DCoefficients(ewtc) 52 | if show_recon == 1: 53 | recon = iewt1d(ewtc,mfb) 54 | plt.figure() 55 | plt.plot(np.abs(recon)) 56 | plt.suptitle('Reconstructed signal') 57 | plt.show() 58 | if real: 59 | print(f'Reconstruction difference: {np.linalg.norm(recon - f)}') 60 | else: 61 | print(f'Reconstruction difference: {np.linalg.norm(recon - f)}') -------------------------------------------------------------------------------- /test_EWT2D.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | from scipy.special import iv 3 | import matplotlib.pyplot as plt 4 | from ewt.ewt2d import * 5 | from ewt.utilities import ewt_params 6 | 7 | 8 | """ 9 | Created on Wed Jun 10 15:09:30 2020 10 | Generates the results given by various 2D empirical wavelet transforms, which 11 | are described in the papers 12 | J. Gilles, "Empirical Wavelet Transform", IEEE Trans. on Signal Processing, 13 | 2013 14 | J. Gilles, G. Tran, S. Osher, "2D Empirical tranforms. Wavelets, Ridgelets and 15 | Curvelets Revisited" submitted at SIAM Journal on Imaging Sciences. 2013 16 | 17 | Feel free to try with your own images and change parameters. 18 | @author: Basile Hurat 19 | """ 20 | 21 | plt.close('all') 22 | 23 | show_orig = 1 #show original image 24 | show_bounds = 0 #show bounds 25 | show_coefs = 0 #show components 26 | show_recon = 1 #show reconstruction 27 | 28 | 29 | params = ewt_params() 30 | 31 | transform = 'curvelet' 32 | params.typeDetect = 'otsu' 33 | f = np.genfromtxt('Tests/2d/texture.csv', delimiter=',') 34 | 35 | #f = (f-np.min(f))/(np.max(f)-np.min(f)) 36 | #f = f[0:-1,0:-1] 37 | 38 | if transform.lower() == 'tensor': 39 | [ewtc, mfb_row, mfb_col, bounds_row, bounds_col] = ewt2dTensor(f, params) 40 | elif transform.lower() == 'lp': 41 | [ewtc, mfb, bounds_scales] = ewt2dLP(f, params) 42 | elif transform.lower() == 'ridgelet': 43 | [ewtc, mfb, bounds_scales] = ewt2dRidgelet(f, params) 44 | elif transform.lower() == 'curvelet': 45 | [ewtc, mfb, bounds_scales, bounds_angles] = ewt2dCurvelet(f, params) 46 | 47 | if show_orig == 1: 48 | plt.imshow(f, cmap = 'gray') 49 | plt.suptitle('Original image') 50 | plt.show() 51 | 52 | if show_bounds == 1: 53 | if transform.lower() == 'tensor': 54 | show2DTensorBoundaries(f, bounds_row, bounds_col) 55 | elif transform.lower() == 'lp': 56 | show2DLPBoundaries(f, bounds_scales) 57 | elif transform.lower() == 'ridgelet': 58 | show2DLPBoundaries(f, bounds_scales) 59 | elif transform.lower() == 'curvelet': 60 | show2DCurveletBoundaries(f, params.option, bounds_scales, bounds_angles) 61 | 62 | if show_coefs == 1: 63 | showEWT2DCoefficients(ewtc, transform) 64 | 65 | if show_recon == 1: 66 | if transform.lower() == 'tensor': 67 | recon = iewt2dTensor(ewtc, mfb_row, mfb_col) 68 | elif transform.lower() == 'lp': 69 | recon = iewt2dLP(ewtc, mfb) 70 | elif transform.lower() == 'ridgelet': 71 | recon = iewt2dRidgelet(ewtc, mfb) 72 | elif transform.lower() == 'curvelet': 73 | recon = iewt2dCurvelet(ewtc, mfb) 74 | print(f'recon difference: {np.sum((recon - f) ** 2)}') 75 | plt.figure() 76 | plt.suptitle('Reconstructed image') 77 | plt.imshow(recon, cmap = 'gray') 78 | plt.show() 79 | --------------------------------------------------------------------------------