Example #1
0
class Acquisition(ispyb.interface.acquisition.IF):
    '''Acquisition provides methods to store data in the acquisition tables.'''

    _data_collection_group_params =\
      StrictOrderedDict([('id',None), ('parentid',None), ('proposal_code',None), ('proposal_number',None), ('session_number',None),
                           ('sampleid',None), ('sample_barcode',None), ('experimenttype',None),
                           ('starttime',None), ('endtime',None),
                           ('crystal_class',None), ('detector_mode',None),
                           ('actual_sample_barcode',None), ('actual_sample_slot_in_container',None),
                           ('actual_container_barcode',None), ('actual_container_slot_in_sc',None), ('comments',None),
                           ('xtal_snapshot_full_path',None)])

    _data_collection_params =\
      StrictOrderedDict([('id',None), ('parentid',None), ('visitid',None), ('sampleid',None), ('detectorid',None), ('positionid',None),
                           ('apertureid',None), ('datacollection_number',None), ('starttime',None), ('endtime',None), ('run_status',None),
                           ('axis_start',None), ('axis_end',None), ('axis_range',None), ('overlap',None), ('n_images',None),
                           ('start_image_number',None), ('n_passes',None), ('exp_time',None),
                           ('imgdir',None), ('imgprefix',None), ('imgsuffix',None), ('file_template',None),
                           ('wavelength',None), ('resolution',None), ('detector_distance',None), ('xbeam',None), ('ybeam',None),
                           ('comments',None), ('slitgap_vertical',None), ('slitgap_horizontal',None), ('transmission',None),
                           ('synchrotron_mode',None), ('xtal_snapshot1',None), ('xtal_snapshot2',None), ('xtal_snapshot3',None),
                           ('xtal_snapshot4',None), ('rotation_axis',None), ('phistart',None), ('kappastart',None), ('omegastart',None),
                           ('resolution_at_corner',None), ('detector2theta',None), ('undulator_gap1',None), ('undulator_gap2',None),
                           ('undulator_gap3',None), ('beamsize_at_samplex',None), ('beamsize_at_sampley',None), ('avg_temperature',None),
                           ('actual_centering_position',None), ('beam_shape',None), ('focal_spot_size_at_samplex',None),
                           ('focal_spot_size_at_sampley',None), ('polarisation',None), ('flux',None),
                           ('processed_data_file',None), ('dat_file',None), ('magnification',None), ('total_absorbed_dose',None),
                           ('binning',None), ('particle_diameter',None), ('box_size_ctf',None), ('min_resolution',None),
                           ('min_defocus',None), ('max_defocus',None), ('defocus_step_size',None), ('amount_astigmatism',None),
                           ('extract_size',None), ('bg_radius',None), ('voltage',None), ('obj_aperture',None), ('c1aperture',None),
                           ('c2aperture',None), ('c3aperture',None), ('c1lens',None), ('c2lens',None), ('c3lens',None)])

    @classmethod
    def get_data_collection_group_params(cls):
        return copy.deepcopy(cls._data_collection_group_params)

    @classmethod
    def get_data_collection_params(cls):
        return copy.deepcopy(cls._data_collection_params)

    def upsert_data_collection_group(self, values):
        '''Insert or update MX data collection group.'''
        #return self.get_connection().call_sf_write('upsert_dcgroup', values)
        return self.get_connection().call_sp_write('upsert_dc_group_v2',
                                                   values)

    def upsert_data_collection(self, values):
        '''Insert or update data collection.'''
        return self.get_connection().call_sf_write('upsert_dc', values)

    def retrieve_data_collection_main(self, id):
        '''Retrieve main data collection parameters for row with given id'''
        return self.get_connection().call_sp_retrieve(
            procname='retrieve_dc_main', args=(id, ))
Example #2
0
def test_order():
    d = StrictOrderedDict([('c', 1), ('b', 2), ('a', 3)])
    keys = ""
    vals = ""
    for k, v in d.items():
        keys += str(k)
        vals += str(v)
    if keys == "cba" and vals == "123":
        assert True
    else:
        assert False
Example #3
0
def test_case_insensivity_and_underscore():
    d = StrictOrderedDict([('CELL_A', None), ('cell_B', None),
                           ('cell_c', None), ('cellAlpha', None)])
    try:
        d['cell_a'] = 4
        d['cell_b'] = 5
        d['cell_c'] = 6.01
        d['cell_alpha'] = 7.02
    except KeyError:
        assert False
    else:
        assert True

    try:
        d['cella'] = 4
    except KeyError:
        assert False
    else:
        assert True

    try:
        d['cell_a'] = 5
    except KeyError:
        assert False
    assert d['CELLA'] == 5
    assert d['cellb'] == 5
    assert d['cell_C'] == 6.01
    assert d['Cell_Alpha'] == 7.02
def test_case_insensivity_and_underscore():
    d = StrictOrderedDict([("CELL_A", None), ("cell_B", None),
                           ("cell_c", None), ("cellAlpha", None)])
    try:
        d["cell_a"] = 4
        d["cell_b"] = 5
        d["cell_c"] = 6.01
        d["cell_alpha"] = 7.02
    except KeyError:
        assert False
    else:
        assert True

    try:
        d["cella"] = 4
    except KeyError:
        assert False
    else:
        assert True

    try:
        d["cell_a"] = 5
    except KeyError:
        assert False
    assert d["CELLA"] == 5
    assert d["cellb"] == 5
    assert d["cell_C"] == 6.01
    assert d["Cell_Alpha"] == 7.02
Example #5
0
def test_keyerror():
    d = StrictOrderedDict([('c', None), ('b', None), ('a', None)])
    try:
        d['new_key'] = 'some value'
    except KeyError:
        assert True
    else:
        assert False
Example #6
0
class Shipping(ispyb.interface.shipping.IF):
    """Shipping provides methods to update shipments and samples."""

    def __init__(self):
        pass

    _dewar_params = StrictOrderedDict(
        [
            ("id", None),
            ("authLogin", None),
            ("shippingId", None),
            ("name", None),
            ("comments", None),
            ("storageLocation", None),
            ("status", None),
            ("isStorageDewar", None),
            ("barCode", None),
            ("firstSessionId", None),
            ("customsValue", None),
            ("transportValue", None),
            ("trackingNumberToSynchrotron", None),
            ("trackingNumberFromSynchrotron", None),
            ("type", None),
            ("facilityCode", None),
            ("weight", None),
            ("deliveryAgentBarcode", None),
        ]
    )

    @classmethod
    def get_dewar_params(cls):
        return copy.deepcopy(cls._dewar_params)

    def update_container_assign(self, beamline, registry_barcode, position):
        """Assign a container"""
        return self.get_connection().call_sp_retrieve(
            procname="update_container_assign",
            args=(beamline, registry_barcode, position),
        )

    def update_container_unassign_all_for_beamline(self, beamline):
        """Unassign all containers for a given beamline. Assumes container.sessionId and container.containerRegistryId are populated."""
        self.get_connection().call_sp_write(
            procname="update_container_unassign_all_for_beamline", args=(beamline,)
        )

    def upsert_dewar(self, values):
        """Insert or update a dewar or parcel"""
        return self.get_connection().call_sp_write("upsert_dewar_v2", values)

    def retrieve_dewars_for_proposal_code_number(
        self, proposal_code, proposal_number, auth_login=None
    ):
        """Get a result-set with the dewars associated with shipments in a given proposal specified by proposal code, proposal_number"""
        return self.get_connection().call_sp_retrieve(
            procname="retrieve_dewars_for_proposal_code_number_v2",
            args=(proposal_code, proposal_number, auth_login),
        )
Example #7
0
class Core(ispyb.interface.core.IF):
  '''Core provides methods to store and retrieve data in the core tables.'''

  def __init__(self):
    pass

  _sample_params =\
    StrictOrderedDict([('id',None), ('crystalid',None), ('containerid',None), ('name',None), ('code',None),
                         ('location',None), ('holder_length',None), ('loop_length',None), ('loop_type',None),
                         ('wire_width',None), ('comments',None), ('status',None), ('is_in_sc',None)])

  @classmethod
  def get_sample_params(cls):
    return copy.deepcopy(cls._sample_params)

  def upsert_sample(self, values):
    '''Insert or update sample.'''
    return self.get_connection().call_sf_write('upsert_sample', values)

  def retrieve_visit_id(self, visit):
    '''Get the database ID for a visit on the form mx1234-5.'''
    return self.get_connection().call_sf_retrieve('retrieve_visit_id', [visit])

  def retrieve_datacollection_id(self, img_filename, img_fileloc):
    '''Get the database ID for the data collection corresponding to the given diffraction image file.'''
    return self.get_connection().call_sf_retrieve('retrieve_datacollection_id', [img_filename, img_fileloc])

  def retrieve_current_sessions(self, beamline, tolerance_mins=0):
    '''Get a result-set with the currently active sessions on the given beamline.'''
    return self.get_connection().call_sp_retrieve(procname='retrieve_current_sessions', args=(beamline,tolerance_mins))

  def retrieve_current_sessions_for_person(self, beamline, fed_id, tolerance_mins=0):
    '''Get a result-set with the currently active sessions on the given beamline.'''
    return self.get_connection().call_sp_retrieve(procname='retrieve_current_sessions_for_person', args=(beamline, fed_id, tolerance_mins))

  def retrieve_most_recent_session(self, beamline, proposal_code):
    '''Get a result-set with the most recent session on the given beamline for the given proposal code '''
    return self.get_connection().call_sp_retrieve(procname='retrieve_most_recent_session', args=(beamline, proposal_code))

  def retrieve_persons_for_proposal(self, proposal_code, proposal_number):
    '''Get a result-set with the persons associated with a given proposal specified by proposal code, proposal_number'''
    return self.get_connection().call_sp_retrieve(procname='retrieve_persons_for_proposal', args=(proposal_code, proposal_number))

  def retrieve_current_cm_sessions(self, beamline):
    '''Get a result-set with the currently active commissioning (cm) sessions on the given beamline.'''
    return self.get_connection().call_sp_retrieve(procname='retrieve_current_cm_sessions', args=(beamline,))

  def retrieve_active_plates(self, beamline):
    '''Get a result-set with the submitted plates not yet in local storage on a given beamline'''
    return self.get_connection().call_sp_retrieve(procname="retrieve_containers_submitted_non_ls", args=(beamline,))

  def retrieve_proposal_title(self, proposal_code, proposal_number):
    '''Get the title of a given proposal'''
    return self.get_connection().call_sf_retrieve('retrieve_proposal_title', [proposal_code, proposal_number])
