Source code for mxcubecore.queue_entry.xray_centring

#  Project name: MXCuBE
#  https://github.com/mxcube
#
#  This file is part of MXCuBE software.
#
#  MXCuBE is free software: you can redistribute it and/or modify
#  it under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation, either version 3 of the License, or
#  (at your option) any later version.
#
#  MXCuBE is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU Lesser General Public License for more details.
#
#  You should have received a copy of the GNU Lesser General Public License
#  along with MXCuBE. If not, see <http://www.gnu.org/licenses/>.

from mxcubecore import HardwareRepository as HWR
from mxcubecore.model import queue_model_objects
from mxcubecore.queue_entry.base_queue_entry import BaseQueueEntry

__credits__ = ["MXCuBE collaboration"]
__license__ = "LGPLv3+"
__category__ = "General"


[docs]class XrayCentringQueueEntry(BaseQueueEntry): """ Defines the behaviour of an Advanced scan """ def __init__(self, view=None, data_model=None, view_set_queue_entry=True): BaseQueueEntry.__init__(self, view, data_model, view_set_queue_entry) self.mesh_qe = None self.helical_qe = None self.in_queue = False
[docs] def execute(self): BaseQueueEntry.execute(self)
[docs] def pre_execute(self): BaseQueueEntry.pre_execute(self) xray_centring = self.get_data_model() reference_image_collection = xray_centring.reference_image_collection reference_image_collection.grid = HWR.beamline.sample_view.create_auto_grid() reference_image_collection.acquisitions[ 0 ].acquisition_parameters.centred_position = ( reference_image_collection.grid.get_centred_position() ) # Trick to make sure that the reference collection has a sample. reference_image_collection._parent = xray_centring.get_parent() xray_centring.line_collection._parent = xray_centring.get_parent() gid = self.get_data_model().get_parent().lims_group_id reference_image_collection.lims_group_id = gid # Enqueue the reference mesh scan collection mesh_qe = DataCollectionQueueEntry( self.get_view(), reference_image_collection, view_set_queue_entry=False ) mesh_qe.set_enabled(True) mesh_qe.in_queue = self.in_queue self.mesh_qe = mesh_qe # Creat e a helical data collection based on the first collection helical_qe = DataCollectionQueueEntry( self.get_view(), reference_image_collection, view_set_queue_entry=False ) # helical_model = helical_qe.get_data_model() # @helical_model.set_experiment_type(EXPERIMENT_TYPE.HELICAL) # @helical_model.grid = None acq_two = queue_model_objects.Acquisition() helical_model.acquisitions.append(acq_two) helical_model.acquisitions[0].acquisition_parameters.num_images = 100 helical_model.acquisitions[0].acquisition_parameters.num_lines = 1 helical_acq_path_template = helical_model.acquisitions[0].path_template helical_acq_path_template.base_prefix = ( "line_" + helical_acq_path_template.base_prefix ) helical_qe._data_model = helical_model helical_qe.set_enabled(True) helical_qe.in_queue = self.in_queue self.helical_qe = helical_qe advanced_connector_qe = AdvancedConnectorQueueEntry( self.get_view(), reference_image_collection, view_set_queue_entry=False ) advanced_connector_qe.first_qe = mesh_qe advanced_connector_qe.second_qe = helical_qe advanced_connector_qe.set_enabled(True) self.enqueue(mesh_qe) self.enqueue(advanced_connector_qe) self.enqueue(helical_qe)
[docs] def post_execute(self): if self.helical_qe: self.status = self.helical_qe.status else: self.status = self.mesh_qe BaseQueueEntry.post_execute(self)