Coverage for /Users/Newville/Codes/xraylarch/larch/wxlib/athena_importer.py: 21%

91 statements  

« prev     ^ index     » next       coverage.py v7.3.2, created at 2023-11-09 10:08 -0600

1#!/usr/bin/env python 

2""" 

3Athena Project Importer 

4""" 

5import os 

6import numpy as np 

7np.seterr(all='ignore') 

8 

9import wx 

10 

11import larch 

12from larch import Group 

13from larch.io import read_athena 

14# from .colors import COLORS, set_color 

15 

16from wxutils import (SimpleText, Button, Choice, FileCheckList, 

17 FileDropTarget, pack, Check, MenuItem, SetTip, Popup, 

18 CEN, LEFT, FRAMESTYLE, Font, COLORS, set_color) 

19 

20from wxmplot import PlotPanel 

21 

22CEN |= wx.ALL 

23 

24class AthenaImporter(wx.Frame) : 

25 """Import Athena File""" 

26 def __init__(self, parent, controller=None, filename=None, read_ok_cb=None, 

27 size=(725, 450)): 

28 self.parent = parent 

29 self.filename = filename 

30 self.controller = controller 

31 self.read_ok_cb = read_ok_cb 

32 

33 wx.Frame.__init__(self, parent, -1, size=size, style=FRAMESTYLE) 

34 splitter = wx.SplitterWindow(self, style=wx.SP_LIVE_UPDATE) 

35 splitter.SetMinimumPaneSize(200) 

36 

37 leftpanel = wx.Panel(splitter) 

38 ltop = wx.Panel(leftpanel) 

39 

40 sel_none = Button(ltop, 'Select None', size=(100, 30), action=self.onSelNone) 

41 sel_all = Button(ltop, 'Select All', size=(100, 30), action=self.onSelAll) 

42 sel_imp = Button(ltop, 'Import Selected Groups', size=(200, 30), action=self.onOK) 

43 

44 self.select_imported = sel_imp 

45 self.grouplist = FileCheckList(leftpanel, select_action=self.onShowGroup) 

46 set_color(self.grouplist, 'list_fg', bg='list_bg') 

47 

48 tsizer = wx.GridBagSizer(2, 2) 

49 tsizer.Add(sel_all, (0, 0), (1, 1), LEFT, 0) 

50 tsizer.Add(sel_none, (0, 1), (1, 1), LEFT, 0) 

51 tsizer.Add(sel_imp, (1, 0), (1, 2), LEFT, 0) 

52 

53 pack(ltop, tsizer) 

54 

55 sizer = wx.BoxSizer(wx.VERTICAL) 

56 sizer.Add(ltop, 0, LEFT|wx.GROW, 1) 

57 sizer.Add(self.grouplist, 1, LEFT|wx.GROW|wx.ALL, 1) 

58 pack(leftpanel, sizer) 

59 

60 # right hand side 

61 rightpanel = wx.Panel(splitter) 

62 

63 self.SetTitle("Reading Athena Project '%s'" % self.filename) 

64 self.title = SimpleText(rightpanel, self.filename, font=Font(13), 

65 colour=COLORS['title'], style=LEFT) 

66 

67 self.plotpanel = PlotPanel(rightpanel, messenger=self.plot_messages) 

68 plotconf = self.controller.get_config('plot') 

69 self.plotpanel.conf.set_theme(plotconf['theme']) 

70 self.plotpanel.conf.enable_grid(plotconf['show_grid']) 

71 

72 sizer = wx.BoxSizer(wx.VERTICAL) 

73 sizer.Add(self.title, 0, LEFT, 2) 

74 sizer.Add(self.plotpanel, 0, LEFT, 2) 

75 pack(rightpanel, sizer) 

76 

77 splitter.SplitVertically(leftpanel, rightpanel, 1) 

78 

79 self.statusbar = self.CreateStatusBar(2, 0) 

80 self.statusbar.SetStatusWidths([-3, -1]) 

81 statusbar_fields = [self.filename, ""] 

82 for i in range(len(statusbar_fields)): 

83 self.statusbar.SetStatusText(statusbar_fields[i], i) 

84 

85 self.a_project = read_athena(self.filename, do_bkg=False, do_fft=False) 

86 self.allgroups = {} 

87 for sname, grp in self.a_project._athena_groups.items(): 

88 if hasattr(grp, 'energy') and hasattr(grp, 'mu'): 

89 label = getattr(grp, 'label', sname) 

90 try: 

91 self.allgroups[label] = sname 

92 self.grouplist.Append(label) 

93 except: 

94 print(' ? ', sname, label, item) 

95 self.grouplist.SetCheckedStrings(list(self.allgroups.keys())) 

96 self.Show() 

97 self.Raise() 

98 

99 def plot_messages(self, msg, panel=1): 

100 self.SetStatusText(msg, panel) 

101 

102 def onOK(self, event=None): 

103 """generate script to import groups""" 

104 namelist = [self.allgroups[n] for n in self.grouplist.GetCheckedStrings()] 

105 if len(namelist) == 0: 

106 

107 cancel = Popup(self, """No data groups selected. 

108 Cancel import from this project?""", 'Cancel Import?', 

109 style=wx.YES_NO) 

110 if wx.ID_YES == cancel: 

111 self.Destroy() 

112 else: 

113 return 

114 

115 if self.read_ok_cb is not None: 

116 self.read_ok_cb(self.filename, namelist) 

117 self.Destroy() 

118 

119 def onCancel(self, event=None): 

120 self.Destroy() 

121 

122 def onSelAll(self, event=None): 

123 self.grouplist.SetCheckedStrings(list(self.allgroups.keys())) 

124 

125 def onSelNone(self, event=None): 

126 self.grouplist.SetCheckedStrings([]) 

127 

128 def onShowGroup(self, event=None): 

129 """column selections changed calc xdat and ydat""" 

130 label = event.GetString() 

131 gname = self.allgroups[label] 

132 grp = getattr(self.a_project, gname) 

133 if hasattr(grp, 'energy') and hasattr(grp, 'mu'): 

134 self.plotpanel.plot(grp.energy, grp.mu, 

135 xlabel='Energy', ylabel='mu',title=label)