; Calculates average power spectra and defocus values for set of micrographs
 ;
 ; PURPOSE: Calculates average power spectra for a set of micrographs, 
 ;          estimates defocus from the power spectra, and places defocus
 ;          value in a doc. file.

 ; PURPOSE: First converts a scanned micrograph file to SPIDER format.
 ;          Computes 2D power spectrum and places in: power/roo****
 ;          Estimates defocus from 2D power spectra and places in: defocus
 ;          Creates 1D CTF correction image and CTF document file.
 ;          Inputs: Window size, Percentage of the overlap distance 
 ;                  of the window from the micrograph border,
 ;          Uses SPIDER operation 'CTF ED'
 ;
 ;  REQUIRES:  load-mic.spi
 ;
 ; SOURCE:  spider/docs/techs/recon1/Procs/powdefocus.spi 
 ;          RO SD                               May 2012 ArDean Leith
 ;          CTF                                 Apr 2013 ArDean Leith
 ;
 ; Edit following parameters and filenames as needed.
 ;
 [numProcs]  = 0         ; number of CPUs to use (0 = All)
 [keepspi]   = 1         ; Keep on-disk temp spider file (0 = discard) 
 [deci]      = 0         ; Decimation factor (0 = Get value from params file)
 ;                       ;                    1 = Full sized image
 ;                       ;                    2 = 1/2 size
 ;                       ;                    4 = 1/4 size

 [maskRadius] = 100      ; Inner mask radius for power spectrum, Angstroms
 [tilesiz]    = 500      ; Size of tiles (square)
 [xover]      = 50       ; X tile overlap % 
 [yover]      = 50       ; Y tile overlap % 
 [xd]         = 500      ; X tile dist. from the edge 
 [yd]         = 500      ; Y tile dist. from the edge 

 [want-defocus-yn] = 1  ; Find defocus values using 'CTF ED'

 ; ----------- Input files --------------

 [params]   = '../params'                                       ; Parameter doc file             (one)

 [sel_mic]  = '../sel_micrograph'                               ; Micrograph selection doc file  (one)

 [micgr]    = '../Micrographs/raw****'                          ; Micrograph images              (one/micrograph)

 GLO [xic]  = '/home/tapu/local/xmipp/bin/xmipp_image_convert'  ; Path for XMIPP's image conversion program (if MRC format) 
 
 ; ----------- Output files --------------

 [spi_disk] = '../Micrographs/mic****'   ; Micrograph in SPIDER format (can optionally be either saved or deleted)
 
 [outdir]   = 'power'                    ; Power spectra directory     (one)

 [pow]      = '[outdir]/pw_avg_****'     ; Power spectrum images       (one/micrograph)

 [ctf]      = '[outdir]/ctf_****'        ; CTF noise doc files         (one/micrograph)

 [roo]      = '[outdir]/roo_****'        ; Rotational average file     (one/micrograph)

 [rod]      = '[outdir]/roo_doc_****'    ; Rotational average doc file (one/micrograph)

 [out]      = 'defocus'                  ; Defocus values doc file     (one)

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

 ; ----------- Temp files --------------

 [temp_spi]         = '_1'             ; Temp spider file
 [temp_masked_pws]  = '_20'            ; Masked power spectrum

 MD
   TR OFF                           ; Loop info turned off
 MD
   VB OFF                           ; File info turned off
 MD
   SET MP                           ; Use all available OMP processors
   [numProcs]

 SYS                                ; Make sure output dir. present
   mkdir -p [outdir]

 ;  -----  Get zip & format flags (can params vary??)
 UD 1,[sp_zflag]                    ; Get zip flag
   [params]                         ; Params file           (input)
 UD 2,[sp_fflag]                    ; Get tif flag
   [params]                         ; Params file           (input)
 UD 3,[sp_nx]                       ; X dimension 
   [params]                         ; Params file           (input)
 UD 4,[sp_ny]                       ; Y dimension        
   [params]                         ; Params file           (input)
 UD 5,[sp_pixsiz]                   ; Get pixel size
   [params]                         ; Params file           (input)
