main.py 25.1 KB
Newer Older
Stelios Karozis's avatar
Stelios Karozis committed
1
import os
2
from collections import OrderedDict
Stelios Karozis's avatar
Stelios Karozis committed
3
import pandas as pd
Stelios Karozis's avatar
Stelios Karozis committed
4
import tooba_f as tbf
5
import tooba_gmx as tbgmx
Stelios Karozis's avatar
Stelios Karozis committed
6
import gc
Stelios Karozis's avatar
Stelios Karozis committed
7 8 9 10 11 12
###################################################
#NOTICE:    resids of head in each subdomain may differ in tail case
#           keep all atoms of group in the first occurent subdomain
#           in case of tail is the one closest to the head, hence
#           the code is a good approximation 
###################################################
Stelios Karozis's avatar
Stelios Karozis committed
13
SYSTEM_NAME="20190322_2"
Stelios Karozis's avatar
Stelios Karozis committed
14
DISCET=[3.5, 3.5, 3.5]
15
NUM_FR=750
16 17
TRAJ=SYSTEM_NAME+'/eq_traj.trr'
GRO=SYSTEM_NAME+'/eq_final.gro'
18
TPR=SYSTEM_NAME+'/eq_run.tpr'
19
#ITP_DIC={'NS':'CER_SOVOVA.itp','FFA':'FFA_CG.itp','CHOL':'CHOL_CG.itp'}
20 21 22 23 24 25
###################################################
# {NAME:[QUEUE OF PROCESSES]}
#
#   NAME: It is user defined. A dictionary must follows with the same name.
#         The dict structure has to be: {res_type:[atom_types]}
# 
26
#         if NAME is COMBINE then it needs part or all the info from aforementioned
27 28
#         groups to execute a process. You cannot use combination as first group.
#
29 30 31 32 33
#   QUEUE OF PROCESSES: surf, vector, tilt, index, density, gmx_ndx, [save, [type], save_name] 
#                                            
#                       surf:                       Determine surface from atoms (ex. Head of lipid)
#                       vector:                     Determine vector that fits atoms (ex. Tail of lipid)
#                       tilt:                       Use surf and vector result to calculate angle (if NAME is COMBINE)
34 35 36 37
#                       index+FOLDER:               Saves one ndx for every subdomain and creates unique code (md5) 
#                                                     for every subdomain to use in data saving process
#                       index_order+FOLDER:         Saves one ndx for order parameter calculations for every subdomain 
#                                                     and creates unique code (md5) for every subdomain to use in data saving process
38
#                       density:                    Detrmine density profile of x,y,z and save peaks of directions with the least number 
39 40 41
#                       rdf:                        Calculate the 2D radial deistribution function g(r) and save peaks of directions with the least number
#                       order:                      Calculate the order parameter of atom chain
#                       [save, [TYPE], SAVE_NAME]:  Save result of previous function, type: pkl, json
42 43
#
###################################################
44
GROUPS=OrderedDict()
Stelios Karozis's avatar
Stelios Karozis committed
45 46 47 48 49 50 51 52 53
GROUPS['ALL']=['index+ALL_ndx',['save', ['pkl'],'index'],'density',['save', ['pkl'],'dens']]
GROUPS['HD_GROUP']=['surf',['save', ['pkl'],'surf'],'index+HD_ndx',['save', ['pkl'],'index'],'rdf',['save', ['pkl'],'rdf']]
GROUPS['TL_GROUP']=['vector',['save', ['pkl'],'vec']]
GROUPS['ORDER_NS_SPH']=['index_order+ORDER_NS_SPH_ndx',['save', ['pkl'],'index'],'order',['save',['pkl'], 'order']]
GROUPS['ORDER_NS_ACYL']=['index_order+ORDER_NS_ACYL_ndx',['save', ['pkl'],'index'],'order',['save',['pkl'], 'order']]
GROUPS['ORDER_FFA']=['index_order+ORDER_FFA_ndx',['save', ['pkl'],'index'],'order',['save',['pkl'], 'order']]
GROUPS['ORDER_CHOL']=['index_order+ORDER_CHOL_ndx',['save', ['pkl'],'index'],'order',['save',['pkl'], 'order']]
GROUPS['COMBINE']=[['HD_GROUP','surf'],['TL_GROUP','vector'],['COMB','tilt'],['save', ['pkl'],'tilt']]