Example #8
0
class MXAcquisition(Acquisition):
    '''MXAcquisition provides methods to store data in the MX acquisition tables.'''
    def __init__(self):
        self.insert_data_collection_group = super(
            MXAcquisition, self).upsert_data_collection_group
        self.insert_data_collection = super(MXAcquisition,
                                            self).upsert_data_collection
        self.update_data_collection_group = super(
            MXAcquisition, self).upsert_data_collection_group
        self.update_data_collection = super(MXAcquisition,
                                            self).upsert_data_collection

    _image_params =\
      StrictOrderedDict([('id',None), ('parentid',None), ('img_number',None), ('filename',None), ('file_location',None),
                           ('measured_intensity',None), ('jpeg_path',None), ('jpeg_thumb_path',None), ('temperature',None),
                           ('cumulative_intensity',None), ('synchrotron_current',None), ('comments',None), ('machine_msg',None)])

    @classmethod
    def get_image_params(cls):
        return copy.deepcopy(cls._image_params)

    def upsert_image(self, values):
        '''Insert or update MX diffraction image.'''
        return self.get_connection().call_sf_write('upsert_image', values)
def test_keyerror():
    d = StrictOrderedDict([("c", None), ("b", None), ("a", None)])
    with pytest.raises(KeyError):
        d["new_key"] = "some value"
Example #10
0
class Acquisition(ispyb.interface.acquisition.IF):
    """Acquisition provides methods to store data in the acquisition tables."""

    _data_collection_group_params = StrictOrderedDict([
        ("id", None),
        ("parentid", None),
        ("proposal_code", None),
        ("proposal_number", None),
        ("session_number", None),
        ("sampleid", None),
        ("sample_barcode", None),
        ("experimenttype", None),
        ("starttime", None),
        ("endtime", None),
        ("crystal_class", None),
        ("detector_mode", None),
        ("actual_sample_barcode", None),
        ("actual_sample_slot_in_container", None),
        ("actual_container_barcode", None),
        ("actual_container_slot_in_sc", None),
        ("comments", None),
        ("xtal_snapshot_full_path", None),
        ("scan_params", None),
    ])

    _data_collection_params = StrictOrderedDict([
        ("id", None),
        ("parentid", None),
        ("visitid", None),
        ("sampleid", None),
        ("detectorid", None),
        ("positionid", None),
        ("apertureid", None),
        ("datacollection_number", None),
        ("starttime", None),
        ("endtime", None),
        ("run_status", None),
        ("axis_start", None),
        ("axis_end", None),
        ("axis_range", None),
        ("overlap", None),
        ("n_images", None),
        ("start_image_number", None),
        ("n_passes", None),
        ("exp_time", None),
        ("imgdir", None),
        ("imgprefix", None),
        ("imgsuffix", None),
        ("img_container_sub_path", None),
        ("file_template", None),
        ("wavelength", None),
        ("resolution", None),
        ("detector_distance", None),
        ("xbeam", None),
        ("ybeam", None),
        ("comments", None),
        ("slitgap_vertical", None),
        ("slitgap_horizontal", None),
        ("transmission", None),
        ("synchrotron_mode", None),
        ("xtal_snapshot1", None),
        ("xtal_snapshot2", None),
        ("xtal_snapshot3", None),
        ("xtal_snapshot4", None),
        ("rotation_axis", None),
        ("phistart", None),
        ("kappastart", None),
        ("omegastart", None),
        ("resolution_at_corner", None),
        ("detector2theta", None),
        ("undulator_gap1", None),
        ("undulator_gap2", None),
        ("undulator_gap3", None),
        ("beamsize_at_samplex", None),
        ("beamsize_at_sampley", None),
        ("avg_temperature", None),
        ("actual_centering_position", None),
        ("beam_shape", None),
        ("focal_spot_size_at_samplex", None),
        ("focal_spot_size_at_sampley", None),
        ("polarisation", None),
        ("flux", None),
        ("processed_data_file", None),
        ("dat_file", None),
        ("magnification", None),
        ("total_absorbed_dose", None),
        ("binning", None),
        ("particle_diameter", None),
        ("box_size_ctf", None),
        ("min_resolution", None),
        ("min_defocus", None),
        ("max_defocus", None),
        ("defocus_step_size", None),
        ("amount_astigmatism", None),
        ("extract_size", None),
        ("bg_radius", None),
        ("voltage", None),
        ("obj_aperture", None),
        ("c1aperture", None),
        ("c2aperture", None),
        ("c3aperture", None),
        ("c1lens", None),
        ("c2lens", None),
        ("c3lens", None),
    ])

    _data_collection_file_attachment_params = StrictOrderedDict([
        ("id", None),
        ("parentid", None),
        ("file_full_path", None),
        ("file_type", None),
    ])

    _robot_action_params = StrictOrderedDict([
        ("id", None),
        ("session_id", None),
        ("sample_id", None),
        ("action_type", None),
        ("start_timestamp", None),
        ("end_timestamp", None),
        ("status", None),
        ("message", None),
        ("container_location", None),
        ("dewar_location", None),
        ("sample_barcode", None),
        ("snapshot_before", None),
        ("snapshot_after", None),
    ])

    @classmethod
    def get_data_collection_group_params(cls):
        return copy.deepcopy(cls._data_collection_group_params)

    @classmethod
    def get_data_collection_params(cls):
        return copy.deepcopy(cls._data_collection_params)

    @classmethod
    def get_data_collection_file_attachment_params(cls):
        return copy.deepcopy(cls._data_collection_file_attachment_params)

    @classmethod
    def get_robot_action_params(cls):
        return copy.deepcopy(cls._robot_action_params)

    def upsert_data_collection_group(self, values):
        """Insert or update MX data collection group."""
        return self.get_connection().call_sp_write("upsert_dc_group_v3",
                                                   values)

    def upsert_data_collection(self, values):
        """Insert or update data collection."""
        return self.get_connection().call_sp_write("upsert_dc", values)

    def upsert_data_collection_file_attachment(self, values):
        """Insert or update a data collection file attachment."""
        return self.get_connection().call_sp_write("upsert_dc_file_attachment",
                                                   values)

    def retrieve_data_collection_group(self, id, auth_login=None):
        """Retrieve data collection group parameters for row with given id"""
        return self.get_connection().call_sp_retrieve(
            procname="retrieve_dc_group_v2", args=(id, auth_login))

    def retrieve_data_collection(self, id, auth_login=None):
        """Retrieve data collection parameters for row with given id"""
        return self.get_connection().call_sp_retrieve(procname="retrieve_dc",
                                                      args=(id, auth_login))

    def retrieve_data_collection_main(self, id, auth_login=None):
        """Retrieve main data collection parameters for row with given id"""
        return self.get_connection().call_sp_retrieve(
            procname="retrieve_dc_main_v2", args=(id, auth_login))

    def upsert_robot_action(self, values):
        """Insert or update a robot action event."""
        return self.get_connection().call_sp_write("upsert_robot_action",
                                                   values)
