1 # ======================================================================
2 # demo.tcl --
3 #
4 # CCP4Interface
5 #
6 # =======================================================================
7
8 # procedure which is run automatically before drawing the interface
9 # used to set up variables, menus etc
10 #---------------------------------------------------------------------
11 proc demo2_setup { typedefVar arrayname } {
12 #---------------------------------------------------------------------
13 upvar #0 $typedefVar typedef
14 upvar #0 $arrayname array
15
16 # Define the 'refinement type' and 'input phase' menus
17
18 DefineMenu _demo_refine_type [list "full refinement" \
19 "quick refinement" ] \
20 [ list FULL \
21 FAST ]
22
23 DefineMenu _demo_restrain_mode [ list loose medium tight ]
24
25 DefineMenu _demo_input_phase [list "input phases" \
26 "no phase input" ] \
27 [list PHASE \
28 NO ]
29
30 # procedure must return sucess code (1) for drawing task window to continue
31 return 1
32 }
33
34 #---------------------------------------------------------------------
35 proc demo2_run { arrayname } {
36 #---------------------------------------------------------------------
37 # this procedure is run when user clicks the 'Run' button
38 # used to check user input and where necessary convert parameters
39 # to form required by the program run script
40
41 upvar #0 $arrayname array
42
43 #The labin depends on the INPUT_PHASE mode selected by the user
44 #Get the 'alias' for the currently selected value of INPUT_PHASE
45 # and if it matchs "PHASE" then include the phase labels in the labin
46
47 if [regexp PHASE [GetValue $arrayname INPUT_PHASE]] {
48 set array(LABIN) "FP SIGFP PHIB FOMB"
49 } else {
50 set array(LABIN) "FP SIGFP"
51 }
52
53 # procedure must return sucess code (1) for running job to continue
54 return 1
55 }
56
57 #-----------------------------------------------------------------------
58 proc demo2_set_range { arrayname } {
59 #-----------------------------------------------------------------------
60 upvar #0 $arrayname array
61
62 # Get the full path name of the PDB file
63 set pdb_filename [GetFullFileName0 $arrayname XYZIN]
64
65 # 'Zero' the variables containing name of chain & res ids in PDB
66 set array(PDB_CHAINS) {}
67 set array(PDB_RES_RANGE) {}
68
69 # Make sure PdbGetChains procedure is accessible
70 source [SearchPath TOP utils pdb_utils.tcl]
71
72 # Call PdbGetChains to get chain names and first/last res ids from PDB
73 # Quit here if this procedure fails
74 if { ![PdbGetChains $pdb_filename \
75 array(PDB_CHAINS) array(PDB_RES_RANGE) ] } { return }
76
77 # Diagnostic - we are getting the right info back?
78 puts "PDB_CHAINS $array(PDB_CHAINS)"
79 puts "PDB_RES_RANGE $array(PDB_RES_RANGE)"
80
81 # Set the array variables for CHAIN FIRST_RES and LAST_RES
82 set n 0
83 foreach chain $array(PDB_CHAINS) res_range $array(PDB_RES_RANGE) {
84 incr n
85 set array(CHAIN,$n) $chain
86 set array(FIRST_RES,$n) [lindex $res_range 0]
87 set array(LAST_RES,$n) [lindex $res_range 1]
88 }
89
90 # Force the redrawing of extending frames
91 UpdateExtendingFrame demo2_refine_range 0 $arrayname [expr $n - $array(NRANGES) ]
92
93 }
94
95
96 #---------------------------------------------------------------------
97 proc demo2_refine_range { arrayname counter } {
98 #---------------------------------------------------------------------
99 #procedure to draw one line of the 'refinement range' extending frame
100 upvar #0 $arrayname array
101
102 CreateLine line \
103 message "Enter range of residues to refine" \
104 label "Use" \
105 widget RESTRAIN_MODE \
106 label "restraints for chain" \
107 widget CHAIN \
108 label "from residue" \
109 widget FIRST_RES \
110 label "to residue" \
111 widget LAST_RES
112
113 }
114
115 # procedure to draw task window
116 #---------------------------------------------------------------------
117 proc demo2_task_window { arrayname } {
118 #---------------------------------------------------------------------
119 upvar #0 $arrayname array
120
121 if { [CreateTaskWindow $arrayname \
122 "Task Template" "Template" \
123 [ list "Required Parameters" \
124 "Define Protein Ranges to Refine" \
125 "Crystal Parameters" ] ] == 0 } return
126
127 # Set the name of the CCP4 program help file to use
128 # (set it to refmac because it is most suitable program for this example!)
129 SetProgramHelpFile "refmac"
130
131 #=PROTOCOL==============================================================
132
133 OpenFolder protocol
134
135 CreateTitleLine line TITLE
136
137 CreateLine line \
138 message "Refinement method (REFI TYPE)" \
139 help refi_type \
140 label "Do" \
141 widget REFINE_TYPE \
142 label "using" \
143 widget INPUT_PHASE
144
145 #=FILES================================================================
146
147 OpenFolder file
148
149 CreateInputFileLine line \
150 "Enter input MTZ file name (HKLIN)" \
151 "MTZ in" \
152 HKLIN DIR_HKLIN \
153 -fileout HKLOUT DIR_HKLOUT "_demo" \
154 -setfileparam space_group_name SPACE_GROUP \
155 -setfileparam cell_4 CELL_1 \
156 -setfileparam cell_4 CELL_2 \
157 -setfileparam cell_4 CELL_3 \
158 -setfileparam cell_4 CELL_4 \
159 -setfileparam cell_5 CELL_5 \
160 -setfileparam cell_6 CELL_6 \
161 -setfileparam resolution_min EXCLUDE_RESOLUTION_MIN \
162 -setfileparam resolution_max EXCLUDE_RESOLUTION_MAX
163
164 CreateLabinLine line \
165 "Observed amplitude (FP) and obligatory sigma (SIGFP)" \
166 HKLIN FP FP [list FP F_P] \
167 -sigma Sigma SIGFP [list SIGFP SIGF_P SIGP]
168
169 CreateLabinLine line \
170 "Input phase (PHIB) and figure of merit (FOMB)" \
171 HKLIN PHIB PHIB PHIB \
172 -sigma FOMB FOMB FOMB \
173 -toggle_display INPUT_PHASE open PHASE
174
175 CreateOutputFileLine line \
176 "Output MTZ File" \
177 "MTZ out" \
178 HKLOUT DIR_HKLOUT
179
180 CreateInputFileLine line \
181 "Enter input coordinate file name (XYZIN)" \
182 "PDB in" \
183 XYZIN DIR_XYZIN \
184 -fileout XYZOUT DIR_XYZOUT "_refmac" \
185 -command "demo2_set_range $arrayname"
186
187 CreateOutputFileLine line \
188 "Output coordinate file" \
189 "PDB out" \
190 XYZOUT DIR_XYZOUT
191
192 #-----------------------------------------------------Required parameters
193
194 OpenFolder 1
195
196 CreateLine line \
197 message "Number of cycles of refinement (NCYC)" \
198 help refi_ncyc \
199 label "Number of refinement cycles" \
200 widget NCYCLES \
201 -width 3
202
203 CreateLine line \
204 message "Apply resolution limits (REFI RESOlution)" \
205 help refi_reso \
206 widget EXCLUDE_RESOLUTION \
207 message "Minimum resolution" \
208 label "Resolution range from minimum" \
209 widget EXCLUDE_RESOLUTION_MIN \
210 message "Maximum resolution" \
211 label " to " \
212 widget EXCLUDE_RESOLUTION_MAX
213
214 #--------------------------------------------------------refinement range
215
216 OpenFolder 2
217
218 CreateExtendingFrame NRANGES demo2_refine_range \
219 "Define range(s) of residue ranges to refine" \
220 "Add Residue Range" \
221 [ list RESTRAIN_MODE \
222 CHAIN \
223 FIRST_RES \
224 LAST_RES ]
225
226
227 #-------------------------------------------------------------cell parameters
228
229 OpenFolder 3 closed
230
231 CreateLine line \
232 message "Space group (default from MTZ) (SYMM)" \
233 label "Space group" \
234 widget SPACE_GROUP
235
236 CreateLine line \
237 message "Cell dimensions (default from MTZ) (CELL)" \
238 label "Cell a" \
239 widget CELL_1 \
240 label "b" \
241 widget CELL_2 \
242 label "c" \
243 widget CELL_3 \
244 label "alpha" \
245 widget CELL_4 \
246 label "beta" \
247 widget CELL_5 \
248 label "gamma" \
249 widget CELL_6
250
251 }
252