54
ALL=OrderedDict()
Stelios Karozis's avatar
Stelios Karozis committed
55 56 57 58
ALL['NS']=['C1', 'C2', 'C3', 'C4', 'C5','C6', 'Na', 'P4', 'P3', 'C7','C3', 'C4', 'C5', 'C8', 'C9', 'C10']
ALL['CHOL']=['ROH','R1', 'R2', 'R3', 'R4', 'R5']
ALL['FFA']=['AC','C1', 'C2', 'C3', 'C4']

59
HD_GROUP=OrderedDict()
Stelios Karozis's avatar
Stelios Karozis committed
60 61 62 63
HD_GROUP['NS']=['C6', 'Na', 'P4', 'P3', 'C7']
HD_GROUP['CHOL']=['ROH']
HD_GROUP['FFA']=['AC']

64
TL_GROUP=OrderedDict()
Stelios Karozis's avatar
Stelios Karozis committed
65 66 67 68
TL_GROUP['NS']=['C3', 'C4', 'C5', 'C8', 'C9', 'C10']
TL_GROUP['CHOL']=['R1', 'R2', 'R3', 'R4', 'R5']
TL_GROUP['FFA']=['C1', 'C2', 'C3', 'C4']

69
ORDER_NS_SPH=OrderedDict()
Stelios Karozis's avatar
Stelios Karozis committed
70 71
ORDER_NS_SPH['NS']=['C1', 'C2', 'C3', 'C4', 'C5'] #propable problem with the same atomname of NS, FFA

72
ORDER_NS_ACYL=OrderedDict()
Stelios Karozis's avatar
Stelios Karozis committed
73 74
ORDER_NS_ACYL['NS']=['C8', 'C9', 'C10']

75
ORDER_FFA=OrderedDict()
Stelios Karozis's avatar
Stelios Karozis committed
76 77
ORDER_FFA['FFA']=['C1', 'C2', 'C3', 'C4']

78
ORDER_CHOL=OrderedDict()
Stelios Karozis's avatar
Stelios Karozis committed
79
ORDER_CHOL['CHOL']=['R2', 'R3', 'R4', 'R5']
Stelios Karozis's avatar
Stelios Karozis committed
80
###################################################
Stelios Karozis's avatar
Stelios Karozis committed
81 82 83 84 85 86 87
###################################################
print(' ')
print('================')
print('Starting process')
print('================')
###################################################
###################################################
88
#Read .gro file
Stelios Karozis's avatar
Stelios Karozis committed
89
_,data_num,_,res_num,res_type,atom_type,atom_num,_ = tbf.read_gro(GRO)
Stelios Karozis's avatar
Stelios Karozis committed
90 91
print(' ')
###################################################
92
#--------------------------------------------------
Stelios Karozis's avatar
Stelios Karozis committed
93 94 95 96 97 98 99 100
#Count frames & calculate time of calculations
cnt_fr,time_index=tbf.count_frames(TRAJ,True)
MAX_FR=list(time_index.keys())[-1]
#print(MAX_FR,time_index[MAX_FR])
ST_FR=MAX_FR-NUM_FR
#print(ST_FR,time_index[ST_FR])
###################################################
#--------------------------------------------------
101 102 103 104 105 106 107 108
#Read .itp files
#weights={}
#for MOL in ITP_DIC.keys():
#    weights_tmp = tbf.read_itp(SYSTEM_NAME+'/'+ITP_DIC[MOL])
#    weights[MOL]=weights_tmp
#    print(' ')
#print(weights)
###################################################
109
#--------------------------------------------------
110
if os.path.isfile('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_data.pkl'):
Stelios Karozis's avatar
Stelios Karozis committed
111
    print('_data.pkl exist !')
Stelios Karozis's avatar
Stelios Karozis committed
112
    pass
Stelios Karozis's avatar
Stelios Karozis committed
113
else:
114 115
    #Read .trr file
    data_all=tbf.fr_export(trajfile=TRAJ,num_frames=NUM_FR)
Stelios Karozis's avatar
Stelios Karozis committed
116
    #tbf.tojson(fl=data_all, sv_name='./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_data')
