Coverage for /builds/ase/ase/ase/build/molecule.py: 100.00%
13 statements
« prev ^ index » next coverage.py v7.5.3, created at 2025-08-02 00:12 +0000
« prev ^ index » next coverage.py v7.5.3, created at 2025-08-02 00:12 +0000
1# fmt: off
3from ase.atoms import Atoms
4from ase.collections import g2
7def molecule(name, vacuum=None, **kwargs):
8 """Create an atomic structure from a database.
10 This is a helper function to easily create molecules from the g2 and
11 extra databases.
13 Parameters
14 ----------
15 name : str
16 Name of the molecule to build.
17 vacuum : float, optional
18 Amount of vacuum to pad the molecule with on all sides.
19 Additional keyword arguments (kwargs) can be supplied, which are passed
20 to ase.Atoms.
22 Returns
23 -------
24 ase.atoms.Atoms
25 An ASE Atoms object corresponding to the specified molecule.
27 Notes
28 -----
29 To see a list of allowed names, try:
31 >>> from ase.collections import g2
32 >>> print(g2.names) #doctest:+NORMALIZE_WHITESPACE
33 ['PH3', 'P2', 'CH3CHO', 'H2COH', 'CS', 'OCHCHO', 'C3H9C', 'CH3COF',
34 'CH3CH2OCH3', 'HCOOH', 'HCCl3', 'HOCl', 'H2', 'SH2', 'C2H2',
35 'C4H4NH', 'CH3SCH3', 'SiH2_s3B1d', 'CH3SH', 'CH3CO', 'CO', 'ClF3',
36 'SiH4', 'C2H6CHOH', 'CH2NHCH2', 'isobutene', 'HCO', 'bicyclobutane',
37 'LiF', 'Si', 'C2H6', 'CN', 'ClNO', 'S', 'SiF4', 'H3CNH2',
38 'methylenecyclopropane', 'CH3CH2OH', 'F', 'NaCl', 'CH3Cl',
39 'CH3SiH3', 'AlF3', 'C2H3', 'ClF', 'PF3', 'PH2', 'CH3CN',
40 'cyclobutene', 'CH3ONO', 'SiH3', 'C3H6_D3h', 'CO2', 'NO',
41 'trans-butane', 'H2CCHCl', 'LiH', 'NH2', 'CH', 'CH2OCH2',
42 'C6H6', 'CH3CONH2', 'cyclobutane', 'H2CCHCN', 'butadiene', 'C',
43 'H2CO', 'CH3COOH', 'HCF3', 'CH3S', 'CS2', 'SiH2_s1A1d', 'C4H4S',
44 'N2H4', 'OH', 'CH3OCH3', 'C5H5N', 'H2O', 'HCl', 'CH2_s1A1d',
45 'CH3CH2SH', 'CH3NO2', 'Cl', 'Be', 'BCl3', 'C4H4O', 'Al', 'CH3O',
46 'CH3OH', 'C3H7Cl', 'isobutane', 'Na', 'CCl4', 'CH3CH2O', 'H2CCHF',
47 'C3H7', 'CH3', 'O3', 'P', 'C2H4', 'NCCN', 'S2', 'AlCl3', 'SiCl4',
48 'SiO', 'C3H4_D2d', 'H', 'COF2', '2-butyne', 'C2H5', 'BF3', 'N2O',
49 'F2O', 'SO2', 'H2CCl2', 'CF3CN', 'HCN', 'C2H6NH', 'OCS', 'B', 'ClO',
50 'C3H8', 'HF', 'O2', 'SO', 'NH', 'C2F4', 'NF3', 'CH2_s3B1d',
51 'CH3CH2Cl', 'CH3COCl', 'NH3', 'C3H9N', 'CF4', 'C3H6_Cs', 'Si2H6',
52 'HCOOCH3', 'O', 'CCH', 'N', 'Si2', 'C2H6SO', 'C5H8', 'H2CF2', 'Li2',
53 'CH2SCH2', 'C2Cl4', 'C3H4_C3v', 'CH3COCH3', 'F2', 'CH4', 'SH',
54 'H2CCO', 'CH3CH2NH2', 'Li', 'N2', 'Cl2', 'H2O2', 'Na2', 'BeH',
55 'C3H4_C2v', 'NO2']
56 >>> from ase.build.molecule import extra
57 >>> print(extra.keys()) #doctest:+NORMALIZE_WHITESPACE
58 dict_keys(['Be2', 'C7NH5', 'BDA', 'biphenyl', 'C60'])
60 Examples
61 --------
62 >>> from ase.build import molecule
63 >>> atoms = molecule('H2O')
65 """
66 if name in extra:
67 kwargs.update(extra[name])
68 mol = Atoms(**kwargs)
69 else:
70 mol = g2[name]
71 if kwargs:
72 mol = Atoms(mol, **kwargs)
73 if vacuum is not None:
74 mol.center(vacuum=vacuum)
75 return mol
78extra = {
79 'Be2': {
80 'symbols': 'BeBe',
81 'positions': [[0, 0, 1.0106],
82 [0, 0, -1.0106]]},
83 'C7NH5': {
84 'symbols': 'C7NH5',
85 'positions': [[-1.593581, -1.142601, 0.],
86 [-2.235542, 0.095555, 0.],
87 [-0.204885, -1.210726, 0.],
88 [0.549645, -0.025355, 0.],
89 [1.976332, -0.085321, 0.],
90 [-0.099258, 1.220706, 0.],
91 [-1.488628, 1.273345, 0.],
92 [3.136871, -0.128138, 0.],
93 [-2.177996, -2.060896, 0.],
94 [-3.323594, 0.141242, 0.],
95 [0.301694, -2.173705, 0.],
96 [0.488716, 2.136782, 0.],
97 [-1.987765, 2.240495, 0.]]},
98 'BDA': {
99 # 1,4-Benzodiamine
100 # aka p-Aminoaniline; p-Benzenediamine; p-Diaminobenzene;
101 # p-Phenylenediamine; Paraphenylen-diamine
102 # PBE-gpaw relaxed
103 'symbols': 'C6H4N2H4',
104 'positions': [[0.004212, 1.406347, 0.061073],
105 [1.193490, 0.687096, 0.029481],
106 [1.190824, -0.690400, -0.028344],
107 [0.000295, -1.406191, -0.059503],
108 [-1.186974, -0.685668, -0.045413],
109 [-1.185376, 0.690203, 0.009452],
110 [2.147124, 1.219997, 0.064477],
111 [2.141593, -1.227477, -0.054266],
112 [-2.138408, -1.222814, -0.095050],
113 [-2.137740, 1.226930, 0.023036],
114 [-0.006314, 2.776024, 0.186278],
115 [-0.007340, -2.777839, -0.159936],
116 [0.844710, -3.256543, 0.110098],
117 [-0.854965, -3.253324, 0.130125],
118 [0.845826, 3.267270, -0.055549],
119 [-0.854666, 3.254654, -0.092676]]},
120 'biphenyl': {
121 # PBE-gpaw relaxed
122 'symbols': 'C6H5C6H5',
123 'positions': [[-0.74081, -0.00000, -0.00003],
124 [-1.46261, -1.20370, -0.00993],
125 [-2.85531, -1.20350, -0.00663],
126 [-3.55761, -0.00000, -0.00003],
127 [-2.85531, 1.20350, 0.00667],
128 [-1.46261, 1.20370, 0.00997],
129 [-0.92071, -2.14850, 0.00967],
130 [-3.38981, -2.15110, -0.00083],
131 [-4.64571, -0.00000, -0.00003],
132 [-3.38981, 2.15110, 0.00077],
133 [-0.92071, 2.14850, -0.00963],
134 [3.55849, -0.00000, -0.00003],
135 [2.85509, -0.86640, -0.83553],
136 [1.46289, -0.87000, -0.83153],
137 [0.73969, -0.00000, -0.00003],
138 [1.46289, 0.87000, 0.83157],
139 [2.85509, 0.86640, 0.83547],
140 [4.64659, -0.00000, -0.00003],
141 [3.39189, -1.53770, -1.50253],
142 [0.91869, -1.53310, -1.50263],
143 [0.91869, 1.53310, 1.50267],
144 [3.39189, 1.53770, 1.50257]]},
145 'C60': {
146 # Buckminsterfullerene, I*h symm.
147 # The Buckyball has two degrees of freedom, the C-C bond, and the
148 # C=C bond. This is an LDA-gpaw relaxed structure with bond lengths
149 # 1.437 and 1.385.
150 # Experimentally, the two bond lengths are 1.45 and 1.40 Angstrom.
151 'symbols': 'C60',
152 'positions': [[2.2101953, 0.5866631, 2.6669504],
153 [3.1076393, 0.1577008, 1.6300286],
154 [1.3284430, -0.3158939, 3.2363232],
155 [3.0908709, -1.1585005, 1.2014240],
156 [3.1879245, -1.4574599, -0.1997005],
157 [3.2214623, 1.2230966, 0.6739440],
158 [3.3161210, 0.9351586, -0.6765151],
159 [3.2984981, -0.4301142, -1.1204138],
160 [-0.4480842, 1.3591484, 3.2081020],
161 [0.4672056, 2.2949830, 2.6175264],
162 [-0.0256575, 0.0764219, 3.5086259],
163 [1.7727917, 1.9176584, 2.3529691],
164 [2.3954623, 2.3095689, 1.1189539],
165 [-0.2610195, 3.0820935, 1.6623117],
166 [0.3407726, 3.4592388, 0.4745968],
167 [1.6951171, 3.0692446, 0.1976623],
168 [-2.1258394, -0.8458853, 2.6700963],
169 [-2.5620990, 0.4855202, 2.3531715],
170 [-0.8781521, -1.0461985, 3.2367302],
171 [-1.7415096, 1.5679963, 2.6197333],
172 [-1.6262468, 2.6357030, 1.6641811],
173 [-3.2984810, 0.4301871, 1.1204208],
174 [-3.1879469, 1.4573895, 0.1996030],
175 [-2.3360261, 2.5813627, 0.4760912],
176 [-0.5005210, -2.9797771, 1.7940308],
177 [-1.7944338, -2.7729087, 1.2047891],
178 [-0.0514245, -2.1328841, 2.7938830],
179 [-2.5891471, -1.7225828, 1.6329715],
180 [-3.3160705, -0.9350636, 0.6765268],
181 [-1.6951919, -3.0692581, -0.1976564],
182 [-2.3954901, -2.3096853, -1.1189862],
183 [-3.2214182, -1.2231835, -0.6739581],
184 [2.1758234, -2.0946263, 1.7922529],
185 [1.7118619, -2.9749681, 0.7557198],
186 [1.3130656, -1.6829416, 2.7943892],
187 [0.3959024, -3.4051395, 0.7557638],
188 [-0.3408219, -3.4591883, -0.4745610],
189 [2.3360057, -2.5814499, -0.4761050],
190 [1.6263757, -2.6357349, -1.6642309],
191 [0.2611352, -3.0821271, -1.6622618],
192 [-2.2100844, -0.5868636, -2.6670300],
193 [-1.7726970, -1.9178969, -2.3530466],
194 [-0.4670723, -2.2950509, -2.6175105],
195 [-1.3283500, 0.3157683, -3.2362375],
196 [-2.1759882, 2.0945383, -1.7923294],
197 [-3.0909663, 1.1583472, -1.2015749],
198 [-3.1076090, -0.1578453, -1.6301627],
199 [-1.3131365, 1.6828292, -2.7943639],
200 [0.5003224, 2.9799637, -1.7940203],
201 [-0.3961148, 3.4052817, -0.7557272],
202 [-1.7120629, 2.9749122, -0.7557988],
203 [0.0512824, 2.1329478, -2.7937450],
204 [2.1258630, 0.8460809, -2.6700534],
205 [2.5891853, 1.7227742, -1.6329562],
206 [1.7943010, 2.7730684, -1.2048262],
207 [0.8781323, 1.0463514, -3.2365313],
208 [0.4482452, -1.3591061, -3.2080510],
209 [1.7416948, -1.5679557, -2.6197714],
210 [2.5621724, -0.4853529, -2.3532026],
211 [0.0257904, -0.0763567, -3.5084446]]}}