Changeset 4104 for trunk/GSASIIimgGUI.py
- Timestamp:
- Aug 20, 2019 9:06:16 PM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIimgGUI.py
r4102 r4104 193 193 194 194 def OnRecalibrate(event): 195 '''Use existing calibration values as starting point for a calibration 196 fit 197 ''' 195 198 G2img.ImageRecalibrate(G2frame,G2frame.ImageZ,data,masks) 196 199 wx.CallAfter(UpdateImageControls,G2frame,data,masks) 197 200 198 201 def OnRecalibAll(event): 202 '''Use existing calibration values as starting point for a calibration 203 fit for a selected series of images 204 ''' 199 205 Names = G2gd.GetGPXtreeDataNames(G2frame,['IMG ',]) 200 206 dlg = G2G.G2MultiChoiceDialog(G2frame,'Image calibration controls','Select images to recalibrate:',Names) … … 247 253 G2plt.PlotExposedImage(G2frame,event=None) 248 254 G2frame.GPXtree.SelectItem(Id) 255 256 def OnDistRecalib(event): 257 '''Assemble rings & calibration input for a series of images with 258 differing distances 259 ''' 260 obsArr = np.array([]).reshape(0,4) 261 parmDict = {} 262 varList = [] 263 Names = G2gd.GetGPXtreeDataNames(G2frame,['IMG ',]) 264 dlg = G2G.G2MultiChoiceDialog(G2frame,'Image calibration controls','Select images to recalibrate:',Names) 265 try: 266 wx.BeginBusyCursor() 267 if dlg.ShowModal() == wx.ID_OK: 268 items = dlg.GetSelections() 269 print('Scanning for ring picks...') 270 # G2frame.EnablePlot = False 271 for item in items: 272 name = Names[item] 273 print ('getting rings for',name) 274 G2frame.Image = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,name) 275 Data = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,G2frame.Image,'Image Controls')) 276 G2frame.ImageZ = GetImageZ(G2frame,Data) 277 Data['setRings'] = True 278 Mid = G2gd.GetGPXtreeItemId(G2frame,G2frame.Image,'Masks') 279 Masks = G2frame.GPXtree.GetItemPyData(Mid) 280 result = G2img.ImageRecalibrate(G2frame,G2frame.ImageZ,Data,Masks,getRingsOnly=True) 281 if not len(result): 282 print('calibrant missing from local image calibrants files') 283 return 284 # add detector set dist into data array, create a single really large array 285 distarr = np.zeros_like(result[:,2:3]) 286 if 'setdist' not in Data: 287 print('Distance (setdist) not in image metadata') 288 return 289 distarr += Data['setdist'] 290 obsArr = np.concatenate(( 291 obsArr, 292 np.concatenate((result[:,0:2],distarr,result[:,2:3]),axis=1)),axis=0) 293 # create a parameter dict for combined fit 294 if 'wavelength' not in parmDict: 295 parmDict['wavelength'] = Data['wavelength'] 296 if Data['varyList']['wave']: 297 varList += ['wavelength'] 298 parmDict['dep'] = Data['DetDepth'] 299 if Data['varyList']['dep']: 300 varList += ['dep'] 301 # distance flag determines if individual values are refined 302 if not Data['varyList']['dist']: 303 # starts as zero, single variable, always refined 304 parmDict['deltaDist'] = 0. 305 varList += ['deltaDist'] 306 parmDict['phi'] = Data['rotation'] 307 if Data['varyList']['phi']: 308 varList += ['phi'] 309 parmDict['tilt'] = Data['tilt'] 310 if Data['varyList']['tilt']: 311 varList += ['tilt'] 312 key = str(int(Data['setdist'])) 313 if 'deltaDist' not in parmDict: 314 # starts as zero, variable refined for each image 315 parmDict['delta'+key] = 0 316 varList += ['delta'+key] 317 for i,z in enumerate(['X','Y']): 318 v = 'det-'+z 319 if v+key in parmDict: 320 print('Error: two images with setdist ~=',key) 321 return 322 parmDict[v+key] = Data['center'][i] 323 if Data['varyList'][v]: 324 varList += [v+key] 325 #GSASIIpath.IPyBreak() 326 print('\nFitting',len(obsArr.shape[0]),'ring picks...') 327 result = G2img.FitMultiDist(obsArr,varList,parmDict) 328 # create a sequential table? 329 # Id = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,'Sequential image calibration results') 330 # if Id: 331 # SeqResult = G2frame.GPXtree.GetItemPyData(Id) 332 # else: 333 # Id = G2frame.GPXtree.AppendItem(parent=G2frame.root,text='Sequential image calibration results') 334 #SeqResult = {'SeqPseudoVars':{},'SeqParFitEqList':[]} 335 # vals,varyList,sigList,parmDict,covar = result 336 # sigList = list(sigList) 337 # if 'dist' not in varyList: 338 # vals.append(parmDict['dist']) 339 # varyList.append('dist') 340 # sigList.append(None) 341 # vals.append(Data.get('setdist',Data['distance'])) 342 # # add setdist to varylist etc. so that it is displayed in Seq Res table 343 # varyList.append('setdist') 344 # sigList.append(None) 345 # covar = np.lib.pad(covar, (0,1), 'constant') 346 # vals.append(Data.get('samplechangerpos',Data['samplechangerpos'])) 347 # varyList.append('chgrpos') 348 # sigList.append(None) 349 350 # SeqResult[name] = {'variables':vals,'varyList':varyList,'sig':sigList,'Rvals':[], 351 # 'covMatrix':covar,'title':name,'parmDict':parmDict} 352 # SeqResult['histNames'] = Names 353 # G2frame.GPXtree.SetItemPyData(Id,SeqResult) 354 finally: 355 dlg.Destroy() 356 wx.EndBusyCursor() 357 358 # print ('All selected images recalibrated - results in Sequential image calibration results') 359 # G2frame.G2plotNB.Delete('Sequential refinement') #clear away probably invalid plot 360 # G2plt.PlotExposedImage(G2frame,event=None) 361 # G2frame.GPXtree.SelectItem(Id) 362 249 363 250 364 def OnClearCalib(event): … … 1287 1401 G2frame.Bind(wx.EVT_MENU, OnRecalibrate, id=G2G.wxID_IMRECALIBRATE) 1288 1402 G2frame.Bind(wx.EVT_MENU, OnRecalibAll, id=G2G.wxID_IMRECALIBALL) 1403 G2frame.Bind(wx.EVT_MENU, OnDistRecalib, id=G2G.wxID_IMDISTRECALIB) 1289 1404 G2frame.Bind(wx.EVT_MENU, OnClearCalib, id=G2G.wxID_IMCLEARCALIB) 1290 1405 # if data.get('calibrant'):
Note: See TracChangeset
for help on using the changeset viewer.