@@ -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' ][
0 commit comments