def run(self, inData): outData = {} hdf5File = pathlib.Path(inData['hdf5File']) # Read the header inDataReadImageHeader = { "imagePath": [inData['hdf5File']], "isFastMesh": False } readImageHeader = ReadImageHeader(inData=inDataReadImageHeader) readImageHeader.execute() if readImageHeader.isSuccess(): firstSubWedge = readImageHeader.outData["subWedge"][0] experimentalCondition = firstSubWedge["experimentalCondition"] detector = experimentalCondition["detector"] beam = experimentalCondition["beam"] goniostat = experimentalCondition["goniostat"] beamX = detector["beamPositionX"] / 2.0 / detector["pixelSizeX"] beamY = detector["beamPositionY"] / 2.0 / detector["pixelSizeY"] directory = hdf5File.parent prefix = UtilsImage.getPrefix(hdf5File) hdf5ImageNumber = 1 if 'master' in str(hdf5File): masterFile = hdf5File else: if UtilsConfig.isEMBL(): fileName = '{0}_master.h5'.format(prefix) else: fileName = '{0}_{1}_master.h5'.format( prefix, hdf5ImageNumber) masterFile = directory / fileName image = fabio.open(str(masterFile)) image.data = image.data.reshape(2181, 2, 2074, 2).sum(3).sum(1) cbfImage = image.convert("cbf") pilatus_headers = fabio.cbfimage.PilatusHeader( "Silicon sensor, thickness 0.000750 m") pilatus_headers["Start_angle"] = goniostat["rotationAxisStart"] pilatus_headers["Angle_increment"] = goniostat["oscillationWidth"] pilatus_headers["Detector"] = "Eiger2 16M binned to 4M" pilatus_headers["Pixel_size"] = (detector["pixelSizeY"] * 2, detector["pixelSizeX"] * 2) pilatus_headers["Exposure_time"] = beam["exposureTime"] pilatus_headers["Wavelength"] = beam["wavelength"] pilatus_headers[ "Detector_distance"] = detector["distance"] / 1000.0 pilatus_headers["Beam_xy"] = (beamY, beamX) pilatus_headers["Count_cutoff"] = 1009869 cbfImage.pilatus_headers = pilatus_headers directory = inData.get("forcedOutputDirectory", str(self.getWorkingDirectory())) cbfImagePath = os.path.join( directory, os.path.basename(inData['hdf5File']).replace(".h5", ".cbf")) cbfImage.save(cbfImagePath) outData["outputCBFFile"] = cbfImagePath return outData
def run(self, inData): input_file = inData['input_file'] output_file = inData['output_file'] commandLine = 'pointless' if UtilsConfig.isEMBL(): commandLine += ' -c' commandLine += " xdsin {0} hklout {1}".format(input_file, output_file) listCommand = ['setting symmetry-based'] if 'choose_spacegroup' in inData: listCommand += 'choose spacegroup {0}'.format( inData['choose_spacegroup']) self.setLogFileName('pointless.log') self.runCommandLine(commandLine, listCommand=listCommand) outData = self.parsePointlessOutput(self.getLogPath()) return outData
def generateCommandsWithImageNumber(cls, inData, directory, prefix, hdf5File): """ This method creates a list of commands for the converter """ imageNumber = inData['imageNumber'] if 'hdf5ImageNumber' in inData: hdf5ImageNumber = inData['hdf5ImageNumber'] else: hdf5ImageNumber = imageNumber if 'master' in str(hdf5File): masterFile = hdf5File else: if UtilsConfig.isEMBL(): fileName = '{0}_master.h5'.format(prefix) else: fileName = '{0}_{1}_master.h5'.format(prefix, hdf5ImageNumber) masterFile = directory / fileName if 'forcedOutputImageNumber' in inData: cbfFileName = prefix + \ "_%04d" % inData['forcedOutputImageNumber'] + ".cbf" imageNumberInHdf5File = imageNumber else: cbfFileName = prefix + "_%04d" % imageNumber + ".cbf" imageNumberInHdf5File = imageNumber - hdf5ImageNumber + 1 if not 'forcedOutputDirectory' in inData: cbfFile = directory / cbfFileName else: forcedOutputDirectory = \ pathlib.Path(inData['forcedOutputDirectory']) if not forcedOutputDirectory.exists(): forcedOutputDirectory.mkdir(parents=True, mode=0o755) cbfFile = forcedOutputDirectory / cbfFileName commandLine = "{0} {1} {2}".format(masterFile, imageNumberInHdf5File, cbfFile) return commandLine, cbfFile
def createPyarchFilePath(filePath): """ This method translates from an ESRF "visitor" path to a "pyarch" path: /data/visitor/mx415/id14eh1/20100209 -> /data/pyarch/2010/id14eh1/mx415/20100209 """ pyarchFilePath = None if isinstance(filePath, str): filePath = pathlib.Path(filePath) listOfDirectories = filePath.parts if UtilsConfig.isEMBL(): if 'p13' in listOfDirectories[0:3] or 'P13' in listOfDirectories[0:3]: pyarchFilePath = os.path.join('/data/ispyb/p13', *listOfDirectories[4:]) else: pyarchFilePath = os.path.join('/data/ispyb/p14', *listOfDirectories[4:]) return pyarchFilePath listBeamlines = ['bm30a', 'id14eh1', 'id14eh2', 'id14eh3', 'id14eh4', 'id23eh1', 'id23eh2', 'id29', 'id30a1', 'id30a2', 'id30a3', 'id30b'] # Check that we have at least four levels of directories: if len(listOfDirectories) > 5: dataDirectory = listOfDirectories[1] secondDirectory = listOfDirectories[2] thirdDirectory = listOfDirectories[3] fourthDirectory = listOfDirectories[4] fifthDirectory = listOfDirectories[5] year = fifthDirectory[0:4] proposal = None beamline = None if dataDirectory == 'data' and secondDirectory == 'gz': if thirdDirectory == 'visitor': proposal = fourthDirectory beamline = fifthDirectory elif fourthDirectory == 'inhouse': proposal = fifthDirectory beamline = thirdDirectory else: raise RuntimeError( 'Illegal path for UtilsPath.createPyarchFilePath: ' + '{0}'.format(filePath)) listOfRemainingDirectories = listOfDirectories[6:] elif dataDirectory == 'data' and secondDirectory == 'visitor': proposal = listOfDirectories[3] beamline = listOfDirectories[4] listOfRemainingDirectories = listOfDirectories[5:] elif dataDirectory == 'data' and secondDirectory in listBeamlines: beamline = secondDirectory proposal = listOfDirectories[4] listOfRemainingDirectories = listOfDirectories[5:] if proposal is not None and beamline is not None: pyarchFilePath = pathlib.Path('/data/pyarch') / year / beamline pyarchFilePath = pyarchFilePath / proposal for directory in listOfRemainingDirectories: pyarchFilePath = pyarchFilePath / directory if pyarchFilePath is None: logger.warning( 'UtilsPath.createPyarchFilePath: path not converted for' + ' pyarch: %s ' % filePath) else: pyarchFilePath = pyarchFilePath.as_posix() return pyarchFilePath