Skip to content

Commit

Permalink
Merge pull request #24 from DiamondLightSource/v4.0.0
Browse files Browse the repository at this point in the history
Changes to support EM, bump version to 4.0.0
  • Loading branch information
KarlLevik committed Dec 8, 2017
2 parents 99bf341 + 126307e commit 9ca5e07
Show file tree
Hide file tree
Showing 4 changed files with 151 additions and 12 deletions.
86 changes: 81 additions & 5 deletions conf/schema.sql
Expand Up @@ -3747,10 +3747,13 @@ CREATE TABLE `MotionCorrection` (
`fftFullPath` varchar(255) DEFAULT NULL COMMENT 'Full path to the jpg image of the raw micrograph FFT',
`fftCorrectedFullPath` varchar(255) DEFAULT NULL COMMENT 'Full path to the jpg image of the drift corrected micrograph FFT',
`comments` varchar(255) DEFAULT NULL,
`movieId` int(11) unsigned DEFAULT NULL,
PRIMARY KEY (`motionCorrectionId`),
KEY `_MotionCorrection_ibfk1` (`dataCollectionId`),
KEY `MotionCorrection_ibfk2` (`autoProcProgramId`),
KEY `MotionCorrection_ibfk3` (`movieId`),
CONSTRAINT `MotionCorrection_ibfk2` FOREIGN KEY (`autoProcProgramId`) REFERENCES `AutoProcProgram` (`autoProcProgramId`),
CONSTRAINT `MotionCorrection_ibfk3` FOREIGN KEY (`movieId`) REFERENCES `Movie` (`movieId`),
CONSTRAINT `_MotionCorrection_ibfk1` FOREIGN KEY (`dataCollectionId`) REFERENCES `DataCollection` (`dataCollectionId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
Expand Down Expand Up @@ -3826,6 +3829,37 @@ LOCK TABLES `MotorPosition` WRITE;
/*!40000 ALTER TABLE `MotorPosition` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `Movie`
--

DROP TABLE IF EXISTS `Movie`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `Movie` (
`movieId` int(11) unsigned NOT NULL AUTO_INCREMENT,
`dataCollectionId` int(11) unsigned DEFAULT NULL,
`movieNumber` mediumint(8) unsigned DEFAULT NULL,
`movieFullPath` varchar(255) DEFAULT NULL,
`createdTimeStamp` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`positionX` float DEFAULT NULL,
`positionY` float DEFAULT NULL,
`nominalDefocus` float unsigned DEFAULT NULL COMMENT 'Nominal defocus, Units: A',
PRIMARY KEY (`movieId`),
KEY `Movie_ibfk1` (`dataCollectionId`),
CONSTRAINT `Movie_ibfk1` FOREIGN KEY (`dataCollectionId`) REFERENCES `DataCollection` (`dataCollectionId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `Movie`
--

LOCK TABLES `Movie` WRITE;
/*!40000 ALTER TABLE `Movie` DISABLE KEYS */;
/*!40000 ALTER TABLE `Movie` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `PDB`
--
Expand Down Expand Up @@ -10601,7 +10635,7 @@ DELIMITER ;
DELIMITER ;;
CREATE PROCEDURE `upsert_motion_correction`(
INOUT p_motionCorrectionId int(11) unsigned,
p_dataCollectionId int(11) unsigned,
p_movieId int(11) unsigned,
p_autoProcProgramId int(11) unsigned,
p_imageNumber smallint unsigned,
p_firstFrame smallint unsigned,
Expand All @@ -10620,11 +10654,11 @@ CREATE PROCEDURE `upsert_motion_correction`(
)
MODIFIES SQL DATA
BEGIN
INSERT INTO MotionCorrection (motionCorrectionId, dataCollectionId, autoProcProgramId, imageNumber, firstFrame, lastFrame, dosePerFrame, totalMotion, averageMotionPerFrame, driftPlotFullPath, micrographFullPath, micrographSnapshotFullPath, fftFullPath, fftCorrectedFullPath, patchesUsedX, patchesUsedY, comments)
VALUES (p_motionCorrectionId, p_dataCollectionId, p_autoProcProgramId, p_imageNumber, p_firstFrame, p_lastFrame, p_dosePerFrame, p_totalMotion, p_averageMotionPerFrame, p_driftPlotFullPath, p_micrographFullPath, p_micrographSnapshotFullPath, p_fftFullPath, p_fftCorrectedFullPath, p_patchesUsedX, p_patchesUsedY, p_comments)
INSERT INTO MotionCorrection (motionCorrectionId, movieId, autoProcProgramId, imageNumber, firstFrame, lastFrame, dosePerFrame, totalMotion, averageMotionPerFrame, driftPlotFullPath, micrographFullPath, micrographSnapshotFullPath, fftFullPath, fftCorrectedFullPath, patchesUsedX, patchesUsedY, comments)
VALUES (p_motionCorrectionId, p_movieId, p_autoProcProgramId, p_imageNumber, p_firstFrame, p_lastFrame, p_dosePerFrame, p_totalMotion, p_averageMotionPerFrame, p_driftPlotFullPath, p_micrographFullPath, p_micrographSnapshotFullPath, p_fftFullPath, p_fftCorrectedFullPath, p_patchesUsedX, p_patchesUsedY, p_comments)
ON DUPLICATE KEY UPDATE
motionCorrectionId = IFNULL(p_motionCorrectionId, motionCorrectionId),
dataCollectionId = IFNULL(p_dataCollectionId, dataCollectionId),
movieId = IFNULL(p_movieId, movieId),
autoProcProgramId = IFNULL(p_autoProcProgramId, autoProcProgramId),
imageNumber = IFNULL(p_imageNumber, imageNumber),
firstFrame = IFNULL(p_firstFrame, firstFrame),
Expand Down Expand Up @@ -10692,6 +10726,48 @@ DELIMITER ;
/*!50003 SET character_set_client = @saved_cs_client */ ;
/*!50003 SET character_set_results = @saved_cs_results */ ;
/*!50003 SET collation_connection = @saved_col_connection */ ;
/*!50003 DROP PROCEDURE IF EXISTS `upsert_movie` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
/*!50003 SET character_set_client = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection = utf8_general_ci */ ;
/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
/*!50003 SET sql_mode = '' */ ;
DELIMITER ;;
CREATE PROCEDURE `upsert_movie`(
INOUT p_movieId int(11) unsigned,
p_dataCollectionId int(11) unsigned,
p_movieNumber mediumint unsigned,
p_movieFullPath varchar(255),
p_createdTimeStamp timestamp,
p_positionX float,
p_positionY float,
p_nominalDefocus float unsigned
)
MODIFIES SQL DATA
BEGIN
INSERT INTO Movie (movieId, dataCollectionId, movieNumber, movieFullPath, createdTimeStamp, positionX, positionY, nominalDefocus)
VALUES (p_movieId, p_dataCollectionId, p_movieNumber, p_movieFullPath, p_createdTimeStamp, p_positionX, p_positionY, p_nominalDefocus)
ON DUPLICATE KEY UPDATE
dataCollectionId = IFNULL(p_dataCollectionId, dataCollectionId),
movieNumber = IFNULL(p_movieNumber, movieNumber),
movieFullPath = IFNULL(p_movieFullPath, movieFullPath),
createdTimeStamp = IFNULL(p_createdTimeStamp, createdTimeStamp),
positionX = IFNULL(p_positionX, positionX),
positionY = IFNULL(p_positionY, positionY),
nominalDefocus = IFNULL(p_nominalDefocus, nominalDefocus);

IF p_movieId IS NULL THEN
SET p_movieId = LAST_INSERT_ID();
END IF;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
/*!50003 SET character_set_client = @saved_cs_client */ ;
/*!50003 SET character_set_results = @saved_cs_results */ ;
/*!50003 SET collation_connection = @saved_col_connection */ ;
/*!50003 DROP PROCEDURE IF EXISTS `upsert_mrrun` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
Expand Down Expand Up @@ -11809,4 +11885,4 @@ DELIMITER ;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2017-11-21 16:41:50
-- Dump completed on 2017-12-07 17:16:16
2 changes: 1 addition & 1 deletion ispyb/__init__.py
Expand Up @@ -6,7 +6,7 @@
import ConfigParser as configparser
import logging

__version__ = '3.3.0'
__version__ = '4.0.0'

_log = logging.getLogger('ispyb')

Expand Down
27 changes: 24 additions & 3 deletions ispyb/sp/emacquisition.py
Expand Up @@ -21,11 +21,25 @@ def __init__(self):
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),
('dataCollectionId', None),
('movieId', None),
('autoProcProgramId', None),
('imageNumber', None),
('firstFrame', None),
Expand Down Expand Up @@ -67,7 +81,7 @@ def __init__(self):
('comments', None)
]
)

_motion_correction_drift_params = \
StrictOrderedDict(
[
Expand All @@ -79,6 +93,10 @@ def __init__(self):
]
)

@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)
Expand All @@ -91,6 +109,10 @@ def get_ctf_params(cls):
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)
Expand All @@ -102,4 +124,3 @@ def insert_ctf(self, 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)

48 changes: 45 additions & 3 deletions tests/test_em_structures.py
Expand Up @@ -3,6 +3,26 @@
import context
import ispyb.factory

def test_insert_movie(testconfig):
with ispyb.open(testconfig) as conn:
emacquisition = ispyb.factory.create_data_area(ispyb.factory.DataAreaType.EMACQUISITION, conn)
group_params = emacquisition.get_data_collection_group_params()
group_params['parentid'] = 55168
group_id = emacquisition.insert_data_collection_group(list(group_params.values()))
collection_params = emacquisition.get_data_collection_params()
collection_params['parentid'] = group_id
dc_id = emacquisition.insert_data_collection(list(collection_params.values()))

params = emacquisition.get_movie_params()
params['dataCollectionId'] = dc_id
params['movieNumber'] = 1
params['positionX'] = 4.05
params['positionY'] = 8.01
movie_id = emacquisition.insert_movie(list(params.values()))

assert movie_id is not None
assert movie_id > 0

def test_insert_motion_correction(testconfig):
with ispyb.open(testconfig) as conn:
emacquisition = ispyb.factory.create_data_area(ispyb.factory.DataAreaType.EMACQUISITION, conn)
Expand All @@ -12,8 +32,16 @@ def test_insert_motion_correction(testconfig):
collection_params = emacquisition.get_data_collection_params()
collection_params['parentid'] = group_id
dc_id = emacquisition.insert_data_collection(list(collection_params.values()))

params = emacquisition.get_movie_params()
params['dataCollectionId'] = dc_id
params['movieNumber'] = 1
params['positionX'] = 4.05
params['positionY'] = 8.01
movie_id = emacquisition.insert_movie(list(params.values()))

params = emacquisition.get_motion_correction_params()
params["dataCollectionId"] = dc_id
params["movieId"] = movie_id
params["dosePerFrame"] = 20
motion_cor_id = emacquisition.insert_motion_correction(list(params.values()))
assert motion_cor_id is not None
Expand All @@ -28,8 +56,15 @@ def test_insert_ctf(testconfig):
collection_params['parentid'] = group_id
dc_id = emacquisition.insert_data_collection(list(collection_params.values()))

params = emacquisition.get_movie_params()
params['dataCollectionId'] = dc_id
params['movieNumber'] = 1
params['positionX'] = 4.05
params['positionY'] = 8.01
movie_id = emacquisition.insert_movie(list(params.values()))

params = emacquisition.get_motion_correction_params()
params["dataCollectionId"] = dc_id
params["movieId"] = movie_id
params["dosePerFrame"] = 20
motion_cor_id = emacquisition.insert_motion_correction(list(params.values()))

Expand All @@ -48,8 +83,15 @@ def test_insert_drift(testconfig):
collection_params['parentid'] = group_id
dc_id = emacquisition.insert_data_collection(list(collection_params.values()))

params = emacquisition.get_movie_params()
params['dataCollectionId'] = dc_id
params['movieNumber'] = 1
params['positionX'] = 4.05
params['positionY'] = 8.01
movie_id = emacquisition.insert_movie(list(params.values()))

params = emacquisition.get_motion_correction_params()
params["dataCollectionId"] = dc_id
params["movieId"] = movie_id
params["dosePerFrame"] = 20
motion_cor_id = emacquisition.insert_motion_correction(list(params.values()))

Expand Down

0 comments on commit 9ca5e07

Please sign in to comment.