Example #11
0
class EMAcquisition(Acquisition):
    '''EMAcquisition provides methods to store data in the MotionCorrection and CTF tables.'''
    def __init__(self):
        self.insert_data_collection_group = super(
            EMAcquisition, self).upsert_data_collection_group
        self.insert_data_collection = super(EMAcquisition,
                                            self).upsert_data_collection
        self.update_data_collection_group = super(
            EMAcquisition, self).upsert_data_collection_group
        self.update_data_collection = super(EMAcquisition,
                                            self).upsert_data_collection

    _movie_params = \
        StrictOrderedDict(
            [
                ('movieId', None),
                ('dataCollectionId', None),
                ('movieNumber', None),
                ('movieFullPath', None),
                ('createdTimeStamp', None),
                ('positionX', None),
                ('positionY', None),
                ('nominalDefocus', None)
            ]
        )

    _motion_correction_params = \
        StrictOrderedDict(
            [
                ('motionCorrectionId', None),
                ('movieId', None),
                ('autoProcProgramId', None),
                ('imageNumber', None),
                ('firstFrame', None),
                ('lastFrame', None),
                ('dosePerFrame', None),
                ('totalMotion', None),
                ('averageMotionPerFrame', None),
                ('driftPlotFullPath', None),
                ('micrographFullPath', None),
                ('micrographSnapshotFullPath', None),
                ('fftFullPath', None),
                ('fftCorrectedFullPath', None),
                ('patchesUsedX', None),
                ('patchesUsedY', None),
                ('comments', None)
            ]
        )

    _ctf_params = \
        StrictOrderedDict(
            [
                ('ctfId', None),
                ('motionCorrectionId', None),
                ('autoProcProgramId', None),
                ('boxSizeX', None),
                ('boxSizeY', None),
                ('minResolution', None),
                ('maxResolution', None),
                ('minDefocus', None),
                ('maxDefocus', None),
                ('defocusStepSize', None),
                ('astigmatism', None),
                ('astigmatismAngle', None),
                ('estimatedResolution', None),
                ('estimatedDefocus', None),
                ('amplitudeContrast', None),
                ('ccValue', None),
                ('fftTheoreticalFullPath', None),
                ('comments', None)
            ]
        )

    _motion_correction_drift_params = \
        StrictOrderedDict(
            [
                ('motionCorrectionDriftId', None),
                ('motionCorrectionId', None),
                ('frameNumber', None),
                ('deltaX', None),
                ('deltaY', None)
            ]
        )

    @classmethod
    def get_movie_params(cls):
        return copy.deepcopy(cls._movie_params)

    @classmethod
    def get_motion_correction_params(cls):
        return copy.deepcopy(cls._motion_correction_params)

    @classmethod
    def get_ctf_params(cls):
        return copy.deepcopy(cls._ctf_params)

    @classmethod
    def get_motion_correction_drift_params(cls):
        return copy.deepcopy(cls._motion_correction_drift_params)

    def insert_movie(self, values):
        '''Store new movie params.'''
        return self.get_connection().call_sp_write(procname='upsert_movie',
                                                   args=values)

    def insert_motion_correction(self, values):
        '''Store new motion correction params.'''
        return self.get_connection().call_sp_write(
            procname='upsert_motion_correction', args=values)

    def insert_ctf(self, values):
        '''Store new ctf params.'''
        return self.get_connection().call_sp_write(procname='upsert_ctf',
                                                   args=values)

    def insert_motion_correction_drift(self, values):
        '''Store new motion correction drift params.'''
        return self.get_connection().call_sp_write(
            procname='upsert_motion_correction_drift', args=values)
Example #12
0
class MXScreening(ispyb.interface.screening.IF):
    """MXScreening provides methods to store MX characterisations and strategies."""

    def __init__(self):
        pass

    _screening_params = StrictOrderedDict(
        [
            ("id", None),
            ("dcgid", None),
            ("dcid", None),
            ("program_version", None),
            ("short_comments", None),
            ("comments", None),
        ]
    )
    _screening_input_params = StrictOrderedDict(
        [
            ("id", None),
            ("screening_id", None),
            ("beamx", None),
            ("beamy", None),
            ("rms_err_lim", None),
            ("min_fraction_indexed", None),
            ("max_fraction_rejected", None),
            ("min_signal2noise", None),
        ]
    )
    _screening_output_params = StrictOrderedDict(
        [
            ("id", None),
            ("screening_id", None),
            ("status_description", None),
            ("rejected_reflections", None),
            ("resolution_obtained", None),
            ("spot_deviation_r", None),
            ("spot_deviation_theta", None),
            ("beam_shift_x", None),
            ("beam_shift_y", None),
            ("num_spots_found", None),
            ("num_spots_used", None),
            ("num_spots_rejected", None),
            ("mosaicity", None),
            ("i_over_sigma", None),
            ("diffraction_rings", None),
            ("mosaicity_estimated", 0),
            ("ranking_resolution", None),
            ("program", None),
            ("dose_total", None),
            ("total_exposure_time", None),
            ("total_rotation_range", None),
            ("total_no_images", None),
            ("rfriedel", None),
            ("indexing_success", 0),
            ("strategy_success", 0),
            ("alignment_success", 0),
        ]
    )
    _screening_output_lattice_params = StrictOrderedDict(
        [
            ("id", None),
            ("screening_output_id", None),
            ("spacegroup", None),
            ("pointgroup", None),
            ("bravais_lattice", None),
            ("raw_orientation_matrix_a_x", None),
            ("raw_orientation_matrix_a_y", None),
            ("raw_orientation_matrix_a_z", None),
            ("raw_orientation_matrix_b_x", None),
            ("raw_orientation_matrix_b_y", None),
            ("raw_orientation_matrix_b_z", None),
            ("raw_orientation_matrix_c_x", None),
            ("raw_orientation_matrix_c_y", None),
            ("raw_orientation_matrix_c_z", None),
            ("unit_cell_a", None),
            ("unit_cell_b", None),
            ("unit_cell_c", None),
            ("unit_cell_alpha", None),
            ("unit_cell_beta", None),
            ("unit_cell_gamma", None),
            ("labelit_indexing", None),
        ]
    )
    _screening_strategy_params = StrictOrderedDict(
        [
            ("id", None),
            ("screening_output_id", None),
            ("phi_start", None),
            ("phi_end", None),
            ("rotation", None),
            ("exposure_time", None),
            ("resolution", None),
            ("completeness", None),
            ("multiplicity", None),
            ("anomalous", 0),
            ("program", None),
            ("ranking_resolution", None),
            ("transmission", None),
        ]
    )
    _screening_strategy_wedge_params = StrictOrderedDict(
        [
            ("id", None),
            ("screening_strategy_id", None),
            ("wedge_number", None),
            ("resolution", None),
            ("completeness", None),
            ("multiplicity", None),
            ("dose_total", None),
            ("no_images", None),
            ("phi", None),
            ("kappa", None),
            ("chi", None),
            ("comments", None),
            ("wavelength", None),
        ]
    )
    _screening_strategy_sub_wedge_params = StrictOrderedDict(
        [
            ("id", None),
            ("screening_strategy_wedge_id", None),
            ("sub_wedge_number", None),
            ("rotation_axis", None),
            ("axis_start", None),
            ("axis_end", None),
            ("exposure_time", None),
            ("transmission", None),
            ("oscillation_range", None),
            ("completeness", None),
            ("multiplicity", None),
            ("resolution", None),
            ("dose_total", None),
            ("no_images", None),
            ("comments", None),
        ]
    )

    @classmethod
    def get_screening_params(cls):
        return copy.deepcopy(cls._screening_params)

    @classmethod
    def get_screening_input_params(cls):
        return copy.deepcopy(cls._screening_input_params)

    @classmethod
    def get_screening_output_params(cls):
        return copy.deepcopy(cls._screening_output_params)

    @classmethod
    def get_screening_output_lattice_params(cls):
        return copy.deepcopy(cls._screening_output_lattice_params)

    @classmethod
    def get_screening_strategy_params(cls):
        return copy.deepcopy(cls._screening_strategy_params)

    @classmethod
    def get_screening_strategy_wedge_params(cls):
        return copy.deepcopy(cls._screening_strategy_wedge_params)

    @classmethod
    def get_screening_strategy_sub_wedge_params(cls):
        return copy.deepcopy(cls._screening_strategy_sub_wedge_params)

    def insert_screening(self, values):
        return self.get_connection().call_sp_write(
            procname="insert_screening", args=(values)
        )

    def insert_screening_input(self, values):
        return self.get_connection().call_sp_write(
            procname="insert_screening_input", args=(values)
        )

    def insert_screening_output(self, values):
        return self.get_connection().call_sp_write(
            procname="insert_screening_output_v2", args=(values)
        )

    def insert_screening_output_lattice(self, values):
        return self.get_connection().call_sp_write(
            procname="insert_screening_output_lattice", args=(values)
        )

    def insert_screening_strategy(self, values):
        return self.get_connection().call_sp_write(
            procname="insert_screening_strategy", args=(values)
        )

    def insert_screening_strategy_wedge(self, values):
        return self.get_connection().call_sp_write(
            procname="insert_screening_strategy_wedge", args=(values)
        )

    def insert_screening_strategy_sub_wedge(self, values):
        return self.get_connection().call_sp_write(
            procname="insert_screening_strategy_sub_wedge", args=(values)
        )
