Ignore:
Timestamp:
Jan 18, 2011 4:19:26 PM (10 years ago)
Author:
toby
Message:

recent changes: fix coordinates, rb start

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/sandbox/addcmds.tcl

    r1103 r1109  
    19361936                ] -row 2 -column 0 -columnspan 10
    19371937    }
     1938#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx x
     1939
     1940proc Fix_Initialize {numberList} {
     1941     set phaselist $::expmap(phaselist)
     1942     catch {unset ::fix_param}
     1943     foreach i $phaselist {
     1944             set ::fix_list(X,$i) ""
     1945             set ::fix_list(Y,$i) ""
     1946             set ::fix_list(Z,$i) ""
     1947
     1948             set temp [atom_constraint_read $i]
     1949             foreach j $temp {
     1950                     set atomnum [string trim [string range $j 2 3]]
     1951                     set param [string trim [string range $j 4 6]]
     1952                     set ::fix_param($i,$atomnum,$param) 1
     1953                     if {$param == "X"} {lappend ::fix_list(X,$i) $atomnum}
     1954                     if {$param == "Y"} {lappend ::fix_list(Y,$i) $atomnum}
     1955                     if {$param == "Z"} {lappend ::fix_list(Z,$i) $atomnum}
     1956             }
     1957     }
     1958
     1959             set ::fix_state_X [Fix_State 1 $numberList X]
     1960             set ::fix_state_Y [Fix_State 1 $numberList Y]
     1961             set ::fix_state_Z [Fix_State 1 $numberList Z]
     1962
     1963}
     1964
     1965proc Fix_State {phase numberList coord} {
     1966     set status_fixed "-1"
     1967     set status_unfixed "-1"
     1968     puts "$coord before: $status_fixed $status_unfixed"
     1969     foreach i $numberList {
     1970             set temp [info exists ::fix_param($phase,$i,$coord)]
     1971             puts "::fix_param($phase,$i,$coord) is variable present?: $temp"
     1972             if {$temp != 0} {set status_fixed 1}
     1973             if {$temp == 0} {set status_unfixed 1}
     1974     }
     1975     puts "$coord after $status_fixed $status_unfixed"
     1976     if {$status_fixed == 1 && $status_unfixed != 1} {return "fixed"}
     1977     if {$status_fixed == 1 && $status_unfixed == 1} {return "mixed"}
     1978     if {$status_fixed != 1 && $status_unfixed == 1} {return "unfixed"}
     1979}
     1980
     1981proc Fix_Write {} {
     1982      incr ::expgui(changed)
     1983      puts "Prepare to write [array names ::fix_Param]"
     1984      foreach j [array names ::fix_param] {
     1985             regexp {[0-9]+} $j  temp_phase
     1986             regexp {,[0-9]+} $j ans
     1987             set temp_atom [string range $ans 1 end]
     1988             regexp {[a-zA-Z]+} $j temp_param
     1989             if {$temp_param == "U"} {regexp {[a-zA-Z]+[0-9]+} $j temp_param}
     1990             set temp_entry [format "%1s %+2s%-4s" $temp_phase $temp_atom $temp_param]
     1991             lappend fix_list($temp_phase) $temp_entry
     1992     }
     1993     set phaselist $::expmap(phaselist)
     1994     foreach i $phaselist {
     1995             catch {atom_constraint_write $i $fix_list($i)}
     1996             puts $fix_list($i)
     1997     }
     1998}
     1999
     2000proc Fix_Atoms {phase numberList coord but} {
     2001#     puts "before  ::fix_state_$coord [set ::fix_state_$coord]"
     2002     puts " before operationi: $::fix_list($coord,$phase)"
     2003     switch [set ::fix_state_$coord] {
     2004     "unfixed" {$but config -text "fixed"
     2005               set ::fix_state_$coord "fixed"
     2006               }
     2007     "fixed"   {$but config -text "unfixed"
     2008               set ::fix_state_$coord "unfixed"
     2009               }
     2010     "mixed"   {$but config -text "unfixed"
     2011               set ::fix_state_$coord "unfixed"
     2012               }
     2013     }
     2014     if {[set ::fix_state_$coord] == "fixed"} {
     2015        puts "fixing atom number $numberList"
     2016        foreach i $numberList {
     2017                lappend ::fix_list($coord,$phase) $i
     2018                set ::fix_list($coord,$phase) [lsort -uniq -integer $::fix_list($coord,$phase)]
     2019                set ::fix_param($phase,$i,$coord) 1
     2020        }
     2021     }
     2022     if {[set ::fix_state_$coord] == "unfixed"} {
     2023        puts "unfixing atoms $numberList"
     2024        foreach i $numberList {
     2025           set temp [lsearch $::fix_list($coord,$phase) $i]
     2026           if {$temp != -1} {
     2027              set ::fix_list($coord,$phase) [lreplace $::fix_list($coord,$phase) $temp $temp]
     2028              catch {unset ::fix_param($phase,$i,$coord)}
     2029           }
     2030        }
     2031     }
     2032     puts "after operation: $::fix_list($coord,$phase)"
     2033
     2034
     2035}
     2036
     2037#******Main Fixing Program
     2038    if {[lindex $expmap(phasetype) [expr {$p - 1}]] != 4} {
     2039        grid [TitleFrame $w.10 -bd 6 -relief groove \
     2040                -text "Fix Atom$suffix Coordinates"] \
     2041                -row 9 -column 0 -columnspan 10 -sticky news
     2042        set fix [$w.10 getframe]
     2043        Fix_Initialize $numberList
     2044
     2045        label $fix.xlab -text "  x  " -width 8
     2046        label $fix.ylab -text "  y  " -width 8
     2047        label $fix.zlab -text "  z  " -width 8
     2048        grid $fix.xlab -row 2 -column 0
     2049        grid $fix.ylab -row 2 -column 1
     2050        grid $fix.zlab -row 2 -column 2
     2051
     2052
     2053        button $fix.x -text "$::fix_state_X" -width 8 \
     2054               -command "Fix_Atoms $phase [list $numberList] X $fix.x;
     2055               Fix_Write
     2056               DisplayAllAtoms $phase"
     2057
     2058        button $fix.y -text "$::fix_state_Y" -width 8 \
     2059                -command "Fix_Atoms $phase [list $numberList] Y $fix.y
     2060                Fix_Write
     2061                DisplayAllAtoms $phase"
     2062        button $fix.z -text "$::fix_state_Z" -width 8 \
     2063                -command "Fix_Atoms $phase [list $numberList] Z $fix.z
     2064                Fix_Write
     2065                DisplayAllAtoms $phase"
     2066        grid $fix.x -row 3 -column 0
     2067        grid $fix.y -row 3 -column 1
     2068        grid $fix.z -row 3 -column 2
     2069    }
     2070
     2071
     2072
     2073
     2074#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    19382075
    19392076    grid rowconfigure $w 11 -minsize 5
     
    19542091    if {[llength $expgui(selectedatomlist)] != 0} editRecord
    19552092}
     2093
     2094
    19562095
    19572096# transform the coordinates
Note: See TracChangeset for help on using the changeset viewer.