TEdb project on Starrydata

日本熱電学会の熱電特性データベースWGが主催する、学術論文からの熱電特性データベース構築プロジェクトのブログです。

pymatgenのCompositionクラスの機能

pymatgenのCompositionクラスには組成式関係のよく使う機能がいろいろと実装済みです。

from pymatgen import Composition

composition_str="As2Se4Cu2"
comp=Composition(composition_str)

print("comp=",comp)
print("comp.element_composition:",comp.element_composition)
print("comp.fractional_composition:",comp.fractional_composition)
print("comp.reduced_composition:",comp.reduced_composition)
print("")
print("comp.formula:",comp.formula)
print("comp.alphabetical_formula:",comp.alphabetical_formula)
print("comp.reduced_formula:",comp.reduced_formula)
print("comp.anonymized_formula:",comp.anonymized_formula)
print("")
print("comp.num_atoms:",comp.num_atoms)
print("comp.elements:",comp.elements)
print("comp.weight:",comp.weight)
print("comp.average_electroneg:",comp.average_electroneg)
print("comp.get_atomic_fraction(\"Se\"):",comp.get_atomic_fraction("Se"))
print("comp.get_wt_fraction(\"Se\"):",comp.get_wt_fraction("Se"))
print("")
composition_str2="As1.01Cu0.99Se2.001"
comp2=Composition(composition_str2)
print("comp2=",comp2)
print("comp.almost_equals(comp2):",  comp.almost_equals(comp2))
print("comp.reduced_composition.almost_equals(comp2):",  comp.reduced_composition.almost_equals(comp2))
print("comp.reduced_composition.almost_equals(comp2,rtol=0.01):",  comp.reduced_composition.almost_equals(comp2,rtol=0.01)) # Default: rtol=0.1

出力結果は以下のようになります。

comp= As2 Se4 Cu2
comp.element_composition: As2 Se4 Cu2
comp.fractional_composition: As0.25 Se0.5 Cu0.25
comp.reduced_composition: As1 Se2 Cu1

comp.formula: Cu2 As2 Se4
comp.alphabetical_formula: As2 Cu2 Se4
comp.reduced_formula: CuAsSe2
comp.anonymized_formula: ABC2

comp.num_atoms: 8.0
comp.elements: [Element As, Element Se, Element Cu]
comp.weight: 592.7751999999999 amu
comp.average_electroneg: 2.295
comp.get_atomic_fraction("Se"): 0.5
comp.get_wt_fraction("Se"): 0.5328158128072834 

comp2= As1.01 Cu0.99 Se2.001
comp.almost_equals(comp2): False
comp.reduced_composition.almost_equals(comp2): True
comp.reduced_composition.almost_equals(comp2,rtol=0.01): False

単純なプログラミングなので自分でできそうな気になってしまいますが、
いちいちやっていると面倒くさいので、こういうのを有効活用しましょう。