scipion-em-xmipp 26.0.2__tar.gz → 26.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (268) hide show
  1. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/CHANGELOG.md +16 -0
  2. {scipion_em_xmipp-26.0.2/scipion_em_xmipp.egg-info → scipion_em_xmipp-26.2.0}/PKG-INFO +2 -2
  3. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/requirements.txt +1 -1
  4. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0/scipion_em_xmipp.egg-info}/PKG-INFO +2 -2
  5. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/scipion_em_xmipp.egg-info/SOURCES.txt +2 -2
  6. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/scipion_em_xmipp.egg-info/requires.txt +1 -1
  7. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/__init__.py +9 -10
  8. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/constants.py +1 -0
  9. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/protocols/protocol_extract_particles_movies.py +1 -1
  10. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/__init__.py +0 -2
  11. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_compute_likelihood.py +2 -2
  12. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_deep_micrograph_screen.py +149 -1
  13. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_extract_particles.py +2 -2
  14. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_extract_particles_pairs.py +1 -1
  15. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_preprocess/protocol_preprocess.py +6 -6
  16. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols.conf +0 -2
  17. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/version.py +2 -2
  18. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_deep_micrograph_cleaner.py +78 -5
  19. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/LICENSE +0 -0
  20. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/MANIFEST.in +0 -0
  21. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/README.md +0 -0
  22. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/pyproject.toml +0 -0
  23. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/scipion_em_xmipp.egg-info/dependency_links.txt +0 -0
  24. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/scipion_em_xmipp.egg-info/entry_points.txt +0 -0
  25. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/scipion_em_xmipp.egg-info/top_level.txt +0 -0
  26. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/setup.cfg +0 -0
  27. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/base.py +0 -0
  28. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/bibtex.py +0 -0
  29. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/checkProtocolsConf.py +0 -0
  30. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/convert/__init__.py +0 -0
  31. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/convert/convert.py +0 -0
  32. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/convert/dataimport.py +0 -0
  33. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/convert/io_coordinates.py +0 -0
  34. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/__init__.py +0 -0
  35. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/protocols/__init__.py +0 -0
  36. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/protocols/protocol_angular_resolution_alignment.py +0 -0
  37. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/protocols/protocol_apply_deformation_zernike3d.py +0 -0
  38. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/protocols/protocol_classification_gpuCorr.py +0 -0
  39. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/protocols/protocol_classification_gpuCorr_full.py +0 -0
  40. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/protocols/protocol_classification_gpuCorr_semi.py +0 -0
  41. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/protocols/protocol_classify_kmeans2d.py +0 -0
  42. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/protocols/protocol_deep_align.py +0 -0
  43. {scipion_em_xmipp-26.0.2/xmipp3 → scipion_em_xmipp-26.2.0/xmipp3/legacy}/protocols/protocol_deep_center.py +0 -0
  44. {scipion_em_xmipp-26.0.2/xmipp3 → scipion_em_xmipp-26.2.0/xmipp3/legacy}/protocols/protocol_deep_center_predict.py +0 -0
  45. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/protocols/protocol_deep_denoising.py +0 -0
  46. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/protocols/protocol_enrich.py +0 -0
  47. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/protocols/protocol_kmeans_clustering.py +0 -0
  48. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/protocols/protocol_metaprotocol_create_output.py +0 -0
  49. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/protocols/protocol_metaprotocol_create_subset.py +0 -0
  50. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/protocols/protocol_metaprotocol_discrete_heterogeneity_scheduler.py +0 -0
  51. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/protocols/protocol_metaprotocol_golden_highres.py +0 -0
  52. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/protocols/protocol_mltomo.py +0 -0
  53. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/protocols/protocol_movie_average.py +0 -0
  54. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/protocols/protocol_movie_opticalflow.py +0 -0
  55. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/protocols/protocol_particle_boxsize.py +0 -0
  56. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/protocols/protocol_reconstruct_heterogeneous.py +0 -0
  57. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/protocols/protocol_rotational_spectra.py +0 -0
  58. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/protocols/protocol_screen_deeplearning.py +0 -0
  59. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/protocols/protocol_solid_angles.py +0 -0
  60. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/protocols/protocol_split_volume.py +0 -0
  61. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/protocols/protocol_split_volume_hierarchical_cluster.py +0 -0
  62. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/protocols/protocol_subtract_projection.py +0 -0
  63. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/tests/test_protocol_deep_denoising.py +0 -0
  64. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/tests/test_protocols_angular_resolution_alignment.py +0 -0
  65. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/tests/test_protocols_gpuCorr_classifier.py +0 -0
  66. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/tests/test_protocols_gpuCorr_fullStreaming.py +0 -0
  67. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/tests/test_protocols_gpuCorr_semiStreaming.py +0 -0
  68. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/tests/test_protocols_metaprotocol_golden_highres.py +0 -0
  69. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/tests/test_protocols_metaprotocol_heterogeneity.py +0 -0
  70. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/tests/test_protocols_mixed_movies.py +0 -0
  71. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/tests/test_protocols_solid_angles.py +0 -0
  72. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/tests/test_protocols_subtract_projection.py +0 -0
  73. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/tests/test_protocols_xmipp_movies.py +0 -0
  74. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/viewers/viewer_angular_resolution_alignment.py +0 -0
  75. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/viewers/viewer_deep_align.py +0 -0
  76. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/viewers/viewer_metaprotocol_golden_highres.py +0 -0
  77. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/viewers/viewer_mltomo.py +0 -0
  78. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/viewers/viewer_solid_angles.py +0 -0
  79. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/legacy/viewers/viewer_split_volume.py +0 -0
  80. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/logParser.py +0 -0
  81. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/programs.py +0 -0
  82. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_align_volume.py +0 -0
  83. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_align_volume_and_particles.py +0 -0
  84. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_analyze_local_ctf.py +0 -0
  85. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_angular_graph_consistency.py +0 -0
  86. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_apply_alignment.py +0 -0
  87. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_apply_tilt_to_ctf.py +0 -0
  88. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_apply_transformation_matrix.py +0 -0
  89. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_apply_zernike3d.py +0 -0
  90. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_assignment_tilt_pair.py +0 -0
  91. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_break_symmetry.py +0 -0
  92. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_center_particles.py +0 -0
  93. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_cl2d.py +0 -0
  94. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_cl2d_align.py +0 -0
  95. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_cl2d_clustering.py +0 -0
  96. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_classes_2d_mapping.py +0 -0
  97. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_classify_pca.py +0 -0
  98. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_classify_pca_streaming.py +0 -0
  99. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_compare_angles.py +0 -0
  100. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_compare_reprojections.py +0 -0
  101. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_consensus_classes.py +0 -0
  102. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_consensus_local_ctf.py +0 -0
  103. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_convert_pdb.py +0 -0
  104. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_core_analysis.py +0 -0
  105. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_create_gallery.py +0 -0
  106. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_ctf_consensus.py +0 -0
  107. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_ctf_correct_phase.py +0 -0
  108. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_ctf_correct_wiener2d.py +0 -0
  109. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_ctf_defocus_group.py +0 -0
  110. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_ctf_micrographs.py +0 -0
  111. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_deep_hand.py +0 -0
  112. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_denoise_particles.py +0 -0
  113. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_eliminate_empty_images.py +0 -0
  114. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_extract_asymmetric_unit.py +0 -0
  115. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_flexalign.py +0 -0
  116. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_generate_reprojections.py +0 -0
  117. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_helical_parameters.py +0 -0
  118. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_kerdensom.py +0 -0
  119. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_local_ctf.py +0 -0
  120. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_mics_defocus_balancer.py +0 -0
  121. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_ml2d.py +0 -0
  122. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_movie_alignment_consensus.py +0 -0
  123. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_movie_dose_analysis.py +0 -0
  124. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_movie_gain.py +0 -0
  125. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_movie_max_shift.py +0 -0
  126. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_movie_split_frames.py +0 -0
  127. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_multiple_fscs.py +0 -0
  128. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_multireference_alignability.py +0 -0
  129. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_normalize_strain.py +0 -0
  130. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_particle_pick.py +0 -0
  131. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_particle_pick_automatic.py +0 -0
  132. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_particle_pick_consensus.py +0 -0
  133. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_particle_pick_pairs.py +0 -0
  134. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_particle_pick_remove_duplicates.py +0 -0
  135. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_phantom_create.py +0 -0
  136. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_pick_noise.py +0 -0
  137. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_postProcessing_deepPostProcessing.py +0 -0
  138. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_preprocess/__init__.py +0 -0
  139. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_preprocess/geometrical_mask.py +0 -0
  140. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_preprocess/protocol_add_noise.py +0 -0
  141. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_preprocess/protocol_create_mask2d.py +0 -0
  142. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_preprocess/protocol_create_mask3d.py +0 -0
  143. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_preprocess/protocol_crop_resize.py +0 -0
  144. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_preprocess/protocol_filter.py +0 -0
  145. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_preprocess/protocol_image_operate.py +0 -0
  146. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_preprocess/protocol_mask.py +0 -0
  147. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_preprocess/protocol_movie_resize.py +0 -0
  148. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_preprocess/protocol_process.py +0 -0
  149. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_preprocess_micrographs.py +0 -0
  150. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_projmatch/__init__.py +0 -0
  151. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_projmatch/projmatch_form.py +0 -0
  152. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_projmatch/projmatch_initialize.py +0 -0
  153. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_projmatch/projmatch_steps.py +0 -0
  154. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_projmatch/protocol_projmatch.py +0 -0
  155. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_random_conical_tilt.py +0 -0
  156. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_ransac.py +0 -0
  157. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_reconstruct_fourier.py +0 -0
  158. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_reconstruct_highres.py +0 -0
  159. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_reconstruct_significant.py +0 -0
  160. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_reconstruct_swarm.py +0 -0
  161. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_resolution3d.py +0 -0
  162. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_resolution_bfactor.py +0 -0
  163. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_resolution_deepres.py +0 -0
  164. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_resolution_directional.py +0 -0
  165. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_resolution_fso.py +0 -0
  166. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_resolution_monogenic_signal.py +0 -0
  167. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_rotate_volume.py +0 -0
  168. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_rotational_symmetry.py +0 -0
  169. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_screen_deepConsensus.py +0 -0
  170. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_screen_particles.py +0 -0
  171. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_shift_particles.py +0 -0
  172. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_shift_volume.py +0 -0
  173. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_simulate_ctf.py +0 -0
  174. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_structure_map.py +0 -0
  175. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_structure_map_zernike3d.py +0 -0
  176. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_subtract_projection.py +0 -0
  177. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_tilt_analysis.py +0 -0
  178. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_trigger_data.py +0 -0
  179. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_validate_fscq.py +0 -0
  180. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_validate_nontilt.py +0 -0
  181. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_validate_overfitting.py +0 -0
  182. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_volume_adjust_sub.py +0 -0
  183. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_volume_consensus.py +0 -0
  184. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_volume_deform_zernike3d.py +0 -0
  185. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_volume_local_adjust.py +0 -0
  186. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_volume_local_sharpening.py +0 -0
  187. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_volume_strain.py +0 -0
  188. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_write_testC.py +0 -0
  189. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocols/protocol_write_testP.py +0 -0
  190. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/protocolsCollectInfo.py +0 -0
  191. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/__init__.py +0 -0
  192. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_convert_xmipp.py +0 -0
  193. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocol_angular_graph_consistency.py +0 -0
  194. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocol_apply_transformation_matrix.py +0 -0
  195. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocol_compare_angles.py +0 -0
  196. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocol_consensus_classes3D.py +0 -0
  197. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocol_ctf_consensus.py +0 -0
  198. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocol_extract_asymmetric_unit.py +0 -0
  199. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocol_likelihood.py +0 -0
  200. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocol_monodir.py +0 -0
  201. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocol_multiple_fsc.py +0 -0
  202. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocol_multireference_alignability.py +0 -0
  203. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocol_reconstruct_fourier.py +0 -0
  204. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocol_screen_deepConsensus.py +0 -0
  205. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocol_simulate_ctf.py +0 -0
  206. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocol_split_frames.py +0 -0
  207. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocol_validate_fscq.py +0 -0
  208. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocol_validate_overfitting.py +0 -0
  209. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocols_add_noise.py +0 -0
  210. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocols_continuousflex.py +0 -0
  211. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocols_deepVolPostprocessing.py +0 -0
  212. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocols_deepcenter_predict.py +0 -0
  213. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocols_deepres.py +0 -0
  214. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocols_fso.py +0 -0
  215. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocols_highres.py +0 -0
  216. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocols_local_defocus.py +0 -0
  217. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocols_localdeblur.py +0 -0
  218. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocols_monores.py +0 -0
  219. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocols_realignment_classes.py +0 -0
  220. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocols_xmipp_2d.py +0 -0
  221. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocols_xmipp_3d.py +0 -0
  222. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocols_xmipp_mics.py +0 -0
  223. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocols_xmipp_movie_resize.py +0 -0
  224. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocols_xmipp_movies.py +0 -0
  225. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/tests/test_protocols_zernike3d.py +0 -0
  226. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/utils.py +0 -0
  227. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/__init__.py +0 -0
  228. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/plotter.py +0 -0
  229. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer.py +0 -0
  230. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_LL_matrix.py +0 -0
  231. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_analyze_local_ctf.py +0 -0
  232. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_apply_tilt_to_ctf.py +0 -0
  233. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_cl2d.py +0 -0
  234. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_cl2d_clustering.py +0 -0
  235. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_consensus_classes.py +0 -0
  236. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_ctf_consensus.py +0 -0
  237. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_deepEMHancer.py +0 -0
  238. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_deep_consensus.py +0 -0
  239. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_dose_analysis.py +0 -0
  240. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_eliminate_empty_images.py +0 -0
  241. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_extract_asymmetric_unit.py +0 -0
  242. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_local_sharpening.py +0 -0
  243. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_ml2d.py +0 -0
  244. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_movie_alignment.py +0 -0
  245. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_normalize_strain.py +0 -0
  246. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_pdb_deform_zernike3d.py +0 -0
  247. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_projmatch.py +0 -0
  248. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_ransac.py +0 -0
  249. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_reconstruct_highres.py +0 -0
  250. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_resolution3d.py +0 -0
  251. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_resolution_bfactor.py +0 -0
  252. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_resolution_deepres.py +0 -0
  253. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_resolution_directional.py +0 -0
  254. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_resolution_fso.py +0 -0
  255. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_resolution_monogenic_signal.py +0 -0
  256. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_structure_map.py +0 -0
  257. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_subtract_projection.py +0 -0
  258. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_swarm.py +0 -0
  259. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_validate_fscq.py +0 -0
  260. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_validate_nontilt.py +0 -0
  261. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_validate_overfitting.py +0 -0
  262. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_volume_consensus.py +0 -0
  263. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_volume_deform_zernike3d.py +0 -0
  264. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_volume_strain.py +0 -0
  265. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/viewers/viewer_volume_subtraction.py +0 -0
  266. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/wizards.py +0 -0
  267. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/xmipp_logo.png +0 -0
  268. {scipion_em_xmipp-26.0.2 → scipion_em_xmipp-26.2.0}/xmipp3/xmipp_logo_devel.png +0 -0
