; Creates list of all particles for each micrograph ; -------------- Parameters -------------- [first-global] = 1 ; first global particle number [max-particles] = 0 ; maximum number of particles per micrograph (0==all from ORDER_PICKED) ; ---------------- Inputs ---------------- fr l [micrograph_list]../sel_micrograph ; micrograph list fr l [selection_doc]good/good{****x55} ; (optional) hand-picked selection doc fr l [micrograph2particle_table]order_picked ; (used if hand-picked doc doesn't exist) group-to-particle lookup table ;fr g ;[particles]win/winser_{****x55}@ ; particle template (to determine if stacked) ; ---------------- Output ---------------- fr l [particle_list]coords/docall{****x55} ; filename template for list of particles, for each micrograph ; MIC_SLICE GLOBALPART fr l [mic2global]coords/mic2global{****x55} ; micrograph-slice to global-particle lookup table ; KEY:MIC_SLICE / GLOBAL_PARTICLE_NUM fr l [summary_doc]summary-listallparticles ; summary doc ; ----------- END BATCH HEADER ----------- de ; clean up pre-existing file [summary_doc] SD / MICNUM KEPT_PARTS TOTALPARTS PERCENTKEPT [summary_doc] ; sort micrograph-selection file doc sort [micrograph_list] [micrograph_list]_sort (1) ; column# to sort: micrograph# Y ; renumber keys? ; initialize micrograph-counter [micrograph-counter] = 1 doc sort [micrograph2particle_table] [micrograph2particle_table]_sort (1) ; column# to sort: micrograph# Y ; renumber? ; initialize global-particle counter [global-number] = [first-global] ; get total# micrographs ud n,x10 [micrograph2particle_table]_sort ; get #good-micrographs ud n,x12 [micrograph_list]_sort ; loop through micrographs do lb1 x11=1,x10 ; get particle range in micrograph ud ic,x11,x55,[tot-parts],x93,[first-kept],[last-kept] [micrograph2particle_table]_sort ; x55==micrograph# [particles-kept] = [last-kept] - [first-kept] + 1 ; limit #particles/micrograph if([max-particles].gt.0) then if ([particles-kept].gt.[max-particles]) then [last-kept] = [first-kept] + [max-particles] - 1 endif endif ; if not past end of micrograph-list, then continue if([micrograph-counter].le.x12) then ; get micrograph# (x54) from micrograph-list ud ic [micrograph-counter],x54 [micrograph_list]_sort ; if micrograph# from table != micrograph# from list, skip ahead if(x54.eq.x55) then ; ; check if particles are stacked ; if([micrograph-counter].eq.1) then ; fi [is-stack] ; [particles] ; (24) ; header position for ISTACK ; ; if([is-stack].ne.0) then ; vm ; echo "Particles are in stacks" ; else ; vm ; echo "Particles are unstacked" ; endif ; endif ; delete pre-existing files de [mic2global] de [particle_list] ; check if handpicked list exists iq fi [handpicked-exists] [selection_doc] ; if hand-picked list exists if([handpicked-exists].eq.1) then ; get #particles-kept ud n [num-particles] [selection_doc] ; loop through particles do lb2 [particle-key] = 1,[num-particles] ; read micrograph-rank ud ic [particle-key], [micrograph-rank] [selection_doc] ; write to MIC2GLOBAL sd [micrograph-rank], [global-number] [mic2global] ; increment global# [global-number] = [global-number] + 1 lb2 ; end particle-loop ; close docs ud ice [selection_doc] sd e [mic2global] ; re-key MIC2GLOBAL doc key [mic2global] [particle_list] ; count #particles ud n [included-counter] [particle_list] vm echo "Kept {*****[included-counter]} particles from [selection_doc]" ; if handpicked list doesn't exist else if([last-kept].lt.[first-kept]) then vm m echo; echo "WARNING!"; echo "First particle #{******[first-kept]} greater than last particle #{******[last-kept]}"; echo "Check input files related to micrograph {*****x55}"; echo . en endif ; loop through particles do lb4 [micrograph-rank]=[first-kept],[last-kept] [included-counter] = [micrograph-rank] - [first-kept] + 1 ; ; if particles are stacked, when write slice#, then global-particle# ; if([is-stack].ne.0) then ; sd [micrograph-rank],[global-number] ; [mic2global] ; ; otherwise, write global-particle# first, then slice# ; else ; sd [global-number],[micrograph-rank] ; [mic2global] ; endif sd [micrograph-rank],[global-number] [mic2global] [global-number] = [global-number] + 1 lb4 ; end particle-loop ; close doc sd e [mic2global] ; re-key MIC2GLOBAL doc key [mic2global] [particle_list] SD / MIC_SLICE GLOBAL_PART [particle_list] sd e [particle_list] ; count #particles ud n [included-counter] [particle_list] vm echo "Kept {*****[included-counter]} particles from micrograph #{*****x55} using [micrograph2particle_table]" endif ; endif handpicked exists [percent-kept] = 100*[included-counter]/[tot-parts] ; maybe should trap for zero someday ; write to summary doc sd [micrograph-counter], x55,[included-counter],[tot-parts],[percent-kept] [summary_doc] ; x55==micrograph# ; increment counters [micrograph-counter] = [micrograph-counter] + 1 ; if micrograph not in list else vm echo "Micrograph {****x55} not in [micrograph_list] -- Skipping..." endif endif ; endif not past end of micrograph-list lb1 ; end micrograph loop ; close document ud ice [micrograph2particle_table]_sort de [micrograph2particle_table]_sort ud ice [micrograph_list]_sort de [micrograph_list]_sort [micrograph-counter] = [micrograph-counter] - 1 [global-number] = [global-number] - 1 ;[dummy] = -[micrograph-counter] ;SD / TOTALPARTS ;[summary_doc] ;sd [dummy], [global-number] ;[summary_doc] [dummy] = -1 SD / NUM_MICS TOTALPARTS [summary_doc] sd [dummy], [micrograph-counter],[global-number] [summary_doc] sd e [summary_doc] vm echo ; echo "Done -- Kept {******[global-number]} particles from {*****[micrograph-counter]} micrographs" en d ; Modified 2010-09-02 ; 2010-09-02 (trs & ay) -- trap for >999 micrographs for 'SD [dummy]' line ; 2009-12-17 (trs & bc) -- bug fix: in using ORDER_PICKED, global# and mic-slice reversed ; 2009-10-25 (trs & adg) -- can optionally use hand-picked list instead of contiguous range from ORDER_PICKED ; 2009-10-16 (trs) -- removed option for unstacked images ; 2008-10-03 (trs) -- added output file mic2global ; 2008-10-03 (trs) -- assigns global particle number ; 2008-02-01 (trs) -- trap if last micrograph in ORDER_PICKED not kept ; 2008-02-01 (trs) -- sorts ORDER_PICKED ; 2007-12-17 (trs) -- explicitly sorts micrograph-selection file ; 2007-12-17 (trs) -- optional parameter for maximum number of particles per micrograph ; 2007-10-10 (trs) -- gets number of micrographs from SEL_MICROGRAPH ; 2007-10-09 (trs) -- output format depends whether particles are in stacks or not ; 2006-05-12 (trs) -- input filename updated to reflect change in PNUMS.SPI