periodic_table / DataManager.js
AK51's picture
Upload 18 files
ab59545 verified
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;
}
}