Changeset 4417


Ignore:
Timestamp:
May 12, 2020 5:03:59 PM (3 years ago)
Author:
vondreele
Message:

further enhancements of the fullrmc - GSAS-II interface; now does atom swapping.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIphsGUI.py

    r4415 r4417  
    44274427                                       
    44284428            Indx = {}
    4429             atChoice = RMCPdict['atSeq']
     4429            atChoice = atNames
     4430            if G2frame.RMCchoice == 'RMCProfile':
     4431                atChoice = RMCPdict['atSeq']           
    44304432            swapSizer = wx.FlexGridSizer(4,5,5)
    44314433            swapLabels = [' ','Atom-A','Atom-B',' Swap prob.']
     
    46494651            def OnByMolec(event):
    46504652                RMCPdict['byMolec'] = bymolec.GetValue()
     4653                wx.CallAfter(UpdateRMC)
    46514654                           
    46524655            def OnReStart(event):
     
    48544857            restart.Bind(wx.EVT_CHECKBOX,OnReStart)
    48554858            resLine.Add(restart,0,WACV)
    4856             resLine.Add(wx.StaticText(G2frame.FRMC,label=' Computation cycles: '),0,WACV)
     4859            resLine.Add(wx.StaticText(G2frame.FRMC,label=' 10,000X Computation cycles: '),0,WACV)
    48574860            resLine.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,RMCPdict,'Cycles',min=1,size=[60,25]),0,WACV)
    48584861            mainSizer.Add(resLine,0,WACV)
     
    48794882            distBox.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,RMCPdict,'min Contact',min=0.,max=4.,size=(50,25)),0,WACV)           
    48804883            mainSizer.Add(distBox,0,WACV)
    4881             mainSizer.Add(GetPairSizer(RMCPdict),0,WACV)
    4882            
    4883             angBox = wx.BoxSizer(wx.HORIZONTAL)
    4884             angAdd = wx.Button(G2frame.FRMC,label='Add')
    4885             angAdd.Bind(wx.EVT_BUTTON,OnAddAngle)
    4886             angBox.Add(angAdd,0,WACV)
    4887             angBox.Add(wx.StaticText(G2frame.FRMC,label=' A-B-C angle restraints, weight: '),0,WACV)
    4888             angBox.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,RMCPdict,'Angle Weight',min=0.,max=100.,size=(50,25)),0,WACV)
    4889             mainSizer.Add(angBox,0,WACV)
    4890             if len(RMCPdict['Angles']):
    4891                 mainSizer.Add(GetAngleSizer(),0,WACV)
    4892                
    4893             torBox = wx.BoxSizer(wx.HORIZONTAL)
    4894             torAdd = wx.Button(G2frame.FRMC,label='Add')
    4895             torAdd.Bind(wx.EVT_BUTTON,OnAddTorsion)
    4896             torBox.Add(torAdd,0,WACV)
    4897             torBox.Add(wx.StaticText(G2frame.FRMC,label=' A-B-C-D torsion angle restraints, weight: '),0,WACV)
    4898             torBox.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,RMCPdict,'Torsion Weight',min=0.,max=100.,size=(50,25)),0,WACV)
    4899             mainSizer.Add(torBox,0,WACV)
    4900             if len(RMCPdict['Torsions']):
    4901                 mainSizer.Add(GetTorsionSizer(),0,WACV)
    4902 
     4884            if RMCPdict['byMolec']:
     4885                mainSizer.Add(GetPairSizer(RMCPdict),0,WACV)
     4886               
     4887                angBox = wx.BoxSizer(wx.HORIZONTAL)
     4888                angAdd = wx.Button(G2frame.FRMC,label='Add')
     4889                angAdd.Bind(wx.EVT_BUTTON,OnAddAngle)
     4890                angBox.Add(angAdd,0,WACV)
     4891                angBox.Add(wx.StaticText(G2frame.FRMC,label=' A-B-C angle restraints, weight: '),0,WACV)
     4892                angBox.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,RMCPdict,'Angle Weight',min=0.,max=100.,size=(50,25)),0,WACV)
     4893                mainSizer.Add(angBox,0,WACV)
     4894                if len(RMCPdict['Angles']):
     4895                    mainSizer.Add(GetAngleSizer(),0,WACV)
     4896                   
     4897                torBox = wx.BoxSizer(wx.HORIZONTAL)
     4898                torAdd = wx.Button(G2frame.FRMC,label='Add')
     4899                torAdd.Bind(wx.EVT_BUTTON,OnAddTorsion)
     4900                torBox.Add(torAdd,0,WACV)
     4901                torBox.Add(wx.StaticText(G2frame.FRMC,label=' A-B-C-D torsion angle restraints, weight: '),0,WACV)
     4902                torBox.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,RMCPdict,'Torsion Weight',min=0.,max=100.,size=(50,25)),0,WACV)
     4903                mainSizer.Add(torBox,0,WACV)
     4904                if len(RMCPdict['Torsions']):
     4905                    mainSizer.Add(GetTorsionSizer(),0,WACV)
     4906   
    49034907            G2G.HorizontalLine(mainSizer,G2frame.FRMC)
    49044908            mainSizer.Add(FileSizer(RMCPdict),0,WACV)
  • trunk/GSASIIpwd.py

    r4416 r4417  
    26252625from fullrmc.Constraints.DihedralAngleConstraints import DihedralAngleConstraint
    26262626from fullrmc.Core.MoveGenerator import MoveGeneratorCollector
     2627from fullrmc.Generators.Swaps import SwapPositionsGenerator
    26272628from fullrmc.Core.GroupSelector import RecursiveGroupSelector
    26282629from fullrmc.Selectors.RandomSelectors import RandomSelector
     
    26322633from fullrmc.Generators.Rotations import RotationGenerator, RotationAboutAxisGenerator
    26332634from fullrmc.Core.Collection import get_principal_axis
     2635from fullrmc.debugStuff import *
     2636InvokeDebugOpts()
     2637SwapGen = {}
    26342638# engine setup\n'''
    26352639    rundata += 'LOGGER.set_log_file_basename("%s")\n'%pName
     
    26622666                wtDict['Struct'] = filDat[1]
    26632667    rundata += '    ENGINE.add_constraints(InterMolecularDistanceConstraint())\n'
    2664     if len(BondList):
    2665         rundata += '    B_CONSTRAINT   = BondConstraint()\n'
    2666         rundata += '    ENGINE.add_constraints(B_CONSTRAINT)\n'
    2667     if len(AngleList):
    2668         rundata += '    A_CONSTRAINT   = BondsAngleConstraint()\n'
    2669         rundata += '    ENGINE.add_constraints(A_CONSTRAINT)\n'
    2670     if len(RMCPdict['Torsions']):
    2671         rundata += '    T_CONSTRAINT   = DihedralAngleConstraint()\n'
    2672         rundata += '    ENGINE.add_constraints(T_CONSTRAINT)\n'
     2668    if RMCPdict['byMolec']:
     2669        if len(BondList):
     2670            rundata += '    B_CONSTRAINT   = BondConstraint()\n'
     2671            rundata += '    ENGINE.add_constraints(B_CONSTRAINT)\n'
     2672        if len(AngleList):
     2673            rundata += '    A_CONSTRAINT   = BondsAngleConstraint()\n'
     2674            rundata += '    ENGINE.add_constraints(A_CONSTRAINT)\n'
     2675        if len(RMCPdict['Torsions']):
     2676            rundata += '    T_CONSTRAINT   = DihedralAngleConstraint()\n'
     2677            rundata += '    ENGINE.add_constraints(T_CONSTRAINT)\n'
    26732678    rundata += '    ENGINE.save()\n'
    26742679    rundata += 'else:\n'
     
    26782683    rundata += 'for constraint in Constraints:\n'
    26792684    rundata += '    strcons = str(type(constraint))\n'
    2680     if len(BondList):
    2681         rundata += '    if "BondConstraint" in strcons:\n'
    2682         rundata += '        constraint.set_variance_squared(%f)\n'%RMCPdict['Bond Weight']
    2683         rundata += '        constraint.create_bonds_by_definition(bondsDefinition={"%s":[\n'%Res
    2684         for bond in BondList:
    2685             rundata += '        %s'%bond
    2686         rundata += '        ]})\n'
    2687     if len(AngleList):
    2688         rundata += '    elif "BondsAngleConstraint" in strcons:\n'
    2689         rundata += '        constraint.set_variance_squared(%f)\n'%RMCPdict['Angle Weight']
    2690         rundata += '        constraint.create_angles_by_definition(anglesDefinition={"%s":[\n'%Res
    2691         for angle in AngleList:
    2692             rundata += '        %s'%angle
    2693         rundata += '        ]})\n'
    2694     if len(RMCPdict['Torsions']):
    2695         rundata += '    elif "DihedralAngleConstraint" in strcons:\n'
    2696         rundata += '        constraint.set_variance_squared(%f)\n'%RMCPdict['Torsion Weight']
    2697         rundata += '        constraint.create_angles_by_definition(anglesDefinition={"%s":[\n'%Res
    2698         for torsion in RMCPdict['Torsions']:
    2699             rundata += '    %s\n'%str(tuple(torsion))
    2700         rundata += '        ]})\n'
    2701     rundata += '    elif "InterMolecular" in strcons:\n'
     2685    rundata += '    if "InterMolecular" in strcons:\n'
    27022686    rundata += '        constraint.set_default_distance(%f)\n'%RMCPdict['min Contact']
    27032687    rundata += '    elif "PairDistribution" in strcons:\n'
     
    27102694    if RMCPdict['FitScale']:
    27112695        rundata += '        constraint.set_adjust_scale_factor((10, 0.01, 100.))\n'
    2712     rundata += 'ENGINE.set_groups_as_atoms()\n'
     2696    if RMCPdict['byMolec']:
     2697        if len(BondList):
     2698            rundata += '    elif "BondConstraint" in strcons:\n'
     2699            rundata += '        constraint.set_variance_squared(%f)\n'%RMCPdict['Bond Weight']
     2700            rundata += '        constraint.create_bonds_by_definition(bondsDefinition={"%s":[\n'%Res
     2701            for bond in BondList:
     2702                rundata += '        %s'%bond
     2703            rundata += '        ]})\n'
     2704        if len(AngleList):
     2705            rundata += '    elif "BondsAngleConstraint" in strcons:\n'
     2706            rundata += '        constraint.set_variance_squared(%f)\n'%RMCPdict['Angle Weight']
     2707            rundata += '        constraint.create_angles_by_definition(anglesDefinition={"%s":[\n'%Res
     2708            for angle in AngleList:
     2709                rundata += '        %s'%angle
     2710            rundata += '        ]})\n'
     2711        if len(RMCPdict['Torsions']):
     2712            rundata += '    elif "DihedralAngleConstraint" in strcons:\n'
     2713            rundata += '        constraint.set_variance_squared(%f)\n'%RMCPdict['Torsion Weight']
     2714            rundata += '        constraint.create_angles_by_definition(anglesDefinition={"%s":[\n'%Res
     2715            for torsion in RMCPdict['Torsions']:
     2716                rundata += '    %s\n'%str(tuple(torsion))
     2717            rundata += '        ]})\n'
    27132718    if len(RMCPdict['Swaps']):
    2714         print(RMCPdict['Swaps'])
    2715 
    2716     # allElements = ENGINE.allElements
    2717     # niSwapList = [[idx] for idx in range(len(allElements)) if allElements[idx]=='ni']
    2718     # tiSwapList = [[idx] for idx in range(len(allElements)) if allElements[idx]=='ti']
    2719     # # create swap generator
    2720     # toNiSG = SwapPositionsGenerator(swapList=niSwapList)
    2721     # toTiSG = SwapPositionsGenerator(swapList=tiSwapList)
    2722        
    2723 
    2724     rundata += 'ENGINE.run(restartPdb="%s",numberOfSteps=%d, saveFrequency=1000)\n'%(restart,RMCPdict['Cycles'])
     2719        rundata += '    allNames = ENGINE.allNames\n'
     2720        for swap in RMCPdict['Swaps']:
     2721            rundata += '    SwapA = [[idx] for idx in range(len(allNames)) if allNames[idx]=="%s"]\n'%swap[0]
     2722            rundata += '    SwapB = [[idx] for idx in range(len(allNames)) if allNames[idx]=="%s"]\n'%swap[1]
     2723            rundata += '    SwapGen["%s-%s"] = [SwapPositionsGenerator(swapList=SwapA),SwapPositionsGenerator(swapList=SwapB),%.2f]\n'%(swap[0],swap[1],swap[2])
    27252724    rundata += 'ENGINE.save()\n'
    27262725    rundata += '#setup runs for fullrmc\n'
    2727    
    2728    
    2729    
    2730    
    2731    
    2732        
    2733    
    2734 
     2726
     2727    rundata += 'for _ in range(%d):\n'%RMCPdict['Cycles']
     2728    rundata += '    ENGINE.set_groups_as_atoms()\n'
     2729    rundata += '    ENGINE.run(restartPdb="%s",numberOfSteps=10000, saveFrequency=1000)\n'%restart
     2730    rundata += '    for swaps in SwapGen:\n'
     2731    rundata += '        AB = swaps.split("-")\n'
     2732    rundata += '        ENGINE.set_groups_as_atoms()\n'
     2733    rundata += '        for g in ENGINE.groups:\n'
     2734    rundata += '            if allNames[g.indexes[0]]==AB[0]:\n'
     2735    rundata += '                g.set_move_generator(SwapGen[swaps][0])\n'
     2736    rundata += '            elif allNames[g.indexes[0]]==AB[1]:\n'
     2737    rundata += '                g.set_move_generator(SwapGen[swaps][1])\n'
     2738    rundata += '            sProb = SwapGen[swaps][2]\n'
     2739    rundata += '        ENGINE.run(restartPdb="%s",numberOfSteps=10000*sProb, saveFrequency=1000)\n'%restart
     2740    rundata += '        ENGINE.set_groups_as_atoms()\n'
     2741    rundata += '        ENGINE.run(restartPdb="%s",numberOfSteps=10000*(1.-sProb), saveFrequency=1000)\n'%restart
     2742    rundata += 'ENGINE.close()\n'
    27352743    rfile = open(rname,'w')
    27362744    rfile.writelines(rundata)
Note: See TracChangeset for help on using the changeset viewer.