Skip to content
Snippets Groups Projects
Verified Commit bf7cd145 authored by Valentin Bruch's avatar Valentin Bruch
Browse files

data management: basic saving of nontrivial fourier_coef

parent e2627291
No related branches found
No related tags found
No related merge requests found
...@@ -231,6 +231,10 @@ class KondoExport: ...@@ -231,6 +231,10 @@ class KondoExport:
pass pass
return results return results
@property
def fourier_coef(self):
return self.kondo.fourier_coef
def data(self, include='all'): def data(self, include='all'):
""" """
dictionary of Floquet matrices as numpy arrays. dictionary of Floquet matrices as numpy arrays.
...@@ -425,6 +429,8 @@ class KondoExport: ...@@ -425,6 +429,8 @@ class KondoExport:
data = self.data(include) data = self.data(include)
for key, value in data.items(): for key, value in data.items():
h5file.create_array(datagroup, key, value) h5file.create_array(datagroup, key, value)
if self.fourier_coef is not None:
h5file.create_array(datagroup, "fourier_coef", np.array(self.fourier_coef))
h5file.flush() h5file.flush()
finally: finally:
h5file.close() h5file.close()
...@@ -566,6 +572,12 @@ class KondoImport: ...@@ -566,6 +572,12 @@ class KondoImport:
pass pass
return results return results
@property
def fourier_coef(self):
if "fouier_coef" in self._datanode:
return self._datanode.fourier_coef.read()
return None
def __getitem__(self, name): def __getitem__(self, name):
if name in self.metadata: if name in self.metadata:
return self.metadata[name] return self.metadata[name]
...@@ -644,12 +656,36 @@ class DataManager: ...@@ -644,12 +656,36 @@ class DataManager:
db.Column('padding', db.SMALLINT()), db.Column('padding', db.SMALLINT()),
db.Column('voltage_branches', db.SMALLINT()), db.Column('voltage_branches', db.SMALLINT()),
db.Column('resonant_dc_shift', db.SMALLINT()), db.Column('resonant_dc_shift', db.SMALLINT()),
db.Column('solver_flags', db.SMALLINT()), # unfortunately SET is not available in SQLite db.Column('solver_flags', db.SMALLINT()),
db.Column('integral_method', db.SMALLINT()), db.Column('integral_method', db.SMALLINT()),
db.Column('dirname', db.String(256)), db.Column('dirname', db.String(256)),
db.Column('basename', db.String(128)), db.Column('basename', db.String(128)),
db.Column('fourier_coef_id', db.INTEGER(), default=-1),
) )
self.table.create(bind=connection) self.table.create(bind=connection)
try:
self.fourier_coef_table = db.Table('fourier_coef', self.metadata, autoload=True, autoload_with=self.engine)
except db.exc.NoSuchTableError:
with self.engine.begin() as connection:
settings.logger.info('Creating database table fourier_coef')
self.fourier_coef_table = db.Table(
'fourier_coef',
self.metadata,
db.Column('id', db.INTEGER(), primary_key=True),
db.Column('fc00', db.FLOAT(), default=0.),
db.Column('fc01', db.FLOAT(), default=0.),
db.Column('fc02', db.FLOAT(), default=0.),
db.Column('fc03', db.FLOAT(), default=0.),
db.Column('fc04', db.FLOAT(), default=0.),
db.Column('fc05', db.FLOAT(), default=0.),
db.Column('fc06', db.FLOAT(), default=0.),
db.Column('fc07', db.FLOAT(), default=0.),
db.Column('fc08', db.FLOAT(), default=0.),
db.Column('fc09', db.FLOAT(), default=0.),
db.Column('fc10', db.FLOAT(), default=0.),
db.Column('fc11', db.FLOAT(), default=0.),
)
self.fourier_coef_table.create(bind=connection)
def insert_from_h5file(self, filename): def insert_from_h5file(self, filename):
""" """
...@@ -685,8 +721,16 @@ class DataManager: ...@@ -685,8 +721,16 @@ class DataManager:
timestamp = datetime.fromtimestamp(metadata.pop("timestamp")).isoformat().replace('T', ' '), timestamp = datetime.fromtimestamp(metadata.pop("timestamp")).isoformat().replace('T', ' '),
dirname = dirname, dirname = dirname,
basename = basename, basename = basename,
fourier_coef_id = -1,
) )
metadata.update(dataset.main_results) metadata.update(dataset.main_results)
fourier_coef = dataset.fourier_coef
if fourier_coef is not None:
stmt = self.fourier_coef_table.insert(values={'fc%02d'%i:f for i,f in enumerate(dataset.fourier_coef[:12])})
with self.engine.begin() as connection:
result = connection.execute(stmt)
connection.commit()
metadata.update(fourier_coef_id = result.inserted_primary_key)
datasets.append(metadata) datasets.append(metadata)
try: try:
if not dataset._owns_h5file: if not dataset._owns_h5file:
...@@ -718,6 +762,13 @@ class DataManager: ...@@ -718,6 +762,13 @@ class DataManager:
dirname = os.path.dirname(filename), dirname = os.path.dirname(filename),
basename = os.path.basename(filename), basename = os.path.basename(filename),
) )
fourier_coef = kondo.fourier_coef
if fourier_coef is not None:
stmt = self.fourier_coef_table.insert(values={'fc%02d'%i:f for i,f in enumerate(fourier_coef[:12])})
with self.engine.begin() as connection:
result = connection.execute(stmt)
connection.commit()
metadata.update(fourier_coef_id = result.inserted_primary_key)
frame = pd.DataFrame(metadata, index=[0]) frame = pd.DataFrame(metadata, index=[0])
frame.to_sql( frame.to_sql(
'datapoints', 'datapoints',
......
...@@ -29,13 +29,14 @@ def benchmark_kondo(parameters, solver_opts, save=False): ...@@ -29,13 +29,14 @@ def benchmark_kondo(parameters, solver_opts, save=False):
def main(list_length=100): def main(list_length=100):
solver_opts = dict(rtol=1e-8, atol=1e-10) solver_opts = dict(rtol=1e-8, atol=1e-10)
parameter_dicts = [ parameter_dicts = [
dict(nmax=12, voltage_branches=4, omega=10., d=1e9, vac= 5., vdc=4., unitary_transformation=False, padding= 0, compact=0, include_Ga=True, solve_integral_exactly=True, integral_method=-1),
dict(nmax=12, voltage_branches=4, omega=10., d=1e9, vac= 5., vdc=4., unitary_transformation=False, padding= 0, compact=0), dict(nmax=12, voltage_branches=4, omega=10., d=1e9, vac= 5., vdc=4., unitary_transformation=False, padding= 0, compact=0),
#dict(nmax=12, voltage_branches=4, omega=10., d=1e9, vac= 5., vdc=4., unitary_transformation= True, padding= 0, compact=0), dict(nmax=12, voltage_branches=4, omega=10., d=1e9, vac= 5., vdc=4., unitary_transformation= True, padding= 0, compact=0),
#dict(nmax=12, voltage_branches=4, omega=10., d=1e9, vac= 5., vdc=4., unitary_transformation= True, padding= 8, compact=0), #dict(nmax=12, voltage_branches=4, omega=10., d=1e9, vac= 5., vdc=4., unitary_transformation= True, padding= 8, compact=0),
#dict(nmax=24, voltage_branches=4, omega=10., d=1e9, vac=12., vdc=6., unitary_transformation=False, padding= 0, compact=0), #dict(nmax=24, voltage_branches=4, omega=10., d=1e9, vac=12., vdc=6., unitary_transformation=False, padding= 0, compact=0),
#dict(nmax=24, voltage_branches=4, omega=10., d=1e9, vac=12., vdc=6., unitary_transformation= True, padding= 0, compact=0), #dict(nmax=24, voltage_branches=4, omega=10., d=1e9, vac=12., vdc=6., unitary_transformation= True, padding= 0, compact=0),
#dict(nmax=24, voltage_branches=4, omega=10., d=1e9, vac=12., vdc=6., unitary_transformation= True, padding=16, compact=0), #dict(nmax=24, voltage_branches=4, omega=10., d=1e9, vac=12., vdc=6., unitary_transformation= True, padding=16, compact=0),
#dict(nmax=24, voltage_branches=0, omega=10., d=1e9, vac=12., vdc=0., unitary_transformation= True, padding=16, compact=0), dict(nmax=24, voltage_branches=0, omega=10., d=1e9, vac=12., vdc=0., unitary_transformation= True, padding=16, compact=0),
dict(nmax=32, voltage_branches=0, omega=10., d=1e9, vac=20., vdc=0., unitary_transformation= True, padding=24, compact=2), dict(nmax=32, voltage_branches=0, omega=10., d=1e9, vac=20., vdc=0., unitary_transformation= True, padding=24, compact=2),
#dict(nmax=128, voltage_branches=0, omega=10., d=1e9, vac=150., vdc=0., unitary_transformation=True, padding=80, compact=2), #dict(nmax=128, voltage_branches=0, omega=10., d=1e9, vac=150., vdc=0., unitary_transformation=True, padding=80, compact=2),
] ]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment