[英]MDAnalysis how to index the charge?
我一直在試圖弄清楚這個非常依賴於收費的過程。 但是,我發現,對於水,我得到的水分子電荷總和的值不等於 0。 為了調查這個問題,我想比較 MDAnalysis 和我的拓撲文件使用的費用值,看看問題可能出在哪里。
在我的初始代碼中,我可以使用以下方法來收取費用:
for ts in u.trajectory[ini_frames:]:
count += 1
membrane = u.select_atoms('segid PROA or segid PROB or segid MEMB')
COM = membrane.atoms.center_of_mass()[2]
q_prof = CLAs.atoms.charges * (CLAs.positions[:,2] + (Lz/2 - COM))/Lz
Q_instant = np.sum(q_prof)
Q_sum += Q_instant
Q_av = Q_sum / n_frames
這對我有用
CLAs = u.select_atoms("segid HETA or segid PROA or segid PROB or segid MEMB or segid IONS")
因此,為了查看這種差異可能來自哪里,我嘗試了:
def Q_code(dcd, topo):
Lz = u.dimensions[2]
Q_sum = 0
count = 0
CLAs = u.select_atoms('segid TIP3')
ini_frames = -20
n_frames = len(u.trajectory[ini_frames:])
for ts in u.trajectory[ini_frames:]:
for i in CLAs:
with open('Q_atom_temp.csv', 'a') as f:
new_line = [s, i, i.charges, CV1_dict[s], CV2_dict[s]]
writes = csv.writer(f)
writes.writerow(new_line)
f.close()
fields = ['Window', 'Atom', 'Charge', 'CV1', 'CV2'] with
open('Q_atom_temp.csv', 'a') as f:
writer = csv.writer(f)
writer.writerow(fields) f.close()
但我收到錯誤: 那么我將如何 go 制作一個文件來顯示哪個原子對應於哪個電荷?
指標不一樣嗎? 謝謝你的幫助!
事實證明,這是以相同的方式索引的。 我的問題是我將事物應用於每個單獨的原子而不是其分子。 當我這樣做時,我得到了一個有意義的答案。
因此,對於閱讀本文的其他人,您可以使用相同的索引來遍歷您的頭寸和費用。
for i in range(len(CLAs.positions[:,2])):
#print(CLAs.atoms.charges[i], CLAs.atoms.names[i], CLAs.positions[i,2])
total_charge += CLAs.atoms.charges[i]
count += 1
position += CLAs.positions[i,2]
if count == 5:
count = 0
av_position = (position / 5)
q_prof += total_charge * (av_position + (Lz/2 - COM))/Lz
position = 0
total_charge = 0
此代碼查看單個電荷,將其映射到相同離子的 position,然后在水分子完成后,獲取分子的電荷並將其乘以相對於盒子的平均 position。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.