@@ -1,3 +1,19 @@
1
+ ## Release 26.2.0
2
+ - More scipion-em-xmipp
3
+ - xmipp3-installer package installed from pypi, reverting previous temporal fix
4
+ - Added new dependencie to solve error with libicu18
5
+
6
+ - Protocols deprecated (For more details visit [this](https://github.com/I2PC/xmipp/wiki/Deprecating-programs-and-protocols](https://i2pc.github.io/docs/Utils/Deprecated-programs/index.html)))
7
+ - DeepCenter
8
+
9
+ ## Release 26.1.0
10
+ - Protocols updated
11
+ - deep_micrograph_cleaner: Showing thumbnails of micrographs with the mask and the coordinates stamps
12
+ - protocol_extract_particles, protocol_preprocess, protocol_compute_likelihood, protocol_extract_particles_pairs: fix typo
13
+
14
+ - More scipion-em-xmipp
15
+ - xmipp3-installer package installed from github release and not from pypi
16
+
1
17
  ## Release 26.0.2
2
18
  - More scipion-em-xmipp
3
19
  - Remove scipion dependencies from requirements
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: scipion-em-xmipp
3
- Version: 26.0.2
3
+ Version: 26.2.0
4
4
  Summary: Plugin to use Xmipp programs within the Scipion framework.
5
5
  Author-email: Oier Lauzirika Zarrabeitia <oierlauzi@bizkaia.eu>, Alberto Garcia Mena <alberto.garcia@cnb.csic.es>, Carlos Oscar Sanchez Sorzano <coss@cnb.csic.es>
6
6
  License: GNU General Public License v3 (GPLv3)
@@ -17,7 +17,7 @@ Requires-Dist: joblib
17
17
  Requires-Dist: peppercorn
18
18
  Requires-Dist: plotter
19
19
  Requires-Dist: PyWavelets
20
- Requires-Dist: xmipp3-installer==2.*
20
+ Requires-Dist: xmipp3-installer<3.0.0,>=2.0.4
21
21
  Requires-Dist: numpy==1.*
22
22
  Dynamic: license-file
23
23
 
@@ -5,5 +5,5 @@ joblib
5
5
  peppercorn
6
6
  plotter
7
7
  PyWavelets
8
- xmipp3-installer==2.*
8
+ xmipp3-installer>=2.0.4,<3.0.0
9
9
  numpy==1.*
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: scipion-em-xmipp
3
- Version: 26.0.2
3
+ Version: 26.2.0
4
4
  Summary: Plugin to use Xmipp programs within the Scipion framework.
5
5
  Author-email: Oier Lauzirika Zarrabeitia <oierlauzi@bizkaia.eu>, Alberto Garcia Mena <alberto.garcia@cnb.csic.es>, Carlos Oscar Sanchez Sorzano <coss@cnb.csic.es>
6
6
  License: GNU General Public License v3 (GPLv3)
@@ -17,7 +17,7 @@ Requires-Dist: joblib
17
17
  Requires-Dist: peppercorn
18
18
  Requires-Dist: plotter
19
19
  Requires-Dist: PyWavelets
20
- Requires-Dist: xmipp3-installer==2.*
20
+ Requires-Dist: xmipp3-installer<3.0.0,>=2.0.4
21
21
  Requires-Dist: numpy==1.*
22
22
  Dynamic: license-file
23
23
 
@@ -37,6 +37,8 @@ xmipp3/legacy/protocols/protocol_classification_gpuCorr_full.py
37
37
  xmipp3/legacy/protocols/protocol_classification_gpuCorr_semi.py
38
38
  xmipp3/legacy/protocols/protocol_classify_kmeans2d.py
39
39
  xmipp3/legacy/protocols/protocol_deep_align.py
40
+ xmipp3/legacy/protocols/protocol_deep_center.py
41
+ xmipp3/legacy/protocols/protocol_deep_center_predict.py
40
42
  xmipp3/legacy/protocols/protocol_deep_denoising.py
41
43
  xmipp3/legacy/protocols/protocol_enrich.py
42
44
  xmipp3/legacy/protocols/protocol_extract_particles_movies.py
@@ -104,8 +106,6 @@ xmipp3/protocols/protocol_ctf_correct_phase.py
104
106
  xmipp3/protocols/protocol_ctf_correct_wiener2d.py
105
107
  xmipp3/protocols/protocol_ctf_defocus_group.py
106
108
  xmipp3/protocols/protocol_ctf_micrographs.py
107
- xmipp3/protocols/protocol_deep_center.py
108
- xmipp3/protocols/protocol_deep_center_predict.py
109
109
  xmipp3/protocols/protocol_deep_hand.py
110
110
  xmipp3/protocols/protocol_deep_micrograph_screen.py
111
111
  xmipp3/protocols/protocol_denoise_particles.py
@@ -5,5 +5,5 @@ joblib
5
5
  peppercorn
6
6
  plotter
7
7
  PyWavelets
8
- xmipp3-installer==2.*
8
+ xmipp3-installer<3.0.0,>=2.0.4
9
9
  numpy==1.*
@@ -35,7 +35,7 @@ import pyworkflow.utils as pwutils
35
35
  from scipion.install.funcs import CondaCommandDef
36
36
  from .base import *
37
37
  from .version import *
38
- from .constants import XMIPP_HOME, XMIPP_URL, XMIPP_DLTK_NAME, XMIPP_CUDA_BIN, XMIPP_CUDA_LIB, XMIPP_GIT_URL
38
+ from .constants import XMIPP_HOME, XMIPP_URL, XMIPP_DLTK_NAME, XMIPP_CUDA_BIN, XMIPP_CUDA_LIB, XMIPP_GIT_URL, XMIPP3_INSTALLER_URL
39
39
 
40
40
 
41
41
  _references = ['delaRosaTrevin2013', 'Sorzano2013', 'Strelak2021']
@@ -47,6 +47,7 @@ type_of_version = version.type_of_version
47
47
  _logo = version._logo
48
48
  _currentDepVersion = version._currentDepVersion
49
49
  __version__ = version.__version__
50
+ _xmipp3_installerV = "v2.0.4"
50
51
 
51
52
 
52
53
  class Plugin(pwem.Plugin):
@@ -126,7 +127,6 @@ class Plugin(pwem.Plugin):
126
127
  env.set('MATLABPATH', os.path.join(os.environ[XMIPP_HOME],
127
128
  'libraries', 'bindings', 'matlab'),
128
129
  pwutils.Environ.BEGIN)
129
-
130
130
  return env
131
131
 
132
132
  @classmethod
@@ -147,7 +147,7 @@ class Plugin(pwem.Plugin):
147
147
  'dist/xmipp.bashrc'
148
148
  ]
149
149
 
150
- # When changing dependencies, increment _currentDepVersion
150
+ # When changing dependencies, increment
151
151
  CONDA_DEPENDENCIES = [
152
152
  "'cmake>=3.18,<4'", #cmake-4 is not compatible with Relion compilation
153
153
  "hdf5>=1.18",
@@ -160,7 +160,8 @@ class Plugin(pwem.Plugin):
160
160
  "libjpeg-turbo",
161
161
  ]
162
162
 
163
- CONDA_LIBSTDCXX_PACKAGE = "libstdcxx-ng"
163
+ CONDA_LIBSTDCXX_PACKAGE = "libstdcxx-ng "
164
+ CONDA_ICU_PACKAGE = 'icu=72'
164
165
 
165
166
  if Config.isCondaInstallation():
166
167
  condaEnvPath = os.environ['CONDA_PREFIX']
@@ -168,7 +169,7 @@ class Plugin(pwem.Plugin):
168
169
 
169
170
  commands = CondaCommandDef(scipionEnv, cls.getCondaActivationCmd())
170
171
  #commands.condaInstall('-c conda-forge --yes ' + ' '.join(CONDA_DEPENDENCIES))
171
- commands.condaInstall('-c conda-forge --yes ' + CONDA_LIBSTDCXX_PACKAGE)
172
+ commands.condaInstall('-c conda-forge --yes ' + CONDA_LIBSTDCXX_PACKAGE + CONDA_ICU_PACKAGE)
172
173
  commands.touch("deps_installed.txt")
173
174
  env.addPackage(
174
175
  'xmippDep', version=_currentDepVersion,
@@ -177,14 +178,12 @@ class Plugin(pwem.Plugin):
177
178
  neededProgs=['conda'],
178
179
  default=True
179
180
  )
180
-
181
181
  if develMode:
182
182
  xmippSrc = 'xmippDev'
183
183
  installCommands = [
184
184
  (f'cd {pwem.Config.EM_ROOT} && rm -rf {xmippSrc} && '
185
185
  f'git clone {XMIPP_GIT_URL} {xmippSrc} && '
186
186
  f'cd {xmippSrc} && '
187
- #f'git checkout {branchTest} && '
188
187
  f'./xmipp ', COMPILE_TARGETS)
189
188
  ]
190
189
 
@@ -200,9 +199,9 @@ class Plugin(pwem.Plugin):
200
199
  xmippSrc = f'xmipp3-{version._binVersion}'
201
200
  installCommands = [
202
201
  (f'cd .. && rm -rf {xmippSrc} && '
203
- f'git clone {XMIPP_GIT_URL} -b {version._binVersion} {xmippSrc} && '
204
- f'cd {xmippSrc} && '
205
- f'./xmipp', COMPILE_TARGETS)
202
+ f'git clone {XMIPP_GIT_URL} -b {version._binVersion} {xmippSrc} && '
203
+ f'cd {xmippSrc} && '
204
+ f'./xmipp', COMPILE_TARGETS)
206
205
  ]
