Spaces:
Running
Running
| export class DataManager { | |
| constructor() { | |
| this.elementsData = new Map(); | |
| } | |
| async loadSpectralData(dataUrl) { | |
| try { | |
| const response = await fetch(dataUrl); | |
| if (!response.ok) { | |
| throw new Error(`Failed to load spectral data: ${response.statusText}`); | |
| } | |
| const data = await response.json(); | |
| if (!this.validateData(data)) { | |
| throw new Error('Invalid spectral data format'); | |
| } | |
| // Store elements in a Map for quick lookup | |
| data.elements.forEach(element => { | |
| this.elementsData.set(element.symbol, element); | |
| }); | |
| return true; | |
| } catch (error) { | |
| console.error('Error loading spectral data:', error); | |
| throw error; | |
| } | |
| } | |
| getElementData(symbol) { | |
| return this.elementsData.get(symbol) || null; | |
| } | |
| getAllElements() { | |
| return Array.from(this.elementsData.keys()); | |
| } | |
| validateData(data) { | |
| if (!data || !Array.isArray(data.elements)) { | |
| return false; | |
| } | |
| for (const element of data.elements) { | |
| if (!element.symbol || !element.name || !element.atomicNumber) { | |
| return false; | |
| } | |
| if (!Array.isArray(element.spectralLines)) { | |
| return false; | |
| } | |
| } | |
| return true; | |
| } | |
| validateWavelength(wavelength) { | |
| return wavelength >= 10 && wavelength <= 10000; | |
| } | |
| } | |