117
    tbf.topickle(fl=data_all, sv_name='./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_data')
Stelios Karozis's avatar
Stelios Karozis committed
118
    del data_all
Stelios Karozis's avatar
Stelios Karozis committed
119
    gc.collect()
Stelios Karozis's avatar
Stelios Karozis committed
120
###################################################
121 122 123 124
#--------------------------------------------------
#Check save files if exist in order to skip functions
prev=0
sv_index={}
125
ndx_fl={}
126
for i in GROUPS.keys():
127 128 129
    sv_index[i]={}
    ndx_fl[i]={}
    cnt_ndx=-1
130
    for j in GROUPS[i]:
131
        cnt_ndx=cnt_ndx+1
132
        try:
133 134 135 136 137 138 139 140 141 142 143
            if j.split('+')[0]=='index' or j.split('+')[0]=='index_order':
                ndx_fl[i][j.split('+')[0]]=j.split('+')[1]
                j=j.split('+')[0] #generalize index function
                GROUPS[i][cnt_ndx]=j 
        except:
            pass

        try:
            sv_index[i][j]={}
            sv_index[i][j]['status']='not exist'
            sv_index[i][j]['name']='None'
144
        except TypeError:
145 146 147
            sv_index[i][str(j)]={}
            sv_index[i][str(j)]['status']='not exist'
            sv_index[i][str(j)]['name']='None'
148 149 150 151 152
        if len(j)==3:
            if j[0]=='save':
                for k in j[1]:
                    if k=='pkl':
                        if os.path.isfile('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_'+j[2]+'.pkl'):
153 154
                            sv_index[i][prev]['status']='exist'
                            sv_index[i][prev]['name']='./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_'+j[2]+'.pkl'
155
                        else:
156
                            sv_index[i][prev]['status']='not exist'
157 158
                    if k=='json':    
                        if os.path.isfile('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_'+j[2]+'.pkl'):
159 160
                            sv_index[i][prev]['status']='exist'
                            sv_index[i][prev]['name']='./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_'+j[2]+'.pkl'
161
                        else:
162
                            sv_index[i][prev]['status']='not exist'
163 164 165
        prev=str(j)
###################################################
#--------------------------------------------------
Stelios Karozis's avatar
Stelios Karozis committed
166
mrg_data={}
167
for i in GROUPS.keys():
Stelios Karozis's avatar
Stelios Karozis committed
168
    mrg_data[i]={}
169
#not COMBINE section
170 171
    if i!='COMBINE': 
        if os.path.isfile('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_ndx.pkl'):
Stelios Karozis's avatar
Stelios Karozis committed
172
            pass
173 174
        else:
            #Find atom type index in lists created above
175 176 177
            print('')
            print('Group: ',i)
            print('++++++++++++++++++++++++')
178
            group_ndx=tbf.atomid_data(res_num, res_type, atom_type, atom_num, group=locals()[i])
179
            tbf.topickle(fl=group_ndx, sv_name='./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_ndx')
Stelios Karozis's avatar
Stelios Karozis committed
180
            #tbf.tojson(fl=group_ndx, sv_name='./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_ndx')
Stelios Karozis's avatar
Stelios Karozis committed
181
            del group_ndx
Stelios Karozis's avatar
Stelios Karozis committed
182
            gc.collect()
183
#--------------------------------------------------
184
        if os.path.isfile('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_box.pkl'):
Stelios Karozis's avatar
Stelios Karozis committed
185
            pass            
186
        else:
Stelios Karozis's avatar
Stelios Karozis committed
187
            data_all=tbf.frompickle('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_data.pkl')
Stelios Karozis's avatar
Stelios Karozis committed
188
            #data_all=tbf.fromjson('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_data.json')
Stelios Karozis's avatar
Stelios Karozis committed
189
            group_ndx=tbf.frompickle('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_ndx.pkl')
Stelios Karozis's avatar
Stelios Karozis committed
190
            #group_ndx=tbf.fromjson('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_ndx.json')
