main.py 21.4 KB
Newer Older
Stelios Karozis's avatar
Stelios Karozis committed
1
import os
Stelios Karozis's avatar
Stelios Karozis committed
2
import pandas as pd
Stelios Karozis's avatar
Stelios Karozis committed
3
import tooba_f as tbf
4
import tooba_gmx as tbgmx
Stelios Karozis's avatar
Stelios Karozis committed
5 6 7 8 9 10
###################################################
#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 
###################################################
11
SYSTEM_NAME='test'
Stelios Karozis's avatar
Stelios Karozis committed
12
DISCET=[3.5, 3.5, 3.5]
Stelios Karozis's avatar
Stelios Karozis committed
13
NUM_FR=2
14 15
TRAJ=SYSTEM_NAME+'/eq_traj.trr'
GRO=SYSTEM_NAME+'/eq_final.gro'
16
TPR=SYSTEM_NAME+'/eq_run.tpr'
17
#ITP_DIC={'NS':'CER_SOVOVA.itp','FFA':'FFA_CG.itp','CHOL':'CHOL_CG.itp'}
18 19 20 21 22 23
###################################################
# {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]}
# 
24
#         if NAME is COMBINE then it needs part or all the info from aforementioned
25 26
#         groups to execute a process. You cannot use combination as first group.
#
27 28 29 30 31
#   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)
32 33 34 35
#                       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
36
#                       density:                    Detrmine density profile of x,y,z and save peaks of directions with the least number 
37 38 39
#                       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
40 41
#
###################################################
42 43
GROUPS={'ALL':['index+ALL_ndx',['save', ['pkl'],'index'],'density',['save', ['pkl'],'dens']],
        'HD_GROUP':['surf',['save', ['pkl', 'json'],'surf'],'index+HD_ndx',['save', ['pkl'],'index'],'rdf',['save', ['pkl'],'rdf']],
Stelios Karozis's avatar
Stelios Karozis committed
44
        'TL_GROUP':['vector',['save', ['pkl'],'vec']],
45 46 47 48
        'ORDER_NS_SPH':['index_order+ORDER_NS_SPH_ndx',['save', ['pkl'],'index'],'order',['save',['pkl'], 'order']],
        'ORDER_NS_ACYL':['index_order+ORDER_NS_ACYL_ndx',['save', ['pkl'],'index'],'order',['save',['pkl'], 'order']],
        'ORDER_FFA':['index_order+ORDER_FFA_ndx',['save', ['pkl'],'index'],'order',['save',['pkl'], 'order']],
        'ORDER_CHOL':['index_order+ORDER_CHOL_ndx',['save', ['pkl'],'index'],'order',['save',['pkl'], 'order']],
49
        'COMBINE':[['HD_GROUP','surf'],['TL_GROUP','vector'],['COMB','tilt'],['save', ['pkl'],'tilt']]
50
}
51
ALL={'NS':['C1', 'C2', 'C3', 'C4', 'C5','C6', 'Na', 'P4', 'P3', 'C7','C3', 'C4', 'C5', 'C8', 'C9', 'C10'], 'CHOL':['ROH','R1', 'R2', 'R3', 'R4', 'R5'], 'FFA':['AC','C1', 'C2', 'C3', 'C4']}
Stelios Karozis's avatar
Stelios Karozis committed
52 53
HD_GROUP={'NS':['C6', 'Na', 'P4', 'P3', 'C7'], 'CHOL':['ROH'], 'FFA':['AC']}
TL_GROUP={'NS':['C3', 'C4', 'C5', 'C8', 'C9', 'C10'], 'CHOL':['R1', 'R2', 'R3', 'R4', 'R5'], 'FFA':['C1', 'C2', 'C3', 'C4']}
54 55 56 57
ORDER_NS_SPH={'NS':['C1', 'C2', 'C3', 'C4', 'C5']} #propable problem with the same atomname of NS, FFA
ORDER_NS_ACYL={'NS':['C8', 'C9', 'C10']}
ORDER_FFA={'FFA':['C1', 'C2', 'C3', 'C4']}
ORDER_CHOL={'CHOL':['R2', 'R3', 'R4', 'R5']}
Stelios Karozis's avatar
Stelios Karozis committed
58
###################################################
Stelios Karozis's avatar
Stelios Karozis committed
59 60 61 62 63 64 65
###################################################
print(' ')
print('================')
print('Starting process')
print('================')
###################################################
###################################################
66
#Read .gro file
Stelios Karozis's avatar
Stelios Karozis committed
67
_,data_num,_,res_num,res_type,atom_type,atom_num,_ = tbf.read_gro(GRO)
Stelios Karozis's avatar
Stelios Karozis committed
68 69
print(' ')
###################################################
70
#--------------------------------------------------
Stelios Karozis's avatar
Stelios Karozis committed
71 72 73 74 75 76 77 78
#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])
###################################################
#--------------------------------------------------
79 80 81 82 83 84 85 86
#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)
###################################################
87
#--------------------------------------------------
88
if os.path.isfile('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_data.pkl'):
Stelios Karozis's avatar
Stelios Karozis committed
89
    pass
