@@ -35,19 +35,20 @@ using SMLMSim
3535
3636# Define a camera and simulation parameters
3737camera = IdealCamera(128 , 128 , 0.1 ) # 128×128 pixels, 100nm pixels
38- params = StaticSMLMParams (density= 1.0 , σ_psf= 0.13 ) # Density 1/μm², PSF 130nm
38+ params = StaticSMLMConfig (density= 1.0 , σ_psf= 0.13 ) # Density 1/μm², PSF 130nm
3939
4040# Run simulation for an 8-molecule ring pattern
41- smld_true, smld_model, smld_noisy = simulate(
41+ smld_noisy, info = simulate(
4242 params; # Use semicolon to separate positional and keyword arguments
4343 pattern= Nmer2D(n= 8 , d= 0.1 ), # 100nm diameter ring
4444 camera= camera
4545)
4646
4747# smld_noisy contains realistic SMLM coordinates
48+ # info.smld_true and info.smld_model contain intermediate results
4849println(" Generated $(length(smld_noisy. emitters)) localizations." )
4950```
50- * Output:* ` smld_true ` (ground truth ), ` smld_model ` (kinetics) , ` smld_noisy ` (kinetics + noise ).
51+ * Output:* ` smld_noisy ` (kinetics + noise ), ` info ` (SimInfo with ` smld_true ` , ` smld_model ` , timing ).
5152
5253### Diffusion & Interaction Simulation
5354
@@ -57,7 +58,7 @@ Simulate molecules diffusing and interacting (e.g., dimerization).
5758using SMLMSim
5859
5960# Set diffusion simulation parameters
60- params = DiffusionSMLMParams (
61+ params = DiffusionSMLMConfig (
6162 density = 0.5 , # molecules per μm²
6263 box_size = 10.0 , # μm
6364 diff_monomer = 0.1 , # μm²/s
@@ -69,7 +70,7 @@ params = DiffusionSMLMParams(
6970)
7071
7172# Run diffusion simulation
72- smld = simulate(params) # Returns a BasicSMLD object with all emitters
73+ smld, info = simulate(params) # Returns ( BasicSMLD, SimInfo)
7374
7475println(" Simulated diffusion for $(params. t_max) seconds." )
7576# 'smld' can be used for analysis or image generation
@@ -108,15 +109,15 @@ Create camera images from simulation results.
108109using MicroscopePSFs # Needed for PSF types
109110
110111# Generate images from diffusion simulation output
111- # Note: Frame timing is controlled by DiffusionSMLMParams (camera_framerate, camera_exposure)
112+ # Note: Frame timing is controlled by DiffusionSMLMConfig (camera_framerate, camera_exposure)
112113# Multiple simulation timesteps are automatically integrated during simulate()
113114psf = GaussianPSF(0.15 ) # 150nm PSF width
114- images = gen_images(smld, psf;
115+ images, img_info = gen_images(smld, psf;
115116 support= 1.0 , # PSF support radius in μm (faster than default Inf)
116117 poisson_noise= true # Add shot noise
117118)
118119
119- println(" Generated $(size(images, 3 ) ) camera images." )
120+ println(" Generated $(img_info . frames_generated ) camera images." )
120121```
121122
122123### sCMOS Camera with Realistic Noise
@@ -131,8 +132,8 @@ using MicroscopePSFs
131132camera_scmos = SCMOSCamera(128 , 128 , 0.1 , 1.6 )
132133
133134# Run static simulation with sCMOS camera
134- params = StaticSMLMParams (density= 1.0 , σ_psf= 0.13 )
135- smld_true, smld_model, smld_noisy = simulate(
135+ params = StaticSMLMConfig (density= 1.0 , σ_psf= 0.13 )
136+ smld_noisy, info = simulate(
136137 params,
137138 pattern= Nmer2D(n= 8 , d= 0.1 ),
138139 camera= camera_scmos
@@ -141,11 +142,11 @@ smld_true, smld_model, smld_noisy = simulate(
141142# Generate images with full sCMOS noise model
142143# (quantum efficiency, Poisson, read noise, gain, offset)
143144psf = GaussianPSF(0.15 )
144- images_scmos = gen_images(smld_noisy, psf, bg= 10.0 , camera_noise= true )
145+ images_scmos, img_info = gen_images(smld_noisy, psf, bg= 10.0 , camera_noise= true )
145146
146147# For diffusion simulations
147- diff_params = DiffusionSMLMParams (density= 0.5 , box_size= 10.0 )
148- smld_diff = simulate(diff_params; camera= camera_scmos, override_count= 10 )
148+ diff_params = DiffusionSMLMConfig (density= 0.5 , box_size= 10.0 )
149+ smld_diff, diff_info = simulate(diff_params; camera= camera_scmos, override_count= 10 )
149150```
150151
151152The sCMOS noise model applies:
@@ -164,8 +165,8 @@ using MicroscopePSFs
164165
165166# --- Simulation Setup ---
166167camera = IdealCamera(128 , 128 , 0.1 ) # 128×128 pixels, 100nm pixels
167- params = StaticSMLMParams (density= 1.0 , σ_psf= 0.13 )
168- smld_true, smld_model, smld_noisy = simulate(
168+ params = StaticSMLMConfig (density= 1.0 , σ_psf= 0.13 )
169+ smld_noisy, info = simulate(
169170 params,
170171 pattern= Nmer2D(n= 6 , d= 0.2 ), # Hexamer
171172 camera= camera
@@ -202,24 +203,24 @@ using Statistics
202203camera_scmos = SCMOSCamera(64 , 64 , 0.1 , 1.6 ) # 64×64 pixels, 100nm/px, 1.6 e⁻ read noise
203204
204205# Run diffusion simulation
205- params = DiffusionSMLMParams (
206+ params = DiffusionSMLMConfig (
206207 density = 1.0 , # 1 molecule/μm²
207208 box_size = 6.4 , # 6.4×6.4 μm field
208209 diff_monomer = 0.1 , # 0.1 μm²/s diffusion
209210 t_max = 0.5 , # 0.5 second total
210211 camera_framerate = 100.0 # 100 fps
211212)
212- smld = simulate(params; camera= camera_scmos, photons= 200.0 )
213+ smld, info = simulate(params; camera= camera_scmos, photons= 200.0 )
213214
214215# Generate images with full sCMOS noise model
215216# (quantum efficiency, Poisson, read noise, gain, offset)
216217psf = GaussianPSF(0.13 ) # 130nm PSF
217- images_scmos = gen_images(smld, psf, bg= 10.0 , camera_noise= true )
218+ images_scmos, _ = gen_images(smld, psf, bg= 10.0 , camera_noise= true )
218219
219220# For comparison: same data with ideal camera (Poisson noise only)
220221camera_ideal = IdealCamera(64 , 64 , 0.1 )
221222smld_ideal = BasicSMLD(smld. emitters, camera_ideal, smld. n_frames, smld. n_datasets)
222- images_ideal = gen_images(smld_ideal, psf, bg= 10.0 , poisson_noise= true )
223+ images_ideal, _ = gen_images(smld_ideal, psf, bg= 10.0 , poisson_noise= true )
223224
224225# Compare statistics
225226println(" sCMOS: mean=$(round(mean(images_scmos), digits= 1 )) ADU, std=$(round(std(images_scmos), digits= 1 )) " )
0 commit comments