Changeset 1380


Ignore:
Timestamp:
Jun 12, 2014 2:48:16 PM (9 years ago)
Author:
vondreele
Message:

sequential refinement of strain from IMG data
and plotting of seq results.
fixes of small angle seq refinement

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r1378 r1380  
    21292129                        self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Masks'),Masks)
    21302130                        self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Stress/Strain'),
    2131                             {'Type':'True','d-zero':[],'Sample phi':0.0,'Sample z':0.0,'strain':np.zeros((3,3))})
     2131                            {'Type':'True','d-zero':[],'Sample phi':0.0,'Sample z':0.0,'Sample load':0.0})
    21322132                        self.PatternTree.SetItemPyData(Id,[Npix,imagefile])
    21332133                        self.PickId = Id
  • trunk/GSASIIgrid.py

    r1378 r1380  
    36293629        refinement series.
    36303630        '''
    3631         sampleParmDict = {'Temperature':[],'Pressure':[],
    3632                           'FreePrm1':[],'FreePrm2':[],'FreePrm3':[],}
     3631        if 'IMG' in histNames[0]:
     3632            sampleParmDict = {'Sample load':[],}
     3633        else:
     3634            sampleParmDict = {'Temperature':[],'Pressure':[],
     3635                              'FreePrm1':[],'FreePrm2':[],'FreePrm3':[],}
    36333636        Controls = G2frame.PatternTree.GetItemPyData(
    36343637            GetPatternTreeItemId(G2frame,G2frame.root, 'Controls'))
    36353638        sampleParm = {}
    36363639        for name in histNames:
    3637             Id = GetPatternTreeItemId(G2frame,G2frame.root,name)
    3638             sampleData = G2frame.PatternTree.GetItemPyData(GetPatternTreeItemId(G2frame,Id,'Sample Parameters'))
    3639             for item in sampleParmDict:
    3640                 sampleParmDict[item].append(sampleData[item])
     3640            if 'IMG' in name:
     3641                for item in sampleParmDict:
     3642                    sampleParmDict[item].append(data[name]['parmDict'][item])
     3643            else:
     3644                Id = GetPatternTreeItemId(G2frame,G2frame.root,name)
     3645                sampleData = G2frame.PatternTree.GetItemPyData(GetPatternTreeItemId(G2frame,Id,'Sample Parameters'))
     3646                for item in sampleParmDict:
     3647                    sampleParmDict[item].append(sampleData[item])
    36413648        for item in sampleParmDict:
    36423649            frstValue = sampleParmDict[item][0]
     
    42864293    nRows = len(histNames)
    42874294    # start with Rwp values
    4288     colList += [[data[name]['Rvals']['Rwp'] for name in histNames]]
    4289     colSigs += [None]
    4290     colLabels += ['Rwp']
    4291     Types += [wg.GRID_VALUE_FLOAT+':10,3',]
     4295    if 'IMG ' not in histNames[0][:4]:
     4296        colList += [[data[name]['Rvals']['Rwp'] for name in histNames]]
     4297        colSigs += [None]
     4298        colLabels += ['Rwp']
     4299        Types += [wg.GRID_VALUE_FLOAT+':10,3',]
    42924300    # add % change in Chi^2 in last cycle
    4293     if 'SASD' not in histNames[0]:
     4301    if histNames[0][:4] not in ['SASD','IMG ']:
    42944302        colList += [[100.*data[name]['Rvals'].get('DelChi2',-1) for name in histNames]]
    42954303        colSigs += [None]
     
    44574465        G2frame.dataFrame.setSizePosLeft([700,350])
    44584466    # highlight unconverged shifts
    4459     if 'SASD' not in histNames[0]:
     4467    if histNames[0][:4] not in ['SASD','IMG ']:
    44604468        for row,name in enumerate(histNames):
    44614469            deltaChi = G2frame.SeqTable.GetValue(row,deltaChiCol)
     
    46224630    G2frame.dataFrame.setSizePosLeft(Size)
    46234631    G2frame.PatternTree.SetItemPyData(item,data)
    4624     if kind == 'PWDR':
    4625         G2plt.PlotPatterns(G2frame,plotType=kind,newPlot=True)
    4626     elif kind == 'SASD':
     4632    if kind in ['PWDR','SASD']:
    46274633        G2plt.PlotPatterns(G2frame,plotType=kind,newPlot=True)
    46284634    elif kind == 'HKLF':
  • trunk/GSASIIimgGUI.py

    r1378 r1380  
    13861386                Names.append(name)
    13871387                if 'IMG' in name:
     1388                    Data = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,id, 'Stress/Strain'))
    13881389                    if id == G2frame.Image:
    13891390                        Source = name
    1390                         Data = copy.deepcopy(G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,id, 'Stress/Strain')))
    13911391                    else:
    1392                         TextList.append([False,name,id])
     1392                        TextList.append([False,name,id,Data.get('Sample load',0.0)])
    13931393                id, cookie = G2frame.PatternTree.GetNextChild(G2frame.root, cookie)
    13941394            if len(TextList) == 1:
     
    14031403                        for item in result: item[0] = True
    14041404                    for i,item in enumerate(result):
    1405                         ifcopy,name,id = item
     1405                        ifcopy,name,id,load = item
    14061406                        if ifcopy:
    1407                             G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,id, 'Stress/Strain'),copy.deepcopy(data))
     1407                            Data = copy.deepcopy(data)
     1408                            Data['Sample load'] = load
     1409                            G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,id, 'Stress/Strain'),Data)
    14081410            finally:
    14091411                dlg.Destroy()
     
    14361438                File = open(filename,'w')
    14371439                save = {}
    1438                 keys = ['Type','Sample phi','Sample z']
     1440                keys = ['Type','Sample phi','Sample z','Sample load']
    14391441                keys2 = ['Dset','Dcalc','pixLimit','cutoff','Emat']
    14401442                File.write('{\n\t')
     
    14641466        G2plt.PlotStrain(G2frame,data,newPlot=True)
    14651467       
    1466     def OnAllFitStrSta(event):
     1468    def OnFitAllStrSta(event):
    14671469        TextList = [[False,'All IMG',0]]
    14681470        Names = []
    14691471        if G2frame.PatternTree.GetCount():
    1470             id, cookie = G2frame.PatternTree.GetFirstChild(G2frame.root)
    1471             while id:
    1472                 name = G2frame.PatternTree.GetItemText(id)
    1473                 Names.append(name)
    1474                 if 'IMG' in name:
    1475                     TextList.append([False,name,id])
    1476                 id, cookie = G2frame.PatternTree.GetNextChild(G2frame.root, cookie)
    1477             if len(TextList) == 1:
     1472            choices = G2gd.GetPatternTreeDataNames(G2frame,['IMG ',])
     1473            if len(choices) == 1:
    14781474                G2frame.ErrorDialog('Nothing to fit','There must some "IMG" patterns')
    14791475                return
    1480             dlg = G2frame.CopyDialog(G2frame,'Stress/Strain fitting','Select images to fit:',TextList)
    1481             try:
    1482                 if dlg.ShowModal() == wx.ID_OK:
    1483                     result = dlg.GetData()
    1484                     if result[0][0]:                    #the 'All IMG' is True
    1485                         result = TextList[1:]
    1486                         for item in result: item[0] = True
    1487                     for item in result:
    1488                         ifFit,name,id = item
    1489                         if ifFit:
    1490                             Controls = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,id, 'Image Controls'))
    1491                             StaCtrls = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,id, 'Stress/Strain'))
    1492                             id = G2gd.GetPatternTreeItemId(G2frame, G2frame.root, name)
    1493                             Npix,imagefile = G2frame.PatternTree.GetItemPyData(id)
    1494                             image = G2IO.GetImageData(G2frame,imagefile,True)
    1495                             G2img.FitStrSta(image,StaCtrls,Controls)
    1496                             G2plt.PlotStrain(G2frame,StaCtrls,newPlot=True)
     1476            sel = []
     1477            dlg = G2gd.G2MultiChoiceDialog(G2frame,'Stress/Strain fitting','Select images to fit:',choices)
     1478            dlg.SetSelections(sel)
     1479            names = []
     1480            if dlg.ShowModal() == wx.ID_OK:
     1481                for sel in dlg.GetSelections():
     1482                    names.append(choices[sel])
     1483            dlg.Destroy()
     1484            SeqResult = {'histNames':names,}
     1485            dlg = wx.ProgressDialog('Sequential IMG Strain fit','Data set name = '+names[0],len(names),
     1486                style = wx.PD_ELAPSED_TIME|wx.PD_AUTO_HIDE|wx.PD_REMAINING_TIME|wx.PD_CAN_ABORT)         
     1487            wx.BeginBusyCursor()
     1488            try:
     1489                for i,name in enumerate(names):
     1490                    print ' Sequential strain fit for ',name
     1491                    GoOn = dlg.Update(i,newmsg='Data set name = '+name)[0]
     1492                    if not GoOn:
     1493                        break
     1494                    Id =  G2gd.GetPatternTreeItemId(G2frame,G2frame.root,name)
     1495                    Controls = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id, 'Image Controls'))
     1496                    StaCtrls = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id, 'Stress/Strain'))
     1497                    id = G2gd.GetPatternTreeItemId(G2frame, G2frame.root, name)
     1498                    Npix,imagefile = G2frame.PatternTree.GetItemPyData(Id)
     1499                    image = G2IO.GetImageData(G2frame,imagefile,True)
     1500                    G2img.FitStrSta(image,StaCtrls,Controls)
     1501                    G2plt.PlotStrain(G2frame,StaCtrls,newPlot=True)
     1502                    parmDict = {'Sample load':StaCtrls['Sample load'],}
     1503                    varyNames = ['e11','e12','e22']
     1504                    sig = []
     1505                    varyList = []
     1506                    variables = []
     1507                    for i,item in enumerate(StaCtrls['d-zero']):
     1508                        variables += item['Emat']
     1509                        sig += item['Esig']
     1510                        varyList += ['%d%s%s'%(i,':',Name) for Name in varyNames]
     1511                        parmDict['%d:Dcalc'%(i)] = item['Dcalc']
     1512                    SeqResult[name] = {'variables':variables,'varyList':varyList,'sig':sig,'Rvals':[],
     1513                        'covMatrix':[],'title':name,'parmDict':parmDict}
     1514                else:
     1515                    dlg.Destroy()
     1516                    print ' ***** Sequential strain refinement successful *****'
    14971517            finally:
    1498                 dlg.Destroy()
     1518                wx.EndBusyCursor()   
     1519            Id =  G2gd.GetPatternTreeItemId(G2frame,G2frame.root,'Sequential results')
     1520            if Id:
     1521                G2frame.PatternTree.SetItemPyData(Id,SeqResult)
     1522            else:
     1523                Id = G2frame.PatternTree.AppendItem(parent=G2frame.root,text='Sequential results')
     1524                G2frame.PatternTree.SetItemPyData(Id,SeqResult)
     1525            G2frame.PatternTree.SelectItem(Id)
    14991526            print 'All images fitted'
    15001527       
     
    15191546            data['Sample z'] = value
    15201547            samZ.SetValue("%.3f" % (data['Sample z']))
     1548               
     1549        def OnSamLoad(event):
     1550            try:
     1551                value = float(samLoad.GetValue())
     1552            except ValueError:
     1553                value = data['Sample load']
     1554            data['Sample load'] = value
     1555            samLoad.SetValue("%.3f" % (data['Sample load']))
    15211556               
    15221557        samSizer = wx.BoxSizer(wx.HORIZONTAL)
     
    15401575        samZ.Bind(wx.EVT_TEXT_ENTER,OnSamZ)
    15411576        samZ.Bind(wx.EVT_KILL_FOCUS,OnSamZ)
     1577        samSizer.Add(wx.StaticText(G2frame.dataDisplay,-1,label=' Sample load(MPa): '),0,WACV)
     1578        samLoad = wx.TextCtrl(G2frame.dataDisplay,-1,value=("%.3f" % (data['Sample load'])),
     1579            style=wx.TE_PROCESS_ENTER)
     1580        samSizer.Add(samLoad,0,WACV)
     1581        samLoad.Bind(wx.EVT_TEXT_ENTER,OnSamLoad)
     1582        samLoad.Bind(wx.EVT_KILL_FOCUS,OnSamLoad)
     1583
    15421584        return samSizer
    15431585       
     
    16321674        return dzeroSizer
    16331675       
     1676# patches
     1677    if 'Sample load' not in data:
     1678        data['Sample load'] = 0.0
     1679# end patches
     1680   
    16341681    if G2frame.dataDisplay:
    16351682        G2frame.dataDisplay.Destroy()
     
    16401687    G2frame.dataFrame.Bind(wx.EVT_MENU, OnUpdateDzero, id=G2gd.wxID_UPDATEDZERO)
    16411688    G2frame.dataFrame.Bind(wx.EVT_MENU, OnFitStrSta, id=G2gd.wxID_STRSTAFIT)
    1642     G2frame.dataFrame.Bind(wx.EVT_MENU, OnAllFitStrSta, id=G2gd.wxID_STRSTAALLFIT)
     1689    G2frame.dataFrame.Bind(wx.EVT_MENU, OnFitAllStrSta, id=G2gd.wxID_STRSTAALLFIT)
    16431690    G2frame.dataFrame.Bind(wx.EVT_MENU, OnCopyStrSta, id=G2gd.wxID_STRSTACOPY)
    16441691    G2frame.dataFrame.Bind(wx.EVT_MENU, OnLoadStrSta, id=G2gd.wxID_STRSTALOAD)
  • trunk/GSASIIpwdGUI.py

    r1378 r1380  
    28042804                    CopyForward = True
    28052805                else:
    2806                     G2frame.seqReverse = True
     2806                    Reverse = True
    28072807        dlg.Destroy()
    28082808        dlg = wx.ProgressDialog('SASD Sequential fit','Data set name = '+names[0],len(names),
    28092809            style = wx.PD_ELAPSED_TIME|wx.PD_AUTO_HIDE|wx.PD_REMAINING_TIME|wx.PD_CAN_ABORT)
    28102810        wx.BeginBusyCursor()
    2811         if G2frame.seqReverse:
     2811        if Reverse:
    28122812            names.reverse()
    28132813        try:
     
    28262826                IInst = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id, 'Instrument Parameters'))
    28272827                IfOK,result,varyList,sig,Rvals,covMatrix,parmDict,Msg = G2sasd.ModelFit(IProfile,IProfDict,ILimits,ISample,IModel)
    2828                 JModel = copy.copy(IModel)
     2828                JModel = copy.deepcopy(IModel)
    28292829                if not IfOK:
    28302830                    G2frame.ErrorDialog('Failed sequential refinement for data '+name,
     
    28342834                    dlg.Destroy()
    28352835                    break
     2836                else:
     2837                    G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id, 'Models'),copy.deepcopy(IModel))
    28362838               
    28372839                G2sasd.ModelFxn(IProfile,IProfDict,ILimits,ISample,IModel)
Note: See TracChangeset for help on using the changeset viewer.