Skip to content

Commit 76b80bc

Browse files
Merge pull request #182 from Valdes-Tresanco-MS/dev
remove empty terms
2 parents b63a594 + 250a233 commit 76b80bc

File tree

2 files changed

+47
-19
lines changed

2 files changed

+47
-19
lines changed

GMXMMPBSA/analyzer/gui.py

Lines changed: 45 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1115,7 +1115,7 @@ def _remove_empty_terms(self, data):
11151115
):
11161116
columns = data.columns
11171117
for col in columns:
1118-
if (data[col] > -0.01).all() and (data[col] < 0.01).all():
1118+
if -0.01 < data[col].mean() < 0.01 and col not in ['GSOLV', 'GGAS', 'TOTAL', 'tot']:
11191119
del data[col]
11201120
return data
11211121
return data
@@ -1125,7 +1125,6 @@ def _remove_empty_charts(self, data):
11251125
if self.data_options['remove_empty_charts'] and ((data > -0.01).all() and (data < 0.01).all()):
11261126
return True
11271127
elif self.data_options['remove_empty_charts'] and ((data > -0.01).all().all() and (data < 0.01).all().all()):
1128-
# FIXME: Do we need to clarify that they are not terms like GSOLV, GGAS and TOTAL?
11291128
return True
11301129

11311130
def _itemdata_properties(self, data, decomp=False):
@@ -1175,16 +1174,20 @@ def _setup_data(self, data, iec2=False, level=0):
11751174
options = {'ie': True} if iec2 else {}
11761175
cont['line_plot_data'] = [data, options, change]
11771176
elif level == 1:
1177+
temp_data = self._remove_empty_terms(data)
11781178
options = {'c2': True} if iec2 else {}
1179-
options.update(dict(groups=self._itemdata_properties(data)))
1180-
cont['bar_plot_data'] = [data, options, change]
1179+
options.update(dict(groups=self._itemdata_properties(temp_data)))
1180+
cont['bar_plot_data'] = [temp_data, options, change]
1181+
del temp_data
11811182
elif level == 2:
11821183
tempdf = data.loc[:, data.columns.get_level_values(1) == 'tot']
11831184
bar_plot_data = tempdf.droplevel(level=1, axis=1)
1184-
cont['bar_plot_data'] = [bar_plot_data, dict(groups=self._itemdata_properties(bar_plot_data)), change]
11851185
cont['line_plot_data'] = [bar_plot_data.sum(axis=1), {}, change]
11861186
cont['heatmap_plot_data'] = [bar_plot_data.transpose(copy=True), {}, change]
1187+
temp_bar_data = self._remove_empty_terms(bar_plot_data)
1188+
cont['bar_plot_data'] = [temp_bar_data, dict(groups=self._itemdata_properties(temp_bar_data)), change]
11871189
del bar_plot_data
1190+
del temp_bar_data
11881191
del tempdf
11891192
elif level == 3:
11901193
# Select only the "tot" column, remove the level, change first level of columns to rows and remove the mean
@@ -1193,10 +1196,12 @@ def _setup_data(self, data, iec2=False, level=0):
11931196
cont['heatmap_plot_data'] = [
11941197
tempdf.aggregate(["mean"]).droplevel(level=2, axis=1).stack().droplevel(level=0), {}, change]
11951198
bar_plot_data = tempdf.groupby(axis=1, level=0, sort=False).sum()
1196-
cont['bar_plot_data'] = [bar_plot_data, dict(groups=self._itemdata_properties(bar_plot_data)), change]
11971199
cont['line_plot_data'] = [bar_plot_data.sum(axis=1), {}, change]
1200+
temp_bar_data = self._remove_empty_terms(bar_plot_data)
1201+
cont['bar_plot_data'] = [temp_bar_data, dict(groups=self._itemdata_properties(temp_bar_data)), change]
11981202
del tempdf
11991203
del bar_plot_data
1204+
del temp_bar_data
12001205

12011206
return cont
12021207