191 192 193 194 195
            #Create subdomains coordinates
            box_p=tbf.domain_decomposition(data=data_all,dx=DISCET[0],dy=DISCET[1],dz=DISCET[2])
            #Assign desired atoms (from above function) to subdomains
            ##result1: {step:{res:{atom_type:{atom_num:(subX,subYsubZ)}}}}
            ##result2: {step:{res:{atom_type:{(subX,subYsubZ):[atom_num]}}}}
196 197
            #todo keep fixed the initial domain name and the molecules that are grouped for all the steps
            _,box_res=tbf.atom2group(data_all,box_p, group_ndx)
Stelios Karozis's avatar
Stelios Karozis committed
198 199 200
            del data_all
            del group_ndx
            del box_p
Stelios Karozis's avatar
Stelios Karozis committed
201 202 203
            gc.collect()
            tbf.topickle(fl=box_res, sv_name='./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_box')
            #tbf.tojson(fl=box_res, sv_name='./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_box')
Stelios Karozis's avatar
Stelios Karozis committed
204
            del box_res
Stelios Karozis's avatar
Stelios Karozis committed
205
            gc.collect()
Stelios Karozis's avatar
Stelios Karozis committed
206 207 208 209 210 211
###################################################
        if os.path.isfile('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_FR'+str(NUM_FR)+'.pkl'):
            pass   
        else:
            #Creates dictionary with coordinates per subdomain for each frame
            data_all=tbf.frompickle('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_data.pkl')
Stelios Karozis's avatar
Stelios Karozis committed
212
            #data_all=tbf.fromjson('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_data.json')
Stelios Karozis's avatar
Stelios Karozis committed
213
            box_res=tbf.frompickle('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_box.pkl')
Stelios Karozis's avatar
Stelios Karozis committed
214
            #box_res=tbf.fromjson('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_box.json')
Stelios Karozis's avatar
Stelios Karozis committed
215 216 217
            _,coord_vector=tbf.sub_coord(box=box_res, data=data_all, res_num=res_num)
            del data_all
            del box_res
Stelios Karozis's avatar
Stelios Karozis committed
218 219 220
            gc.collect()
            tbf.topickle(fl=coord_vector, sv_name='./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_FR'+str(NUM_FR))
            #tbf.tojson(fl=coord_vector, sv_name='./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_FR'+str(NUM_FR))
Stelios Karozis's avatar
Stelios Karozis committed
221
            del coord_vector
Stelios Karozis's avatar
Stelios Karozis committed
222
            gc.collect()
223
###################################################
224 225
        for j in GROUPS[i]:
            if len(j) > 1:
226
                if j=='surf' and sv_index[i][j]['status']=='not exist':
Stelios Karozis's avatar
Stelios Karozis committed
227 228
                    if j not in locals():
                        surf={}
229
                    #Creates dictionary with c, normal per subdomain for each frame
Stelios Karozis's avatar
Stelios Karozis committed
230
                    coord_vector=tbf.frompickle('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_FR'+str(NUM_FR)+'.pkl')
Stelios Karozis's avatar
Stelios Karozis committed
231
                    #coord_vector=tbf.fromjson('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_FR'+str(NUM_FR)+'.json')
232
                    surf[i]=tbf.coord2norm2cg(coord_vector,img=False)
Stelios Karozis's avatar
Stelios Karozis committed
233
                    del coord_vector
Stelios Karozis's avatar
Stelios Karozis committed
234
                    gc.collect()
235
                    sv_data=surf[i]
236
                elif j=='surf' and sv_index[i][j]['status']=='exist':
237 238
                    if j not in locals():
                        surf={}
239
                    surf[i]=tbf.frompickle(sv_index[i][j]['name'])
Stelios Karozis's avatar
Stelios Karozis committed
240
                    #surf[i]=tbf.fromjson(sv_index[i][j]['name'])
241
#--------------------------------------------------   
242
                if j=='vector' and sv_index[i][j]['status']=='not exist':
243 244
                    if j not in locals():
                        vector={}
Stelios Karozis's avatar
Stelios Karozis committed
245
                    coord_vector=tbf.frompickle('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_FR'+str(NUM_FR)+'.pkl')
Stelios Karozis's avatar
Stelios Karozis committed
246
                    #coord_vector=tbf.fromjson('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_FR'+str(NUM_FR)+'.json')
247
                    vector[i]=tbf.coord2vector(coord_vector)
