; Estimates defocus values from power spectra ; SOURCE: ctffind4.spi ; ; PURPOSE: Get defocus using MRC program CTFFIND4 ; ; USAGE: spider spi/$DATEXT @ctffind4 $RESULTS ncpus=$NUM_CPUS ; ; REQUIRES: ; load-mic.spi SPIDER procedure ; xmipp_image_convert XMIPP's conversion program (if MRC format) ; readmrc.py a python script ; ctffind4 in your PATH ; v4-ctffind.sh OR a shell script to pass parameters to CTFFIND4 ; v4-ctffind-mp.sh a shell script which allocates multiple threads ; ; INPUTS: ; Micrographs (in SPIDER format) ; Start, end micrograph numbers ; Parameters to ctffind, including ; - spherical aberration ; - electron beam voltage (in kV) ; - amplitude contrast ratio ; - magnification ; - pixel size on scanner (in microns) ; (see ctffind script for more) ; OUTPUTS: ; Doc file of defocus and astigmatism information. ; Power spectrum generated by ctffind4 (in SPIDER format). ; Text report generated by ctffind4. ; --------------------- Parameters ----------------------------------- [numProcs] = 1 ; Number of CPUs (g.t. 0, can be overridden from command line) [keepspi] = 1 ; Save converted SPIDER-format micrograph? (0 = No) ; Exclude edges of the micrograph [xb] = 100 ; X distance from border [yb] = 100 ; Y distance from border ; CTFFIND4 parameters [boxsize] = 512 ; box size [minres] = 50 ; minimum resolution [maxres] = 3 ; maximum resolution [minDf] = 8000 ; minimum defocus (Angstroms) [maxDf] = 70000 ; maximum defocus (Angstroms) [dfStep] = 1000 ; defocus step size [astigExp] = 100 ; expected astigmatism ; For CTF ED and TF ED [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 ; -------------- Input files ----------------- [params] = '../params' ; Parameters file [sel_mic] = '../sel_micrograph' ; Micrograph File numbers [raw] = '../Micrographs/raw{****[mic]}' ; Template for micrographs (w/extension if not SPIDER) [xic] = 'xmipp_image_convert' ; Path for XMIPP's image conversion program (if MRC format) ; -------------- Output files ----------------- [spider_mic] = '../Micrographs/mic{****[mic]}' ; (Optional) SPIDER-format micrograph (one/micrograph) [outdir] = 'power' ; Power spectra directory (one) [mrc_out] = '[outdir]/powmrc****' ; Power spectrum template (one/micrograph) [ctffind_stdout] = '[outdir]/out****' ; CTFFIND4 stdout (one/micrograph) [report] = '[outdir]/report****' ; Report file, created by CTFFIND (one/micrograph) [pow] = '[outdir]/pw_avg_****' ; Power spectrum images (one/micrograph) [ctf] = '[outdir]/ctf_****' ; CTF noise doc files (one/micrograph) [rod] = '[outdir]/roo_doc_****' ; Rotational average doc file (one/micrograph) [defocus_doc] = 'defocus' ; Doc file (one) ; MIC_NUM CTFFIND4_DF ANG_ASTIG ASTIGMATISM CUTOFF SPIDER_DF ; -------------------- END BATCH HEADER ----------------------- ; Temporary files [micout] = 'tmpmic2spi' ; SPIDER temp file from conversion [temp_winmic] = 'tmpwin{****[mic]}' ; Windowed SPIDER image [mrc_mic] = 'tmpmrcmic.mrc' ; Temporary MRC file [ctffind_outs] = 'tmpout_ctffind4' ; Template for CTFFIND4 outputs (.mrc, .txt, & _avrot.txt) [ctffind_report] = 'tmpreport' [temp_readmrc_doc] = 'tmp_ctffind_defocus' [ctfed_out] = 'tmp_ctfed_defocus' ; Defocus values doc file (one) [rosd_1davg] = '_1' [temp_ctfed_doc] = 'tmpctfdoc' ; 1D power spectrum from CTF ED [temp_masked_pws] = '_20' ; Masked power spectrum MD ; Skip unnecessary output VB OFF MD ; Skip unnecessary output TR OFF MD SET MP 1 ; Parameters for CTFFIND4. Use symbolic vars to send to shell script. 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] ; Get X dimension [params] ; Params file (input) UD 4,[sp_ny] ; Get Y dimension [params] ; Params file (input) UD 5,[sp_pixsiz] ; Pixel size (ANGSTROMS) [params] UD 6,[sp_kev] ; Electron beam voltage in kV [params] UD 7,[sp_sph_abb] ; Spherical aberration [params] UD 12,[sp_acr] ; Amplitude contrast ratio [params] UD 14,[lambda] ; Wavelength [params] UD E DE [temp_readmrc_doc] DE [ctfed_out] DE [defocus_doc] ; Column labels for the doc. output file SD / MIC_NUM CTFFIND4_DF ANG_ASTIG ASTIGMATISM CUTOFF SPIDER_DF RESOLUTION [defocus_doc] SD E [defocus_doc] SYS ; Make sure output dir. present mkdir -pv [outdir] UD N [numMics] ; Get micrograph filenumbers [sel_mic] [decimate] = 1 IF ([keepspi] .GE. 1) THEN SYS echo " Will keep micrographs in SPIDER format" ; echo ENDIF DO [key] = 1,[numMics] ; Loop over all files ------------------------- UD IC [key], [mic] [sel_mic] ; [mic] is now the micrograph file number @load-mic([mic],[sp_zflag],[sp_fflag],[deci],[sp_nx],[sp_ny],[keepspi]) [raw] ; Micrograph (input) [micout] ; SPIDER file (output) _2 ; Scratch file (output) ; @convert_p([decimate]) ; [params] ; Parameter file ; [raw] ; Micrograph (input) ; [micout] ; SPIDER file (output) FI [v21],[v22] [micout] (12,2) [v31] = [v21] - (2*[xb]) ; Dimensions without border [v32] = [v22] - (2*[yb]) WI ; Window the micrograph, removing borders [micout] ; Micrograph (input) [temp_winmic] ; Windowed micrograph (output) ([v31],[v32]) ; Dimensions ([xb],[yb]) ; Start coords IF ([keepspi] .GE. 1) THEN SYS mv -vn [micout].$DATEXT [spider_mic].$DATEXT ; (Will not overwrite.) ENDIF ; CP TO MRC ; Convert to MRC format ; [temp_winmic] ; Micrograph (input) ; [mrc_mic] ; Windowed mrc micrograph (output) ; 32 ; 4 byte real data ; ; ([sp_pixsiz],[sp_pixsiz],[sp_pixsiz]) ; pixel size ; Leave blanked above and below! (call default values) ; SYS [xic] -i [temp_winmic].$DATEXT -o [mrc_mic] SYS echo " Calling ctffind for micrograph: {****[mic]}" [sp_sph_abb] [sp_kev] [sp_acr] [sp_pixsiz] IF ([ncpus] .GE. 2) THEN [numProcs]=[ncpus] ; Can pass optional #CPUs from command-line call IF ([numProcs] .GE. 2) THEN IF ([key] .EQ. 1) THEN SYS echo " Using {%i0%[numProcs]} processors" ENDIF SYS M ./v4-ctffind-mp.sh [mrc_mic] [ctffind_outs].mrc {%f5.3%[sp_pixsiz]} {%f6.0%[sp_kev]} {%f5.2%[sp_sph_abb]} {%f5.2%[sp_acr]} {%i4%[boxsize]} {%i3%[minres]} {%i2%[maxres]} {%i5%[minDf]} {%i5%[maxDf]} {%i4%[dfStep]} {%i4%[astigExp]} no {%i0%[numProcs]} > [ctffind_report].txt . ELSE IF ([key] .EQ. 1) THEN SYS echo " Using single processor" ENDIF SYS M ./v4-ctffind.sh [mrc_mic] [ctffind_outs].mrc {%f5.3%[sp_pixsiz]} {%f6.0%[sp_kev]} {%f5.2%[sp_sph_abb]} {%f5.2%[sp_acr]} {%i4%[boxsize]} {%i3%[minres]} {%i2%[maxres]} {%i5%[minDf]} {%i5%[maxDf]} {%i4%[dfStep]} {%i4%[astigExp]} no > [ctffind_report].txt . ENDIF ; Variables passed to CTFFIND4: ; $1 Input image file name ; $2 Output diagnostic filename ; $3 Pixel size ; $4 Acceleration voltage ; $5 Spherical aberration ; $6 Amplitude contrast ; $7 Size of power spectrum to compute ; $8 Minimum resolution ; $9 Maximum resolution ; $10 Minimum defocus ; $11 Maximum defocus ; $12 Defocus search step ; $13 Expected (tolerated) astigmatism ; $14 Find additional phase shift? ; $15 (Optional) Number of threads SYS mv -f [ctffind_report].txt [report][mic].txt CP FROM MRC ; Comment out these lines if you don't want spectra [ctffind_outs].mrc ; MRC power spectra (input) [mrc_out][mic] ; Power spectrum generated by CTFFIND3. (output) N ; Do not fold data SYS \rm [ctffind_outs].mrc SYS ./readmrc.py [ctffind_outs].txt {****[mic]} >> [temp_readmrc_doc].$DATEXT SYS rm -f [ctffind_outs]_avrot.txt ; The following can be helpful as a diagnostic. SYS mv [ctffind_outs].txt [ctffind_stdout][mic].txt ; Estimate CTF defocus parameters & save in defocus summary doc file CTF ED [defocusCTFED],[cutoff],[ntiles] [temp_winmic] ; 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) [ctfed_out] ; Defocus doc file, appended (output) [mic] ; Key/image number for doc file [pow][mic] ; 2D power spectrum (output) DE [rod][mic] ; PS rotational average doc file (output) RO SD ; Rotational average [pow][mic] ; 2D CTF file (input) [rosd_1davg] ; 1D rotational average (output, not saved) [rod][mic] ; PS rotational average doc file (output) ; Read CTFFIND's values UD [mic], [micMRC],[avgDf],[majAxis],[minAxis],[angCtffind],[astigmatism],[resolution] [temp_readmrc_doc] UD E 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) DE [temp_ctfed_doc] ; Write to combined doc SD [mic], [micMRC],[avgDf],[angCtffind],[astigmatism],[cutoff],[defocusCTFED],[resolution] [defocus_doc] SYS echo DE [temp_winmic] ; Windowed micrograph (deleted) VM \rm -f [temp_winmic].$DATEXT VM \rm [mrc_mic] ENDDO ; Clean up UD ICE [sel_mic] ; [mic] is now the micrograph file number DE [micout] ; SPIDER file (deleted) DE [ctfed_out] DE [temp_readmrc_doc] SD E [defocus_doc] EN ; Modified 2016-10-18 ; 2016-10-18 (trs) -- reads resolution estimate from CTFFIND4 output ; 2016-05-23 (trs) -- replaced TF ED 1D profile with CTF ED 1D profile ; 2016-04-25 (trs) -- reordered columns to be compatible with ctffind.spi ; 2016-03-11 (trs) -- option to allocate subset of processors for CTFFIND4 (default uses all CPUs) ; 2016-01-27 (trs) -- added option to save SPIDER-format micrograph ; 2016-01-22 (trs) -- masking power spectrum and then running TF ED ; 2016-01-14 (trs) -- using XMIPP to convert to MRC format ;