; Fixes refinement if a group(s) is missing
;
; SOURCE: spider/docs/techs/recon/newprogs/pub_fixrefine.pam
;         New                                   Sep 2004  ArDean Leith 
;         [var]                                 Dec 2005  ArDean Leith
;
; PURPOSE: Fix refinement for missing defocus groups
;
; Files are set in: refine settings refine settings.pam)
;
; INPUT REGISTERS: None
;
; INPUT FILES:
;    input/data{***group}@              [unaligned_images]   Unaligned stacked image file  
;    input/align{**iter}_{***group}     [group_align]        Original alignment parameters 
;    input/undone_select                [undone_select]      Image ID doc. fil
;    input/vol{**iter}                  [initial_vol]        Initial volume
;    final/vft{**iter}                  [vft_for_iter]           
;    input/params                       [params]           
;
; OUTPUT FILES 
;    final/vol{**iter+1}                [next_vol]           Final output volume for each iter.
;    final/align{**iter+1}}_{***group}  [next_group_align] 
;    final/dres{**iter+1}_{***group}    [next_group_dres]    Resolution doc. file
;    jnkdoc{***group}                                        Sync doc file from pubsub tasks
;
; PROCEDURES CALLED:
;    refine_settings          refine_settings.pam
;    publish                  publish
;    ... pub_refine_start      pub_refine_start          
;    ....... refine_settings  refine_settings.pam            
;    ....... grploop          grploop.pam            
;    ....... smangloop        smangloop.pam            
;    ....pub_refine_doc_sync  pub_refine_doc_sync.pam
;    pub_refine_wait          pub_refine_wait.pam
;    mergegroups              mergegroups.pam
;    ...saveresp              saveresp.pam
;
; -------------------------------- Edit this data --------------------------

[iter]    = 9   ; Iteration (Set this)
[winsize] = 155 ; Image size (Set this)

FR G      ; Need selection file containing list of groups to be run in reg. 1
[undone_select]undone

; ---------------------------------------------------------------------

MD
TR OFF   ; Loop info turned off
MD
VB OFF   ; File info turned off

; Get global parameters (x41 & x42 depend on [iter]) & set filenames
@refine_settings([maxspfreq],[radius],[alignsh],[prj-radius],[iter1],[iter-end],[lambda],[small-ang],[winsize],[converg])

UD N [num-grps]           ; Find number of defocus groups              
[undone_select]

[task] = [small-ang]      ; Pub_starter selector flag

; Process all defocus groups in parallel
DO  i=1,[num-grps]
   UD IC i,[grp]          ; Get this defocus group number
   [undone_select]

   DE
   jnkdocparamout{***[grp]}
   MY FL

   ; Use pub_refine_start to create parallel grploop for this defocus group   
   VM
   publish './spider pam/$DATEXT @pub_refine_start {**[grp]} task={*[task]} iter={**[iter]} grp={**[grp]}' 
ENDDO

VM
echo "Waiting for iteration: {**[iter]}"
MY FL                 ; Flush results file

;  Wait for all subscribers to finish grploop
DO i=1,[num-grps]     ;  Wait for all tasks 

   UD IC,i,[grp]      ; Get group number
   [undone_select]

   UD E
   IQ SYNC
   jnkdocparamout{***[grp]}
   (10 3600000)

   DE
   jnkdocparamout{***[grp]}

   VM
   date
   VM
   echo "Synced group: {**[grp]} "
EDDO

UD ICE                     ; End doc file UD ICE use
[undone_select]

VM
echo "Merging groups now"
MY FL   ; flush results

; Consolidate data for CTF corrections
@mergegroups([maxspfreq],[iter],x90)

VM
echo "Alignment finished for iteration: {***[iter]}"

EN
;