Changeset 2222


Ignore:
Timestamp:
Apr 22, 2016 11:41:55 AM (6 years ago)
Author:
vondreele
Message:

fix min image default threshold at zero rather than min(image) - avoids problems with corrected images
refactor copy image controls, masks & stress/stran coeff to use G2MultiChoiceDialog
refactor integrateall & fitall stress/strain to use G2MultiChoiceDialog
all much nicer & cleaner code

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIIO.py

    r2215 r2222  
    340340        Data['Flat Bkg'] = 0.0
    341341    Data['setDefault'] = False
    342     Data['range'] = [(Imin,Imax),[Imin,Imax]]
     342    Data['range'] = [(0,Imax),[Imin,Imax]]
    343343    G2frame.PatternTree.SetItemPyData(G2frame.PatternTree.AppendItem(Id,text='Image Controls'),Data)
    344     Masks = {'Points':[],'Rings':[],'Arcs':[],'Polygons':[],'Frames':[],'Thresholds':[(Imin,Imax),[Imin,Imax]]}
     344    Masks = {'Points':[],'Rings':[],'Arcs':[],'Polygons':[],'Frames':[],'Thresholds':[(0,Imax),[Imin,Imax]]}
    345345    G2frame.PatternTree.SetItemPyData(G2frame.PatternTree.AppendItem(Id,text='Masks'),Masks)
    346346    G2frame.PatternTree.SetItemPyData(G2frame.PatternTree.AppendItem(Id,text='Stress/Strain'),
  • trunk/GSASIIimgGUI.py

    r2221 r2222  
    5353def GetImageZ(G2frame,data):
    5454    '''Gets image & applies dark, background & flat background corrections
     55    :param wx.Frame G2frame: main GSAS-II frame
     56    param: dict data: Image Controls dictionary
     57    return: array sumImg: corrected image for background/dark/flat back
    5558    '''
    5659   
     
    6366    if darkImg:
    6467        Did = G2gd.GetPatternTreeItemId(G2frame, G2frame.root, darkImg)
    65         Npix,imagefile,imagetag = G2frame.PatternTree.GetImageLoc(Did)
    66         imagefile = G2IO.CheckImageFile(G2frame,imagefile)
    67         darkImage = G2IO.GetImageData(G2frame,imagefile,True,ImageTag=imagetag)
    68         sumImg += darkImage*darkScale
     68        if Did:
     69            Npix,imagefile,imagetag = G2frame.PatternTree.GetImageLoc(Did)
     70            imagefile = G2IO.CheckImageFile(G2frame,imagefile)
     71            darkImage = G2IO.GetImageData(G2frame,imagefile,True,ImageTag=imagetag)
     72            sumImg += darkImage*darkScale
    6973    if not 'background image' in data:
    7074        return sumImg
     
    7276    if backImg:     #ignores any transmission effect in the background image
    7377        Bid = G2gd.GetPatternTreeItemId(G2frame, G2frame.root, backImg)
    74         Npix,imagefile,imagetag = G2frame.PatternTree.GetImageLoc(Bid)
    75         imagefile = G2IO.CheckImageFile(G2frame,imagefile)
    76         backImage = G2IO.GetImageData(G2frame,imagefile,True,ImageTag=imagetag)
    77         Bdata = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Bid,'Image Controls'))
    78         if darkImg:
    79             Did = G2gd.GetPatternTreeItemId(G2frame, G2frame.root,darkImg)
    80             Npix,imagefile,imagetag = G2frame.PatternTree.GetImageLoc(Did)
     78        if Bid:
     79            Npix,imagefile,imagetag = G2frame.PatternTree.GetImageLoc(Bid)
    8180            imagefile = G2IO.CheckImageFile(G2frame,imagefile)
    82             darkImage = G2IO.GetImageData(G2frame,imagefile,True,ImageTag=imagetag)
    83             backImage += darkImage*darkScale               
    84         sumImg += backImage*backScale
     81            backImage = G2IO.GetImageData(G2frame,imagefile,True,ImageTag=imagetag)
     82            Bdata = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Bid,'Image Controls'))
     83            if darkImg:
     84                Did = G2gd.GetPatternTreeItemId(G2frame, G2frame.root,darkImg)
     85                Npix,imagefile,imagetag = G2frame.PatternTree.GetImageLoc(Did)
     86                imagefile = G2IO.CheckImageFile(G2frame,imagefile)
     87                darkImage = G2IO.GetImageData(G2frame,imagefile,True,ImageTag=imagetag)
     88                backImage += darkImage*darkScale               
     89            sumImg += backImage*backScale
    8590    if darkImg: del darkImg         #force cleanup
    8691    if backImg: del backImg
    8792    sumImg -= data.get('Flat Bkg',0.)
     93    Imin = max(0.,np.min(sumImg))
     94    Imax = np.max(sumImg)
     95    data['range'] = [(Imin,Imax),[Imin,Imax]]
    8896    return sumImg
    8997   
     
    177185        Imin = max(0.,np.min(G2frame.ImageZ))
    178186        Imax = np.max(G2frame.ImageZ)
    179         data['range'] = [(Imin,Imax),[Imin,Imax]]
    180         masks['Thresholds'] = [(Imin,Imax),[Imin,Imax]]
     187        data['range'] = [(0,Imax),[Imin,Imax]]
     188        masks['Thresholds'] = [(0,Imax),[Imin,Imax]]
    181189        MaxSizer.GetChildren()[2].Window.SetValue(str(int(Imax)))   #tricky
    182190        MaxSizer.GetChildren()[5].Window.SetValue(str(int(Imin)))   #tricky
     
    207215       
    208216    def OnIntegrateAll(event):
    209         TextList = [[False,'All IMG',0]]
    210 #        Names = []
    211         if G2frame.PatternTree.GetCount():
    212             id, cookie = G2frame.PatternTree.GetFirstChild(G2frame.root)
    213             while id:
    214                 name = G2frame.PatternTree.GetItemText(id)
    215                 if 'IMG' in name:
    216                     TextList.append([False,name,id])
    217                 id, cookie = G2frame.PatternTree.GetNextChild(G2frame.root, cookie)
    218             if len(TextList) == 1:
    219                 G2frame.ErrorDialog('Nothing to integrate','There must some "IMG" patterns')
    220                 return
    221             dlg = G2frame.CopyDialog(G2frame,'Image integration controls','Select images to integrate:',TextList)
    222             try:
    223                 if dlg.ShowModal() == wx.ID_OK:
    224                     result = dlg.GetData()
    225                     if result[0][0]:                    #the 'All IMG' is True
    226                         result = TextList[1:]
    227                         for item in result: item[0] = True
    228                     G2frame.EnablePlot = False
    229                     for item in result:
    230                         ifintegrate,name,id = item
    231                         G2frame.Image = id
    232                         if ifintegrate:
    233                             Id = G2gd.GetPatternTreeItemId(G2frame,id, 'Image Controls')
    234                             Data = G2frame.PatternTree.GetItemPyData(Id)
    235                             blkSize = 128   #this seems to be optimal; will break in polymask if >1024
    236                             Nx,Ny = Data['size']
    237                             nXBlks = (Nx-1)/blkSize+1
    238                             nYBlks = (Ny-1)/blkSize+1
    239                             Nup = nXBlks*nYBlks*3+3
    240                             dlgp = wx.ProgressDialog("Elapsed time","2D image integration",Nup,
    241                                 style = wx.PD_ELAPSED_TIME|wx.PD_AUTO_HIDE)
    242                             try:
    243 #                                GSASIIpath.IPyBreak()
    244                                 image = GetImageZ(G2frame,Data)
    245                                 Masks = G2frame.PatternTree.GetItemPyData(
    246                                     G2gd.GetPatternTreeItemId(G2frame,id, 'Masks'))
    247                                 G2frame.Integrate = G2img.ImageIntegrate(image,Data,Masks,blkSize,dlgp)
    248                                 del image   #force cleanup
    249                                 pId = G2IO.SaveIntegration(G2frame,Id,Data)
    250                             finally:
    251                                 dlgp.Destroy()
    252                     else:
    253                         G2frame.EnablePlot = True
    254                         G2frame.PatternTree.SelectItem(pId)
    255                         G2frame.PatternTree.Expand(pId)
    256                         G2frame.PatternId = pId
    257                        
    258             finally:
    259                 dlg.Destroy()
     217        Names = G2gd.GetPatternTreeDataNames(G2frame,['IMG ',])
     218        dlg = G2G.G2MultiChoiceDialog(G2frame,'Image integration controls','Select images to integrate:',Names)
     219        try:
     220            if dlg.ShowModal() == wx.ID_OK:
     221                items = dlg.GetSelections()
     222                G2frame.EnablePlot = False
     223                for item in items:
     224                    name = Names[item]
     225                    G2frame.Image = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,name)
     226                    CId = G2gd.GetPatternTreeItemId(G2frame,G2frame.Image,'Image Controls')
     227                    Data = G2frame.PatternTree.GetItemPyData(CId)
     228                    blkSize = 128   #this seems to be optimal; will break in polymask if >1024
     229                    Nx,Ny = Data['size']
     230                    nXBlks = (Nx-1)/blkSize+1
     231                    nYBlks = (Ny-1)/blkSize+1
     232                    Nup = nXBlks*nYBlks*3+3
     233                    dlgp = wx.ProgressDialog("Elapsed time","2D image integration",Nup,
     234                        style = wx.PD_ELAPSED_TIME|wx.PD_AUTO_HIDE)
     235                    try:
     236                        image = GetImageZ(G2frame,Data)
     237                        Masks = G2frame.PatternTree.GetItemPyData(
     238                            G2gd.GetPatternTreeItemId(G2frame,G2frame.Image,'Masks'))
     239                        G2frame.Integrate = G2img.ImageIntegrate(image,Data,Masks,blkSize,dlgp)
     240                        del image   #force cleanup
     241                        pId = G2IO.SaveIntegration(G2frame,CId,Data)
     242                    finally:
     243                        dlgp.Destroy()
     244                else:
     245                    G2frame.EnablePlot = True
     246                    G2frame.PatternTree.SelectItem(pId)
     247                    G2frame.PatternTree.Expand(pId)
     248                    G2frame.PatternId = pId
     249#                        GSASIIpath.IPyBreak()
     250        finally:
     251            dlg.Destroy()
    260252       
    261253    def OnCopyControls(event):
    262         TextList = [[False,'All IMG',0]]
    263 #        Names = []
    264         if G2frame.PatternTree.GetCount():
    265             id, cookie = G2frame.PatternTree.GetFirstChild(G2frame.root)
    266             while id:
    267                 name = G2frame.PatternTree.GetItemText(id)
    268 #                Names.append(name)
    269                 if 'IMG' in name:
    270                     if id == G2frame.Image:
    271                         Source = name
    272                         Data = copy.deepcopy(data)
    273 #                        Data = copy.deepcopy(G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,id, 'Image Controls')))
    274                         Data['showLines'] = True
    275                         Data['ring'] = []
    276                         Data['rings'] = []
    277                         Data['ellipses'] = []
    278                         Data['setDefault'] = False
    279                     else:
    280                         TextList.append([False,name,id])
    281                 id, cookie = G2frame.PatternTree.GetNextChild(G2frame.root, cookie)
    282             if len(TextList) == 1:
    283                 G2frame.ErrorDialog('Nothing to copy controls to','There must be more than one "IMG" pattern')
    284                 return
    285             dlg = G2frame.CopyDialog(G2frame,'Copy image controls','Copy controls from '+Source+' to:',TextList)
    286             try:
    287                 if dlg.ShowModal() == wx.ID_OK:
    288                     result = dlg.GetData()
    289                     if result[0][0]:
    290                         result = TextList[1:]
    291                         for item in result: item[0] = True
    292                     for i,item in enumerate(result):
    293                         ifcopy,name,id = item
    294                         if ifcopy:
    295                             oldData = copy.deepcopy(G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,id, 'Image Controls')))
    296                             Data['range'] = oldData['range']
    297                             Data['size'] = oldData['size']
    298                             Data['GonioAngles'] = oldData.get('GonioAngles', [0.,0.,0.])
    299                             Data['ring'] = []
    300                             Data['rings'] = []
    301                             Data['ellipses'] = []
    302                             G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,id, 'Image Controls'),copy.deepcopy(Data))
    303             finally:
    304                 dlg.Destroy()
    305                 G2frame.PatternTree.SelectItem(G2frame.PickId)
     254        Names = G2gd.GetPatternTreeDataNames(G2frame,['IMG ',])
     255        if len(Names) == 1:
     256            G2frame.ErrorDialog('Nothing to copy controls to','There must be more than one "IMG" pattern')
     257            return
     258# set up source
     259        Data = copy.deepcopy(data)
     260        Data['showLines'] = True
     261        Data['ring'] = []
     262        Data['rings'] = []
     263        Data['ellipses'] = []
     264        Data['setDefault'] = False
     265        Source = G2frame.PatternTree.GetItemText(G2frame.Image)
     266        Names.pop(Names.index(Source))
     267# select targets & do copy
     268        dlg = G2G.G2MultiChoiceDialog(G2frame,'Copy image controls','Copy controls from '+Source+' to:',Names)
     269        try:
     270            if dlg.ShowModal() == wx.ID_OK:
     271                items = dlg.GetSelections()
     272                G2frame.EnablePlot = False
     273                for item in items:
     274                    name = Names[item]
     275                    Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,name)
     276                    CId = G2gd.GetPatternTreeItemId(G2frame,Id,'Image Controls')
     277                    oldData = copy.deepcopy(G2frame.PatternTree.GetItemPyData(CId))
     278#                    Data['range'] = oldData['range']
     279                    Data['size'] = oldData['size']
     280                    Data['GonioAngles'] = oldData.get('GonioAngles', [0.,0.,0.])
     281                    Data['ring'] = []
     282                    Data['rings'] = []
     283                    Data['ellipses'] = []
     284                    G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id, 'Image Controls'),copy.deepcopy(Data))
     285        finally:
     286            dlg.Destroy()
     287            G2frame.PatternTree.SelectItem(G2frame.PickId)
    306288               
    307289    def OnSaveControls(event):
     
    11911173
    11921174    def OnCopyMask(event):
    1193         TextList = [[False,'All IMG',0]]
    1194 #        Names = []
    1195         if G2frame.PatternTree.GetCount():
    1196             id, cookie = G2frame.PatternTree.GetFirstChild(G2frame.root)
    1197             while id:
    1198                 name = G2frame.PatternTree.GetItemText(id)
    1199 #                Names.append(name)
    1200                 if 'IMG' in name:
    1201                     if id == G2frame.Image:
    1202                         Source = name
    1203                         Mask = copy.deepcopy(G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,id, 'Masks')))
    1204                         Thresh = Mask.pop('Thresholds')  #remove Thresholds from source mask & save it for later
    1205                     else:
    1206                         TextList.append([False,name,id])
    1207                 id, cookie = G2frame.PatternTree.GetNextChild(G2frame.root, cookie)
    1208             if len(TextList) == 1:
    1209                 G2frame.ErrorDialog('Nothing to copy mask to','There must be more than one "IMG" pattern')
    1210                 return
    1211             dlg = G2frame.CopyDialog(G2frame,'Copy mask information','Copy mask from '+Source+' to:',TextList)
    1212             try:
    1213                 if dlg.ShowModal() == wx.ID_OK:
    1214                     result = dlg.GetData()
    1215                     if result[0][0]:
    1216                         result = TextList[1:]
    1217                         for item in result: item[0] = True
    1218                     for i,item in enumerate(result):
    1219                         ifcopy,name,id = item
    1220                         if ifcopy:
    1221                             mask = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,id, 'Masks'))
    1222 #                            Mask['Thresholds'][0] = mask['Thresholds'][0]
    1223 #                            Mask['Thresholds'][1][1] = min(mask['Thresholds'][1][1],Mask['Thresholds'][1][1])
    1224                             mask.update(Mask)
    1225                             mask['Thresholds'][1][0] = Thresh[1][0]  #copy only lower threshold                             
    1226                             G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,id, 'Masks'),copy.deepcopy(mask))
    1227             finally:
    1228                 dlg.Destroy()
    1229                
     1175        Names = G2gd.GetPatternTreeDataNames(G2frame,['IMG ',])
     1176        if len(Names) == 1:
     1177            G2frame.ErrorDialog('Nothing to copy masks to','There must be more than one "IMG" pattern')
     1178            return
     1179        Source = G2frame.PatternTree.GetItemText(G2frame.Image)
     1180        Names.pop(Names.index(Source))
     1181        Data = copy.deepcopy(data)
     1182        Thresh = Data.pop('Thresholds')     # & remove it as well
     1183        dlg = G2G.G2MultiChoiceDialog(G2frame,'Copy mask data','Copy masks from '+Source+' to:',Names)
     1184        try:
     1185            if dlg.ShowModal() == wx.ID_OK:
     1186                items = dlg.GetSelections()
     1187                for item in items:
     1188                    name = Names[item]
     1189                    Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,name)
     1190                    MId = G2gd.GetPatternTreeItemId(G2frame,Id,'Masks')
     1191                    Mask = copy.deepcopy(G2frame.PatternTree.GetItemPyData(MId))
     1192                    Mask.update(Data)
     1193                    Mask['Thresholds'][1][0] = Thresh[1][0]  #copy only lower threshold
     1194                    G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id, 'Masks'),Mask)
     1195        finally:
     1196            dlg.Destroy()
     1197
    12301198    def OnSaveMask(event):
    12311199        CleanupMasks(data)
     
    15131481           
    15141482    def OnCopyStrSta(event):
    1515         TextList = [[False,'All IMG',0,0]]
    1516 #        Names = []
    1517         if G2frame.PatternTree.GetCount():
    1518             id, cookie = G2frame.PatternTree.GetFirstChild(G2frame.root)
    1519             while id:
    1520                 name = G2frame.PatternTree.GetItemText(id)
    1521 #                Names.append(name)
    1522                 if 'IMG' in name:
    1523                     Data = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,id, 'Stress/Strain'))
    1524                     if id == G2frame.Image:
    1525                         Source = name
    1526                     else:
    1527                         TextList.append([False,name,id,Data.get('Sample load',0.0)])
    1528                 id, cookie = G2frame.PatternTree.GetNextChild(G2frame.root, cookie)
    1529             if len(TextList) == 1:
    1530                 G2frame.ErrorDialog('Nothing to copy controls to','There must be more than one "IMG" pattern')
    1531                 return
    1532             dlg = G2frame.CopyDialog(G2frame,'Copy stress/strain controls','Copy controls from '+Source+' to:',TextList)
    1533             try:
    1534                 if dlg.ShowModal() == wx.ID_OK:
    1535                     result = dlg.GetData()
    1536                     if result[0][0]:
    1537                         result = TextList[1:]
    1538                         for item in result: item[0] = True
    1539                     for i,item in enumerate(result):
    1540                         ifcopy,name,id,load = item
    1541                         if ifcopy:
    1542                             Data = copy.deepcopy(data)
    1543                             Data['Sample load'] = load
    1544                             G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,id, 'Stress/Strain'),Data)
    1545             finally:
    1546                 dlg.Destroy()
     1483        Names = G2gd.GetPatternTreeDataNames(G2frame,['IMG ',])
     1484        if len(Names) == 1:
     1485            G2frame.ErrorDialog('Nothing to copy controls to','There must be more than one "IMG" pattern')
     1486            return
     1487        Source = G2frame.PatternTree.GetItemText(G2frame.Image)
     1488        Names.pop(Names.index(Source))
     1489#        GSASIIpath.IPyBreak()
     1490        dlg = G2G.G2MultiChoiceDialog(G2frame,'Copy stress/strain controls','Copy controls from '+Source+' to:',Names)
     1491        try:
     1492            if dlg.ShowModal() == wx.ID_OK:
     1493                items = dlg.GetSelections()
     1494                for item in items:
     1495                    name = Names[item]
     1496                    Id = G2gd.GetPatternTreeItemId(G2frame,G2frame.root,name)
     1497                    CId = G2gd.GetPatternTreeItemId(G2frame,Id,'Stress/Strain')
     1498                    oldData = G2frame.PatternTree.GetItemPyData(CId)
     1499                    load = oldData.get('Sample load',0.0)
     1500                    Data = copy.deepcopy(data)
     1501                    Data['Sample load'] = load
     1502                    G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id,'Stress/Strain'),Data)
     1503        finally:
     1504            dlg.Destroy()
     1505            G2frame.PatternTree.SelectItem(G2frame.PickId)
    15471506
    15481507    def OnLoadStrSta(event):
     
    16741633       
    16751634    def OnFitAllStrSta(event):
    1676         TextList = [[False,'All IMG',0]]
    1677 #        Names = []
    1678         if G2frame.PatternTree.GetCount():
    1679             choices = G2gd.GetPatternTreeDataNames(G2frame,['IMG ',])
    1680             if len(choices) == 1:
    1681                 G2frame.ErrorDialog('Nothing to fit','There must some "IMG" patterns')
    1682                 return
    1683             sel = []
    1684             dlg = G2G.G2MultiChoiceDialog(G2frame,'Stress/Strain fitting','Select images to fit:',choices)
    1685             dlg.SetSelections(sel)
    1686             names = []
    1687             if dlg.ShowModal() == wx.ID_OK:
    1688                 for sel in dlg.GetSelections():
    1689                     names.append(choices[sel])
    1690             dlg.Destroy()
    1691             SeqResult = {}
    1692             dlg = wx.ProgressDialog('Sequential IMG Strain fit','Data set name = '+names[0],len(names),
    1693                 style = wx.PD_ELAPSED_TIME|wx.PD_AUTO_HIDE|wx.PD_REMAINING_TIME|wx.PD_CAN_ABORT)         
    1694             wx.BeginBusyCursor()
    1695             goodnames = []
    1696             try:
    1697                 for i,name in enumerate(names):
    1698                     print ' Sequential strain fit for ',name
    1699                     GoOn = dlg.Update(i,newmsg='Data set name = '+name)[0]
    1700                     if not GoOn:
    1701                         break
    1702                     Id =  G2gd.GetPatternTreeItemId(G2frame,G2frame.root,name)
    1703                     Controls = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id, 'Image Controls'))
    1704                     StaCtrls = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id, 'Stress/Strain'))
    1705                     if not len(StaCtrls['d-zero']):
    1706                         continue
    1707                     goodnames.append(name)
    1708                     id = G2gd.GetPatternTreeItemId(G2frame, G2frame.root, name)
    1709                     Npix,imagefile,imagetag = G2frame.PatternTree.GetImageLoc(Id)
    1710                     image = GetImageZ(G2frame,Controls)
    1711                     G2img.FitStrSta(image,StaCtrls,Controls)
    1712                     G2plt.PlotStrain(G2frame,StaCtrls,newPlot=True)
    1713                     parmDict = {'Sample load':StaCtrls['Sample load'],}
    1714                     varyNames = ['e11','e12','e22']
    1715                     sig = []
    1716                     varyList = []
    1717                     variables = []
    1718                     for i,item in enumerate(StaCtrls['d-zero']):
    1719                         variables += item['Emat']
    1720                         sig += item['Esig']
    1721                         varylist = ['%d%s%s'%(i,';',Name) for Name in varyNames]
    1722                         varyList += varylist
    1723                         parmDict.update(dict(zip(varylist,item['Emat'])))
    1724                         parmDict['%d:Dcalc'%(i)] = item['Dcalc']
    1725                     SeqResult[name] = {'variables':variables,'varyList':varyList,'sig':sig,'Rvals':[],
    1726                         'covMatrix':np.eye(len(variables)),'title':name,'parmDict':parmDict}
    1727                 else:
    1728                     SeqResult['histNames'] = goodnames
    1729                     dlg.Destroy()
    1730                     print ' ***** Sequential strain refinement successful *****'
    1731             finally:
    1732                 wx.EndBusyCursor()   
    1733             Id =  G2gd.GetPatternTreeItemId(G2frame,G2frame.root,'Sequential results')
    1734             if Id:
    1735                 G2frame.PatternTree.SetItemPyData(Id,SeqResult)
     1635        choices = G2gd.GetPatternTreeDataNames(G2frame,['IMG ',])
     1636        sel = []
     1637        dlg = G2G.G2MultiChoiceDialog(G2frame,'Stress/Strain fitting','Select images to fit:',choices)
     1638        dlg.SetSelections(sel)
     1639        names = []
     1640        if dlg.ShowModal() == wx.ID_OK:
     1641            for sel in dlg.GetSelections():
     1642                names.append(choices[sel])
     1643        dlg.Destroy()
     1644        SeqResult = {}
     1645        dlg = wx.ProgressDialog('Sequential IMG Strain fit','Data set name = '+names[0],len(names),
     1646            style = wx.PD_ELAPSED_TIME|wx.PD_AUTO_HIDE|wx.PD_REMAINING_TIME|wx.PD_CAN_ABORT)         
     1647        wx.BeginBusyCursor()
     1648        goodnames = []
     1649        try:
     1650            for i,name in enumerate(names):
     1651                print ' Sequential strain fit for ',name
     1652                GoOn = dlg.Update(i,newmsg='Data set name = '+name)[0]
     1653                if not GoOn:
     1654                    break
     1655                Id =  G2gd.GetPatternTreeItemId(G2frame,G2frame.root,name)
     1656                G2frame.Image = Id
     1657                Controls = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id, 'Image Controls'))
     1658                StaCtrls = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,Id, 'Stress/Strain'))
     1659                if not len(StaCtrls['d-zero']):
     1660                    continue
     1661                goodnames.append(name)
     1662                id = G2gd.GetPatternTreeItemId(G2frame, G2frame.root, name)
     1663                Npix,imagefile,imagetag = G2frame.PatternTree.GetImageLoc(Id)
     1664                image = GetImageZ(G2frame,Controls)
     1665                G2img.FitStrSta(image,StaCtrls,Controls)
     1666                G2plt.PlotStrain(G2frame,StaCtrls,newPlot=True)
     1667                parmDict = {'Sample load':StaCtrls['Sample load'],}
     1668                varyNames = ['e11','e12','e22']
     1669                sig = []
     1670                varyList = []
     1671                variables = []
     1672                for i,item in enumerate(StaCtrls['d-zero']):
     1673                    variables += item['Emat']
     1674                    sig += item['Esig']
     1675                    varylist = ['%d%s%s'%(i,';',Name) for Name in varyNames]
     1676                    varyList += varylist
     1677                    parmDict.update(dict(zip(varylist,item['Emat'])))
     1678                    parmDict['%d:Dcalc'%(i)] = item['Dcalc']
     1679                SeqResult[name] = {'variables':variables,'varyList':varyList,'sig':sig,'Rvals':[],
     1680                    'covMatrix':np.eye(len(variables)),'title':name,'parmDict':parmDict}
    17361681            else:
    1737                 Id = G2frame.PatternTree.AppendItem(parent=G2frame.root,text='Sequential results')
    1738                 G2frame.PatternTree.SetItemPyData(Id,SeqResult)
    1739             G2frame.PatternTree.SelectItem(Id)
    1740             print 'All images fitted'
     1682                SeqResult['histNames'] = goodnames
     1683                dlg.Destroy()
     1684                print ' ***** Sequential strain refinement successful *****'
     1685        finally:
     1686            wx.EndBusyCursor()   
     1687        Id =  G2gd.GetPatternTreeItemId(G2frame,G2frame.root,'Sequential results')
     1688        if Id:
     1689            G2frame.PatternTree.SetItemPyData(Id,SeqResult)
     1690        else:
     1691            Id = G2frame.PatternTree.AppendItem(parent=G2frame.root,text='Sequential results')
     1692            G2frame.PatternTree.SetItemPyData(Id,SeqResult)
     1693        G2frame.PatternTree.SelectItem(Id)
     1694        print 'All images fitted'
    17411695       
    17421696    def SamSizer():
Note: See TracChangeset for help on using the changeset viewer.