Example #13
0
class EMAcquisition(Acquisition):
    """EMAcquisition provides methods to store data in the MotionCorrection and CTF tables."""
    def __init__(self):
        self.insert_data_collection_group = super(
            EMAcquisition, self).upsert_data_collection_group
        self.insert_data_collection = super(EMAcquisition,
                                            self).upsert_data_collection
        self.update_data_collection_group = super(
            EMAcquisition, self).upsert_data_collection_group
        self.update_data_collection = super(EMAcquisition,
                                            self).upsert_data_collection

    _movie_params = StrictOrderedDict([
        ("movieId", None),
        ("dataCollectionId", None),
        ("movieNumber", None),
        ("movieFullPath", None),
        ("createdTimeStamp", None),
        ("positionX", None),
        ("positionY", None),
        ("nominalDefocus", None),
    ])

    _motion_correction_params = StrictOrderedDict([
        ("motionCorrectionId", None),
        ("movieId", None),
        ("autoProcProgramId", None),
        ("imageNumber", None),
        ("firstFrame", None),
        ("lastFrame", None),
        ("dosePerFrame", None),
        ("totalMotion", None),
        ("averageMotionPerFrame", None),
        ("driftPlotFullPath", None),
        ("micrographFullPath", None),
        ("micrographSnapshotFullPath", None),
        ("fftFullPath", None),
        ("fftCorrectedFullPath", None),
        ("patchesUsedX", None),
        ("patchesUsedY", None),
        ("comments", None),
    ])

    _ctf_params = StrictOrderedDict([
        ("ctfId", None),
        ("motionCorrectionId", None),
        ("autoProcProgramId", None),
        ("boxSizeX", None),
        ("boxSizeY", None),
        ("minResolution", None),
        ("maxResolution", None),
        ("minDefocus", None),
        ("maxDefocus", None),
        ("defocusStepSize", None),
        ("astigmatism", None),
        ("astigmatismAngle", None),
        ("estimatedResolution", None),
        ("estimatedDefocus", None),
        ("amplitudeContrast", None),
        ("ccValue", None),
        ("fftTheoreticalFullPath", None),
        ("comments", None),
    ])

    _motion_correction_drift_params = StrictOrderedDict([
        ("motionCorrectionDriftId", None),
        ("motionCorrectionId", None),
        ("frameNumber", None),
        ("deltaX", None),
        ("deltaY", None),
    ])

    @classmethod
    def get_movie_params(cls):
        return copy.deepcopy(cls._movie_params)

    @classmethod
    def get_motion_correction_params(cls):
        return copy.deepcopy(cls._motion_correction_params)

    @classmethod
    def get_ctf_params(cls):
        return copy.deepcopy(cls._ctf_params)

    @classmethod
    def get_motion_correction_drift_params(cls):
        return copy.deepcopy(cls._motion_correction_drift_params)

    def insert_movie(self, values):
        """Store new movie params."""
        return self.get_connection().call_sp_write(procname="upsert_movie",
                                                   args=values)

    def insert_motion_correction(self, values):
        """Store new motion correction params."""
        return self.get_connection().call_sp_write(
            procname="upsert_motion_correction", args=values)

    def insert_ctf(self, values):
        """Store new ctf params."""
        return self.get_connection().call_sp_write(procname="upsert_ctf",
                                                   args=values)

    def insert_motion_correction_drift(self, values):
        """Store new motion correction drift params."""
        return self.get_connection().call_sp_write(
            procname="upsert_motion_correction_drift", args=values)
Example #14
0
class Core(ispyb.interface.core.IF):
    """Core provides methods to store and retrieve data in the core tables."""
    def __init__(self):
        pass

    _proposal_params = StrictOrderedDict([
        ("id", None),
        ("person_id", None),
        ("title", None),
        ("proposal_code", None),
        ("proposal_number", None),
        ("proposal_type", None),
        ("external_pk_uuid", None),
    ])

    _session_for_proposal_code_number_params = StrictOrderedDict([
        ("id", None),
        ("proposal_code", None),
        ("proposal_number", None),
        ("visit_number", None),
        ("beamline_setup_id", None),
        ("start_date", None),
        ("end_date", None),
        ("beamline_name", None),
        ("title", None),
        ("beamline_operator", None),
        ("nb_shifts", None),
        ("scheduled", None),
        ("used_flag", None),
        ("comments", None),
        ("external_pk_id", None),
        ("external_pk_uuid", None),
    ])

    _person_params = StrictOrderedDict([
        ("id", None),
        ("laboratory_id", None),
        ("family_name", None),
        ("given_name", None),
        ("title", None),
        ("email_address", None),
        ("phone_number", None),
        ("login", None),
        ("external_pk_id", None),
        ("external_pk_uuid", None),
    ])

    _proposal_has_person_params = StrictOrderedDict([("id", None),
                                                     ("proposal_id", None),
                                                     ("person_id", None),
                                                     ("role", None)])

    _session_has_person_params = StrictOrderedDict([("session_id", None),
                                                    ("person_id", None),
                                                    ("role", None),
                                                    ("remote", None)])

    _sample_params = StrictOrderedDict([
        ("id", None),
        ("authLogin", None),
        ("crystalid", None),
        ("containerid", None),
        ("name", None),
        ("code", None),
        ("location", None),
        ("holder_length", None),
        ("loop_length", None),
        ("loop_type", None),
        ("wire_width", None),
        ("comments", None),
        ("status", None),
        ("is_in_sc", None),
    ])

    @classmethod
    def get_proposal_params(cls):
        return copy.deepcopy(cls._proposal_params)

    @classmethod
    def get_session_for_proposal_code_number_params(cls):
        return copy.deepcopy(cls._session_for_proposal_code_number_params)

    @classmethod
    def get_person_params(cls):
        return copy.deepcopy(cls._person_params)

    @classmethod
    def get_proposal_has_person_params(cls):
        return copy.deepcopy(cls._proposal_has_person_params)

    @classmethod
    def get_session_has_person_params(cls):
        return copy.deepcopy(cls._session_has_person_params)

    @classmethod
    def get_sample_params(cls):
        return copy.deepcopy(cls._sample_params)

    def upsert_proposal(self, values):
        """Insert or update a proposal"""
        return self.get_connection().call_sp_write(procname="upsert_proposal",
                                                   args=values)

    def upsert_session_for_proposal_code_number(self, values):
        """Insert or update a session for a certain proposal with given proposal code and number."""
        return self.get_connection().call_sp_write(
            procname="upsert_session_for_proposal_code_number", args=values)

    def upsert_person(self, values):
        """Insert or update a person"""
        return self.get_connection().call_sp_write(procname="upsert_person",
                                                   args=values)

    def upsert_session_has_person(self, values):
        """Insert or update a session-person association"""
        return self.get_connection().call_sp_write(
            procname="upsert_session_has_person", args=values)

    def upsert_proposal_has_person(self, values):
        """Insert or update a proposal-person association"""
        return self.get_connection().call_sp_write(
            procname="upsert_proposal_has_person", args=values)

    def upsert_sample(self, values):
        """Insert or update sample."""
        return self.get_connection().call_sp_write(procname="upsert_sample",
                                                   args=values)

    def retrieve_samples_not_loaded_for_container_reg_barcode(self, barcode):
        """Retrieve the not-yet loaded samples in the most recent container that corresponds with the given container registry barcode"""
        return self.get_connection().call_sp_retrieve(
            procname="retrieve_samples_not_loaded_for_container_reg_barcode",
            args=(barcode, ),
        )

    def retrieve_visit_id(self, visit):
        """Get the database ID for a visit on the form mx1234-5."""
        return self.get_connection().call_sf_retrieve(
            funcname="retrieve_visit_id", args=(visit, ))

    def retrieve_datacollection_id(self, img_filename, img_fileloc):
        """Get the database ID for the data collection corresponding to the given diffraction image file."""
        return self.get_connection().call_sf_retrieve(
            funcname="retrieve_datacollection_id",
            args=(img_filename, img_fileloc))

    def retrieve_current_sessions(self, beamline, tolerance_mins=0):
        """Get a result-set with the currently active sessions on the given beamline."""
        return self.get_connection().call_sp_retrieve(
            procname="retrieve_current_sessions",
            args=(beamline, tolerance_mins))

    def retrieve_sessions_for_beamline_and_run(self, beamline, run):
        """Get a result-set with the sessions associated with the given beamline/instrument and run."""
        return self.get_connection().call_sp_retrieve(
            procname="retrieve_sessions_for_beamline_and_run",
            args=(beamline, run))

    def retrieve_sessions_for_person_login(self, login):
        """Get a result-set with the sessions associated with the given unique person login."""
        return self.get_connection().call_sp_retrieve(
            procname="retrieve_sessions_for_person_login", args=(login, ))

    def retrieve_current_sessions_for_person(self,
                                             beamline,
                                             fed_id,
                                             tolerance_mins=0):
        """Get a result-set with the currently active sessions on the given beamline."""
        return self.get_connection().call_sp_retrieve(
            procname="retrieve_current_sessions_for_person",
            args=(beamline, fed_id, tolerance_mins),
        )

    def retrieve_most_recent_session(self, beamline, proposal_code):
        """Get a result-set with the most recent session on the given beamline for the given proposal code"""
        return self.get_connection().call_sp_retrieve(
            procname="retrieve_most_recent_session",
            args=(beamline, proposal_code))

    def retrieve_expired_sessions_for_instrument_and_period(
            self, instrument, start_date, end_date):
        """Returns a multi-row result-set with the sessions that ended within the window defined by start_ate and end_date on instrument given by p_instrument (can contain database wildcards)"""
        return self.get_connection().call_sp_retrieve(
            procname="retrieve_expired_sessions_for_instrument_and_period",
            args=(instrument, start_date, end_date),
        )

    def retrieve_persons_for_proposal(self, proposal_code, proposal_number):
        """Get a result-set with the persons associated with a given proposal specified by proposal code, proposal_number"""
        return self.get_connection().call_sp_retrieve(
            procname="retrieve_persons_for_proposal",
            args=(proposal_code, proposal_number),
        )

    def retrieve_persons_for_session(self, proposal_code, proposal_number,
                                     visit_number):
        """Get a result-set with the persons associated with a given session specified by proposal code, proposal_number, visit_number"""
        return self.get_connection().call_sp_retrieve(
            procname="retrieve_persons_for_session",
            args=(proposal_code, proposal_number, visit_number),
        )

    def retrieve_current_cm_sessions(self, beamline):
        """Get a result-set with the currently active commissioning (cm) sessions on the given beamline."""
        return self.get_connection().call_sp_retrieve(
            procname="retrieve_current_cm_sessions", args=(beamline, ))

    def retrieve_active_plates(self, beamline):
        """Get a result-set with the submitted plates not yet in local storage on a given beamline"""
        return self.get_connection().call_sp_retrieve(
            procname="retrieve_containers_submitted_non_ls", args=(beamline, ))

    def retrieve_proposal_title(self,
                                proposal_code,
                                proposal_number,
                                auth_login=None):
        """Get the title of a given proposal"""
        return self.get_connection().call_sp_retrieve(
            procname="retrieve_proposal_title",
            args=(proposal_code, proposal_number, auth_login),
        )
