Changeset 2026
- Timestamp:
- Oct 28, 2015 5:32:01 PM (8 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASII.py
r2017 r2026 775 775 first = False 776 776 self.CheckNotebook() 777 G2IO.LoadImage (rd.readfilename,self,rd.Comments,rd.Data,rd.Npix,rd.Image)777 G2IO.LoadImage2Tree(rd.readfilename,self,rd.Comments,rd.Data,rd.Npix,rd.Image) 778 778 self.PatternTree.SelectItem(G2gd.GetPatternTreeItemId(self,self.Image,'Image Controls')) #show last image to have beeen read 779 779 … … 2250 2250 self.Integrate = 0 2251 2251 self.imageDefault = {} 2252 self.IntgOutList = [] # list of integration tree item Ids created in G2IO.SaveIntegration 2253 self.autoIntFrame = None 2252 2254 self.Sngl = False 2253 2255 self.ifGetRing = False -
trunk/GSASIIIO.py
r2015 r2026 277 277 Comments,Data,Npix,Image = GetImageData(G2frame,imagefile) 278 278 if Comments: 279 LoadImage (imagefile,G2frame,Comments,Data,Npix,Image)279 LoadImage2Tree(imagefile,G2frame,Comments,Data,Npix,Image) 280 280 281 def LoadImage (imagefile,G2frame,Comments,Data,Npix,Image):281 def LoadImage2Tree(imagefile,G2frame,Comments,Data,Npix,Image): 282 282 '''Load an image into the tree 283 283 ''' … … 1269 1269 Azms.append(G2img.meanAzm(azm,azms[i+1])) 1270 1270 dazm = np.min(np.abs(np.diff(azms)))/2. 1271 G2frame.IntgOutList = [] 1271 1272 for i,azm in enumerate(azms[:-1]): 1272 1273 Aname = name+" Azm= %.2f"%((azm+dazm)%360.) … … 1294 1295 W = np.where(Y>0.,1./Y,1.e-6) #probably not true 1295 1296 Id = G2frame.PatternTree.AppendItem(parent=G2frame.root,text=Aname) 1297 G2frame.IntgOutList.append(Id) 1296 1298 G2frame.PatternTree.SetItemPyData(G2frame.PatternTree.AppendItem(Id,text='Comments'),Comments) 1297 1299 G2frame.PatternTree.SetItemPyData(G2frame.PatternTree.AppendItem(Id,text='Limits'),[tuple(Xminmax),Xminmax]) … … 2581 2583 fil = os.path.join(self.dirname,self.filename) 2582 2584 self.fullpath = os.path.abspath(fil) 2583 self.fp = open( fil,mode)2585 self.fp = open(self.fullpath,mode) 2584 2586 return self.fp 2585 2587 … … 2699 2701 match a powder export routine that has a Writer object. 2700 2702 ''' 2701 filename = os.path.abspath(os.path.splitext(fileroot)[ 1]+extension)2703 filename = os.path.abspath(os.path.splitext(fileroot)[0]+extension) 2702 2704 for obj in G2frame.exporterlist: 2703 2705 if obj.extension == extension and 'powder' in obj.exporttype: … … 2706 2708 obj.loadTree() # load all histograms in tree into dicts 2707 2709 if TreeName not in obj.Histograms: 2708 raise Exception('Histogram not found: '+hst) 2710 raise Exception('Histogram not found: '+str(TreeName)) 2711 try: 2712 obj.Writer 2713 except AttributeError: 2714 continue 2709 2715 try: 2710 2716 obj.Writer(TreeName,filename) 2711 2717 return 2712 except AttributeError: 2713 print('Export Routine for '+extension+' does not have a .Writer method') 2718 except Exception,err: 2719 print('Export Routine for '+extension+' failed.') 2720 print err 2714 2721 else: 2715 2722 print('No Export routine supports extension '+extension) -
trunk/GSASIIimgGUI.py
r2019 r2026 87 87 ##### Image Controls 88 88 ################################################################################ 89 def UpdateImageControls(G2frame,data,masks ):89 def UpdateImageControls(G2frame,data,masks,IntegrateOnly=False): 90 90 '''Shows and handles the controls on the "Image Controls" 91 91 data tree entry … … 110 110 data['varyList'] = {'dist':True,'det-X':True,'det-Y':True,'tilt':True,'phi':True,'dep':False,'wave':False} 111 111 #end patch 112 112 113 113 # Menu items 114 114 … … 1031 1031 #end fix 1032 1032 1033 if IntegrateOnly: 1034 OnIntegrate(None) 1035 return 1036 1033 1037 colorList = sorted([m for m in mpl.cm.datad.keys() if not m.endswith("_r")],key=lambda s: s.lower()) 1034 1038 calList = sorted([m for m in calFile.Calibrants.keys()],key=lambda s: s.lower()) … … 1055 1059 if GSASIIpath.GetConfigValue('debug'): 1056 1060 import autoint 1061 def OnDestroy(event): 1062 G2frame.autoIntFrame = None 1057 1063 def OnAutoInt(event): 1058 frame = autoint.AutoIntFrame(G2frame,PollTime=5.0) 1064 reload(autoint) 1065 if G2frame.autoIntFrame: # ensure only one open at a time 1066 G2frame.autoIntFrame.Raise() 1067 return 1068 G2frame.autoIntFrame = autoint.AutoIntFrame(G2frame,PollTime=5.0) 1069 G2frame.autoIntFrame.Bind(wx.EVT_WINDOW_DESTROY,OnDestroy) # clean up name on window close 1059 1070 G2frame.dataFrame.Bind(wx.EVT_MENU, OnAutoInt, id=G2gd.wxID_IMAUTOINTEG) 1060 1071 G2frame.dataDisplay = wx.Panel(G2frame.dataFrame) -
trunk/autoint.py
r2021 r2026 3 3 import copy 4 4 import glob 5 import re 5 6 import GSASIIpath 6 7 import GSASIIIO as G2IO 7 8 import GSASIIctrls as G2G 8 9 import GSASIIgrid as G2gd 9 #('xye','fxye','xy','chi') 10 import GSASIIimgGUI as G2imG 10 11 ''' 11 12 Define a class to be used for Andrey's AutoIntegration process … … 29 30 after the "Start" button is pressed (when its label reads "Pause"). 30 31 ''' 32 G2frame = self.G2frame 31 33 try: 32 34 self.currImageList = sorted( … … 37 39 38 40 createdImageIdList = [] 41 # loop over files that are found, reading in new ones 39 42 for newImage in self.currImageList: 40 if newImage in self.IntegratedList: continue 41 # need to read in this file 42 Comments,Data,Npix,Image = G2IO.GetImageData(self.G2frame,newImage) 43 if newImage in self.IntegratedList: continue # already processed 44 Comments,Data,Npix,Image = G2IO.GetImageData(G2frame,newImage) 43 45 if not Npix: 44 46 print('problem reading '+newImage) 45 47 continue 46 G2IO.LoadImage(newImage,self.G2frame,Comments,Data,Npix,Image) 47 controlsDict = self.G2frame.PatternTree.GetItemPyData( 48 G2gd.GetPatternTreeItemId(self.G2frame,self.G2frame.Image, 'Image Controls')) 48 G2IO.LoadImage2Tree(newImage,G2frame,Comments,Data,Npix,Image) 49 # update controls from master 50 controlsDict = G2frame.PatternTree.GetItemPyData( 51 G2gd.GetPatternTreeItemId(G2frame,G2frame.Image, 'Image Controls')) 49 52 controlsDict.update(self.ImageControls) 50 ImageMasks = self.G2frame.PatternTree.GetItemPyData( 51 G2gd.GetPatternTreeItemId(self.G2frame,self.G2frame.Image, 'Masks')) 52 createdImageIdList.append(self.G2frame.Image) 53 self.IntegratedList.append(newImage) 54 print('debug: read '+newImage) 55 53 # update masks from master 54 ImageMasks = G2frame.PatternTree.GetItemPyData( 55 G2gd.GetPatternTreeItemId(G2frame,G2frame.Image, 'Masks')) 56 createdImageIdList.append(G2frame.Image) # save IMG Id 57 self.IntegratedList.append(newImage) # save name of image so we don't process it again 58 #print('debug: read '+newImage) 59 60 # now integrate the images we have read 56 61 for newImagId in createdImageIdList: 57 print('debug: process '+str(newImagId)) 58 pass 59 # need to integrate in this entry 60 import datetime 61 print ("Timer tick at {:%d %b %Y %H:%M:%S}\n".format(datetime.datetime.now())) 62 #GSASIIpath.IPyBreak_base() 62 G2frame.Image = newImagId 63 G2frame.PickId = G2gd.GetPatternTreeItemId(G2frame,G2frame.Image, 'Image Controls') 64 # integrate in this entry 65 size,imagefile = G2frame.PatternTree.GetItemPyData(G2frame.Image) 66 masks = G2frame.PatternTree.GetItemPyData( 67 G2gd.GetPatternTreeItemId(G2frame,G2frame.Image, 'Masks')) 68 data = G2frame.PatternTree.GetItemPyData(G2frame.PickId) 69 G2frame.ImageZ = G2IO.GetImageData(G2frame,imagefile,True) 70 self.oldImagefile = '' # mark image as changed; reread as needed 71 G2imG.UpdateImageControls(G2frame,data,masks,IntegrateOnly=True) 72 # split name and control number 73 s = re.split(r'(\d+)\Z',os.path.split(os.path.splitext(imagefile)[0])[1]) 74 namepre = s[0] 75 if len(s) > 1: 76 namenum = s[1] 77 else: 78 namenum = '' 79 # write out the images in the selected formats 80 for Id in G2frame.IntgOutList: 81 treename = G2frame.PatternTree.GetItemText(Id) 82 Sdata = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id, 'Sample Parameters')) 83 # determine the name for the current file 84 fileroot = namepre 85 if len(G2frame.IntgOutList) > 1: 86 fileroot += "_AZM" 87 if 'Azimuth' in Sdata: 88 fileroot += str(int(10*Sdata['Azimuth'])) 89 fileroot += "_" 90 fileroot += namenum 91 # loop over selected formats 92 for dfmt in self.fmtlist: 93 if not self.params[dfmt[1:]]: continue 94 if self.params['SeparateDir']: 95 subdir = dfmt[1:] 96 else: 97 subdir = '' 98 fil = os.path.join(self.params['outdir'],subdir,fileroot) 99 print('writing file '+fil+dfmt) 100 G2IO.ExportPowder(G2frame,treename,fil,dfmt) 101 102 if GSASIIpath.GetConfigValue('debug'): 103 import datetime 104 print ("Timer tick at {:%d %b %Y %H:%M:%S}\n".format(datetime.datetime.now())) 63 105 64 106 def StartLoop(self): … … 91 133 G2gd.GetPatternTreeItemId(self.G2frame,self.G2frame.Image, 'Masks'))) 92 134 self.Thresholds = self.ImageMasks['Thresholds'][:] 93 94 def __init__(self,G2frame,PollTime=3.0): 135 # make sure all output directories exist 136 if self.params['SeparateDir']: 137 for dfmt in self.fmtlist: 138 if not self.params[dfmt[1:]]: continue 139 dir = os.path.join(self.params['outdir'],dfmt[1:]) 140 if not os.path.exists(dir): os.makedirs(dir) 141 else: 142 if not os.path.exists(self.params['outdir']): 143 os.makedirs(self.params['outdir']) 144 def __init__(self,G2frame,PollTime=60.0): 95 145 def OnStart(event): 96 146 '''Called when the start button is pressed. Changes button label … … 99 149 is started. When Pause is pressed, the loop is stopped. 100 150 ''' 101 print self.params # for debug151 #print self.params # for debug 102 152 103 153 # check inputs before starting 104 154 err = '' 105 #if not any([self.params[fmt] for fmt in fmtlist]):155 #if not any([self.params[fmt] for fmt in self.fmtlist]): 106 156 # err += '\nPlease select at least one output format\n' 107 157 if (self.params['Mode'] == 'file' and not … … 148 198 in the dict. 149 199 ''' 200 if btn3 == event.GetEventObject(): 201 dlg = wx.DirDialog( 202 self, 'Select directory for output files', 203 self.params['outdir'],wx.DD_DEFAULT_STYLE) 204 dlg.CenterOnParent() 205 try: 206 if dlg.ShowModal() == wx.ID_OK: 207 self.params['outdir'] = dlg.GetPath() 208 fInp3.SetValue(self.params['outdir']) 209 finally: 210 dlg.Destroy() 211 return 150 212 if btn1 == event.GetEventObject(): 151 213 ext = '.imctrl' 152 214 title = 'Image control' 153 print 'button 1'154 215 else: 155 216 ext = '.immask' … … 207 268 self.params['MaskFile'] = '' 208 269 self.params['IgnoreMask'] = True 209 fmtlist = G2IO.ExportPowderList(G2frame)270 self.fmtlist = G2IO.ExportPowderList(G2frame) 210 271 self.timer = wx.Timer() 211 272 self.timer.Bind(wx.EVT_TIMER,self.OnTimerLoop) … … 215 276 self.imagedir,fileroot = os.path.split(imagefile) 216 277 self.params['filter'] = '*'+os.path.splitext(fileroot)[1] 217 os.chdir(self.imagedir)278 self.params['outdir'] = os.path.abspath(self.imagedir) 218 279 # get image names that have already been read 219 280 self.IntegratedList = [] … … 223 284 )[1]) 224 285 225 GSASIIpath.IPyBreak() 226 227 wx.Frame.__init__(self, G2frame) 286 wx.Frame.__init__(self, G2frame,title='Automatic Integration') 228 287 mnpnl = wx.Panel(self) 229 288 mnsizer = wx.BoxSizer(wx.VERTICAL) … … 233 292 self.ControlBaseLbl.SetLabel(G2frame.PatternTree.GetItemText(G2frame.Image)) 234 293 sizer.Add(self.ControlBaseLbl) 235 mnsizer.Add(sizer,1,wx.ALIGN_LEFT,1) 236 mnpnl.SetSizer(mnsizer) 237 #GSASIIpath.IPyBreak() 294 mnsizer.Add(sizer,0,wx.ALIGN_LEFT,1) 238 295 # file filter stuff 239 296 sizer = wx.BoxSizer(wx.HORIZONTAL) … … 241 298 flterInp = G2G.ValidatedTxtCtrl(mnpnl,self.params,'filter') 242 299 sizer.Add(flterInp) 243 mnsizer.Add(sizer, 1,wx.ALIGN_RIGHT,1)300 mnsizer.Add(sizer,0,wx.ALIGN_RIGHT,1) 244 301 # box for integration controls & masks input 245 lbl = wx.StaticBox(mnpnl, wx.ID_ANY, "Integration Controls/Masks from")302 lbl = wx.StaticBox(mnpnl, wx.ID_ANY, "Integration Controls/Masks source") 246 303 lblsizr = wx.StaticBoxSizer(lbl, wx.VERTICAL) 247 304 r1 = wx.RadioButton(mnpnl, wx.ID_ANY, "Use Active Image", … … 253 310 lblsizr.Add(r2) 254 311 r2.Bind(wx.EVT_RADIOBUTTON, OnRadioSelect) 312 r2.Disable() # deactivate this until implemented 255 313 # Image controls file 256 314 sizer = wx.BoxSizer(wx.HORIZONTAL) … … 283 341 284 342 # box for output selections 285 lbl = wx.StaticBox(mnpnl, wx.ID_ANY, "Select output format(s)") 286 lblsizr = wx.StaticBoxSizer(lbl, wx.HORIZONTAL) 287 for dfmt in fmtlist: 343 lbl = wx.StaticBox(mnpnl, wx.ID_ANY, "Output settings") 344 lblsizr = wx.StaticBoxSizer(lbl, wx.VERTICAL) 345 sizer = wx.BoxSizer(wx.HORIZONTAL) 346 sizer.Add(wx.StaticText(mnpnl, wx.ID_ANY,'Write to: ')) 347 fInp3 = G2G.ValidatedTxtCtrl(mnpnl,self.params,'outdir', 348 notBlank=False,size=(300,-1)) 349 sizer.Add(fInp3) 350 btn3 = wx.Button(mnpnl, wx.ID_ANY, "Browse") 351 btn3.Bind(wx.EVT_BUTTON, OnBrowse) 352 sizer.Add(btn3) 353 lblsizr.Add(sizer) 354 #lblsizr.Add(wx.StaticText(mnpnl, wx.ID_ANY,'Select format(s): ')) 355 sizer = wx.BoxSizer(wx.HORIZONTAL) 356 sizer.Add(wx.StaticText(mnpnl, wx.ID_ANY,'Select format(s): ')) 357 for dfmt in self.fmtlist: 288 358 fmt = dfmt[1:] 289 359 self.params[fmt] = False 290 360 btn = G2G.G2CheckBox(mnpnl,dfmt,self.params,fmt) 291 lblsizr.Add(btn) 292 mnsizer.Add(lblsizr,1,wx.ALIGN_CENTER,1) 361 sizer.Add(btn) 362 lblsizr.Add(sizer) 363 sizer = wx.BoxSizer(wx.HORIZONTAL) 364 sizer.Add(wx.StaticText(mnpnl, wx.ID_ANY,'Separate dir for each format: ')) 365 self.params['SeparateDir'] = False 366 sizer.Add(G2G.G2CheckBox(mnpnl,'',self.params,'SeparateDir')) 367 lblsizr.Add(sizer) 368 mnsizer.Add(lblsizr,0,wx.ALIGN_CENTER,1) 293 369 294 370 # buttons on bottom 295 mnsizer.Add(wx.StaticText(mnpnl, wx.ID_ANY,'AutoIntegration controls') )371 mnsizer.Add(wx.StaticText(mnpnl, wx.ID_ANY,'AutoIntegration controls'),0,wx.TOP,5) 296 372 sizer = wx.BoxSizer(wx.HORIZONTAL) 297 373 sizer.Add((20,-1)) … … 307 383 sizer.Add(btnquit) 308 384 sizer.Add((20,-1)) 309 mnsizer.Add(sizer, 1,wx.EXPAND|wx.BOTTOM,1)385 mnsizer.Add(sizer,0,wx.EXPAND|wx.BOTTOM|wx.TOP,5) 310 386 311 387 # finish up window 388 mnpnl.SetSizer(mnsizer) 312 389 OnRadioSelect(None) # disable widgets 313 390 mnsizer.Fit(self) 314 self. Show()315 391 self.CenterOnParent() 392 self.Show() 316 393 317 394 if __name__ == '__main__': -
trunk/exports/G2export_pwdr.py
r2018 r2026 66 66 ''' 67 67 histblk = self.Histograms[TreeName] 68 self.OpenFile(filename) # ***rethink68 self.OpenFile(filename) 69 69 self.Write(TreeName[5:]) 70 70 if prmname: self.Write('Instrument parameter file:'+os.path.split(prmname)[1]) … … 128 128 129 129 def Writer(self,TreeName,filename=None): 130 GSASIIpath.IPyBreak() 131 132 self.OpenFile() 130 self.OpenFile(filename) 133 131 histblk = self.Histograms[TreeName] 134 132 self.Write('/*') #The ugly c comment delimiter used in topas!
Note: See TracChangeset
for help on using the changeset viewer.