; Runs defocus group loop & endmerge loop in parallel
;
; SOURCE:  spider/docs/techs/recon/newprogs/pub_refine_start.pam 
;          New                                   Feb 2002 ArDean Leith
;          [rn]                                  Feb 2005 ArDean Leith
;          []                                    Dec 2005 ArDean Leith
;          Clone                                 Jan 2009 ArDean Leith
;          Removed cpang, has_scratch            Jan 2010 Ardean Leith
;          smangloop has_scratch                 Aug 2010 Ardean Leith
;
; PURPOSE: Runs defocus group loop & endmerge     
;          Calls grploop/smangloop, or endmerge in parallel 
;          Run directly in SPIDER 
;
; INPUT REGISTERS (Set On operation line):
;          [task]     Task selector
;          [iter]     Current iteration 
;          [grp]      Group number 
;          [rn]       Random number for unique DOC_SYNC files

MD
TR OFF                      ; Loop info turned off
MD
VB OFF                      ; File info turned off
MD                          
SET MP                      ; Set OMP processors to all available
0

; Input global parameters & file names 
@refine_settings([sp_maxspfreq],[radius],[alignsh],[prj-radius],[iter1],[iter-end],[sp_lambda],[small-ang],[sp_winsize],[converg])

IQ DIR [has-scratch]
[temp_local_dir]

MY FL
IF([task].EQ.0)THEN        ; Runs main refinement  grploop tasks

   RR S [ang-limit]        ;  Restriction on ang. search (varies with iteration)
   [ang-limits]
   [iter]

   RR S [ang-step]         ; Angular step (varies with iteration)
   [ang-steps]
   [iter]

   IF ([has-scratch].GT.0) THEN
      ; Copy files to local disk  
      @pub_ref_loop_clone([iter],[grp])

      ; Returns [stop] which is communicated via document files
      @grploop([ang-step],[ang-limit],[radius],[alignsh],[prj-radius],[iter],[grp],[stop],[sp_maxspfreq])

      ; Copy local disk files to server disk  
      @pub_ref_loop_declone([iter],[grp])
   ELSE
      ; Redefine [temp_local_dir] to work directory 
      GLO [temp_local_dir] = '[temp_work_dir]'

      ; Returns [stop] which is communicated via document files
      @grploop([ang-step],[ang-limit],[radius],[alignsh],[prj-radius],[iter],[grp],[stop],[sp_maxspfreq])
   ENDIF
ENDIF


IF([task].EQ.1)THEN  ; Runs main refinement smangloop tasks

   IF ([has-scratch].GT.0) THEN
      ; Copy files to local disk  
      @pub_ref_loop_clone([iter],[grp])

      ; Returns [stop] which is communicated via document files
      @smangloop([radius],[alignsh],[prj-radius],[iter],[grp],[stop])

      ; Copy local disk files to server disk  
      @pub_ref_loop_declone([iter],[grp])
   ELSE
      ; Redefine [temp_local_dir] to work directory 
      GLO [temp_local_dir] = '[temp_work_dir]'

      ; Returns [stop] which is communicated via document files
      @smangloop([radius],[alignsh],[prj-radius],[iter],[grp],[stop])
   ENDIF
ENDIF

IF([task].EQ.2)THEN            ; Runs endmerge consolidation task
   [next-iter] = [iter]        ; Operates on current iteration

   IF ([has-scratch].GT.0) THEN
      ; Copy files to local disk  
      @pub_ref_merge_clone([iter],[grp])

      @endmerge([prj-radius],[grp],[next-iter])

      ; Copy local disk files to server disk  
      @pub_ref_merge_declone([iter],[grp])

   ELSE
      ; Redefine [temp_local_dir] to work directory 
      GLO [temp_local_dir] = '[temp_work_dir]'

      @endmerge([prj-radius],[grp],[next-iter])
   ENDIF
ENDIF

MY FL

; Signal master SPIDER that this task is finished
@pub_refine_doc_sync([task],[stop],[grp],[rn])

EN                           ; This SPIDER ends now
;