class EMAcquisition(Acquisition):
    """EMAcquisition provides methods to store data in the MotionCorrection and CTF tables."""
    def __init__(self):
        self.insert_data_collection_group = super(
        ).upsert_data_collection_group
        self.insert_data_collection = super().upsert_data_collection
        self.update_data_collection_group = super(
        ).upsert_data_collection_group
        self.update_data_collection = super().upsert_data_collection

    _movie_params = StrictOrderedDict([
        ("movieId", None),
        ("dataCollectionId", None),
        ("movieNumber", None),
        ("movieFullPath", None),
        ("createdTimeStamp", None),
        ("positionX", None),
        ("positionY", None),
        ("nominalDefocus", None),
    ])

    _motion_correction_drift_params = StrictOrderedDict([
        ("motionCorrectionDriftId", None),
        ("motionCorrectionId", None),
        ("frameNumber", None),
        ("deltaX", None),
        ("deltaY", None),
    ])

    @classmethod
    def get_movie_params(cls):
        return copy.deepcopy(cls._movie_params)

    @classmethod
    def get_motion_correction_drift_params(cls):
        return copy.deepcopy(cls._motion_correction_drift_params)

    def insert_movie(self, values):
        """Store new movie params."""
        return self.get_connection().call_sp_write(procname="upsert_movie",
                                                   args=values)

    def insert_motion_correction(
        self,
        motion_correction_id=None,
        movie_id=None,
        auto_proc_program_id=None,
        image_number=None,
        first_frame=None,
        last_frame=None,
        dose_per_frame=None,
        total_motion=None,
        average_motion_per_frame=None,
        drift_plot_full_path=None,
        micrograph_full_path=None,
        micrograph_snapshot_full_path=None,
        fft_full_path=None,
        fft_corrected_full_path=None,
        patches_used_x=None,
        patches_used_y=None,
        comments=None,
    ):
        """Store new motion correction parameters."""
        return self.get_connection().call_sp_write(
            procname="upsert_motion_correction",
            args=(
                motion_correction_id,
                movie_id,
                auto_proc_program_id,
                image_number,
                first_frame,
                last_frame,
                dose_per_frame,
                total_motion,
                average_motion_per_frame,
                drift_plot_full_path,
                micrograph_full_path,
                micrograph_snapshot_full_path,
                fft_full_path,
                fft_corrected_full_path,
                patches_used_x,
                patches_used_y,
                comments,
            ),
        )

    def insert_ctf(
        self,
        ctf_id=None,
        motion_correction_id=None,
        auto_proc_program_id=None,
        box_size_x=None,
        box_size_y=None,
        min_resolution=None,
        max_resolution=None,
        min_defocus=None,
        max_defocus=None,
        defocus_step_size=None,
        astigmatism=None,
        astigmatism_angle=None,
        estimated_resolution=None,
        estimated_defocus=None,
        amplitude_contrast=None,
        cc_value=None,
        fft_theoretical_full_path=None,
        comments=None,
    ):
        """Store new contrast transfer function parameters."""
        return self.get_connection().call_sp_write(
            procname="upsert_ctf",
            args=(
                ctf_id,
                motion_correction_id,
                auto_proc_program_id,
                box_size_x,
                box_size_y,
                min_resolution,
                max_resolution,
                min_defocus,
                max_defocus,
                defocus_step_size,
                astigmatism,
                astigmatism_angle,
                estimated_resolution,
                estimated_defocus,
                amplitude_contrast,
                cc_value,
                fft_theoretical_full_path,
                comments,
            ),
        )

    def insert_motion_correction_drift(self, values):
        """Store new motion correction drift params."""
        return self.get_connection().call_sp_write(
            procname="upsert_motion_correction_drift", args=values)

    def insert_particle_picker(
        self,
        particle_picker_id=None,
        first_motion_correction_id=None,
        auto_proc_program_id=None,
        particle_picking_template=None,
        particle_diameter=None,
        number_of_particles=None,
        summary_image_full_path=None,
    ):
        """Store new particle picker parameters."""
        return self.get_connection().call_sp_write(
            procname="upsert_particle_picker_v2",
            args=(
                particle_picker_id,
                first_motion_correction_id,
                auto_proc_program_id,
                particle_picking_template,
                particle_diameter,
                number_of_particles,
                summary_image_full_path,
            ),
        )

    def insert_particle_classification_group(
        self,
        particle_classification_group_id=None,
        particle_picker_id=None,
        auto_proc_program_id=None,
        type=None,
        batch_number=None,
        number_of_particles_per_batch=None,
        number_of_classes_per_batch=None,
        symmetry=None,
    ):
        """Store new particle classification group parameters."""
        return self.get_connection().call_sp_write(
            procname="upsert_particle_classification_group",
            args=(
                particle_classification_group_id,
                particle_picker_id,
                auto_proc_program_id,
                type,
                batch_number,
                number_of_particles_per_batch,
                number_of_classes_per_batch,
                symmetry,
            ),
        )

    def insert_particle_classification(
        self,
        particle_classification_id=None,
        particle_classification_group_id=None,
        class_number=None,
        class_image_full_path=None,
        particles_per_class=None,
        class_distribution=None,
        rotation_accuracy=None,
        translation_accuracy=None,
        estimated_resolution=None,
        overall_fourier_completeness=None,
    ):
        """Store new particle classification parameters."""
        return self.get_connection().call_sp_write(
            procname="upsert_particle_classification_v2",
            args=(
                particle_classification_id,
                particle_classification_group_id,
                class_number,
                class_image_full_path,
                particles_per_class,
                class_distribution,
                rotation_accuracy,
                translation_accuracy,
                estimated_resolution,
                overall_fourier_completeness,
            ),
        )

    def insert_cryoem_initial_model(
        self,
        cryoem_initial_model_id=None,
        particle_classification_id=None,
        resolution=None,
        number_of_particles=None,
    ):
        """Store new cryo-em initial model parameters."""
        return self.get_connection().call_sp_write(
            procname="insert_cryoem_initial_model",
            args=(
                cryoem_initial_model_id,
                particle_classification_id,
                resolution,
                number_of_particles,
            ),
        )
