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