207
206
  env.addPackage(
208
207
  'xmipp3', version=version._binVersion,
@@ -31,6 +31,7 @@ This modules contains constants related to Xmipp3 protocols
31
31
  XMIPP_GIT_URL = 'https://github.com/I2PC/xmipp3.git'
32
32
  XMIPP_URL = 'https://github.com/i2pc/scipion-em-xmipp'
33
33
  XMIPP_HOME = 'XMIPP_HOME'
34
+ XMIPP3_INSTALLER_URL = 'https://github.com/I2PC/xmipp3-installer.git'
34
35
  NMA_HOME = 'NMA_HOME'
35
36
  XMIPP_DLTK_NAME = 'deepLearningToolkit' # consider to change it to xmipp_DLTK to make short it
36
37
  XMIPP_CUDA_BIN = 'XMIPP_CUDA_BIN'
@@ -152,7 +152,7 @@ class XmippProtExtractMovieParticles(ProtExtractMovieParticles):
152
152
  help='Pixels outside this circle are assumed to be '
153
153
  'noise and their stddev is set to 1. Radius for '
154
154
  'background circle definition (in pix.). If this '
155
- 'value is 0, then half the box size is used.',
155
+ 'value is less than or equal to 0, then half the box size is used.',
156
156
  expertLevel=LEVEL_ADVANCED)
