Skip to content

Commit 1b4b079

Browse files
committed
fix bug
1 parent b604c36 commit 1b4b079

File tree

2 files changed

+119
-142
lines changed

2 files changed

+119
-142
lines changed

src/components/LightCurvePlot.tsx

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ export default function LightCurvePlot() {
274274

275275
useEffect(() => {
276276
if (!rawFigure || !avgPointRawMap) return;
277-
if (rawFilterMode === "none" || !isFiltered) {
277+
if (rawFilterMode === "none") {
278278
setFilteredRawPlot(rawFigure)
279279
const fullData = [
280280
...rawFigure.tracesSW.map(tr => ({ ...tr, xaxis: 'x2', yaxis: 'y' })),
@@ -317,14 +317,14 @@ export default function LightCurvePlot() {
317317
const rawList = avgPointRawMap[key];
318318
if (!rawList) return;
319319

320-
const { kept, minY, maxY } = filterRawPointsByAverage(rawList, avgY, filterPercent);
321-
// const { kept, removed, minY, maxY } = applyRawFilter(
322-
// rawFilterMode,
323-
// rawList,
324-
// avgY,
325-
// filterPercent,
326-
// sigmaK
327-
// );
320+
// const { kept, minY, maxY } = filterRawPointsByAverage(rawList, avgY, filterPercent);
321+
const { kept, removed, minY, maxY } = applyRawFilter(
322+
rawFilterMode,
323+
rawList,
324+
avgY,
325+
filterPercent,
326+
sigmaK
327+
);
328328
shapes.push({
329329
type: "rect",
330330
xref: "x2",
@@ -403,14 +403,14 @@ export default function LightCurvePlot() {
403403
const rawList = avgPointRawMap[key];
404404
if (!rawList) return;
405405

406-
const { kept, minY, maxY } = filterRawPointsByAverage(rawList, avgY, filterPercent);
407-
// const { kept, removed, minY, maxY } = applyRawFilter(
408-
// rawFilterMode,
409-
// rawList,
410-
// avgY,
411-
// filterPercent,
412-
// sigmaK
413-
// );
406+
// const { kept, minY, maxY } = filterRawPointsByAverage(rawList, avgY, filterPercent);
407+
const { kept, removed, minY, maxY } = applyRawFilter(
408+
rawFilterMode,
409+
rawList,
410+
avgY,
411+
filterPercent,
412+
sigmaK
413+
);
414414
shapes.push({
415415
type: "rect",
416416
xref: "x2",

src/components/Sidebar/Sidebar.tsx

Lines changed: 102 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ 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, isFiltered, selectedSeries,
4242
sigmaK,
43-
rawFilterMode,
43+
rawFilterMode,
4444
setSettings,
4545
// focusRangeMax
4646
} = usePlotSettings();
@@ -186,146 +186,123 @@ export default function Sidebar() {
186186
)}
187187
</Section>
188188

189-
{/* ================= Average Configuration ================= */}
190-
{visibility.averageConfig && dataType.includes('average') && (
191-
<Section title="Average Configuration">
189+
{/* ================= Average Configuration ================= */}
190+
{visibility.averageConfig && dataType.includes('average') && (
191+
<Section title="Average Configuration">
192192

193-
{xAxis === 'phase' && pathname !== '/matrix/' ? (
194-
<div className="space-y-2 mb-4">
195-
<label className="font-medium">
196-
Number of Bins: {noOfBins}
197-
</label>
198-
<input
199-
type="range"
200-
min={5}
201-
max={1000}
202-
value={noOfBins}
203-
onChange={(e) =>
204-
setSettings({ noOfBins: Number(e.target.value) })
205-
}
206-
/>
207-
<input
208-
type="number"
209-
min={5}
210-
max={1000}
211-
value={noOfBins}
212-
onChange={(e) =>
213-
setSettings({ noOfBins: Number(e.target.value) })
214-
}
215-
className="w-full px-2 py-1 border rounded"
216-
/>
217-
</div>
218-
) : (
219-
<div className="space-y-2 mb-4">
220-
<label className="font-medium">
221-
Rebinning Factor: {noOfDataPoint}
222-
</label>
223-
<input
224-
type="range"
225-
min={1}
226-
max={1000}
227-
value={noOfDataPoint}
228-
onChange={(e) =>
229-
setSettings({ noOfDataPoint: Number(e.target.value) })
230-
}
231-
/>
232-
<input
233-
type="number"
234-
min={1}
235-
max={1000}
236-
value={noOfDataPoint}
237-
onChange={(e) =>
238-
setSettings({ noOfDataPoint: Number(e.target.value) })
239-
}
240-
className="w-full px-2 py-1 border rounded"
241-
/>
242-
</div>
243-
)}
193+
{xAxis === 'phase' && pathname !== '/matrix/' ? (
194+
<div className="space-y-2 mb-4">
195+
<label className="font-medium">
196+
Number of Bins: {noOfBins}
197+
</label>
198+
<input
199+
type="range"
200+
min={5}
201+
max={1000}
202+
value={noOfBins}
203+
onChange={(e) =>
204+
setSettings({ noOfBins: Number(e.target.value) })
205+
}
206+
/>
207+
<input
208+
type="number"
209+
min={5}
210+
max={1000}
211+
value={noOfBins}
212+
onChange={(e) =>
213+
setSettings({ noOfBins: Number(e.target.value) })
214+
}
215+
className="w-full px-2 py-1 border rounded"
216+
/>
217+
</div>
218+
) : (
219+
<div className="space-y-2 mb-4">
220+
<label className="font-medium">
221+
Rebinning Factor: {noOfDataPoint}
222+
</label>
223+
<input
224+
type="range"
225+
min={1}
226+
max={1000}
227+
value={noOfDataPoint}
228+
onChange={(e) =>
229+
setSettings({ noOfDataPoint: Number(e.target.value) })
230+
}
231+
/>
232+
<input
233+
type="number"
234+
min={1}
235+
max={1000}
236+
value={noOfDataPoint}
237+
onChange={(e) =>
238+
setSettings({ noOfDataPoint: Number(e.target.value) })
239+
}
240+
className="w-full px-2 py-1 border rounded"
241+
/>
242+
</div>
243+
)}
244244

245-
{/* ================= Raw Filter (Dropdown) ================= */}
246-
{dataType.includes('raw') && dataType.includes('average') && (
247-
<div className="space-y-2 mb-4">
248-
<label className="font-medium">Raw Data Filter</label>
245+
{/* ================= Raw Filter (Dropdown) ================= */}
246+
{dataType.includes('raw') && dataType.includes('average') && (
247+
<div className="space-y-2 mb-4">
248+
<label className="font-medium">Raw Data Filter</label>
249249

250-
<select
251-
value={rawFilterMode}
252-
onChange={(e) =>
253-
setSettings({ rawFilterMode: e.target.value as RawFilterMode })
254-
}
255-
className="w-full px-2 py-1 border rounded bg-white"
256-
>
257-
<option value="none">No filter</option>
258-
<option value="percent">Filter by average band (%)</option>
259-
<option value="sigma">Filter by σ-band</option>
260-
</select>
250+
<select
251+
value={rawFilterMode}
252+
onChange={(e) =>
253+
setSettings({ rawFilterMode: e.target.value as RawFilterMode })
254+
}
255+
className="w-full px-2 py-1 border rounded bg-white"
256+
>
257+
<option value="none">No filter</option>
258+
<option value="percent">Filter by average band (%)</option>
259+
<option value="sigma">Filter by σ-band</option>
260+
</select>
261261

262-
{/* % BAND */}
263-
{rawFilterMode === 'percent' && (
264-
<>
265-
<label className="font-medium">
266-
Average Band: ±{filterPercent}%
267-
</label>
268-
<input
269-
type="range"
270-
min={1}
271-
max={200}
272-
value={filterPercent}
273-
onChange={(e) =>
274-
setSettings({ filterPercent: Number(e.target.value) })
275-
}
276-
/>
277-
<input
278-
type="number"
279-
min={1}
280-
max={200}
281-
value={filterPercent}
282-
onChange={(e) =>
283-
setSettings({ filterPercent: Number(e.target.value) })
262+
<div className="space-y-1">
263+
<label className="font-medium text-sm text-gray-700">
264+
{rawFilterMode === "percent"
265+
? `Average Band (±${filterPercent}%)`
266+
: `σ-Band (±${sigmaK.toFixed(2)}σ)`
284267
}
285-
className="w-full px-2 py-1 border rounded"
286-
/>
287-
<p className="text-xs text-gray-500">
288-
Keeps raw points within ±{filterPercent}% of the average curve.
289-
</p>
290-
</>
291-
)}
292-
293-
{/* σ BAND */}
294-
{rawFilterMode === 'sigma' && (
295-
<>
296-
<label className="font-medium">
297-
σ-Band: ±{sigmaK}σ
298268
</label>
269+
299270
<input
300271
type="range"
301-
min={0.5}
302-
max={3}
303-
step={0.1}
304-
value={sigmaK}
272+
min={rawFilterMode === "percent" ? 1 : 0.5}
273+
max={rawFilterMode === "percent" ? 200 : 3}
274+
step={rawFilterMode === "percent" ? 1 : 0.1}
275+
value={rawFilterMode === "percent" ? filterPercent : sigmaK}
305276
onChange={(e) =>
306-
setSettings({ sigmaK: Number(e.target.value) })
277+
setSettings(
278+
rawFilterMode === "percent"
279+
? { filterPercent: Number(e.target.value) }
280+
: { sigmaK: Number(e.target.value) }
281+
)
307282
}
308283
/>
284+
309285
<input
310286
type="number"
311-
min={0.5}
312-
max={3}
313-
step={0.1}
314-
value={sigmaK}
287+
min={rawFilterMode === "percent" ? 1 : 0.5}
288+
max={rawFilterMode === "percent" ? 200 : 3}
289+
step={rawFilterMode === "percent" ? 1 : 0.1}
290+
value={rawFilterMode === "percent" ? filterPercent : sigmaK}
315291
onChange={(e) =>
316-
setSettings({ sigmaK: Number(e.target.value) })
292+
setSettings(
293+
rawFilterMode === "percent"
294+
? { filterPercent: Number(e.target.value) }
295+
: { sigmaK: Number(e.target.value) }
296+
)
317297
}
318298
className="w-full px-2 py-1 border rounded"
319299
/>
320-
<p className="text-xs text-gray-500">
321-
Keeps raw points within ±{sigmaK} standard deviations.
322-
</p>
323-
</>
324-
)}
325-
</div>
326-
)}
327-
</Section>
328-
)}
300+
</div>
301+
302+
</div>
303+
)}
304+
</Section>
305+
)}
329306

330307
{/* Download Button */}
331308
{visibility.download && (

0 commit comments

Comments
 (0)