Stelios Karozis's avatar
Stelios Karozis committed
90
else:
91 92 93
    #Read .trr file
    data_all=tbf.fr_export(trajfile=TRAJ,num_frames=NUM_FR)
    tbf.topickle(fl=data_all, sv_name='./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_data')
Stelios Karozis's avatar
Stelios Karozis committed
94
    del data_all
Stelios Karozis's avatar
Stelios Karozis committed
95
###################################################
96 97 98 99
#--------------------------------------------------
#Check save files if exist in order to skip functions
prev=0
sv_index={}
100
ndx_fl={}
101
for i in GROUPS.keys():
102 103 104
    sv_index[i]={}
    ndx_fl[i]={}
    cnt_ndx=-1
105
    for j in GROUPS[i]:
106
        cnt_ndx=cnt_ndx+1
107
        try:
108 109 110 111 112 113 114 115 116 117 118
            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'
119
        except TypeError:
120 121 122
            sv_index[i][str(j)]={}
            sv_index[i][str(j)]['status']='not exist'
            sv_index[i][str(j)]['name']='None'
123 124 125 126 127
        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'):
128 129
                            sv_index[i][prev]['status']='exist'
                            sv_index[i][prev]['name']='./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_'+j[2]+'.pkl'
130
                        else:
131
                            sv_index[i][prev]['status']='not exist'
132 133
                    if k=='json':    
                        if os.path.isfile('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_'+j[2]+'.pkl'):
134 135
                            sv_index[i][prev]['status']='exist'
                            sv_index[i][prev]['name']='./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_'+j[2]+'.pkl'
136
                        else:
137
                            sv_index[i][prev]['status']='not exist'
138 139 140
        prev=str(j)
###################################################
#--------------------------------------------------
Stelios Karozis's avatar
Stelios Karozis committed
141
mrg_data={}
142 143
for i in GROUPS.keys():
#not COMBINE section
144 145
    if i!='COMBINE': 
        if os.path.isfile('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_ndx.pkl'):
Stelios Karozis's avatar
Stelios Karozis committed
146
            pass
147 148
        else:
            #Find atom type index in lists created above
149 150 151
            print('')
            print('Group: ',i)
            print('++++++++++++++++++++++++')
152
            group_ndx=tbf.atomid_data(res_num, res_type, atom_type, atom_num, group=locals()[i])
153
            tbf.topickle(fl=group_ndx, sv_name='./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_ndx')
Stelios Karozis's avatar
Stelios Karozis committed
154
            del group_ndx
155
#--------------------------------------------------
156
        if os.path.isfile('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_box.pkl'):
Stelios Karozis's avatar
Stelios Karozis committed
157
            pass            
158
        else:
Stelios Karozis's avatar
Stelios Karozis committed
159 160
            data_all=tbf.frompickle('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_data.pkl')
            group_ndx=tbf.frompickle('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_ndx.pkl')
161 162 163 164 165 166 167
            #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]}}}}
            _,box_res=tbf.atom2grid(data_all,box_p, group_ndx)
            tbf.topickle(fl=box_res, sv_name='./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_box')
Stelios Karozis's avatar
Stelios Karozis committed
168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
            del data_all
            del group_ndx
            del box_p
            del box_res
