Hello I have a question about the restack job type.
I might be misunderstanding its use though. I have a large stack of particles ( about 400k) which through classification I have narrowed down to about 160k good particles. In order to save space on the cache I would like to make a stack with just the 160k good particles and I thought this was the purpose of the restack job. Is it correct?
When I run this job I get this error/warning that marks the job as failed:
Traceback (most recent call last):
File "/home/cryosparcuser/cryosparc/cryosparc_master/cryosparc_compute/jobs/runcommon.py", line 2061, in run_with_except_hook
File "/home/cryosparcuser/cryosparc/cryosparc_master/cryosparc_command/commandcommon.py", line 78, in run
File "/home/cryosparcuser/cryosparc/cryosparc_master/cryosparc_command/command_core/__init__.py", line 6991, in set_job_passthrough_check_outputs_and_completed_run
File "/home/cryosparcuser/cryosparc/cryosparc_master/cryosparc_compute/jobs/runcommon.py", line 1032, in check_outputs
assert output_len == target_len, "Result %s had the wrong length (%d, should be %d). Note that outputs are still usable." % (resname, output_len, target_len)
AssertionError: Result alignments3D had the wrong length (162465, should be 402893). Note that outputs are still usable.
For me the results Result alignments3D should have the length of 162465 (= the number of good particles) and not 402893 (the orginal stack size). Am I misunderstanding how this job works?
Hi @frozenfas. Please can you share
- a tree view of the workspace that includes the Restack Particles job and its ancestors
- an expanded view of the Restack Particles job’s Inputs section (and clarify any low-level overrides that you may have applied)
Sorry I did not write early yesterday but I solved the problem just before I went home. It is what you suspected I think. I was trying to restack the dataset but at the same time switch to projections with a smaller pixel size by swapping the blob. If I simiply run the restacking job without overriding the blob it runs and completes as expected. Does this explain the issue or should I send the info you requested?
Thanks for the update.
That is not needed at the moment if the issue is resolved for you.
Thanks for following up with us. The reason the job didn’t work when the low-level
blob input slot was overridden is because when the job finished, and it was creating the outputs, it tried to intersect the (~160k)
alignments3D and (~400k)
blob outputs while asserting that there has to be a corresponding
alignments3D result for every
blob result (since
blob was directly outputted, and
alignments3D was a “passthrough” (which is a CryoSPARC term for, “passing through this job so it’s available for other jobs downstream”)). This is the expected behaviour.
To fix this, you can take the two particle sets, use a “Particle Sets Tool” job to “intersect” them (so your final output has 160k particles with the
alignments3D at the smaller pixel size and the
blob from the original particle stack), and then connect that output group to a “Restack Particles” job.