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

1# fmt: off 

2 

3from ase.atoms import Atoms 

4from ase.collections import g2 

5 

6 

7def molecule(name, vacuum=None, **kwargs): 

8 """Create an atomic structure from a database. 

9 

10 This is a helper function to easily create molecules from the g2 and 

11 extra databases. 

12 

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. 

21 

22 Returns 

23 ------- 

24 ase.atoms.Atoms 

25 An ASE Atoms object corresponding to the specified molecule. 

26 

27 Notes 

28 ----- 

29 To see a list of allowed names, try: 

30 

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']) 

59 

60 Examples 

61 -------- 

62 >>> from ase.build import molecule 

63 >>> atoms = molecule('H2O') 

64 

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 

76 

77 

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]]}}