diff --git a/pyproject.toml b/pyproject.toml index 9990d74..b6ffad8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -133,6 +133,7 @@ where = ["src"] [project.entry-points.'nomad.plugin'] perovskite_solar_cell = "perovskite_solar_cell_database:perovskite_solar_cell" solar_cell_app = "perovskite_solar_cell_database.apps:solar_cells" +perovskite_solar_cell_database_app = "perovskite_solar_cell_database.apps:perovskite_solar_cell_database_app" perovskite_composition = "perovskite_solar_cell_database:perovskite_composition" ion_parser = "perovskite_solar_cell_database:ion_parser" perovskite_ions_app = "perovskite_solar_cell_database.apps:perovskite_ions" \ No newline at end of file diff --git a/src/perovskite_solar_cell_database/apps/__init__.py b/src/perovskite_solar_cell_database/apps/__init__.py index 58839ef..f7c3066 100644 --- a/src/perovskite_solar_cell_database/apps/__init__.py +++ b/src/perovskite_solar_cell_database/apps/__init__.py @@ -1,6 +1,9 @@ from nomad.config.models.plugins import AppEntryPoint from perovskite_solar_cell_database.apps.perovskite_ions_app import perovskite_ions_app +from perovskite_solar_cell_database.apps.perovskite_solar_cell_database_app import ( + perovskite_database_app, +) from perovskite_solar_cell_database.apps.solar_cell_app import solar_cell_app solar_cells = AppEntryPoint( @@ -14,6 +17,14 @@ app=solar_cell_app, ) +perovskite_solar_cell_database_app = AppEntryPoint( + name='The Perovskite Solar Cell Database', + description=""" + Search Entries of the Perovskite Solar Cell Database + """, + app=perovskite_database_app, +) + perovskite_ions = AppEntryPoint( name='Halide Perovskite Ions', description=""" diff --git a/src/perovskite_solar_cell_database/apps/perovskite_ions_app.py b/src/perovskite_solar_cell_database/apps/perovskite_ions_app.py index c1b875e..1f8dab9 100644 --- a/src/perovskite_solar_cell_database/apps/perovskite_ions_app.py +++ b/src/perovskite_solar_cell_database/apps/perovskite_ions_app.py @@ -19,8 +19,8 @@ perovskite_ions_app = App( label='Halide Perovskite Ions Database', path='perovskite-ions', - category='Halide Perovskites', - description='Search Ions Used in Halide Perovskites', + category='Solar cells', + description='Search ions used in halide perovskites compunds.', search_quantities=SearchQuantities(include=schemas), columns=[ Column(quantity='results.material.elements', selected=True), diff --git a/src/perovskite_solar_cell_database/apps/perovskite_solar_cell_database_app.py b/src/perovskite_solar_cell_database/apps/perovskite_solar_cell_database_app.py new file mode 100644 index 0000000..8d79a55 --- /dev/null +++ b/src/perovskite_solar_cell_database/apps/perovskite_solar_cell_database_app.py @@ -0,0 +1,451 @@ +from importlib.resources import files + +import yaml +from nomad.config.models.ui import ( + App, + Axis, + AxisScale, + Column, + Dashboard, + Menu, + MenuItemDefinitions, + MenuItemHistogram, + MenuItemPeriodicTable, + MenuItemTerms, + MenuSizeEnum, + ScaleEnum, + SearchQuantities, +) + +# Access the YAML file packaged in the module +try: + yaml_path = files('perovskite_solar_cell_database.apps').joinpath( + 'perovskite_solar_cell_database_dashboard.yaml' + ) + with yaml_path.open('r') as additional_file: + widgets = yaml.safe_load(additional_file) +except Exception as e: + raise RuntimeError(f'Failed to load widgets from YAML file: {e}') + + +schema = 'perovskite_solar_cell_database.schema.PerovskiteSolarCell' + +perovskite_database_app = App( + label='The Perovskite Solar Cell Database', + path='perovskite-solar-cells-database', + category='Solar cells', + description='Search entries of the perovskite solar cell database', + search_quantities=SearchQuantities(include=[f'*#{schema}']), + columns=[ + Column( + quantity='results.material.chemical_formula_descriptive', + selected=True, + label='Descriptive formula', + ), + Column( + quantity='results.properties.optoelectronic.solar_cell.efficiency', + selected=True, + format={'decimals': 2, 'mode': 'standard'}, + label='Efficiency (%)', + ), + Column( + quantity='results.properties.optoelectronic.solar_cell.open_circuit_voltage', + selected=True, + format={'decimals': 3, 'mode': 'standard'}, + unit='V', + ), + Column( + quantity='results.properties.optoelectronic.solar_cell.short_circuit_current_density', + selected=True, + format={'decimals': 3, 'mode': 'standard'}, + unit='A/m**2', + ), + Column( + quantity='results.properties.optoelectronic.solar_cell.fill_factor', + selected=True, + format={'decimals': 3, 'mode': 'standard'}, + ), + Column(quantity='references', selected=True), + Column(quantity='results.material.chemical_formula_hill', label='Formula'), + Column(quantity='results.material.structural_type'), + Column( + quantity='results.properties.optoelectronic.solar_cell.illumination_intensity', + format={'decimals': 3, 'mode': 'standard'}, + label='Illum. intensity', + unit='W/m**2', + ), + Column(quantity='results.eln.lab_ids'), + Column(quantity='results.eln.sections'), + Column(quantity='results.eln.methods'), + Column(quantity='results.eln.tags'), + Column(quantity='results.eln.instruments'), + Column(quantity='entry_name', label='Name'), + Column(quantity='entry_type'), + Column(quantity='mainfile'), + Column(quantity='upload_create_time', label='Upload time'), + Column(quantity='authors'), + Column(quantity='comment'), + Column(quantity='datasets'), + Column(quantity='published', label='Access'), + ], + menu=Menu( + items=[ + Menu( + title='Publication', + size=MenuSizeEnum.XXL, + items=[ + MenuItemTerms( + search_quantity=f'data.ref.journal#{schema}', + show_input=True, + width=6, + options=10, + title='Journal', + ), + MenuItemTerms( + search_quantity=f'data.ref.DOI_number#{schema}', + show_input=True, + width=6, + options=10, + title='DOI', + ), + MenuItemHistogram( + x=Axis( + search_quantity=f'data.ref.publication_date#{schema}', + title='Publication Date', + ) + ), + ], + ), + Menu( + title='Perovskite Material', + size=MenuSizeEnum.XXL, + items=[ + MenuItemPeriodicTable( + quantity='results.material.elements', + ), + MenuItemTerms( + search_quantity='results.material.chemical_formula_hill', + width=6, + options=0, + ), + MenuItemTerms( + search_quantity='results.material.chemical_formula_iupac', + width=6, + options=0, + ), + MenuItemTerms( + search_quantity='results.material.structural_type', + width=6, + options=2, + scale=ScaleEnum.LOG, + ), + MenuItemHistogram( + x=Axis( + search_quantity='results.properties.electronic.band_structure_electronic.band_gap.value', + scale='linear', + unit='eV', + title='Band gap', + ), + y=AxisScale( + scale=ScaleEnum.POW4, + ), + title='Band gap', + width=6, + show_input=False, + nbins=30, + ), + MenuItemTerms( + search_quantity=f'data.perovskite.composition_a_ions#{schema}', + width=4, + options=10, + title='A cations', + ), + MenuItemTerms( + search_quantity=f'data.perovskite.composition_b_ions#{schema}', + width=4, + options=10, + title='B cations', + ), + MenuItemTerms( + search_quantity=f'data.perovskite.composition_c_ions#{schema}', + width=4, + options=10, + title='X anions', + ), + ], + ), + Menu( + title='Perovskite Fabrication', + size=MenuSizeEnum.SM, + items=[ + MenuItemTerms( + search_quantity=f'data.perovskite_deposition.procedure#{schema}', + options=10, + ), + MenuItemTerms( + search_quantity=f'data.perovskite_deposition.solvents#{schema}', + options=10, + ), + MenuItemTerms( + search_quantity=f'data.perovskite.additives_compounds#{schema}', + options=10, + ), + ], + ), + Menu( + title='Device Architecture', + size=MenuSizeEnum.MD, + items=[ + MenuItemHistogram( + x=Axis( + search_quantity=f'data.cell.area_total#{schema}', + scale=ScaleEnum.LOG, + title='Total area', + unit='cm**2', + ), + y=AxisScale( + scale=ScaleEnum.POW4, + ), + title='Total area', + show_input=False, + nbins=30, + ), + MenuItemHistogram( + x=Axis( + search_quantity='data.cell.area_measured#perovskite_solar_cell_database.schema.PerovskiteSolarCell', + scale=ScaleEnum.LOG, + title='Measured area', + unit='cm**2', + ), + y=AxisScale( + scale=ScaleEnum.POW4, + ), + title='Measured area', + show_input=False, + nbins=30, + ), + MenuItemTerms( + search_quantity='results.properties.optoelectronic.solar_cell.device_stack', + options=10, + ), + MenuItemTerms( + search_quantity=f'data.cell.architecture#{schema}', + options=3, + ), + ], + ), + Menu( + title='Transport Layers', + size=MenuSizeEnum.XXL, + items=[ + MenuItemTerms( + search_quantity='results.properties.optoelectronic.solar_cell.hole_transport_layer', + show_input=True, + width=6, + options=10, + title='Hole transport layer (HTL)', + ), + MenuItemTerms( + search_quantity='results.properties.optoelectronic.solar_cell.electron_transport_layer', + show_input=True, + width=6, + options=10, + title='Electron transport layer (ETL)', + ), + MenuItemTerms( + search_quantity=f'data.htl.deposition_procedure#{schema}', + show_input=True, + width=6, + options=10, + title='HTL deposition method', + ), + MenuItemTerms( + search_quantity=f'data.etl.deposition_procedure#{schema}', + show_input=True, + width=6, + options=10, + title='ETL deposition method', + ), + ], + ), + Menu( + title='Solar Cell Performance', + size=MenuSizeEnum.XXL, + items=[ + MenuItemHistogram( + x=Axis( + search_quantity='results.properties.optoelectronic.solar_cell.efficiency', + title='Efficiency (%)', + ), + y=AxisScale( + scale=ScaleEnum.LINEAR, + ), + title='Efficiency', + width=6, + show_input=True, + nbins=30, + ), + MenuItemHistogram( + x=Axis( + search_quantity='results.properties.optoelectronic.solar_cell.open_circuit_voltage', + scale=ScaleEnum.LINEAR, + title='Voc', + ), + y=AxisScale( + scale=ScaleEnum.LINEAR, + ), + title='Voc', + width=6, + show_input=True, + nbins=30, + ), + MenuItemHistogram( + x=Axis( + search_quantity='results.properties.optoelectronic.solar_cell.short_circuit_current_density', + title='Jsc', + unit='mA/cm**2', + ), + y=AxisScale( + scale=ScaleEnum.LINEAR, + ), + title='Jsc', + width=6, + show_input=True, + nbins=30, + ), + MenuItemHistogram( + x=Axis( + search_quantity='results.properties.optoelectronic.solar_cell.fill_factor', + scale=ScaleEnum.LINEAR, + title='Fill factor', + ), + y=AxisScale( + scale=ScaleEnum.LINEAR, + ), + title='Fill factor', + width=6, + show_input=True, + nbins=30, + ), + MenuItemHistogram( + x=Axis( + search_quantity='results.properties.optoelectronic.solar_cell.illumination_intensity', + scale=ScaleEnum.LINEAR, + title='Illumination intensity', + unit='mW/cm^2', + ), + y=AxisScale( + scale=ScaleEnum.LINEAR, + ), + title='Illumination intensity', + width=6, + show_input=True, + nbins=30, + ), + MenuItemHistogram( + x=Axis( + search_quantity=f'data.eqe.integrated_Jsc#{schema}', + scale=ScaleEnum.LINEAR, + title='Integrated Jsc (EQE)', + unit='mA/cm**2', + ), + y=AxisScale( + scale=ScaleEnum.LINEAR, + ), + title='Integrated Jsc (EQE)', + width=6, + show_input=True, + nbins=30, + ), + ], + ), + Menu( + title='Stability', + size=MenuSizeEnum.MD, + items=[ + MenuItemHistogram( + x=Axis( + search_quantity=f'data.stability.PCE_T80#{schema}', + title='PCE T80', + unit='hour', + ), + y=AxisScale( + scale=ScaleEnum.LINEAR, + ), + title='PCE T80', + show_input=True, + nbins=30, + ), + MenuItemHistogram( + x=Axis( + search_quantity=f'data.stability.PCE_T95#{schema}', + title='PCE T95', + unit='hour', + ), + y=AxisScale( + scale=ScaleEnum.LINEAR, + ), + title='PCE T95', + show_input=True, + nbins=30, + ), + MenuItemHistogram( + x=Axis( + search_quantity=f'data.stability.PCE_initial_value#{schema}', + scale=ScaleEnum.LINEAR, + title='PCE initial value', + ), + y=AxisScale( + scale=ScaleEnum.LINEAR, + ), + title='PCE initial value', + show_input=True, + nbins=30, + ), + MenuItemHistogram( + x=Axis( + search_quantity=f'data.stability.PCE_end_of_experiment#{schema}', + title='PCE end of experiment', + ), + y=AxisScale( + scale=ScaleEnum.LINEAR, + ), + title='PCE end of experiment', + show_input=True, + nbins=30, + ), + MenuItemHistogram( + x=Axis( + search_quantity=f'data.stabilised.performance_measurement_time#{schema}', + scale=ScaleEnum.LOG, + title='Stabilized performance measurement time', + unit='hour', + ), + y=AxisScale( + scale=ScaleEnum.LINEAR, + ), + title='Stabilized performance measurement time', + show_input=True, + nbins=30, + ), + MenuItemHistogram( + x=Axis( + search_quantity=f'data.stability.PCE_after_1000_h#{schema}', + scale=ScaleEnum.LINEAR, + title='PCE after 1000 h', + ), + y=AxisScale( + scale=ScaleEnum.LINEAR, + ), + title='PCE after 1000 h', + show_input=True, + nbins=30, + ), + MenuItemDefinitions(show_header=False), + ], + ), + ] + ), + dashboard=Dashboard.parse_obj(widgets), + filters_locked={'section_defs.definition_qualified_name': [f'{schema}']}, +) diff --git a/src/perovskite_solar_cell_database/apps/perovskite_solar_cell_database_dashboard.yaml b/src/perovskite_solar_cell_database/apps/perovskite_solar_cell_database_dashboard.yaml new file mode 100644 index 0000000..80b3b18 --- /dev/null +++ b/src/perovskite_solar_cell_database/apps/perovskite_solar_cell_database_dashboard.yaml @@ -0,0 +1,199 @@ +widgets: + - type: scatter_plot + autorange: true + size: 1000 + markers: + color: + search_quantity: results.properties.optoelectronic.solar_cell.device_architecture + y: + search_quantity: results.properties.optoelectronic.solar_cell.open_circuit_voltage + title: "" + x: + search_quantity: results.properties.electronic.band_gap[0].value + title: Bandgap + title: "" + layout: + xxl: + minH: 3 + minW: 3 + h: 6 + w: 9 + y: 0 + x: 27 + xl: + minH: 3 + minW: 3 + h: 6 + w: 7 + y: 0 + x: 21 + lg: + minH: 3 + minW: 3 + h: 6 + w: 6 + y: 0 + x: 6 + md: + minH: 3 + minW: 3 + h: 5 + w: 9 + y: 0 + x: 9 + sm: + minH: 3 + minW: 3 + h: 4 + w: 6 + y: 0 + x: 6 + - type: scatter_plot + autorange: true + size: 1000 + markers: + color: + search_quantity: results.properties.optoelectronic.solar_cell.device_architecture + y: + search_quantity: results.properties.optoelectronic.solar_cell.efficiency + title: Efficiency (%) + x: + search_quantity: results.properties.electronic.band_gap[0].value + title: Bandgap + title: "" + layout: + xxl: + minH: 3 + minW: 3 + h: 6 + w: 9 + y: 0 + x: 18 + xl: + minH: 3 + minW: 3 + h: 6 + w: 7 + y: 0 + x: 14 + lg: + minH: 3 + minW: 3 + h: 6 + w: 6 + y: 0 + x: 0 + md: + minH: 3 + minW: 3 + h: 5 + w: 9 + y: 0 + x: 0 + sm: + minH: 3 + minW: 3 + h: 4 + w: 6 + y: 0 + x: 0 + - type: scatter_plot + autorange: true + size: 1000 + markers: + color: + search_quantity: results.properties.optoelectronic.solar_cell.device_architecture + y: + search_quantity: results.properties.optoelectronic.solar_cell.short_circuit_current_density + title: "" + unit: mA / cm^2 + x: + search_quantity: results.properties.electronic.band_gap[0].value + title: Bandgap + title: "" + layout: + xxl: + minH: 3 + minW: 3 + h: 6 + w: 9 + y: 0 + x: 9 + xl: + minH: 3 + minW: 3 + h: 6 + w: 7 + y: 0 + x: 7 + lg: + minH: 3 + minW: 3 + h: 6 + w: 6 + y: 0 + x: 12 + md: + minH: 3 + minW: 3 + h: 5 + w: 9 + y: 5 + x: 0 + sm: + minH: 3 + minW: 3 + h: 4 + w: 6 + y: 4 + x: 0 + - type: scatter_plot + autorange: true + size: 1000 + markers: + color: + search_quantity: results.properties.optoelectronic.solar_cell.device_architecture + title: " " + y: + search_quantity: results.properties.optoelectronic.solar_cell.fill_factor + title: "" + x: + search_quantity: results.properties.electronic.band_gap[0].value + title: Bandgap + title: "" + layout: + xxl: + minH: 3 + minW: 3 + h: 6 + w: 9 + y: 0 + x: 0 + xl: + minH: 3 + minW: 3 + h: 6 + w: 7 + y: 0 + x: 0 + lg: + minH: 3 + minW: 3 + h: 6 + w: 6 + y: 0 + x: 18 + md: + minH: 3 + minW: 3 + h: 5 + w: 9 + y: 5 + x: 9 + sm: + minH: 3 + minW: 3 + h: 4 + w: 6 + y: 4 + x: 6 diff --git a/src/perovskite_solar_cell_database/apps/solar_cell_app.py b/src/perovskite_solar_cell_database/apps/solar_cell_app.py index 4ad4cdb..4f6dda6 100644 --- a/src/perovskite_solar_cell_database/apps/solar_cell_app.py +++ b/src/perovskite_solar_cell_database/apps/solar_cell_app.py @@ -4,8 +4,8 @@ """ label: Solar Cells path: solarcells -category: Halide Perovskites -description: Search solar cells +category: Solar cells +description: Search general solar cells readme: 'This page allows you to search **solar cell data** within NOMAD. The filter menu on the left and the shown default columns are specifically designed for solar cell diff --git a/src/perovskite_solar_cell_database/composition.py b/src/perovskite_solar_cell_database/composition.py index 2be94c0..05f23a3 100644 --- a/src/perovskite_solar_cell_database/composition.py +++ b/src/perovskite_solar_cell_database/composition.py @@ -274,6 +274,8 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger') -> None: cas_number=self.cas_number, name=self.common_name, ) + if isinstance(self.pure_substance, PubChemPureSubstanceSection): + pure_substance.pub_chem_cid = self.pure_substance.pub_chem_cid pure_substance.normalize(archive, logger) if self.molecular_formula is None: self.molecular_formula = pure_substance.molecular_formula @@ -297,6 +299,8 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger') -> None: iupac_name=self.source_compound_iupac_name, cas_number=self.source_compound_cas_number, ) + if isinstance(self.source_compound, PubChemPureSubstanceSection): + source_compound.pub_chem_cid = self.source_compound.pub_chem_cid source_compound.normalize(archive, logger) if self.source_compound_molecular_formula is None: self.source_compound_molecular_formula = source_compound.molecular_formula @@ -463,9 +467,9 @@ class PerovskiteIonComponent(SystemComponent, PerovskiteIonSection): ) ) coefficient = Quantity( - type=float, + type=str, description='The stoichiometric coefficient', - a_eln=ELNAnnotation(component=ELNComponentEnum.NumberEditQuantity), + a_eln=ELNAnnotation(component=ELNComponentEnum.StringEditQuantity), shape=[], ) system = Quantity( @@ -692,7 +696,7 @@ class Impurity(PureSubstanceComponent, PerovskiteChemicalSection): type=float, description='The concentration of the additive or impurity.', a_eln=ELNAnnotation( - component=ELNComponentEnum.NumberEditQuantity, defaultDisplayUnit='mol%' + component=ELNComponentEnum.NumberEditQuantity, defaultDisplayUnit='cm^-3' ), unit='cm^-3', shape=[], @@ -720,6 +724,8 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger') -> None: iupac_name=self.iupac_name, cas_number=self.cas_number, ) + if isinstance(self.pure_substance, PubChemPureSubstanceSection): + pure_substance.pub_chem_cid = self.pure_substance.pub_chem_cid pure_substance.normalize(archive, logger) if self.molecular_formula is None: self.molecular_formula = pure_substance.molecular_formula @@ -731,6 +737,7 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger') -> None: self.cas_number = pure_substance.cas_number if self.common_name is None: self.common_name = pure_substance.name + self.pure_substance = pure_substance super().normalize(archive, logger) @@ -831,12 +838,10 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger') -> None: self.short_form += ion.abbreviation if ion.coefficient is None: continue - if ion.coefficient == 1: + if ion.coefficient == '1': coefficient_str = '' - elif ion.coefficient == int(ion.coefficient): - coefficient_str = str(int(ion.coefficient)) else: - coefficient_str = f'{ion.coefficient:.2}' + coefficient_str = ion.coefficient self.long_form += f'{ion.abbreviation}{coefficient_str}' if not isinstance(ion.molecular_formula, str): continue @@ -862,6 +867,7 @@ def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger') -> None: label='Perovskite Composition', description='A system describing the chemistry and components of the perovskite.', system_relation=Relation(type='root'), + chemical_formula_descriptive=self.long_form, ) parent_system.structural_type = archive.results.material.structural_type diff --git a/src/perovskite_solar_cell_database/parser.py b/src/perovskite_solar_cell_database/parser.py index 3e5743a..96b2eb6 100644 --- a/src/perovskite_solar_cell_database/parser.py +++ b/src/perovskite_solar_cell_database/parser.py @@ -1,3 +1,5 @@ +import time + import numpy as np import pandas as pd from nomad.datamodel import EntryArchive @@ -38,6 +40,7 @@ def parse( ion.source_compound_iupac_name = row['source_compound_iupac_name'] ion.source_compound_smiles = row['source_compound_smiles'] ion.source_compound_cas_number = row['source_compound_cas_number'] + time.sleep(1) # Waiting to avoid rate limiting create_archive( ion, archive, f'{row["abbreviation"]}_perovskite_ion.archive.json' ) diff --git a/src/perovskite_solar_cell_database/schema_sections/perovskite.py b/src/perovskite_solar_cell_database/schema_sections/perovskite.py index ce77059..6044cc5 100644 --- a/src/perovskite_solar_cell_database/schema_sections/perovskite.py +++ b/src/perovskite_solar_cell_database/schema_sections/perovskite.py @@ -5933,14 +5933,12 @@ class Perovskite(ArchiveSection): ) band_gap_graded = Quantity( - type=str, + type=bool, shape=[], description=""" TRUE if the band gap varies as a function of the vertical position in the perovskite layer. """, - a_eln=dict( - component='EnumEditQuantity', props=dict(suggestions=['true', 'false']) - ), + a_eln=dict(component='BoolEditQuantity'), ) band_gap_estimation_basis = Quantity( diff --git a/tests/apps/test_solar_perovskite_solar_cell_database_app.py b/tests/apps/test_solar_perovskite_solar_cell_database_app.py new file mode 100644 index 0000000..d85ddd7 --- /dev/null +++ b/tests/apps/test_solar_perovskite_solar_cell_database_app.py @@ -0,0 +1,5 @@ +def test_importing_app(): + # This will raise an exception if pydantic model validation fails for the app + from perovskite_solar_cell_database.apps.perovskite_solar_cell_database_app import ( # type: ignore + perovskite_database_app, # noqa: F401 + ) diff --git a/tests/data/example.archive.json b/tests/data/example.archive.json index a4a340a..85d2a98 100644 --- a/tests/data/example.archive.json +++ b/tests/data/example.archive.json @@ -73,7 +73,7 @@ "composition_leadfree": false, "additives_compounds": "Cl", "band_gap": 1.6, - "band_gap_graded": "false", + "band_gap_graded": false, "band_gap_estimation_basis": "Composition", "storage_time_until_next_deposition_step": "Unknown", "storage_atmosphere": "Unknown" diff --git a/tests/data/perovskite_ions.xlsx b/tests/data/perovskite_ions.xlsx index 4f407a4..781334c 100644 Binary files a/tests/data/perovskite_ions.xlsx and b/tests/data/perovskite_ions.xlsx differ diff --git a/tests/data/perovskite_ions_reduced.xlsx b/tests/data/perovskite_ions_reduced.xlsx index 738ffad..8ec60db 100644 Binary files a/tests/data/perovskite_ions_reduced.xlsx and b/tests/data/perovskite_ions_reduced.xlsx differ