Stelios Karozis's avatar
Stelios Karozis committed
248
                    del coord_vector
Stelios Karozis's avatar
Stelios Karozis committed
249
                    gc.collect()
250
                    sv_data=vector[i]
251
                elif j=='vector' and sv_index[i][j]['status']=='exist':
252
                    if j not in locals():
253
                        vector={}
254
                    vector[i]=tbf.frompickle(sv_index[i][j]['name'])
Stelios Karozis's avatar
Stelios Karozis committed
255
                    #vector[i]=tbf.fromjson(sv_index[i][j]['name'])
256 257 258 259 260
#--------------------------------------------------
#ToDo: make more generic file with ndx files and ndx for order parameter
#As for now the hash value is generic (system+domain coord), but needs to run for every input group
                if j=='index' and sv_index[i][j]['status']=='not exist':
                    box_res=tbf.frompickle('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_box.pkl')
Stelios Karozis's avatar
Stelios Karozis committed
261
                    #box_res=tbf.fromjson('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_box.json')
262 263
                    tbf.togmxndx(box_res, fld='./'+SYSTEM_NAME+'/'+ndx_fl[i][j], sv_name=SYSTEM_NAME+'_'+i)
                    del box_res
Stelios Karozis's avatar
Stelios Karozis committed
264
                    gc.collect()
265 266 267 268 269

                    uniq_id=tbgmx.ndx_index(SYSTEM_NAME,ndx_fl[i][j])
                    sv_data=uniq_id
                elif j=='index' and sv_index[i][j]['status']=='exist':
                    box_res=tbf.frompickle('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_box.pkl')
Stelios Karozis's avatar
Stelios Karozis committed
270
                    #box_res=tbf.fromjson('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_box.json')
271 272
                    tbf.togmxndx(box_res, fld='./'+SYSTEM_NAME+'/'+ndx_fl[i][j], sv_name=SYSTEM_NAME+'_'+i)
                    del box_res
Stelios Karozis's avatar
Stelios Karozis committed
273
                    gc.collect()
274 275

                    uniq_id=tbf.frompickle(sv_index[i][j]['name'])
Stelios Karozis's avatar
Stelios Karozis committed
276
                    #uniq_id=tbf.fromjson(sv_index[i][j]['name'])
277
#--------------------------------------------------
278 279
                if j=='index_order' and sv_index[i][j]['status']=='not exist':
                    box_res=tbf.frompickle('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_box.pkl')
Stelios Karozis's avatar
Stelios Karozis committed
280
                    #box_res=tbf.fromjson('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_box.json')
281 282 283
                    for mol, atoms in locals()[i].items():
                        tbgmx.order_ndx(box_res, fld='./'+SYSTEM_NAME+'/'+ndx_fl[i][j], atoms=atoms, sv_name=SYSTEM_NAME+'_'+i)
                    del box_res
Stelios Karozis's avatar
Stelios Karozis committed
284
                    gc.collect()
285 286

                    uniq_id=tbgmx.ndx_index(SYSTEM_NAME,ndx_fl[i][j])
287
                    sv_data=uniq_id
288 289
                elif j=='index_order' and sv_index[i][j]['status']=='exist':
                    box_res=tbf.frompickle('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_box.pkl')
Stelios Karozis's avatar
Stelios Karozis committed
290
                    #box_res=tbf.fromjson('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_box.json')
291 292 293
                    for mol, atoms in locals()[i].items():
                        tbgmx.order_ndx(box_res, fld='./'+SYSTEM_NAME+'/'+ndx_fl[i][j], atoms=atoms, sv_name=SYSTEM_NAME+'_'+i)
                    del box_res
Stelios Karozis's avatar
Stelios Karozis committed
294
                    gc.collect()
295 296

                    uniq_id=tbf.frompickle(sv_index[i][j]['name'])
Stelios Karozis's avatar
Stelios Karozis committed
297
                    #uniq_id=tbf.fromjson(sv_index[i][j]['name'])
298
#--------------------------------------------------
299
                if j=='density' and sv_index[i][j]['status']=='not exist':
Stelios Karozis's avatar
Stelios Karozis committed
300
                    dens_dict={}
301
                    for iidd in uniq_id.keys():
