Skip to content

Commit 0166373

Browse files
authored
Merge pull request #74 from pshriwise/filter_bin_fix
Fix filter bin selection performance bug
2 parents 019f8db + 4dd28ae commit 0166373

3 files changed

Lines changed: 25 additions & 14 deletions

File tree

openmc_plotter/docks.py

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,6 @@ def _createFilterTree(self, spatial_filters):
381381
self.filterTree.setHeaderItem(header)
382382
self.filterTree.setItemHidden(header, True)
383383
self.filterTree.setColumnCount(1)
384-
self.filterTree.itemChanged.connect(self.updateFilters)
385384

386385
self.filter_map = {}
387386
self.bin_map = {}
@@ -489,8 +488,6 @@ def selectTally(self, tally_label=None):
489488

490489
# scores
491490
self.score_map = {}
492-
self.scoresListWidget.itemClicked.connect(
493-
self.main_window.updateScores)
494491
self.score_map.clear()
495492
self.scoresListWidget.clear()
496493

@@ -525,7 +522,6 @@ def selectTally(self, tally_label=None):
525522

526523
# nuclides
527524
self.nuclide_map = {}
528-
self.nuclidesListWidget.itemClicked.connect(self.main_window.updateNuclides)
529525
self.nuclide_map.clear()
530526
self.nuclidesListWidget.clear()
531527

@@ -574,13 +570,27 @@ def updateSelectedTally(self):
574570
self.tallySelector.setCurrentIndex(idx)
575571

576572
def updateFilters(self):
573+
# if the filters header is checked, uncheck all bins and return
577574
applied_filters = defaultdict(tuple)
578575
for f, f_item in self.filter_map.items():
579576
if type(f) == openmc.MeshFilter:
580577
continue
581578

582579
filter_checked = f_item.checkState(0)
583-
if filter_checked != QtCore.Qt.Unchecked:
580+
if filter_checked == QtCore.Qt.Unchecked:
581+
for i in range(f_item.childCount()):
582+
bin_item = f_item.child(i)
583+
bin_item.setCheckState(0, QtCore.Qt.Unchecked)
584+
applied_filters[f] = tuple()
585+
elif filter_checked == QtCore.Qt.Checked:
586+
if isinstance(f, openmc.EnergyFunctionFilter):
587+
bins = [0]
588+
else:
589+
for i in range(f_item.childCount()):
590+
bin_item = f_item.child(i)
591+
bin_item.setCheckState(0, QtCore.Qt.Checked)
592+
applied_filters[f] = tuple(range(f_item.childCount()))
593+
elif filter_checked == QtCore.Qt.PartiallyChecked:
584594
selected_bins = []
585595
if isinstance(f, openmc.EnergyFunctionFilter):
586596
bins = [0]
@@ -593,7 +603,7 @@ def updateFilters(self):
593603
selected_bins.append(idx)
594604
applied_filters[f] = tuple(selected_bins)
595605

596-
self.model.appliedFilters = applied_filters
606+
self.model.appliedFilters = applied_filters
597607

598608
def updateScores(self):
599609
applied_scores = []
@@ -649,6 +659,11 @@ def updateNuclides(self):
649659
nuclide_box.setFlags(empty_item.flags() | QtCore.Qt.ItemIsUserCheckable)
650660
nuclide_box.setFlags(empty_item.flags() & ~QtCore.Qt.ItemIsSelectable)
651661

662+
def updateModel(self):
663+
self.updateFilters()
664+
self.updateScores()
665+
self.updateNuclides()
666+
652667
def update(self):
653668

654669
# update the color form

openmc_plotter/main_window.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -585,6 +585,8 @@ def applyChanges(self):
585585
if self.model.activeView != self.model.currentView:
586586
self.statusBar().showMessage('Generating Plot...')
587587
QApplication.processEvents()
588+
if self.model.activeView.selectedTally is not None:
589+
self.tallyDock.updateModel()
588590
self.model.storeCurrent()
589591
self.model.subsequentViews = []
590592
self.plotIm.generatePixmap()
@@ -901,12 +903,6 @@ def editTallyValue(self, event):
901903
av = self.model.activeView
902904
av.tallyValue = event
903905

904-
def updateScores(self, state):
905-
self.tallyDock.updateScores()
906-
907-
def updateNuclides(self, state):
908-
self.tallyDock.updateNuclides()
909-
910906
def toggleTallyVisibility(self, state, apply=False):
911907
av = self.model.activeView
912908
av.tallyDataVisible = bool(state)

openmc_plotter/plotmodel.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -541,8 +541,8 @@ def _do_op(array, tally_value, ax=0):
541541
if type(tally_filter) == openmc.MeshFilter:
542542
continue
543543

544-
if tally_filter in self.appliedFilters:
545-
selected_bins = self.appliedFilters[tally_filter]
544+
selected_bins = self.appliedFilters[tally_filter]
545+
if selected_bins:
546546
# sum filter data for the selected bins
547547
data = data[np.array(selected_bins)].sum(axis=0)
548548
else:

0 commit comments

Comments
 (0)