def get_dos_from_id(self, task_id): """ Overrides the get_dos_from_id for the MIT gridfs format. """ args = {'task_id': task_id} fields = ['calculations'] structure = self.get_structure_from_id(task_id) dosid = None for r in self.query(fields, args): dosid = r['calculations'][-1]['dos_fs_id'] if dosid is not None: self._fs = gridfs.GridFS(self.db, 'dos_fs') with self._fs.get(dosid) as dosfile: s = dosfile.read() try: d = json.loads(s) except: s = zlib.decompress(s) d = json.loads(s.decode("utf-8")) tdos = Dos.from_dict(d) pdoss = {} for i in range(len(d['pdos'])): ados = d['pdos'][i] all_ados = {} for j in range(len(ados)): orb = Orbital(j) odos = ados[str(orb)] all_ados[orb] = {Spin(int(k)): v for k, v in odos['densities'].items()} pdoss[structure[i]] = all_ados return CompleteDos(structure, tdos, pdoss) return None
def get_dos_from_id(self, task_id): """ Overrides the get_dos_from_id for the MIT gridfs format. """ args = {'task_id': task_id} fields = ['calculations'] structure = self.get_structure_from_id(task_id) dosid = None for r in self.query(fields, args): dosid = r['calculations'][-1]['dos_fs_id'] if dosid != None: self._fs = gridfs.GridFS(self.db, 'dos_fs') with self._fs.get(dosid) as dosfile: s = dosfile.read() try: d = json.loads(s) except: s = zlib.decompress(s) d = json.loads(s) tdos = Dos.from_dict(d) pdoss = {} for i in range(len(d['pdos'])): ados = d['pdos'][i] all_ados = {} for j in range(len(ados)): orb = Orbital.from_vasp_index(j) odos = ados[str(orb)] all_ados[orb] = {Spin.from_int(int(k)): v for k, v in odos['densities'].items()} pdoss[structure[i]] = all_ados return CompleteDos(structure, tdos, pdoss) return None
def get_dos(db_file): """ return density of states object from the database """ d1, d2, d3, d4 = get_collections(db_file) db = get_db(db_file) fs = gridfs.GridFS(db, 'dos_fs') dos_fs_id = d4["calcs_reversed"][0]["dos_fs_id"] dos_json = zlib.decompress(fs.get(dos_fs_id).read()) dos_dict = json.loads(dos_json.decode()) return Dos.from_dict(dos_dict)
def from_dict(data): def _make_float_array(a): res = [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]] for i in range(3): for j in range(3): res[i][j] = float(a[i][j]) return res def _make_float_hall(a): return [i for i in a[:27]] return BoltztrapAnalyzer( float(data['gap']), [float(d) for d in data['mu_steps']], {int(d): [_make_float_array(v) for v in data['cond'][d]] for d in data['cond']}, {int(d): [_make_float_array(v) for v in data['seebeck'][d]] for d in data['seebeck']}, {int(d): [_make_float_array(v) for v in data['kappa'][d]] for d in data['kappa']}, {int(d): [_make_float_hall(v) for v in data['hall'][d]] for d in data['hall']}, {'p': [float(d) for d in data['doping']['p']], 'n': [float(d) for d in data['doping']['n']]}, {'p': {int(d): [float(v) for v in data['mu_doping']['p'][d]] for d in data['mu_doping']['p']}, 'n': {int(d): [float(v) for v in data['mu_doping']['n'][d]] for d in data['mu_doping']['n']}}, {'p': {int(d): [_make_float_array(v) for v in data['seebeck_doping']['p'][d]] for d in data['seebeck_doping']['p']}, 'n': {int(d): [_make_float_array(v) for v in data['seebeck_doping']['n'][d]] for d in data['seebeck_doping']['n']}}, {'p': {int(d): [_make_float_array(v) for v in data['cond_doping']['p'][d]] for d in data['cond_doping']['p']}, 'n': {int(d): [_make_float_array(v) for v in data['cond_doping']['n'][d]] for d in data['cond_doping']['n']}}, {'p': {int(d): [_make_float_array(v) for v in data['kappa_doping']['p'][d]] for d in data['kappa_doping']['p']}, 'n': {int(d): [_make_float_array(v) for v in data['kappa_doping']['n'][d]] for d in data['kappa_doping']['n']}}, {'p': {int(d): [_make_float_hall(v) for v in data['hall_doping']['p'][d]] for d in data['hall_doping']['p']}, 'n': {int(d): [_make_float_hall(v) for v in data['hall_doping']['n'][d]] for d in data['hall_doping']['n']}}, Dos.from_dict(data['dos']), data['carrier_conc'], data['dos_partial'], data['vol'], str(data['warning']))
def from_dict(data): def _make_float_array(a): res = [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]] for i in range(3): for j in range(3): res[i][j] = float(a[i][j]) return res def _make_float_hall(a): return [i for i in a[:27]] return BoltztrapAnalyzer( float(data['gap']), [float(d) for d in data['mu_steps']], {int(d): [_make_float_array(v) for v in data['cond'][d]] for d in data['cond']}, {int(d): [_make_float_array(v) for v in data['seebeck'][d]] for d in data['seebeck']}, {int(d): [_make_float_array(v) for v in data['kappa'][d]] for d in data['kappa']}, {int(d): [_make_float_hall(v) for v in data['hall'][d]] for d in data['hall']}, {'p': [float(d) for d in data['doping']['p']], 'n': [float(d) for d in data['doping']['n']]}, {'p': {int(d): [float(v) for v in data['mu_doping']['p'][d]] for d in data['mu_doping']['p']}, 'n': {int(d): [float(v) for v in data['mu_doping']['n'][d]] for d in data['mu_doping']['n']}}, {'p': {int(d): [_make_float_array(v) for v in data['seebeck_doping']['p'][d]] for d in data['seebeck_doping']['p']}, 'n': {int(d): [_make_float_array(v) for v in data['seebeck_doping']['n'][d]] for d in data['seebeck_doping']['n']}}, {'p': {int(d): [_make_float_array(v) for v in data['cond_doping']['p'][d]] for d in data['cond_doping']['p']}, 'n': {int(d): [_make_float_array(v) for v in data['cond_doping']['n'][d]] for d in data['cond_doping']['n']}}, {'p': {int(d): [_make_float_array(v) for v in data['kappa_doping']['p'][d]] for d in data['kappa_doping']['p']}, 'n': {int(d): [_make_float_array(v) for v in data['kappa_doping']['n'][d]] for d in data['kappa_doping']['n']}}, {'p': {int(d): [_make_float_hall(v) for v in data['hall_doping']['p'][d]] for d in data['hall_doping']['p']}, 'n': {int(d): [_make_float_hall(v) for v in data['hall_doping']['n'][d]] for d in data['hall_doping']['n']}}, Dos.from_dict(data['dos']), data['dos_partial'], data['carrier_conc'], data['vol'], str(data['warning']))
def from_dict(data): def _make_float_array(a): res = [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]] for i in range(3): for j in range(3): res[i][j] = float(a[i][j]) return res def _make_float_hall(a): return [i for i in a[:27]] return BoltztrapAnalyzer( float(data["gap"]), [float(d) for d in data["mu_steps"]], {int(d): [_make_float_array(v) for v in data["cond"][d]] for d in data["cond"]}, {int(d): [_make_float_array(v) for v in data["seebeck"][d]] for d in data["seebeck"]}, {int(d): [_make_float_array(v) for v in data["kappa"][d]] for d in data["kappa"]}, {int(d): [_make_float_hall(v) for v in data["hall"][d]] for d in data["hall"]}, {"p": [float(d) for d in data["doping"]["p"]], "n": [float(d) for d in data["doping"]["n"]]}, { "p": {int(d): [float(v) for v in data["mu_doping"]["p"][d]] for d in data["mu_doping"]["p"]}, "n": {int(d): [float(v) for v in data["mu_doping"]["n"][d]] for d in data["mu_doping"]["n"]}, }, { "p": { int(d): [_make_float_array(v) for v in data["seebeck_doping"]["p"][d]] for d in data["seebeck_doping"]["p"] }, "n": { int(d): [_make_float_array(v) for v in data["seebeck_doping"]["n"][d]] for d in data["seebeck_doping"]["n"] }, }, { "p": { int(d): [_make_float_array(v) for v in data["cond_doping"]["p"][d]] for d in data["cond_doping"]["p"] }, "n": { int(d): [_make_float_array(v) for v in data["cond_doping"]["n"][d]] for d in data["cond_doping"]["n"] }, }, { "p": { int(d): [_make_float_array(v) for v in data["kappa_doping"]["p"][d]] for d in data["kappa_doping"]["p"] }, "n": { int(d): [_make_float_array(v) for v in data["kappa_doping"]["n"][d]] for d in data["kappa_doping"]["n"] }, }, { "p": { int(d): [_make_float_hall(v) for v in data["hall_doping"]["p"][d]] for d in data["hall_doping"]["p"] }, "n": { int(d): [_make_float_hall(v) for v in data["hall_doping"]["n"][d]] for d in data["hall_doping"]["n"] }, }, Dos.from_dict(data["dos"]), data["carrier_conc"], data["dos_partial"], data["vol"], str(data["warning"]), )
def setUp(self): with open(os.path.join(test_dir, "complete_dos.json"), "r") as f: self.dos = Dos.from_dict(json.load(f))