main.py 21.5 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 44
#todo save function faulty, save last result to existing pkl(s)
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
45
        'TL_GROUP':['vector',['save', ['pkl'],'vec']],
46 47 48 49
        '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']],
50
        'COMBINE':[['HD_GROUP','surf'],['TL_GROUP','vector'],['COMB','tilt'],['save', ['pkl'],'tilt']]
51
}
52
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
53 54
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']}
55 56 57 58
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
59
###################################################
Stelios Karozis's avatar
Stelios Karozis committed
60 61 62 63 64 65 66
###################################################
print(' ')
print('================')
print('Starting process')
print('================')
###################################################
###################################################
67
#Read .gro file
Stelios Karozis's avatar
Stelios Karozis committed
68
_,data_num,_,res_num,res_type,atom_type,atom_num,_ = tbf.read_gro(GRO)
Stelios Karozis's avatar
Stelios Karozis committed
69 70
print(' ')
###################################################
71
#--------------------------------------------------
Stelios Karozis's avatar
Stelios Karozis committed
72 73 74 75 76 77 78 79
#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])
###################################################
#--------------------------------------------------
80 81 82 83 84 85 86 87
#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)
###################################################
88
#--------------------------------------------------
89
if os.path.isfile('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_data.pkl'):
Stelios Karozis's avatar
Stelios Karozis committed
90
    pass
Stelios Karozis's avatar
Stelios Karozis committed
91
else:
92 93 94
    #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
95
    del data_all
Stelios Karozis's avatar
Stelios Karozis committed
96
###################################################
97 98 99 100
#--------------------------------------------------
#Check save files if exist in order to skip functions
prev=0
sv_index={}
101
ndx_fl={}
102
for i in GROUPS.keys():
103 104 105
    sv_index[i]={}
    ndx_fl[i]={}
    cnt_ndx=-1
106
    for j in GROUPS[i]:
107
        cnt_ndx=cnt_ndx+1
108
        try:
109 110 111 112 113 114 115 116 117 118 119
            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'
120
        except TypeError:
121 122 123
            sv_index[i][str(j)]={}
            sv_index[i][str(j)]['status']='not exist'
            sv_index[i][str(j)]['name']='None'
124 125 126 127 128
        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'):
129 130
                            sv_index[i][prev]['status']='exist'
                            sv_index[i][prev]['name']='./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_'+j[2]+'.pkl'
131
                        else:
132
                            sv_index[i][prev]['status']='not exist'
133 134
                    if k=='json':    
                        if os.path.isfile('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_'+j[2]+'.pkl'):
135 136
                            sv_index[i][prev]['status']='exist'
                            sv_index[i][prev]['name']='./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_'+j[2]+'.pkl'
137
                        else:
138
                            sv_index[i][prev]['status']='not exist'
139 140 141
        prev=str(j)
###################################################
#--------------------------------------------------
Stelios Karozis's avatar
Stelios Karozis committed
142
mrg_data={}
143 144
for i in GROUPS.keys():
#not COMBINE section
145 146
    if i!='COMBINE': 
        if os.path.isfile('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_ndx.pkl'):
Stelios Karozis's avatar
Stelios Karozis committed
147
            pass
148 149
        else:
            #Find atom type index in lists created above
150 151 152
            print('')
            print('Group: ',i)
            print('++++++++++++++++++++++++')
153
            group_ndx=tbf.atomid_data(res_num, res_type, atom_type, atom_num, group=locals()[i])
154
            tbf.topickle(fl=group_ndx, sv_name='./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_ndx')
Stelios Karozis's avatar
Stelios Karozis committed
155
            del group_ndx
156
#--------------------------------------------------
157
        if os.path.isfile('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_box.pkl'):
Stelios Karozis's avatar
Stelios Karozis committed
158
            pass            
159
        else:
Stelios Karozis's avatar
Stelios Karozis committed
160 161
            data_all=tbf.frompickle('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_data.pkl')
            group_ndx=tbf.frompickle('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_ndx.pkl')
162 163 164 165 166 167 168
            #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
169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184
            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
185
###################################################
186 187
        for j in GROUPS[i]:
            if len(j) > 1:
188
                if j=='surf' and sv_index[i][j]['status']=='not exist':
Stelios Karozis's avatar
Stelios Karozis committed
189 190
                    if j not in locals():
                        surf={}
191
                    #Creates dictionary with c, normal per subdomain for each frame
Stelios Karozis's avatar
Stelios Karozis committed
192
                    coord_vector=tbf.frompickle('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_FR'+str(NUM_FR)+'.pkl')
193
                    surf[i]=tbf.coord2norm2cg(coord_vector,img=False)
Stelios Karozis's avatar
Stelios Karozis committed
194
                    del coord_vector
195
                    sv_data=surf[i]