@@ -1268,7 +1273,8 @@ def makeItems(self, sys_index, part, classif_item):
12681273
title="C2 Entropy",
12691274
subtitle=f"{sys_name} | {level.upper()}",
12701275
system_index=sys_index,
1271-
keys_path=(part, level)
1276+
keys_path=(part, level),
1277+
part=part
12721278
)
12731279
str_dict = multiindex2dict(data[level].columns)
12741280
for level1 in str_dict:
@@ -1290,7 +1296,8 @@ def makeItems(self, sys_index, part, classif_item):
12901296
title="Interaction Entropy",
12911297
subtitle=f"{sys_name} | {level.upper()}",
12921298
system_index=sys_index,
1293-
keys_path=(part, level), )
1299+
keys_path=(part, level),
1300+
part=part)
12941301
str_dict = multiindex2dict(data[level].columns)
12951302
for level1 in str_dict:
12961303
item1 = CustomItem(titem,
@@ -1354,25 +1361,24 @@ def makedecompItems(self, sys_index, part, classif_item):
13541361
# residue first level
13551362
btns = (2,) if namespace.INPUT['idecomp'] in [1, 2] else (1, 2, 3)
13561363
for level3 in str_dict[level1][level2]:
1357-
13581364
item3 = CustomItem(item2,
13591365
[level3.upper()],
13601366
app=self,
13611367
buttons=btns,
1362-
# title=f"Energetic Components {title}",
1363-
# subtitle=f"{sys_name} ({part}) | "
1364-
# f"{str(level).upper()} | "
1365-
# f"{str(level1).upper()} | "
1366-
# f"{str(level2).upper()} | "
1367-
# f"{str(level3).upper()}"
1368+
title=f"Energetic Components {title}",
1369+
subtitle=f"{sys_name} ({part}) | "
1370+
f"{str(level).upper()} | "
1371+
f"{str(level1).upper()} | "
1372+
f"{str(level2).upper()} | "
1373+
f"{str(level3).upper()}",
13681374
system_index=sys_index,
13691375
keys_path=(part, level, (level1, level2, level3))
13701376
)
13711377
# residue first level
13721378
# btns = (2,) if namespace.INPUT['idecomp'] in [1, 2] else (1, 2, 3)
13731379
for level4 in str_dict[level1][level2][level3]:
13741380
if namespace.INPUT['idecomp'] in [1, 2]:
1375-
item5 = CustomItem(item3,
1381+
item4 = CustomItem(item3,
13761382
[level4.upper()],
13771383
app=self,
13781384
buttons=(1,),
@@ -1392,6 +1398,13 @@ def makedecompItems(self, sys_index, part, classif_item):
13921398
[level4.upper()],
13931399
app=self,
13941400
buttons=(2,),
1401+
title="Energetic Components [Per-wise]",
1402+
subtitle=f"{sys_name} ({part})| "
1403+
f"{str(level).upper()} | "
1404+
f"{str(level1).upper()} | "
1405+
f"{str(level2).upper()} | "
1406+
f"{str(level3).upper()} | "
1407+
f"{str(level4).upper()}",
13951408
system_index=sys_index,
13961409
keys_path=(part, level, (level1, level2, level3, level4))
13971410
)
@@ -1450,8 +1463,7 @@ def setting_item_data(self, sys_index, part, comp=('all',)):
14501463
if level1 not in parts:
14511464
continue
14521465
if not part.startswith('decomp'):
1453-
new_data = self._remove_empty_terms(data[level][(level1,)])
1454-
self.systems[sys_index]['items_data'][(part, level, (level1,))] = self._setup_data(new_data,
1466+
self.systems[sys_index]['items_data'][(part, level, (level1,))] = self._setup_data(data[level][(level1,)],
14551467
level=1)
14561468
for level2 in str_dict[level1]:
14571469
if self._remove_empty_charts(data[level][(level1, level2)]):
@@ -1482,6 +1494,14 @@ def setting_item_data(self, sys_index, part, comp=('all',)):
14821494
del temp_dat
14831495
# residue first level
14841496
for level4 in str_dict[level1][level2][level3]:
1497+
if self._remove_empty_charts(
1498+
data[level][(level1, level2, level3, level4)]
1499+
):
1500+
del data[level][(level1, level2, level3, level4)]
1501+
self.removed_items[sys_index].append(
1502+
(part, level, (level1, level2, level3, level4)))
1503+
continue
1504+
14851505
temp_dat = data[level][(level1, level2, level3, level4)]
14861506
temp_dat.name = level4
14871507
if namespace.INPUT['idecomp'] in [1, 2]:
@@ -1496,6 +1516,13 @@ def setting_item_data(self, sys_index, part, comp=('all',)):
14961516
del temp_dat
14971517
# energetics terms
14981518
for level5 in str_dict[level1][level2][level3][level4]:
1519+
if self._remove_empty_charts(
1520+
data[level][(level1, level2, level3, level4, level5)]
1521+
):
1522+
del data[level][(level1, level2, level3, level4, level5)]
1523+
self.removed_items[sys_index].append(
1524+
(part, level, (level1, level2, level3, level4, level5)))
1525+
continue
14991526
temp_dat = data[level][(level1, level2, level3, level4, level5)]
15001527
temp_dat.name = level5
15011528
self.systems[sys_index]['items_data'][

setup.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@
4343
long_description=LONG_DESCRIPTION,
4444
long_description_content_type='text/markdown',
4545
keywords=['gmx_MMPBSA', 'MMPBSA', 'MMGBSA', 'GROMACS', 'AmberTools'],
46-
install_requires=['pandas>=1.2.2', 'seaborn>=0.11.1', 'mpi4py>=3.1.3', 'scipy>=1.6.1', 'matplotlib', 'h5py'],
46+
install_requires=['pandas>=1.2.2', 'seaborn>=0.11.2', 'mpi4py>=3.1.3', 'scipy>=1.6.1', 'matplotlib>=3.5.1',
47+
'h5py'],
4748
entry_points={
4849
"console_scripts": [
4950
"gmx_MMPBSA=GMXMMPBSA.app:gmxmmpbsa",

0 commit comments

Comments
 (0)