Changeset 4108


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

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIdataGUI.py

    r4104 r4108  
    39193919            name = self.GPXtree.GetItemText(item)
    39203920            if name[:4] in ['PWDR','HKLF','IMG ','PDF ','SASD','REFD']:
    3921                 if not Id: Id = item
     3921                if not Id:
     3922                    if name[:4] == 'IMG ':
     3923                        Id = GetGPXtreeItemId(self,item,'Image Controls')
     3924                    else:
     3925                        Id = item
    39223926            elif name == "Phases":
    39233927                phaseId = item
     
    39353939            self.GPXtree.SelectItem(Id)  # needed on OSX or item is not selected in tree; perhaps not needed elsewhere
    39363940        elif phaseId:
    3937             SelectDataTreeItem(self,phaseId)
    3938             self.GPXtree.SelectItem(phaseId) # as before for OSX
     3941            Id = phaseId
     3942            # open 1st phase
     3943            Id, unused = self.GPXtree.GetFirstChild(phaseId)
     3944            SelectDataTreeItem(self,Id)
     3945            self.GPXtree.SelectItem(Id) # as before for OSX
    39393946        self.CheckNotebook()
    39403947        if self.dirname: os.chdir(self.dirname)           # to get Mac/Linux to change directory!
     
    40954102            return
    40964103        else:
    4097             if not self.OnFileSave(event):
    4098                 return
     4104            if not self.OnFileSave(event): return
    40994105        FrameInfo = {'Main_Pos':tuple(self.GetPosition()),
    41004106                     'Main_Size':tuple(self.GetSize()),
  • trunk/GSASIIimage.py

    r4107 r4108  
    238238       
    239239    def CalibPrint(parmDict,sigDict,chisq,Npts):
    240         print ('Image Parameters: chi**2: %12.3g, Np: %d'%(chisq,Npts))
     240        ptlbls = 'names :'
     241        ptstr =  'values:'
     242        sigstr = 'esds  :'
     243        for d in sorted(set([i[5:] for i in parmDict.keys() if 'det-X' in i]),key=lambda x:int(x)):
     244            fmt = '%12.3f'
     245            for key in 'det-X','det-Y','delta':
     246                name = key+d
     247                if name not in parmDict: continue
     248                ptlbls += "%12s" % name
     249                ptstr += fmt % (parmDict[name])
     250                if name in sigDict:
     251                    sigstr += fmt % (sigDict[name])
     252                else:
     253                    sigstr += 12*' '
     254                if len(ptlbls) > 68:
     255                    print()
     256                    print (ptlbls)
     257                    print (ptstr)
     258                    print (sigstr)
     259                    ptlbls = 'names :'
     260                    ptstr =  'values:'
     261                    sigstr = 'esds  :'
     262        if len(ptlbls) > 8:
     263            print()
     264            print (ptlbls)
     265            print (ptstr)
     266            print (sigstr)
     267        print ('\nImage Parameters: chi**2: %12.3g, Np: %d'%(chisq,Npts))
    241268        ptlbls = 'names :'
    242269        ptstr =  'values:'
     
    265292        print (ptstr)
    266293        print (sigstr)
    267         ptlbls = 'names :'
    268         ptstr =  'values:'
    269         sigstr = 'esds  :'
    270         for d in sorted(set([i[5:] for i in parmDict.keys() if 'det-X' in i]),key=lambda x:int(x)):
    271             fmt = '%12.3f'
    272             for key in 'det-X','det-Y','delta':
    273                 name = key+d
    274                 if name not in parmDict: continue
    275                 ptlbls += "%12s" % name
    276                 ptstr += fmt % (parmDict[name])
    277                 if name in sigDict:
    278                     sigstr += fmt % (sigDict[name])
    279                 else:
    280                     sigstr += 12*' '
    281                 if len(ptlbls) > 68:
    282                     print()
    283                     print (ptlbls)
    284                     print (ptstr)
    285                     print (sigstr)
    286                     ptlbls = 'names :'
    287                     ptstr =  'values:'
    288                     sigstr = 'esds  :'
    289         if len(ptlbls) > 0:
    290             print()
    291             print (ptlbls)
    292             print (ptstr)
    293             print (sigstr)
     294        print()
    294295
    295296    def ellipseCalcD(B,xyd,varyList,parmDict):
     
    772773    rings = np.concatenate((data['rings']),axis=0)
    773774    if getRingsOnly:
    774         return rings
     775        return rings,HKL
    775776    [chisq,vals,sigList,covar] = FitDetector(rings,varyList,parmDict,True,True)
    776777    data['wavelength'] = parmDict['wave']
  • 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.