Example #16
0
class MXAcquisition(Acquisition):
    """MXAcquisition provides methods to store data in the MX acquisition tables."""
    def __init__(self):
        self.insert_data_collection_group = super(
            MXAcquisition, self).upsert_data_collection_group
        self.insert_data_collection = super(MXAcquisition,
                                            self).upsert_data_collection
        self.update_data_collection_group = super(
            MXAcquisition, self).upsert_data_collection_group
        self.update_data_collection = super(MXAcquisition,
                                            self).upsert_data_collection

    _image_params = StrictOrderedDict([
        ("id", None),
        ("parentid", None),
        ("img_number", None),
        ("filename", None),
        ("file_location", None),
        ("measured_intensity", None),
        ("jpeg_path", None),
        ("jpeg_thumb_path", None),
        ("temperature", None),
        ("cumulative_intensity", None),
        ("synchrotron_current", None),
        ("comments", None),
        ("machine_msg", None),
    ])

    _dcg_grid_params = StrictOrderedDict([
        ("id", None),
        ("parentid", None),
        ("dxInMm", None),
        ("dyInMm", None),
        ("stepsX", None),
        ("stepsY", None),
        ("meshAngle", None),
        ("pixelsPerMicronX", None),
        ("pixelsPerMicronY", None),
        ("snapshotOffsetXPixel", None),
        ("snapshotOffsetYPixel", None),
        ("orientation", None),
        ("snaked", None),
    ])

    _dc_position_params = StrictOrderedDict([
        ("id", None),
        ("pos_x", None),
        ("pos_y", None),
        ("pos_z", None),
        ("scale", None),
    ])

    _energy_scan_params = StrictOrderedDict([
        ("id", None),
        ("session_id", None),
        ("sample_id", None),
        ("sub_sample_id", None),
        ("start_time", None),
        ("end_time", None),
        ("start_energy", None),
        ("end_energy", None),
        ("detector", None),
        ("element", None),
        ("edge_energy", None),
        ("synchrotron_current", None),
        ("temperature", None),
        ("peak_energy", None),
        ("peak_f_prime", None),
        ("peak_f_double_prime", None),
        ("inflection_energy", None),
        ("inflection_f_prime", None),
        ("inflection_f_double_prime", None),
        ("chooch_file_full_path", None),
        ("jpeg_chooch_file_full_path", None),
        ("scan_file_full_path", None),
        ("beam_size_horizontal", None),
        ("beam_size_vertical", None),
        ("exposure_time", None),
        ("transmission", None),
        ("flux", None),
        ("flux_end", None),
        ("comments", None),
    ])

    # Is xrayDose populated in EnergyScan? Is it relevant?

    _fluo_spectrum_params = StrictOrderedDict([
        ("id", None),
        ("session_id", None),
        ("sample_id", None),
        ("sub_sample_id", None),
        ("start_time", None),
        ("end_time", None),
        ("energy", None),
        ("file_name", None),
        ("annotated_pymca_spectrum", None),
        ("fitted_data_file_full_path", None),
        ("jpeg_scan_file_full_path", None),
        ("scan_file_full_path", None),
        ("beam_size_horizontal", None),
        ("beam_size_vertical", None),
        ("exposure_time", None),
        ("transmission", None),
        ("flux", None),
        ("flux_end", None),
        ("comments", None),
    ])

    _fluo_mapping_params = StrictOrderedDict([
        ("id", None),
        ("roi_id", None),
        ("roi_start_energy", None),
        ("roi_end_energy", None),
        ("dc_id", None),
        ("img_number", None),
        ("counts", None),
    ])

    _fluo_mapping_roi_params = StrictOrderedDict([
        ("id", None),
        ("start_energy", None),
        ("end_energy", None),
        ("element", None),
        ("edge", None),
        ("r", None),
        ("g", None),
        ("b", None),
    ])

    def upsert_xray_centring_result(
        self,
        result_id=None,
        grid_info_id=None,
        method=None,
        status=None,
        x=None,
        y=None,
    ):
        """Insert or update the xray centring result associated with a grid info
        :return: The xray centring result id.
        """
        return self.get_connection().call_sp_write(
            procname="upsert_xray_centring_result",
            args=[result_id, grid_info_id, method, status, x, y],
        )

    @classmethod
    def get_dc_position_params(cls):
        return copy.deepcopy(cls._dc_position_params)

    def update_dc_position(self, values):
        """Update the position info associated with a data collection"""
        return self.get_connection().call_sp_write("update_dc_position",
                                                   values)

    @classmethod
    def get_dcg_grid_params(cls):
        return copy.deepcopy(cls._dcg_grid_params)

    def upsert_dcg_grid(self, values):
        """Insert or update the grid info associated with a data collection group"""
        return self.get_connection().call_sp_write("upsert_dcg_grid", values)

    def retrieve_dcg_grid(self, dcgid, auth_login=None):
        """Retrieve a list of dictionaries containing the grid information for
        one data collection group id. Raises ISPyBNoResultException if there
        is no grid information available for the given DCGID.
        Generally the list will only contain a single dictionary.
        """
        return self.get_connection().call_sp_retrieve(
            procname="retrieve_grid_info_for_dcg_v2", args=(dcgid, auth_login))

    @classmethod
    def get_energy_scan_params(cls):
        return copy.deepcopy(cls._energy_scan_params)

    def upsert_energy_scan(self, values):
        """Insert or update energy scan a.k.a. edge scan"""
        return self.get_connection().call_sp_write("upsert_energy_scan",
                                                   values)

    @classmethod
    def get_fluo_spectrum_params(cls):
        return copy.deepcopy(cls._fluo_spectrum_params)

    def upsert_fluo_spectrum(self, values):
        """Insert or update XR fluorescence spectrum a.k.a. MCA spectrum"""
        return self.get_connection().call_sp_write("upsert_xfe_fluo_spectrum",
                                                   values)

    @classmethod
    def get_fluo_mapping_params(cls):
        return copy.deepcopy(cls._fluo_mapping_params)

    def upsert_fluo_mapping(self, values):
        """Insert or update XR fluorescence mapping"""
        return self.get_connection().call_sp_write("upsert_fluo_mapping",
                                                   values)

    @classmethod
    def get_fluo_mapping_roi_params(cls):
        return copy.deepcopy(cls._fluo_mapping_roi_params)

    def upsert_fluo_mapping_roi(self, values):
        """Insert or update XR fluorescence mapping region of interest"""
        return self.get_connection().call_sp_write("upsert_fluo_mapping_roi",
                                                   values)

    @classmethod
    def get_image_params(cls):
        return copy.deepcopy(cls._image_params)

    def upsert_image(self, values):
        """Insert or update MX diffraction image."""
        return self.get_connection().call_sf_write("upsert_image", values)
Example #17
0
class MXScreening(ispyb.interface.screening.IF):
    '''MXScreening provides methods to store MX characterisations and strategies.'''
    def __init__(self):
        pass

    _screening_params = StrictOrderedDict([('id', None), ('dcgid', None),
                                           ('dcid', None),
                                           ('program_version', None),
                                           ('short_comments', None),
                                           ('comments', None)])
    _screening_input_params = StrictOrderedDict([
        ('id', None), ('screening_id', None), ('beamx', None), ('beamy', None),
        ('rms_err_lim', None), ('min_fraction_indexed', None),
        ('max_fraction_rejected', None), ('min_signal2noise', None)
    ])
    _screening_output_params = StrictOrderedDict([
        ('id', None), ('screening_id', None), ('status_description', None),
        ('rejected_reflections', None), ('resolution_obtained', None),
        ('spot_deviation_r', None), ('spot_deviation_theta', None),
        ('beam_shift_x', None), ('beam_shift_y', None),
        ('num_spots_found', None), ('num_spots_used', None),
        ('num_spots_rejected', None), ('mosaicity', None),
        ('i_over_sigma', None), ('diffraction_rings', None),
        ('mosaicity_estimated', 0), ('ranking_resolution', None),
        ('program', None), ('dose_total', None), ('total_exposure_time', None),
        ('total_rotation_range', None), ('total_no_images', None),
        ('rfriedel', None), ('indexing_success', 0), ('strategy_success', 0)
    ])
    _screening_output_lattice_params = StrictOrderedDict([
        ('id', None), ('screening_output_id', None), ('spacegroup', None),
        ('pointgroup', None), ('bravais_lattice', None),
        ('raw_orientation_matrix_a_x', None),
        ('raw_orientation_matrix_a_y', None),
        ('raw_orientation_matrix_a_z', None),
        ('raw_orientation_matrix_b_x', None),
        ('raw_orientation_matrix_b_y', None),
        ('raw_orientation_matrix_b_z', None),
        ('raw_orientation_matrix_c_x', None),
        ('raw_orientation_matrix_c_y', None),
        ('raw_orientation_matrix_c_z', None), ('unit_cell_a', None),
        ('unit_cell_b', None), ('unit_cell_c', None),
        ('unit_cell_alpha', None), ('unit_cell_beta', None),
        ('unit_cell_gamma', None), ('labelit_indexing', None)
    ])
    _screening_strategy_params = StrictOrderedDict([
        ('id', None), ('screening_output_id', None), ('phi_start', None),
        ('phi_end', None), ('rotation', None), ('exposure_time', None),
        ('resolution', None), ('completeness', None), ('multiplicity', None),
        ('anomalous', 0), ('program', None), ('ranking_resolution', None),
        ('transmission', None)
    ])
    _screening_strategy_wedge_params = StrictOrderedDict([
        ('id', None), ('screening_strategy_id', None), ('wedge_number', None),
        ('resolution', None), ('completeness', None), ('multiplicity', None),
        ('dose_total', None), ('no_images', None), ('phi', None),
        ('kappa', None), ('chi', None), ('comments', None),
        ('wavelength', None)
    ])
    _screening_strategy_sub_wedge_params = StrictOrderedDict([
        ('id', None), ('screening_strategy_wedge_id', None),
        ('sub_wedge_number', None), ('rotation_axis', None),
        ('axis_start', None), ('axis_end', None), ('exposure_time', None),
        ('transmission', None), ('oscillation_range', None),
        ('completeness', None), ('multiplicity', None), ('resolution', None),
        ('dose_total', None), ('no_images', None), ('comments', None)
    ])

    @classmethod
    def get_screening_params(cls):
        return copy.deepcopy(cls._screening_params)

    @classmethod
    def get_screening_input_params(cls):
        return copy.deepcopy(cls._screening_input_params)

    @classmethod
    def get_screening_output_params(cls):
        return copy.deepcopy(cls._screening_output_params)

    @classmethod
    def get_screening_output_lattice_params(cls):
        return copy.deepcopy(cls._screening_output_lattice_params)

    @classmethod
    def get_screening_strategy_params(cls):
        return copy.deepcopy(cls._screening_strategy_params)

    @classmethod
    def get_screening_strategy_wedge_params(cls):
        return copy.deepcopy(cls._screening_strategy_wedge_params)

    @classmethod
    def get_screening_strategy_sub_wedge_params(cls):
        return copy.deepcopy(cls._screening_strategy_sub_wedge_params)

    def insert_screening(self, values):
        return self.get_connection().call_sp_write(procname='insert_screening',
                                                   args=(values))

    def insert_screening_input(self, values):
        return self.get_connection().call_sp_write(
            procname='insert_screening_input', args=(values))

    def insert_screening_output(self, values):
        return self.get_connection().call_sp_write(
            procname='insert_screening_output', args=(values))

    def insert_screening_output_lattice(self, values):
        return self.get_connection().call_sp_write(
            procname='insert_screening_output_lattice', args=(values))

    def insert_screening_strategy(self, values):
        return self.get_connection().call_sp_write(
            procname='insert_screening_strategy', args=(values))

    def insert_screening_strategy_wedge(self, values):
        return self.get_connection().call_sp_write(
            procname='insert_screening_strategy_wedge', args=(values))

    def insert_screening_strategy_sub_wedge(self, values):
        return self.get_connection().call_sp_write(
            procname='insert_screening_strategy_sub_wedge', args=(values))
