예제 #1
0
 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
예제 #2
0
파일: CCP4Tasks.py 프로젝트: shibom/edna2
 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
예제 #3
0
 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
예제 #4
0
파일: UtilsPath.py 프로젝트: shibom/edna2
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