Changeset 4108 for trunk/GSASIIimgGUI.py


Ignore:
Timestamp:
Aug 22, 2019 10:23:18 AM (2 years ago)
Author:
toby
Message:

add plotting of rings & ring picks; load parms into each image

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIimgGUI.py

    r4107 r4108  
    203203        fit for a selected series of images
    204204        '''
     205        Id = None
    205206        Names = G2gd.GetGPXtreeDataNames(G2frame,['IMG ',])
    206207        dlg = G2G.G2MultiChoiceDialog(G2frame,'Image calibration controls','Select images to recalibrate:',Names)
     
    252253        G2frame.G2plotNB.Delete('Sequential refinement')    #clear away probably invalid plot
    253254        G2plt.PlotExposedImage(G2frame,event=None)
    254         G2frame.GPXtree.SelectItem(Id)
     255        if Id: G2frame.GPXtree.SelectItem(Id)
    255256
    256257    def OnDistRecalib(event):
     
    261262        parmDict = {}
    262263        varList = []
     264        HKL = {}
    263265        Names = G2gd.GetGPXtreeDataNames(G2frame,['IMG ',])
     266        startID = G2frame.GPXtree.GetSelection()
    264267        dlg = G2G.G2MultiChoiceDialog(G2frame,'Image calibration controls','Select images to recalibrate:',Names)
    265268        try:
     
    274277                    G2frame.Image = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,name)
    275278                    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)
     279                    key = str(int(Data['setdist']))
    293280                    # create a parameter dict for combined fit
    294281                    if 'wavelength' not in parmDict:
     
    296283                        if Data['varyList']['wave']:
    297284                            varList += ['wavelength']
     285                            if Data['varyList']['dist']:
     286                                G2G.G2MessageBox(G2frame,
     287                                'You cannot vary individual detector positions and the global wavelength.\n\nChange flags for 1st image.',
     288                                'Conflicting vars')
     289                                return
    298290                        parmDict['dep'] = Data['DetDepth']
    299291                        if Data['varyList']['dep']:
     
    310302                        if Data['varyList']['tilt']:
    311303                            varList += ['tilt']
    312                     key = str(int(Data['setdist']))
     304                    G2frame.ImageZ = GetImageZ(G2frame,Data)
     305                    Data['setRings'] = True
     306                    Mid = G2gd.GetGPXtreeItemId(G2frame,G2frame.Image,'Masks')
     307                    Masks = G2frame.GPXtree.GetItemPyData(Mid)
     308                    result = G2img.ImageRecalibrate(G2frame,G2frame.ImageZ,Data,Masks,getRingsOnly=True)
     309                    if not len(result):
     310                        print('calibrant missing from local image calibrants files')
     311                        return
     312                    rings,HKL[key] = result
     313                    # add detector set dist into data array, create a single really large array
     314                    distarr = np.zeros_like(rings[:,2:3])
     315                    if 'setdist' not in Data:
     316                        print('Distance (setdist) not in image metadata')
     317                        return
     318                    distarr += Data['setdist']
     319                    obsArr = np.concatenate((
     320                        obsArr,
     321                        np.concatenate((rings[:,0:2],distarr,rings[:,2:3]),axis=1)),axis=0)
    313322                    if 'deltaDist' not in parmDict:
    314323                        # starts as zero, variable refined for each image
     
    324333                            varList += [v+key]
    325334                #GSASIIpath.IPyBreak()
    326                 print('\nFitting',obsArr.shape[0],'ring picks...')
     335                print('\nFitting',obsArr.shape[0],'ring picks and',len(varList),'variables...')
    327336                result = G2img.FitMultiDist(obsArr,varList,parmDict,covar=True)
    328337                covar = result[3]
     
    330339                Id = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,'Covariance')
    331340                G2frame.GPXtree.SetItemPyData(Id,covData)
     341               
     342                for item in items:
     343                    name = Names[item]
     344                    print ('updating',name)
     345                    G2frame.Image = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,name)
     346                    Data = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,G2frame.Image,'Image Controls'))
     347                    Data['wavelength'] = parmDict['wavelength']
     348                    key = str(int(Data['setdist']))
     349                    Data['center'] = [parmDict['det-X'+key],parmDict['det-Y'+key]]
     350                    if 'deltaDist' in parmDict:
     351                        Data['distance'] = Data['setdist'] - parmDict['deltaDist']
     352                    else:
     353                        Data['distance'] = Data['setdist'] - parmDict['delta'+key]
     354                    Data['rotation'] = np.mod(parmDict['phi'],360.0)
     355                    Data['tilt'] = parmDict['tilt']
     356                    Data['DetDepth'] = parmDict['dep']
     357                    #Data['chisq'] = chisq
     358                    N = len(Data['ellipses'])
     359                    Data['ellipses'] = []           #clear away individual ellipse fits
     360                    for H in HKL[key][:N]:
     361                        ellipse = G2img.GetEllipse(H[3],Data)
     362                        data['ellipses'].append(copy.deepcopy(ellipse+('b',)))
     363                G2frame.EnablePlot = True
     364                G2frame.GPXtree.SelectItem(G2frame.root) # there is probably a better way to force the reload of the current page
     365                wx.CallAfter(G2frame.GPXtree.SelectItem,startID)
     366                    #GSASIIpath.IPyBreak()
     367                   
    332368               
    333369                # create a sequential table?
Note: See TracChangeset for help on using the changeset viewer.