We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent f234dca commit d728498Copy full SHA for d728498
src/FilterXYType.ts
@@ -22,6 +22,7 @@ import {
22
CalibrateFilter,
23
ParetoNormalizationFilter,
24
} from './filters/filters';
25
+import { ReverseIfNeededFilter } from './filters/x/reverseIfNeeded';
26
27
export type FilterXYType =
28
| AirPLSBaselineFilter
@@ -45,4 +46,5 @@ export type FilterXYType =
45
46
| XFunctionFilter
47
| YFunctionFilter
48
| CalibrateFilter
- | ParetoNormalizationFilter;
49
+ | ParetoNormalizationFilter
50
+ | ReverseIfNeededFilter;
src/__tests__/filterXY.test.ts
@@ -17,4 +17,30 @@ describe('filterXY', () => {
17
y: Float64Array.from([-1, 0, 1, 2, 1, 0, -1]),
18
});
19
20
+
21
+ it('reverseIfNeeded, not needed', () => {
+ const filters: FilterXYType[] = [{ name: 'reverseIfNeeded' }];
+ const data = {
+ x: Float64Array.from([1, 2, 3, 4, 5]),
+ y: Float64Array.from([1, 2, 3, 4, 1]),
+ };
+ const result = filterXY(data, filters);
+ expect(result.data).toStrictEqual({
29
30
31
+ });
32
33
34
+ it('reverseIfNeeded, needed', () => {
35
36
37
+ x: Float64Array.from([5, 4, 3, 2, 1]),
38
39
40
41
42
43
+ y: Float64Array.from([1, 4, 3, 2, 1]),
44
src/filterXY.ts
@@ -1,5 +1,5 @@
1
import { DataXY } from 'cheminfo-types';
2
-import { xEnsureFloat64 } from 'ml-spectra-processing';
+import { xEnsureFloat64, xyGrowingX } from 'ml-spectra-processing';
3
4
import { FilterXYType } from './FilterXYType';
5
import * as Filters from './filters/filters';
@@ -12,7 +12,7 @@ import * as Filters from './filters/filters';
12
*/
13
export function filterXY(data: DataXY, filters: FilterXYType[]) {
14
let result = {
15
- data: { x: xEnsureFloat64(data.x), y: xEnsureFloat64(data.y) },
+ data: xyGrowingX({ x: xEnsureFloat64(data.x), y: xEnsureFloat64(data.y) }),
16
};
const logs = [];
@@ -26,6 +26,7 @@ export function filterXY(data: DataXY, filters: FilterXYType[]) {
}
// @ts-expect-error some method have options and some other ones don't have any options
result = filterFct(result.data, filter.options);
+ result.data = xyGrowingX(result.data);
logs.push({
name: filter.name,
time: Date.now() - start,
src/filters/filters.ts
@@ -18,6 +18,7 @@ export * from './sg/thirdDerivative';
export * from './sg/savitzkyGolay';
export * from './x/ensureGrowing';
+export * from './x/reverseIfNeeded';
export * from './x/equallySpaced';
export * from './x/filterX';
export * from './x/calibrateX';
src/filters/x/reverseIfNeeded.ts
@@ -0,0 +1,15 @@
+import { DataXY } from 'cheminfo-types';
+import { xyGrowingX } from 'ml-spectra-processing';
+export interface ReverseIfNeededFilter {
+ name: 'reverseIfNeeded';
6
+}
7
8
+/**
9
+ * Ensure X values are strictly monotonic increasing
10
+ * http://www-groups.mcs.st-andrews.ac.uk/~john/analysis/Lectures/L8.html
11
+ * @param data
+ */
+export function reverseIfNeeded(data: DataXY<Float64Array>) {
+ return { data: xyGrowingX(data) };
0 commit comments