; Assign defocus values to groups
;
; PURPOSE: Assign defocus values to groups
;
; Input : defocus doc file with 2 columns:
;   (1) micrograph#, (2) defocus value
;
; Output : defocus group doc file with 3 columns
;   (1) micrograph#, (2) defocus value, (3) defocus group
;   NB: OUTPUT FILE IS SORTED BY DEFOCUS VALUE!

[maxdiff] = 1000       ; Max. difference for defocus values in same group

; ----------- Input files --------------
FR G
[defocus]defocus      ; Defocus file

; ----------- Output files --------------

FR G
[defsort]def_sort     ; Defocus group file

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

MD                    ; Skip unnecessary output 
VB OFF
MD                    ; Skip unnecessary output 
TR OFF

[grp] = 1             ; [grp] = group number

FR G
[tmp]tmpdefsort

DE                    ; Delete output doc file
[tmp]
DE                    ; Delete output doc file
[defsort]

DOC SORT              ; Sort the defocus file 
[defocus]             ; Doc file             (input)
[tmp]                 ; Doc file             (output)
2                     ; Sort column
Y                     ; Renumber doc file

VM
echo ' 'Computing defocus groups

; Put Column labels in output doc file
SD /     Micrograph  Defocus    Def.Group
[defsort]

[def1]  = -1.0e20  ; So that it starts a new group
[grp]   = 0        ; Initialize group
[nmics] = 0

DO                  ; Loop over all micrographs --------------------

   ; [def] = current defocus, [mic] = mic
   UD NEXT [key],[mic],[def]
   [tmp]
   IF ([key].LE. 0) EXIT

   [def-diff] = ([def] - [def1])
   IF ([def-diff].GT.[maxdiff]) THEN
      [grp]  = [grp] + 1
      [def1] = [def]
   ENDIF
   [nmics] = [nmics]+1  ; Output key number

   ; Write out 1st line: mic, defocus, defgroup
   SD [nmics], [mic],[def],[grp]
   [defsort]
ENDDO

UD NEXT E          ;[tmp]

DE
[tmp]

VM
echo ' 'Found: {*****[grp]} groups from: {******[nmics]} micrographs
VM
echo ' '

EN D
;