; 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
;          [pixsiz],[r2]                         Aug 2012 Ardean Leith
;          smangloop no [n-big]                  Apr 2015 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]      Current 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([pixsiz],[r2],[alignsh],[prj-radius],[iter1],[iter-end],[lambda],[small-ang],[winsize])
 
 IQ DIR [has-scratch]       ; See if there is a local scratch dir.
   [temp_local_dir]         ; Dir name

 MY FL
 IF( [task] == 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] > 0 ) THEN
      ; Copy files to local disk  
      @pub_ref_loop_clone([iter],[grp])

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

      ; 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 [n-big] which is communicated via document files
      @grploop([ang-step],[ang-limit],[r2],[alignsh],[prj-radius],[iter],[grp],[n-big],[pixsiz])
   ENDIF
 ENDIF

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

   [n-big] = 0
   IF ([has-scratch] > 0) THEN
      ; Copy files to local disk  
      @pub_ref_loop_clone([iter],[grp])

      @smangloop([r2],[alignsh],[prj-radius],[iter],[grp],[pixsiz])

      ; 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]'

      @smangloop([r2],[alignsh],[prj-radius],[iter],[grp],[pixsiz])
   ENDIF
 ENDIF

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

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

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

      ; 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],[pixsiz],[r2])
   ENDIF
 ENDIF

 MY FL

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

 EN                           ; This SPIDER ends now
;