###################################################
        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')
            box_res=tbf.frompickle('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_box.pkl')
            _,coord_vector=tbf.sub_coord(box=box_res, data=data_all, res_num=res_num)
            tbf.topickle(fl=coord_vector, sv_name='./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_FR'+str(NUM_FR))
            del data_all
            del box_res
            del coord_vector
184
###################################################
185 186
        for j in GROUPS[i]:
            if len(j) > 1:
187
                if j=='surf' and sv_index[i][j]['status']=='not exist':
Stelios Karozis's avatar
Stelios Karozis committed
188 189
                    if j not in locals():
                        surf={}
190
                    #Creates dictionary with c, normal per subdomain for each frame
Stelios Karozis's avatar
Stelios Karozis committed
191
                    coord_vector=tbf.frompickle('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_FR'+str(NUM_FR)+'.pkl')
192
                    surf[i]=tbf.coord2norm2cg(coord_vector,img=False)
Stelios Karozis's avatar
Stelios Karozis committed
193
                    del coord_vector
194
                    sv_data=surf[i]
195
                elif j=='surf' and sv_index[i][j]['status']=='exist':
196 197
                    if j not in locals():
                        surf={}
198
                    surf[i]=tbf.frompickle(sv_index[i][j]['name'])
199
#--------------------------------------------------   
200
                if j=='vector' and sv_index[i][j]['status']=='not exist':
201 202
                    if j not in locals():
                        vector={}
Stelios Karozis's avatar
Stelios Karozis committed
203
                    coord_vector=tbf.frompickle('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_FR'+str(NUM_FR)+'.pkl')
204
                    vector[i]=tbf.coord2vector(coord_vector)
Stelios Karozis's avatar
Stelios Karozis committed
205
                    del coord_vector
206
                    sv_data=vector[i]
207
                elif j=='vector' and sv_index[i][j]['status']=='exist':
208
                    if j not in locals():
209
                        vector={}
210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226
                    vector[i]=tbf.frompickle(sv_index[i][j]['name'])
#--------------------------------------------------
#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')
                    tbf.togmxndx(box_res, fld='./'+SYSTEM_NAME+'/'+ndx_fl[i][j], sv_name=SYSTEM_NAME+'_'+i)
                    del box_res

                    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')
                    tbf.togmxndx(box_res, fld='./'+SYSTEM_NAME+'/'+ndx_fl[i][j], sv_name=SYSTEM_NAME+'_'+i)
                    del box_res

                    uniq_id=tbf.frompickle(sv_index[i][j]['name'])
227
#--------------------------------------------------
228 229 230 231 232 233 234
                if j=='index_order' and sv_index[i][j]['status']=='not exist':
                    box_res=tbf.frompickle('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_box.pkl')
                    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

                    uniq_id=tbgmx.ndx_index(SYSTEM_NAME,ndx_fl[i][j])
235
                    sv_data=uniq_id
236 237 238 239 240 241 242
                elif j=='index_order' and sv_index[i][j]['status']=='exist':
                    box_res=tbf.frompickle('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_box.pkl')
                    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

                    uniq_id=tbf.frompickle(sv_index[i][j]['name'])
243
#--------------------------------------------------
244
                if j=='density' and sv_index[i][j]['status']=='not exist':
Stelios Karozis's avatar
Stelios Karozis committed
245
                    dens_dict={}
246
                    for iidd in uniq_id.keys():
Stelios Karozis's avatar
Stelios Karozis committed
247
                        dens_dict[iidd]={}
248
                        fl='./'+uniq_id[iidd]['system']+'/'+uniq_id[iidd]['fld']+'/'+uniq_id[iidd]['ndx_file']                  
249 250
                        cnt=-1
                        for mol in locals()[i].keys():
Stelios Karozis's avatar
Stelios Karozis committed
251 252 253
                            ind=tbf.search_pattern(fl,mol)
                            if ind=='not exist':
                                break
254 255
                            cnt=cnt+1
                            for d in ('x','y','z'):
256
                                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)
257 258 259
                                if d=='x':
                                    tmp=peaks
                                else:
260
                                    #print(len(tmp),len(peaks))
261 262 263
                                    if len(tmp)<len(peaks):
                                        peaks=tmp
                                    tmp=peaks
