source: branches/sandbox/disagledit.tcl @ 1021

Last change on this file since 1021 was 1021, checked in by chlake, 11 years ago

add disagl edit & viewer

File size: 9.9 KB
Line 
1proc DA_Initialize {} {
2catch {unset ::da_ddrad}
3catch {unset ::da_darad}
4catch {unset ::da_drad}
5catch {unset ::da_arad}
6catch {unset ::da_acon}
7catch {unset ::da_dcon}
8    set ::da_quit 1
9set ::da_phase $::expmap(phaselist)
10foreach 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       checkbutton $dasave.option -text "DISAGL output in separate window" \
106                   -variable ::expgui(disaglSeparateBox)
107       grid $dasave.option -row 0 -column 0
108       button $dasave.sexit -text "Save and run DISAGL" -command DA_Save
109       grid $dasave.sexit -row 1 -column 0
110     } else {
111       wm title $dcb "Distance Search Parameters"
112       button $dasave.sexit -text "Save and Exit" -command DA_Save
113       grid $dasave.sexit -row 0 -column 0
114     }
115     button $dasave.quit -text "Cancel" -command "destroy $dcb"
116     grid $dasave.quit -row 2 -column 0
117
118
119     #construct control box
120
121
122     set dacon $dcb.dacon
123     frame $dacon -bd 2 -relief groove
124     grid $dacon -column 1 -row 2
125
126     button $dacon.default -text "Restore to Default Radii" -command {
127            foreach i $::da_list {
128                    set ::da_drad($i) $::da_ddrad([lindex [split $i {+-}] 0])
129                    set ::da_arad($i) $::da_darad([lindex [split $i {+-}] 0])
130            }
131     }
132     grid $dacon.default -row 3 -column 0 -columnspan 3
133
134     label $dacon.dradcon -text "Increment All Bond Search Radii (0.10 A)"
135     label $dacon.aradcon -text "Increment All Angle Search Radii (0.10 A)"
136     button $dacon.dradup -text "\u2191" -command DA_Inc_Drad
137     button $dacon.draddn -text "\u2193" -command DA_Dec_Drad
138     button $dacon.aradup -text "\u2191" -command DA_Inc_Arad
139     button $dacon.araddn -text "\u2193" -command DA_Dec_Arad
140     grid $dacon.dradcon -column 0 -row 0 -pady 5
141     grid $dacon.dradup  -column 1 -row 0 -padx 5
142     grid $dacon.draddn  -column 2 -row 0 -padx 5
143     grid $dacon.aradcon -column 0 -row 1 -pady 5
144     grid $dacon.aradup  -column 1 -row 1 -padx 5
145     grid $dacon.araddn  -column 2 -row 1 -padx 5
146
147#     button $dacon.radcon -text "Radii Editor" -command {DA_Radii_Box .disaglcon}
148#     grid $dacon.radcon -row 1 -column 0
149
150DA_Radii_Box .disaglcon
151             putontop  .disaglcon
152             tkwait window .disaglcon
153             afterputontop
154             return $::da_quit
155
156}
157
158proc DA_Controls {var phase junk } {
159     if {[set ${var}($phase)] == "none"} {
160        if {$var == "::da_acon"} {
161           set ::da_dcon($phase) "none"
162           puts 1
163        } else {
164           set ::da_acon($phase) "none"
165           puts 2
166        }
167     }
168     if {[set ${var}($phase)] != "none" && ($::da_dcon($phase) == "none" || $::da_acon($phase) == "none")} {
169        if {$var == "::da_acon"} {
170           set ::da_dcon($phase) "radii"
171        } else {
172           set ::da_acon($phase) "radii"
173        }
174     }
175
176
177#     if {[set ${var}($phase)] == "fixed search range"} {}
178      if {[set ${var}($phase)] != "none" && [set ${var}($phase)] != "radii" } {
179           catch {destroy .disaglcon.top}
180           set dedit .disaglcon.top
181           toplevel $dedit
182           bind $dedit <Return> "destroy $dedit"
183#           frame $dedit -bd 2 -relief groove
184#           pack $dedit -side top
185           set temp [regexp {[0-9]+.[0-9]+} [set ${var}($phase)]]
186           if {$temp == 0} {set ${var}($phase) 0.00}
187           if {$var == "::da_acon"} {
188              label $dedit.lbl1    -text "set angle fixed search range \n for phase $phase in angstroms"
189#              set ::da_acon($phase) 0
190              entry  $dedit.entry1 -textvariable ::da_acon($phase) -takefocus 1 
191                     $dedit.entry1 selection range 0 end
192              grid $dedit.lbl1 -column 0 -row 0
193              grid $dedit.entry1 -column 0 -row 1
194              focus $dedit.entry1
195           }
196           if {$var == "::da_dcon"} {
197 #             set ::da_dcon($phase) 0
198              label $dedit.lbl1    -text "set bond fixed search range \n for phase $phase in angstroms"
199              entry  $dedit.entry1 -textvariable ::da_dcon($phase) -takefocus 1
200                     $dedit.entry1 selection range 0 end
201              grid $dedit.lbl1 -column 0 -row 0
202              grid $dedit.entry1 -column 0 -row 1
203              focus $dedit.entry1
204           }
205           button $dedit.quit -text "Set" -command "destroy $dedit"
206           grid $dedit.quit -column 0 -row 2
207           putontop $dedit
208           tkwait window $dedit
209           afterputontop
210     }
211
212
213
214
215#     puts "phase = $phase"
216#     puts "var = $var"
217#     puts "new value = [set ${var}($phase)]"
218}
219
220proc DA_Radii_Box {dcb args} {
221     #construct radii control box
222     catch {destory $dcb.radcon}
223     catch {destory $dcb.discon}
224     set radcon $dcb.radcon
225     frame $radcon -bd 2 -relief groove
226     grid $radcon -column 1 -row 0 -rowspan 2
227
228     label $radcon.lbl1 -text "Atom/Ion"
229     label $radcon.lbl2 -text "Bond \n Search Radii"
230     label $radcon.lbl3 -text "Angle \n Search Radii"
231     grid $radcon.lbl1 -row 0 -column 0
232     grid $radcon.lbl2 -row 0 -column 1
233     grid $radcon.lbl3 -row 0 -column 2
234     set count 1
235     foreach j [array names ::da_drad] {
236             label $radcon.atom$j -text "$j" -width 5
237             entry $radcon.drad$j -textvariable ::da_drad($j) -width 6 -takefocus 1
238             entry $radcon.arad$j -textvariable ::da_arad($j) -width 6 -takefocus 1
239             grid  $radcon.atom$j -row $count -column 0
240             grid  $radcon.drad$j -row $count -column 1
241             grid  $radcon.arad$j -row $count -column 2
242             incr count
243     }
244}
245
246
247proc DA_Inc_Drad {args} {
248        foreach j [array names ::da_drad] {
249                set ::da_drad($j) [format %.1f [expr $::da_drad($j) + 0.1]]
250        }
251}
252
253proc DA_Dec_Drad {args} {
254        foreach j [array names ::da_drad] {
255                set ::da_drad($j) [format %.1f [expr $::da_drad($j) - 0.1]]
256        }
257}
258proc DA_Inc_Arad {args} {
259        foreach j [array names ::da_arad] {
260                set ::da_arad($j) [format %.1f [expr $::da_arad($j) + 0.1]]
261        }
262}
263proc DA_Dec_Arad {args} {
264        foreach j [array names ::da_drad] {
265                set ::da_arad($j) [format %.1f [expr $::da_arad($j) - 0.1]]
266        }
267}
268
269proc DA_Save {args} {
270     foreach i $::da_list {
271           if {$::da_drad($i) >= 0 && $::da_drad($i) <= 10000} {
272              AtmTypInfo distrad $i set $::da_drad($i)
273           }
274           puts 1
275           if {$::da_arad($i) >= 0 && $::da_arad($i) <= 10000} {
276              AtmTypInfo angrad $i set $::da_arad($i)
277           }
278
279     }
280     foreach j $::da_phase {
281        phaseinfo $j DistCalc set $::da_dcon($j)
282        phaseinfo $j AngCalc set $::da_acon($j)
283     }
284     # indicate a change to the .EXP file
285     incr ::expgui(changed)
286     set ::da_quit 0
287     destroy .disaglcon
288}
Note: See TracBrowser for help on using the repository browser.