Stelios Karozis's avatar
Stelios Karozis committed
302
                        dens_dict[iidd]={}
303
                        fl='./'+uniq_id[iidd]['system']+'/'+uniq_id[iidd]['fld']+'/'+uniq_id[iidd]['ndx_file']                  
304 305
                        cnt=-1
                        for mol in locals()[i].keys():
Stelios Karozis's avatar
Stelios Karozis committed
306 307 308
                            ind=tbf.search_pattern(fl,mol)
                            if ind=='not exist':
                                break
309 310
                            cnt=cnt+1
                            for d in ('x','y','z'):
311
                                peaks = tbgmx.density_peaks(TRR=TRAJ,TPR=TPR,IND=fl,SLC=400,ST=time_index[ST_FR],EN=-1,normal=d,fld='./'+uniq_id[iidd]['system'],arg=cnt,dist_pk=20)
312 313 314
                                if d=='x':
                                    tmp=peaks
                                else:
315
                                    #print(len(tmp),len(peaks))
316 317 318
                                    if len(tmp)<len(peaks):
                                        peaks=tmp
                                    tmp=peaks
Stelios Karozis's avatar
Stelios Karozis committed
319
                            dens_nm=mol+'_dens_'+uniq_id[iidd]['fld']
Stelios Karozis's avatar
Stelios Karozis committed
320 321
                            dens_dict[iidd][dens_nm]=peaks
                        sv_data=dens_dict
Stelios Karozis's avatar
Stelios Karozis committed
322
                        mrg_data[i][j]=[dens_dict,[]]
Stelios Karozis's avatar
Stelios Karozis committed
323
                    del dens_dict
Stelios Karozis's avatar
Stelios Karozis committed
324
                    gc.collect()
325 326
                elif j=='density' and sv_index[i][j]['status']=='exist':
                    dens_dict=tbf.frompickle(sv_index[i][j]['name'])
Stelios Karozis's avatar
Stelios Karozis committed
327
                    #dens_dict=tbf.fromjson(sv_index[i][j]['name'])
Stelios Karozis's avatar
Stelios Karozis committed
328
                    mrg_data[i][j]=[dens_dict,[]]
Stelios Karozis's avatar
Stelios Karozis committed
329
                    del dens_dict
Stelios Karozis's avatar
Stelios Karozis committed
330
                    gc.collect()
331
#--------------------------------------------------
332 333 334 335 336 337 338 339 340 341 342 343 344
                if j=='rdf' and sv_index[i][j]['status']=='not exist':
                    rdf_dict={}
                    for iidd in uniq_id.keys():
                        rdf_dict[iidd]={}
                        fl='./'+uniq_id[iidd]['system']+'/'+uniq_id[iidd]['fld']+'/'+uniq_id[iidd]['ndx_file']                  
                        cnt1=-1
                        for mol1 in locals()[i].keys():
                            ind=tbf.search_pattern(fl,mol1)
                            if ind=='not exist':
                                break
                            cnt1=cnt1+1
                            cnt2=-1
                            for mol2 in locals()[i].keys():
Stelios Karozis's avatar
Stelios Karozis committed
345 346 347
                                #ind=tbf.search_pattern(fl,mol2)
                                #if ind=='not exist':
                                    #break
348 349
                                cnt2=cnt2+1
                                peaks = tbgmx.rdf_peaks(TRR=TRAJ,TPR=TPR,IND=fl,ST=time_index[ST_FR],EN=-1,fld='./'+uniq_id[iidd]['system'],arg1=cnt1,arg2=cnt2,dist_pk=20)
Stelios Karozis's avatar
Stelios Karozis committed
350
                            rdf_nm=mol1+'-'+mol2+'_rdf_'+uniq_id[iidd]['fld']
Stelios Karozis's avatar
Stelios Karozis committed
351 352 353 354 355
                            #if len(peaks)==0:
                             #   print(peaks)
                              #  print(type(peaks))
                               # peaks=np.ndarray((0))
                                
356 357
                            rdf_dict[iidd][rdf_nm]=peaks
                        sv_data=rdf_dict
Stelios Karozis's avatar
Stelios Karozis committed
358
                        mrg_data[i][j]=[rdf_dict,[]]
359
                    del rdf_dict
