@@ -3802,6 +3802,108 @@ def fmtCell(cell):
38023802 # Restore the original saved project
38033803 wx.CallLater(100,_GetPhase)
38043804
3805+ def OnSubSearch(event):
3806+ '''Search for a lower symmetry structure consistent with the
3807+ current phase using the Bilbao SUBGROUPS web service
3808+
3809+ Based on GSASIIpwdGUI.OnRunSubs
3810+ '''
3811+ generalData = data['General']
3812+ Kx = [' ','0','1/2','-1/2','1/3','-1/3','2/3','1']
3813+ Ky = [' ','0','1/2','1/3','2/3','1']
3814+ Kz = [' ','0','1/2','3/2','1/3','2/3','1']
3815+ kvec = [['0','0','0'],[' ',' ',' '],[' ',' ',' ',' ']]
3816+ dlg = G2G.MultiDataDialog(G2frame,title='SUBGROUPS options',prompts=[' k-vector 1',' k-vector 2',' k-vector 3', \
3817+ ' Use whole star',' Filter by','preserve axes','max unique'],
3818+ values=kvec+[False,'',True,100],
3819+ limits=[[Kx[1:],Ky[1:],Kz[1:]],[Kx,Ky,Kz],[Kx,Ky,Kz],[True,False],['',' Landau transition',' Only maximal subgroups',],
3820+ [True,False],[1,100]],
3821+ formats=[['choice','choice','choice'],['choice','choice','choice'],['choice','choice','choice'],'bool','choice',
3822+ 'bool','%d',])
3823+ dlg.CenterOnParent()
3824+ if dlg.ShowModal() != wx.ID_OK: return
3825+
3826+ subcells = []
3827+ newVals = dlg.GetValues()
3828+ kvec[:9] = newVals[0]+newVals[1]+newVals[2]+[' ',]
3829+ nkvec = kvec.index(' ')
3830+ star = newVals[3]
3831+ filterby = newVals[4]
3832+ keepaxes = newVals[5]
3833+ maxequiv = newVals[6]
3834+ if 'maximal' in filterby:
3835+ maximal = True
3836+ Landau = False
3837+ elif 'Landau' in filterby:
3838+ maximal = False
3839+ Landau = True
3840+ else:
3841+ maximal = False
3842+ Landau = False
3843+ if nkvec not in [0,3,6,9]:
3844+ wx.MessageBox('Error: check your propagation vector(s)',
3845+ caption='Bilbao SUBGROUPS setup error',style=wx.ICON_EXCLAMATION)
3846+ return
3847+ if nkvec in [6,9] and Landau:
3848+ wx.MessageBox('Error, multi k-vectors & Landau not compatible',
3849+ caption='Bilbao SUBGROUPS setup error',style=wx.ICON_EXCLAMATION)
3850+ return
3851+ wx.MessageBox(' For use of SUBGROUPS, please cite:\n\n'+
3852+ G2G.GetCite('Bilbao: k-SUBGROUPSMAG'),
3853+ caption='Bilbao SUBGROUPS',
3854+ style=wx.ICON_INFORMATION)
3855+ wx.BeginBusyCursor()
3856+ SGData = generalData['SGData']
3857+ from . import SUBGROUPS as kSUB
3858+ SubGroups,baseList = kSUB.GetNonStdSubgroups(SGData,kvec[:9],star,Landau)
3859+ wx.EndBusyCursor()
3860+ if SubGroups is None:
3861+ wx.MessageBox('Check your internet connection?',caption='Bilbao SUBGROUPS error',style=wx.ICON_EXCLAMATION)
3862+ return
3863+ if not SubGroups:
3864+ if Landau:
3865+ wx.MessageBox('No results from SUBGROUPS, multi k-vectors & Landau not compatible',
3866+ caption='Bilbao SUBGROUPS error',style=wx.ICON_EXCLAMATION)
3867+ else:
3868+ wx.MessageBox('No results from SUBGROUPS, check your propagation vector(s)',
3869+ caption='Bilbao SUBGROUPS error',style=wx.ICON_EXCLAMATION)
3870+ return
3871+
3872+ # emulate indexing controls
3873+ controls = 16*[None]
3874+ controls[6:12] = generalData['Cell'][1:7] # cell
3875+ cx,ct,cs,cia = data['General']['AtomPtrs']
3876+ controls[15] = [atom[:cx+3] for atom in data['Atoms']]
3877+
3878+ dlg = wx.ProgressDialog('SUBGROUPS results',f'Processing {SubGroups[0][0]}',len(SubGroups),
3879+ style = wx.PD_ELAPSED_TIME|wx.PD_AUTO_HIDE|wx.PD_REMAINING_TIME)
3880+ import GSASII.GSASIIpwdGUI
3881+ for ir,result in enumerate(SubGroups):
3882+ dlg.Update(ir,newmsg='Processing '+result[0])
3883+ Trans = np.array(eval(result[1][0]))
3884+ Uvec = np.array(eval(result[1][1]))
3885+ phase = G2lat.makeBilbaoPhase(result,Uvec,Trans)
3886+ phase['gid'] = result[2]
3887+ phase['altList'] = result[3]
3888+ phase['supList'] = eval(result[4])
3889+ RVT = None
3890+ if keepaxes:
3891+ RVT = G2lat.FindNonstandard(controls,phase)
3892+ if RVT is not None:
3893+ result,Uvec,Trans = RVT
3894+ phase.update(G2lat.makeBilbaoPhase(result,Uvec,Trans))
3895+ phase['Cell'] = G2lat.TransformCell(controls[6:12],Trans)
3896+ phase['maxequiv'] = maxequiv
3897+ phase['nAtoms'] = len(GSASII.GSASIIpwdGUI.TestAtoms(phase,controls[15],SGData,Uvec,Trans,maxequiv,maximal))
3898+ subcells.append(phase)
3899+ dlg.Destroy()
3900+ data['SUBGROUPS'] = (subcells,baseList)
3901+ msg = f'''{len(subcells)} subgroup entries were generated. Use menu commands
3902+ "Select magnetic/subgroup phase" or "Make subgroup project file(s)"
3903+ to use these entries'''
3904+ G2G.G2MessageBox(G2frame,msg,'Sugbroups stored')
3905+ wx.CallAfter(UpdatePhaseData,G2frame,Item,data)
3906+
38053907 def OnTransform2Std(event):
38063908 '''Uses the Bilbao web site to transform a space group and coordinates
38073909 to a standard setting
@@ -3992,15 +4094,19 @@ def OnUseBilbao(event):
39924094 '''Select and apply a transformation matrix from the Bilbao web site
39934095 to create a new phase
39944096 '''
3995- PatternName = data['magPhases']
3996- PatternId = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,PatternName)
3997- UnitCellsId = G2gd.GetGPXtreeItemId(G2frame,PatternId, 'Unit Cells List')
3998- UCdata = list(G2frame.GPXtree.GetItemPyData(UnitCellsId))
3999- magData = UCdata[5]
4000- if len(UCdata[0]) < 17: #old version of k-SUBGROUPSMAG
4001- baseList = range(1,len(magData)+1)
4097+ if 'SUBGROUPS' in data:
4098+ magData,baseList = data['SUBGROUPS']
40024099 else:
4003- baseList = UCdata[0][16]
4100+ PatternName = data['magPhases']
4101+ PatternId = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,PatternName)
4102+ UnitCellsId = G2gd.GetGPXtreeItemId(G2frame,PatternId, 'Unit Cells List')
4103+ UCdata = list(G2frame.GPXtree.GetItemPyData(UnitCellsId))
4104+ magData = UCdata[5]
4105+ if len(UCdata[0]) < 17: #old version of k-SUBGROUPSMAG
4106+ baseList = range(1,len(magData)+1)
4107+ else:
4108+ baseList = UCdata[0][16]
4109+
40044110 magKeep = []
40054111 magIds = []
40064112 magchoices = []
@@ -4035,8 +4141,10 @@ def OnUseBilbao(event):
40354141 else:
40364142 phaseName = '%s-sub_%d'%(data['General']['Name'],magchoice['No.'])
40374143 newPhase = copy.deepcopy(data)
4038- newPhase['ranId'] = ran.randint(0,sys.maxsize),
4039- del newPhase['magPhases']
4144+ newPhase['ranId'] = ran.randint(0,sys.maxsize)
4145+ # remove subgroup info on parent from new phase
4146+ if 'magPhases' in newPhase: del newPhase['magPhases']
4147+ if 'SUBGROUPS' in newPhase: del newPhase['SUBGROUPS']
40404148 generalData = newPhase['General']
40414149 generalData['Name'] = phaseName
40424150 generalData['SGData'] = copy.deepcopy(magchoice['SGData'])
@@ -4109,20 +4217,25 @@ def OnApplySubgroups(event):
41094217 '''Select and apply a transformation matrix from the Bilbao web site
41104218 to replace current phase with a subgroup
41114219 '''
4112- PatternName = data['magPhases']
4113- PatternId = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,PatternName)
4114- UnitCellsId = G2gd.GetGPXtreeItemId(G2frame,PatternId, 'Unit Cells List')
4115- UCdata = list(G2frame.GPXtree.GetItemPyData(UnitCellsId))
4116- if len(UCdata[0]) < 17: #old version of k-SUBGROUPSMAG
4117- baseList = range(1,len(UCdata[5])+1)
4220+ if 'SUBGROUPS' in data:
4221+ subPhases,baseList = data['SUBGROUPS']
4222+ UnitCellsId = None
41184223 else:
4119- baseList = UCdata[0][16]
4224+ PatternName = data['magPhases']
4225+ PatternId = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,PatternName)
4226+ UnitCellsId = G2gd.GetGPXtreeItemId(G2frame,PatternId, 'Unit Cells List')
4227+ UCdata = list(G2frame.GPXtree.GetItemPyData(UnitCellsId))
4228+ if len(UCdata[0]) < 17: #old version of k-SUBGROUPSMAG
4229+ baseList = range(1,len(UCdata[5])+1)
4230+ else:
4231+ baseList = UCdata[0][16]
4232+ subPhases = UCdata[5]
41204233 subKeep = []
41214234 subIds = []
41224235 subchoices = []
41234236 ifMag = False
4124- itemList = [phase.get('gid',ip+1) for ip,phase in enumerate(UCdata[5] )]
4125- phaseDict = dict(zip(itemList,UCdata[5] ))
4237+ itemList = [phase.get('gid',ip+1) for ip,phase in enumerate(subPhases )]
4238+ phaseDict = dict(zip(itemList,subPhases ))
41264239 for im,mid in enumerate(baseList):
41274240 if phaseDict[mid]['Keep']:
41284241 phaseDict[mid]['No.'] = im+1
@@ -4218,8 +4331,10 @@ def OnApplySubgroups(event):
42184331 data.update(newPhase)
42194332 #clear away prev subgroup choices
42204333 if 'magPhases' in data: del data['magPhases']
4221- UCdata[5] = []
4222- G2frame.GPXtree.SetItemPyData(UnitCellsId,UCdata)
4334+ if 'SUBGROUPS' in data: del data['SUBGROUPS']
4335+ if UnitCellsId:
4336+ UCdata[5] = []
4337+ G2frame.GPXtree.SetItemPyData(UnitCellsId,UCdata)
42234338 # save new file
42244339 G2frame.GSASprojectfile = os.path.splitext(orgFilName
42254340 )[0]+'_'+spg.replace('/','_')+'.gpx'
@@ -12934,6 +13049,7 @@ def FillMenus():
1293413049 G2frame.Bind(wx.EVT_MENU, OnTransform2Std, id=G2G.wxID_TRANSFORMSTD)
1293513050 G2frame.Bind(wx.EVT_MENU, OnSuperSearch, id=G2G.wxID_SUPERSRCH)
1293613051 G2frame.Bind(wx.EVT_MENU, OnISOSearch, id=G2G.wxID_ISOSRCH)
13052+ G2frame.Bind(wx.EVT_MENU, OnSubSearch, id=G2G.wxID_SUBSRCH)
1293713053 G2frame.Bind(wx.EVT_MENU, OnCompare, id=G2G.wxID_COMPARESTRUCTURE)
1293813054 G2frame.Bind(wx.EVT_MENU, OnCompareCells, id=G2G.wxID_COMPARECELLS)
1293913055 G2frame.Bind(wx.EVT_MENU, OnUseBilbao, id=G2G.wxID_USEBILBAOMAG)
@@ -13318,6 +13434,9 @@ def renamePhaseName(phaseItem,generalData,newName):
1331813434 else:
1331913435 del data['magPhases']
1332013436 G2frame.dataWindow.GeneralCalc.Enable(G2G.wxID_USEBILBAOSUB,flag)
13437+ if not flag and 'SUBGROUPS' in data:
13438+ G2frame.dataWindow.GeneralCalc.Enable(G2G.wxID_USEBILBAOSUB,True)
13439+ G2frame.dataWindow.GeneralCalc.Enable(G2G.wxID_USEBILBAOMAG,True)
1332113440 G2frame.phaseDisplay.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGED, OnPageChanged)
1332213441 FillMenus()
1332313442 if G2frame.lastSelectedPhaseTab in Pages:
0 commit comments