157
157
 
158
158
  form.addParallelSection(threads=3, mpi=1)
@@ -133,6 +133,4 @@ from .protocol_volume_consensus import XmippProtVolConsensus
133
133
  from .protocol_volume_local_adjust import XmippProtLocalVolAdj
134
134
  from .protocol_classes_2d_mapping import XmippProtCL2DMap
135
135
  from .protocol_deep_hand import XmippProtDeepHand
136
- from .protocol_deep_center import XmippProtDeepCenter
137
136
  from .protocol_compute_likelihood import XmippProtComputeLikelihood
138
- from .protocol_deep_center_predict import XmippProtDeepCenterPredict
@@ -105,8 +105,8 @@ class XmippProtComputeLikelihood(ProtAnalysis3D):
105
105
 
106
106
  form.addParam('doNorm', BooleanParam, default=False,
107
107
  label='Normalize', expertLevel=LEVEL_ADVANCED,
108
- help='Whether to subtract background gray values and normalize'
109
- 'so that in the background there is 0 mean and'
108
+ help='Whether to subtract background gray values and normalize '
109
+ 'so that in the background there is 0 mean and '
110
110
  'standard deviation 1. This is applied to particles and volumes')
111
111
  form.addParam('normType', EnumParam, condition='doNorm',
112
112
  label='Particle normalization type', expertLevel=LEVEL_ADVANCED,
@@ -33,12 +33,26 @@ import pyworkflow.protocol.params as params
33
33
  from pwem.protocols import ProtExtractParticles
34
34
  from pyworkflow.object import Set, Pointer
35
35
 
36
+ import mrcfile
37
+ from scipy.ndimage import zoom
38
+ import matplotlib
39
+ from matplotlib.lines import Line2D
40
+ from matplotlib.patches import Patch
41
+ matplotlib.use('Agg')
42
+ from matplotlib.patches import Circle
43
+ from matplotlib.collections import PatchCollection
44
+
36
45
  from xmipp3.base import XmippProtocol
37
46
  from xmipp_base import createMetaDataFromPattern
38
47
  from xmipp3.convert import (writeMicCoordinates, readSetOfCoordinates)
39
48
  from xmipp3.constants import SAME_AS_PICKING, OTHER
40
49
  from pyworkflow import BETA, UPDATED, NEW, PROD
50
+ import numpy as np
51
+ import mrcfile
52
+ import matplotlib.pyplot as plt
41
53
 
54
+ MAX_SIZE_THUMB=512
55
+ NUM_THUMBNAILS=45
42
56
 
43
57
  class XmippProtDeepMicrographScreen(ProtExtractParticles, XmippProtocol):
44
58
  """Removes coordinates located in carbon regions or large impurities in micrographs using a pre-trained deep learning model. This screening improves particle picking accuracy by filtering out false positives from contaminated areas."""
@@ -113,6 +127,12 @@ class XmippProtDeepMicrographScreen(ProtExtractParticles, XmippProtocol):
113
127
  form.addParam("saveMasks", params.BooleanParam, default=False,expertLevel=params.LEVEL_ADVANCED,
114
128
  label="saveMasks", help="Save predicted masks?")
115
129
 
130
+ form.addParam("saveMicThumbnailWithMask", params.BooleanParam, default=True, expertLevel=params.LEVEL_ADVANCED,
131
+ condition='saveMasks == True',
132
+ label="Save thumbnails (mics and mask)",
133
+ help="Save a set of 50 micrographs with the predicted masks stamp and coords stamp")
134
+
135
+
116
136
  form.addHidden(params.USE_GPU, params.BooleanParam, default=True,
117
137
  label="Use GPU for execution",
118
138
  help="This protocol has both CPU and GPU implementation. "
@@ -148,6 +168,7 @@ class XmippProtDeepMicrographScreen(ProtExtractParticles, XmippProtocol):
148
168
  # before the actual processing
149
169
  pwutils.makePath(self._getExtraPath('inputCoords'))
150
170
  pwutils.makePath(self._getExtraPath('outputCoords'))
171
+ pwutils.makePath(self._getExtraPath('thumbnails'))
151
172
  if self.saveMasks.get():
152
173
  pwutils.makePath(self._getExtraPath("predictedMasks"))
153
174
  self._setupBasicProperties()
@@ -179,7 +200,6 @@ class XmippProtDeepMicrographScreen(ProtExtractParticles, XmippProtocol):
179
200
 
180
201
  def extractMicrographListStepOwn(self, micKeyList, *args):
181
202
  micList = []
182
-
183
203
  for micName in micKeyList:
184
204
  mic = self.micDict[micName]
185
205
  micDoneFn = self._getMicDone(mic)
@@ -197,7 +217,12 @@ class XmippProtDeepMicrographScreen(ProtExtractParticles, XmippProtocol):
197
217
 
198
218
  self._computeMaskForMicrographList(micList, *args)
199
219
 
220
+ thumbnailCounter = 0
200
221
  for mic in micList:
222
+ if self.saveMicThumbnailWithMask.get():
223
+ if thumbnailCounter <= NUM_THUMBNAILS:
224
+ self._generateThumbnail(mic)
225
+ thumbnailCounter += 1
201
226
  # Mark this mic as finished
202
227
  open(self._getMicDone(mic), 'w').close()
203
228
 
@@ -524,3 +549,126 @@ class XmippProtDeepMicrographScreen(ProtExtractParticles, XmippProtocol):
524
549
  self._defineSourceRelation(inputset,
525
550
  Pointer(value=self, extended=outputName))
526
551
  self._store()
552
+
553
+ def _generateThumbnail(self, mic):
554
+ """
555
+ Generate a thumbnail PNG for a given micrograph.
556
+
557
+ Steps performed:
558
+ 1. Load the micrograph from MRC file and normalize pixel values to 0-255.
559
+ 2. Optionally read particle coordinates from a .pos file.
560
+ 3. Optionally read a predicted mask from a .mrc file.
561
+ 4. Resize the image, mask, and scale coordinates if larger than maxSize.
562
+ 5. Overlay the mask in blue and draw particles as red circles.
563
+ 6. Save the final thumbnail as a PNG with minimal padding and compression.
564
+
565
+ Parameters
566
+ ----------
567
+ mic : Micrograph object
568
+ The micrograph to generate the thumbnail for.
569
+ maxSize : int, optional
570
+ Maximum size (in pixels) for the thumbnail (default is 512).
571
+
572
+ Returns
573
+ -------
574
+ None
575
+ The thumbnail is saved directly to the 'thumbnails' directory.
576
+ """
577
+ micFn = mic.getFileName()
578
+ micBase = pwutils.removeBaseExt(os.path.basename(micFn))
579
+
580
+ posFn = self._getExtraPath('outputCoords', micBase + '.pos')
581
+ maskFn = self._getExtraPath('predictedMasks', micBase + '.mrc')
582
+ thumbFn = self._getExtraPath('thumbnails', micBase + '.png')
583
+ if os.path.exists(thumbFn):
584
+ return
585
+
586
+ # --- Read micrograph ---
587
+ with mrcfile.open(micFn, permissive=True) as mrc:
588
+ img = mrc.data.astype(np.float32)
589
+
590
+ # --- Normalize and convert to uint8 ---
591
+ p1, p99 = np.percentile(img, (1, 99))
592
+ img = np.clip((img - p1) / (p99 - p1), 0, 1)
593
+ img = (img * 255).astype(np.uint8)
594
+
595
+ # --- Read coordinates ---
596
+ if os.path.exists(posFn):
597
+ coords = self.read_star_coordinates(posFn)
598
+
599
+ # --- Read mask ---
600
+ mask = None
601
+ if os.path.exists(maskFn):
602
+ with mrcfile.open(maskFn, permissive=True) as mrc:
603
+ mask = mrc.data.astype(np.float32)
604
+ mask = np.clip(mask, 0.0, 1)
605
+
606
+ # --- Resize image, mask, and scale coordinates/radius ---
607
+ h, w = img.shape
608
+ scale = max(MAX_SIZE_THUMB / h, MAX_SIZE_THUMB / w)
609
+
610
+ if scale < 1.0:
611
+ # Bilinear resize for image
612
+ img = zoom(img, (scale, scale), order=1, prefilter=False).astype(np.uint8)
613
+ # Nearest neighbor resize for mask
614
+ if mask is not None:
615
+ mask = zoom(mask, (scale, scale), order=0)
616
+ # Scale coordinates
617
+ if coords:
618
+ coords = [(x * scale, y * scale) for x, y in coords]
619
+
620
+ radius = (self.getBoxSize() * scale) / 4
621
+ h, w = img.shape
622
+
623
+ # --- Create figure ---
624
+ fig, ax = plt.subplots(figsize=(w / 100, h / 100), dpi=100)
625
+ ax.set_position([0, 0, 1, 1]) # axes fill figure
626
+ ax.axis('off')
627
+ # --- Show image ---
628
+ ax.imshow(img, cmap='gray', origin='upper', vmin=0, vmax=255)
629
+ # --- Overlay mask in blue ---
630
+ if mask is not None:
631
+ ax.imshow(mask, cmap='YlGnBu', origin='upper', alpha=mask)
632
+
633
+ # --- Fix axes, remove background and borders ---
634
+ ax.set_xlim(0, w)
635
+ ax.set_ylim(h, 0)
636
+ ax.set_facecolor('none')
637
+
638
+ # --- Draw particles using PatchCollection ---
639
+ if coords:
640
+ patches = [Circle((x, y), radius=radius) for x, y in coords]
641
+ collection = PatchCollection(patches, edgecolor='red', facecolor='none', linewidth=1)
642
+ ax.add_collection(collection)
643
+
644
+ # --- Save thumbnail ---
645
+ plt.savefig(thumbFn, dpi=80, bbox_inches=None, pad_inches=0, pil_kwargs={"compress_level": 4})
646
+ plt.close(fig)
647
+
648
+ def read_star_coordinates(self, posFn):
649
+ coords = []
650
+ with open(posFn) as f:
651
+ lines = f.readlines()
652
+
653
+ in_data_particles = False
654
+ for line in lines:
655
+ line = line.strip()
656
+ if not line or line.startswith('#'):
657
+ continue
658
+
659
+ if line.startswith('data_particles'):
660
+ in_data_particles = True
661
+ continue
662
+ if not in_data_particles:
663
+ continue
664
+
665
+ if line.startswith('loop_') or line.startswith('_'):
666
+ continue
667
+
668
+ parts = line.split()
669
+ if len(parts) >= 4:
670
+ x = float(parts[2])
671
+ y = float(parts[3])
672
+ coords.append((x, y))
673
+
674
+ return coords
@@ -182,12 +182,12 @@ class XmippProtExtractParticles(ProtExtractParticles, XmippProtocol):
182
182
  help='Pixels outside this circle are assumed to be noise '
183
183
  'and their stddev is set to 1. Radius for '
184
184
  'background circle definition (in pix.). If this '
185
- 'value is 0, then half the box size is used.')
185
+ 'value is less than or equal to 0, then half the box size is used.')
186
186
 
