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 demo3_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     set typedef(_demo_restrain_mode)   [list varmenu RESTRAINT_MENU RESTRAINT_ALIAS 10]
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 demo3_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 demo3_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 - are we 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 demo3_refine_range 0 $arrayname [expr $n - $array(NRANGES) ]
92   
93   }
94   
95   
96   #---------------------------------------------------------------------
97   proc demo3_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  #---------------------------------------------------------------------
116  proc demo3_restraint_modes { arrayname counter } {
117  #---------------------------------------------------------------------
118  #procedure defining one line of the restaints definition extending frames
119    upvar #0 $arrayname array
120  
121  # If there is no name already set for the restraint name then provide one
122    if { $array(RESTRAINT_NAME,$counter) == "" } { 
123       set array(RESTRAINT_NAME,$counter) "restraint_$counter" }
124  
125    CreateLine line \
126      message "Enter a name for the restraint mode" \
127      label "Restraint mode" \
128      widget RESTRAINT_NAME -command "demo3_update_restraints_menu $arrayname" \
129      label "has bond restraint weight" \
130      widget BOND_RESTRAINT \
131      label "and angle restraint weight" \
132      widget ANGLE_RESTRAINT
133  
134    demo3_update_restraints_menu $arrayname
135  
136  }
137  
138  #---------------------------------------------------------------------
139  proc demo3_update_restraints_menu { arrayname } {
140  #---------------------------------------------------------------------
141  # Update the variable menu RESTRAINT_MENU 
142    upvar #0 $arrayname array
143  
144  # Initialise the list which will contain all of the items to appear on the menu
145    set restraint_list {}
146  
147  # Add each of the restraints names RESTRAINT_NAME to the list
148    for { set n 1 }  { $n <= $array(NRESTRAINTMODES) } { incr n } {
149      lappend restraint_list $array(RESTRAINT_NAME,$n) 
150    }
151  
152  # Update the menu - this will automatically update everywhere that the menu
153  # is displayed in the task interface
154    UpdateVariableMenu $arrayname initialise 0 RESTRAINT_MENU $restraint_list \
155  	RESTRAINT_ALIAS $restraint_list
156  
157  }
158  
159  
160  # procedure to draw task window
161  #---------------------------------------------------------------------
162  proc demo3_task_window { arrayname } {
163  #---------------------------------------------------------------------
164    upvar #0 $arrayname array
165  
166    if { [CreateTaskWindow $arrayname  \
167      	"Task Interface Demo Three" "Demo 3" \
168          [ list "Required Parameters"  \
169  	"Restraint Modes" \
170  	"Define Protein Ranges to Refine" \
171  	"Crystal Parameters" ] ] == 0 } return
172  
173  # Set the name of the CCP4 program help file to use
174  # (set it to refmac because it is most suitable program for this example!)
175    SetProgramHelpFile "refmac"
176  
177    demo3_update_restraints_menu $arrayname
178  
179  #=PROTOCOL==============================================================
180  
181    OpenFolder protocol 
182  
183    CreateTitleLine line TITLE
184  
185    CreateLine line \
186          message "Refinement method (REFI TYPE)" \
187  	help refi_type \
188          label "Do" \
189          widget REFINE_TYPE  \
190          label "using" \
191          widget INPUT_PHASE
192  
193  #=FILES================================================================
194  
195    OpenFolder file 
196    
197    CreateInputFileLine line \
198  	"Enter input MTZ file name (HKLIN)" \
199        "MTZ in" \
200         HKLIN DIR_HKLIN \
201         -fileout HKLOUT DIR_HKLOUT "_demo" \
202         -setfileparam space_group_name SPACE_GROUP \
203  	-setfileparam cell_4 CELL_1 \
204  	-setfileparam cell_4 CELL_2 \
205  	-setfileparam cell_4 CELL_3 \
206  	-setfileparam cell_4 CELL_4 \
207  	-setfileparam cell_5 CELL_5 \
208  	-setfileparam cell_6 CELL_6 \
209  	-setfileparam resolution_min EXCLUDE_RESOLUTION_MIN \
210  	-setfileparam resolution_max EXCLUDE_RESOLUTION_MAX
211  
212    CreateLabinLine line \
213  	"Observed amplitude (FP) and obligatory sigma (SIGFP)" \
214  	HKLIN FP FP  [list FP F_P] \
215          -sigma Sigma SIGFP [list SIGFP SIGF_P SIGP]
216  
217    CreateLabinLine line \
218  	"Input phase (PHIB) and figure of merit (FOMB)" \
219  	HKLIN PHIB PHIB  PHIB \
220          -sigma FOMB FOMB FOMB \
221          -toggle_display INPUT_PHASE open PHASE
222  
223    CreateOutputFileLine line \
224  	"Output MTZ File" \
225  	"MTZ out" \
226  	HKLOUT DIR_HKLOUT
227  
228   CreateInputFileLine line \
229          "Enter input coordinate file name (XYZIN)" \
230        "PDB in" \
231         XYZIN DIR_XYZIN \
232         -fileout XYZOUT DIR_XYZOUT "_refmac" \
233         -command "demo3_set_range $arrayname"
234  
235    CreateOutputFileLine line \
236          "Output coordinate file" \
237          "PDB out" \
238          XYZOUT DIR_XYZOUT
239  
240  #-----------------------------------------------------Required parameters
241  
242    OpenFolder 1
243  
244    CreateLine line \
245  	message "Number of cycles of refinement (NCYC)" \
246  	help refi_ncyc \
247          label "Number of refinement cycles" \
248  	widget NCYCLES \
249  	  -width 3 
250  
251    CreateLine line \
252  	message "Apply resolution limits (REFI RESOlution)" \
253  	help refi_reso \
254  	widget EXCLUDE_RESOLUTION \
255  	message "Minimum resolution" \
256  	label "Resolution range from minimum" \
257  	widget EXCLUDE_RESOLUTION_MIN \
258  	message "Maximum resolution" \
259  	label " to " \
260  	widget EXCLUDE_RESOLUTION_MAX
261  
262  #-------------------------------------------------------- restrain modes
263  
264    OpenFolder 2
265  
266    CreateExtendingFrame NRESTRAINTMODES demo3_restraint_modes \
267  	"Define parameters for different restraint modes" \
268          "Add Restraint Mode" \
269  	[list RESTRAINT_NAME \
270  		BOND_RESTRAINT \
271  		ANGLE_RESTRAINT ] \
272  	-update "demo3_update_restraints_menu $arrayname"
273  
274  #--------------------------------------------------------refinement range
275  
276    OpenFolder 3
277  
278    CreateExtendingFrame NRANGES demo3_refine_range \
279          "Define range(s) of residue ranges to refine" \
280          "Add Refinement Range" \
281         [ list RESTRAIN_MODE \
282  	CHAIN \
283          FIRST_RES \
284          LAST_RES ]
285  
286  
287  #-------------------------------------------------------------cell parameters
288  
289    OpenFolder 4 closed
290  
291    CreateLine line \
292  	message "Space group (default from MTZ) (SYMM)" \
293  	label "Space group" \
294  	widget SPACE_GROUP
295  
296    CreateLine line \
297  	message "Cell dimensions (default from MTZ) (CELL)" \
298  	label "Cell a" \
299  	widget CELL_1 \
300  	label "b" \
301  	widget CELL_2 \
302  	label "c" \
303  	widget CELL_3 \
304  	label "alpha" \
305  	widget CELL_4 \
306  	label "beta" \
307  	widget CELL_5 \
308  	label "gamma" \
309  	widget CELL_6
310  
311  }
312