1 | proc 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 | |
---|
29 | proc 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 | |
---|
55 | proc 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 | |
---|
160 | proc 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 | |
---|
222 | proc 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 | |
---|
249 | proc 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 | |
---|
255 | proc 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 | } |
---|
260 | proc 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 | } |
---|
265 | proc 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 | |
---|
271 | proc 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 | } |
---|