187
187
  form.addParam('patchSize', params.IntParam, default=-1,
188
188
  label='Patch size for the variance filter (px)',
189
189
  expertLevel=LEVEL_ADVANCED,
190
- help='Windows size to make the variance filtter and '
190
+ help='Windows size to make the variance filter and '
191
191
  'compute the Gini coeff. A twice of the particle '
192
192
  'size is recommended. Set at -1 applies 1.5*BoxSize.')
193
193
 
@@ -158,7 +158,7 @@ class XmippProtExtractParticlesPairs(ProtExtractParticlesPair, XmippProtocol):
158
158
  'phase flip is not recommended.')
159
159
  form.addParam('doNormalize', BooleanParam, default=True,
160
160
  label='Normalize (Recommended)',
161
- help='It subtract a ramp in the gray values and '
161
+ help='It subtracts a ramp in the gray values and '
162
162
  'normalizes so that in the background there is 0 '
163
163
  'mean and standard deviation 1.')
164
164
  form.addParam('normType', EnumParam,
@@ -157,8 +157,8 @@ class XmippProtPreprocessParticles(XmippProcessParticles):
157
157
  help='Angstroms.')
158
158
  form.addParam('doNormalize', BooleanParam, default=False,
159
159
  label='Normalize',
160
- help='It subtract a ramp in the gray values and normalizes'
161
- 'so that in the background there is 0 mean and'
160
+ help='It subtracts a ramp in the gray values and normalizes '
161
+ 'so that in the background there is 0 mean and '
162
162
  'standard deviation 1.')
