;
; ; SOURCE: spider/docs/techs/recon/newprogs/defavg.spi ; simplifed, grpout input parameter ArDean Leith Nov 2010 ; ; PURPOSE: Compute average defocus values for the defocus groups ; ; Input : Defocus doc file with 2 register columns: ; (1) Micrograph#, (2) Defocus value, (3) Defocus group ; ; Output : Doc file with 2 register columns ; (1) Defocus group, (2) Average defocus ; Micrograph group doc file with 4 register columns ; (1) Micrograph#, (2) Defocus value, (3) Defocus group, (4)Average defocus ; ;------------ Edit Input parameters ------------------------------ [firstoldgrp] = 1 ; First defocus group to include [firstnewgrp] = 1 ; Starting number for output defocus groups ; ----------- Input files -------------- [defsort] = 'def_sort' ; Doc file with: Micrograph, Defocus, Defocus group ; ----------- Output files -------------- [selgrp] = 'sel_group' ; Doc file for: Defocus group, Average defocus [defavg] = 'def_avg' ; Doc file for: Micrograph, Defocus, Defocus group, Average defocus ; -------------------- END BATCH HEADER ---------------------------- MD ; Skip unnecessary output VB OFF MD ; Skip unnecessary output TR OFF DE ; Delete doc file [defavg] ; Doc file (removed) DE ; Delete doc file [selgrp] ; Doc file (removed) [tmp2] = 'jnktmp502' ; Temp doc file DE ; Delete doc file [tmp2] ; Doc file (removed) ; ------------------------------------------------- UD N [nummics] ; Get total number of micrographs [defsort] VM echo ' 'Computing average group defocus values from: {******[nummics]} micrographs ; Create doc file listing average defocus for each defocus group. SD / DEFOCUS_GROUP AVG.DEFOCUS [selgrp] ; Doc file (output) [sum] = 0 ; Sum [num] = 0 ; No. in group [avg-def] = 0 ; Current group average [currgrp] = [firstoldgrp] ; Numbering scheme of input [grpout] = [firstnewgrp] ; Numbering scheme of output [grpcounter] = 1 DO [key] = 1,[nummics] ; Loop over all micrographs ; Regs: mic#, defocus, group UD [key], [mic], [defocus], [grp] ; Read doc file [defsort] ; Micrograph doc file (input) IF ([grp].lt.[firstoldgrp]) CYCLE ; Skip to next micrograph IF ([grp].EQ.[currgrp]) THEN ; Micrograph is in this group [sum] = [sum] + [defocus] ; Cumulative defocus [num] = [num] + 1 ; # in group ELSE ; Micrograph in next group IF ([num].ne.0) THEN ; Needed if skipping first groups [avg-def] = [sum] / [num] ; Compute group avg. SD [grpcounter], [grpout], [avg-def] ; Save avg. for this group [selgrp] ; Avg. file (output) ;VM ;echo ' 'Group: {****[grpout]} Avg defocus: {******[avg-def]} ENDIF [sum] = [defocus] ; Initialize [num] = 1 ; # in group [currgrp] = [currgrp] + 1 ; New current group [grpcounter] = [grpcounter] + 1 [grpout] = [grpout] + 1 ENDIF ENDDO ; Compute the avg. defocus for last group [avg-def] = [sum] / [num] ; Compute group avg. SD [grpcounter], [grpout],[avg-def] ; Save avg. for last group [selgrp] ; Avg. file (output) ;VM ;echo ' 'Group: {****[grpout]} Avg defocus: {******[avg-def]} UD E ; Finished with: [defsort] SD E ; Finished doc file writing [selgrp] ; Doc file (output) ; ------------------------------------------------- ; Read the micrograph defocus doc file, and append averages. [miccounter] = 0 DO [mic-key] = 1,[nummics] ; Loop over all micrographs ; Get mic#, defocus, group UD [mic-key], [mic], [defocus], [oldgrp] [defsort] ; Doc file (input) UD E ; Finished IF ([oldgrp].ge.[firstoldgrp]) THEN [newgrp] = [oldgrp] - [firstoldgrp] + [firstnewgrp] UD FIND [grpkey], [unused], [avg-def] ; Get group average [selgrp] ; Doc file (input) (1,[newgrp]) [miccounter] = [miccounter] + 1 SD [miccounter], [mic], [defocus], [newgrp], [avg-def] [tmp2] ; Doc file (output) ENDIF ENDDO ; ------------------------------------------------- ;VM ;echo ' 'Sorting micrograph dofocus doc file by micrograph number UD FIND E [selgrp] SD / Micrograph Defocus Def.group Def.grp.avg [defavg] ; Doc file (output) SD E ; Finished doc file [defavg] ; Doc file (output) DOC SORT A ; Sort doc file [tmp2] ; Doc file (input) [defavg] ; Doc file (output) 1 ; Sort col. Y ; Renumber ; Delete temporary file DE [tmp2] VM echo ' 'Computed average group defocus values from: {******[miccounter]} micrographs ; echo EN ;