-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathsmooth.c
executable file
·422 lines (406 loc) · 29.9 KB
/
smooth.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
/***************************************************************************
smooth.c - Smoothing with Savitsky-Golay filter
-------------------
begin : Sat Mar 9 09:51:02 GMT 2002
copyright : (C) 2002 by Gwyndaf Evans
email : gwyndaf@gwyndafevans.co.uk
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "chooch.h"
int smooth(int np, double *f, double *g, int nl, int nr, int m, int ld) {
//
extern int verbose;
int i, nc, index;
float fpad[MAXSIZE];
float cn[MAXCOEF];
// Required by savgol
float cdata[]={
0.00, -0.00, 1.00, -0.00, 0.00, // 2 2 0 4
0.08, -0.67, 0.00, 0.67, -0.08, // 2 2 1 4
-0.04, 0.67, -1.25, 0.67, -0.04, // 2 2 2 4
-0.08, 0.17, 0.00, -0.17, 0.08, // 2 2 3 4
0.02, -0.13, 0.32, 0.57, 0.32, -0.13, 0.02, // 3 3 0 4
0.09, -0.27, -0.23, 0.00, 0.23, 0.27, -0.09, // 3 3 1 4
-0.05, 0.25, -0.07, -0.27, -0.07, 0.25, -0.05, // 3 3 2 4
-0.03, 0.03, 0.03, 0.00, -0.03, -0.03, 0.03, // 3 3 3 4
0.03, -0.13, 0.07, 0.31, 0.42, 0.31, 0.07, -0.13, 0.03, // 4 4 0 4
0.07, -0.12, -0.16, -0.11, 0.00, 0.11, 0.16, 0.12, -0.07, // 4 4 1 4
-0.04, 0.11, 0.04, -0.06, -0.11, -0.06, 0.04, 0.11, -0.04, // 4 4 2 4
-0.01, 0.01, 0.01, 0.01, 0.00, -0.01, -0.01, -0.01, 0.01, // 4 4 3 4
0.04, -0.10, -0.02, 0.14, 0.28, 0.33, 0.28, 0.14, -0.02, -0.10, 0.04, // nl=5 nr=5 ld=0 m=4
0.06, -0.06, -0.10, -0.10, -0.06, 0.00, 0.06, 0.10, 0.10, 0.06, -0.06, // nl=5 nr=5 ld=1 m=4
-0.03, 0.05, 0.04, 0.00, -0.04, -0.06, -0.04, 0.00, 0.04, 0.05, -0.03, // nl=5 nr=5 ld=2 m=4
-0.01, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.00, 0.01, // nl=5 nr=5 ld=3 m=4
0.05, -0.08, -0.06, 0.05, 0.16, 0.25, 0.28, 0.25, 0.16, 0.05, -0.06, -0.08, 0.05, // nl=6 nr=6 ld=0 m=4
0.05, -0.03, -0.07, -0.07, -0.06, -0.03, 0.00, 0.03, 0.06, 0.07, 0.07, 0.03, -0.05, // nl=6 nr=6 ld=1 m=4
-0.02, 0.03, 0.03, 0.01, -0.01, -0.03, -0.03, -0.03, -0.01, 0.01, 0.03, 0.03, -0.02, // nl=6 nr=6 ld=2 m=4
-0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, // nl=6 nr=6 ld=3 m=4
0.05, -0.06, -0.06, -0.00, 0.08, 0.16, 0.22, 0.24, 0.22, 0.16, 0.08, -0.00, -0.06,
-0.06, 0.05, // nl=7 nr=7 ld=0 m=4
0.04, -0.01, -0.04, -0.05, -0.05, -0.04, -0.02, 0.00, 0.02, 0.04, 0.05, 0.05, 0.04,
0.01, -0.04, // nl=7 nr=7 ld=1 m=4
-0.01, 0.01, 0.02, 0.01, 0.00, -0.01, -0.02, -0.02, -0.02, -0.01, 0.00, 0.01, 0.02,
0.01, -0.01, // nl=7 nr=7 ld=2 m=4
-0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
0.00, 0.00, // nl=7 nr=7 ld=3 m=4
0.05, -0.05, -0.06, -0.03, 0.03, 0.10, 0.16, 0.20, 0.21, 0.20, 0.16, 0.10, 0.03,
-0.03, -0.06, -0.05, 0.05, // nl=8 nr=8 ld=0 m=4
0.03, -0.00, -0.03, -0.04, -0.04, -0.04, -0.03, -0.02, 0.00, 0.02, 0.03, 0.04, 0.04,
0.04, 0.03, 0.00, -0.03, // nl=8 nr=8 ld=1 m=4
-0.01, 0.01, 0.01, 0.01, 0.01, -0.00, -0.01, -0.01, -0.01, -0.01, -0.01, -0.00, 0.01,
0.01, 0.01, 0.01, -0.01, // nl=8 nr=8 ld=2 m=4
-0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, 0.00, 0.00, // nl=8 nr=8 ld=3 m=4
0.05, -0.03, -0.06, -0.04, 0.00, 0.05, 0.11, 0.15, 0.18, 0.19, 0.18, 0.15, 0.11,
0.05, 0.00, -0.04, -0.06, -0.03, 0.05, // nl=9 nr=9 ld=0 m=4
0.03, 0.00, -0.02, -0.03, -0.03, -0.03, -0.03, -0.02, -0.01, 0.00, 0.01, 0.02, 0.03,
0.03, 0.03, 0.03, 0.02, -0.00, -0.03, // nl=9 nr=9 ld=1 m=4
-0.01, 0.00, 0.01, 0.01, 0.01, 0.00, -0.00, -0.01, -0.01, -0.01, -0.01, -0.01, -0.00,
0.00, 0.01, 0.01, 0.01, 0.00, -0.01, // nl=9 nr=9 ld=2 m=4
-0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, 0.00, 0.00, // nl=9 nr=9 ld=3 m=4
0.04, -0.02, -0.05, -0.04, -0.02, 0.02, 0.07, 0.11, 0.14, 0.16, 0.17, 0.16, 0.14,
0.11, 0.07, 0.02, -0.02, -0.04, -0.05, -0.02, 0.04, // nl=10 nr=10 ld=0 m=4
0.02, 0.00, -0.01, -0.02, -0.03, -0.03, -0.03, -0.02, -0.02, -0.01, -0.00, 0.01, 0.02,
0.02, 0.03, 0.03, 0.03, 0.02, 0.01, -0.00, -0.02, // nl=10 nr=10 ld=1 m=4
-0.01, 0.00, 0.01, 0.01, 0.01, 0.00, 0.00, -0.00, -0.01, -0.01, -0.01, -0.01, -0.01,
-0.00, 0.00, 0.00, 0.01, 0.01, 0.01, 0.00, -0.01, // nl=10 nr=10 ld=2 m=4
-0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, // nl=10 nr=10 ld=3 m=4
0.04, -0.02, -0.04, -0.04, -0.03, 0.00, 0.04, 0.08, 0.11, 0.13, 0.15, 0.15, 0.15,
0.13, 0.11, 0.08, 0.04, 0.00, -0.03, -0.04, -0.04, -0.02, 0.04, // nl=11 nr=11 ld=0 m=4
0.02, 0.00, -0.01, -0.02, -0.02, -0.02, -0.02, -0.02, -0.02, -0.01, -0.01, 0.00, 0.01,
0.01, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.01, -0.00, -0.02, // nl=11 nr=11 ld=1 m=4
-0.01, 0.00, 0.00, 0.01, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.01, -0.01, -0.01,
-0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.01, 0.00, 0.00, -0.01, // nl=11 nr=11 ld=2 m=4
-0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, // nl=11 nr=11 ld=3 m=4
0.04, -0.01, -0.04, -0.04, -0.03, -0.01, 0.02, 0.05, 0.08, 0.11, 0.12, 0.14, 0.14,
0.14, 0.12, 0.11, 0.08, 0.05, 0.02, -0.01, -0.03, -0.04, -0.04, -0.01, 0.04, // nl=12 nr=12 ld=0 m=4
0.02, 0.00, -0.00, -0.01, -0.02, -0.02, -0.02, -0.02, -0.02, -0.01, -0.01, -0.00, 0.00,
0.00, 0.01, 0.01, 0.02, 0.02, 0.02, 0.02, 0.02, 0.01, 0.00, -0.00, -0.02, // nl=12 nr=12 ld=1 m=4
-0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00, // nl=12 nr=12 ld=2 m=4
-0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, // nl=12 nr=12 ld=3 m=4
0.04, -0.01, -0.03, -0.04, -0.03, -0.02, 0.01, 0.03, 0.06, 0.08, 0.10, 0.12, 0.13,
0.13, 0.13, 0.12, 0.10, 0.08, 0.06, 0.03, 0.01, -0.02, -0.03, -0.04, -0.03, -0.01,
0.04, // nl=13 nr=13 ld=0 m=4
0.02, 0.01, -0.00, -0.01, -0.01, -0.02, -0.02, -0.02, -0.02, -0.01, -0.01, -0.01, -0.00,
0.00, 0.00, 0.01, 0.01, 0.01, 0.02, 0.02, 0.02, 0.02, 0.01, 0.01, 0.00, -0.01,
-0.02, // nl=13 nr=13 ld=1 m=4
-0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00,
-0.00, // nl=13 nr=13 ld=2 m=4
-0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00,
0.00, // nl=13 nr=13 ld=3 m=4
0.04, -0.00, -0.03, -0.04, -0.03, -0.02, -0.00, 0.02, 0.04, 0.06, 0.08, 0.10, 0.11,
0.12, 0.12, 0.12, 0.11, 0.10, 0.08, 0.06, 0.04, 0.02, -0.00, -0.02, -0.03, -0.04,
-0.03, -0.00, 0.04, // nl=14 nr=14 ld=0 m=4
0.01, 0.01, -0.00, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01,
-0.00, -0.00, 0.00, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01,
0.00, -0.01, -0.01, // nl=14 nr=14 ld=1 m=4
-0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, -0.00, -0.00, // nl=14 nr=14 ld=2 m=4
-0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
0.00, 0.00, 0.00, // nl=14 nr=14 ld=3 m=4
0.04, -0.00, -0.02, -0.03, -0.03, -0.03, -0.01, 0.01, 0.02, 0.04, 0.06, 0.08, 0.09,
0.11, 0.11, 0.11, 0.11, 0.11, 0.09, 0.08, 0.06, 0.04, 0.02, 0.01, -0.01, -0.03,
-0.03, -0.03, -0.02, -0.00, 0.04, // nl=15 nr=15 ld=0 m=4
0.01, 0.01, -0.00, -0.00, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01,
-0.00, -0.00, 0.00, 0.00, 0.00, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01,
0.01, 0.00, 0.00, -0.01, -0.01, // nl=15 nr=15 ld=1 m=4
-0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, -0.00, -0.00, // nl=15 nr=15 ld=2 m=4
-0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, 0.00, 0.00, 0.00, 0.00, // nl=15 nr=15 ld=3 m=4
0.04, 0.00, -0.02, -0.03, -0.03, -0.03, -0.02, -0.00, 0.01, 0.03, 0.05, 0.06, 0.08,
0.09, 0.10, 0.11, 0.11, 0.11, 0.10, 0.09, 0.08, 0.06, 0.05, 0.03, 0.01, -0.00,
-0.02, -0.03, -0.03, -0.03, -0.02, 0.00, 0.04, // nl=16 nr=16 ld=0 m=4
0.01, 0.01, 0.00, -0.00, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01,
-0.01, -0.00, -0.00, -0.00, 0.00, 0.00, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01,
0.01, 0.01, 0.01, 0.00, -0.00, -0.01, -0.01, // nl=16 nr=16 ld=1 m=4
-0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00, // nl=16 nr=16 ld=2 m=4
-0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, // nl=16 nr=16 ld=3 m=4
0.04, 0.00, -0.02, -0.03, -0.03, -0.03, -0.02, -0.01, 0.01, 0.02, 0.04, 0.05, 0.07,
0.08, 0.09, 0.09, 0.10, 0.10, 0.10, 0.09, 0.09, 0.08, 0.07, 0.05, 0.04, 0.02,
0.01, -0.01, -0.02, -0.03, -0.03, -0.03, -0.02, 0.00, 0.04, // nl=17 nr=17 ld=0 m=4
0.01, 0.00, 0.00, -0.00, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01,
-0.01, -0.01, -0.00, -0.00, -0.00, 0.00, 0.00, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01,
0.01, 0.01, 0.01, 0.01, 0.01, 0.00, -0.00, -0.00, -0.01, // nl=17 nr=17 ld=1 m=4
-0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00, // nl=17 nr=17 ld=2 m=4
-0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, // nl=17 nr=17 ld=3 m=4
0.03, 0.01, -0.01, -0.02, -0.03, -0.03, -0.02, -0.01, -0.00, 0.01, 0.03, 0.04, 0.05,
0.06, 0.08, 0.08, 0.09, 0.09, 0.10, 0.09, 0.09, 0.08, 0.08, 0.06, 0.05, 0.04,
0.03, 0.01, -0.00, -0.01, -0.02, -0.03, -0.03, -0.02, -0.01, 0.01, 0.03, // nl=18 nr=18 ld=0 m=4
0.01, 0.00, 0.00, -0.00, -0.00, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01,
-0.01, -0.01, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.01, 0.01, 0.01, 0.01,
0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.00, 0.00, -0.00, -0.00, -0.01, // nl=18 nr=18 ld=1 m=4
-0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00, // nl=18 nr=18 ld=2 m=4
-0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, // nl=18 nr=18 ld=3 m=4
0.03, 0.01, -0.01, -0.02, -0.03, -0.03, -0.02, -0.02, -0.01, 0.01, 0.02, 0.03, 0.04,
0.05, 0.06, 0.07, 0.08, 0.09, 0.09, 0.09, 0.09, 0.09, 0.08, 0.07, 0.06, 0.05,
0.04, 0.03, 0.02, 0.01, -0.01, -0.02, -0.02, -0.03, -0.03, -0.02, -0.01, 0.01, 0.03, // nl=19 nr=19 ld=0 m=4
0.01, 0.00, 0.00, -0.00, -0.00, -0.00, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01,
-0.01, -0.01, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.01, 0.01,
0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.00, 0.00, 0.00, -0.00, -0.00, -0.01, // nl=19 nr=19 ld=1 m=4
-0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00, // nl=19 nr=19 ld=2 m=4
-0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, // nl=19 nr=19 ld=3 m=4
0.03, 0.01, -0.01, -0.02, -0.02, -0.03, -0.02, -0.02, -0.01, 0.00, 0.01, 0.02, 0.03,
0.04, 0.05, 0.06, 0.07, 0.08, 0.08, 0.09, 0.09, 0.09, 0.08, 0.08, 0.07, 0.06,
0.05, 0.04, 0.03, 0.02, 0.01, 0.00, -0.01, -0.02, -0.02, -0.03, -0.02, -0.02, -0.01,
0.01, 0.03, // nl=20 nr=20 ld=0 m=4
0.01, 0.00, 0.00, -0.00, -0.00, -0.00, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01,
-0.01, -0.01, -0.01, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.01,
0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.00, 0.00, 0.00, -0.00,
-0.00, -0.01, // nl=20 nr=20 ld=1 m=4
-0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
-0.00, -0.00, // nl=20 nr=20 ld=2 m=4
-0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00,
0.00, 0.00, // nl=20 nr=20 ld=3 m=4
0.03, 0.01, -0.01, -0.02, -0.02, -0.02, -0.02, -0.02, -0.01, -0.00, 0.01, 0.02, 0.03,
0.04, 0.05, 0.05, 0.06, 0.07, 0.07, 0.08, 0.08, 0.08, 0.08, 0.08, 0.07, 0.07,
0.06, 0.05, 0.05, 0.04, 0.03, 0.02, 0.01, -0.00, -0.01, -0.02, -0.02, -0.02, -0.02,
-0.02, -0.01, 0.01, 0.03, // nl=21 nr=21 ld=0 m=4
0.01, 0.00, 0.00, -0.00, -0.00, -0.00, -0.00, -0.01, -0.01, -0.01, -0.01, -0.01, -0.01,
-0.01, -0.01, -0.01, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.00, 0.00, 0.00,
0.00, -0.00, -0.00, -0.01, // nl=21 nr=21 ld=1 m=4
-0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, -0.00, -0.00, // nl=21 nr=21 ld=2 m=4
-0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00,
0.00, 0.00, 0.00, 0.00, // nl=21 nr=21 ld=3 m=4
0.03, 0.01, -0.00, -0.01, -0.02, -0.02, -0.02, -0.02, -0.01, -0.01, 0.00, 0.01, 0.02,
0.03, 0.04, 0.05, 0.05, 0.06, 0.07, 0.07, 0.08, 0.08, 0.08, 0.08, 0.08, 0.07,
0.07, 0.06, 0.05, 0.05, 0.04, 0.03, 0.02, 0.01, 0.00, -0.01, -0.01, -0.02, -0.02,
-0.02, -0.02, -0.01, -0.00, 0.01, 0.03, // nl=22 nr=22 ld=0 m=4
0.01, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.00, -0.01, -0.01, -0.01, -0.01, -0.01,
-0.01, -0.01, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.00, 0.00,
0.00, 0.00, -0.00, -0.00, -0.00, -0.01, // nl=22 nr=22 ld=1 m=4
-0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, -0.00, -0.00, // nl=22 nr=22 ld=2 m=4
-0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, 0.00, 0.00, 0.00, 0.00, 0.00, // nl=22 nr=22 ld=3 m=4
0.03, 0.01, -0.00, -0.01, -0.02, -0.02, -0.02, -0.02, -0.02, -0.01, -0.00, 0.00, 0.01,
0.02, 0.03, 0.04, 0.05, 0.05, 0.06, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07,
0.07, 0.07, 0.06, 0.05, 0.05, 0.04, 0.03, 0.02, 0.01, 0.00, -0.00, -0.01, -0.02,
-0.02, -0.02, -0.02, -0.02, -0.01, -0.00, 0.01, 0.03, // nl=23 nr=23 ld=0 m=4
0.01, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.01, -0.01, -0.01, -0.01,
-0.01, -0.01, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.00,
0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.01, // nl=23 nr=23 ld=1 m=4
-0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, // nl=23 nr=23 ld=2 m=4
-0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, // nl=23 nr=23 ld=3 m=4
0.03, 0.01, -0.00, -0.01, -0.02, -0.02, -0.02, -0.02, -0.02, -0.01, -0.01, 0.00, 0.01,
0.02, 0.02, 0.03, 0.04, 0.05, 0.05, 0.06, 0.06, 0.07, 0.07, 0.07, 0.07, 0.07,
0.07, 0.07, 0.06, 0.06, 0.05, 0.05, 0.04, 0.03, 0.02, 0.02, 0.01, 0.00, -0.01,
-0.01, -0.02, -0.02, -0.02, -0.02, -0.02, -0.01, -0.00, 0.01, 0.03, // nl=24 nr=24 ld=0 m=4
0.01, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.01, -0.01,
-0.01, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.01, 0.01, 0.01, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.01, // nl=24 nr=24 ld=1 m=4
-0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, // nl=24 nr=24 ld=2 m=4
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, // nl=24 nr=24 ld=3 m=4
0.03, 0.01, -0.00, -0.01, -0.02, -0.02, -0.02, -0.02, -0.02, -0.01, -0.01, -0.00, 0.00,
0.01, 0.02, 0.03, 0.03, 0.04, 0.05, 0.05, 0.06, 0.06, 0.06, 0.07, 0.07, 0.07,
0.07, 0.07, 0.06, 0.06, 0.06, 0.05, 0.05, 0.04, 0.03, 0.03, 0.02, 0.01, 0.00,
-0.00, -0.01, -0.01, -0.02, -0.02, -0.02, -0.02, -0.02, -0.01, -0.00, 0.01, 0.03, // nl=25 nr=25 ld=0 m=4
0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.00, // nl=25 nr=25 ld=1 m=4
-0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, // nl=25 nr=25 ld=2 m=4
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, // nl=25 nr=25 ld=3 m=4
0.03, 0.01, 0.00, -0.01, -0.01, -0.02, -0.02, -0.02, -0.02, -0.01, -0.01, -0.00, 0.00,
0.01, 0.01, 0.02, 0.03, 0.03, 0.04, 0.05, 0.05, 0.06, 0.06, 0.06, 0.06, 0.07,
0.07, 0.07, 0.06, 0.06, 0.06, 0.06, 0.05, 0.05, 0.04, 0.03, 0.03, 0.02, 0.01,
0.01, 0.00, -0.00, -0.01, -0.01, -0.02, -0.02, -0.02, -0.02, -0.01, -0.01, 0.00, 0.01,
0.03, // nl=26 nr=26 ld=0 m=4
0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00,
-0.00, // nl=26 nr=26 ld=1 m=4
-0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00,
-0.00, // nl=26 nr=26 ld=2 m=4
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, // nl=26 nr=26 ld=3 m=4
0.03, 0.01, 0.00, -0.01, -0.01, -0.02, -0.02, -0.02, -0.02, -0.01, -0.01, -0.01, -0.00,
0.00, 0.01, 0.02, 0.02, 0.03, 0.04, 0.04, 0.05, 0.05, 0.05, 0.06, 0.06, 0.06,
0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.05, 0.05, 0.05, 0.04, 0.04, 0.03, 0.02,
0.02, 0.01, 0.00, -0.00, -0.01, -0.01, -0.01, -0.02, -0.02, -0.02, -0.02, -0.01, -0.01,
0.00, 0.01, 0.03, // nl=27 nr=27 ld=0 m=4
0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.00,
-0.00, -0.00, -0.00, // nl=27 nr=27 ld=1 m=4
-0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
-0.00, -0.00, -0.00, // nl=27 nr=27 ld=2 m=4
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, // nl=27 nr=27 ld=3 m=4
0.03, 0.01, 0.00, -0.01, -0.01, -0.02, -0.02, -0.02, -0.02, -0.02, -0.01, -0.01, -0.00,
0.00, 0.01, 0.01, 0.02, 0.02, 0.03, 0.04, 0.04, 0.05, 0.05, 0.05, 0.06, 0.06,
0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.05, 0.05, 0.05, 0.04, 0.04, 0.03,
0.02, 0.02, 0.01, 0.01, 0.00, -0.00, -0.01, -0.01, -0.02, -0.02, -0.02, -0.02, -0.02,
-0.01, -0.01, 0.00, 0.01, 0.03, // nl=28 nr=28 ld=0 m=4
0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, -0.00, -0.00, -0.00, -0.00, // nl=28 nr=28 ld=1 m=4
-0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, -0.00, -0.00, -0.00, // nl=28 nr=28 ld=2 m=4
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, // nl=28 nr=28 ld=3 m=4
0.03, 0.01, 0.00, -0.01, -0.01, -0.01, -0.02, -0.02, -0.02, -0.02, -0.01, -0.01, -0.01,
-0.00, 0.00, 0.01, 0.01, 0.02, 0.03, 0.03, 0.04, 0.04, 0.04, 0.05, 0.05, 0.05,
0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.05, 0.05, 0.05, 0.04, 0.04, 0.04,
0.03, 0.03, 0.02, 0.01, 0.01, 0.00, -0.00, -0.01, -0.01, -0.01, -0.02, -0.02, -0.02,
-0.02, -0.01, -0.01, -0.01, 0.00, 0.01, 0.03, // nl=29 nr=29 ld=0 m=4
0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, -0.00, -0.00, -0.00, -0.00, -0.00, // nl=29 nr=29 ld=1 m=4
-0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, // nl=29 nr=29 ld=2 m=4
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
0.00, 0.00, 0.00, 0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
-0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00, -0.00,
0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, // nl=29 nr=29 ld=3 m=4
};
if(verbose>1)printf("nl = %d nr = %d ld = %d m = %d\n", nl, nr, ld, m);
pad(np, nl, nr, f, fpad);
/* Find array index at which to read SavGol coefficients */
index=0;
for(i=2;i<nr;++i){
index+=4*(i+i+1);
}
index+=ld*(i+i+1); // Choose coefficients for correct derivative
nc=nl+nr+1;
for(i=0;i<nc;++i,++index){
cn[i]=cdata[index];
if(verbose>1)printf(" %5.2f",cn[i]);
}
if(verbose>1)printf("\n");
apply_coeffs(fpad, g, cn, nl, nr, np);
if(verbose>0)printf("Done smoothing\n");
return 0;
}
void pad(int np, int nl, int nr, double *fin, float *fout) {
extern int verbose;
int i;
if(verbose>0)printf("Padding input spectrum\n");
for (i = 0; i < nl; i++) {
fout[i] = (float) fin[0];
}
for (i = nl; i < (np+nl); i++) {
fout[i] = (float) fin[i-nl];
}
for (i = (np+nl); i < (nl+np+nr); i++) {
fout[i] = (float) fin[np-1];
}
}
int apply_coeffs(float *fpad, double *g, float *cn, int nl, int nr, int np) {
extern int verbose;
int i, n;
if(verbose>0)printf("Applying SavGol coeffs\n");
for (i = 0; i < np; i++) {
g[i] = 0.0;
for (n = 0; n < (nl+nr+1); n++) {
g[i] += (double) (cn[n] * fpad[i+n]);
}
if(verbose>1){
printf("%d %10.4f\n",i,g[i]);
}
}
return 0;
}