;; UD 14,[lambda]                     ; Wavelength
;;   [params]                         ; Params file           (input)
 
 IF ( [deci] < 1 ) THEN
    UD 16,[sp_deci]                 ; Get decimation factor  
      [params]                      ; Params file           (input)
    [deci] = [sp_deci]
    IF ( [deci] < 1 ) [deci] = 1.0  ; Should not be zero
 ELSE
    ; (Don't need this multiplcation factor if decimation supplied by PARAMS)
    [sp_pixsiz]=[sp_pixsiz]*[deci]  ; Adjust pixel size for decimation
 ENDIF


 IF ( [want-defocus-yn]  >  0 ) THEN
   ; Want to determine defocus parameters

   UD 6,[sp_kev]                    ; Electron voltage (kev)
     [params]                       ; Params file           (input)
   UD 7,[sp_sph_abb]                ; Spherical aberration (mm)
     [params]                       ; Params file           (input)
   UD 12,[sp_acr]                   ; Amplitude contrast ratio
     [params]                       ; Params file           (input)

   DE
     [out]                          ; Defocus file           (removed)
   SD /        MIC_NUM  DEFOCUS  CUTOFF
     [out]                          ; Defocus file           (removed)
   SD E
     [out]

 ENDIF

 UD N [nummics]                     ; Get number of micrographs
   [sel_mic]

 DO [key]=1,[nummics]               ; Loop over all micrographs -------------------

   UD [key], [mic]                  ; Get micrograph number
     [sel_mic]                      ; Micrograph select doc file  (input)

   ;SYS
   ;  echo ' 'Loading Micrograph:   {*****[mic]}  

   ; Convert micrographs and load into incore file
   @load-mic([mic],[sp_zflag],[sp_fflag],[deci],[sp_nx],[sp_ny],[keepspi])
     [micgr][mic]                  ; Micrograph template     (input)
     [temp_spi]                    ; SPIDER file             (output)
     _4                            ; Hiscan & Nikon scratch  (output)

   IF ( [want-defocus-yn]  >  0 ) THEN
     ; ----------- Get defocus value  -------------------
     ; Save defocus parameters in doc file

     DE                          ; Delete ctf noise doc file
       [ctf][mic]                ;                                (removed)
     DE
       [rod][mic]                ; PS rotational average doc file (removed)

     ; Estimate CTF defocus parameters & save in defocus summary doc file
     CTF ED [def],[cutoff],[ntiles] 
       [temp_spi]                ; Micrograph image               (input)
       [tilesiz],[xover],[yover] ; Tile size, x & y tile % overlap:
       [xd],[yd]                 ; X & Y tiling border
       [sp_pixsiz],[sp_sph_abb]  ; Pixel size, Spherical aberration
       [sp_kev]                  ; Electron voltage [kev]
       [sp_acr]                  ; Ampl. contrast ratio
       [ctf][mic]                ; CTF noise doc file             (output)
       [out]                     ; Defocus doc file, appendded    (output)
       [mic]                     ; Key/image number for doc file
       [pow][mic]                ; 2D power spectrum              (output)

     IF ([key] .EQ. 1) THEN
        ; Calculate radius
        [maskRadius] = 2*[sp_pixsiz]*[tilesiz]/[maskRadius]
        [maskRadius]   ; diagnostic
     ENDIF
        
     ; Mask power spectrum
     MA
     [pow][mic]
     [temp_masked_pws]
     0,[maskRadius]   ; inner, outer radii
     D                ; _D_isk
     C                ; set background to _C_ircumference average
                      ; mask center (CR = image center)
                    
;     ; Estimate defocus using TF ED
;     TF ED [angAstig],[astigMag],x13,[defocusTFED],[cutoffFreq]
;     [temp_masked_pws]
;     [sp_pixsiz],[sp_sph_abb]
;     [lambda]
;     [sp_acr]
;     [ctf][mic]   ; OUTPUT
;     ; ([angAstig],[astigMag] are passed for legacy purposes and should be zero.)
;    
;     SD [mic], [mic],[defocusTFED],[astigMag],[angAstig],[cutoffFreq]
;     [out]
    
     SYS
       echo ' 'Micrograph: {%I5%[mic]}' ' Tiles: {%i4%[ntiles]}' '  Defocus: {%f8.2%[def]} ; echo

     RO SD                       ; Rotational average
       [pow][mic]                ; 2D CTF file                    (input)
       [roo][mic]                ; 1D rotational average          (output)
       [rod][mic]                ; PS rotational average doc file (output)

   ENDIF
   
   IF ([keepspi] .GT. 1) THEN
     SYS
       mv -vn [temp_spi].$DATEXT [spi_disk][mic].$DATEXT
   ELSE
     DE
       [temp_spi]
   ENDIF

 ENDDO

 SD E
   [out]                         ; Doc file           (closed)

 SYS
   cat [out].$DATEXT ; echo ' '
 
 EN

; Modified 2016-05-24
;    2016-01-27 (trs) -- added option to save SPIDER-format micrograph
;    2016-01-22 (trs) -- masking power spectra

 ;