Hi @parrot and others,
Here is a small script that @rposert devised as a work-around to this issue that you may find helpful. You will need to run this in a terminal using cryosparc-tools.
Steps:
- Reimport movies with
Skip header check
disabled if that was not initially done. This will output a set of ‘failed_movies’ whose frame count does not match the majority of the movies imported. - Next, run the attached script, replacing the appropriate instance information, project number, workspace number, and job numbers (job_1 = new import movies, job_2 = patch CTF estimation with all movies). This will create a new external job in the appropriate workspace with a set of exposures containing only the number of expected frames.
- Create a
Manually curate exposures
job with the exposures output from theExternal Results
job, and the particles stack you would like to perform RBMC on. Set the parameterNumber of picked particles
to `1,10000’. This will create an output of exposures where there is at least 1 particle present on the micrographs with the same number of frames. - Connect the Exposures and Particles outputs from the
Manually curate exposures
job to theRBMC
job and the volume associated with those particles.
This should alleviate the error with an inconsistent # of frames.
Script:
from cryosparc.tools import CryoSPARC
cs = CryoSPARC(
license="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
host="localhost",
base_port=39000,
email="ali@example.com",
password="password123"
)
project_number = "P317"
workspace_number = "W15"
job_1_number = "J1179"
job_2_number = "J1079"
project = cs.find_project(project_number)
# Movies with bad number of frames
imported_movies_job = project.find_job(job_1_number)
failed_movies = imported_movies_job.load_output("failed_movies")
# All exposures from patch CTF estimation
patch_ctf_job = project.find_job(job_2_number)
patch_ctf_exposures = patch_ctf_job.load_output("exposures")
good_exposures = patch_ctf_exposures.query(lambda row: row['movie_blob/import_sig'] not in failed_movies['movie_blob/import_sig'])
cs.save_external_result(
project_number,
workspace_number,
good_exposures,
type="exposure",
name="desired_number_frame_exposures",
)