; Reads parameter file, checks values
; calcparms.bat

; PURPOSE: Reads parameter file, checks values for 
;    lambda, 
;    spatial frequency, 
;    window size, 
;    particle size 
;                                           
;    If any are zero, they are computed and WRITTEN TO THE PARAMETER FILE.
;
;    Computes an odd number for window size.
 
; Inputs:
;   parameter file
; Outputs:
;   parameter file may be changed
                                                                 

;  ---------------------- Parameters  -------------------------

x68 = 368   ; Angstroms, typical window size for ribosome projects
x69 = 250   ; Angstroms, actual ribosome particle diameter

; x91 = lambda, a function of kV
; x92 = maximum spatial frequency, = 1/(2*pixelsize)
; x93 = window size (pixels)
; x94 = particle (actual) size (pixels)

;     ---------------------- Input/Output file ------------------

FR
?parameter file?[params]     ; parameter file 

; -------------- END BATCH HEADER ------------------------------


x77 = 0 ; set to 1 if any changed

FR L
[tmp]tmpparms

; copy parameter file to internal array

UD N,x98
[params]

SD IC NEW
[tmp]
(1,x98)

DO LB1 x11 = 1,x98
   UD x11,x12
   [params]

   SD IC, x11,x12
   [tmp]
LB1

UD E
;[params]

; check lambda (position 14)
UD IC,14,x91
[tmp]

IF (x91.EQ.0) THEN
   x77 = 1
   UD IC, 6,x21  ; KV, for computing lambda
   [tmp]
 
   x91 = 12.398 / SQR(x21 * (1022.0 + x21)) 

   SD IC, 14,x91
   [tmp]
ENDIF

UD IC, 5,x31  ; pixelsize, needed for next 3 values
[tmp] 

; check max.spat.freq (position 15)
UD IC,15,x92
[tmp]

IF (x92.EQ.0) THEN
   x77 = 1
   x92 = 1.0 / (2.0 * x31)
 
   SD IC, 15,x92
   [tmp]
ENDIF

; window size (position 17)
UD IC,17,x93
[tmp]

IF (x93.EQ.0) THEN
   x77 = 1
   x93 = INT(x68/x31) ; compute window size
   ; make sure window size is odd
   x91 = INT(x93/2.0)
   x90 = x93 - (2*x91)
   if (x90.EQ.0) x93 = x93 + 1

   SD IC, 17,x93
   [tmp]
ENDIF

; check particle size (position 18)
UD IC,18,x94
[tmp]

IF (x94.EQ.0) THEN
   x77 = 1
   x94 = INT(x69/x31) ; compute actual size

   SD IC, 18,x94
   [tmp]
ENDIF

UD ICE

; write new values, if any

IF (x77.EQ.1) THEN

   DE
   [params]

   SD IC COPY
   [tmp]
   [params]
ENDIF

RE