source: branches/sandbox/disagledit.tcl @ 1157

Last change on this file since 1157 was 1030, checked in by toby, 15 years ago

add delta-d/d & manual zoom to widplt; distrest & distagledit: remove some puts & fix up some indentation

File size: 9.0 KB
Line 
1proc DA_Initialize {} {
2    catch {unset ::da_ddrad}
3    catch {unset ::da_darad}
4    catch {unset ::da_drad}
5    catch {unset ::da_arad}
6    catch {unset ::da_acon}
7    catch {unset ::da_dcon}
8    set ::da_quit 1
9    set ::da_phase $::expmap(phaselist)
10    foreach j $::da_phase {
11        set ::da_dcon($j) [phaseinfo $j DistCalc]
12        set b [regexp -all {[0-9]} $::da_dcon($j)]
13        if {$b > 0} {
14            set ::da_dval($j) $::da_dcon($j)]
15    } else {
16        set ::da_dval$j ""
17    }
18
19    set ::da_acon($j) [phaseinfo $j AngCalc]
20    set c [regexp -all {[0-9]} $::da_acon($j)]
21    if {$c > 0} {set ::da_aval$j $::da_acon($j)
22    } else {
23        set ::da_aval$j ""}
24
25}
26
27}
28
29proc DA_Read {} {
30
31    set ::da_list [AtmTypList]
32    set da_angrad [DefAtmTypInfo angrad]
33    set da_distrad [DefAtmTypInfo distrad]
34
35    #Build search arrays
36    #::da_darad array contains default angle search radii
37    #::da_ddrad array contains default distance search radii
38    #::da_arad array contains current angle search radii
39    #::da_drad array contains current distance search radii
40
41    foreach j $da_angrad {
42        set ::da_darad([lindex $j 0]) [lindex $j 1]
43    }
44    foreach k $da_distrad {
45        set ::da_ddrad([lindex $k 0]) [lindex $k 1]
46    }
47    foreach i $::da_list {
48        set ::da_drad($i) [AtmTypInfo distrad $i]
49        set ::da_arad($i) [AtmTypInfo angrad $i]
50    }
51}
52
53#**************** Build Disagl Control Panel ****************************
54
55proc DA_Control_Panel {"launchdisagl 0"} {
56    DA_Initialize
57    DA_Read
58    destroy .disaglcon
59    set dcb .disaglcon
60    catch {toplevel $dcb}
61    eval destroy [winfo children $dcb]
62
63    #construct phase control box in phasecon frame
64    set phasecon $dcb.phasecon
65    frame $phasecon -bd 2 -relief groove
66    grid $phasecon -column 0 -row 0
67
68    label $phasecon.lbl1 -text "Bond Search \n Method"
69    label $phasecon.lbl2 -text "Angle Search \n Method"
70    grid  $phasecon.lbl1 -column 1 -row 0
71    grid  $phasecon.lbl2 -column 2 -row 0
72
73
74    foreach i $::da_phase {
75        label  $phasecon.phase$i -text "Phase $i" -width 8
76        set tacon [regexp {[0-9]+.[0-9]+} $::da_acon($i)]
77        set tdcon [regexp {[0-9]+.[0-9]+} $::da_dcon($i)]
78        if {$tacon} {set alist {none radii $::da_acon($i)}
79        } else {set alist {none radii {fixed search range}}}
80        if {$tdcon} {set dlist {none radii $::da_dcon($i)}
81        } else {set dlist {none radii {fixed search range}}}
82
83        #            set list  {none radii {fixed search range}}
84        #if {[set ::da_dval$i] != ""} {lappend list [set ::da_dval$i]}
85        eval tk_optionMenu $phasecon.dist$i ::da_dcon($i) $dlist
86        $phasecon.dist$i config -width 10
87        eval tk_optionMenu $phasecon.ang$i  ::da_acon($i) $alist
88        $phasecon.ang$i config -width 10
89        grid   $phasecon.phase$i -row $i -column 0 -padx 10
90        grid   $phasecon.dist$i  -row $i -column 1 -padx 10
91        grid   $phasecon.ang$i   -row $i -column 2 -padx 10
92    }
93
94    trace var ::da_dcon w DA_Controls
95    trace var ::da_acon w DA_Controls
96
97
98    #save box
99    set dasave $dcb.dasave
100    frame $dasave -bd 2 -relief groove
101    grid $dasave -column 0 -row 2
102
103    if {$launchdisagl} {
104        wm title $dcb "DISAGL Control Panel"
105        grab release $dcb
106        checkbutton $dasave.option -text "DISAGL output in separate window" \
107            -variable ::expgui(disaglSeparateBox)
108        grid $dasave.option -row 0 -column 0
109        button $dasave.sexit -text "Save and run DISAGL" -command DA_Save -bg LightGreen
110        grid $dasave.sexit -row 1 -column 0
111    } else {
112        wm title $dcb "Distance Search Parameters"
113        grab release $dcb
114        button $dasave.sexit -text "Save and Exit" -command DA_Save -bg LightGreen
115        grid $dasave.sexit -row 0 -column 0
116    }
117    button $dasave.quit -text "Cancel" -command "destroy $dcb"
118    grid $dasave.quit -row 2 -column 0
119
120
121    #construct control box
122
123
124    set dacon $dcb.dacon
125    frame $dacon -bd 2 -relief groove
126    grid $dacon -column 1 -row 2
127
128    button $dacon.default -text "Restore to Default Radii" -command {
129        foreach i $::da_list {
130            set ::da_drad($i) $::da_ddrad([lindex [split $i {+-}] 0])
131            set ::da_arad($i) $::da_darad([lindex [split $i {+-}] 0])
132        }
133    }
134    grid $dacon.default -row 3 -column 0 -columnspan 3
135
136    label $dacon.dradcon -text "Increment All Bond Search Radii (0.10 A)"
137    label $dacon.aradcon -text "Increment All Angle Search Radii (0.10 A)"
138    button $dacon.dradup -text "\u2191" -command DA_Inc_Drad
139    button $dacon.draddn -text "\u2193" -command DA_Dec_Drad
140    button $dacon.aradup -text "\u2191" -command DA_Inc_Arad
141    button $dacon.araddn -text "\u2193" -command DA_Dec_Arad
142    grid $dacon.dradcon -column 0 -row 0 -pady 5
143    grid $dacon.dradup  -column 1 -row 0 -padx 5
144    grid $dacon.draddn  -column 2 -row 0 -padx 5
145    grid $dacon.aradcon -column 0 -row 1 -pady 5
146    grid $dacon.aradup  -column 1 -row 1 -padx 5
147    grid $dacon.araddn  -column 2 -row 1 -padx 5
148
149    #     button $dacon.radcon -text "Radii Editor" -command {DA_Radii_Box .disaglcon}
150    #     grid $dacon.radcon -row 1 -column 0
151
152    DA_Radii_Box .disaglcon
153    putontop  .disaglcon
154    tkwait window .disaglcon
155    afterputontop
156    return $::da_quit
157
158}
159
160proc DA_Controls {var phase junk } {
161    if {[set ${var}($phase)] == "none"} {
162        if {$var == "::da_acon"} {
163            set ::da_dcon($phase) "none"
164            #puts 1
165        } else {
166            set ::da_acon($phase) "none"
167            #puts 2
168        }
169    }
170    if {[set ${var}($phase)] != "none" && ($::da_dcon($phase) == "none" || $::da_acon($phase) == "none")} {
171        if {$var == "::da_acon"} {
172            set ::da_dcon($phase) "radii"
173        } else {
174            set ::da_acon($phase) "radii"
175        }
176    }
177
178
179    #     if {[set ${var}($phase)] == "fixed search range"} {}
180    if {[set ${var}($phase)] != "none" && [set ${var}($phase)] != "radii" } {
181        catch {destroy .disaglcon.top}
182        set dedit .disaglcon.top
183        toplevel $dedit
184        bind $dedit <Return> "destroy $dedit"
185        #           frame $dedit -bd 2 -relief groove
186        #           pack $dedit -side top
187        set temp [regexp {[0-9]+.[0-9]+} [set ${var}($phase)]]
188        if {$temp == 0} {set ${var}($phase) 0.00}
189        if {$var == "::da_acon"} {
190            label $dedit.lbl1    -text "set angle fixed search range \n for phase $phase in angstroms"
191            #              set ::da_acon($phase) 0
192            entry  $dedit.entry1 -textvariable ::da_acon($phase) -takefocus 1 
193            $dedit.entry1 selection range 0 end
194            grid $dedit.lbl1 -column 0 -row 0
195            grid $dedit.entry1 -column 0 -row 1
196            focus $dedit.entry1
197        }
198        if {$var == "::da_dcon"} {
199            #             set ::da_dcon($phase) 0
200            label $dedit.lbl1    -text "set bond fixed search range \n for phase $phase in angstroms"
201            entry  $dedit.entry1 -textvariable ::da_dcon($phase) -takefocus 1
202            $dedit.entry1 selection range 0 end
203            grid $dedit.lbl1 -column 0 -row 0
204            grid $dedit.entry1 -column 0 -row 1
205            focus $dedit.entry1
206        }
207        button $dedit.quit -text "Set" -command "destroy $dedit"
208        grid $dedit.quit -column 0 -row 2
209        putontop $dedit
210        tkwait window $dedit
211        afterputontop
212    }
213
214
215
216
217    #     puts "phase = $phase"
218    #     puts "var = $var"
219    #     puts "new value = [set ${var}($phase)]"
220}
221
222proc DA_Radii_Box {dcb args} {
223    #construct radii control box
224    catch {destory $dcb.radcon}
225    catch {destory $dcb.discon}
226    set radcon $dcb.radcon
227    frame $radcon -bd 2 -relief groove
228    grid $radcon -column 1 -row 0 -rowspan 2
229
230    label $radcon.lbl1 -text "Atom/Ion"
231    label $radcon.lbl2 -text "Bond \n Search Radii"
232    label $radcon.lbl3 -text "Angle \n Search Radii"
233    grid $radcon.lbl1 -row 0 -column 0
234    grid $radcon.lbl2 -row 0 -column 1
235    grid $radcon.lbl3 -row 0 -column 2
236    set count 1
237    foreach j [array names ::da_drad] {
238        label $radcon.atom$j -text "$j" -width 5
239        entry $radcon.drad$j -textvariable ::da_drad($j) -width 6 -takefocus 1
240        entry $radcon.arad$j -textvariable ::da_arad($j) -width 6 -takefocus 1
241        grid  $radcon.atom$j -row $count -column 0
242        grid  $radcon.drad$j -row $count -column 1
243        grid  $radcon.arad$j -row $count -column 2
244        incr count
245    }
246}
247
248
249proc DA_Inc_Drad {args} {
250    foreach j [array names ::da_drad] {
251        set ::da_drad($j) [format %.1f [expr $::da_drad($j) + 0.1]]
252    }
253}
254
255proc DA_Dec_Drad {args} {
256    foreach j [array names ::da_drad] {
257        set ::da_drad($j) [format %.1f [expr $::da_drad($j) - 0.1]]
258    }
259}
260proc DA_Inc_Arad {args} {
261    foreach j [array names ::da_arad] {
262        set ::da_arad($j) [format %.1f [expr $::da_arad($j) + 0.1]]
263    }
264}
265proc DA_Dec_Arad {args} {
266    foreach j [array names ::da_drad] {
267        set ::da_arad($j) [format %.1f [expr $::da_arad($j) - 0.1]]
268    }
269}
270
271proc DA_Save {args} {
272    foreach i $::da_list {
273        if {$::da_drad($i) >= 0 && $::da_drad($i) <= 10000} {
274            AtmTypInfo distrad $i set $::da_drad($i)
275        }
276        puts 1
277        if {$::da_arad($i) >= 0 && $::da_arad($i) <= 10000} {
278            AtmTypInfo angrad $i set $::da_arad($i)
279        }
280
281    }
282    foreach j $::da_phase {
283        phaseinfo $j DistCalc set $::da_dcon($j)
284        phaseinfo $j AngCalc set $::da_acon($j)
285    }
286    # indicate a change to the .EXP file
287    incr ::expgui(changed)
288    set ::da_quit 0
289    destroy .disaglcon
290}
Note: See TracBrowser for help on using the repository browser.