Example #18
0
class MXProcessing(ispyb.interface.processing.IF):
    """MXProcessing provides methods to store MX processing data."""

    _program_attachment_params = StrictOrderedDict([
        ("id", None),
        ("parentid", None),
        ("file_name", None),
        ("file_path", None),
        ("file_type", None),
        ("importance_rank", None),
    ])

    _processing_params = StrictOrderedDict([
        ("id", None),
        ("parentid", None),
        ("spacegroup", None),
        ("refinedcell_a", None),
        ("refinedcell_b", None),
        ("refinedcell_c", None),
        ("refinedcell_alpha", None),
        ("refinedcell_beta", None),
        ("refinedcell_gamma", None),
    ])

    _scaling_params = StrictOrderedDict([
        ("type", None),
        ("comments", None),
        ("res_lim_low", None),
        ("res_lim_high", None),
        ("r_merge", None),
        ("r_meas_within_iplusi_minus", None),
        ("r_meas_all_iplusi_minus", None),
        ("r_pim_within_iplusi_minus", None),
        ("r_pim_all_iplusi_minus", None),
        ("fract_partial_bias", None),
        ("n_tot_obs", None),
        ("n_tot_unique_obs", None),
        ("mean_i_sig_i", None),
        ("completeness", None),
        ("multiplicity", None),
        ("anom", "0"),
        ("anom_completeness", None),
        ("anom_multiplicity", None),
        ("cc_half", None),
        ("cc_anom", None),
    ])

    _integration_params = StrictOrderedDict([
        ("id", None),
        ("parentid", None),
        ("datacollectionid", None),
        ("programid", None),
        ("start_image_no", None),
        ("end_image_no", None),
        ("refined_detector_dist", None),
        ("refined_xbeam", None),
        ("refined_ybeam", None),
        ("rot_axis_x", None),
        ("rot_axis_y", None),
        ("rot_axis_z", None),
        ("beam_vec_x", None),
        ("beam_vec_y", None),
        ("beam_vec_z", None),
        ("cell_a", None),
        ("cell_b", None),
        ("cell_c", None),
        ("cell_alpha", None),
        ("cell_beta", None),
        ("cell_gamma", None),
        ("anom", "0"),
    ])

    _quality_indicators_params = StrictOrderedDict([
        ("id", None),
        ("datacollectionid", None),
        ("programid", None),
        ("image_number", None),
        ("spot_total", None),
        ("in_res_total", None),
        ("good_bragg_candidates", None),
        ("ice_rings", None),
        ("method1_res", None),
        ("method2_res", None),
        ("max_unit_cell", None),
        ("pct_saturation_top_50_peaks", None),
        ("in_resolution_ovrl_spots", None),
        ("bin_pop_cut_off_method2_res", None),
        ("total_integrated_signal", None),
        ("dozor_score", None),
        ("drift_factor", None),
    ])

    _run_params = StrictOrderedDict([
        ("id", None),
        ("parentid", None),
        ("success", None),
        ("message", None),
        ("pipeline", None),
        ("input_coord_file", None),
        ("output_coord_file", None),
        ("input_MTZ_file", None),
        ("output_MTZ_file", None),
        ("run_dir", None),
        ("log_file", None),
        ("cmd_line", None),
        ("r_start", None),
        ("r_end", None),
        ("rfree_start", None),
        ("rfree_end", None),
        ("starttime", None),
        ("endtime", None),
    ])

    _run_blob_params = StrictOrderedDict([
        ("id", None),
        ("parentid", None),
        ("view1", None),
        ("view2", None),
        ("view3", None),
    ])

    _job_params = StrictOrderedDict([
        ("id", None),
        ("datacollectionid", None),
        ("display_name", None),
        ("comments", None),
        ("recipe", None),
        ("automatic", None),
    ])

    _job_parameter_params = StrictOrderedDict([
        ("id", None),
        ("job_id", None),
        ("parameter_key", None),
        ("parameter_value", None),
    ])

    _job_image_sweep_params = StrictOrderedDict([
        ("id", None),
        ("job_id", None),
        ("datacollectionid", None),
        ("start_image", None),
        ("end_image", None),
    ])

    @classmethod
    def get_run_params(cls):
        return copy.deepcopy(cls._run_params)

    @classmethod
    def get_run_blob_params(cls):
        return copy.deepcopy(cls._run_blob_params)

    @classmethod
    def get_program_attachment_params(cls):
        return copy.deepcopy(cls._program_attachment_params)

    @classmethod
    def get_processing_params(cls):
        return copy.deepcopy(cls._processing_params)

    @classmethod
    def get_inner_shell_scaling_params(cls):
        sp = copy.deepcopy(cls._scaling_params)
        sp["type"] = "innerShell"
        return sp

    @classmethod
    def get_outer_shell_scaling_params(cls):
        sp = copy.deepcopy(cls._scaling_params)
        sp["type"] = "outerShell"
        return sp

    @classmethod
    def get_overall_scaling_params(cls):
        sp = copy.deepcopy(cls._scaling_params)
        sp["type"] = "overall"
        return sp

    @classmethod
    def get_integration_params(cls):
        return copy.deepcopy(cls._integration_params)

    @classmethod
    def get_quality_indicators_params(cls):
        return copy.deepcopy(cls._quality_indicators_params)

    @classmethod
    def get_job_params(cls):
        return copy.deepcopy(cls._job_params)

    @classmethod
    def get_job_parameter_params(cls):
        return copy.deepcopy(cls._job_parameter_params)

    @classmethod
    def get_job_image_sweep_params(cls):
        return copy.deepcopy(cls._job_image_sweep_params)

    def upsert_program_ex(
        self,
        program_id=None,
        job_id=None,
        name=None,
        command=None,
        environment=None,
        message=None,
        status=None,
        time_defined=None,
        time_start=None,
        time_update=None,
    ):
        """Store new or update existing processing program information.

        :param status: An integer describing the processing status. 1 means
                       success, 0 means failure. If left at None then the
                       status is left undefined or unchanged. The underlying
                       stored procedure does not allow any more changes to the
                       record once the status is set.
        :return: The program_id.
        """
        return self.get_connection().call_sp_write(
            procname="upsert_processing_program",
            args=[
                program_id,
                command,
                name,
                status,
                message,
                time_start,
                time_update,
                environment,
                job_id,
                time_defined,
            ],
        )

    def upsert_program_attachment(self, values):
        """Store new or update existing program attachment params."""
        return self.get_connection().call_sp_write(
            procname="upsert_processing_program_attachment_v2", args=values)

    def upsert_program_message(self,
                               id=None,
                               program_id=None,
                               severity=None,
                               message=None,
                               description=None):
        """Store new or update existing program message params.

        :param severity: ERROR,WARNING or INFO
        :param message: The message - max 200 characters
        :param description: A more detailed description of the message
        :return: The program_message_id.
        """
        return self.get_connection().call_sp_write(
            procname="upsert_processing_program_message",
            args=[id, program_id, severity, message, description],
        )

    def upsert_processing(self, values):
        return self.get_connection().call_sp_write(
            procname="upsert_processing", args=values)

    def insert_scaling(self, parent_id, values1, values2, values3):
        id = None
        values = [id, parent_id] + values1 + values2 + values3
        return self.get_connection().call_sp_write(
            procname="insert_processing_scaling", args=values)

    def upsert_integration(self, values):
        return self.get_connection().call_sp_write(
            procname="upsert_processing_integration", args=values)

    def upsert_quality_indicators(self, values):
        return self.get_connection().call_sp_write(
            procname="upsert_quality_indicators", args=values)

    def upsert_run(self, values):
        """Update or insert new entry with info about an MX molecular replacement run, e.g. Dimple."""
        return self.get_connection().call_sp_write(procname="upsert_mrrun",
                                                   args=values)

    def upsert_run_blob(self, values):
        """Update or insert new entry with info about views (image paths) for an MX molecular replacement run, e.g. Dimple."""
        return self.get_connection().call_sp_write(
            procname="upsert_mrrun_blob", args=values)

    def retrieve_job(self, id, auth_login=None):
        """Retrieve info about the processing job with id=id"""
        return self.get_connection().call_sp_retrieve(
            procname="retrieve_processing_job_v2", args=(id, auth_login))

    def retrieve_job_parameters(self, id, auth_login=None):
        """Retrieve info about the parameters for processing job with id=id"""
        return self.get_connection().call_sp_retrieve(
            procname="retrieve_processing_job_parameters_v2",
            args=(id, auth_login))

    def retrieve_job_image_sweeps(self, id, auth_login=None):
        """Retrieve info about the image sweeps for job with id=id"""
        return self.get_connection().call_sp_retrieve(
            procname="retrieve_processing_job_image_sweeps_v2",
            args=(id, auth_login))

    def retrieve_programs_for_job_id(self, id, auth_login=None):
        """Retrieve the processing instances associated with the given processing job ID"""
        return self.get_connection().call_sp_retrieve(
            procname="retrieve_processing_programs_for_job_id_v2",
            args=(id, auth_login))

    def retrieve_program_attachments_for_data_collection_group_and_program(
            self, id, program, auth_login=None):
        """Retrieve the processing program attachments associated with the given data collection group and processing program"""
        return self.get_connection().call_sp_retrieve(
            procname=
            "retrieve_processing_program_attachments_for_dc_group_program_v2",
            args=(id, program, auth_login),
        )

    def retrieve_program_attachments_for_program_id(self, id, auth_login=None):
        """Retrieve the processing program attachments associated with the given processing program ID"""
        return self.get_connection().call_sp_retrieve(
            procname=
            "retrieve_processing_program_attachments_for_program_id_v2",
            args=(id, auth_login),
        )

    def upsert_job(self, values):
        """Update or insert a new processing job entry"""
        return self.get_connection().call_sp_write(
            procname="upsert_processing_job", args=values)

    def upsert_job_parameter(self, values):
        """Update or insert a new processing job parameter entry"""
        return self.get_connection().call_sp_write(
            procname="upsert_processing_job_parameter", args=values)

    def upsert_job_image_sweep(self, values):
        """Update or insert a new processing job image sweep entry"""
        return self.get_connection().call_sp_write(
            procname="upsert_processing_job_image_sweep", args=values)

    def upsert_sample_image_auto_score(self, image_full_path, schema_name,
                                       score_class, probability):
        """Store new or update existing automatic score for a sample image.

        :param image_full_path: The full path to the sample image
        :param schema_name: The name of the scoring schema, e.g. MARCO
        :param score_class: A string that describes the thing we're scoring, e.g. crystal, clear, precipitant, other
        :param probability: A float indicating the probability that the image contains the score_class
        :return: Nothing.
        """
        self.get_connection().call_sp_write(
            procname="upsert_sample_image_auto_score",
            args=[image_full_path, schema_name, score_class, probability],
        )
