;
;
; PURPOSE : Compute average values for the defocus groups
;
; SOURCE: spider/docs/techs/recon/newprogs/defavg.spi
;
; ----------- Input files --------------
[defsort] = 'def_sort' ; Doc file with: micrograph, defocus, def. group
; ----------- Output files --------------
[defavg] = 'def_avg' ; Doc file with: micrograph, defocus, def.group, def.grp.avg
[order] = 'sel_group' ; Doc file with: def.group, avg.defocus
; -------------------- END BATCH HEADER ----------------------------
MD ; Skip unnecessary output
VB OFF
MD ; Skip unnecessary output
TR OFF
DE ; Delete output doc file
[defavg]
DE ; Delete output doc file
[order]
; -------------------------------------------------
; Creates a temporary doc file,
; listing average defocus for each defocus group.
[tmp1] = 'jnktmpavg501'
DE
[tmp1]
[tmp2] = 'jnktmpavg502'
DE
[tmp2]
UD N [nummics] ; Get total number of micrographs
[defsort]
VM
echo ' 'Computing average defocus values from: {******[nummics]} micrographs
[sum] = 0 ; Sum
[num] = 0 ; No. in group
[avg-def] = 0 ; Group average
[keyout] = 1
DO [key] = 1,[nummics] ; Loop over number of micrographs
; Regs: mic#, defocus, group
UD [key], [mic], [defocus], [grp]
[defsort]
IF ([grp].EQ.[keyout]) THEN
[sum] = [sum] + [defocus]
[num] = [num] + 1
ELSE
[avg-def] = [sum] / [num]
SD [keyout], [avg-def]
[tmp1]
[sum] = [defocus]
[num] = 1
[keyout] = [keyout] + 1
ENDIF
ENDDO
; Now compute the df avg. for the last group
[avg-def] = [sum] / [num]
SD [keyout], [avg-def]
[tmp1]
;VM
;echo ' 'Group: {****[keyout]} Average defocus: {******[avg-def]}
UD E ; Finished with [defsort] use finished
SD E ; Finished doc file writing
[tmp1] ; Doc file
; -------------------------------------------------
; Now read the input doc file, and write out the same
; information, adding the averages from the temporary file.
; Then sort by micrograph number.
VM
echo ' 'Sorting groups by average defocus value
UD N [nummics] ; Get number of group lines
[defsort]
DO [key] = 1,[nummics]
; Get mic#, defocus, group
UD [key], [mic], [defocus], [grp]
[defsort] ; Doc file (input)
UD E ; Finished with: [defsort]
UD [grp], [avg-def] ; Get group average
[tmp1] ; Doc file (temp. input)
UD E ; Finished with: [tmp1]
SD [key], [mic], [defocus], [grp], [avg-def]
[tmp2] ; Doc file (temp. output)
ENDDO
DE ; Finished with this doc file
[tmp1] ; Doc file
DOC SORT ; Sort by micrograph number
[tmp2] ; Doc file (input)
[tmp1] ; Doc file (output)
1 ; Sort col.
Y ; Renumber
VM
echo ' 'Listing micrographs by defocus group
; Create column labels
SD / micrograph defocus def.group def.grp.avg
[defavg] ; Doc file (output)
DO [key] = 1,[nummics]
UD [key], [mic],[defocus],[grp],[avg-def]
[tmp1] ; Doc file (temp. input)
SD [key], [mic],[defocus],[grp],[avg-def]
[defavg] ; Doc file (output)
ENDDO
UD N [max-key] ; Max key in doc file
[tmp2] ; Doc file (temp input)
; Create other output doc files
SD / DEFOCUS_GROUP AVG.DEFOCUS
[order] ; Doc file (output)
[keyt]=1
UD [keyt], [mic],[defocus],[prev-grp],[avg-def]
[tmp2] ; Doc file (temp input)
SD [keyt], [prev-grp],[avg-def]
[order] ; Doc file (output)
[key]=2
DO [keyt] = 2,[max-key]
UD [keyt], [mic],[defocus],[grp],[avg-def]
[tmp2]
IF ([grp].NE.[prev-grp]) THEN
SD [key], [grp],[avg-def]
[order] ; Doc file (output)
;VM
;echo ' 'Group: {******[grp]} Defocus:{********[avg-def]}
[key] = [key] + 1
ENDIF
[prev-grp] = [grp]
ENDDO
; Delete temporary files
UD E ; Finished with : [tmp1]
DE
[tmp1]
UD E ; Finished with :[tmp2]
DE ; Finished with :
[tmp2]
VM
echo ' '
EN
;