Skip to content

SIMPLE Codebase Map

  • SIMPLE/
  • production/ — home of executables
    • simple_exec.f90 — executes SIMPLE workflows
    • simple_private_exec.f90 — executes shared-memory parallelized programs executed by distributed commanders
    • simple_stream.f90 — executes SIMPLE stream workflows
    • simple_test_exec.f90 — executes SIMPLE tests workflows
    • single_exec.f90 — executes the SINGLE (Structure Identification of Nanoparticles with Liquid-cell Em) workflows
    • tests/ — home of executable unit tests
    • simple_test_angres.f90 — angular resolution as a function of number of projection directions
    • simple_test_ansi_colors.f90
    • simple_test_binoris.f90
    • simple_test_binoris_io.f90
    • simple_test_block_tree.f90 — test for block-tree search space decomposition and mapping
    • simple_test_block_tree2D.f90
    • simple_test_block_tree_io.f90
    • simple_test_bounds_from_mask3D.f90
    • simple_test_class_sample.f90
    • simple_test_clustering.f90
    • simple_test_cmdline.f90
    • simple_test_coarrays.f90
    • simple_test_corrs2weights.f90
    • simple_test_ctf.f90
    • simple_test_eigh.f90
    • simple_test_eo_diff.f90 — tests randomization of phases below noise power
    • simple_test_eval_polarftcc.f90
    • simple_test_extr_frac.f90
    • simple_test_forked_process.f90
    • simple_test_ft_expanded.f90
    • simple_test_gencorrs_fft.f90
    • simple_test_graphene_mask.f90
    • simple_test_gui_assembler.f90
    • simple_test_gui_metadata.f90
    • simple_test_image_bin.f90
    • simple_test_imgfile.f90
    • simple_test_inside_write.f90
    • simple_test_install.f90 — for testing a SIMPLE installation, generates an image stack of cubes and runs all the unit tests
    • simple_test_io.f90
    • simple_test_io_parallel.f90
    • simple_test_kbinterpol_fast.f90
    • simple_test_lbfgsb.f90
    • simple_test_lbfgsb_cosine.f90
    • simple_test_lplims.f90
    • simple_test_lpstages.f90
    • simple_test_mask.f90
    • simple_test_maxnloc.f90
    • simple_test_mini_stream.f90 — test for running the mini stream across multiple data sets
    • simple_test_mrc2jpeg.f90
    • simple_test_mrc_validation.f90
    • simple_test_msk_routines.f90
    • simple_test_multinomal.f90
    • simple_test_nano_mask.f90
    • simple_test_neigh.f90 — test for refine=neigh modes
    • simple_test_nice.f90
    • simple_test_openacc.f90
    • simple_test_openmp.f90
    • simple_test_opt_lp.f90
    • simple_test_order_corr.f90
    • simple_test_ori.f90
    • simple_test_oris.f90
    • simple_test_otsu.f90
    • simple_test_pca_all.f90
    • simple_test_pca_imgvar.f90
    • simple_test_pdb2mrc.f90
    • simple_test_phasecorr.f90
    • simple_test_polarops.f90
    • simple_test_ptcl_center.f90
    • simple_test_rank_weights.f90
    • simple_test_rotate_ref.f90
    • simple_test_serialize.f90
    • simple_test_sim_workflow.f90
    • simple_test_simd.f90
    • simple_test_socket_client.f90
    • simple_test_socket_io.f90
    • simple_test_socket_server.f90
    • simple_test_sp_project.f90
    • simple_test_stack_io.f90
    • simple_test_star_export.f90
    • simple_test_starfile.f90
    • simple_test_strat2D_utils.f90
    • simple_test_stringmatch.f90
    • simple_test_sym.f90
    • simple_test_uniform_euler.f90
    • simple_test_uniform_rot.f90 — from "Uniform rotations from Gaussians" of https://www.sciencedirect.com/science/article/pii/B9780080507552500361
    • simple_test_units.f90 — runs all implemented unit tests
    • test_socket_comm_distr.f90
  • scripts/ — home of scripts and code generators
  • src/ — main source code folder
    • defs/ — home of singleton modules with parameter and type definitions
    • simple_ansi_ctrls.f90 — ANSI C control parameters for text formatting
    • simple_default_clines.f90 — setting command line defaults
    • simple_defs.f90 — eclectic mix of definitions
    • simple_defs_atoms.f90 — covalent atomic radii and lattice parameter definitions
    • simple_defs_conv.f90 — parameters controlling convergence of 2D and 3D orientation search
    • simple_defs_environment.f90 — environment variable flag definitions
    • simple_defs_fname.f90 — standard file name, body, suffix, and extension definitions
    • simple_defs_ori.f90 — static orientation record value enumerators and flag conversions
    • simple_defs_stream.f90 — constants used in streaming
    • simple_defs_string.f90 — string constants
    • simple_fftw3.f90 — FFTW3 interface. See www.fftw.org and /usr/include/fftw3.f03
    • simple_type_defs.f90 — type and enumerator definitions
    • fileio/ — home of modules for i/o related to project files, mrc files, eer movies, star files etc.
    • simple_binoris.f90 — for managing orientation data using binary files
    • simple_binoris_io.f90 — high-level binoris i/o routines
    • simple_block_tree_io.f90 — for storing block tree information on disk
    • simple_class_sample_io.f90 — for storing class sampling information on disk
    • simple_discrete_stack_io.f90 — for single-threaded non-contiguous reading of image stacks
    • simple_eer_factory.f90 — for eer movie format i/o
    • simple_error.f90 — exception handling
    • simple_fileio.f90 — system file handling module
    • simple_fileio_tester.f90 — unit tests for fileio module
    • simple_imgfile.f90 — class to deal with image files on disks
    • simple_imghead.f90 — type and method definitions to deal with image file headers
    • simple_nrtxtfile.f90 — deals with text files of numbers
    • simple_projfile_utils.f90 — project file utilities
    • simple_sigma2_binfile.f90 — sigma2 file i/o class
    • simple_stack_io.f90 — This class is for single-threaded buffered contiguous reading/writing of image stacks and volumes
    • simple_syslib.f90 — System utilities & POSIX/OS wrappers
    • simple_syslib_tester.f90 — unit tests for the syslib module
    • simple_tifflib.f90 — Fortran wrapper for libtiff, edited from Unblur
    • inc/ — home of *.inc files containing macro definitions and enumerations
    • main/ — main source code directory
    • simple_abinitio_utils.f90 — utilities for ab initio 3D reconstruction used by commanders_abinitio
    • simple_builder.f90 — centralized builder (the main object constructor in SIMPLE)
    • simple_cmdline.f90 — the class implementing command line parsing
    • simple_cmdline_tester.f90 — unit test routines for command line class
    • simple_convergence.f90 — for checking convergence of 2D and 3D search
    • simple_euclid_sigma2.f90 — the abstract data type for sigma2 used when objfun=euclid
    • simple_eul_prob_tab.f90 — the core probability table routines used for probabilistic 3D search
    • simple_eul_prob_tab_neigh.f90
    • simple_micrograph_generator.f90 — used for generating dose fractionated micrographs from movies
    • simple_parameters.f90 — provides global distribution of constants and derived constants
    • simple_particle_extractor.f90 — core functionality for extracting particles from micrographs
    • simple_pspec_thumb_iter.f90 — iterator for pspec_thumb for power spectrum and thumbnails generation
    • simple_pspecs.f90 — abstract data type for power spectra
    • simple_simulator.f90 — simulation of single-particle images
    • simple_sym.f90 — defines protein point-group symmetries
    • simple_symanalyzer.f90 — statistical test for point-group symmetry detection in 3D maps not alinged to the symmetry axis
    • apis/ — application programming interfaces for cleaner use inclusion and faster compilation
      • simple_commanders_api.f90 — API for the commanders
      • simple_core_api.f90 — API for the core modules
      • simple_exec_api.f90 — Aggregated public API for simple_exec
      • simple_gui_metadata_api.f90 — Aggregated public API for gui metadata modules
      • simple_ori_api.f90
      • simple_pftc_api.f90
      • simple_pftc_srch_api.f90 — Facade pattern API to avoid circular dependencies involving polarft_calc
      • simple_private_exec_api.f90 — Aggregated public API for simple_private_exec.
      • simple_stream_api.f90 — Aggregated public API for stream_exec.
      • simple_test_exec_api.f90 — Aggregated public API for simple_test_exec
      • single_exec_api.f90 — Aggregated public API for single_exec
    • class/ — class-oriented abstract data types, mainly averagers
      • simple_class_frcs.f90 — for Fourier Ring Correlation bookkeeping for class averages in memory and on disk
      • simple_classaverager.f90 — Types and interfaces for production of Cartesian class averages
      • simple_classaverager_core.f90 — Implementations of core types and routines underpinning cavg restoration
      • simple_classaverager_restore.f90 — Routines to perform the classes restoration and processing
    • commanders/ — object-oriented command pattern implementations
      • simple/ — home of the simple commanders implementing high-level application code
      • simple_commander_base.f90 — abstract base commander
      • simple_commander_cleanup2D.f90 — cleanup for molecule with large heterogeneity
      • simple_commanders_abinitio.f90 — abinitio 3D reconstruction in single- and multi-particle mode
      • simple_commanders_abinitio2D.f90 — ab initio 2D analysis
      • simple_commanders_atoms.f90 — operations on atoms, mostly used in SINGLE
      • simple_commanders_cavgs.f90 — analysis of class averages
      • simple_commanders_checks.f90 — checking info about images, project, or checking update calculations
      • simple_commanders_cluster2D.f90 — simultaneous 2D alignment and clustering of single-particle images
      • simple_commanders_distr.f90 — for managing distributed SIMPLE execution
      • simple_commanders_euclid.f90 — for sigma2 calculations in objfun=euclid 2D and 3D refinement
      • simple_commanders_euclid_distr.f90 — for distributed sigma2 calculations in objfun=euclid 2D and 3D refinement
      • simple_commanders_imgops.f90 — standard image operations: binarize, filter, denoise, normalize, scale etc.
      • simple_commanders_imgproc.f90 — standard EM image processing
      • simple_commanders_mask.f90 — masking and auto-masking
      • simple_commanders_misc.f90 — stuff that didn't fit elsewhere
      • simple_commanders_mkcavgs.f90 — for producing class averages
      • simple_commanders_ori.f90 — for operating on orientations
      • simple_commanders_pick.f90 — for picking, extraction, and making picking references
      • simple_commanders_preprocess.f90 — for pre-processing (motion correction, CTF estimation etc.)
      • simple_commanders_prob.f90
      • simple_commanders_project_cls.f90 — project commanders for dealing with 2D class-related things
      • simple_commanders_project_core.f90 — commanders for operating on projects (spproject) and associated files, the core stuff
      • simple_commanders_project_mov.f90 — project commanders for movie-related things
      • simple_commanders_project_ptcl.f90 — project commanders for particle-related things
      • simple_commanders_rec.f90 — 3D reconstruction and associated things
      • simple_commanders_rec_distr.f90
      • simple_commanders_refine3D.f90 — supporting 3D orientation search
      • simple_commanders_relion.f90 — supporting interoperability with RELION
      • simple_commanders_resolest.f90 — for resolution estimation
      • simple_commanders_sim.f90 — for simulating noise, particles, movies, atoms, etc.
      • simple_commanders_starproject.f90 — starproject import, export, etc.
      • simple_commanders_stkops.f90 — operations on image stacks
      • simple_commanders_validate.f90 — validation of stream functionalities in batch execution mode
      • simple_commanders_volops.f90 — operations on volumes
      • single/ — home of the single commanders implementing high-level application code
      • single_commanders_experimental.f90 — experimental commanders under development
      • single_commanders_nano2D.f90 — 2D analysis commanders used in SINGLE for nanoparticle processing
      • single_commanders_nano3D.f90 — 3D refinement and reconstruction commanders used in SINGLE for nanoparticle processing
      • single_commanders_trajectory.f90 — commanders operating on extracted time-trajectories, used in SINGLE for nanoparticle processing
      • single_commanders_tseries.f90 — commanders operating on the full time-series field of view, used in SINGLE for nanoparticle processing
      • test/ — home of the test commanders implementing high-level testing code
      • simple_commanders_test_class.f90 — for all class tests
      • simple_commanders_test_fft.f90 — for all fft tests
      • simple_commanders_test_geometry.f90 — for all geometry tests
      • simple_commanders_test_highlevel.f90 — for all highlevel tests
      • simple_commanders_test_io.f90 — for all input/output tests
      • simple_commanders_test_masks.f90 — for all masks tests
      • simple_commanders_test_network.f90 — for all network tests
      • simple_commanders_test_numerics.f90 — for all numerics tests
      • simple_commanders_test_optimize.f90 — for all optimize tests
      • simple_commanders_test_parallel.f90 — for all parallel tests
      • simple_commanders_test_stats.f90 — for all stats tests
      • simple_commanders_test_utils.f90 — for all utils tests
      • simple_test_mod_phasecorr.f90
    • ctf/ — home of the modules for estimation and application of the contrast transfer function
      • simple_ctf.f90 — defines the Contrast Transfer Function (CTF) of the electron microscope
      • simple_ctf_estimate_cost.f90 — cost functions for CTF fitting
      • simple_ctf_estimate_fit.f90 — routines for anisotroic (patched) CTF estimation
      • simple_ctf_estimate_iter.f90 — does one iteration of CTF estimation
    • exec/
      • simple_exec_abinitio3D.f90 — execution of abinitio3D commanders
      • simple_exec_cavgproc.f90 — execution of cavgs processing commanders
      • simple_exec_cluster2D.f90 — execution of cluster2D commanders
      • simple_exec_denoise.f90 — execution of denoising commanders
      • simple_exec_dock.f90 — execution of map docking commanders
      • simple_exec_filter.f90 — execution of filtering commanders
      • simple_exec_image.f90 — execution of image processing commanders
      • simple_exec_mask.f90 — execution of masking commanders
      • simple_exec_ori.f90 — execution of orientation commanders
      • simple_exec_other.f90 — execution of other commanders
      • simple_exec_preproc.f90 — execution of preprocessing commanders
      • simple_exec_print.f90 — execution of printing commanders
      • simple_exec_project.f90 — execution of project management commanders
      • simple_exec_refine3D.f90 — execution of 3D refinement commanders
      • simple_exec_res.f90 — execution of resolution estimation commanders
      • simple_exec_sim.f90 — execution of simulation commanders
      • simple_exec_sym.f90 — execution of symmetry-related commanders
      • simple_exec_validate.f90 — execution of validation commanders
      • simple_exec_volume.f90 — execution of volume manipulation commanders
      • simple_test_exec_class.f90 — execution of test class processing commanders
      • simple_test_exec_fft.f90 — execution of test fft processing commanders
      • simple_test_exec_geometry.f90 — execution of test geometry processing commanders
      • simple_test_exec_highlevel.f90 — execution of test highlevel processing commanders
      • simple_test_exec_io.f90 — execution of test input/output processing commanders
      • simple_test_exec_masks.f90 — execution of test masks processing commanders
      • simple_test_exec_network.f90 — execution of test network processing commanders
      • simple_test_exec_numerics.f90 — execution of test numerics processing commanders
      • simple_test_exec_optimize.f90 — execution of test optimize processing commanders
      • simple_test_exec_parallel.f90 — execution of test parallel processing commanders
      • simple_test_exec_stats.f90 — execution of test stats processing commanders
      • simple_test_exec_utils.f90 — execution of test utils processing commanders
      • single_exec_atom.f90
      • single_exec_map.f90
      • single_exec_nano2D.f90
      • single_exec_nano3D.f90
      • single_exec_trajectory.f90
      • single_exec_tseries.f90
      • single_exec_validate.f90
    • image/ — home of the submodules of the image class, its extensions, and its variants
      • simple_ft_expanded.f90 — expanded Fourier transform class for improved cache utilisation
      • simple_ftexp_shsrch.f90 — shift search with L-BFGS-B using expanded Fourier transforms (used in motion_correct)
      • simple_ftiter.f90 — Fourier index loop range generator and mapping of logical indexing to physical indexing
      • simple_image.f90 — the abstract image data type and its methods. 2D/3D & FT/real all implemented by this class and FTs done in-place to reduce memory usage
      • simple_image_access.f90 — image class getters, setters, serializers etc.
      • simple_image_arith.f90 — arithmetics on images
      • simple_image_bin.f90 — extension of the image class for binary images
      • simple_image_calc.f90 — calculating stuff from images
      • simple_image_checks.f90 — checking image stuff
      • simple_image_core.f90 — core image functionality, such as constructors/object lifecycle
      • simple_image_ctf.f90 — for applying CTF to images
      • simple_image_fft.f90 — core fft routines as well as fused optimized operations involving ffts
      • simple_image_filt.f90 — image filtering and denoising
      • simple_image_freq_anal.f90 — image frequency domain analysis, power spectrum etc.
      • simple_image_geom.f90 — geometrical image operations: window, shift, pad, clip etc.
      • simple_image_io.f90 — for reading and writing images from/to disk
      • simple_image_msk.f90 — extension of the image class to provide 2D/3D envelope and adaptive masking
      • simple_image_norm.f90 — image normalization routines
      • simple_image_ops.f90 — opreations on images not fitting elewhere: noise, zero, background, CTF division etc.
      • simple_image_polar.f90 — polar 2D Fourier transform generation by convolution interpolation (gridding)
      • simple_image_seg.f90 — image segmentation related stuff to support masking
      • simple_image_vis.f90 — for supporting visualization of images in various ways
      • simple_projector.f90 — projection of 3D volumes in the Fourier domain by convolution interpolation to generate band-pass limited Cartesian and polar 2D Fourier transforms
    • interp/ — home of the window functions for Fourier gridding interpolation
      • simple_edges_sqwins.f90 — square windows and mask edges
      • simple_gridding.f90 — utilities for convolution interpolation (gridding)
      • simple_kbinterpol.f90 — Kaiser-Bessel interpolation kernel
      • simple_winfuns.f90 — window functions for Fourier interpolation
    • motion/ — home of modules for movie motion correction
      • simple_motion_align_hybrid.f90 — discrete/continuous hybrid 2D registration to support motion correction
      • simple_motion_align_nano.f90 — motion correction for movies of nanoparticles with aberation-corrected TEM
      • simple_motion_correct.f90 — motion correction, dose-weighting and frame-weighting of direct electron detector movies
      • simple_motion_correct_iter.f90 — iterator for motion_correct
      • simple_motion_correct_utils.f90 — utility functions for motion correction
      • simple_motion_patched.f90 — patched-based anisotropic motion correction
      • simple_opt_image_weights.f90 — numerically find optimal weights for frames
    • nano/ — home of modules supporting nanoparticle 3D reconstruction and atomic model building in SINGLE
      • simple_atoms.f90 — atomic structures and pdb parser
      • simple_molecule_data.f90 — example of molecule data used for simple testing
      • simple_nanoparticle.f90 — the nanoparticle abstract data type, used for automated atomic model building in SINGLE
      • simple_nanoparticle_utils.f90 — nanoparticle utilities, mostly operations on atomic coordinates
      • simple_tseries_graphene_subtr.f90 — graphene background subtraction in SINGLE
      • simple_tseries_tracker.f90 — time series tracker intended for movies of nanoparticles spinning in solution
    • opt/ — home of modules implementing various non-linear optimizations of a scalar objective function
      • simple_opt_bfgs.f90 — function minimization by L-BFGS (Limited memory Broyden-Fletcher-Goldfarb-Shannon optimization)
      • simple_opt_bfgs2.f90 — function minimization by BFGS algorithm, translated from gsl 2.4 (vector_bfgs2.c)
      • simple_opt_bforce.f90 — brute force function minimisation
      • simple_opt_de.f90 — continuous function optimisation by differential evolution
      • simple_opt_factory.f90 — factory pattern class for the SIMPLE optimisers
      • simple_opt_fr_cg.f90 — function minimization by Fletcher-Reeves conjugate gradient algorithm, translated from gsl 2.4
      • simple_opt_helpers.f90 — helper routines and definitions for certain optimizer routines (those taken from the gsl library)
      • simple_opt_lbfgsb.f90 — memory limited bound-constained BFGS optimiser
      • simple_opt_particle_swarm.f90 — continuous particle swarm optimisation
      • simple_opt_powell.f90 — continuous function optimisation by Powell's method of conjugate search directions
      • simple_opt_pr_cg.f90 — function minimization by Polak-Ribiere conjugate gradient algorithm, translated from gsl 2.4
      • simple_opt_simplex.f90 — The Nelder-Mead simplex method for continuous function minimisation
      • simple_opt_spec.f90 — optimiser specification
      • simple_opt_stde.f90 — function minimization by steepest descent algorithm, translated from gsl 2.4 (steepest_descent.c)
      • simple_opt_subs.f90 — optimisation algorithm utilities, line searches etc.
      • simple_optimizer.f90 — abstract optimizer defining an interface for the extending optimization classes
    • ori/ — home of modules for metadata (orientation) management
      • simple_ori.f90 — an orientation (abstract data type for per-particle data)
      • simple_ori_tester.f90 — unit test routines for the ori class
      • simple_ori_utils.f90 — Euler angle and rotation matrix utilities for the ori and oris classes
      • simple_oris.f90 — an agglomeration of orientations
      • simple_oris_dists.f90 — distance calculators and related functions for oris
      • simple_oris_getters.f90 — getters/queries for oris object
      • simple_oris_io.f90 — input/output routines for oris object
      • simple_oris_life.f90 — life-cycle management of oris object (constructors, destructors, etc.)
      • simple_oris_neig.f90 — routines for identifying neighbors of oris and calculating correlations/overlaps/distances between oris
      • simple_oris_reshape.f90 — reshaping/partitioning/remapping routines for oris object
      • simple_oris_sampling.f90 — sampling and updatecnt related routines for oris
      • simple_oris_setters.f90 — setters/mutators for oris
      • simple_oris_stats.f90 — routines for calculating statistics of oris (e.g. mean, median, min, max, etc.)
      • simple_oris_tester.f90 — unit test routines for the oris class
      • simple_oris_transform.f90 — transform/offset/rotation routines for oris object
      • simple_oris_weights.f90 — retired orientation weight submodule retained for source-list stability
    • pca/ — home of modules implementing principal component analysis: SVD, probabilistic, and nonlinear kernel variants
      • simple_kpca_svd.f90 — kPCA using 'Learning to Find Pre-Images', using svd for eigvals/eigvecs
      • simple_pca.f90 — abstract pca strategy base class
      • simple_pca_svd.f90 — PCA using standard SVD
      • simple_ppca.f90 — class for probabilistic principal component analysis
      • simple_ppca_inmem.f90 — class for probabilistic principal component analysis
    • pftc/ — home of the polar FT calc submodules and modules for operations on polar FTs
      • simple_pftc_shsrch_grad.f90 — rotational origin shift alignment of band-pass limited polar projections in the Fourier domain, gradient based minimizer
      • simple_polarft_access.f90 — polarft class accessors submodule
      • simple_polarft_calc.f90 — polarft class complete interface
      • simple_polarft_core.f90 — polarft class core submodule: object lifecycle etc.
      • simple_polarft_corr.f90 — polarft class submodule for objective function evaluations
      • simple_polarft_ctf.f90 — polarft class submodule for dealing with CTF-related things
      • simple_polarft_geom.f90 — polarft class submodule for geometry-related things: shift, rotate, mirror etc.
      • simple_polarft_memo.f90 — polarft class submodule for memoization for performance
      • simple_polarft_ops_io.f90 — particle polar Fourier line streaming I/O
    • pick/ — home of modules for particle picking
      • simple_picker_iter.f90 — particle picker iterator
      • simple_picker_utils.f90 — routines for executing reference-based, segmentation-based, and Gaussian picking
      • simple_pickref.f90 — the abstract data type implementing particle picking using templates
      • simple_pickseg.f90 — the abstract data type implementing the original version of segmentation-based picking
      • simple_picksegdiam.f90 — the abstract data type implementing the version of segmentation-based picking used in the stream
    • project/ — home of the submodules of the single-particle project class for managing project information in memory and on disk
      • simple_sp_project.f90 — single-particle project, the complete interface and abstract data type
      • simple_sp_project_cls.f90 — single-particle project routines for managing 2D class info
      • simple_sp_project_core.f90 — single-particle project core routines, lifecycle, accessors, modifiers etc.
      • simple_sp_project_io.f90 — single-particle project I/O routines
      • simple_sp_project_mic.f90 — single-particle project routines for managing micrograph and move information
      • simple_sp_project_optics.f90 — single-particle project routines for managing optics information
      • simple_sp_project_out.f90 — single-particle project routines for managing outputs from various processes
      • simple_sp_project_ptcl.f90 — single-particle project routines for managing particle-level information
      • simple_sp_project_stk.f90 — single-particle project routines for managing stack-level information
    • star/ — home of modules for star file and star project handling
      • simple_relion.f90 — for interoperability with RELION
      • simple_starfile.f90 — the starfile abstract data type
      • simple_starfile_wrapper.f90 — maps starfile C code to fortran callable routines
      • simple_starproject.f90 — abstract data type implementing starproject
      • simple_starproject_stream.f90 — for star project management in streaming applications
      • simple_starproject_tester.f90 — unit test routines for starproject
      • simple_starproject_utils.f90 — starproject utilities
    • strategies/ — object-oriented strategy pattern implementations
      • parallelization/ — home of strategies for different parallelization modes (distributed, shared-memory etc.)
      • simple_calc_pspec_strategy.f90
      • simple_cluster2D_strategy.f90
      • simple_ctf_estimate_strategy.f90
      • simple_extract_strategy.f90
      • simple_gen_pspecs_and_thumbs_strategy.f90
      • simple_make_cavgs_strategy.f90
      • simple_motion_correct_strategy.f90
      • simple_pick_strategy.f90
      • simple_preprocess_strategy.f90
      • simple_rec3D_strategy.f90
      • simple_reextract_strategy.f90
      • simple_refine3D_strategy.f90
      • search/ — home of strategies for 2D and 3D orientation search
      • simple_strategy2D.f90 — abstract base class defining the common strategy2D interface
      • simple_matcher_2Dprep.f90 — common routines used by the high-level strategy 2D and 3D matchers
      • simple_strategy2D_alloc.f90 — array allocation for concrete strategy2D extensions to improve caching and reduce alloc overheads
      • simple_strategy2D_eval.f90 — 2D strategy for objective function evaluation
      • simple_strategy2D_greedy.f90 — 2D strategy for exhaustive projection matching with greedy in-plane search
      • simple_strategy2D_greedy_smpl.f90 — 2D strategy for exhaustive projection matching with probabilistic in-plane search
      • simple_strategy2D_inpl.f90 — 2D strategy for in-plane refinement
      • simple_strategy2D_inpl_smpl.f90 — 2D strategy for in-plane refinement with probabilistic sampling
      • simple_strategy2D_matcher.f90 — high-level search routines for the cluster2D and abinitio2D applications
      • simple_strategy2D_snhc.f90 — 2D strategy for stochastic neighborhood hill climbing
      • simple_strategy2D_snhc_smpl.f90 — 2D strategy for stochastic neighborhood hill climbing with probabilistic in-plane search
      • simple_strategy2D_srch.f90 — common strategy2D methods and type specification for polymorphic strategy2D object creation are delegated to this class
      • simple_strategy2D_tseries.f90 — 2D strategy for time-restrained search, used in SINGLE
      • simple_strategy2D_utils.f90 — utility routines for 2D class average processing
      • simple_strategy3D.f90 — abstract base class defining the common strategy3D interface
      • simple_strategy3D_alloc.f90 — array allocation for concrete strategy3D extensions to improve caching and reduce alloc overheads
      • simple_strategy3D_eval.f90 — 3D strategy for objective function evaluation
      • simple_strategy3D_greedy.f90 — 3D strategy for exhaustive projection matching
      • simple_strategy3D_greedy_smpl.f90 — 3D strategy for exhaustive projection matching with probabilistic in-plane search
      • simple_strategy3D_greedy_sub.f90 — 3D strategy for neighborhood projection matching with exhaustive subspace initialization
      • simple_strategy3D_matcher.f90 — high-level search routines for the refine3D application
      • simple_strategy3D_prob.f90 — 3D strategy for probabilistic projection matching
      • simple_strategy3D_shc.f90 — 3D strategy for projection matching by stochastic hill climbing
      • simple_strategy3D_shc_smpl.f90 — 3D strategy for stochastic neighborhood hill climbing with probabilistic in-plane search
      • simple_strategy3D_snhc_smpl.f90 — 3D strategy for stochastic neighborhood hill climbing with probabilistic in-plane search
      • simple_strategy3D_srch.f90 — common strategy3D methods and type specification for polymorphic strategy3D object creation are delegated to this class
      • simple_strategy3D_utils.f90 — utility routines for 3D strategies
    • stream/ — home of the stream task commanders in the pipelined stream application and their utilities
      • simple_mini_stream_utils.f90 — utilities for running the mini batch version of the stream
      • simple_stream2D_state.f90 — singleton for common state variables across the stream modules
      • simple_stream_chunk.f90 — abstract data type for the stream_chunk, defining a chunk of data processed in parallel
      • simple_stream_chunk2D_utils.f90 — utilities for chunk-based 2D clustering in stream
      • simple_stream_cluster2D_micro.f90 — high-level batch testing of 2D refinement within clusters of 2D averages from subsets
      • simple_stream_cluster2D_subsets.f90 — high-level batch testing of the sieving logics used in the stream
      • simple_stream_cluster2D_subsets_refine.f90 — high-level batch testing of 2D refinement within clusters of 2D averages from subsets
      • simple_stream_cluster2D_utils.f90 — utilities for running 2D clustering in the stream
      • simple_stream_p01_preprocess.f90 — task 1 in the stream pipeline: pre-processing (movie registration, CTF estimation, segmentation-based picking)
      • simple_stream_p02_assign_optics.f90 — task 2 in the stream pipeline: assigning optics groups for when beam-tilt is used to change the exposure area
      • simple_stream_p03_opening2D.f90 — task 3 in the stream pipeline: the first 2D analyis from segmentation picked particles used for initial screening and generation of picking references
      • simple_stream_p04_refpick_extract.f90 — task 4 in the stream pipeline: reference-based picking and extraction
      • simple_stream_p05_sieve_cavgs.f90 — task 5 in the stream pipeline: chunk-based 2D clustering and automatic selection of high-quality class averages (sieving)
      • simple_stream_p06_pool2D.f90 — task 6 in the stream pipeline: global 2D refinement of pooled particles from the sieving
      • simple_stream_pool2D_utils.f90 — utilities for running the pool 2D refinement
      • simple_stream_utils.f90 — various stream utilities
      • simple_stream_watcher.f90 — movie watcher for stream processing
    • ui/
      • simple_ui.f90 — the main user interface module
      • simple_ui_hash.f90 — extension type providing typed convenience accessors for ui_param & ui_program
      • simple_ui_modules.f90 — module aggregating ui utility modules
      • simple_ui_param.f90 — module defining the ui_param type, which is used to define input parameters for the simple_ui_program interface
      • simple_ui_params_common.f90 — module defining the common parameters for all simple_ui_program interfaces
      • simple_ui_program.f90 — module defining the main user interface program type and associated methods
      • simple_ui_simple_group.f90 — aggregates SIMPLE (non-stream) ui program constructors
      • simple_ui_single_group.f90 — aggregates SINGLE ui program constructors
      • simple_ui_stream_group.f90 — aggregates SIMPLE stream ui program constructors
      • simple_ui_test_group.f90 — aggregates SIMPLE TEST ui program constructors
      • simple_ui_utils.f90 — module defining utility procedures for the simple_ui modules
      • simple/
      • simple_ui_abinitio3D.f90 — module defining the user interfaces for ab initio 3D reconstruction programs in the simple_exec suite
      • simple_ui_cavgproc.f90 — module defining the user interfaces for class average processing programs in the simple_exec suite
      • simple_ui_cluster2D.f90 — module defining the user interfaces for 2D clustering and related programs in the simple_exec suite
      • simple_ui_denoise.f90 — module defining the user interfaces for denoising programs in the simple_exec suite
      • simple_ui_dock.f90 — module defining the user interfaces for docking programs in the simple_exec suite
      • simple_ui_filter.f90 — module defining the user interfaces for filtering programs in the simple_exec suite
      • simple_ui_image.f90 — module defining the user interfaces for general image processing programs in the simple_exec suite
      • simple_ui_mask.f90 — module defining the user interfaces for masking programs in the simple_exec suite
      • simple_ui_ori.f90 — module defining the user interfaces for orientation processing programs in the simple_exec suite
      • simple_ui_other.f90 — module defining the user interfaces for miscellaneous programs in the simple_exec suite
      • simple_ui_preproc.f90 — module defining the user interfaces for pre-processing programs in the simple_exec suite
      • simple_ui_print.f90 — module defining the user interfaces for printing programs in the simple_exec suite
      • simple_ui_project.f90 — module defining the user interfaces for project management programs in the simple_exec suite
      • simple_ui_refine3D.f90 — module defining the user interfaces for 3D refinement programs in the simple_exec suite
      • simple_ui_res.f90 — module defining the user interfaces for resolution estimation programs in the simple_exec suite
      • simple_ui_sim.f90 — module defining the user interfaces for simulation programs in the simple_exec suite
      • simple_ui_stream.f90 — module defining the user interfaces for streaming workflows in the simple_exec suite
      • simple_ui_sym.f90 — module defining the user interfaces for symmetry-related programs in the simple_exec suite
      • simple_ui_validation.f90 — module defining the user interfaces for validation programs in the simple_exec suite
      • simple_ui_volume.f90 — module defining the user interfaces for volume processing programs in the simple_exec suite
      • simple_test/
      • simple_test_ui_class.f90 — module defining the user interfaces for per class test programs in the simple_test_exec suite
      • simple_test_ui_fft.f90 — module defining the user interfaces for fft testprograms in the simple_test_exec suite
      • simple_test_ui_geometry.f90 — module defining the user interfaces for geometry test programs in the simple_test_exec suite
      • simple_test_ui_highlevel.f90 — module defining the user interfaces for highlevel test programs in the simple_test_exec suite
      • simple_test_ui_io.f90 — module defining the user interfaces for input/output test programs in the simple_test_exec suite
      • simple_test_ui_masks.f90 — module defining the user interfaces for masks test programs in the simple_test_exec suite
      • simple_test_ui_network.f90 — module defining the user interfaces for network test programs in the simple_test_exec suite
      • simple_test_ui_numerics.f90 — module defining the user interfaces for numerics programs in the simple_test_exec suite
      • simple_test_ui_optimize.f90 — module defining the user interfaces for optimize test programs in the simple_test_exec suite
      • simple_test_ui_parallel.f90 — module defining the user interfaces for parallel test programs in the simple_test_exec suite
      • simple_test_ui_stats.f90 — module defining the user interfaces for statistics test programs in the simple_test_exec suite
      • simple_test_ui_utils.f90 — module defining the user interfaces for utils programs in the simple_test_exec suite
      • single/
      • single_ui_atom.f90 — module defining the user interfaces for atom-related programs in the single_exec suite
      • single_ui_map.f90 — module defining the user interfaces for map-related programs in the single_exec suite
      • single_ui_nano2D.f90 — module defining the user interfaces for 2D analysis of nanoparticle time-series in the single_exec suite
      • single_ui_nano3D.f90 — module defining the user interfaces for 3D analysis of nanoparticles in the single_exec suite
      • single_ui_trajectory.f90 — module defining the user interfaces for trajectory analysis of nanoparticles in the single_exec suite
      • single_ui_tseries.f90 — module defining the user interfaces for time-series analysis in the single_exec suite
      • single_ui_validate.f90 — module defining the user interfaces for validation programs in the single_exec suite
    • volume/ — home of the volume reconstructor classes, the volume analyzers, the volume docking routines, and the symmetry search
      • simple_dock_vols.f90 — class for docking pairs of volumes using correlation search and an icosahedral sampling geomery
      • simple_reconstructor.f90 — 3D reconstruction from projections using convolution interpolation (gridding)
      • simple_reconstructor_eo.f90 — 3D reconstruction of even-odd pairs for FSC estimation
      • simple_volanalyzer.f90 — for analyzing sets of ab initio volumes, current implementation just outputting the medoid
      • simple_volinterp.f90 — projection of 3D volumes in the Fourier domain by convolution interpolation to generate band-pass limited Cartesian and polar 2D Fourier transforms, high-level routines
      • simple_volpft_corrcalc.f90 — fast cross-correlation calculation between Fourier volumes using defined sampling space geometries
      • simple_volpft_symsrch.f90 — symmetry search using polar volume representation
    • utils/ — utilities source code directory
    • simple_block_tree.f90
    • simple_corrmat.f90 — for calculation of correlation matrices
    • simple_eulspace_neigh_map.f90
    • simple_exec_helpers.f90 — helpers for restarted execution, asynchronous execution, script-based execution etc.
    • simple_forked_process.f90 — various unix forking utilities
    • simple_forked_process_tester.f90 — unit tests for forked process module
    • simple_gauss2Dfit.f90 — Module for fitting the intensity distributions of 2D particle image arrays with 2D multivariate Gaussians
    • simple_imgarr_utils.f90 — utilities for image arrays
    • simple_imgproc.f90 — various image processing routines
    • simple_is_check_assert.f90 — assertions
    • simple_jiffys.f90 — jiffy = the time it takes light to travel one centimeter in vacuum
    • simple_magic_boxes.f90 — box sizes optimised for FFTW perfomance
    • simple_map_reduce.f90 — routines for distributed SIMPLE execution
    • simple_mem_estimator.f90 — job ram usage estimation
    • simple_memoize_ft_maps.f90 — Light-weight module to memoize logical to physical address/spatial frequency mapping and avoid re-computing them repeatedly
    • simple_micproc.f90 — operations on micrographs
    • simple_opt_mask.f90 — optimization(search)-based masking
    • simple_private_prgs.f90 — private program interface defintions (those executed by simple_private_exec)
    • simple_procimgstk.f90 — stack image processing routines, applying a subset of image class methods to stacks
    • simple_progress.f90 — job progress estimation
    • simple_sauron.f90 — SAURON: SIMPLE Attempt to a Unified Resources and Orientations Notebook
    • simple_segmentation.f90 — segmentation routines: peak detection, edge detection, otsu's algorithm, Hough transform, Sauvola etc.
    • simple_srchspace_map.f90
    • simple_stackops.f90 — stack image processing routines
    • simple_string.f90 — the string class that replaces intrinsic allocatable strings in SIMPLE
    • simple_string_tester.f90 — unit test subroutines for the string class
    • simple_string_utils.f90 — contains various string manipulation subroutines and functions
    • simple_test_utils.f90 — utilities for unit testing, assertions etc.
    • simple_timer.f90 — Simple timer module: High resolution (nanoseconds) timer in Fortran
    • simple_timer_omp.f90 — very precise timer for use in OpenMP sections
    • clustering/ — algorithms for clustering a distance matrix
      • simple_aff_prop.f90 — clustering of a similartity matrix using affinity propagation
      • simple_cluster_seed.f90 — seeding methods for state labelling
      • simple_clustering_utils.f90 — tools and metrics for clustering analysis
      • simple_hclust.f90 — agglomerative hierarchical clustering of a distance matrix using nearest-neighbor chain
      • simple_kmedoids.f90 — k-medoids clustering of a similarity matrix
    • comm/ — utilities for interprocess communication
      • simple_distr_comm.f90 — for initializing a server for direct socket communication
      • simple_ipc_mq.f90 — various unix message queue utilities
      • simple_ipc_mq_tester.f90 — unit tests for ipc mq module
      • simple_socket_comm.f90 — abstract data type for a web socket
      • simple_stream_communicator.f90 — the abstract data type for the http communicator used in the stream
    • filter/ — utilities for filtering and regularization
      • simple_butterworth.f90 — Butterworth low-pass filtering kernel
      • simple_estimate_ssnr.f90 — spectral signal-to-noise ratio estimation routines
      • simple_fsc.f90 — various Fourier Shell Correlation utilities
      • simple_opt_filter.f90 — optimization(search)-based filtering
      • simple_tent_smooth.f90
      • simple_tvfilter.f90 — filter based on total variation in real space
    • gui/ — utilities for feeding information to the GUI
      • simple_gui_assembler.f90 — assembles gui metadata objects into json to be sent to nice
      • simple_gui_assembler_tester.f90 — unit tests for gui_assembler
      • simple_gui_utils.f90 — various GUI utility functions
      • simple_guistats.f90 — abstract data type for generating various stats for the gui
      • simple_nice.f90 — the module implementing New Interface for Cryo-Em (NICE)
      • metadata/ — metadata structures for passing between processes and generating json for sending to nice
      • simple_gui_metadata_base.f90 — gui metadata base structure
      • simple_gui_metadata_histogram.f90 — gui metadata histogram structure
      • simple_gui_metadata_micrograph.f90 — gui metadata micrograph structure
      • simple_gui_metadata_tester.f90 — unit tests for gui metadata
      • simple_gui_metadata_types.f90 — gui metadata types enumeration
      • stream/ — stream related metadata structures
        • simple_gui_metadata_stream_preprocess.f90 — gui metadata stream preprocess structure
    • math/ — home of mathematical and statistical utility routines
      • simple_decay_funs.f90 — decay functions for annealing
      • simple_histogram.f90 — abstract data type for histogram generation
      • simple_linalg.f90 — linear algebra stuff
      • simple_math.f90 — various mathematical subroutines and functions
      • simple_math_ctf.f90 — CTF-related math routines
      • simple_math_ft.f90 — Fourier transform-related math routines
      • simple_neighs.f90 — pixel neighborhood definitions and generation
      • simple_online_var.f90 — online moments estimation
      • simple_qr_solve.f90 — SOURCE https://people.sc.fsu.edu/~jburkardt/f_src/qr_solve/qr_solve.html
      • simple_r8lib.f90 — cholesky decompositions and solvers
      • simple_ran_tabu.f90 — routines for generation of directed random numbers
      • simple_rnd.f90 — random number generation module
      • simple_srch_sort_loc.f90 — searching ordered tables, sorting, locate etc.
      • simple_stat.f90 — statistics utility functions
      • simple_testfuns.f90 — provides 20 mathematical test functions for evaluating unconstrained optimization procedures
    • qsys/ — utilities for controlling queue systems in distributed computing environments
      • simple_qsys_base.f90 — batch-processing manager - abstract interface
      • simple_qsys_ctrl.f90 — batch-processing manager - control module
      • simple_qsys_env.f90 — batch-processing manager - environment module
      • simple_qsys_factory.f90 — batch-processing manager - Factory class
      • simple_qsys_funs.f90 — batch-processing manager - functions
      • simple_qsys_local.f90 — batch-processing manager - Local system
      • simple_qsys_lsf.f90 — batch-processing manager - LSF
      • simple_qsys_pbs.f90 — batch-processing manager - PBS
      • simple_qsys_sge.f90 — batch-processing manager - SunGrid Engine
      • simple_qsys_slurm.f90 — batch-processing manager - SLURM
    • structs/ — implementation of various standard and non-standard data structures
      • simple_binary_tree.f90 — simple binary tree structure for hierarchical clustering results
      • simple_binary_tree_tester.f90 — unit test routines for refactored simple_binary_tree class (no subsets; node-only getters)
      • simple_chash.f90 — Character hash
      • simple_chash_tester.f90 — unit test routines for chash class
      • simple_hash.f90 — real hash data structure
      • simple_hash_tester.f90 — unit test routines for hash class
      • simple_linked_list.f90 — polymorphic linked list class
      • simple_linked_list_tester.f90 — unit test routines for linked list class
      • simple_multi_dendro.f90 — simple multi-dendrogram structure to hold multiple hierarchical clusterings
      • simple_multi_dendro_tester.f90 — unit test routines for simple_multi_dendro class (matches current minimal API)
      • simple_rec_list.f90 — polymorphic linked list implementation for derived types (specified in the class header)
      • simple_rec_list_tester.f90 — unit test routines for class rec_list
      • simple_vrefhash.f90 — string-key, polymorphic reference hash (stores pointers; updates are visible)
      • simple_vrefhash_tester.f90 — unit test routines for vrefhash (string->polymorphic reference hash)