Stelios Karozis's avatar
Stelios Karozis committed
360
                    gc.collect()
361 362
                elif j=='rdf' and sv_index[i][j]['status']=='exist':
                    rdf_dict=tbf.frompickle(sv_index[i][j]['name'])
Stelios Karozis's avatar
Stelios Karozis committed
363
                    #rdf_dict=tbf.fromjson(sv_index[i][j]['name'])
Stelios Karozis's avatar
Stelios Karozis committed
364
                    mrg_data[i][j]=[rdf_dict,[]]
365
                    del rdf_dict
Stelios Karozis's avatar
Stelios Karozis committed
366
                    gc.collect()
367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382
#--------------------------------------------------
                if j=='order' and sv_index[i][j]['status']=='not exist':
                    order_dict={}
                    for iidd in uniq_id.keys():
                        order_dict[iidd]={}
                        #fl='./'+uniq_id[iidd]['system']+'order_'+i+uniq_id[iidd]['ndx_file']                  
                        fl='./'+uniq_id[iidd]['system']+'/'+uniq_id[iidd]['fld']+'/'+uniq_id[iidd]['ndx_file']
                        for d in ('x','y','z'):
                            yy = tbgmx.order(TRR=TRAJ,TPR=TPR,IND=fl,ST=time_index[ST_FR],EN=-1,normal=d,fld='./'+uniq_id[iidd]['system'],dist_pk=1)
                            if d=='x':
                                tmp=yy
                            else:
                                #print(len(tmp),len(peaks))
                                if max(tmp)>max(yy):
                                    yy=tmp
                                tmp=yy
Stelios Karozis's avatar
Stelios Karozis committed
383
                        order_nm=mol+'_order_'+uniq_id[iidd]['fld']
384 385
                        if len(yy)==0:
                            yy.append(0)
386 387
                        order_dict[iidd][order_nm]=yy
                        sv_data=order_dict
Stelios Karozis's avatar
Stelios Karozis committed
388
                        mrg_data[i][j]=[order_dict,[]]
389
                    del order_dict
Stelios Karozis's avatar
Stelios Karozis committed
390
                    gc.collect()
391 392
                elif j=='order' and sv_index[i][j]['status']=='exist':
                    order_dict=tbf.frompickle(sv_index[i][j]['name'])
Stelios Karozis's avatar
Stelios Karozis committed
393
                    #order_dict=tbf.fromjson(sv_index[i][j]['name']) 
Stelios Karozis's avatar
Stelios Karozis committed
394
                    mrg_data[i][j]=[order_dict,[]]
395
                    del order_dict
396 397
#--------------------------------------------------
            # Save module
398 399
            if len(j)==3:
                if j[0]=='save':
400 401 402 403 404 405 406 407 408 409
                    try:
                        sv_data
                    except NameError:
                        pass
                    else:
                        for k in j[1]:
                            if k=='pkl':
                                tbf.topickle(fl=sv_data, sv_name='./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_'+j[2])
                            if k=='json':    
                                tbf.tojson(fl=sv_data, sv_name='./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_'+j[2])
410
                        del sv_data
Stelios Karozis's avatar
Stelios Karozis committed
411
                        gc.collect()
Stelios Karozis's avatar
Stelios Karozis committed
412
###################################################
413
#COMBINE section
414 415
    else:
        for j in GROUPS[i]:
416 417 418
            #Input to COMBINE property
            if j[0]!='COMB':
                if j[1]=='surf':
419
                    surf_inuse=surf[j[0]]
Stelios Karozis's avatar
Stelios Karozis committed
420
                    #del surf[j[0]]
421
                if j[1]=='vector':
422
                    vector_inuse=vector[j[0]]
Stelios Karozis's avatar
Stelios Karozis committed
423
                    #del vector[j[0]]
424 425
            #Calculate COMBINE property
            if j[0]=='COMB':
426
                if j[1]=='tilt' and sv_index[i][str(j)]['status']=='not exist':
427 428 429 430
                    tilt=tbf.SurfVector_angle(surf_inuse,vector_inuse)
                    #ToDo: check  "if str(value['domain']).strip() == str(sub).strip():"
                    del surf_inuse
                    del vector_inuse