Example #19
0
class MXProcessing(ispyb.interface.processing.IF):
    '''MXProcessing provides methods to store MX processing data.'''
    def __init__(self):
        pass

    _program_params = StrictOrderedDict([('id', None), ('cmd_line', None),
                                         ('programs', None), ('status', None),
                                         ('message', None),
                                         ('starttime', None),
                                         ('updatetime', None),
                                         ('environment', None),
                                         ('processing_job_id', None),
                                         ('recordtime', None)])

    _program_attachment_params = StrictOrderedDict([('id', None),
                                                    ('parentid', None),
                                                    ('file_name', None),
                                                    ('file_path', None),
                                                    ('file_type', None)])

    _processing_params = StrictOrderedDict([('id', None), ('parentid', None),
                                            ('spacegroup', None),
                                            ('refinedcell_a', None),
                                            ('refinedcell_b', None),
                                            ('refinedcell_c', None),
                                            ('refinedcell_alpha', None),
                                            ('refinedcell_beta', None),
                                            ('refinedcell_gamma', None)])

    _scaling_params = StrictOrderedDict([('type', None), ('comments', None),
                                         ('res_lim_low', None),
                                         ('res_lim_high', None),
                                         ('r_merge', None),
                                         ('r_meas_within_iplusi_minus', None),
                                         ('r_meas_all_iplusi_minus', None),
                                         ('r_pim_within_iplusi_minus', None),
                                         ('r_pim_all_iplusi_minus', None),
                                         ('fract_partial_bias', None),
                                         ('n_tot_obs', None),
                                         ('n_tot_unique_obs', None),
                                         ('mean_i_sig_i', None),
                                         ('completeness', None),
                                         ('multiplicity', None), ('anom', '0'),
                                         ('anom_completeness', None),
                                         ('anom_multiplicity', None),
                                         ('cc_half', None), ('cc_anom', None)])

    _integration_params = StrictOrderedDict([
        ('id', None), ('parentid', None), ('datacollectionid', None),
        ('programid', None), ('start_image_no', None), ('end_image_no', None),
        ('refined_detector_dist', None), ('refined_xbeam', None),
        ('refined_ybeam', None), ('rot_axis_x', None), ('rot_axis_y', None),
        ('rot_axis_z', None), ('beam_vec_x', None), ('beam_vec_y', None),
        ('beam_vec_z', None), ('cell_a', None), ('cell_b', None),
        ('cell_c', None), ('cell_alpha', None), ('cell_beta', None),
        ('cell_gamma', None), ('anom', '0')
    ])

    _quality_indicators_params = StrictOrderedDict([
        ('id', None), ('datacollectionid', None), ('programid', None),
        ('image_number', None), ('spot_total', None), ('in_res_total', None),
        ('good_bragg_candidates', None), ('ice_rings', None),
        ('method1_res', None), ('method2_res', None), ('max_unit_cell', None),
        ('pct_saturation_top_50_peaks', None),
        ('in_resolution_ovrl_spots', None),
        ('bin_pop_cut_off_method2_res', None),
        ('total_integrated_signal', None), ('dozor_score', None),
        ('drift_factor', None)
    ])

    _run_params = StrictOrderedDict([('id', None), ('parentid', None),
                                     ('success', None), ('message', None),
                                     ('pipeline', None),
                                     ('input_coord_file', None),
                                     ('output_coord_file', None),
                                     ('input_MTZ_file', None),
                                     ('output_MTZ_file', None),
                                     ('run_dir', None), ('log_file', None),
                                     ('cmd_line', None), ('r_start', None),
                                     ('r_end', None), ('rfree_start', None),
                                     ('rfree_end', None), ('starttime', None),
                                     ('endtime', None)])

    _run_blob_params = StrictOrderedDict([('id', None), ('parentid', None),
                                          ('view1', None), ('view2', None),
                                          ('view3', None)])

    _job_params = StrictOrderedDict([('id', None), ('datacollectionid', None),
                                     ('display_name', None),
                                     ('comments', None), ('recipe', None),
                                     ('automatic', None)])

    _job_parameter_params = StrictOrderedDict([('id', None), ('job_id', None),
                                               ('parameter_key', None),
                                               ('parameter_value', None)])

    _job_image_sweep_params = StrictOrderedDict([('id', None),
                                                 ('job_id', None),
                                                 ('datacollectionid', None),
                                                 ('start_image', None),
                                                 ('end_image', None)])

    @classmethod
    def get_run_params(cls):
        return copy.deepcopy(cls._run_params)

    @classmethod
    def get_run_blob_params(cls):
        return copy.deepcopy(cls._run_blob_params)

    @classmethod
    def get_program_params(cls):
        return copy.deepcopy(cls._program_params)

    @classmethod
    def get_program_attachment_params(cls):
        return copy.deepcopy(cls._program_attachment_params)

    @classmethod
    def get_processing_params(cls):
        return copy.deepcopy(cls._processing_params)

    @classmethod
    def get_inner_shell_scaling_params(cls):
        sp = copy.deepcopy(cls._scaling_params)
        sp['type'] = 'innerShell'
        return sp

    @classmethod
    def get_outer_shell_scaling_params(cls):
        sp = copy.deepcopy(cls._scaling_params)
        sp['type'] = 'outerShell'
        return sp

    @classmethod
    def get_overall_scaling_params(cls):
        sp = copy.deepcopy(cls._scaling_params)
        sp['type'] = 'overall'
        return sp

    @classmethod
    def get_integration_params(cls):
        return copy.deepcopy(cls._integration_params)

    @classmethod
    def get_quality_indicators_params(cls):
        return copy.deepcopy(cls._quality_indicators_params)

    @classmethod
    def get_job_params(cls):
        return copy.deepcopy(cls._job_params)

    @classmethod
    def get_job_parameter_params(cls):
        return copy.deepcopy(cls._job_parameter_params)

    @classmethod
    def get_job_image_sweep_params(cls):
        return copy.deepcopy(cls._job_image_sweep_params)

    def upsert_program(self, values):
        '''Store new or update existing program params.'''
        return self.get_connection().call_sp_write(
            procname='upsert_processing_program',
            args=values)  # doesn't work with dict cursors

    def upsert_program_attachment(self, values):
        '''Store new or update existing program attachment params.'''
        return self.get_connection().call_sp_write(
            procname='upsert_processing_program_attachment', args=values)

    def upsert_processing(self, values):
        return self.get_connection().call_sp_write(
            procname='upsert_processing', args=values)

    def insert_scaling(self, parent_id, values1, values2, values3):
        id = None
        values = [id, parent_id] + values1 + values2 + values3
        return self.get_connection().call_sp_write(
            procname='insert_processing_scaling', args=values)

    def upsert_integration(self, values):
        return self.get_connection().call_sp_write(
            procname='upsert_processing_integration', args=values)

    def upsert_quality_indicators(self, values):
        return self.get_connection().call_sp_write(
            procname='upsert_quality_indicators', args=values)

    def upsert_run(self, values):
        '''Update or insert new entry with info about an MX molecular replacement run, e.g. Dimple.'''
        return self.get_connection().call_sp_write(procname='upsert_mrrun',
                                                   args=values)

    def upsert_run_blob(self, values):
        '''Update or insert new entry with info about views (image paths) for an MX molecular replacement run, e.g. Dimple.'''
        return self.get_connection().call_sp_write(
            procname='upsert_mrrun_blob', args=values)

    def retrieve_job(self, id):
        '''Retrieve info about the processing job with id=id'''
        return self.get_connection().call_sp_retrieve(
            procname='retrieve_processing_job', args=(id, ))

    def retrieve_job_parameters(self, id):
        '''Retrieve info about the parameters for processing job with id=id'''
        return self.get_connection().call_sp_retrieve(
            procname='retrieve_processing_job_parameters', args=(id, ))

    def retrieve_job_image_sweeps(self, id):
        '''Retrieve info about the image sweeps for job with id=id'''
        return self.get_connection().call_sp_retrieve(
            procname='retrieve_processing_job_image_sweeps', args=(id, ))

    def retrieve_programs_for_job_id(self, id):
        '''Retrieve the processing instances associated with the given processing job ID'''
        return self.get_connection().call_sp_retrieve(
            procname='retrieve_processing_programs_for_job_id', args=(id, ))

    def upsert_job(self, values):
        '''Update or insert a new processing job entry'''
        return self.get_connection().call_sp_write(
            procname='upsert_processing_job', args=values)

    def upsert_job_parameter(self, values):
        '''Update or insert a new processing job parameter entry'''
        return self.get_connection().call_sp_write(
            procname='upsert_processing_job_parameter', args=values)

    def upsert_job_image_sweep(self, values):
        '''Update or insert a new processing job image sweep entry'''
        return self.get_connection().call_sp_write(
            procname='upsert_processing_job_image_sweep', args=values)