Skip to content

Commit d728498

Browse files
committed
feat: add reverseIfNeeded
1 parent f234dca commit d728498

File tree

5 files changed

+48
-3
lines changed

5 files changed

+48
-3
lines changed

src/FilterXYType.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import {
2222
CalibrateFilter,
2323
ParetoNormalizationFilter,
2424
} from './filters/filters';
25+
import { ReverseIfNeededFilter } from './filters/x/reverseIfNeeded';
2526

2627
export type FilterXYType =
2728
| AirPLSBaselineFilter
@@ -45,4 +46,5 @@ export type FilterXYType =
4546
| XFunctionFilter
4647
| YFunctionFilter
4748
| CalibrateFilter
48-
| ParetoNormalizationFilter;
49+
| ParetoNormalizationFilter
50+
| ReverseIfNeededFilter;

src/__tests__/filterXY.test.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,30 @@ describe('filterXY', () => {
1717
y: Float64Array.from([-1, 0, 1, 2, 1, 0, -1]),
1818
});
1919
});
20+
21+
it('reverseIfNeeded, not needed', () => {
22+
const filters: FilterXYType[] = [{ name: 'reverseIfNeeded' }];
23+
const data = {
24+
x: Float64Array.from([1, 2, 3, 4, 5]),
25+
y: Float64Array.from([1, 2, 3, 4, 1]),
26+
};
27+
const result = filterXY(data, filters);
28+
expect(result.data).toStrictEqual({
29+
x: Float64Array.from([1, 2, 3, 4, 5]),
30+
y: Float64Array.from([1, 2, 3, 4, 1]),
31+
});
32+
});
33+
34+
it('reverseIfNeeded, needed', () => {
35+
const filters: FilterXYType[] = [{ name: 'reverseIfNeeded' }];
36+
const data = {
37+
x: Float64Array.from([5, 4, 3, 2, 1]),
38+
y: Float64Array.from([1, 2, 3, 4, 1]),
39+
};
40+
const result = filterXY(data, filters);
41+
expect(result.data).toStrictEqual({
42+
x: Float64Array.from([1, 2, 3, 4, 5]),
43+
y: Float64Array.from([1, 4, 3, 2, 1]),
44+
});
45+
});
2046
});

src/filterXY.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { DataXY } from 'cheminfo-types';
2-
import { xEnsureFloat64 } from 'ml-spectra-processing';
2+
import { xEnsureFloat64, xyGrowingX } from 'ml-spectra-processing';
33

44
import { FilterXYType } from './FilterXYType';
55
import * as Filters from './filters/filters';
@@ -12,7 +12,7 @@ import * as Filters from './filters/filters';
1212
*/
1313
export function filterXY(data: DataXY, filters: FilterXYType[]) {
1414
let result = {
15-
data: { x: xEnsureFloat64(data.x), y: xEnsureFloat64(data.y) },
15+
data: xyGrowingX({ x: xEnsureFloat64(data.x), y: xEnsureFloat64(data.y) }),
1616
};
1717

1818
const logs = [];
@@ -26,6 +26,7 @@ export function filterXY(data: DataXY, filters: FilterXYType[]) {
2626
}
2727
// @ts-expect-error some method have options and some other ones don't have any options
2828
result = filterFct(result.data, filter.options);
29+
result.data = xyGrowingX(result.data);
2930
logs.push({
3031
name: filter.name,
3132
time: Date.now() - start,

src/filters/filters.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export * from './sg/thirdDerivative';
1818
export * from './sg/savitzkyGolay';
1919

2020
export * from './x/ensureGrowing';
21+
export * from './x/reverseIfNeeded';
2122
export * from './x/equallySpaced';
2223
export * from './x/filterX';
2324
export * from './x/calibrateX';

src/filters/x/reverseIfNeeded.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { DataXY } from 'cheminfo-types';
2+
import { xyGrowingX } from 'ml-spectra-processing';
3+
4+
export interface ReverseIfNeededFilter {
5+
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
12+
*/
13+
export function reverseIfNeeded(data: DataXY<Float64Array>) {
14+
return { data: xyGrowingX(data) };
15+
}

0 commit comments

Comments
 (0)