Skip to content

Commit 0ae80db

Browse files
committed
add filter in and out option
1 parent 1b4b079 commit 0ae80db

File tree

3 files changed

+60
-26
lines changed

3 files changed

+60
-26
lines changed

src/components/LightCurvePlot.tsx

Lines changed: 43 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export default function LightCurvePlot() {
2727
const {
2828
dataType, dataSelection, xAxis, errorBars, noOfBins, noOfDataPoint,
2929
plotType, pointSize, lineWidth, legendFontSize, labelFontSize, tooltipFontSize,
30-
figure, rawFigure, avgPointRawMap, filterPercent, isFiltered, selectedSeries, rawFilterMode, sigmaK,
30+
figure, rawFigure, avgPointRawMap, filterPercent, isRawFilterInside, selectedSeries, rawFilterMode, sigmaK,
3131
setSettings
3232
} = usePlotSettings();
3333

@@ -50,30 +50,48 @@ export default function LightCurvePlot() {
5050
const [posX, setPosX] = useState<number | undefined>(undefined);
5151
const [posY, setPosY] = useState<number | undefined>(undefined);
5252
const [fig, setFig] = useState<{ data: PlotTrace[] }>({ data: [] });
53-
function applyRawFilter(
54-
rawFilterMode: "none" | "percent" | "sigma",
55-
rawList: RawPoint[],
56-
avgY: number,
57-
filterPercent: number,
58-
sigmaK: number
59-
) {
60-
if (rawFilterMode === "percent") {
61-
return filterRawPointsByAverage(rawList, avgY, filterPercent);
62-
}
63-
64-
if (rawFilterMode === "sigma") {
65-
return filterRawPointsBySigmaBand(rawList, avgY, sigmaK);
66-
}
53+
function applyRawFilter(
54+
rawFilterMode: "none" | "percent" | "sigma",
55+
rawList: RawPoint[],
56+
avgY: number,
57+
filterPercent: number,
58+
sigmaK: number,
59+
isRawFilterInside: boolean,
60+
) {
61+
let result: {
62+
kept: RawPoint[];
63+
removed: RawPoint[];
64+
minY: number | null;
65+
maxY: number | null;
66+
};
6767

68-
// none
69-
return {
68+
if (rawFilterMode === "percent") {
69+
result = filterRawPointsByAverage(rawList, avgY, filterPercent);
70+
} else if (rawFilterMode === "sigma") {
71+
result = filterRawPointsBySigmaBand(rawList, avgY, sigmaK);
72+
} else {
73+
// no filter
74+
result = {
7075
kept: rawList,
7176
removed: [],
7277
minY: null,
73-
maxY: null
78+
maxY: null,
79+
};
80+
}
81+
82+
// APPLY BOOLEAN HERE
83+
if (!isRawFilterInside && rawFilterMode !== "none") {
84+
return {
85+
...result,
86+
kept: result.removed,
87+
removed: result.kept,
7488
};
7589
}
7690

91+
return result;
92+
}
93+
94+
7795
function mjdToDate(mjd: number): Date {
7896
const MJD_EPOCH = Date.UTC(1858, 10, 17); // November 17, 1858
7997
const msPerDay = 86400 * 1000;
@@ -318,12 +336,13 @@ export default function LightCurvePlot() {
318336
if (!rawList) return;
319337

320338
// const { kept, minY, maxY } = filterRawPointsByAverage(rawList, avgY, filterPercent);
321-
const { kept, removed, minY, maxY } = applyRawFilter(
339+
const { kept, minY, maxY } = applyRawFilter(
322340
rawFilterMode,
323341
rawList,
324342
avgY,
325343
filterPercent,
326-
sigmaK
344+
sigmaK,
345+
isRawFilterInside
327346
);
328347
shapes.push({
329348
type: "rect",
@@ -404,12 +423,13 @@ export default function LightCurvePlot() {
404423
if (!rawList) return;
405424

406425
// const { kept, minY, maxY } = filterRawPointsByAverage(rawList, avgY, filterPercent);
407-
const { kept, removed, minY, maxY } = applyRawFilter(
426+
const { kept, minY, maxY } = applyRawFilter(
408427
rawFilterMode,
409428
rawList,
410429
avgY,
411430
filterPercent,
412-
sigmaK
431+
sigmaK,
432+
isRawFilterInside
413433
);
414434
shapes.push({
415435
type: "rect",
@@ -478,7 +498,7 @@ export default function LightCurvePlot() {
478498
});
479499

480500
}
481-
}, [avgPointRawMap, dataSelection, rawFigure, filterPercent, sigmaK, rawFilterMode, isFiltered, xAxis]);
501+
}, [avgPointRawMap, dataSelection, rawFigure, filterPercent, sigmaK, rawFilterMode, xAxis]);
482502

483503

484504
useEffect(() => {

src/components/Sidebar/Sidebar.tsx

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ type RawFilterMode = "none" | "percent" | "sigma";
3838

3939
export default function Sidebar() {
4040
const {
41-
dataType, dataSelection, xAxis, errorBars, noOfBins, noOfDataPoint, colorBy, filterPercent, isFiltered, selectedSeries,
41+
dataType, dataSelection, xAxis, errorBars, noOfBins, noOfDataPoint, colorBy, filterPercent, isRawFilterInside, selectedSeries,
4242
sigmaK,
4343
rawFilterMode,
4444
setSettings,
@@ -245,6 +245,20 @@ export default function Sidebar() {
245245
{/* ================= Raw Filter (Dropdown) ================= */}
246246
{dataType.includes('raw') && dataType.includes('average') && (
247247
<div className="space-y-2 mb-4">
248+
<div className="flex items-center gap-2 mt-2">
249+
<input
250+
type="checkbox"
251+
checked={isRawFilterInside}
252+
onChange={(e) =>
253+
setSettings({ isRawFilterInside: e.target.checked })
254+
}
255+
className="w-4 h-4"
256+
/>
257+
<label className="text-sm text-gray-700">
258+
Keep points inside band
259+
</label>
260+
</div>
261+
248262
<label className="font-medium">Raw Data Filter</label>
249263

250264
<select

src/context/PlotSettingsContext.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export type PlotSettings = {
3636
focusRangeMax: number;
3737
focusRangeMaxManuallySet: boolean;
3838

39-
isFiltered: boolean;
39+
isRawFilterInside: boolean;
4040
rawFilterMode: RawFilterMode;
4141
filterPercent: number;
4242
sigmaK: number;
@@ -74,7 +74,7 @@ const defaultValue: PlotSettings = {
7474
focusRangeMax: 100,
7575
focusRangeMaxManuallySet: false,
7676

77-
isFiltered: false,
77+
isRawFilterInside: false,
7878
rawFilterMode: "none",
7979
filterPercent: 10,
8080
sigmaK: 1,

0 commit comments

Comments
 (0)