;
;
; SOURCE: spider/docs/techs/recon/newprogs/defavg.spi
; simplifed, grpout input parameter ArDean Leith Nov 2010
;
; PURPOSE: Compute average defocus values for the defocus groups
;
; Input : Defocus doc file with 2 register columns:
; (1) Micrograph#, (2) Defocus value, (3) Defocus group
;
; Output : Doc file with 2 register columns
; (1) Defocus group, (2) Average defocus
; Micrograph group doc file with 4 register columns
; (1) Micrograph#, (2) Defocus value, (3) Defocus group, (4)Average defocus
;
;------------ Edit Input parameters ------------------------------
[grpout] = 1 ; Starting output defocus group
; ----------- Input files --------------
[defsort] = 'def_sort' ; Doc file with: Micrograph, Defocus, Defocus group
; ----------- Output files --------------
[selgrp] = 'sel_group' ; Doc file for: Defocus group, Average defocus
[defavg] = 'def_avg' ; Doc file for: Micrograph, Defocus, Defocus group, Average defocus
; -------------------- END BATCH HEADER ----------------------------
MD ; Skip unnecessary output
VB OFF
MD ; Skip unnecessary output
TR OFF
DE ; Delete doc file
[defavg] ; Doc file (removed)
DE ; Delete doc file
[selgrp] ; Doc file (removed)
[tmp2] = 'jnktmp502' ; Temp doc file
DE ; Delete doc file
[tmp2] ; Doc file (removed)
; -------------------------------------------------
UD N [nummics] ; Get total number of micrographs
[defsort]
VM
echo ' 'Computing average group defocus values from: {******[nummics]} micrographs
; Create doc file listing average defocus for each defocus group.
SD / DEFOCUS_GROUP AVG.DEFOCUS
[selgrp] ; Doc file (output)
[sum] = 0 ; Sum
[num] = 0 ; No. in group
[avg-def] = 0 ; Current group average
DO [key] = 1,[nummics] ; Loop over all micrographs
; Regs: mic#, defocus, group
UD [key], [mic], [defocus], [grp] ; Read doc file
[defsort] ; Micrograph doc file (input)
IF ([grp].EQ.[grpout]) THEN ; Micrograph is in this group
[sum] = [sum] + [defocus] ; Cumulative defocus
[num] = [num] + 1 ; # in group
ELSE ; Micrograph in next group
[avg-def] = [sum] / [num] ; Compute group avg.
SD [grpout], [grpout], [avg-def] ; Save avg. for this group
[selgrp] ; Avg. file (output)
;VM
;echo ' 'Group: {****[grpout]} Avg defocus: {******[avg-def]}
[sum] = [defocus] ; Initialize
[num] = 1 ; # in group
[grpout] = [grpout] + 1 ; New current group
ENDIF
ENDDO
; Compute the avg. defocus for last group
[avg-def] = [sum] / [num] ; Compute group avg.
SD [grpout], [grpout],[avg-def] ; Save avg. for last group
[selgrp] ; Avg. file (output)
;VM
;echo ' 'Group: {****[grpout]} Avg defocus: {******[avg-def]}
UD E ; Finished with: [defsort]
SD E ; Finished doc file writing
[selgrp] ; Doc file (output)
; -------------------------------------------------
; Read the micrograph defocus doc file, and append averages.
DO [key] = 1,[nummics] ; Loop over all micrographs
; Get mic#, defocus, group
UD [key], [mic], [defocus], [grp]
[defsort] ; Doc file (input)
UD E ; Finished
UD [grp], [unused], [avg-def] ; Get group average
[selgrp] ; Doc file (input)
UD E ; Finished
SD [key], [mic], [defocus], [grp], [avg-def]
[tmp2] ; Doc file (output)
ENDDO
; -------------------------------------------------
;VM
;echo ' 'Sorting micrograph dofocus doc file by micrograph number
SD / Micrograph Defocus Def.group Def.grp.avg
[defavg] ; Doc file (output)
SD E ; Finished doc file
[defavg] ; Doc file (output)
DOC SORT A ; Sort doc file
[tmp2] ; Doc file (input)
[defavg] ; Doc file (output)
1 ; Sort col.
Y ; Renumber
; Delete temporary file
DE
[tmp2]
VM
echo ' '
EN
;