163
163
  form.addParam('normType', EnumParam, condition='doNormalize',
164
164
  label='Normalization type', expertLevel=LEVEL_ADVANCED,
@@ -169,10 +169,10 @@ class XmippProtPreprocessParticles(XmippProcessParticles):
169
169
  'Ramp: subtract background + NewXmipp')
170
170
  form.addParam('backRadius', IntParam, default=-1, condition='doNormalize',
171
171
  label='Background radius', expertLevel=LEVEL_ADVANCED,
172
- help='Pixels outside this circle are assumed to be noise and'
173
- 'their stddev is set to 1. Radius for background'
174
- 'circle definition (in pix.).'
175
- 'If this value is 0, then half the box size is used.')
172
+ help='Pixels outside this circle are assumed to be noise and '
173
+ 'their stddev is set to 1. Radius for background '
174
+ 'circle definition (in pix.). '
175
+ 'If this value is less than or equal to 0, then half the box size is used.')
176
176
  form.addParam('doCenter', BooleanParam, default=False,
177
177
  label='Center images')
178
178
  form.addParam('doPhaseFlip', BooleanParam, default=False,
@@ -63,8 +63,6 @@ Protocols SPA = [
63
63
  {"tag": "section", "text": "2D", "children": [
64
64
  {"tag": "protocol_group", "text": "Align", "openItem": "False", "children": [
65
65
  {"tag": "protocol", "value": "XmippProtCL2DAlign", "text": "default"},
66
- {"tag": "protocol", "value": "XmippProtDeepCenter", "text": "default"},
67
- {"tag": "protocol", "value": "XmippProtDeepCenterPredict", "text": "default"},
68
66
  {"tag": "protocol", "value": "XmippProtApplyAlignment", "text": "default"},
69
67
  {"tag": "section", "text": "more", "openItem": "False", "children": [
70
68
  {"tag": "protocol", "value": "ProtAlignmentAssign", "text": "default"}
@@ -40,6 +40,6 @@ _binVersion = 'v4' # Increase it if major release is generated in xmipp
40
40
  # - If several of the above are true, only change the biggest one applicable (
41
41
  # for example, if a fix is made and a new protocol are included in the same
42
42
  # pull request, increase the one related to the new protocol).
43
- __version__ = '26.0.2'
43
+ __version__ = '26.2.0'
44
44
 
45
- _currentDepVersion = '1.0'
45
+ _currentDepVersion = '1.1'
@@ -34,7 +34,15 @@ from pyworkflow.viewer import DESKTOP_TKINTER, WEB_DJANGO, ProtocolViewer
34
34
 
35
35
  from pwem import emlib
36
36
  from xmipp3.convert import getXmippAttribute
37
- from xmipp3.protocols.protocol_deep_micrograph_screen import XmippProtDeepMicrographScreen
37
+ from xmipp3.protocols.protocol_deep_micrograph_screen import XmippProtDeepMicrographScreen, NUM_THUMBNAILS
38
+ from xmippLib import Image
39
+ import os
40
+ import numpy as np
41
+ import matplotlib.pyplot as plt
42
+ import matplotlib.image as mpimg
43
+ from matplotlib.patches import Patch
44
+ import matplotlib
45
+
38
46
 
39
47
  class XmippDeepMicrographViewer(ProtocolViewer):
40
48
  """
@@ -61,10 +69,18 @@ class XmippDeepMicrographViewer(ProtocolViewer):
61
69
  " to the threshold indicated in the box.\n"
62
70
  "If you like the result, save the result"
63
71
  " with the '+Coordinates' button")
64
-
72
+ form.addParam('visualizeMaskAndMic', LabelParam,
73
+ label=f"Visualize {NUM_THUMBNAILS} micrographs with the mask and coords. overlayed",
74
+ help="Visualize micrographs with the DeepMicrographCleaner mask "
75
+ "overlayed using a color transparency and the coords stamp.\n"
76
+ "The transparency and the color (blue to yellow) indicates the Deep score factor applied."
77
+ f"Will be shown the first {NUM_THUMBNAILS} miccrographs."
78
+ f"If aliasing arise is because the compresion of the thumbnails"
79
+ )
65
80
  def _getVisualizeDict(self):
66
81
  return {'visualizeCoordinates': self._visualizeCoordinates,
67
- 'visualizeHistogram': self._visualizeHistogram}
82
+ 'visualizeHistogram': self._visualizeHistogram,
83
+ 'visualizeMaskAndMic': self._visualizeMaskAndMic}
68
84
 
69
85
  def _visualizeCoordinates(self, e=None):
70
86
  views = []
@@ -119,8 +135,7 @@ class XmippDeepMicrographViewer(ProtocolViewer):
119
135
  plotter.createSubPlot("Deep micrograph score",
120
136
  "Deep micrograph score",
121
137
  "Number of Coordinates")
122
- cScores = [getXmippAttribute(coord, mdLabel).get()
123
- for coord in outCoords]
138
+ cScores = [getXmippAttribute(coord, mdLabel).get() for coord in outCoords]
124
139
  plotter.plotHist(cScores, nbins=numberOfBins)
125
140
  views.append(plotter)
126
141
  else:
@@ -129,3 +144,61 @@ class XmippDeepMicrographViewer(ProtocolViewer):
129
144
  print(" > Output not ready yet.")
130
145
 
131
146
  return views
147
+
148
+ def _visualizeMaskAndMic(self, e=None):
149
+ if not self.protocol.saveMicThumbnailWithMask.get():
150
+ return None
151
+
152
+ views = []
153
+ thumb_dir = self.protocol._getExtraPath('thumbnails')
154
+ thumbs = sorted([
155
+ os.path.join(thumb_dir, f)
156
+ for f in os.listdir(thumb_dir)
157
+ if f.lower().endswith('.png')
158
+ ])
159
+
160
+ if not thumbs:
161
+ return None
162
+
163
+ n = len(thumbs)
164
+ per_page = 15
165
+ cols = 5
166
+ rows = int(per_page / cols)
167
+
168
+ for page_start in range(0, n, per_page):
169
+ page_thumbs = thumbs[page_start:page_start + per_page]
170
+
171
+ fig = plt.figure(figsize=(cols * 5, rows * 5))
172
+ gs = matplotlib.gridspec.GridSpec(rows, cols, figure=fig, wspace=0.05, hspace=0.08)
173
+
174
+ axes = []
175
+ for i in range(rows * cols):
176
+ r, c = divmod(i, cols)
177
+ ax = fig.add_subplot(gs[r, c])
178
+ ax.axis('off')
179
+ axes.append(ax)
180
+
181
+ for i, fn in enumerate(page_thumbs):
182
+ img = mpimg.imread(fn)
183
+ axes[i].imshow(img)
184
+
185
+ for i in range(len(page_thumbs), rows * cols):
186
+ fig.delaxes(axes[i])
187
+
188
+ cmap = plt.get_cmap('YlGnBu')
189
+ norm = matplotlib.colors.Normalize(vmin=0, vmax=1)
190
+ sm = matplotlib.cm.ScalarMappable(cmap=cmap, norm=norm)
191
+ sm.set_array([])
192
+
193
+ cbar_ax = fig.add_axes([0.2, 0.05, 0.5, 0.02])
194
+ cbar = fig.colorbar(sm, cax=cbar_ax, orientation='horizontal')
195
+ cbar.set_label('Mask deep score')
196
+
197
+ try:
198
+ fig.canvas.manager.set_window_title(f'Thumbnails {page_start + 1}-{page_start + len(page_thumbs)}' )
199
+ except AttributeError:
200
+ pass
201
+
202
+ views.append(fig)
203
+
204
+ return views