196
                elif j=='surf' and sv_index[i][j]['status']=='exist':
197 198
                    if j not in locals():
                        surf={}
199
                    surf[i]=tbf.frompickle(sv_index[i][j]['name'])
200
#--------------------------------------------------   
201
                if j=='vector' and sv_index[i][j]['status']=='not exist':
202 203
                    if j not in locals():
                        vector={}
Stelios Karozis's avatar
Stelios Karozis committed
204
                    coord_vector=tbf.frompickle('./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_FR'+str(NUM_FR)+'.pkl')
205
                    vector[i]=tbf.coord2vector(coord_vector)
Stelios Karozis's avatar
Stelios Karozis committed
206
                    del coord_vector
207
                    sv_data=vector[i]
208
                elif j=='vector' and sv_index[i][j]['status']=='exist':
209
                    if j not in locals():
210
                        vector={}
211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227
                    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'])
228
#--------------------------------------------------
229 230 231 232 233 234 235
                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])
236
                    sv_data=uniq_id
237 238 239 240 241 242 243
                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'])
244
#--------------------------------------------------
245
                if j=='density' and sv_index[i][j]['status']=='not exist':
Stelios Karozis's avatar
Stelios Karozis committed
246
                    dens_dict={}
247
                    for iidd in uniq_id.keys():
Stelios Karozis's avatar
Stelios Karozis committed
248
                        dens_dict[iidd]={}
249
                        fl='./'+uniq_id[iidd]['system']+'/'+uniq_id[iidd]['fld']+'/'+uniq_id[iidd]['ndx_file']                  
250 251
                        cnt=-1
                        for mol in locals()[i].keys():
Stelios Karozis's avatar
Stelios Karozis committed
252 253 254
                            ind=tbf.search_pattern(fl,mol)
                            if ind=='not exist':
                                break
255 256
                            cnt=cnt+1
                            for d in ('x','y','z'):
257
                                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)
258 259 260
                                if d=='x':
                                    tmp=peaks
                                else:
261
                                    #print(len(tmp),len(peaks))
262 263 264
                                    if len(tmp)<len(peaks):
                                        peaks=tmp
                                    tmp=peaks
Stelios Karozis's avatar
Stelios Karozis committed
265 266 267 268 269
                            dens_nm=mol+'_dens'
                            dens_dict[iidd][dens_nm]=peaks
                        sv_data=dens_dict
                        mrg_data[j]=[dens_dict,[]]
                    del dens_dict
270 271
                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
272 273
                    mrg_data[j]=[dens_dict,[]]
                    del dens_dict
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 326
                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
327 328
#--------------------------------------------------
            # Save module
329 330
            if len(j)==3:
                if j[0]=='save':
331 332 333 334 335 336 337 338 339 340
                    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])
341
                        del sv_data
Stelios Karozis's avatar
Stelios Karozis committed
342
###################################################
343
#COMBINE section
344 345
    else:
        for j in GROUPS[i]:
346 347 348 349
            #Input to COMBINE property
            if j[0]!='COMB':
                if j[1]=='surf':
                    surf=surf[j[0]]
Stelios Karozis's avatar
Stelios Karozis committed
350
                    #del surf[j[0]]
351 352
                if j[1]=='vector':
                    vector=vector[j[0]]
Stelios Karozis's avatar
Stelios Karozis committed
353
                    #del vector[j[0]]
354 355
            #Calculate COMBINE property
            if j[0]=='COMB':
356
                if j[1]=='tilt' and sv_index[i][str(j)]['status']=='not exist':
357
                    tilt=tbf.SurfVector_angle(surf,vector)
Stelios Karozis's avatar
Stelios Karozis committed
358 359
                    del surf
                    del vector
360 361 362
                    #Loop over timesteps and keep avgs tilts for each step
                    avg={}
                    for step in tilt.keys():
Stelios Karozis's avatar
Stelios Karozis committed
363
                        ss=[]
364 365 366 367 368 369 370
                        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
371
                    del tilt
372 373 374 375 376 377 378 379 380 381 382 383
                    #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
384 385
                    mrg_data[j[1]]=[tot_avg,['Tilt[degrees]']]
                    del tot_avg
386 387
                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
388 389
                    mrg_data[j[1]]=[tot_avg,['Tilt[degrees]']]
                    del tot_avg
390 391 392 393 394 395 396 397 398 399 400 401 402
#--------------------------------------------------
            # 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':    
403 404
                                tbf.tojson(fl=sv_data, sv_name='./'+SYSTEM_NAME+'/'+SYSTEM_NAME+'_'+i+'_'+j[2])   
                        del sv_data          
405
###################################################
Stelios Karozis's avatar
Stelios Karozis committed
406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421
#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')
422
print(data_df.head())
Stelios Karozis's avatar
Stelios Karozis committed
423
###################################################
424
###################################################