Stelios Karozis's avatar
Stelios Karozis committed
431
                    gc.collect()
432 433 434
                    #Loop over timesteps and keep avgs tilts for each step
                    avg={}
                    for step in tilt.keys():
Stelios Karozis's avatar
Stelios Karozis committed
435
                        ss=[]
436 437 438 439 440 441 442
                        for sub in tilt[step].keys():
                            avgs=tilt[step][sub]['avg/frame']
                            if sub not in ss:
                                ss.append(sub)
                                avg[sub]=avgs
                            else:
                                avg[sub].append(avgs)
443
                    #del tilt
444 445 446 447 448 449 450 451 452 453 454 455
                    #Calculate total average 
                    tot_avg={}
                    for sub in avg.keys():
                        for key, value in uniq_id.items():
                            if str(value['domain']).strip() == str(sub).strip():
                                hsh=key
                                break
                        try:
                            tot_avg[hsh]=sum(avg[sub])/len(avg[sub])
                        except TypeError: #in case of one frame
                            tot_avg[hsh]=sum([avg[sub]])/len([avg[sub]])
                    sv_data=tot_avg
Stelios Karozis's avatar
Stelios Karozis committed
456
                    mrg_data[i][j[1]]=[tot_avg,['Tilt[degrees]']]
Stelios Karozis's avatar
Stelios Karozis committed
457
                    del tot_avg
Stelios Karozis's avatar
Stelios Karozis committed
458
                    gc.collect()
459 460
                elif j[1]=='tilt' and sv_index[i][str(j)]['status']=='exist':
                    tot_avg=tbf.frompickle(sv_index[i][str(j)]['name'])
Stelios Karozis's avatar
Stelios Karozis committed
461
                    #tot_avg=tbf.fromjson(sv_index[i][str(j)]['name'])
Stelios Karozis's avatar
Stelios Karozis committed
462
                    mrg_data[i][j[1]]=[tot_avg,['Tilt[degrees]']]
Stelios Karozis's avatar
Stelios Karozis committed
463
                    del tot_avg
Stelios Karozis's avatar
Stelios Karozis committed
464
                    gc.collect()
465 466 467 468 469 470 471 472 473 474 475 476 477
#--------------------------------------------------
            # Save module
            if len(j)==3:
                if j[0]=='save':
                    try:
                        sv_data
                    except NameError:
                        pass
                    else:
                        for k in j[1]:
                            if k=='pkl':
                                tbf.topickle(fl=sv_data, sv_name='./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_'+j[2])
                            if k=='json':    
478
                                tbf.tojson(fl=sv_data, sv_name='./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_'+j[2])   
Stelios Karozis's avatar
Stelios Karozis committed
479 480
                        del sv_data
                        gc.collect()          
481
###################################################
Stelios Karozis's avatar
Stelios Karozis committed
482 483
#Merge data
tbf.topickle(fl=mrg_data, sv_name='./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_merge')
Stelios Karozis's avatar
Stelios Karozis committed
484
#tbf.tojson(fl=mrg_data, sv_name='./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_merge')
Stelios Karozis's avatar
Stelios Karozis committed
485 486 487
print(' ')
print('Merging data of:')
print('==============================')
Stelios Karozis's avatar
Stelios Karozis committed
488 489 490 491 492 493 494 495 496 497 498
for grp in mrg_data.keys():
    for tp in mrg_data[grp].keys():
        if len(mrg_data[grp][tp][1])!=0:
            df=pd.DataFrame.from_dict(mrg_data[grp][tp][0], orient='index',columns=mrg_data[grp][tp][1])
        else:
            df=pd.DataFrame.from_dict(mrg_data[grp][tp][0], orient='index')
        try:
            data_df=data_df.join(df)
        except:
            data_df=df.copy()
            continue
Stelios Karozis's avatar
Stelios Karozis committed
499
tbf.topickle(fl=data_df, sv_name='./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_dataset')
Stelios Karozis's avatar
Stelios Karozis committed
500
#tbf.tojson(fl=data_df, sv_name='./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_dataset')
501
print(data_df.head())
Stelios Karozis's avatar
Stelios Karozis committed
502
###################################################
Stelios Karozis's avatar
Stelios Karozis committed
503
###################################################