chimie4psmn / analysis / MeanRhoH2O_z.py @ 10
Historique | Voir | Annoter | Télécharger (3,38 ko)
1 |
########################################################################################
|
---|---|
2 |
# Python script to calculate the mean density of a #
|
3 |
# H2O along z. #
|
4 |
# #
|
5 |
# Written by Rodrigo F. de Morais #
|
6 |
# Date: 08/04/2016 #
|
7 |
# Updated: 25/04/2016 #
|
8 |
########################################################################################
|
9 |
|
10 |
#!/usr/bin/python
|
11 |
|
12 |
import sys |
13 |
from numpy import sqrt |
14 |
from netCDF4 import Dataset |
15 |
|
16 |
###################### Functions #############################################
|
17 |
|
18 |
|
19 |
#----------------------------------------------------------------------------
|
20 |
#
|
21 |
########################### Main code #######################################
|
22 |
|
23 |
#---Definition of variables---
|
24 |
|
25 |
# ---Definition of code inicialiazation---
|
26 |
try:
|
27 |
type=sys.argv[1] # Name of the PDB file to read |
28 |
type=sys.argv[2] # Traj file |
29 |
|
30 |
except:
|
31 |
print '----------------------------------------------------------------------' |
32 |
print 'The correct use of this script is: ' |
33 |
print 'python MeanRhoH2O_z.py prmtop mdcrd' |
34 |
print '----------------------------------------------------------------------' |
35 |
sys.exit(2)
|
36 |
|
37 |
|
38 |
# ----------- Read Topology file
|
39 |
|
40 |
file=open(sys.argv[1],"r") |
41 |
linhas=file.readlines()
|
42 |
file.close()
|
43 |
|
44 |
|
45 |
# ----------- Get total atoms
|
46 |
|
47 |
for i in range(0,len(linhas)): |
48 |
if len(linhas[i].split())>0 and linhas[i].split()[0]=='%FLAG': |
49 |
if linhas[i].split()[1]=='POINTERS': |
50 |
n_atoms = linhas[i+2].split()[0] |
51 |
break
|
52 |
|
53 |
for i in range(0,len(linhas)): |
54 |
if len(linhas[i].split())>0 and linhas[i].split()[0]=='%FLAG': |
55 |
if linhas[i].split()[1]=='ATOM_NAME': |
56 |
inicio=i+1
|
57 |
if len(linhas[i].split())>0 and linhas[i].split()[0]=='%FLAG': |
58 |
if linhas[i].split()[1]=='CHARGE': |
59 |
fim=i-1
|
60 |
break
|
61 |
|
62 |
AtomNames=[] |
63 |
PosOAtoms=[] |
64 |
PosPtAtoms=[] |
65 |
|
66 |
# ------------ Get the position of O and Pt atoms
|
67 |
|
68 |
for i in range(inicio+1,fim): |
69 |
for j in range(0,20): |
70 |
AtomNames.append(linhas[i].split()[j]) |
71 |
|
72 |
for j in range(0,len(linhas[fim].split())): |
73 |
AtomNames.append(linhas[fim].split()[j]) |
74 |
|
75 |
for j in range(0,len(AtomNames)): |
76 |
if AtomNames[j]=='O': |
77 |
PosOAtoms.append(j) |
78 |
if AtomNames[j]=='Pt' or AtomNames[j]=='PU': |
79 |
PosPtAtoms.append(j) |
80 |
|
81 |
#---------- Open the traj file in netcdf format
|
82 |
|
83 |
file=Dataset(sys.argv[2],"r",format='NETCDF4') |
84 |
|
85 |
faixa=18.0
|
86 |
step=0.25
|
87 |
volume=24.031*19.424*step |
88 |
|
89 |
goz=[0]*int(faixa/step) |
90 |
|
91 |
zmax=0.0
|
92 |
|
93 |
for j in range(0,len(PosPtAtoms)): |
94 |
if zmax<float(file.variables['coordinates'][0][PosPtAtoms[j]][2]): |
95 |
zmax=float(file.variables['coordinates'][0][PosPtAtoms[j]][2]) |
96 |
|
97 |
for i in range(0,len(file.variables['time'])/100): |
98 |
|
99 |
CoordOtempz=[] |
100 |
|
101 |
for k in range(0,len(PosOAtoms)): |
102 |
CoordOtempz.append(float(file.variables['coordinates'][i*100][PosOAtoms[k]][2])) |
103 |
|
104 |
for j in range(0,int(faixa/step)): |
105 |
temp=0.0
|
106 |
pos=0.0
|
107 |
for k in range(0,len(CoordOtempz)): |
108 |
if CoordOtempz[k]>=zmax+step*(j-1) and CoordOtempz[k] <zmax+step*(j): |
109 |
temp=temp+1
|
110 |
|
111 |
if temp>0: |
112 |
goz[j]=goz[j]+temp/volume |
113 |
|
114 |
FFile=open('goz',"w\n") |
115 |
for i in range(0,len(goz)): |
116 |
FFile.write("%6.3f %6.3f %6.3f %6.3f\n" %(step*i,goz[i]/(len(file.variables['time'])/100)/0.033)) |
117 |
|
118 |
FFile.close() |
119 |
|
120 |
file.close()
|
121 |
|
122 |
#----------------------------------------------------------------------------
|