Hi,
I think there is an issue with duplicate rejection during Class2D in v5.
I have a job with an input stack of 95k particles, coming from blob picker (200-400Å) with default minimum separation parameters.
Class2D in previous versions rejected zero particles; the same job, cloned and run in v5.02, is rejecting 25k particles (according to the log because they fail to meet the minimum separation criterion of 20 Å). I am almost certain that there are no true duplicates being identified here..
Best,
Oli
EDIT:
Partial metadata for the job with duplicate rejections, in case it is useful.
{
"id": "6991a0fa6970b118db092153",
"children": [],
"completed_at": "2026-02-15T11:24:00.504Z",
"created_at": "2026-02-15T10:33:30.000Z",
"created_by_job_uid": "J12",
"created_by_user_id": "67638623f30c28a0a6ed322a",
"deleted": false,
"failed_at": null,
"interactive": false,
"job_type": "class_2D_new",
"killed_at": null,
"launched_at": "2026-02-15T10:33:35.813Z",
"output_group_images": {
"class_averages": "6991accda5944cd35ea12f6d",
"particles": "6991a11ba5944cd35ea12028"
},
"output_result_groups": [
{
"uid": "J321-G0",
"type": "particle",
"name": "particles",
"title": "Particles",
"description": "Particles that were successfully processed, including alignments across all classes.",
"contains": [
{
"uid": "J321-R0",
"name": "blob",
"type": "particle.blob",
"group_name": "particles",
"passthrough": false
},
{
"uid": "J321-R1",
"name": "ctf",
"type": "particle.ctf",
"group_name": "particles",
"passthrough": false
},
{
"uid": "J321-R2",
"name": "alignments2D",
"type": "particle.alignments2D",
"group_name": "particles",
"passthrough": false
},
{
"uid": "J321-R3",
"name": "pick_stats",
"type": "particle.pick_stats",
"group_name": "particles",
"passthrough": true
},
{
"uid": "J321-R4",
"name": "location",
"type": "particle.location",
"group_name": "particles",
"passthrough": true
}
],
"passthrough": "particles",
"num_items": 71275,
"summary": {
"alignments2D/psize_A": 1.5975000858306885,
"blob/psize_A": 1.5975000858306885,
"blob/shape": [400, 400],
"blob/sign": -1,
"ctf/accel_kv": 300,
"ctf/amp_contrast": 0.10000000149011612,
"ctf/anisomag": [0, 0, 0, 0],
"ctf/bfactor": 0,
"ctf/cs_mm": 0.0010000000474974513,
"ctf/phase_shift_rad": 0,
"ctf/scale": 1,
"ctf/shift_A": [0, 0],
"ctf/tetra_A": [0, 0, 0, 0],
"ctf/tilt_A": [0, 0],
"ctf/trefoil_A": [0, 0],
"ctf/type": "spline",
"location/micrograph_psize_A": 1.065000057220459,
"location/micrograph_shape": [4092, 5760]
},
"latest_summary_stats": {
"mean_class_ESS": 2.4064605236053467,
"version": 89
}
},
{
"uid": "J321-G1",
"type": "particle",
"name": "particles_rejected",
"title": "Rejected particles",
"description": "Particles rejected based on a set minimum separation distance",
"contains": [
{
"uid": "J321-R5",
"name": "blob",
"type": "particle.blob",
"group_name": "particles_rejected",
"passthrough": false
},
{
"uid": "J321-R6",
"name": "ctf",
"type": "particle.ctf",
"group_name": "particles_rejected",
"passthrough": false
},
{
"uid": "J321-R7",
"name": "alignments2D",
"type": "particle.alignments2D",
"group_name": "particles_rejected",
"passthrough": false
},
{
"uid": "J321-R8",
"name": "pick_stats",
"type": "particle.pick_stats",
"group_name": "particles_rejected",
"passthrough": true
},
{
"uid": "J321-R9",
"name": "location",
"type": "particle.location",
"group_name": "particles_rejected",
"passthrough": true
}
],
"passthrough": "particles",
"num_items": 23419,
"summary": {
"alignments2D/psize_A": 1.5975000858306885,
"blob/psize_A": 1.5975000858306885,
"blob/shape": [400, 400],
"blob/sign": -1,
"ctf/accel_kv": 300,
"ctf/amp_contrast": 0.10000000149011612,
"ctf/anisomag": [0, 0, 0, 0],
"ctf/bfactor": 0,
"ctf/cs_mm": 0.0010000000474974513,
"ctf/phase_shift_rad": 0,
"ctf/scale": 1,
"ctf/shift_A": [0, 0],
"ctf/tetra_A": [0, 0, 0, 0],
"ctf/tilt_A": [0, 0],
"ctf/trefoil_A": [0, 0],
"ctf/type": "spline",
"location/micrograph_psize_A": 1.065000057220459,
"location/micrograph_shape": [4092, 5760]
}
},
{
"uid": "J321-G2",
"type": "template",
"name": "class_averages",
"title": "2D class averages",
"description": "2D class average templates",
"contains": [
{
"uid": "J321-R10",
"name": "blob",
"type": "template.blob",
"group_name": "class_averages",
"passthrough": false
}
],
"passthrough": false,
"num_items": 100,
"summary": {
"blob/psize_A": 2.496093988418579,
"blob/res_A": 25.78557777404785,
"blob/shape": [256, 256]
}
}
],
"params_spec": {
"class2D_K": {"value": 100},
"class2D_sigma_init_factor": {"value": 1},
"class2D_num_full_iter": {"value": 10},
"class2D_num_full_iter_batch": {"value": 80},
"random_seed_default": {"value": 396013774}
},
"parents": ["J10"],
"project_uid": "P20",
"project_uid_num": 20,
"queued_at": "2026-02-15T10:33:34.116Z",
"queued_to_lane": "default",
"resources_allocated": {
"lane": "default",
"lane_type": "node",
"hostname": "ANES002074D",
"slots": {"CPU": [0, 1, 2, 3], "GPU": [1], "RAM": [1, 2, 3]},
"fixed": {"SSD": true},
"licenses_acquired": 1,
"target": {
"cache_path": "/scratch/cryosparc_cache",
"cache_reserve_mb": 10000,
"cache_quota_mb": null,
"lane": "default",
"name": "ANES002074D",
"title": "Worker ANES002074D",
"desc": null,
"hostname": "ANES002074D",
"worker_bin_path": "/home/user/software/cryosparc/cryosparc_worker/bin/cryosparcw",
"type": "node",
"ssh_str": "user@ANES002074D",
"resource_slots": {
"CPU": [
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63
],
"GPU": [0, 1, 2, 3],
"RAM": [
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
62,
63
]
},
"resource_fixed": {"SSD": true},
"monitor_port": null,
"gpus": [
{"id": 0, "name": "NVIDIA RTX 6000 Ada Generation", "mem": 51527024640},
{"id": 1, "name": "NVIDIA RTX 6000 Ada Generation", "mem": 51527024640},
{"id": 2, "name": "NVIDIA RTX 6000 Ada Generation", "mem": 51527024640},
{"id": 3, "name": "NVIDIA RTX 6000 Ada Generation", "mem": 51527024640}
]
}
},
"running_at": "2026-02-15T10:33:40.289Z",
"starred_by": [],
"started_at": "2026-02-15T10:33:36.969Z",
"status": "completed",
"status_num": 35,
"tags": [],
"title": "",
"ui_tile_images": [
{
"name": "classes",
"fileid": "6991accda5944cd35ea12f6b",
"num_rows": 1,
"num_cols": 3
}
],
"ui_tile_width": 3,
"uid": "J321",
"uid_num": 321,
"workspace_uids": ["W1"],
"updated_at": "2026-02-15T17:06:02.798Z",
"dumped_at": "2026-02-15T11:24:08.983Z",
"last_dumped_version": "v5.0.2",
"autodump": false,
"spec": {
"type": "class_2D_new",
"params": {
"prepare_window_dataset": true,
"prepare_window_inner_radius": 0.85,
"prepare_window_outer_radius": 0.99,
"class2D_K": 100,
"class2D_max_res": 6,
"class2D_max_res_align": null,
"class2D_sigma_init_factor": 1,
"class2D_window": true,
"class2D_window_inner_A": null,
"class2D_window_outer_A": null,
"class2D_recenter": true,
"class2D_recenter_thresh": 0.2,
"class2D_recenter_binary": false,
"class2D_estimate_in_plane_pose": false,
"class2D_output_filaments": false,
"class2D_remove_duplicate_particles": true,
"class2D_min_dist_A": 20,
"class2D_mic_psize_A": null,
"class2D_clamp": false,
"class2D_do_ctf": true,
"class2D_min_res_align": null,
"class2D_sort_classes_by_size": true,
"class2D_sort_method": "similarity",
"class2D_hard_class_last_iter": false,
"class2D_do_alignment": true,
"class2D_force_max": true,
"class2D_ctf_phase_flip_only": false,
"class2D_random_perturb_rs": null,
"class2D_num_full_iter": 10,
"class2D_num_full_iter_batch": 80,
"class2D_num_full_iter_batchsize_per_class": 100,
"class2D_init_scale": 1,
"class2D_zp_factor": 2,
"class2D_ignore_dc": true,
"class2D_min_over_scale": false,
"class2D_nonneg": false,
"class2D_use_frc_reg": true,
"class2D_use_frc_reg_full": true,
"class2D_sigma_init_iter": 2,
"class2D_sigma_num_anneal_iters": 15,
"class2D_sigma_use_white": false,
"intermediate_plots": true,
"class2D_scale_bars": true,
"random_seed": 396013774,
"random_seed_default": 396013774,
"compute_use_ssd": true,
"compute_num_gpus": 1,
"generate_intermediate_results": false
},
"inputs": {
"particles": {
"type": "particle",
"title": "Particle stacks",
"description": "Particle stacks to use. Multiple stacks will be concatenated.",
"slots": [
{"name": "blob", "dtype": "blob", "required": true},
{"name": "ctf", "dtype": "ctf", "required": false},
{"name": "filament", "dtype": "filament", "required": false},
{"name": "pick_stats", "dtype": "pick_stats", "required": false},
{"name": "location", "dtype": "location", "required": false},
{"name": "alignments3D", "dtype": "alignments3D", "required": false}
],
"count_min": 1,
"count_max": "inf",
"repeat_allowed": false,
"connections": [
{
"job_uid": "J10",
"output": "particles",
"results": [
{
"name": "blob",
"dtype": "blob",
"job_uid": "J10",
"output": "particles",
"result": "blob",
"version": "F"
},
{
"name": "ctf",
"dtype": "ctf",
"job_uid": "J10",
"output": "particles",
"result": "ctf",
"version": "F"
},
{
"name": "pick_stats",
"dtype": "pick_stats",
"job_uid": "J10",
"output": "particles",
"result": "pick_stats",
"version": "F"
},
{
"name": "location",
"dtype": "location",
"job_uid": "J10",
"output": "particles",
"result": "location",
"version": "F"
}
]
}
]
}
},
"outputs": {
"particles": {
"type": "particle",
"title": "Particles",
"description": "Particles that were successfully processed, including alignments across all classes.",
"slots": [
{"name": "blob", "dtype": "blob"},
{"name": "ctf", "dtype": "ctf"},
{"name": "alignments2D", "dtype": "alignments2D"}
],
"passthrough": "particles",
"results": [
{
"name": "blob",
"dtype": "blob",
"versions": [89],
"metafiles": ["J321/J321_089_particles.cs"],
"num_items": [71275],
"passthrough": false
},
{
"name": "ctf",
"dtype": "ctf",
"versions": [89],
"metafiles": ["J321/J321_089_particles.cs"],
"num_items": [71275],
"passthrough": false
},
{
"name": "alignments2D",
"dtype": "alignments2D",
"versions": [89],
"metafiles": ["J321/J321_089_particles.cs"],
"num_items": [71275],
"passthrough": false
},
{
"name": "pick_stats",
"dtype": "pick_stats",
"versions": [0],
"metafiles": ["J321/J321_passthrough_particles.cs"],
"num_items": [71275],
"passthrough": true
},
{
"name": "location",
"dtype": "location",
"versions": [0],
"metafiles": ["J321/J321_passthrough_particles.cs"],
"num_items": [71275],
"passthrough": true
}
],
"num_items": 71275,
"image": "6991a11ba5944cd35ea12028",
"summary": {
"alignments2D/psize_A": 1.5975000858306885,
"blob/psize_A": 1.5975000858306885,
"blob/shape": [400, 400],
"blob/sign": -1,
"ctf/accel_kv": 300,
"ctf/amp_contrast": 0.10000000149011612,
"ctf/anisomag": [0, 0, 0, 0],
"ctf/bfactor": 0,
"ctf/cs_mm": 0.0010000000474974513,
"ctf/phase_shift_rad": 0,
"ctf/scale": 1,
"ctf/shift_A": [0, 0],
"ctf/tetra_A": [0, 0, 0, 0],
"ctf/tilt_A": [0, 0],
"ctf/trefoil_A": [0, 0],
"ctf/type": "spline",
"location/micrograph_psize_A": 1.065000057220459,
"location/micrograph_shape": [4092, 5760]
},
"latest_summary_stats": {
"mean_class_ESS": 2.4064605236053467,
"version": 89
}
},
"particles_rejected": {
"type": "particle",
"title": "Rejected particles",
"description": "Particles rejected based on a set minimum separation distance",
"slots": [
{"name": "blob", "dtype": "blob"},
{"name": "ctf", "dtype": "ctf"},
{"name": "alignments2D", "dtype": "alignments2D"}
],
"passthrough": "particles",
"results": [
{
"name": "blob",
"dtype": "blob",
"versions": [89],
"metafiles": ["J321/J321_particles_rejected.cs"],
"num_items": [23419],
"passthrough": false
},
{
"name": "ctf",
"dtype": "ctf",
"versions": [89],
"metafiles": ["J321/J321_particles_rejected.cs"],
"num_items": [23419],
"passthrough": false
},
{
"name": "alignments2D",
"dtype": "alignments2D",
"versions": [89],
"metafiles": ["J321/J321_particles_rejected.cs"],
"num_items": [23419],
"passthrough": false
},
{
"name": "pick_stats",
"dtype": "pick_stats",
"versions": [0],
"metafiles": ["J321/J321_passthrough_particles_rejected.cs"],
"num_items": [23419],
"passthrough": true
},
{
"name": "location",
"dtype": "location",
"versions": [0],
"metafiles": ["J321/J321_passthrough_particles_rejected.cs"],
"num_items": [23419],
"passthrough": true
}
],
"num_items": 23419,
"image": null,
"summary": {
"alignments2D/psize_A": 1.5975000858306885,
"blob/psize_A": 1.5975000858306885,
"blob/shape": [400, 400],
"blob/sign": -1,
"ctf/accel_kv": 300,
"ctf/amp_contrast": 0.10000000149011612,
"ctf/anisomag": [0, 0, 0, 0],
"ctf/bfactor": 0,
"ctf/cs_mm": 0.0010000000474974513,
"ctf/phase_shift_rad": 0,
"ctf/scale": 1,
"ctf/shift_A": [0, 0],
"ctf/tetra_A": [0, 0, 0, 0],
"ctf/tilt_A": [0, 0],
"ctf/trefoil_A": [0, 0],
"ctf/type": "spline",
"location/micrograph_psize_A": 1.065000057220459,
"location/micrograph_shape": [4092, 5760]
},
"latest_summary_stats": {}
},
"class_averages": {
"type": "template",
"title": "2D class averages",
"description": "2D class average templates",
"slots": [{"name": "blob", "dtype": "blob"}],
"passthrough": null,
"results": [
{
"name": "blob",
"dtype": "blob",
"versions": [89],
"metafiles": ["J321/J321_089_class_averages.cs"],
"num_items": [100],
"passthrough": false
}
],
"num_items": 100,
"image": "6991accda5944cd35ea12f6d",
"summary": {
"blob/psize_A": 2.496093988418579,
"blob/res_A": 25.78557777404785,
"blob/shape": [256, 256]
},
"latest_summary_stats": {}
}
},
"ui_tile_width": 3,
"ui_tile_height": 1,
"resource_spec": {"cpu": 4, "gpu": 1, "ram": 3, "ssd": true}
},
"job_dir": "J321",
"job_dir_size": 532235436,
"job_dir_size_last_updated": "2026-02-15T11:23:59.453Z",
"run_as_user": null,
"description": "",
"cloned_from": "J12",
"waiting_at": null,
"heartbeat_at": "2026-02-15T11:23:58.932Z",
"tokens_acquired_at": "2026-02-15T10:33:35.808Z",
"tokens_requested_at": null,
"last_scheduled_at": "2026-02-15T10:33:34.586Z",
"last_accessed": {
"name": "clarkelab",
"accessed_at": "2026-02-15T17:06:02.798Z"
},
"has_error": false,
"has_warning": false,
"version_created": "v5.0.2",
"version": "v5.0.2",
"priority": 0,
"deleting": false,
"queued_by_user_id": "67638623f30c28a0a6ed322a",
"queued_to_hostname": null,
"queued_to_gpu": null,
"queue_status": null,
"queue_message": null,
"queued_job_hash": null,
"num_tokens": 1,
"errors_run": [],
"interactive_port": null,
"PID_monitor": 3123981,
"PID_main": 3123970,
"PID_workers": [],
"cluster_job_id": null,
"cluster_job_status": null,
"cluster_job_status_code": null,
"cluster_job_monitor_event_id": null,
"cluster_job_monitor_retries": 0,
"cluster_job_monitor_last_run_at": null,
"cluster_job_submission_script": null,
"cluster_job_custom_vars": {},
"is_experiment": false,
"enable_bench": false,
"bench": {},
"bench_timings": {},
"completed_count": 1,
"instance_information": {
"CUDA_version": "12.8",
"available_memory": "481.84GB",
"cpu_model": "AMD Ryzen Threadripper PRO 7975WX 32-Cores",
"driver_version": "12.8",
"gpu_info": [
{
"id": 1,
"name": "NVIDIA RTX 6000 Ada Generation",
"mem": 51527024640,
"bus_id": "0000:02:00",
"compute_mode": "Default",
"persistence_mode": "Enabled",
"power_limit": 300,
"sw_power_limit": "Not Active",
"hw_power_limit": "Not Active",
"max_pcie_link_gen": 4,
"current_pcie_link_gen": 1,
"temperature": 37,
"gpu_utilization": 0,
"memory_utilization": 0,
"driver_version": "570.172.08"
}
],
"max_cpu_freq": 5352,
"nvrtc_version": "12.8",
"ofd_hard_limit": 1048576,
"ofd_soft_limit": 1024,
"physical_cores": 32,
"platform_architecture": "x86_64",
"platform_node": "ANES002074D",
"platform_release": "6.8.0-59-generic",
"platform_version": "#61-Ubuntu SMP PREEMPT_DYNAMIC Fri Apr 11 23:16:11 UTC 2025",
"toolkit_version": "12.8",
"total_memory": "503.19GB",
"used_memory": "17.31GB",
"version": "v5.0.2"
},
"last_intermediate_data_cleared_at": null,
"last_intermediate_data_cleared_amount": 0,
"intermediate_results_size_bytes": 0,
"intermediate_results_size_last_updated": "2026-02-15T11:23:59.453Z",
"is_final_result": false,
"is_ancestor_of_final_result": false,
"no_check_inputs_ready": false,
"progress": [