Omnigraph
그래프 엔진으로 컨텍스트를 조립하고, 객체 저장소 기반에서 에이전트가 코드처럼 그래프 데이터를 분기·타입·검토·병합·감사·거버넌스합니다
저장소 정보는 아직 수집하지 않았습니다.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
Drop in a Raman spectrum: cleaned, peak-detected and labelled from the graphene/GO atlas, with PeakForge deconvolution. Runs entirely in the browser.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Drop in a Raman spectrum (Excel, CSV, TXT, JCAMP-DX, SPC or Renishaw WDF, whatever the instrument exports) and see it immediately, cleaned up, with every peak labelled from the Raman graphene / graphene-oxide atlas. Click a label to read what the band means, get the atlas intensity ratios from your own numbers, and resolve the shoulders hidden inside broad GO bands with an atlas band fit.
Live: https://vascoesquivel.github.io/raman-studio/ · try it with no file: graphene-oxide sample, monolayer sample
Everything runs in your browser. Files are parsed locally and never uploaded. The app is static files on GitHub Pages: no server, no account, no build step.
Load a file: drag it onto the window, press O, or use a sample. Several files, sheets or intensity columns load as separate spectra. Switch between them from the name chip, or show them overlaid or stacked. If the app can't tell which column is the Raman shift, it shows a small column-mapping preview instead of failing.
Clean with the signal chain under the plot. Each module has its own switch:
Raw + baseline (B) and Compare (C) show what each step did.
Detect. Peaks are found by prominence (a port of SciPy's find_peaks), not
naive local maxima. The sensitivity slider sets the prominence threshold as a
multiple of the measured noise.
Label. Each peak is matched to the atlas band whose window contains it, with a match score that falls off with distance from the atlas centre (1 at the centre, about 0.14 at the window edge; a distance measure, not a probability):
Deconvolve (F). This seeds PeakForge's Levenberg–Marquardt fitter with the atlas bands and fits the first- and second-order regions. In the first-order region D and G are always fitted, while D*, D″ and D′ are kept only in the band set with the lowest BIC (Bayesian information criterion), so a shoulder the data cannot support does not leave G "not significant". The Fit tab names the chosen set, lists every set tried, and shows a runner-up within ΔBIC 2 (with its ratios on the Ratios tab). Fit every band turns selection off. Bands it resolves get dashed callouts, so you can tell them apart from the solid callouts of detected maxima. The Fit tab shows residuals, fit quality against the noise floor, uncertainties and degeneracy warnings.
Explain.
.wdf). It draws a band-intensity heat
map: one band's height, or the ratio of two, at every map point. Click a
point to open its spectrum. Compare adds a second band and gives the
correlation of the two maps across the points, with a scatter plot, which
replaces toggling two heat maps by eye.Export:
match_score), the fit
parameters and the processed spectrum (raw, baseline, corrected, final and
despiked columns).Calibrate the wavenumber axis from the Data tab: open a silicon reference
spectrum, measure its band, and enter the nominal position with its source (the
app holds no nominal value of its own). The difference is applied to every
spectrum of the session as one constant offset, shown on the chain's Raw module
and recorded in the report, the spectrum CSV (x_uncalibrated column) and the
project.
Label spectra for a reviewed dataset, also on the Data tab: check the
cosmic-ray removals and the peak labels, grade the spectrum (good / usable /
reject), and Save & next moves to the next unlabelled one. Each label keeps a
snapshot of the mask and the assignments you confirmed; reopening the spectrum
restores your edits. Labels are saved in projects and exported as
raman-studio/labels@1 JSON.
Presentation mode (P) goes fullscreen with large type and projector contrast. ← → step through the labels with a caption for each band. T switches between the dark and light themes. ? lists every shortcut.
Keys follow PeakForge where the action exists there.
| key | action |
|---|---|
| O | open file |
| D | detect and label again (replays the scan) |
| F | deconvolve (PeakForge: auto-fit) |
| 1 2 3 | laser 532 / 633 / 785 nm |
| double-click plot | add a peak by hand (PeakForge: add peak) |
| Del | remove the selected peak (PeakForge: delete curve) |
| ← → | nudge the selected peak (Shift = 10×) |
| [ ] | previous / next label |
| Ctrl+Z / Ctrl+Y | undo / redo |
| Ctrl+S | save project |
| wheel · drag · Shift+drag | zoom · pan · zoom to range |
| R | show the whole spectrum |
| B / C | raw + baseline / compare raw and processed |
| P / T | presentation mode / theme |
| Esc | deselect, close, leave presentation |
| format | notes |
|---|---|
.csv .tsv .txt .dat .asc | Any delimiter (comma, semicolon, tab, pipe, spaces) and decimal commas. Header and comment lines are skipped. UTF-8, UTF-16 or Windows-1252. Handles Renishaw WiRE and Horiba LabSpec exports (descending x, #Laser headers), several intensity columns, transposed tables and long map exports (X, Y, Wave, Intensity). |
.xlsx .xls | Every sheet with numeric data. Read with SheetJS 0.20.3, loaded from its CDN only when a spreadsheet is opened. |
.jdx .dx | JCAMP-DX 4.24 / 5: XYDATA with AFFN or ASDF compression (SQZ, DIF, DUP), XYPOINTS, PEAK TABLE, multi-block files. |
.spc | Thermo / Galactic SPC, new format. Even and XY spacing, single and multiple subfiles. Experimental. |
.wdf | Renishaw WiRE native files: single spectra, series and maps, with stage coordinates and the map grid. Laser, accumulations, WiRE version and map size are shown on the Data tab; the operator name is not read. Spectral images (several rows per spectrum, as in line-focus maps) are not supported. Up to 20 000 spectra per file. |
The wavenumber column is detected automatically: monotonic, roughly 50–4000 cm⁻¹, evenly spaced, and helped by header names. An index column never wins.
Band data lives in data/libraries/. The app loads every file listed in
data/libraries/index.json; GitHub Pages can't list folders, so the manifest is
needed. To add a material:
data/libraries/<material>.json following
data/libraries/schema.json. Use
graphene-go.json as a worked example. Each band needs id, label, name,
region (first / second), posText, posSort and a match block:
range [lo, hi] in cm⁻¹, center, and dispersion.cmPerEV (0 for
non-dispersive, null if unknown). The descriptive fields (origin,
process, mechanism, meaning, diagnostics, use, correction, refs)
fill the explanation panel.{ "file": "<material>.json" } to index.json.Ratios and the read-your-spectrum evaluation are optional (ratios, ratioMap,
workflow). The automatic workflow evaluation is written for the graphene
library; other libraries show their steps as text.
graphene-go.json is generated from the atlas, so don't edit it by hand:
python tools/extract_atlas.py path/to/raman-graphene-atlas/index.html --commit <sha>
python tools/verify_atlas.py # field-by-field diff against the atlas on GitHub
No build step. Serve the folder the way GitHub Pages does (under a subpath) and open it:
python tools/serve.py # http://127.0.0.1:8765/raman-studio/
Tests run in a real browser. tests/index.html runs the unit suites (parsers,
cosmic-ray filter, baselines, SciPy-checked peak detection, the fitter, atlas
matching, ratios, workflow, band maps and label layout) using synthetic spectra and one small
fixture per format. To run everything headless:
pip install playwright # drives your installed Chrome or Edge
python tools/run_tests.py # unit tests
python tools/check_app.py # end-to-end: samples, every fixture, exports, screenshots
python tools/check_app.py --url https://vascoesquivel.github.io/raman-studio/ # same checks on the live site
Lab files for local testing go in test-data/private/, which is gitignored.
python tools/lab_harness.py compares the app's fits there with the lab's own WiRE
curve fits (*_curvefit.wdf) and keeps its results in the same private folder.
python tools/build_reference_list.py WORKBOOK.xlsx turns a reference-peaks workbook
into a reference list for the Peaks tab; it writes only inside test-data/private/.
Module contracts are in docs/ARCHITECTURE.md.
find_peaks. The despiking noise estimate follows
Whitaker & Hayes (2018). The ALS baseline follows Eilers & Boelens (2005). The polynomial baseline
follows Lieber & Mahadevan-Jansen (2003).match_score.