Stelios Karozis's avatar
Stelios Karozis committed
264 265 266 267 268
                            dens_nm=mol+'_dens'
                            dens_dict[iidd][dens_nm]=peaks
                        sv_data=dens_dict
                        mrg_data[j]=[dens_dict,[]]
                    del dens_dict
269 270
                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
271 272
                    mrg_data[j]=[dens_dict,[]]
                    del dens_dict
273
#--------------------------------------------------
274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325
                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():
                                ind=tbf.search_pattern(fl,mol2)
                                if ind=='not exist':
                                    break
                                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)
                            rdf_nm=mol1+'-'+mol2+'_rdf'
                            rdf_dict[iidd][rdf_nm]=peaks
                        sv_data=rdf_dict
                        mrg_data[j]=[rdf_dict,[]]
                    del rdf_dict
                elif j=='rdf' and sv_index[i][j]['status']=='exist':
                    rdf_dict=tbf.frompickle(sv_index[i][j]['name'])
                    mrg_data[j]=[rdf_dict,[]]
                    del rdf_dict
#--------------------------------------------------
                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
                        order_nm=mol+'_order'
                        order_dict[iidd][order_nm]=yy
                        sv_data=order_dict
                        mrg_data[j]=[order_dict,[]]
                    del order_dict
                elif j=='order' and sv_index[i][j]['status']=='exist':
                    order_dict=tbf.frompickle(sv_index[i][j]['name'])
                    mrg_data[j]=[order_dict,[]]
                    del order_dict
326 327
#--------------------------------------------------
            # Save module
328 329
            if len(j)==3:
                if j[0]=='save':
330 331 332 333 334 335 336 337 338 339
                    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])
340
                        del sv_data
Stelios Karozis's avatar
Stelios Karozis committed
341
###################################################
342
#COMBINE section
343 344
    else:
        for j in GROUPS[i]:
345 346 347 348
            #Input to COMBINE property
            if j[0]!='COMB':
                if j[1]=='surf':
                    surf=surf[j[0]]
Stelios Karozis's avatar
Stelios Karozis committed
349
                    #del surf[j[0]]
350 351
                if j[1]=='vector':
                    vector=vector[j[0]]
Stelios Karozis's avatar
Stelios Karozis committed
352
                    #del vector[j[0]]
353 354
            #Calculate COMBINE property
            if j[0]=='COMB':
355
                if j[1]=='tilt' and sv_index[i][str(j)]['status']=='not exist':
356
                    tilt=tbf.SurfVector_angle(surf,vector)
Stelios Karozis's avatar
Stelios Karozis committed
357 358
                    del surf
                    del vector
359 360 361
                    #Loop over timesteps and keep avgs tilts for each step
                    avg={}
                    for step in tilt.keys():
Stelios Karozis's avatar
Stelios Karozis committed
362
                        ss=[]
363 364 365 366 367 368 369
                        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)
Stelios Karozis's avatar
Stelios Karozis committed
370
                    del tilt
371 372 373 374 375 376 377 378 379 380 381 382
                    #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
383 384
                    mrg_data[j[1]]=[tot_avg,['Tilt[degrees]']]
                    del tot_avg
385 386
                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
387 388
                    mrg_data[j[1]]=[tot_avg,['Tilt[degrees]']]
                    del tot_avg
389 390 391 392 393 394 395 396 397 398 399 400 401
#--------------------------------------------------
            # 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':    
402 403
                                tbf.tojson(fl=sv_data, sv_name='./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_'+j[2])   
                        del sv_data          
404
###################################################
Stelios Karozis's avatar
Stelios Karozis committed
405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420
#Merge data
tbf.topickle(fl=mrg_data, sv_name='./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_merge')
print(' ')
print('Merging data of:')
print('==============================')
for tp in mrg_data.keys():
    if len(mrg_data[tp][1])!=0:
        df=pd.DataFrame.from_dict(mrg_data[tp][0], orient='index',columns=mrg_data[tp][1])
    else:
        df=pd.DataFrame.from_dict(mrg_data[tp][0], orient='index')
    try:
        data_df=data_df.join(df)
    except:
        data_df=df.copy()
        continue
tbf.topickle(fl=data_df, sv_name='./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_dataset')
421
print(data_df.head())
Stelios Karozis's avatar
Stelios Karozis committed
422
###################################################
423
###################################################