Changeset 815


Ignore:
Timestamp:
Dec 14, 2012 4:28:59 PM (9 years ago)
Author:
vondreele
Message:

another hot key
more restraint development

Location:
trunk
Files:
2 added
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r814 r815  
    995995        self._Add_DataMenuItems(Data)
    996996        Calculate = wx.Menu(title='')       
    997         menubar.Append(menu=Calculate, title='Calculate')
     997        menubar.Append(menu=Calculate, title='&Calculate')
    998998        self._Add_CalculateMenuItems(Calculate)
    999999        Import = wx.Menu(title='')       
  • trunk/GSASIImacros/bonds-resrb.mac

    r812 r815  
    11!standard bond restraints for amino acids using flexible rigid bodies - Engh & Huber
    22F 0.3
    3 S * 1.329 .01 C N              !peptide chain
     3!peptide chain                                   
     4S * 1.329 .01 C N             
    45S * 1.249 .01 C OXT
    56S * 3.80 .1 CA CA
    6 S CYS 2.031 .01 SG SG          !disulfides
     7!disulfides
     8S CYS 2.031 .01 SG SG         
  • trunk/GSASIImacros/bonds.mac

    r812 r815  
    11!standard bond restraints for amino acids - Engh & Huber
    22F 0.3
    3 S * 1.329 .01 C N              !peptide chain
     3!peptide chain
     4S * 1.329 .01 C N             
    45S * 1.249 .01 C OXT
    5 S ALA 1.458 .01 N CA             !alanine
     6!alanine
     7S ALA 1.458 .01 N CA             
    68S ALA 1.525 .01 CA C
    79S ALA 1.231 .01 C O
    810S ALA 1.521 .01 CA CB
    9 S ARG 1.458 .01 N CA              !arginine
     11!arginine
     12S ARG 1.458 .01 N CA             
    1013S ARG 1.525 .01 CA C
    1114S ARG 1.231 .01 C O
     
    1720S ARG 1.326 .01 CZ NH1
    1821S ARG 1.326 .01 CZ NH2
    19 S ASN 1.458 .01 N CA                !aspargine
     22!aspargine
     23S ASN 1.458 .01 N CA               
    2024S ASN 1.525 .01 CA C
    2125S ASN 1.231 .01 C O
     
    2428S ASN 1.328 .01 CG ND2
    2529S ASN 1.231 .01 CG OD1
    26 S ASP 1.458 .01 N CA              !aspartate
     30!aspartate
     31S ASP 1.458 .01 N CA             
    2732S ASP 1.525 .01 CA C
    2833S ASP 1.231 .01 C O
     
    3136S ASP 1.249 .01 CG OD1
    3237S ASP 1.249 .01 CG OD2
    33 S CYS 1.458 .01 N CA             !cysteine
     38!cystine
     39S CYS 1.458 .01 N CA             
    3440S CYS 1.525 .01 CA C
    3541S CYS 1.231 .01 C O
     
    3743S CYS 1.808 .01 CB SG
    3844S CYS 2.031 .01 SG SG
    39 S GLN 1.458 .01 N CA                 !glutamine
     45!glutamine
     46S GLN 1.458 .01 N CA                 
    4047S GLN 1.525 .01 CA C
    4148S GLN 1.231 .01 C O
     
    4552S GLN 1.231 .01 CD OE1
    4653S GLN 1.328 .01 CD NE2
    47 S GLU 1.458 .01 N CA                 !glutamate
     54!glutamate
     55S GLU 1.458 .01 N CA                 
    4856S GLU 1.525 .01 CA C
    4957S GLU 1.231 .01 C O
     
    5361S GLU 1.249 .01 CD OE1
    5462S GLU 1.249 .01 CD OE2
    55 S GLY 1.451 .01 N CA               !glycine
     63!glycine
     64S GLY 1.451 .01 N CA               
    5665S GLY 1.516 .01 CA C
    5766S GLY 1.231 .01 O C
    58 S HIS 1.458 .01 N CA             !histidine
     67!histidine
     68S HIS 1.458 .01 N CA             
    5969S HIS 1.525 .01 CA C
    6070S HIS 1.231 .01 C O
     
    6575S HIS 1.321 .01 CE1 NE2
    6676S HIS 1.374 .01 CD2 NE2
    67 S HIS 1.354 .01 CG CD2
    68 S ILE 1.458 .01 N CA                  !isoleucine
     77S HIS 1.354 .01 CG CD2
     78!isoleucine
     79S ILE 1.458 .01 N CA                 
    6980S ILE 1.525 .01 CA C
    7081S ILE 1.231 .01 C O
     
    7384S ILE 1.521 .01 CB CG2
    7485S ILE 1.513 .01 CG1 CD1
    75 S LEU 1.458 .01 N CA                !leucine
     86!leucine
     87S LEU 1.458 .01 N CA               
    7688S LEU 1.525 .01 CA C
    7789S LEU 1.231 .01 C O
     
    8092S LEU 1.521 .01 CG CD1
    8193S LEU 1.521 .01 CG CD2
    82 S LYS 1.458 .01 N CA                 !lysine
     94!lysine
     95S LYS 1.458 .01 N CA                 
    8396S LYS 1.525 .01 CA C
    8497S LYS 1.231 .01 C O
     
    88101S LYS 1.520 .01 CD CE
    89102S LYS 1.489 .01 CE NZ
    90 S MET 1.458 .01 N CA               !methionine
     103!methionine
     104S MET 1.458 .01 N CA               
    91105S MET 1.525 .01 CA C
    92106S MET 1.231 .01 C O
     
    95109S MET 1.803 .01 CG SD
    96110S MET 1.791 .01 SD CE
    97 S PHE 1.458 .01 N CA               !phenylalanine
     111!phenylalanine
     112S PHE 1.458 .01 N CA               
    98113S PHE 1.525 .01 CA C
    99114S PHE 1.231 .01 C O
     
    106121S PHE 1.382 .01 CE1 CZ
    107122S PHE 1.382 .01 CE2 CZ
    108 S PRO 1.466 .01 N CA                 !proline
     123!proline
     124S PRO 1.466 .01 N CA                 
    109125S PRO 1.525 .01 CA C
    110126S PRO 1.231 .01 C O
     
    113129S PRO 1.492 .01 CB CG
    114130S PRO 1.503 .01 CD CG
    115 S SER 1.458 .01 N CA              !serine
     131!serine
     132S SER 1.458 .01 N CA             
    116133S SER 1.525 .01 CA C
    117134S SER 1.231 .01 C O
    118135S SER 1.530 .01 CA CB
    119136S SER 1.417 .01 CB OG
    120 S THR 1.458 .01 N CA             !threonine
     137!threonine
     138S THR 1.458 .01 N CA             
    121139S THR 1.525 .01 CA C
    122140S THR 1.231 .01 C O
     
    124142S THR 1.433 .01 CB OG1
    125143S THR 1.521 .01 CB CG2
    126 S TRP 1.458 .01 N CA               !tryptophan
     144!tryptophan
     145S TRP 1.458 .01 N CA               
    127146S TRP 1.525 .01 CA C
    128147S TRP 1.231 .01 C O
     
    139158S TRP 1.368 .01 CZ2 CH2
    140159S TRP 1.400 .01 CZ3 CH2
    141 S TYR 1.458 .01 N CA                   !tyrosine
     160!tyrosine
     161S TYR 1.458 .01 N CA                   
    142162S TYR 1.525 .01 CA C
    143163S TYR 1.231 .01 C O
     
    151171S TYR 1.378 .01 CE1 CZ
    152172S TYR 1.376 .01 CZ OH
    153 S VAL 1.458 .01 N CA                 !valine
     173!valine
     174S VAL 1.458 .01 N CA                 
    154175S VAL 1.525 .01 CA C
    155176S VAL 1.231 .01 C O
  • trunk/GSASIImacros/planes-resrb.mac

    r812 r815  
    22F 0.5
    33S * .01 CA C O N+
    4 
  • trunk/GSASIImacros/planes.mac

    r812 r815  
    22F 0.5
    33S ARG .01 NE CZ NH1 NH2
    4 
    54S ARG .01 CD NE CZ NH1 NH2
    6 
    75S ASN .01 CB CG OD1 ND2
    8 
    96S ASP .01 CB CG OD1 OD2
    10 
    117S GLN .01 CG CD OE1 NE2
    12 
    138S GLU .01 CG CD OE1 OE2
    14 
    159S HIS .01 CB CG ND1 CD2 CE1 NE2
    16 
    1710S PHE .01 CB CG CD1 CD2 CE1 CE2 CZ
    18 
    1911S TRP .01 CB CG CD1 NE1 CD2 CE2 CE3 CZ2 CZ3 CH2
    20 
    2112S TYR .01 CB CG CD1 CD2 CE1 CE2 CZ OH
    22 
    2313S * .01 CA C O N+
    24 
  • trunk/GSASIImath.py

    r811 r815  
    200200    return density,Volume/mass
    201201   
     202def getSyXYZ(XYZ,ops,SGData):
     203    XYZout = np.zeros_like(XYZ)
     204    for i,[xyz,op] in enumerate(zip(XYZ,ops)):
     205        if op == '1':
     206            XYZout[i] = xyz
     207        else:
     208            oprs = op.split('+')
     209            unit = [0,0,0]
     210            if oprs[1]:
     211                unit = np.array(list(eval(oprs[1])))
     212            syop =int(oprs[0])
     213            inv = syop/abs(syop)
     214            syop *= inv
     215            cent = syop/100
     216            syop %= 100
     217            syop -= 1
     218            M,T = SGData['SGOps'][syop]
     219            XYZout[i] = (np.inner(M,xyz)+T)*inv+SGData['SGCen'][cent]+unit
     220    return XYZout
     221   
    202222def getRestDist(XYZ,Amat):
    203223    return np.sqrt(np.sum(np.inner(Amat,(XYZ[1]-XYZ[0]))**2))
     224   
     225def getRestDeriv(Func,XYZ,Amat):
     226    deriv = np.array((3,len(XYZ)))
     227    dx = 0.00001
     228    for j,xyz in enumerate(XYZ):
     229        for i,x in enumerate(xyz):
     230            x += dx
     231            d1 = Func(XYZ,Amat)
     232            x -= 2*dx
     233            d2 = Func(XYZ,Amat)
     234            x += dx
     235            deriv[i][j] = (d1-d2)/(2*dx)
     236    return deriv
    204237
    205238def getRestAngle(XYZ,Amat):
     
    233266    return Evec[Order[0]]
    234267   
    235 def getRestChiral(XYZ,Amat):
    236    
     268def getRestChiral(XYZ,Amat):   
    237269    VecA = np.empty((3,3))   
    238270    VecA[0] = np.inner(XYZ[1]-XYZ[0],Amat)
     
    240272    VecA[2] = np.inner(XYZ[3]-XYZ[0],Amat)
    241273    return nl.det(VecA)
    242        
     274   
     275def getRestTorsion(XYZ,Amat,Coeff=[]):
     276    VecA = np.empty((3,3))
     277    VecA[0] = np.inner(XYZ[1]-XYZ[0],Amat)
     278    VecA[1] = np.inner(XYZ[2]-XYZ[1],Amat)
     279    VecA[2] = np.inner(XYZ[3]-XYZ[2],Amat)
     280    D = nl.det(VecA)
     281    Mag = np.sqrt(np.sum(VecA*VecA,axis=1))
     282    P12 = np.sum(VecA[0]*VecA[1])/(Mag[0]*Mag[1])
     283    P13 = np.sum(VecA[0]*VecA[2])/(Mag[0]*Mag[2])
     284    P23 = np.sum(VecA[1]*VecA[2])/(Mag[1]*Mag[2])
     285    Ang = 1.0
     286    if abs(P12) < 1.0 and abs(P23) < 1.0:
     287        Ang = (P12*P23-P13)/(np.sqrt(1.-P12**2)*np.sqrt(1.-P23**2))
     288    TOR = (acosd(Ang)*D/abs(D)+720.)%360.
     289    sum = 0.
     290    if len(Coeff):
     291        cof = np.reshape(Coeff,(3,3)).T
     292        delt = TOR-cof[1]
     293        delt = np.where(delt<-180.,delt+360.,delt)
     294        delt = np.where(delt>180.,delt-360.,delt)
     295#        pMax = np.min(cof[0])
     296        pMax = cof[0][np.argmin(delt)]
     297        term = -cof[2]*delt**2
     298        sum = np.sum(cof[0]*np.exp(term/1000.0))-pMax
     299    return TOR,sum
     300   
    243301def getDistDerv(Oxyz,Txyz,Amat,Tunit,Top,SGData):
    244302   
  • trunk/GSASIIphsGUI.py

    r814 r815  
    17391739                restData[PhaseName]['Bond'] = bondData
    17401740            dist = G2mth.getRestDist(atXYZ,Amat)
    1741             bondData['Bonds'].append([atIndx,atSymOp,dist,1.54,0.01])
     1741            bondData['Bonds'].append([atIndx,atSymOp,1.54,0.01])
    17421742        elif event.GetId() == G2gd.wxID_DRAWRESTRANGLE and len(indx) == 3:
    17431743            try:
     
    17481748                restData[PhaseName]['Angle'] = angleData
    17491749            angle = G2mth.getRestAngle(atXYZ,Amat)
    1750             angleData['Angles'].append([atIndx,atSymOp,angle,109.5,1.0])           
     1750            angleData['Angles'].append([atIndx,atSymOp,109.5,1.0])           
    17511751        elif event.GetId() == G2gd.wxID_DRAWRESTRPLANE and len(indx) > 3:
    17521752            try:
     
    17571757                restData[PhaseName]['Plane'] = planeData
    17581758            plane = G2mth.getRestPlane(atXYZ,Amat)
    1759             planeData['Planes'].append([atIndx,atSymOp,plane,0.0,0.01])           
     1759            planeData['Planes'].append([atIndx,atSymOp,0.0,0.01])           
    17601760        elif event.GetId() == G2gd.wxID_DRAWRESTRCHIRAL and len(indx) == 4:
    17611761            try:
     
    17661766                restData[PhaseName]['Chiral'] = chiralData
    17671767            volume = G2mth.getRestChiral(atXYZ,Amat)
    1768             chiralData['Volumes'].append([atIndx,atSymOp,volume,2.5,0.1])           
     1768            chiralData['Volumes'].append([atIndx,atSymOp,2.5,0.1])           
    17691769        else:
    17701770            print '**** ERROR wrong number of atoms selected for this restraint'
  • trunk/GSASIIrestrGUI.py

    r814 r815  
    3737    restrData = data[phaseName]
    3838    if 'Bond' not in restrData:
    39         restrData['Bond'] = {'wtFactor':1.0,'Bonds':[],'Use':True}
     39        restrData['Bond'] = {'wtFactor':1.0,'Range':0.9,'Bonds':[],'Use':True}
    4040    if 'Angle' not in restrData:
    41         restrData['Angle'] = {'wtFactor':1.0,'Angles':[],'Use':True}
     41        restrData['Angle'] = {'wtFactor':1.0,'Range':0.85,'Angles':[],'Use':True}
    4242    if 'Plane' not in restrData:
    43         restrData['Plane'] = {'wtFactor':1.0,'Planes':[],'Use':True}
     43        restrData['Plane'] = {'wtFactor':1.0,'Range':0.9,'Planes':[],'Use':True}
    4444    if 'Chiral' not in restrData:
    45         restrData['Chiral'] = {'wtFactor':1.0,'Volumes':[],'Use':True}
     45        restrData['Chiral'] = {'wtFactor':1.0,'Range':0.9,'Volumes':[],'Use':True}
    4646    if 'Torsion' not in restrData:
    47         restrData['Torsion'] = {'wtFactor':1.0,'Coeff':{},'Torsions':[],'Use':True}
     47        restrData['Torsion'] = {'wtFactor':1.0,'Range':0.9,'Coeff':{},'Torsions':[],'Use':True}
    4848    if 'Rama' not in restrData:
    49         restrData['Rama'] = {'wtFactor':1.0,'Coeff':{},'Ramas':[],'Use':True}
     49        restrData['Rama'] = {'wtFactor':1.0,'Range':0.9,'Coeff':{},'Ramas':[],'Use':True}
    5050    General = phasedata['General']
    5151    Cell = General['Cell'][1:7]          #skip flag & volume   
     
    5656    AtLookUp = G2mth.FillAtomLookUp(Atoms)
    5757    if 'macro' in General['Type']:
    58         Names = [atom[0]+atom[1]+atom[2]+' '+atom[3] for atom in Atoms]
     58        Names = [atom[0]+':'+atom[1]+atom[2]+' '+atom[3] for atom in Atoms]
    5959        Ids = []
    6060        Coords = []
     
    102102    def OnAddRestraint(event):
    103103        page = G2frame.dataDisplay.GetSelection()
     104        restName = G2frame.dataDisplay.GetPageText(page)
    104105        if 'Bond' in G2frame.dataDisplay.GetPageText(page):
    105             bondRestData = restrData['Bond']
    106             AddBondRestraint(bondRestData)
     106            AddBondRestraint(restrData['Bond'])
    107107        elif 'Angle' in G2frame.dataDisplay.GetPageText(page):
    108             angleRestData = restrData['Angle']
    109             AddAngleRestraint(angleRestData)
     108            AddAngleRestraint(restrData['Angle'])
    110109        elif 'Plane' in G2frame.dataDisplay.GetPageText(page):
    111             AddPlaneRestraint()
     110            AddPlaneRestraint(restrData['Plane'])
    112111        elif 'Chiral' in G2frame.dataDisplay.GetPageText(page):
    113             AddChiralRestraint()
     112            AddChiralRestraint(restrData['Chiral'])
    114113        elif 'Torsion' in G2frame.dataDisplay.GetPageText(page):
    115             AddTorsionRestraint()
     114            AddTorsionRestraint(restrData['Torsion'])
    116115        elif 'Rama' in G2frame.dataDisplay.GetPageText(page):
    117             AddRamaRestraint()
     116            AddRamaRestraint(restrData['Rama'])
    118117           
    119118    def OnAddAARestraint(event):
    120119        page = G2frame.dataDisplay.GetSelection()
    121120        if 'Bond' in G2frame.dataDisplay.GetPageText(page):
    122             bondRestData = restrData['Bond']
    123             AddAABondRestraint(bondRestData)
     121            AddAABondRestraint(restrData['Bond'])
    124122        elif 'Angle' in G2frame.dataDisplay.GetPageText(page):
    125             angleRestData = restrData['Angle']
    126             AddAAAngleRestraint(angleRestData)
     123            AddAAAngleRestraint(restrData['Angle'])
    127124        elif 'Plane' in G2frame.dataDisplay.GetPageText(page):
    128             AddAAPlaneRestraint()
     125            AddAAPlaneRestraint(restrData['Plane'])
    129126        elif 'Chiral' in G2frame.dataDisplay.GetPageText(page):
    130             AddAAChiralRestraint()
     127            AddAAChiralRestraint(restrData['Chiral'])
    131128        elif 'Torsion' in G2frame.dataDisplay.GetPageText(page):
    132             AddAATorsionRestraint()
     129            AddAATorsionRestraint(restrData['Torsion'])
    133130        elif 'Rama' in G2frame.dataDisplay.GetPageText(page):
    134             AddAARamaRestraint()
     131            AddAARamaRestraint(restrData['Rama'])
    135132           
    136133    def AddBondRestraint(bondRestData):
     
    150147                    else:
    151148                        Lists[listName].append([Ids[x],Types[x],Coords[x],])
    152         Factor = .85
     149        Factor = bondRestData['Range']
    153150        indices = (-1,0,1)
    154151        Units = np.array([[h,k,l] for h in indices for k in indices for l in indices])
     
    181178                                    else:
    182179                                        Topstr = str(Top)
    183                                     newBond = [[Oid,Tid],['1',Topstr], \
    184                                         ma.getdata(dist[indb])[i],1.54,0.01]
     180                                    newBond = [[Oid,Tid],['1',Topstr],1.54,0.01]
    185181                                    if newBond not in bondRestData['Bonds']:
    186182                                        bondRestData['Bonds'].append(newBond)
     
    197193        atoms = zip(Names,Coords,Ids)
    198194       
    199         Factor = .90
     195        Factor = bondRestData['Range']
    200196        while macStr:
    201197            items = macStr.split()
     
    224220                        obsd = np.sqrt(np.sum(np.inner(Amat,tCoord-oCoord)**2))
    225221                        if dist*Factor < obsd < dist/Factor:
    226                             newBond = [[oId,tId],['1','1'],obsd,dist,esd]
     222                            newBond = [[oId,tId],['1','1'],dist,esd]
    227223                            if newBond not in bondRestData['Bonds']:
    228224                                bondRestData['Bonds'].append(newBond)                         
     
    248244        targAtoms = [[Ids[x+iBeg],Types[x+iBeg],Coords[x+iBeg]] for x in range(len(Names[iBeg:]))]
    249245
    250         Factor = 1.0
     246        Factor = angleRestData['Range']
    251247        indices = (-1,0,1)
    252248        Units = np.array([[h,k,l] for h in indices for k in indices for l in indices])
     
    287283                        angle = G2mth.getRestAngle(XYZ,Amat)
    288284                        if angle not in angleRestData['Angles']:
    289                             angleRestData['Angles'].append([ids,ops,angle,109.5,1.0])
     285                            angleRestData['Angles'].append([ids,ops,109.5,1.0])
    290286        UpdateAngleRestr(angleRestData)               
    291287
     
    294290        if not macro:
    295291            return
     292        atoms = zip(Names,Coords,Ids)
    296293        macStr = macro.readline()
    297294        while macStr:
    298295            items = macStr.split()
    299             print items
    300296            if 'F' in items[0]:
    301297                restrData['Angle']['wtFactor'] = float(items[1])
    302298            elif 'S' in items[0]:
    303                 List = []
    304299                res = items[1]
    305                 dist = items[2]
    306                 esd = items[3]
    307                 oAtm = items[4]
    308                 tAtm = items[5]
    309                 for name,Type,coords,id in zip(Names,Types,Coords,Ids):
    310                     if res == '*' or res in name:
    311                         if oAtm in name:
    312                             oCoord = coords
    313                             oId = id
    314                             oName = name
    315                         elif tAtm in name:
    316                             tCoord = coords
    317                             tId = id
    318                             tName = name
    319                
     300                value = float(items[2])
     301                esd = float(items[3])
     302                Atms = items[4:7]
     303                pAtms = ['','','']
     304                for i,atm in enumerate(Atms):
     305                    if '+' in atm:
     306                        pAtms[i] = atm.strip('+')
     307                ids = np.array([0,0,0])
     308                coords = [[],[],[]]
     309                rNum = -1
     310                for name,coord,id in atoms:
     311                    names = name.split()
     312                    tNum = int(names[0].split(':')[0])
     313                    if res in names[0]:
     314                        try:
     315                            ipos = Atms.index(names[2])
     316                            ids[ipos] = id
     317                            coords[ipos] = coord
     318                        except ValueError:
     319                            continue
     320                    elif res == '*':
     321                        try:
     322                            ipos = Atms.index(names[2])
     323                            if not np.all(ids):
     324                                rNum = int(names[0].split(':')[0])
     325                            ids[ipos] = id
     326                            coords[ipos] = coord
     327                        except ValueError:
     328                            try:
     329                                if tNum == rNum+1:
     330                                    ipos = pAtms.index(names[2])
     331                                    ids[ipos] = id
     332                                    coords[ipos] = coord
     333                            except ValueError:
     334                                continue
     335                    if np.all(ids):
     336                        angle = [list(ids),['1','1','1'],value,esd]
     337                        if angle not in angleRestData['Angles']:
     338                            angleRestData['Angles'].append(angle)
     339                        ids = np.array([0,0,0])
     340                        coords = [[],[],[]]
    320341            macStr = macro.readline()
    321342        macro.close()
     
    337358                    origAtoms.append([Ids[x],Types[x],Coords[x]])
    338359
    339     def AddAAPlaneRestraint():
     360    def AddAAPlaneRestraint(planeRestData):
    340361        macro = getMacroFile('plane')
    341362        if not macro:
    342363            return
     364        atoms = zip(Names,Coords,Ids)
    343365        macStr = macro.readline()
    344366        while macStr:
    345367            items = macStr.split()
    346             print items
    347368            if 'F' in items[0]:
    348369                restrData['Plane']['wtFactor'] = float(items[1])
    349370            elif 'S' in items[0]:
    350                 List = []
    351371                res = items[1]
    352                 dist = items[2]
    353                 esd = items[3]
    354                 oAtm = items[4]
    355                 tAtm = items[5]
    356                 for name,Type,coords,id in zip(Names,Types,Coords,Ids):
    357                     if res == '*' or res in name:
    358                         if oAtm in name:
    359                             oCoord = coords
    360                             oId = id
    361                             oName = name
    362                         elif tAtm in name:
    363                             tCoord = coords
    364                             tId = id
    365                             tName = name
    366                
     372                esd = float(items[2])
     373                Atms = items[3:]
     374                pAtms = ['' for i in Atms]
     375                for i,atm in enumerate(Atms):
     376                    if '+' in atm:
     377                        pAtms[i] = atm.strip('+')
     378                rNum = -1
     379                ids = np.zeros(len(Atms))
     380                coords = [[] for i in range(len(Atms))]
     381                ops = ['1' for i in range(len(Atms))]
     382                for name,coord,id in atoms:
     383                    names = name.split()
     384                    tNum = int(names[0].split(':')[0])
     385                    if res in names[0]:
     386                        try:
     387                            ipos = Atms.index(names[2])
     388                            ids[ipos] = id
     389                            coords[ipos] = coord
     390                        except ValueError:
     391                            continue
     392                    elif res == '*':
     393                        try:
     394                            ipos = Atms.index(names[2])
     395                            if not np.all(ids):
     396                                rNum = int(names[0].split(':')[0])
     397                            ids[ipos] = id
     398                            coords[ipos] = coord
     399                        except ValueError:
     400                            try:
     401                                if tNum == rNum+1:
     402                                    ipos = pAtms.index(names[2])
     403                                    ids[ipos] = id
     404                                    coords[ipos] = coord
     405                            except ValueError:
     406                                continue
     407                    if np.all(ids):
     408                        plane = [list(ids),ops,0.0,esd]
     409                        if plane not in planeRestData['Planes']:
     410                            planeRestData['Planes'].append(plane)
     411                        ids = np.zeros(len(Atms))
     412                        coords = [[] for i in range(len(Atms))]
    367413            macStr = macro.readline()
    368414        macro.close()
     415        UpdatePlaneRestr(planeRestData)               
    369416
    370417    def AddChiralRestraint():
    371418        print 'Chiral restraint'
    372419       
    373     def AddAAChiralRestraint():
     420    def AddAAChiralRestraint(chiralRestData):
    374421        macro = getMacroFile('chiral')
    375422        if not macro:
    376423            return
     424        atoms = zip(Names,Coords,Ids)
    377425        macStr = macro.readline()
    378426        while macStr:
    379427            items = macStr.split()
    380             print items
    381428            if 'F' in items[0]:
    382429                restrData['Chiral']['wtFactor'] = float(items[1])
    383430            elif 'S' in items[0]:
    384                 List = []
    385431                res = items[1]
    386                 dist = items[2]
    387                 esd = items[3]
    388                 oAtm = items[4]
    389                 tAtm = items[5]
    390                 for name,Type,coords,id in zip(Names,Types,Coords,Ids):
    391                     if res == '*' or res in name:
    392                         if oAtm in name:
    393                             oCoord = coords
    394                             oId = id
    395                             oName = name
    396                         elif tAtm in name:
    397                             tCoord = coords
    398                             tId = id
    399                             tName = name
    400                
     432                value = float(items[2])
     433                esd = float(items[3])
     434                Atms = items[4:8]
     435                ids = np.array([0,0,0,0])
     436                coords = [[],[],[],[]]
     437                for name,coord,id in atoms:
     438                    names = name.split()
     439                    if res in names[0]:
     440                        try:
     441                            ipos = Atms.index(names[2])
     442                            ids[ipos] = id
     443                            coords[ipos] = coord
     444                        except ValueError:
     445                            pass
     446                        if np.all(ids):
     447                            chiral = [list(ids),['1','1','1','1'],value,esd]
     448                            if chiral not in chiralRestData['Volumes']:
     449                                chiralRestData['Volumes'].append(chiral)
     450                            ids = np.array([0,0,0,0])
     451                            coords = [[],[],[],[]]
    401452            macStr = macro.readline()
    402453        macro.close()
     454        UpdateChiralRestr(chiralRestData)               
    403455       
    404456    def AddTorsionRestraint():
    405457        print 'Torsion restraint'
    406458       
    407     def AddAATorsionRestraint():
    408         print 'Add AA Torsion'
     459    def AddAATorsionRestraint(torsionRestData):
     460        macro = getMacroFile('torsion')
     461        if not macro:
     462            return
     463        atoms = zip(Names,Coords,Ids)
     464        macStr = macro.readline()[:-1]
     465        while macStr:
     466            items = macStr.split()
     467            if 'F' in items[0]:
     468                restrData['Torsion']['wtFactor'] = float(items[1])
     469            elif 'A' in items[0]:
     470                name = items[10]
     471                coeff = np.zeros(9)
     472                for i,item in enumerate(items[1:10]):
     473                    coeff[i] = float(item)
     474                torsionRestData['Coeff'][name] = coeff
     475            elif 'S' in items[0]:
     476                Name = items[1]
     477                res = items[2]
     478                esd = float(items[3])
     479                Atms = items[4:8]
     480                pAtms = ['','','','']
     481                for i,atm in enumerate(Atms):
     482                    if '+' in atm:
     483                        pAtms[i] = atm.strip('+')
     484                ids = np.array([0,0,0,0])
     485                coords = [[],[],[],[]]
     486                rNum = -1
     487                for name,coord,id in atoms:
     488                    names = name.split()
     489                    tNum = int(names[0].split(':')[0])
     490                    if res in names[0]:
     491                        try:
     492                            ipos = Atms.index(names[2])
     493                            ids[ipos] = id
     494                            coords[ipos] = coord
     495                        except ValueError:
     496                            continue
     497                    elif res == '*':
     498                        try:
     499                            ipos = Atms.index(names[2])
     500                            if not np.all(ids):
     501                                rNum = int(names[0].split(':')[0])
     502                            ids[ipos] = id
     503                            coords[ipos] = coord
     504                        except ValueError:
     505                            try:
     506                                if tNum == rNum+1:
     507                                    ipos = pAtms.index(names[2])
     508                                    ids[ipos] = id
     509                                    coords[ipos] = coord
     510                            except ValueError:
     511                                continue
     512                    if np.all(ids):
     513                        torsion = [list(ids),['1','1','1','1'],Name,esd]
     514                        if torsion not in torsionRestData['Torsions']:
     515                            torsionRestData['Torsions'].append(torsion)
     516                        ids = np.array([0,0,0,0])
     517                        coords = [[],[],[],[]]
     518            macStr = macro.readline()
     519        macro.close()
     520        UpdateTorsionRestr(torsionRestData)                       
    409521       
    410522    def AddRamaRestraint():
    411523        print 'Ramachandran restraint'
    412524               
    413     def AddAARamaRestraint():
    414         print 'Add AA Ramachandran'
     525    def AddAARamaRestraint(ramaRestData):
     526        macro = getMacroFile('ramachandran')
     527        if not macro:
     528            return
     529        atoms = zip(Names,Coords,Ids)
     530        macStr = macro.readline()
     531        while macStr:
     532            items = macStr.split()
     533            if 'F' in items[0]:
     534                restrData['Rama']['wtFactor'] = float(items[1])
     535            elif 'A' in items[0]:
     536                nTerms = int(items[1])
     537                name = items[2]
     538                coeff = np.zeros((nTerms,6))
     539                for i in range(nTerms):
     540                    macStr = macro.readline()
     541                    items = macStr.split()
     542                    coeff[i] = np.fromstring([item for item in items])
     543                ramaRestData['Coeff'][name] = coeff
     544            elif 'S' in items[0]:
     545                name = items[1]
     546                res = items[2]
     547                esd = float(items[3])
     548                Atms = items[4:9]
     549                orNum = -1
     550                ids = np.array([0,0,0,0,0])
     551                coords = [[],[],[],[],[]]
     552                for name,coord,id in atoms:
     553                    names = name.split()
     554                    if res in names[0]:
     555                        rNum = int(names[0].split(res)[0])
     556                        try:
     557                            ipos = Atms.index(names[2])
     558                            ids[ipos] = id
     559                            coords[ipos] = coord
     560                        except ValueError:
     561                            pass
     562                        if np.all(ids):
     563                            orNum = rNum
     564                            torsionRestData['Rama'].append([list(ids),['1','1','1','1'],name,esd])
     565                            ids = np.array([0,0,0,0,0])
     566                            coords = [[],[],[],[],[]]
     567            macStr = macro.readline()
     568        macro.close()
     569        UpdateRamaRestr(ramaRestData)               
     570       
    415571       
    416572    def WtBox(wind,restData):
     573        if 'Range' not in restData: restData['Range'] = 0.9     #patch
    417574       
    418575        def OnWtFactor(event):
     
    423580            restData['wtFactor'] = value
    424581            wtfactor.SetValue('%.2f'%(value))
     582           
     583        def OnRange(event):
     584            try:
     585                value = float(sRange.GetValue())
     586            except ValueError:
     587                value = 1.0
     588            restData['Range'] = value
     589            sRange.SetValue('%.2f'%(value))
    425590           
    426591        def OnUseData(event):
     
    437602        useData.SetValue(restData['Use'])       
    438603        wtBox.Add(useData,0,wx.ALIGN_CENTER_VERTICAL)
     604        if 'Bond' in restData or 'Angle' in restData:
     605            wtBox.Add(wx.StaticText(wind,-1,'Search range:'),0,wx.ALIGN_CENTER_VERTICAL)
     606            sRange = wx.TextCtrl(wind,-1,value='%.2f'%(restData['Range']),style=wx.TE_PROCESS_ENTER)
     607            sRange.Bind(wx.EVT_TEXT_ENTER,OnRange)
     608            sRange.Bind(wx.EVT_KILL_FOCUS,OnRange)
     609            wtBox.Add(sRange,0,wx.ALIGN_CENTER_VERTICAL)
    439610        return wtBox
    440611       
     
    522693            if 'macro' in General['Type']:
    523694                colLabels = ['(res) A - (res) B','calc','obs','esd']
    524                 for i,[indx,ops,dcalc,dobs,esd] in enumerate(bondList):
     695                for i,[indx,ops,obs,esd] in enumerate(bondList):
    525696                    atoms = G2mth.GetAtomItemsById(Atoms,AtLookUp,indx,0,4)
    526697                    name = ''
    527698                    for atom in atoms:
    528699                        name += '('+atom[1]+atom[0].strip()+atom[2]+') '+atom[3]+' - '
    529                     table.append([name[:-3],dcalc,dobs,esd])
     700                    XYZ = np.array(G2mth.GetAtomItemsById(Atoms,AtLookUp,indx,cx,3))
     701                    calc = G2mth.getRestDist(XYZ,Amat)
     702                    table.append([name[:-3],calc,obs,esd])
    530703                    rowLabels.append(str(i))               
    531704            else:
    532705                colLabels = ['A+SymOp - B+SymOp','calc','obs','esd']
    533                 for i,[indx,ops,dcalc,dobs,esd] in enumerate(bondList):
    534                     atoms = G2mth.GetAtomItemsById(Atoms,AtLookUp,indx,ct-1)
    535                     table.append([atoms[0]+'+('+ops[0]+') - '+atoms[1]+'+('+ops[1]+')',dcalc,dobs,esd])
     706                for i,[indx,ops,obs,esd] in enumerate(bondList):
     707                    names = G2mth.GetAtomItemsById(Atoms,AtLookUp,indx,ct-1)
     708                    XYZ = np.array(G2mth.GetAtomItemsById(Atoms,AtLookUp,indx,cx,3))
     709                    XYZ = G2mth.getSyXYZ(XYZ,ops,SGData)
     710                    calc = G2mth.getRestDist(XYZ,Amat)
     711                    table.append([names[0]+'+('+ops[0]+') - '+names[1]+'+('+ops[1]+')',calc,obs,esd])
    536712                    rowLabels.append(str(i))
    537713            bondTable = G2gd.Table(table,rowLabels=rowLabels,colLabels=colLabels,types=Types)
     
    553729        BondRestr.SetSizer(mainSizer)
    554730        Size = mainSizer.Fit(G2frame.dataFrame)
    555         Size[0] += 5
     731        Size[0] = 600
    556732        Size[1] += 50       #make room for tab
    557733        BondRestr.SetSize(Size)
    558734        BondRestr.SetScrollbars(10,10,Size[0]/10-4,Size[1]/10-1)
    559         G2frame.dataFrame.setSizePosLeft(Size)
     735        G2frame.dataFrame.SetSize(Size)
    560736       
    561737    def UpdateAngleRestr(angleRestData):
    562        
    563         def OnColSort(event):
    564             r,c = event.GetRow(),event.GetCol()
    565             if r < 0 and c == 0:
    566                 names = G2mth.sortArray(table,0)
    567                 angles = []
    568                 for name in names:
    569                     idx = table.index(name)
    570                     angles.append(angleList[idx])
    571                 angleRestData['Angles'] = angles
    572                 UpdateAngleRestr(angleRestData)               
    573738       
    574739        def OnChangeValue(event):
     
    623788            if 'macro' in General['Type']:
    624789                colLabels = ['(res) A - (res) B - (res) C','calc','obs','esd']
    625                 for i,[indx,ops,dcalc,dobs,esd] in enumerate(angleList):
     790                for i,[indx,ops,obs,esd] in enumerate(angleList):
    626791                    atoms = G2mth.GetAtomItemsById(Atoms,AtLookUp,indx,0,4)
    627792                    name = ''
    628793                    for atom in atoms:
    629794                        name += '('+atom[1]+atom[0].strip()+atom[2]+') '+atom[3]+' - '
    630                     table.append([name[:-3],dcalc,dobs,esd])
     795                    XYZ = np.array(G2mth.GetAtomItemsById(Atoms,AtLookUp,indx,cx,3))
     796                    calc = G2mth.getRestAngle(XYZ,Amat)
     797                    table.append([name[:-3],calc,obs,esd])
    631798                    rowLabels.append(str(i))                               
    632799            else:
    633800                colLabels = ['A+SymOp - B+SymOp - C+SymOp','calc','obs','esd']
    634                 for i,[indx,ops,dcalc,dobs,esd] in enumerate(angleList):
     801                for i,[indx,ops,obs,esd] in enumerate(angleList):
    635802                    atoms = G2mth.GetAtomItemsById(Atoms,AtLookUp,indx,ct-1)
    636                     table.append([atoms[0]+'+('+ops[0]+') - '+atoms[1]+'+('+ops[1]+') - '+atoms[2]+ \
    637                     '+('+ops[2]+')',dcalc,dobs,esd])
     803                    name = atoms[0]+'+('+ops[0]+') - '+atoms[1]+'+('+ops[1]+') - '+atoms[2]+ \
     804                    '+('+ops[2]+')'
     805                    XYZ = np.array(G2mth.GetAtomItemsById(Atoms,AtLookUp,indx,cx,3))
     806                    XYZ = G2mth.getSyXYZ(XYZ,ops,SGData)
     807                    calc = G2mth.getRestAngle(XYZ,Amat)
     808                    table.append([name,calc,obs,esd])
    638809                    rowLabels.append(str(i))
    639810            angleTable = G2gd.Table(table,rowLabels=rowLabels,colLabels=colLabels,types=Types)
     
    655826        AngleRestr.SetSizer(mainSizer)
    656827        Size = mainSizer.Fit(G2frame.dataFrame)
    657         Size[0] += 5
     828        Size[0] = 600
    658829        Size[1] += 50      #make room for tab
    659830        AngleRestr.SetSize(Size)
    660831        AngleRestr.SetScrollbars(10,10,Size[0]/10-4,Size[1]/10-1)
    661         G2frame.dataFrame.setSizePosLeft(Size)
     832        G2frame.dataFrame.SetSize(Size)
     833#        G2frame.dataFrame.setSizePosLeft(Size)
    662834   
    663835    def UpdatePlaneRestr(planeRestData):
     
    705877            if 'macro' in General['Type']:
    706878                colLabels = ['(res) atom','calc','obs','esd']
    707                 for i,[indx,ops,dcalc,dobs,esd] in enumerate(planeList):
     879                for i,[indx,ops,obs,esd] in enumerate(planeList):
    708880                    atoms = G2mth.GetAtomItemsById(Atoms,AtLookUp,indx,0,4)
    709881                    name = ''
     
    712884                        if (a+1)%3 == 0:
    713885                            name += '\n'
    714                     table.append([name[:-3],dcalc,dobs,esd])
     886                    XYZ = np.array(G2mth.GetAtomItemsById(Atoms,AtLookUp,indx,cx,3))
     887                    calc = G2mth.getRestPlane(XYZ,Amat)
     888                    table.append([name[:-3],calc,obs,esd])
    715889                    rowLabels.append(str(i))
    716890            else:                               
    717891                colLabels = ['atom+SymOp','calc','obs','esd']
    718                 for i,[indx,ops,dcalc,dobs,esd] in enumerate(planeList):
     892                for i,[indx,ops,obs,esd] in enumerate(planeList):
    719893                    atoms = G2mth.GetAtomItemsById(Atoms,AtLookUp,indx,ct-1)
    720                     atString = ''
     894                    XYZ = np.array(G2mth.GetAtomItemsById(Atoms,AtLookUp,indx,cx,3))
     895                    XYZ = G2mth.getSyXYZ(XYZ,ops,SGData)
     896                    calc = G2mth.getRestPlane(XYZ,Amat)
     897                    name = ''
    721898                    for a,atom in enumerate(atoms):
    722                         atString += atom+'+ ('+ops[a]+'),'
     899                        name += atom+'+ ('+ops[a]+'),'
    723900                        if (a+1)%3 == 0:
    724                             atString += '\n'
    725                     table.append([atString[:-1],dcalc,dobs,esd])
     901                            name += '\n'
     902                    table.append([name[:-1],calc,obs,esd])
    726903                    rowLabels.append(str(i))
    727904            planeTable = G2gd.Table(table,rowLabels=rowLabels,colLabels=colLabels,types=Types)
     
    743920        PlaneRestr.SetSizer(mainSizer)
    744921        Size = mainSizer.Fit(G2frame.dataFrame)
    745         Size[0] += 5
     922        Size[0] = 600
    746923        Size[1] += 50       #make room for tab
    747924        PlaneRestr.SetSize(Size)
    748925        PlaneRestr.SetScrollbars(10,10,Size[0]/10-4,Size[1]/10-1)
    749         G2frame.dataFrame.setSizePosLeft(Size)
     926        G2frame.dataFrame.SetSize(Size)
     927#        G2frame.dataFrame.setSizePosLeft(Size)
    750928   
    751929    def UpdateChiralRestr(chiralRestData):
     
    802980            if 'macro' in General['Type']:
    803981                colLabels = ['(res) O (res) A (res) B (res) C','calc','obs','esd']
    804                 for i,[indx,ops,dcalc,dobs,esd] in enumerate(volumeList):
     982                for i,[indx,ops,obs,esd] in enumerate(volumeList):
    805983                    atoms = G2mth.GetAtomItemsById(Atoms,AtLookUp,indx,0,4)
    806984                    name = ''
    807985                    for atom in atoms:
    808986                        name += '('+atom[1]+atom[0].strip()+atom[2]+') '+atom[3]+' '
    809                     table.append([name,dcalc,dobs,esd])
     987                    XYZ = np.array(G2mth.GetAtomItemsById(Atoms,AtLookUp,indx,cx,3))
     988                    calc = G2mth.getRestChiral(XYZ,Amat)
     989                    table.append([name,calc,obs,esd])
    810990                    rowLabels.append(str(i))
    811991            else:
    812992                colLabels = ['O+SymOp  A+SymOp  B+SymOp  C+SymOp)','calc','obs','esd']
    813                 for i,[indx,ops,dcalc,dobs,esd] in enumerate(volumeList):
     993                for i,[indx,ops,obs,esd] in enumerate(volumeList):
    814994                    atoms = G2mth.GetAtomItemsById(Atoms,AtLookUp,indx,ct-1)
    815                     table.append([atoms[0]+'+('+ops[0]+') '+atoms[1]+'+('+ops[1]+') '+atoms[2]+ \
    816                     '+('+ops[2]+') '+atoms[3]+'+('+ops[3]+')',dcalc,dobs,esd])
     995                    name = atoms[0]+'+('+ops[0]+') '+atoms[1]+'+('+ops[1]+') '+atoms[2]+ \
     996                        '+('+ops[2]+') '+atoms[3]+'+('+ops[3]+')'
     997                    XYZ = np.array(G2mth.GetAtomItemsById(Atoms,AtLookUp,indx,cx,3))
     998                    XYZ = G2mth.getSyXYZ(XYZ,ops,SGData)
     999                    calc = G2mth.getRestChiral(XYZ,Amat)
     1000                    table.append([name,calc,obs,esd])
    8171001                    rowLabels.append(str(i))
    8181002            volumeTable = G2gd.Table(table,rowLabels=rowLabels,colLabels=colLabels,types=Types)
     
    8341018        ChiralRestr.SetSizer(mainSizer)
    8351019        Size = mainSizer.Fit(G2frame.dataFrame)
    836         Size[0] += 5
     1020        Size[0] = 600
    8371021        Size[1] += 50       #make room for tab
    8381022        ChiralRestr.SetSize(Size)
    8391023        ChiralRestr.SetScrollbars(10,10,Size[0]/10-4,Size[1]/10-1)
    840         G2frame.dataFrame.setSizePosLeft(Size)
     1024        G2frame.dataFrame.SetSize(Size)
     1025#        G2frame.dataFrame.setSizePosLeft(Size)
    8411026   
    8421027    def UpdateTorsionRestr(torsionRestData):
     
    8521037            UpdateTorsionRestr(torsionRestData)               
    8531038           
     1039        def OnChangeEsd(event):
     1040            rows = Torsions.GetSelectedRows()
     1041            if not rows:
     1042                return
     1043            Torsions.ClearSelection()
     1044            val = torsionList[rows[0]][4]
     1045            dlg = G2phG.SingleFloatDialog(G2frame,'New value','Enter new esd for torsion restraints',val,[0.,5.],'%.2f')
     1046            if dlg.ShowModal() == wx.ID_OK:
     1047                parm = dlg.GetValue()
     1048                for r in rows:
     1049                    volumeList[r][4] = parm
     1050            dlg.Destroy()
     1051            UpdateTorsionRestr(torsionRestData)               
     1052                                           
    8541053        TorsionRestr.DestroyChildren()
    8551054        dataDisplay = wx.Panel(TorsionRestr)
     
    8571056        mainSizer.Add((5,5),0)
    8581057        mainSizer.Add(WtBox(TorsionRestr,torsionRestData),0,wx.ALIGN_CENTER_VERTICAL)
    859 
     1058        mainSizer.Add(wx.StaticText(TorsionRestr,-1,'Torsion function coefficients:'),0,wx.ALIGN_CENTER_VERTICAL)
     1059       
     1060        coeffDict = torsionRestData['Coeff']
     1061        if len(coeffDict):
     1062            table = []
     1063            rowLabels = []
     1064            Types = 9*[wg.GRID_VALUE_FLOAT+':10,4',]
     1065            colLabels = ['Mag A','Pos A','Width A','Mag B','Pos B','Width B','Mag C','Pos C','Width C']
     1066            for item in coeffDict:
     1067                rowLabels.append(item)
     1068                table.append(coeffDict[item])
     1069            coeffTable = G2gd.Table(table,rowLabels=rowLabels,colLabels=colLabels,types=Types)
     1070            Coeff = G2gd.GSGrid(TorsionRestr)
     1071            Coeff.SetTable(coeffTable, True)
     1072            Coeff.AutoSizeColumns(False)
     1073            for r in range(len(coeffDict)):
     1074                for c in range(9):
     1075                    Coeff.SetReadOnly(r,c,True)
     1076                    Coeff.SetCellStyle(r,c,VERY_LIGHT_GREY,True)
     1077            mainSizer.Add(Coeff,0,)
     1078        mainSizer.Add((5,5))
    8601079        torsionList = torsionRestData['Torsions']
     1080        mainSizer.Add(wx.StaticText(TorsionRestr,-1,'Torsion restraints:'),0,wx.ALIGN_CENTER_VERTICAL)
    8611081        if len(torsionList):
    8621082            table = []
     
    8641084            Types = 2*[wg.GRID_VALUE_STRING,]+3*[wg.GRID_VALUE_FLOAT+':10,2',]
    8651085            if 'macro' in General['Type']:
    866                 colLabels = ['(res) A (res) B (res) C (res) D','coef name','calc','obs','esd']
    867                 for i,[indx,ops,cofName,dcalc,dobs,esd] in enumerate(torsionList):
     1086                colLabels = ['(res) A (res) B (res) C (res) D','coef name','torsion','obs E','esd']
     1087                for i,[indx,ops,cofName,esd] in enumerate(torsionList):
    8681088                    atoms = G2mth.GetAtomItemsById(Atoms,AtLookUp,indx,0,4)
    8691089                    name = ''
    8701090                    for atom in atoms:
    8711091                        name += '('+atom[1]+atom[0].strip()+atom[2]+') '+atom[3]+' '
    872                     table.append([name,cofName,dcalc,dobs,esd])
     1092                    XYZ = np.array(G2mth.GetAtomItemsById(Atoms,AtLookUp,indx,cx,3))
     1093                    tor,calc = G2mth.getRestTorsion(XYZ,Amat,coeffDict[cofName])
     1094                    table.append([name,cofName,tor,calc,esd])
    8731095                    rowLabels.append(str(i))
    8741096            else:
    875                 colLabels = ['A+SymOp  B+SymOp  C+SymOp  D+SymOp)','coef name','calc','obs','esd']
    876                 for i,[indx,ops,cofName,dcalc,dobs,esd] in enumerate(torsionList):
     1097                colLabels = ['A+SymOp  B+SymOp  C+SymOp  D+SymOp)','coef name','torsion','obs E','esd']
     1098                for i,[indx,ops,cofName,esd] in enumerate(torsionList):
    8771099                    atoms = G2mth.GetAtomItemsById(Atoms,AtLookUp,indx,ct-1)
     1100                    XYZ = np.array(G2mth.GetAtomItemsById(Atoms,AtLookUp,indx,cx,3))
     1101                    XYZ = G2mth.getSyXYZ(XYZ,ops,SGData)
     1102                    tor,calc = G2mth.getRestTorsion(XYZ,Amat,coeffDict[cofName])
    8781103                    table.append([atoms[0]+'+('+ops[0]+') '+atoms[1]+'+('+ops[1]+') '+atoms[2]+ \
    879                     '+('+ops[2]+') '+atoms[3]+'+('+ops[3]+')',cofName,dcalc,dobs,esd])
     1104                    '+('+ops[2]+') '+atoms[3]+'+('+ops[3]+')',cofName,tor,calc,esd])
    8801105                    rowLabels.append(str(i))
    8811106            torsionTable = G2gd.Table(table,rowLabels=rowLabels,colLabels=colLabels,types=Types)
     
    8961121        TorsionRestr.SetSizer(mainSizer)
    8971122        Size = mainSizer.Fit(G2frame.dataFrame)
    898         Size[0] += 5
     1123        Size[0] = 600
    8991124        Size[1] += 50       #make room for tab
    9001125        TorsionRestr.SetSize(Size)
    9011126        TorsionRestr.SetScrollbars(10,10,Size[0]/10-4,Size[1]/10-1)
    902         G2frame.dataFrame.setSizePosLeft(Size)
     1127        G2frame.dataFrame.SetSize(Size)
     1128#        G2frame.dataFrame.setSizePosLeft(Size)
    9031129
    9041130    def UpdateRamaRestr(ramaRestData):
     
    9581184        RamaRestr.SetSizer(mainSizer)
    9591185        Size = mainSizer.Fit(G2frame.dataFrame)
    960         Size[0] += 5
     1186        Size[0] = 600
    9611187        Size[1] += 50       #make room for tab
    9621188        RamaRestr.SetSize(Size)
    9631189        RamaRestr.SetScrollbars(10,10,Size[0]/10-4,Size[1]/10-1)
    964         G2frame.dataFrame.setSizePosLeft(Size)
     1190        G2frame.dataFrame.SetSize(Size)
     1191#        G2frame.dataFrame.setSizePosLeft(Size)
    9651192
    9661193    def OnPageChanged(event):
Note: See TracChangeset for help on using the changeset viewer.