def testExecute(self): """ """ self.run() # Checks that there are no error messages plugin = self.getPlugin() # Checks the expected result strExpectedOutput = self.readAndParseFile (self.getReferenceDataOutputFile()) # strObtainedOutput = plugin.getDataOutput().marshal() # EDUtilsTest.readAndParseFile ( self.m_edObtainedOutputDataFile ) EDVerbose.DEBUG("Checking obtained result...") xsDataResultReference = XSDataResultDiffractionCT.parseString(strExpectedOutput) xsDataResultObtained = plugin.getDataOutput()# XSDataResultDiffractionCT.parseString(strObtainedOutput) EDAssert.equal(xsDataResultReference.marshal(), xsDataResultObtained.marshal()) ref = self.readAndParseFile(os.path.join(self.getTestsDataImagesHome(), "DCT2011March.chi")) obt = self.readAndParseFile(xsDataResultObtained.getIntegratedIntensities().getPath().getValue()) EDAssert.strAlmostEqual(ref, obt, "Chi files are the same", 0.001) # clean up SPD when finished EDFactoryPluginStatic.loadPlugin("EDPluginSPDCorrectv10").killAllWorkers()
def testExecute(self): """ """ self.run() # Checks that there are no error messages plugin = self.getPlugin() # Checks the expected result strExpectedOutput = self.readAndParseFile (self.getReferenceDataOutputFile()) # strObtainedOutput = plugin.getDataOutput().marshal() # EDUtilsTest.readAndParseFile ( self.m_edObtainedOutputDataFile ) EDVerbose.DEBUG("Checking obtained result...") xsDataResultReference = XSDataResultDiffractionCT.parseString(strExpectedOutput) xsDataResultObtained = plugin.getDataOutput()# XSDataResultDiffractionCT.parseString(strObtainedOutput) EDAssert.equal(xsDataResultReference.marshal(), xsDataResultObtained.marshal())
class EDPluginControlDiffractionCTv1_0(EDPluginControl): """ This is the EDNA control plug-in for diffraction contrast tomography. It is intented to run 2D integration provided by Fit2D for example and .... """ def __init__(self): """ """ EDPluginControl.__init__(self) self.setXSDataInputClass(XSDataInputDiffractionCT) self.m_strControlledPluginReadHeader = "EDPluginControlDCTReadHeaderv1_0" self.m_edPluginReadHeader = None self.m_strControlledPluginPowderIntegration = "EDPluginControlDCTPowderIntegrationv1_0" self.m_edPluginPowderIntegration = None self.m_xsDataDiffractionCTInstrument = None self.m_xsDataDiffractionCTImage = None self.m_xsDataFileInputImage = None self.m_edPluginControlledPluginWriteSinogram = None self.m_strControlledPluginWriteSinogram = "EDPluginDCTWriteSinogramv1_0" self.m_xsDataFileInputPowderDiffraction = None self.m_xsDataResultDiffractionCT = None self.m_edPluginWriteSinogram = None def checkParameters(self): """ Checks the mandatory parameters. """ EDVerbose.DEBUG("*** EDPluginControlDiffractionCTv1_0.checkParameters") self.checkMandatoryParameters(self.getDataInput(), "Data Input is None") self.checkMandatoryParameters(self.getDataInput().getImage(), "No path to input image") self.checkMandatoryParameters( self.getDataInput().getDestinationDirectory(), "No path to destination directory") self.checkMandatoryParameters( self.getDataInput().getSinogramFileNamePrefix(), "No sinogram prefix given") self.checkMandatoryParameters( self.getDataInput().getPowderDiffractionSubdirectory(), "No subdirectory prefix for powder diffraction patterns") def preProcess(self, _edObject=None): EDPluginControl.preProcess(self) EDVerbose.DEBUG("*** EDPluginControlDiffractionCTv1_0.preProcess") # Load the execution plugin self.m_edPluginReadHeader = self.loadPlugin( self.m_strControlledPluginReadHeader) self.m_edPluginPowderIntegration = self.loadPlugin( self.m_strControlledPluginPowderIntegration) self.m_edPluginWriteSinogram = self.loadPlugin( self.m_strControlledPluginWriteSinogram) # Set the input data for the read header plugin xsDataInputReadHeader = XSDataInputReadHeader() xsdataStringPathToImage = self.getDataInput().getImage().getPath() self.m_xsDataFileInputImage = XSDataFile() self.m_xsDataFileInputImage.setPath(xsdataStringPathToImage) xsDataInputReadHeader.setInputFile(self.m_xsDataFileInputImage) self.m_edPluginReadHeader.setDataInput(xsDataInputReadHeader) def process(self, _edObject=None): EDPluginControl.process(self) EDVerbose.DEBUG("*** EDPluginControlDiffractionCTv1_0.process") self.m_edPluginReadHeader.connectSUCCESS(self.doSuccessReadHeader) self.m_edPluginReadHeader.connectFAILURE(self.doFailureReadHeader) self.m_edPluginPowderIntegration.connectSUCCESS( self.doSuccessPowderIntegration) self.m_edPluginPowderIntegration.connectFAILURE( self.doFailurePowderIntegration) self.m_edPluginWriteSinogram.connectSUCCESS( self.doSuccessWriteSinogram) self.m_edPluginWriteSinogram.connectFAILURE( self.doFailureWriteSinogram) self.m_edPluginReadHeader.executeSynchronous() def postProcess(self, _edObject=None): EDPluginControl.postProcess(self) EDVerbose.DEBUG("*** EDPluginControlDiffractionCTv1_0.postProcess") self.setDataOutput(self.m_xsDataResultDiffractionCT) def doSuccessReadHeader(self, _edPlugin=None): EDVerbose.DEBUG( "*** EDPluginControlDiffractionCTv1_0.doSuccessReadHeader") self.retrieveSuccessMessages( _edPlugin, "EDPluginControlDiffractionCTv1_0.doSuccessReadHeader") # Translate dictionary to image and instrument objects xsDataInputPowderIntegration = XSDataInputPowderIntegration() self.m_xsDataDiffractionCTInstrument = XSDataDiffractionCTInstrument() self.m_xsDataDiffractionCTImage = XSDataDiffractionCTImage() xsDataDictionaryHeader = self.m_edPluginReadHeader.getDataOutput( ).getDictionary() for xsDataKeyValuePair in xsDataDictionaryHeader.getKeyValuePair(): strKey = str(xsDataKeyValuePair.getKey().getValue()) strValue = str(xsDataKeyValuePair.getValue().getValue()) if (strKey == "_diffrn_radiation_wavelength"): self.m_xsDataDiffractionCTInstrument.set_diffrn_radiation_wavelength( XSDataWavelength(float(strValue))) elif (strKey == "_pd_instr_dist_spec/detc"): self.m_xsDataDiffractionCTInstrument.set_pd_instr_dist_spec_detc( XSDataLength(float(strValue))) elif (strKey == "_pd_meas_2theta_range_max"): self.m_xsDataDiffractionCTInstrument.set_pd_meas_2theta_range_max( XSDataAngle(float(strValue))) elif (strKey == "_pd_meas_2theta_range_min"): self.m_xsDataDiffractionCTInstrument.set_pd_meas_2theta_range_min( XSDataAngle(float(strValue))) elif (strKey == "_pd_meas_2theta_range_inc"): self.m_xsDataDiffractionCTInstrument.set_pd_meas_2theta_range_inc( XSDataAngle(float(strValue))) elif (strKey == "_synchrotron_photon-flux"): self.m_xsDataDiffractionCTInstrument.set_synchrotron_photon_flux( XSDataFlux(float(strValue))) elif (strKey == "_synchrotron_ring-intensity"): self.m_xsDataDiffractionCTInstrument.set_synchrotron_ring_intensity( XSDataDouble(float(strValue))) elif (strKey == "_tomo_scan_ampl"): self.m_xsDataDiffractionCTInstrument.set_tomo_scan_ampl( XSDataAngle(float(strValue))) elif (strKey == "_tomo_scan_type"): self.m_xsDataDiffractionCTInstrument.set_tomo_scan_type( XSDataString(strValue)) elif (strKey == "_tomo_spec_displ_rotation"): self.m_xsDataDiffractionCTInstrument.set_tomo_spec_displ_rotation( XSDataAngle(float(strValue))) elif (strKey == "_tomo_spec_displ_rotation_inc"): self.m_xsDataDiffractionCTInstrument.set_tomo_spec_displ_rotation_inc( XSDataAngle(float(strValue))) elif (strKey == "_tomo_spec_displ_x"): self.m_xsDataDiffractionCTInstrument.set_tomo_spec_displ_x( XSDataLength(float(strValue))) elif (strKey == "_tomo_spec_displ_x_inc"): self.m_xsDataDiffractionCTInstrument.set_tomo_spec_displ_x_inc( XSDataLength(float(strValue))) elif (strKey == "_tomo_spec_displ_x_max"): self.m_xsDataDiffractionCTInstrument.set_tomo_spec_displ_x_max( XSDataLength(float(strValue))) elif (strKey == "_tomo_spec_displ_x_min"): self.m_xsDataDiffractionCTInstrument.set_tomo_spec_displ_x_min( XSDataLength(float(strValue))) elif (strKey == "_tomo_spec_displ_z"): self.m_xsDataDiffractionCTInstrument.set_tomo_spec_displ_z( XSDataLength(float(strValue))) elif (strKey == "_tomo_spec_displ_z_inc"): self.m_xsDataDiffractionCTInstrument.set_tomo_spec_displ_z_inc( XSDataLength(float(strValue))) elif (strKey == "_tomo_spec_displ_z_max"): self.m_xsDataDiffractionCTInstrument.set_tomo_spec_displ_z_max( XSDataLength(float(strValue))) elif (strKey == "_tomo_spec_displ_z_min"): self.m_xsDataDiffractionCTInstrument.set_tomo_spec_displ_z_min( XSDataLength(float(strValue))) elif (strKey == "_pd_instr_special_details_tilt_angle"): self.m_xsDataDiffractionCTImage.set_pd_instr_special_details_tilt_angle( XSDataAngle(float(strValue))) elif (strKey == "_pd_instr_special_details_tilt_rotation"): self.m_xsDataDiffractionCTImage.set_pd_instr_special_details_tilt_rotation( XSDataAngle(float(strValue))) elif (strKey == "_array_element_size[1]"): self.m_xsDataDiffractionCTImage.set_array_element_size_1( XSDataLength(float(strValue))) elif (strKey == "_array_element_size[2]"): self.m_xsDataDiffractionCTImage.set_array_element_size_2( XSDataLength(float(strValue))) elif (strKey == "_diffrn_detector_element.center[1]"): self.m_xsDataDiffractionCTImage.set_diffrn_detector_element_center_1( XSDataLength(float(strValue))) elif (strKey == "_diffrn_detector_element.center[2]"): self.m_xsDataDiffractionCTImage.set_diffrn_detector_element_center_2( XSDataLength(float(strValue))) ## Here the tricky case of lists .... # elif strKey.startswith("_pd_sum_2theta_range_max"): # if strKey.find("[")>0: # pyintIndex = int(strKey.split("[")[1].split("]")[0]) - 1 #gets the int that is between [] # else: # pyintIndex = 0 # while len(self.m_xsDataDiffractionCTInstrument.get_pd_sum_2theta_range_max()) < pyintIndex + 1: # self.m_xsDataDiffractionCTInstrument.get_pd_sum_2theta_range_max().append(None) # self.m_xsDataDiffractionCTInstrument.get_pd_sum_2theta_range_max()[pyintIndex] = XSDataAngle(float(strValue)) # elif strKey.startswith("_pd_sum_2theta_range_min"): # if strKey.find("[")>0: # pyintIndex = int(strKey.split("[")[1].split("]")[0]) - 1 #gets the int that is between [] # else: # pyintIndex = 0 # while len(self.m_xsDataDiffractionCTInstrument.get_pd_sum_2theta_range_min()) < pyintIndex + 1: # self.m_xsDataDiffractionCTInstrument.get_pd_sum_2theta_range_min().append(None) # self.m_xsDataDiffractionCTInstrument.get_pd_sum_2theta_range_min()[pyintIndex] = XSDataAngle(float(strValue)) ##end Seems OK 20091023 elif (strKey == "_file_correction_image_dark-current"): xsDataFileDark = XSDataFile() xsDataFileDark.setPath(XSDataString(strValue)) self.m_xsDataDiffractionCTImage.set_file_correction_image_dark_current( xsDataFileDark) elif (strKey == "_file_correction_image_flat-field"): xsDataFileFlat = XSDataFile() xsDataFileFlat.setPath(XSDataString(strValue)) self.m_xsDataDiffractionCTImage.set_file_correction_image_flat_field( xsDataFileFlat) elif (strKey == "_file_correction_image-mask"): xsDataFileMask = XSDataFile() xsDataFileMask.setPath(XSDataString(strValue)) self.m_xsDataDiffractionCTImage.set_file_correction_image_mask( xsDataFileMask) elif (strKey == "_file_correction_spline_spatial-distortion"): xsDataFileSpatialDist = XSDataFile() xsDataFileSpatialDist.setPath(XSDataString(strValue)) self.m_xsDataDiffractionCTImage.set_file_correction_spline_spatial_distortion( xsDataFileSpatialDist) xsDataInputPowderIntegration.setImageParameters( self.m_xsDataDiffractionCTImage) xsDataInputPowderIntegration.setInstrumentParameters( self.m_xsDataDiffractionCTInstrument) xsDataInputPowderIntegration.setImageFile(self.m_xsDataFileInputImage) self.m_edPluginPowderIntegration.setDataInput( xsDataInputPowderIntegration) self.m_edPluginPowderIntegration.executeSynchronous() def doFailureReadHeader(self, _edPlugin=None): EDVerbose.DEBUG( "*** EDPluginControlDiffractionCTv1_0.doFailureReadHeader") self.retrieveFailureMessages( _edPlugin, "EDPluginControlDiffractionCTv1_0.doFailureReadHeader") def doSuccessPowderIntegration(self, _edPlugin=None): EDVerbose.DEBUG( "*** EDPluginControlDiffractionCTv1_0.doSuccessPowderIntegration") self.retrieveSuccessMessages( _edPlugin, "EDPluginControlDiffractionCTv1_0.doSuccessPowderIntegration") self.m_xsDataResultDiffractionCT = XSDataResultDiffractionCT() # Copy file to final destination and add path to result object xsDataFileIntegratedIntensities = self.m_edPluginPowderIntegration.getDataOutput( ).getIntegratedIntensities() EDVerbose.DEBUG("Path to cif: " + xsDataFileIntegratedIntensities.getPath().getValue()) EDVerbose.DEBUG("%s" % xsDataFileIntegratedIntensities) if (xsDataFileIntegratedIntensities is not None): strOutputFilePath = xsDataFileIntegratedIntensities.getPath( ).getValue() strDestinationDirectory = self.getDataInput( ).getDestinationDirectory().getPath().getValue() strPowderDiffractionSubdirectory = self.getDataInput( ).getPowderDiffractionSubdirectory().getValue() if not os.path.isdir(strDestinationDirectory): os.mkdir(strDestinationDirectory) if self.m_xsDataDiffractionCTInstrument.get_tomo_scan_type( ).getValue().lower() in ["flat", "spiral"]: # pyintLineNumber = int( abs( float( self.cif[ "_tomo_spec_displ_rotation" ] ) / float( self.cif[ "_tomo_spec_displ_rotation_inc" ] ) ) ) pyintLineNumber = int( abs(self.m_xsDataDiffractionCTInstrument. get_tomo_spec_displ_rotation().getValue()) / self.m_xsDataDiffractionCTInstrument. get_tomo_spec_displ_rotation_inc().getValue()) elif self.m_xsDataDiffractionCTInstrument.get_tomo_scan_type( ).getValue().lower( ) == "mapping": #I agree mappings are not sinograms but the really looks like, no ? # pyintLineNumber = int( abs( ( float( self.cif[ "_tomo_spec_displ_z" ]) - float ( self.cif [ "_tomo_spec_displ_z_min" ] ) ) / float( self.cif["_tomo_spec_displ_z_inc"] ) ) ) pyintLineNumber = int( abs(self.m_xsDataDiffractionCTInstrument. get_tomo_spec_displ_z().getValue() - self.m_xsDataDiffractionCTInstrument. get_tomo_spec_displ_z_min().getValue()) / self.m_xsDataDiffractionCTInstrument. get_tomo_spec_displ_z_inc().getValue()) else: pyintLineNumber = None if pyintLineNumber is not None: pystrDestinationSubDir = "%s%04i" % ( strPowderDiffractionSubdirectory, pyintLineNumber) strDestinationDirectoryWithSub = os.path.join( strDestinationDirectory, pystrDestinationSubDir) strDestinationFilePath = os.path.join( strDestinationDirectoryWithSub, os.path.basename(strOutputFilePath)) if not os.path.isdir( os.path.join(strDestinationDirectoryWithSub)): os.mkdir(strDestinationDirectoryWithSub) EDVerbose.DEBUG("Full path should be now: %s" % strDestinationFilePath) else: EDVerbose.DEBUG( "No modification of the output directory: I was not able to determine on which line of the sinogram I am." ) strDestinationFilePath = os.path.abspath( os.path.join(strDestinationDirectory, EDUtilsFile.getBaseName(strOutputFilePath))) EDUtilsFile.copyFile(strOutputFilePath, strDestinationFilePath) xsDataFileDestination = XSDataFile() xsDataFileDestination.setPath(XSDataString(strDestinationFilePath)) self.m_xsDataResultDiffractionCT.setIntegratedIntensities( xsDataFileDestination) xsDataPathSinogramDirectory = XSDataFile() xsDataPathSinogramDirectory.setPath( XSDataString(strDestinationDirectory)) xsDataInputWriteSinogram = XSDataInputWriteSinogram() xsDataInputWriteSinogram.setSinogramDirectory( xsDataPathSinogramDirectory) xsDataInputWriteSinogram.setIntegratedIntensities( xsDataFileDestination) xsDataInputWriteSinogram.setSinogramFileNamePrefix( self.getDataInput().getSinogramFileNamePrefix()) self.m_edPluginWriteSinogram.setDataInput(xsDataInputWriteSinogram) self.m_edPluginWriteSinogram.executeSynchronous() def doFailurePowderIntegration(self, _edPlugin=None): EDVerbose.DEBUG( "*** EDPluginControlDiffractionCTv1_0.doFailurePowderIntegration") self.retrieveFailureMessages( _edPlugin, "EDPluginControlDiffractionCTv1_0.doFailurePowderIntegration") def doSuccessWriteSinogram(self, _edPlugin=None): EDVerbose.DEBUG( "*** EDPluginControlDiffractionCTv1_0.doSuccessWriteSinogram") self.retrieveSuccessMessages( _edPlugin, "EDPluginControlDiffractionCTv1_0.doSuccessWriteSinogram") xsDataResultWriteSinogram = self.m_edPluginWriteSinogram.getDataOutput( ) if (xsDataResultWriteSinogram is not None): self.m_xsDataResultDiffractionCT.setSinogramFile( xsDataResultWriteSinogram.getSinogramFile()) def doFailureWriteSinogram(self, _edPlugin=None): EDVerbose.DEBUG( "*** EDPluginControlDiffractionCTv1_0.doFailureWriteSinogram") self.retrieveFailureMessages( _edPlugin, "EDPluginControlDiffractionCTv1_0.doFailureWriteSinogram")
def doSuccessPowderIntegration(self, _edPlugin=None): EDVerbose.DEBUG( "*** EDPluginControlDiffractionCTv1_0.doSuccessPowderIntegration") self.retrieveSuccessMessages( _edPlugin, "EDPluginControlDiffractionCTv1_0.doSuccessPowderIntegration") self.m_xsDataResultDiffractionCT = XSDataResultDiffractionCT() # Copy file to final destination and add path to result object xsDataFileIntegratedIntensities = self.m_edPluginPowderIntegration.getDataOutput( ).getIntegratedIntensities() EDVerbose.DEBUG("Path to cif: " + xsDataFileIntegratedIntensities.getPath().getValue()) EDVerbose.DEBUG("%s" % xsDataFileIntegratedIntensities) if (xsDataFileIntegratedIntensities is not None): strOutputFilePath = xsDataFileIntegratedIntensities.getPath( ).getValue() strDestinationDirectory = self.getDataInput( ).getDestinationDirectory().getPath().getValue() strPowderDiffractionSubdirectory = self.getDataInput( ).getPowderDiffractionSubdirectory().getValue() if not os.path.isdir(strDestinationDirectory): os.mkdir(strDestinationDirectory) if self.m_xsDataDiffractionCTInstrument.get_tomo_scan_type( ).getValue().lower() in ["flat", "spiral"]: # pyintLineNumber = int( abs( float( self.cif[ "_tomo_spec_displ_rotation" ] ) / float( self.cif[ "_tomo_spec_displ_rotation_inc" ] ) ) ) pyintLineNumber = int( abs(self.m_xsDataDiffractionCTInstrument. get_tomo_spec_displ_rotation().getValue()) / self.m_xsDataDiffractionCTInstrument. get_tomo_spec_displ_rotation_inc().getValue()) elif self.m_xsDataDiffractionCTInstrument.get_tomo_scan_type( ).getValue().lower( ) == "mapping": #I agree mappings are not sinograms but the really looks like, no ? # pyintLineNumber = int( abs( ( float( self.cif[ "_tomo_spec_displ_z" ]) - float ( self.cif [ "_tomo_spec_displ_z_min" ] ) ) / float( self.cif["_tomo_spec_displ_z_inc"] ) ) ) pyintLineNumber = int( abs(self.m_xsDataDiffractionCTInstrument. get_tomo_spec_displ_z().getValue() - self.m_xsDataDiffractionCTInstrument. get_tomo_spec_displ_z_min().getValue()) / self.m_xsDataDiffractionCTInstrument. get_tomo_spec_displ_z_inc().getValue()) else: pyintLineNumber = None if pyintLineNumber is not None: pystrDestinationSubDir = "%s%04i" % ( strPowderDiffractionSubdirectory, pyintLineNumber) strDestinationDirectoryWithSub = os.path.join( strDestinationDirectory, pystrDestinationSubDir) strDestinationFilePath = os.path.join( strDestinationDirectoryWithSub, os.path.basename(strOutputFilePath)) if not os.path.isdir( os.path.join(strDestinationDirectoryWithSub)): os.mkdir(strDestinationDirectoryWithSub) EDVerbose.DEBUG("Full path should be now: %s" % strDestinationFilePath) else: EDVerbose.DEBUG( "No modification of the output directory: I was not able to determine on which line of the sinogram I am." ) strDestinationFilePath = os.path.abspath( os.path.join(strDestinationDirectory, EDUtilsFile.getBaseName(strOutputFilePath))) EDUtilsFile.copyFile(strOutputFilePath, strDestinationFilePath) xsDataFileDestination = XSDataFile() xsDataFileDestination.setPath(XSDataString(strDestinationFilePath)) self.m_xsDataResultDiffractionCT.setIntegratedIntensities( xsDataFileDestination) xsDataPathSinogramDirectory = XSDataFile() xsDataPathSinogramDirectory.setPath( XSDataString(strDestinationDirectory)) xsDataInputWriteSinogram = XSDataInputWriteSinogram() xsDataInputWriteSinogram.setSinogramDirectory( xsDataPathSinogramDirectory) xsDataInputWriteSinogram.setIntegratedIntensities( xsDataFileDestination) xsDataInputWriteSinogram.setSinogramFileNamePrefix( self.getDataInput().getSinogramFileNamePrefix()) self.m_edPluginWriteSinogram.setDataInput(xsDataInputWriteSinogram) self.m_edPluginWriteSinogram.executeSynchronous()
class EDPluginControlDiffractionCTv1_1(EDPluginControl): """ This is the EDNA control plug-in for diffraction contrast tomography. It is intented to run 2D integration provided by Fit2D for example and .... """ def __init__(self): """ """ EDPluginControl.__init__(self) self.setXSDataInputClass(XSDataInputDiffractionCT) self.strControlledPluginReadHeader = "EDPluginControlDCTReadHeaderv1_0" self.edPluginReadHeader = None self.strControlledPluginPowderIntegration = "EDPluginControlDCTPowderIntegrationv1_1" self.edPluginPowderIntegration = None self.xsDataDiffractionCTInstrument = None self.xsDataDiffractionCTImage = None self.xsDataFileInputImage = None self.strControlledPluginHDF5MapSpectra = "EDPluginHDF5MapOfSpectrav10" self.strControlledPluginExportAsciiPowder = "EDPluginExportAsciiPowderv1_0" self.xsDataFileInputPowderDiffraction = None self.xsDataResultDiffractionCT = None self.edPluginHDF5MapSpectra = None self.edPluginExportAsciiPowder = None self.xsdForceImageParam = None self.xsdForceScanParam = None self.powderDiffractionFormat = "edf" #default output format def checkParameters(self): """ Checks the mandatory parameters. """ EDVerbose.DEBUG("EDPluginControlDiffractionCTv1_1.checkParameters") self.checkMandatoryParameters(self.getDataInput(), "Data Input is None") self.checkMandatoryParameters(self.getDataInput().getImage(), "No path to input image") self.checkMandatoryParameters(self.getDataInput().getDestinationDirectory(), "No path to destination directory") self.checkMandatoryParameters(self.getDataInput().getSinogramFileNamePrefix(), "No sinogram prefix given") self.checkMandatoryParameters(self.getDataInput().getPowderDiffractionSubdirectory(), "No subdirectory prefix for powder diffraction patterns") def preProcess(self, _edObject=None): EDPluginControl.preProcess(self) EDVerbose.DEBUG("EDPluginControlDiffractionCTv1_1.preProcess") # Load the execution plugin self.edPluginReadHeader = self.loadPlugin(self.strControlledPluginReadHeader) self.edPluginPowderIntegration = self.loadPlugin(self.strControlledPluginPowderIntegration) sdi = self.getDataInput() self.xsdForceImageParam = sdi.getOverrideImageParam() self.xsdForceScanParam = sdi.getOverrideScanParam() if sdi.getPowderDiffractionFormat() is not None: self.powderDiffractionFormat = sdi.getPowderDiffractionFormat().getValue() # Set the input data for the read header plugin xsDataInputReadHeader = XSDataInputReadHeader() xsdataStringPathToImage = sdi.getImage().getPath() self.xsDataFileInputImage = XSDataFile() self.xsDataFileInputImage.setPath(xsdataStringPathToImage) xsDataInputReadHeader.setInputFile(self.xsDataFileInputImage) self.edPluginReadHeader.setDataInput(xsDataInputReadHeader) def process(self, _edObject=None): EDPluginControl.process(self) EDVerbose.DEBUG("EDPluginControlDiffractionCTv1_1.process") self.edPluginReadHeader.connectSUCCESS(self.doSuccessReadHeader) self.edPluginReadHeader.connectFAILURE(self.doFailureReadHeader) self.edPluginPowderIntegration.connectSUCCESS(self.doSuccessPowderIntegration) self.edPluginPowderIntegration.connectFAILURE(self.doFailurePowderIntegration) self.edPluginReadHeader.executeSynchronous() def postProcess(self, _edObject=None): EDPluginControl.postProcess(self) EDVerbose.DEBUG("EDPluginControlDiffractionCTv1_1.postProcess") self.setDataOutput(self.xsDataResultDiffractionCT) def doSuccessReadHeader(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlDiffractionCTv1_1.doSuccessReadHeader") self.retrieveSuccessMessages(_edPlugin, "EDPluginControlDiffractionCTv1_1.doSuccessReadHeader") # Translate dictionary to image and instrument objects xsDataInputPowderIntegration = XSDataInputPowderIntegration() self.xsDataDiffractionCTInstrument = XSDataDiffractionCTInstrument() self.xsDataDiffractionCTImage = XSDataDiffractionCTImage() xsDataDictionaryHeader = self.edPluginReadHeader.getDataOutput().getDictionary() for xsDataKeyValuePair in xsDataDictionaryHeader.getKeyValuePair(): strKey = str(xsDataKeyValuePair.getKey().getValue()) lstValue = xsDataKeyValuePair.getValue().getValue().split() if len(lstValue) == 2: strValue = lstValue[0] strUnit = lstValue[1] else: strValue = xsDataKeyValuePair.getValue().getValue() strUnit = None if (strKey == "_diffrn_radiation_wavelength"): xsd = EDUtilsUnit.toXSD(XSDataWavelength, strValue) # if strUnit is None: strUnit = "A" # xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTInstrument.set_diffrn_radiation_wavelength(xsd) elif (strKey == "_pd_instr_dist_spec/detc"): xsd = EDUtilsUnit.toXSD(XSDataLength, strValue) # if strUnit is None: strUnit = "mm" # xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTInstrument.set_pd_instr_dist_spec_detc(xsd) elif (strKey == "_pd_meas_2theta_range_max"): xsd = XSDataAngle(float(strValue)) if strUnit is None: strUnit = "deg" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTInstrument.set_pd_meas_2theta_range_max(xsd) elif (strKey == "_pd_meas_2theta_range_min"): xsd = XSDataAngle(float(strValue)) if strUnit is None: strUnit = "deg" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTInstrument.set_pd_meas_2theta_range_min(xsd) elif (strKey == "_pd_meas_2theta_range_inc"): xsd = XSDataAngle(float(strValue)) if strUnit is None: strUnit = "deg" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTInstrument.set_pd_meas_2theta_range_inc(xsd) elif (strKey == "_synchrotron_photon-flux"): self.xsDataDiffractionCTInstrument.set_synchrotron_photon_flux(XSDataFlux(float(strValue))) elif (strKey == "_synchrotron_ring-intensity"): self.xsDataDiffractionCTInstrument.set_synchrotron_ring_intensity(XSDataDouble(float(strValue))) elif (strKey == "_tomo_scan_ampl"): xsd = XSDataAngle(float(strValue)) if strUnit is None: strUnit = "deg" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTInstrument.set_tomo_scan_ampl(xsd) elif (strKey == "_tomo_scan_type"): self.xsDataDiffractionCTInstrument.set_tomo_scan_type(XSDataString(strValue)) elif (strKey == "_tomo_spec_displ_rotation"): xsd = XSDataAngle(float(strValue)) if strUnit is None: strUnit = "deg" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_rotation(xsd) elif (strKey == "_tomo_spec_displ_rotation_inc"): xsd = XSDataAngle(float(strValue)) if strUnit is None: strUnit = "deg" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_rotation_inc(xsd) elif (strKey == "_tomo_spec_displ_x"): xsd = EDUtilsUnit.toXSD(XSDataLength, strValue) # if strUnit is None: strUnit = "mm" # xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_x(xsd) elif (strKey == "_tomo_spec_displ_x_inc"): xsd = EDUtilsUnit.toXSD(XSDataLength, strValue) # if strUnit is None: strUnit = "mm" # xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_x_inc(xsd) elif (strKey == "_tomo_spec_displ_x_max"): xsd = XSDataLength(float(strValue)) if strUnit is None: strUnit = "mm" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_x_max(xsd) elif (strKey == "_tomo_spec_displ_x_min"): xsd = XSDataLength(float(strValue)) if strUnit is None: strUnit = "mm" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_x_min(xsd) elif (strKey == "_tomo_spec_displ_z"): xsd = XSDataLength(float(strValue)) if strUnit is None: strUnit = "mm" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_z(xsd) elif (strKey == "_tomo_spec_displ_z_inc"): xsd = XSDataLength(float(strValue)) if strUnit is None: strUnit = "mm" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_z_inc(xsd) elif (strKey == "_tomo_spec_displ_z_max"): xsd = XSDataLength(float(strValue)) if strUnit is None: strUnit = "mm" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_z_max(xsd) elif (strKey == "_tomo_spec_displ_z_min"): xsd = XSDataLength(float(strValue)) if strUnit is None: strUnit = "mm" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_z_min(xsd) elif (strKey == "_pd_instr_special_details_tilt_angle"): xsd = XSDataAngle(float(strValue)) if strUnit is None: strUnit = "deg" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTImage.set_pd_instr_special_details_tilt_angle(xsd) elif (strKey == "_pd_instr_special_details_tilt_rotation"): xsd = XSDataAngle(float(strValue)) if strUnit is None: strUnit = "deg" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTImage.set_pd_instr_special_details_tilt_rotation(xsd) elif (strKey == "_array_element_size[1]"): xsd = XSDataLength(float(strValue)) if strUnit is None: strUnit = "m" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTImage.set_array_element_size_1(xsd) elif (strKey == "_array_element_size[2]"): xsd = XSDataLength(float(strValue)) if strUnit is None: strUnit = "m" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTImage.set_array_element_size_2(xsd) elif (strKey == "_diffrn_detector_element.center[1]"): xsd = XSDataLength(float(strValue)) if strUnit is None: strUnit = "mm" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTImage.set_diffrn_detector_element_center_1(xsd) elif (strKey == "_diffrn_detector_element.center[2]"): xsd = XSDataLength(float(strValue)) if strUnit is None: strUnit = "mm" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTImage.set_diffrn_detector_element_center_2(xsd) # elif strKey.startswith("_pd_sum_2theta_range_max"): # if strKey.find("[") > 0: # pyintIndex = int(strKey.split("[")[1].split("]")[0]) - 1 #gets the int that is between [] # else: # pyintIndex = 0 # while len(self.xsDataDiffractionCTInstrument.get_pd_sum_2theta_range_max()) < pyintIndex + 1: # self.xsDataDiffractionCTInstrument.get_pd_sum_2theta_range_max().append(None) # xsd = XSDataAngle(float(strValue)) # if strUnit is None: strUnit = "deg" # xsd.setUnit(XSDataString(strUnit)) # self.xsDataDiffractionCTInstrument.get_pd_sum_2theta_range_max()[pyintIndex] = xsd # elif strKey.startswith("_pd_sum_2theta_range_min"): # if strKey.find("[") > 0: # pyintIndex = int(strKey.split("[")[1].split("]")[0]) - 1 #gets the int that is between [] # else: # pyintIndex = 0 # while len(self.xsDataDiffractionCTInstrument.get_pd_sum_2theta_range_min()) < pyintIndex + 1: # self.xsDataDiffractionCTInstrument.get_pd_sum_2theta_range_min().append(None) # xsd = XSDataAngle(float(strValue)) # if strUnit is None: strUnit = "deg" # xsd.setUnit(XSDataString(strUnit)) # self.xsDataDiffractionCTInstrument.get_pd_sum_2theta_range_min()[pyintIndex] = xsd elif (strKey == "_file_correction_image_dark-current"): xsDataFileDark = XSDataFile() xsDataFileDark.setPath(XSDataString(strValue)) self.xsDataDiffractionCTImage.set_file_correction_image_dark_current(xsDataFileDark) elif (strKey == "_file_correction_image_flat-field"): xsDataFileFlat = XSDataFile() xsDataFileFlat.setPath(XSDataString(strValue)) self.xsDataDiffractionCTImage.set_file_correction_image_flat_field(xsDataFileFlat) elif (strKey == "_file_correction_image-mask"): xsDataFileMask = XSDataFile() xsDataFileMask.setPath(XSDataString(strValue)) self.xsDataDiffractionCTImage.set_file_correction_image_mask(xsDataFileMask) elif (strKey == "_file_correction_spline_spatial-distortion"): xsDataFileSpatialDist = XSDataFile() xsDataFileSpatialDist.setPath(XSDataString(strValue)) self.xsDataDiffractionCTImage.set_file_correction_spline_spatial_distortion(xsDataFileSpatialDist) if self.xsdForceImageParam is not None: self.forceImageParam(self.xsdForceImageParam) if self.xsdForceScanParam is not None: self.forceScanParam(self.xsdForceScanParam) xsDataInputPowderIntegration.setImageParameters(self.xsDataDiffractionCTImage) xsDataInputPowderIntegration.setInstrumentParameters(self.xsDataDiffractionCTInstrument) xsDataInputPowderIntegration.setImageFile(self.xsDataFileInputImage) # Set the destination directory for output XRPD file strDestinationDirectory = os.path.join(self.getDataInput().getDestinationDirectory().getPath().getValue(), \ self.getDataInput().getPowderDiffractionSubdirectory().getValue()) if self.xsDataDiffractionCTInstrument.get_tomo_scan_type().getValue().lower() in ["flat", "spiral"]: pyintLineNumber = int(abs(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_rotation().getValue()) / self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_rotation_inc().getValue()) elif self.xsDataDiffractionCTInstrument.get_tomo_scan_type().getValue().lower() == "mapping": #I agree mappings are not sinograms but the really looks like, no ? pyintLineNumber = int(abs(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_z().getValue() - self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_z_min().getValue()) / self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_z_inc().getValue()) else: pyintLineNumber = None try: strDestinationDirectory = "%s%04i" % (strDestinationDirectory, pyintLineNumber) except TypeError: pass #if pyintLineNumber is none: do not add suffix xsDataInputPowderIntegration.setDestinationDir(XSDataFile(XSDataString(strDestinationDirectory))) self.edPluginPowderIntegration.setDataInput(xsDataInputPowderIntegration) self.edPluginPowderIntegration.executeSynchronous() def doFailureReadHeader(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlDiffractionCTv1_1.doFailureReadHeader") self.retrieveFailureMessages(_edPlugin, "EDPluginControlDiffractionCTv1_1.doFailureReadHeader") self.setFailure() def doSuccessPowderIntegration(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlDiffractionCTv1_1.doSuccessPowderIntegration") self.retrieveSuccessMessages(_edPlugin, "EDPluginControlDiffractionCTv1_1.doSuccessPowderIntegration") self.xsDataResultDiffractionCT = XSDataResultDiffractionCT() xsDataFileIntegratedIntensities = _edPlugin.getDataOutput().getIntegratedIntensities() if (xsDataFileIntegratedIntensities is not None): # EDVerbose.DEBUG(self.edPluginPowderIntegration.getDataOutput().mashal()) xsdPathFileIntegratedIntensities = xsDataFileIntegratedIntensities.getPath() if self.powderDiffractionFormat == "edf": self.xsDataResultDiffractionCT.setIntegratedIntensities(xsDataFileIntegratedIntensities) else: xsdInput1DPowderEDF = XSDataInput1DPowderEDF() xsdInput1DPowderEDF.setEdfFile(xsDataFileIntegratedIntensities) xsdOutFile = XSDataFile() xsdOutFile.setPath(XSDataString(os.path.splitext(xsdPathFileIntegratedIntensities.getValue())[0] + "." + self.powderDiffractionFormat)) xsdInput1DPowderEDF.setOutputFile(xsdOutFile) xsdInput1DPowderEDF.setOutputFormat(XSDataString(self.powderDiffractionFormat)) self.edPluginExportAsciiPowder = self.loadPlugin(self.strControlledPluginExportAsciiPowder) self.edPluginExportAsciiPowder.setDataInput(xsdInput1DPowderEDF) self.edPluginExportAsciiPowder.connectSUCCESS(self.doSuccessExportAsciiPowder) self.edPluginExportAsciiPowder.connectFAILURE(self.doFailureExportAsciiPowder) self.edPluginExportAsciiPowder.execute() xsDataInputHDF5MapSpectra = XSDataInputHDF5MapSpectra() xsDataMesh = XSDataMeshScan() xsDataSpectrum = XSDataSpectrum() xsDataSpectrum.setPath(xsdPathFileIntegratedIntensities) strDestinationFile = os.path.join(self.getDataInput().getDestinationDirectory().getPath().getValue(), \ self.getDataInput().getSinogramFileNamePrefix().getValue() + ".h5") xsDataPathSinogram = XSDataFile() xsDataPathSinogram.setPath(XSDataString(strDestinationFile)) xsDataInputHDF5MapSpectra.setHDF5File(xsDataPathSinogram) xsDataInputHDF5MapSpectra.setInternalHDF5Path(XSDataString("RawDCT")) if self.xsDataDiffractionCTInstrument.get_tomo_scan_type().getValue().lower() in ["flat", "spiral"]: xsDataSpectrum.setFastMotorPosition(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x()) xsDataMesh.setFastMotorStart(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_min()) xsDataMesh.setFastMotorStop(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_max()) xsSteps = XSDataInteger(int(round(\ (self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_max().getValue() - \ self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_min().getValue()) / \ self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_inc().getValue() \ ))) xsDataMesh.setFastMotorSteps(xsSteps) xsDataMesh.setSlowMotorStart(XSDataDouble(0.0)) xsDataMesh.setSlowMotorStop(self.xsDataDiffractionCTInstrument.get_tomo_scan_ampl()) xsSteps = XSDataInteger(int(round(\ self.xsDataDiffractionCTInstrument.get_tomo_scan_ampl().getValue() / \ self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_rotation_inc().getValue()))) xsDataMesh.setSlowMotorSteps(xsSteps) xsDataSpectrum.setSlowMotorPosition(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_rotation()) elif self.xsDataDiffractionCTInstrument.get_tomo_scan_type().getValue().lower() == "mapping": #I agree mappings are not sinograms but the really looks like, no ? xsDataSpectrum.setFastMotorPosition(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x()) xsDataSpectrum.setSlowMotorPosition(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_z()) xsSteps = XSDataInteger(int(round(\ (self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_max().getValue() - \ self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_min().getValue()) / \ self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_inc().getValue() \ ))) xsDataMesh.setFastMotorSteps(xsSteps) xsDataMesh.setFastMotorStop(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_max()) xsDataMesh.setFastMotorStart(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_min()) xsSteps = XSDataInteger(int(round(\ (self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_z_max().getValue() - \ self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_z_min().getValue()) / \ self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_z_inc().getValue() \ ))) xsDataMesh.setSlowMotorSteps(xsSteps) xsDataMesh.setSlowMotorStop(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_z_max()) xsDataMesh.setSlowMotorStart(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_z_min()) xsDataSpectrum.setMeshScan(xsDataMesh) xsDataInputHDF5MapSpectra.setInputSpectrumFile([xsDataSpectrum]) self.edPluginHDF5MapSpectra = self.loadPlugin(self.strControlledPluginHDF5MapSpectra) self.edPluginHDF5MapSpectra.setDataInput(xsDataInputHDF5MapSpectra) self.edPluginHDF5MapSpectra.connectSUCCESS(self.doSuccessWriteSinogram) self.edPluginHDF5MapSpectra.connectFAILURE(self.doFailureWriteSinogram) self.edPluginHDF5MapSpectra.execute() def doFailurePowderIntegration(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlDiffractionCTv1_1.doFailurePowderIntegration") self.retrieveFailureMessages(_edPlugin, "EDPluginControlDiffractionCTv1_1.doFailurePowderIntegration") self.setFailure() def doSuccessWriteSinogram(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlDiffractionCTv1_1.doSuccessWriteSinogram") self.retrieveSuccessMessages(_edPlugin, "EDPluginControlDiffractionCTv1_1.doSuccessWriteSinogram") xsDataResultWriteSinogram = self.edPluginHDF5MapSpectra.getDataOutput() if (xsDataResultWriteSinogram is not None): self.xsDataResultDiffractionCT.setSinogramFile([xsDataResultWriteSinogram.getHDF5File()]) def doFailureWriteSinogram(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlDiffractionCTv1_1.doFailureWriteSinogram") self.retrieveFailureMessages(_edPlugin, "EDPluginControlDiffractionCTv1_1.doFailureWriteSinogram") self.setFailure() def doSuccessExportAsciiPowder(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlDiffractionCTv1_1.doSuccessExportAsciiPowder") self.retrieveSuccessMessages(_edPlugin, "EDPluginControlDiffractionCTv1_1.doSuccessExportAsciiPowder") xsDataResultExport1DPower = _edPlugin.getDataOutput() if (xsDataResultExport1DPower is not None): self.xsDataResultDiffractionCT.setIntegratedIntensities(xsDataResultExport1DPower.getOutputFile()) def doFailureExportAsciiPowder(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlDiffractionCTv1_1.doFailureExportAsciiPowder") self.retrieveFailureMessages(_edPlugin, "EDPluginControlDiffractionCTv1_1.doFailureExportAsciiPowder") self.setFailure() def forceImageParam(self, xsdForceImageParam): """ Helper function to override self.xsDataDiffractionCTImage with the contents of xsdForceImageParam @param xsDataDiffractionCTImage: instance of XSDataDiffractionCTImage @return: None """ if xsdForceImageParam.get_array_element_size_1() is not None: self.xsDataDiffractionCTImage.set_array_element_size_1(xsdForceImageParam.get_array_element_size_1()) if xsdForceImageParam.get_array_element_size_2() is not None: self.xsDataDiffractionCTImage.set_array_element_size_2(xsdForceImageParam.get_array_element_size_2()) if xsdForceImageParam.get_diffrn_detector_element_center_1() is not None: self.xsDataDiffractionCTImage.set_diffrn_detector_element_center_1(xsdForceImageParam.get_diffrn_detector_element_center_1()) if xsdForceImageParam.get_diffrn_detector_element_center_2() is not None: self.xsDataDiffractionCTImage.set_diffrn_detector_element_center_2(xsdForceImageParam.get_diffrn_detector_element_center_2()) if xsdForceImageParam.get_file_correction_image_dark_current() is not None: self.xsDataDiffractionCTImage.set_file_correction_image_dark_current(xsdForceImageParam.get_file_correction_image_dark_current()) if xsdForceImageParam.get_file_correction_image_flat_field() is not None: self.xsDataDiffractionCTImage.set_file_correction_image_flat_field(xsdForceImageParam.get_file_correction_image_flat_field()) if xsdForceImageParam.get_file_correction_image_mask() is not None: self.xsDataDiffractionCTImage.set_file_correction_image_mask(xsdForceImageParam.get_file_correction_image_mask()) if xsdForceImageParam.get_file_correction_spline_spatial_distortion() is not None: self.xsDataDiffractionCTImage.set_file_correction_spline_spatial_distortion(xsdForceImageParam.get_file_correction_spline_spatial_distortion()) if xsdForceImageParam.get_pd_instr_special_details_tilt_angle() is not None: self.xsDataDiffractionCTImage.set_pd_instr_special_details_tilt_angle(xsdForceImageParam.get_pd_instr_special_details_tilt_angle()) if xsdForceImageParam.get_pd_instr_special_details_tilt_rotation() is not None: self.xsDataDiffractionCTImage.set_pd_instr_special_details_tilt_rotation(xsdForceImageParam.get_pd_instr_special_details_tilt_rotation()) def forceScanParam(self, xsdForceScanParam): """ Helper function to override self.xsDataDiffractionCTInstrument with the contents of xsdForceScanParam @param xsdForceScanParam: instance of XSDataDiffractionCTInstrument @return: None """ if xsdForceScanParam.get_diffrn_radiation_wavelength() is not None: self.xsDataDiffractionCTInstrument.set_diffrn_radiation_wavelength(xsdForceScanParam.get_diffrn_radiation_wavelength()) if xsdForceScanParam.get_pd_instr_dist_spec_detc() is not None: self.xsDataDiffractionCTInstrument.set_pd_instr_dist_spec_detc(xsdForceScanParam.get_pd_instr_dist_spec_detc()) if xsdForceScanParam.get_pd_meas_2theta_range_inc() is not None: self.xsDataDiffractionCTInstrument.set_pd_meas_2theta_range_inc(xsdForceScanParam.get_pd_meas_2theta_range_inc()) if xsdForceScanParam.get_pd_meas_2theta_range_max() is not None: self.xsDataDiffractionCTInstrument.set_pd_meas_2theta_range_max(xsdForceScanParam.get_pd_meas_2theta_range_max()) if xsdForceScanParam.get_pd_meas_2theta_range_min() is not None: self.xsDataDiffractionCTInstrument.set_pd_meas_2theta_range_min(xsdForceScanParam.get_pd_meas_2theta_range_min()) if xsdForceScanParam.get_synchrotron_photon_flux() is not None: self.xsDataDiffractionCTInstrument.set_synchrotron_photon_flux(xsdForceScanParam.get_synchrotron_photon_flux()) if xsdForceScanParam.get_synchrotron_ring_intensity() is not None: self.xsDataDiffractionCTInstrument.set_synchrotron_ring_intensity(xsdForceScanParam.get_synchrotron_ring_intensity()) if xsdForceScanParam.get_tomo_scan_ampl() is not None: self.xsDataDiffractionCTInstrument.set_tomo_scan_ampl(xsdForceScanParam.get_tomo_scan_ampl()) if xsdForceScanParam.get_tomo_scan_type() is not None: self.xsDataDiffractionCTInstrument.set_tomo_scan_type(xsdForceScanParam.get_tomo_scan_type()) if xsdForceScanParam.get_tomo_spec_displ_rotation() is not None: self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_rotation(xsdForceScanParam.get_tomo_spec_displ_rotation()) if xsdForceScanParam.get_tomo_spec_displ_rotation_inc() is not None: self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_rotation_inc(xsdForceScanParam.get_tomo_spec_displ_rotation_inc()) if xsdForceScanParam.get_tomo_spec_displ_x_min() is not None: self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_x_min(xsdForceScanParam.get_tomo_spec_displ_x_min()) if xsdForceScanParam.get_tomo_spec_displ_x_max() is not None: self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_x_max(xsdForceScanParam.get_tomo_spec_displ_x_max()) if xsdForceScanParam.get_tomo_spec_displ_x_inc() is not None: self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_x_inc(xsdForceScanParam.get_tomo_spec_displ_x_inc()) if xsdForceScanParam.get_tomo_spec_displ_x() is not None: self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_x(xsdForceScanParam.get_tomo_spec_displ_x()) if xsdForceScanParam.get_tomo_spec_displ_z() is not None: self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_z(xsdForceScanParam.get_tomo_spec_displ_z()) if xsdForceScanParam.get_tomo_spec_displ_z_inc() is not None: self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_z_inc(xsdForceScanParam.get_tomo_spec_displ_z_inc()) if xsdForceScanParam.get_tomo_spec_displ_z_max() is not None: self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_z_max(xsdForceScanParam.get_tomo_spec_displ_z_max()) if xsdForceScanParam.get_tomo_spec_displ_z_min() is not None: self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_z_min(xsdForceScanParam.get_tomo_spec_displ_z_min())
def doSuccessPowderIntegration(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlDiffractionCTv1_1.doSuccessPowderIntegration") self.retrieveSuccessMessages(_edPlugin, "EDPluginControlDiffractionCTv1_1.doSuccessPowderIntegration") self.xsDataResultDiffractionCT = XSDataResultDiffractionCT() xsDataFileIntegratedIntensities = _edPlugin.getDataOutput().getIntegratedIntensities() if (xsDataFileIntegratedIntensities is not None): # EDVerbose.DEBUG(self.edPluginPowderIntegration.getDataOutput().mashal()) xsdPathFileIntegratedIntensities = xsDataFileIntegratedIntensities.getPath() if self.powderDiffractionFormat == "edf": self.xsDataResultDiffractionCT.setIntegratedIntensities(xsDataFileIntegratedIntensities) else: xsdInput1DPowderEDF = XSDataInput1DPowderEDF() xsdInput1DPowderEDF.setEdfFile(xsDataFileIntegratedIntensities) xsdOutFile = XSDataFile() xsdOutFile.setPath(XSDataString(os.path.splitext(xsdPathFileIntegratedIntensities.getValue())[0] + "." + self.powderDiffractionFormat)) xsdInput1DPowderEDF.setOutputFile(xsdOutFile) xsdInput1DPowderEDF.setOutputFormat(XSDataString(self.powderDiffractionFormat)) self.edPluginExportAsciiPowder = self.loadPlugin(self.strControlledPluginExportAsciiPowder) self.edPluginExportAsciiPowder.setDataInput(xsdInput1DPowderEDF) self.edPluginExportAsciiPowder.connectSUCCESS(self.doSuccessExportAsciiPowder) self.edPluginExportAsciiPowder.connectFAILURE(self.doFailureExportAsciiPowder) self.edPluginExportAsciiPowder.execute() xsDataInputHDF5MapSpectra = XSDataInputHDF5MapSpectra() xsDataMesh = XSDataMeshScan() xsDataSpectrum = XSDataSpectrum() xsDataSpectrum.setPath(xsdPathFileIntegratedIntensities) strDestinationFile = os.path.join(self.getDataInput().getDestinationDirectory().getPath().getValue(), \ self.getDataInput().getSinogramFileNamePrefix().getValue() + ".h5") xsDataPathSinogram = XSDataFile() xsDataPathSinogram.setPath(XSDataString(strDestinationFile)) xsDataInputHDF5MapSpectra.setHDF5File(xsDataPathSinogram) xsDataInputHDF5MapSpectra.setInternalHDF5Path(XSDataString("RawDCT")) if self.xsDataDiffractionCTInstrument.get_tomo_scan_type().getValue().lower() in ["flat", "spiral"]: xsDataSpectrum.setFastMotorPosition(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x()) xsDataMesh.setFastMotorStart(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_min()) xsDataMesh.setFastMotorStop(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_max()) xsSteps = XSDataInteger(int(round(\ (self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_max().getValue() - \ self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_min().getValue()) / \ self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_inc().getValue() \ ))) xsDataMesh.setFastMotorSteps(xsSteps) xsDataMesh.setSlowMotorStart(XSDataDouble(0.0)) xsDataMesh.setSlowMotorStop(self.xsDataDiffractionCTInstrument.get_tomo_scan_ampl()) xsSteps = XSDataInteger(int(round(\ self.xsDataDiffractionCTInstrument.get_tomo_scan_ampl().getValue() / \ self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_rotation_inc().getValue()))) xsDataMesh.setSlowMotorSteps(xsSteps) xsDataSpectrum.setSlowMotorPosition(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_rotation()) elif self.xsDataDiffractionCTInstrument.get_tomo_scan_type().getValue().lower() == "mapping": #I agree mappings are not sinograms but the really looks like, no ? xsDataSpectrum.setFastMotorPosition(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x()) xsDataSpectrum.setSlowMotorPosition(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_z()) xsSteps = XSDataInteger(int(round(\ (self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_max().getValue() - \ self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_min().getValue()) / \ self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_inc().getValue() \ ))) xsDataMesh.setFastMotorSteps(xsSteps) xsDataMesh.setFastMotorStop(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_max()) xsDataMesh.setFastMotorStart(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_min()) xsSteps = XSDataInteger(int(round(\ (self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_z_max().getValue() - \ self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_z_min().getValue()) / \ self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_z_inc().getValue() \ ))) xsDataMesh.setSlowMotorSteps(xsSteps) xsDataMesh.setSlowMotorStop(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_z_max()) xsDataMesh.setSlowMotorStart(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_z_min()) xsDataSpectrum.setMeshScan(xsDataMesh) xsDataInputHDF5MapSpectra.setInputSpectrumFile([xsDataSpectrum]) self.edPluginHDF5MapSpectra = self.loadPlugin(self.strControlledPluginHDF5MapSpectra) self.edPluginHDF5MapSpectra.setDataInput(xsDataInputHDF5MapSpectra) self.edPluginHDF5MapSpectra.connectSUCCESS(self.doSuccessWriteSinogram) self.edPluginHDF5MapSpectra.connectFAILURE(self.doFailureWriteSinogram) self.edPluginHDF5MapSpectra.execute()
class EDPluginControlDiffractionCTv1_2(EDPluginControl): """ This is the EDNA control plug-in for diffraction contrast tomography. It is intented to run 2D integration provided by SPD for example and create a sinogram as a 3D array in HDF5.... """ CONF_INPUT_IMAGE_SIZE = "inputImageSize" def __init__(self): """ """ EDPluginControl.__init__(self) self.setXSDataInputClass(XSDataInputDiffractionCT) self.strControlledPluginReadHeader = "EDPluginControlDCTReadHeaderv1_0" self.strControlledPluginPowderIntegration = "EDPluginControlDCTPowderIntegrationv1_1" self.strControlledPluginHDF5MapSpectra = "EDPluginHDF5MapOfSpectrav10" self.strControlledPluginExportAsciiPowder = "EDPluginExportAsciiPowderv1_0" self.strControlledPluginWait = "EDPluginWaitFile" self.edPluginPowderIntegration = None self.xsDataDiffractionCTInstrument = None self.xsDataDiffractionCTImage = None self.xsDataFileInputImage = None self.xsDataFileInputPowderDiffraction = None self.xsDataResultDiffractionCT = None self.edPluginHDF5MapSpectra = None self.edPluginExportAsciiPowder = None self.xsdForceImageParam = None self.xsdForceScanParam = None self.powderDiffractionFormat = "edf" #default output format self.iImageSize = 100 #Default value def checkParameters(self): """ Checks the mandatory parameters. """ EDVerbose.DEBUG("EDPluginControlDiffractionCTv1_2.checkParameters") self.checkMandatoryParameters(self.getDataInput(), "Data Input is None") self.checkMandatoryParameters(self.getDataInput().getImage(), "No path to input image") self.checkMandatoryParameters(self.getDataInput().getDestinationDirectory(), "No path to destination directory") self.checkMandatoryParameters(self.getDataInput().getSinogramFileNamePrefix(), "No sinogram prefix given") self.checkMandatoryParameters(self.getDataInput().getPowderDiffractionSubdirectory(), "No subdirectory prefix for powder diffraction patterns") def preProcess(self, _edObject=None): EDPluginControl.preProcess(self) EDVerbose.DEBUG("EDPluginControlDiffractionCTv1_2.preProcess") # Load the execution plugin self.edPluginPowderIntegration = self.loadPlugin(self.strControlledPluginPowderIntegration) self.edPluginHDF5MapSpectra = self.loadPlugin(self.strControlledPluginHDF5MapSpectra) self.edPluginExportAsciiPowder = self.loadPlugin(self.strControlledPluginExportAsciiPowder) sdi = self.getDataInput() self.xsDataFileInputImage = self.getDataInput().getImage() self.xsdForceImageParam = sdi.getOverrideImageParam() self.xsdForceScanParam = sdi.getOverrideScanParam() if sdi.getPowderDiffractionFormat() is not None: self.powderDiffractionFormat = sdi.getPowderDiffractionFormat().getValue() def configure(self): """ Configures the plugin from the configuration file with the following parameters - Excpected image size """ EDPluginControl.configure(self) EDVerbose.DEBUG("EDPluginControlDiffractionCTv1_2.configure") xsPluginItem = self.getConfiguration() if (xsPluginItem == None): EDVerbose.warning("EDPluginControlDiffractionCTv1_2.configure: No plugin item defined.") xsPluginItem = XSPluginItem() strImageSize = EDConfiguration.getStringParamValue(xsPluginItem, EDPluginControlDiffractionCTv1_2.CONF_INPUT_IMAGE_SIZE) if(strImageSize == None): EDVerbose.WARNING("EDPluginControlDiffractionCTv1_2.configure: No configuration parameter found for: %s, using default value: %s " % (\ EDPluginControlDiffractionCTv1_2.CONF_INPUT_IMAGE_SIZE, self.iImageSize)) else: self.iImageSize = int(strImageSize) def process(self, _edObject=None): EDPluginControl.process(self) EDVerbose.DEBUG("EDPluginControlDiffractionCTv1_2.process") #=============================================================================== # Wait File #=============================================================================== edPluginWaitFile = self.loadPlugin(self.strControlledPluginWait) xsdin = XSDataInputWaitFile() xsdin.setExpectedFile(self.xsDataFileInputImage) xsdin.setExpectedSize(XSDataInteger(self.iImageSize)) edPluginWaitFile.setDataInput(xsdin) edPluginWaitFile.connectSUCCESS(self.doSuccessWaitFile) edPluginWaitFile.connectFAILURE(self.doFailureWaitFile) edPluginWaitFile.executeSynchronous() #=============================================================================== # #ReadHeader #=============================================================================== edPluginReadHeader = self.loadPlugin(self.strControlledPluginReadHeader) # Set the input data for the read header plugin xsDataInputReadHeader = XSDataInputReadHeader() xsDataInputReadHeader.setInputFile(self.xsDataFileInputImage) edPluginReadHeader.setDataInput(xsDataInputReadHeader) edPluginReadHeader.connectSUCCESS(self.doSuccessReadHeader) edPluginReadHeader.connectFAILURE(self.doFailureReadHeader) edPluginReadHeader.executeSynchronous() ################################################################################ # Powder Integration ################################################################################ self.edPluginPowderIntegration.connectSUCCESS(self.doSuccessPowderIntegration) self.edPluginPowderIntegration.connectFAILURE(self.doFailurePowderIntegration) self.edPluginPowderIntegration.executeSynchronous() self.edPluginHDF5MapSpectra.connectSUCCESS(self.doSuccessWriteSinogram) self.edPluginHDF5MapSpectra.connectFAILURE(self.doFailureWriteSinogram) self.edPluginHDF5MapSpectra.execute() self.edPluginExportAsciiPowder.connectSUCCESS(self.doSuccessExportAsciiPowder) self.edPluginExportAsciiPowder.connectFAILURE(self.doFailureExportAsciiPowder) self.edPluginExportAsciiPowder.execute() def postProcess(self, _edObject=None): EDPluginControl.postProcess(self) EDVerbose.DEBUG("EDPluginControlDiffractionCTv1_2.postProcess") self.synchronizePlugins() self.setDataOutput(self.xsDataResultDiffractionCT) def doSuccessWaitFile(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlDiffractionCTv1_2.doSuccessWaitFile") self.retrieveSuccessMessages(_edPlugin, "EDPluginControlDiffractionCTv1_2.doSuccessWaitFile") def doFailureWaitFile(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlDiffractionCTv1_2.doFailureWaitFile") self.retrieveFailureMessages(_edPlugin, "EDPluginControlDiffractionCTv1_2.doFailureWaitFile") EDVerbose.ERROR("Failure in WaitFile of %s " % _edPlugin.getDataInput().marshal()) self.setFailure() def doSuccessReadHeader(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlDiffractionCTv1_2.doSuccessReadHeader") self.retrieveSuccessMessages(_edPlugin, "EDPluginControlDiffractionCTv1_2.doSuccessReadHeader") # Translate dictionary to image and instrument objects xsDataInputPowderIntegration = XSDataInputPowderIntegration() self.xsDataDiffractionCTInstrument = XSDataDiffractionCTInstrument() self.xsDataDiffractionCTImage = XSDataDiffractionCTImage() xsdOut = _edPlugin.getDataOutput() if xsdOut is None: strErr = "EDPluginControlDiffractionCTv1_2.doSuccessReadHeader: xsdataResult is None" EDVerbose.ERROR(strErr) self.setFailure() raise RuntimeError(strErr) xsDataDictionaryHeader = xsdOut.getDictionary() for xsDataKeyValuePair in xsDataDictionaryHeader.getKeyValuePair(): strKey = str(xsDataKeyValuePair.getKey().getValue()) lstValue = xsDataKeyValuePair.getValue().getValue().split() if len(lstValue) == 2: strValue = lstValue[0] strUnit = lstValue[1] else: strValue = xsDataKeyValuePair.getValue().getValue() strUnit = None if (strKey == "_diffrn_radiation_wavelength"): xsd = EDUtilsUnit.toXSD(XSDataWavelength, strValue) self.xsDataDiffractionCTInstrument.set_diffrn_radiation_wavelength(xsd) elif (strKey == "_pd_instr_dist_spec/detc"): xsd = EDUtilsUnit.toXSD(XSDataLength, strValue) self.xsDataDiffractionCTInstrument.set_pd_instr_dist_spec_detc(xsd) elif (strKey == "_pd_meas_2theta_range_max"): xsd = XSDataAngle(float(strValue)) if strUnit is None: strUnit = "deg" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTInstrument.set_pd_meas_2theta_range_max(xsd) elif (strKey == "_pd_meas_2theta_range_min"): xsd = XSDataAngle(float(strValue)) if strUnit is None: strUnit = "deg" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTInstrument.set_pd_meas_2theta_range_min(xsd) elif (strKey == "_pd_meas_2theta_range_inc"): xsd = XSDataAngle(float(strValue)) if strUnit is None: strUnit = "deg" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTInstrument.set_pd_meas_2theta_range_inc(xsd) elif (strKey == "_synchrotron_photon-flux"): self.xsDataDiffractionCTInstrument.set_synchrotron_photon_flux(XSDataFlux(float(strValue))) elif (strKey == "_synchrotron_ring-intensity"): self.xsDataDiffractionCTInstrument.set_synchrotron_ring_intensity(XSDataDouble(float(strValue))) elif (strKey == "_tomo_scan_ampl"): xsd = XSDataAngle(float(strValue)) if strUnit is None: strUnit = "deg" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTInstrument.set_tomo_scan_ampl(xsd) elif (strKey == "_tomo_scan_type"): self.xsDataDiffractionCTInstrument.set_tomo_scan_type(XSDataString(strValue)) elif (strKey == "_tomo_spec_displ_rotation"): xsd = XSDataAngle(float(strValue)) if strUnit is None: strUnit = "deg" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_rotation(xsd) elif (strKey == "_tomo_spec_displ_rotation_inc"): xsd = XSDataAngle(float(strValue)) if strUnit is None: strUnit = "deg" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_rotation_inc(xsd) elif (strKey == "_tomo_spec_displ_x"): xsd = EDUtilsUnit.toXSD(XSDataLength, strValue) self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_x(xsd) elif (strKey == "_tomo_spec_displ_x_inc"): xsd = EDUtilsUnit.toXSD(XSDataLength, strValue) self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_x_inc(xsd) elif (strKey == "_tomo_spec_displ_x_max"): xsd = XSDataLength(float(strValue)) if strUnit is None: strUnit = "mm" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_x_max(xsd) elif (strKey == "_tomo_spec_displ_x_min"): xsd = XSDataLength(float(strValue)) if strUnit is None: strUnit = "mm" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_x_min(xsd) elif (strKey == "_tomo_spec_displ_z"): xsd = XSDataLength(float(strValue)) if strUnit is None: strUnit = "mm" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_z(xsd) elif (strKey == "_tomo_spec_displ_z_inc"): xsd = XSDataLength(float(strValue)) if strUnit is None: strUnit = "mm" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_z_inc(xsd) elif (strKey == "_tomo_spec_displ_z_max"): xsd = XSDataLength(float(strValue)) if strUnit is None: strUnit = "mm" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_z_max(xsd) elif (strKey == "_tomo_spec_displ_z_min"): xsd = XSDataLength(float(strValue)) if strUnit is None: strUnit = "mm" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_z_min(xsd) elif (strKey == "_pd_instr_special_details_tilt_angle"): xsd = XSDataAngle(float(strValue)) if strUnit is None: strUnit = "deg" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTImage.set_pd_instr_special_details_tilt_angle(xsd) elif (strKey == "_pd_instr_special_details_tilt_rotation"): xsd = XSDataAngle(float(strValue)) if strUnit is None: strUnit = "deg" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTImage.set_pd_instr_special_details_tilt_rotation(xsd) elif (strKey == "_array_element_size[1]"): xsd = XSDataLength(float(strValue)) if strUnit is None: strUnit = "m" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTImage.set_array_element_size_1(xsd) elif (strKey == "_array_element_size[2]"): xsd = XSDataLength(float(strValue)) if strUnit is None: strUnit = "m" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTImage.set_array_element_size_2(xsd) elif (strKey == "_diffrn_detector_element.center[1]"): xsd = XSDataLength(float(strValue)) if strUnit is None: strUnit = "mm" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTImage.set_diffrn_detector_element_center_1(xsd) elif (strKey == "_diffrn_detector_element.center[2]"): xsd = XSDataLength(float(strValue)) if strUnit is None: strUnit = "mm" xsd.setUnit(XSDataString(strUnit)) self.xsDataDiffractionCTImage.set_diffrn_detector_element_center_2(xsd) elif (strKey == "_file_correction_image_dark-current"): xsDataFileDark = XSDataFile() xsDataFileDark.setPath(XSDataString(strValue)) self.xsDataDiffractionCTImage.set_file_correction_image_dark_current(xsDataFileDark) elif (strKey == "_file_correction_image_flat-field"): xsDataFileFlat = XSDataFile() xsDataFileFlat.setPath(XSDataString(strValue)) self.xsDataDiffractionCTImage.set_file_correction_image_flat_field(xsDataFileFlat) elif (strKey == "_file_correction_image-mask"): xsDataFileMask = XSDataFile() xsDataFileMask.setPath(XSDataString(strValue)) self.xsDataDiffractionCTImage.set_file_correction_image_mask(xsDataFileMask) elif (strKey == "_file_correction_spline_spatial-distortion"): xsDataFileSpatialDist = XSDataFile() xsDataFileSpatialDist.setPath(XSDataString(strValue)) self.xsDataDiffractionCTImage.set_file_correction_spline_spatial_distortion(xsDataFileSpatialDist) if self.xsdForceImageParam is not None: self.forceImageParam(self.xsdForceImageParam) if self.xsdForceScanParam is not None: self.forceScanParam(self.xsdForceScanParam) xsDataInputPowderIntegration.setImageParameters(self.xsDataDiffractionCTImage) xsDataInputPowderIntegration.setInstrumentParameters(self.xsDataDiffractionCTInstrument) xsDataInputPowderIntegration.setImageFile(self.xsDataFileInputImage) # Set the destination directory for output XRPD file strDestinationDirectory = os.path.join(self.getDataInput().getDestinationDirectory().getPath().getValue(), \ self.getDataInput().getPowderDiffractionSubdirectory().getValue()) if self.xsDataDiffractionCTInstrument.get_tomo_scan_type().getValue().lower() in ["flat", "spiral"]: pyintLineNumber = int(abs(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_rotation().getValue()) / self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_rotation_inc().getValue()) elif self.xsDataDiffractionCTInstrument.get_tomo_scan_type().getValue().lower() == "mapping": #I agree mappings are not sinograms but the really looks like, no ? pyintLineNumber = int(abs(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_z().getValue() - self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_z_min().getValue()) / self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_z_inc().getValue()) else: pyintLineNumber = None try: strDestinationDirectory = "%s%04i" % (strDestinationDirectory, pyintLineNumber) except TypeError: pass #if pyintLineNumber is none: do not add suffix xsDataInputPowderIntegration.setDestinationDir(XSDataFile(XSDataString(strDestinationDirectory))) self.edPluginPowderIntegration.setDataInput(xsDataInputPowderIntegration) def doFailureReadHeader(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlDiffractionCTv1_2.doFailureReadHeader") self.retrieveFailureMessages(_edPlugin, "EDPluginControlDiffractionCTv1_2.doFailureReadHeader") self.setFailure() def doSuccessPowderIntegration(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlDiffractionCTv1_2.doSuccessPowderIntegration") self.retrieveSuccessMessages(_edPlugin, "EDPluginControlDiffractionCTv1_2.doSuccessPowderIntegration") self.xsDataResultDiffractionCT = XSDataResultDiffractionCT() xsDataFileIntegratedIntensities = _edPlugin.getDataOutput().getIntegratedIntensities() if (xsDataFileIntegratedIntensities is not None): # EDVerbose.DEBUG(self.edPluginPowderIntegration.getDataOutput().mashal()) xsdPathFileIntegratedIntensities = xsDataFileIntegratedIntensities.getPath() if self.powderDiffractionFormat == "edf": self.xsDataResultDiffractionCT.setIntegratedIntensities(xsDataFileIntegratedIntensities) else: xsdInput1DPowderEDF = XSDataInput1DPowderEDF() xsdInput1DPowderEDF.setEdfFile(xsDataFileIntegratedIntensities) xsdOutFile = XSDataFile() xsdOutFile.setPath(XSDataString(os.path.splitext(xsdPathFileIntegratedIntensities.getValue())[0] + "." + self.powderDiffractionFormat)) xsdInput1DPowderEDF.setOutputFile(xsdOutFile) xsdInput1DPowderEDF.setOutputFormat(XSDataString(self.powderDiffractionFormat)) self.edPluginExportAsciiPowder.setDataInput(xsdInput1DPowderEDF) xsDataInputHDF5MapSpectra = XSDataInputHDF5MapSpectra() xsDataMesh = XSDataMeshScan() xsDataSpectrum = XSDataSpectrum() xsDataSpectrum.setPath(xsdPathFileIntegratedIntensities) strDestinationFile = os.path.join(self.getDataInput().getDestinationDirectory().getPath().getValue(), \ self.getDataInput().getSinogramFileNamePrefix().getValue() + ".h5") xsDataPathSinogram = XSDataFile() xsDataPathSinogram.setPath(XSDataString(strDestinationFile)) xsDataInputHDF5MapSpectra.setHDF5File(xsDataPathSinogram) xsDataInputHDF5MapSpectra.setInternalHDF5Path(XSDataString("RawDCT")) if self.xsDataDiffractionCTInstrument.get_tomo_scan_type().getValue().lower() in ["flat", "spiral"]: xsDataSpectrum.setFastMotorPosition(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x()) xsDataMesh.setFastMotorStart(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_min()) xsDataMesh.setFastMotorStop(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_max()) xsSteps = XSDataInteger(int(round(\ (self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_max().getValue() - \ self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_min().getValue()) / \ self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_inc().getValue() \ ))) xsDataMesh.setFastMotorSteps(xsSteps) xsDataMesh.setSlowMotorStart(XSDataDouble(0.0)) xsDataMesh.setSlowMotorStop(self.xsDataDiffractionCTInstrument.get_tomo_scan_ampl()) xsSteps = XSDataInteger(int(round(\ self.xsDataDiffractionCTInstrument.get_tomo_scan_ampl().getValue() / \ self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_rotation_inc().getValue()))) xsDataMesh.setSlowMotorSteps(xsSteps) xsDataSpectrum.setSlowMotorPosition(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_rotation()) elif self.xsDataDiffractionCTInstrument.get_tomo_scan_type().getValue().lower() == "mapping": #I agree mappings are not sinograms but the really looks like, no ? xsDataSpectrum.setFastMotorPosition(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x()) xsDataSpectrum.setSlowMotorPosition(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_z()) xsSteps = XSDataInteger(int(round(\ (self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_max().getValue() - \ self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_min().getValue()) / \ self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_inc().getValue() \ ))) xsDataMesh.setFastMotorSteps(xsSteps) xsDataMesh.setFastMotorStop(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_max()) xsDataMesh.setFastMotorStart(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_min()) xsSteps = XSDataInteger(int(round(\ (self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_z_max().getValue() - \ self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_z_min().getValue()) / \ self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_z_inc().getValue() \ ))) xsDataMesh.setSlowMotorSteps(xsSteps) xsDataMesh.setSlowMotorStop(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_z_max()) xsDataMesh.setSlowMotorStart(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_z_min()) xsDataSpectrum.setMeshScan(xsDataMesh) xsDataInputHDF5MapSpectra.setInputSpectrumFile([xsDataSpectrum]) self.edPluginHDF5MapSpectra.setDataInput(xsDataInputHDF5MapSpectra) def doFailurePowderIntegration(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlDiffractionCTv1_2.doFailurePowderIntegration") self.retrieveFailureMessages(_edPlugin, "EDPluginControlDiffractionCTv1_2.doFailurePowderIntegration") self.setFailure() def doSuccessWriteSinogram(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlDiffractionCTv1_2.doSuccessWriteSinogram") self.retrieveSuccessMessages(_edPlugin, "EDPluginControlDiffractionCTv1_2.doSuccessWriteSinogram") xsDataResultWriteSinogram = self.edPluginHDF5MapSpectra.getDataOutput() if (xsDataResultWriteSinogram is not None): self.xsDataResultDiffractionCT.setSinogramFile([xsDataResultWriteSinogram.getHDF5File()]) def doFailureWriteSinogram(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlDiffractionCTv1_2.doFailureWriteSinogram") self.retrieveFailureMessages(_edPlugin, "EDPluginControlDiffractionCTv1_2.doFailureWriteSinogram") self.setFailure() def doSuccessExportAsciiPowder(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlDiffractionCTv1_2.doSuccessExportAsciiPowder") self.retrieveSuccessMessages(_edPlugin, "EDPluginControlDiffractionCTv1_2.doSuccessExportAsciiPowder") xsDataResultExport1DPower = _edPlugin.getDataOutput() if (xsDataResultExport1DPower is not None): self.xsDataResultDiffractionCT.setIntegratedIntensities(xsDataResultExport1DPower.getOutputFile()) def doFailureExportAsciiPowder(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlDiffractionCTv1_2.doFailureExportAsciiPowder") self.retrieveFailureMessages(_edPlugin, "EDPluginControlDiffractionCTv1_2.doFailureExportAsciiPowder") self.setFailure() def forceImageParam(self, xsdForceImageParam): """ Helper function to override self.xsDataDiffractionCTImage with the contents of xsdForceImageParam @param xsDataDiffractionCTImage: instance of XSDataDiffractionCTImage @return: None """ if xsdForceImageParam.get_array_element_size_1() is not None: self.xsDataDiffractionCTImage.set_array_element_size_1(xsdForceImageParam.get_array_element_size_1()) if xsdForceImageParam.get_array_element_size_2() is not None: self.xsDataDiffractionCTImage.set_array_element_size_2(xsdForceImageParam.get_array_element_size_2()) if xsdForceImageParam.get_diffrn_detector_element_center_1() is not None: self.xsDataDiffractionCTImage.set_diffrn_detector_element_center_1(xsdForceImageParam.get_diffrn_detector_element_center_1()) if xsdForceImageParam.get_diffrn_detector_element_center_2() is not None: self.xsDataDiffractionCTImage.set_diffrn_detector_element_center_2(xsdForceImageParam.get_diffrn_detector_element_center_2()) if xsdForceImageParam.get_file_correction_image_dark_current() is not None: self.xsDataDiffractionCTImage.set_file_correction_image_dark_current(xsdForceImageParam.get_file_correction_image_dark_current()) if xsdForceImageParam.get_file_correction_image_flat_field() is not None: self.xsDataDiffractionCTImage.set_file_correction_image_flat_field(xsdForceImageParam.get_file_correction_image_flat_field()) if xsdForceImageParam.get_file_correction_image_mask() is not None: self.xsDataDiffractionCTImage.set_file_correction_image_mask(xsdForceImageParam.get_file_correction_image_mask()) if xsdForceImageParam.get_file_correction_spline_spatial_distortion() is not None: self.xsDataDiffractionCTImage.set_file_correction_spline_spatial_distortion(xsdForceImageParam.get_file_correction_spline_spatial_distortion()) if xsdForceImageParam.get_pd_instr_special_details_tilt_angle() is not None: self.xsDataDiffractionCTImage.set_pd_instr_special_details_tilt_angle(xsdForceImageParam.get_pd_instr_special_details_tilt_angle()) if xsdForceImageParam.get_pd_instr_special_details_tilt_rotation() is not None: self.xsDataDiffractionCTImage.set_pd_instr_special_details_tilt_rotation(xsdForceImageParam.get_pd_instr_special_details_tilt_rotation()) def forceScanParam(self, xsdForceScanParam): """ Helper function to override self.xsDataDiffractionCTInstrument with the contents of xsdForceScanParam @param xsdForceScanParam: instance of XSDataDiffractionCTInstrument @return: None """ if xsdForceScanParam.get_diffrn_radiation_wavelength() is not None: self.xsDataDiffractionCTInstrument.set_diffrn_radiation_wavelength(xsdForceScanParam.get_diffrn_radiation_wavelength()) if xsdForceScanParam.get_pd_instr_dist_spec_detc() is not None: self.xsDataDiffractionCTInstrument.set_pd_instr_dist_spec_detc(xsdForceScanParam.get_pd_instr_dist_spec_detc()) if xsdForceScanParam.get_pd_meas_2theta_range_inc() is not None: self.xsDataDiffractionCTInstrument.set_pd_meas_2theta_range_inc(xsdForceScanParam.get_pd_meas_2theta_range_inc()) if xsdForceScanParam.get_pd_meas_2theta_range_max() is not None: self.xsDataDiffractionCTInstrument.set_pd_meas_2theta_range_max(xsdForceScanParam.get_pd_meas_2theta_range_max()) if xsdForceScanParam.get_pd_meas_2theta_range_min() is not None: self.xsDataDiffractionCTInstrument.set_pd_meas_2theta_range_min(xsdForceScanParam.get_pd_meas_2theta_range_min()) if xsdForceScanParam.get_synchrotron_photon_flux() is not None: self.xsDataDiffractionCTInstrument.set_synchrotron_photon_flux(xsdForceScanParam.get_synchrotron_photon_flux()) if xsdForceScanParam.get_synchrotron_ring_intensity() is not None: self.xsDataDiffractionCTInstrument.set_synchrotron_ring_intensity(xsdForceScanParam.get_synchrotron_ring_intensity()) if xsdForceScanParam.get_tomo_scan_ampl() is not None: self.xsDataDiffractionCTInstrument.set_tomo_scan_ampl(xsdForceScanParam.get_tomo_scan_ampl()) if xsdForceScanParam.get_tomo_scan_type() is not None: self.xsDataDiffractionCTInstrument.set_tomo_scan_type(xsdForceScanParam.get_tomo_scan_type()) if xsdForceScanParam.get_tomo_spec_displ_rotation() is not None: self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_rotation(xsdForceScanParam.get_tomo_spec_displ_rotation()) if xsdForceScanParam.get_tomo_spec_displ_rotation_inc() is not None: self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_rotation_inc(xsdForceScanParam.get_tomo_spec_displ_rotation_inc()) if xsdForceScanParam.get_tomo_spec_displ_x_min() is not None: self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_x_min(xsdForceScanParam.get_tomo_spec_displ_x_min()) if xsdForceScanParam.get_tomo_spec_displ_x_max() is not None: self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_x_max(xsdForceScanParam.get_tomo_spec_displ_x_max()) if xsdForceScanParam.get_tomo_spec_displ_x_inc() is not None: self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_x_inc(xsdForceScanParam.get_tomo_spec_displ_x_inc()) if xsdForceScanParam.get_tomo_spec_displ_x() is not None: self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_x(xsdForceScanParam.get_tomo_spec_displ_x()) if xsdForceScanParam.get_tomo_spec_displ_z() is not None: self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_z(xsdForceScanParam.get_tomo_spec_displ_z()) if xsdForceScanParam.get_tomo_spec_displ_z_inc() is not None: self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_z_inc(xsdForceScanParam.get_tomo_spec_displ_z_inc()) if xsdForceScanParam.get_tomo_spec_displ_z_max() is not None: self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_z_max(xsdForceScanParam.get_tomo_spec_displ_z_max()) if xsdForceScanParam.get_tomo_spec_displ_z_min() is not None: self.xsDataDiffractionCTInstrument.set_tomo_spec_displ_z_min(xsdForceScanParam.get_tomo_spec_displ_z_min())
def doSuccessPowderIntegration(self, _edPlugin=None): EDVerbose.DEBUG("EDPluginControlDiffractionCTv1_2.doSuccessPowderIntegration") self.retrieveSuccessMessages(_edPlugin, "EDPluginControlDiffractionCTv1_2.doSuccessPowderIntegration") self.xsDataResultDiffractionCT = XSDataResultDiffractionCT() xsDataFileIntegratedIntensities = _edPlugin.getDataOutput().getIntegratedIntensities() if (xsDataFileIntegratedIntensities is not None): # EDVerbose.DEBUG(self.edPluginPowderIntegration.getDataOutput().mashal()) xsdPathFileIntegratedIntensities = xsDataFileIntegratedIntensities.getPath() if self.powderDiffractionFormat == "edf": self.xsDataResultDiffractionCT.setIntegratedIntensities(xsDataFileIntegratedIntensities) else: xsdInput1DPowderEDF = XSDataInput1DPowderEDF() xsdInput1DPowderEDF.setEdfFile(xsDataFileIntegratedIntensities) xsdOutFile = XSDataFile() xsdOutFile.setPath(XSDataString(os.path.splitext(xsdPathFileIntegratedIntensities.getValue())[0] + "." + self.powderDiffractionFormat)) xsdInput1DPowderEDF.setOutputFile(xsdOutFile) xsdInput1DPowderEDF.setOutputFormat(XSDataString(self.powderDiffractionFormat)) self.edPluginExportAsciiPowder.setDataInput(xsdInput1DPowderEDF) xsDataInputHDF5MapSpectra = XSDataInputHDF5MapSpectra() xsDataMesh = XSDataMeshScan() xsDataSpectrum = XSDataSpectrum() xsDataSpectrum.setPath(xsdPathFileIntegratedIntensities) strDestinationFile = os.path.join(self.getDataInput().getDestinationDirectory().getPath().getValue(), \ self.getDataInput().getSinogramFileNamePrefix().getValue() + ".h5") xsDataPathSinogram = XSDataFile() xsDataPathSinogram.setPath(XSDataString(strDestinationFile)) xsDataInputHDF5MapSpectra.setHDF5File(xsDataPathSinogram) xsDataInputHDF5MapSpectra.setInternalHDF5Path(XSDataString("RawDCT")) if self.xsDataDiffractionCTInstrument.get_tomo_scan_type().getValue().lower() in ["flat", "spiral"]: xsDataSpectrum.setFastMotorPosition(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x()) xsDataMesh.setFastMotorStart(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_min()) xsDataMesh.setFastMotorStop(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_max()) xsSteps = XSDataInteger(int(round(\ (self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_max().getValue() - \ self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_min().getValue()) / \ self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_inc().getValue() \ ))) xsDataMesh.setFastMotorSteps(xsSteps) xsDataMesh.setSlowMotorStart(XSDataDouble(0.0)) xsDataMesh.setSlowMotorStop(self.xsDataDiffractionCTInstrument.get_tomo_scan_ampl()) xsSteps = XSDataInteger(int(round(\ self.xsDataDiffractionCTInstrument.get_tomo_scan_ampl().getValue() / \ self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_rotation_inc().getValue()))) xsDataMesh.setSlowMotorSteps(xsSteps) xsDataSpectrum.setSlowMotorPosition(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_rotation()) elif self.xsDataDiffractionCTInstrument.get_tomo_scan_type().getValue().lower() == "mapping": #I agree mappings are not sinograms but the really looks like, no ? xsDataSpectrum.setFastMotorPosition(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x()) xsDataSpectrum.setSlowMotorPosition(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_z()) xsSteps = XSDataInteger(int(round(\ (self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_max().getValue() - \ self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_min().getValue()) / \ self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_inc().getValue() \ ))) xsDataMesh.setFastMotorSteps(xsSteps) xsDataMesh.setFastMotorStop(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_max()) xsDataMesh.setFastMotorStart(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_x_min()) xsSteps = XSDataInteger(int(round(\ (self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_z_max().getValue() - \ self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_z_min().getValue()) / \ self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_z_inc().getValue() \ ))) xsDataMesh.setSlowMotorSteps(xsSteps) xsDataMesh.setSlowMotorStop(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_z_max()) xsDataMesh.setSlowMotorStart(self.xsDataDiffractionCTInstrument.get_tomo_spec_displ_z_min()) xsDataSpectrum.setMeshScan(xsDataMesh) xsDataInputHDF5MapSpectra.setInputSpectrumFile([xsDataSpectrum]) self.edPluginHDF5MapSpectra.setDataInput(xsDataInputHDF5MapSpectra)
class EDPluginControlDiffractionCTv1_0(EDPluginControl): """ This is the EDNA control plug-in for diffraction contrast tomography. It is intented to run 2D integration provided by Fit2D for example and .... """ def __init__(self): """ """ EDPluginControl.__init__(self) self.setXSDataInputClass(XSDataInputDiffractionCT) self.m_strControlledPluginReadHeader = "EDPluginControlDCTReadHeaderv1_0" self.m_edPluginReadHeader = None self.m_strControlledPluginPowderIntegration = "EDPluginControlDCTPowderIntegrationv1_0" self.m_edPluginPowderIntegration = None self.m_xsDataDiffractionCTInstrument = None self.m_xsDataDiffractionCTImage = None self.m_xsDataFileInputImage = None self.m_edPluginControlledPluginWriteSinogram = None self.m_strControlledPluginWriteSinogram = "EDPluginDCTWriteSinogramv1_0" self.m_xsDataFileInputPowderDiffraction = None self.m_xsDataResultDiffractionCT = None self.m_edPluginWriteSinogram = None def checkParameters(self): """ Checks the mandatory parameters. """ EDVerbose.DEBUG("*** EDPluginControlDiffractionCTv1_0.checkParameters") self.checkMandatoryParameters(self.getDataInput(), "Data Input is None") self.checkMandatoryParameters(self.getDataInput().getImage(), "No path to input image") self.checkMandatoryParameters(self.getDataInput().getDestinationDirectory(), "No path to destination directory") self.checkMandatoryParameters(self.getDataInput().getSinogramFileNamePrefix(), "No sinogram prefix given") self.checkMandatoryParameters( self.getDataInput().getPowderDiffractionSubdirectory(), "No subdirectory prefix for powder diffraction patterns", ) def preProcess(self, _edObject=None): EDPluginControl.preProcess(self) EDVerbose.DEBUG("*** EDPluginControlDiffractionCTv1_0.preProcess") # Load the execution plugin self.m_edPluginReadHeader = self.loadPlugin(self.m_strControlledPluginReadHeader) self.m_edPluginPowderIntegration = self.loadPlugin(self.m_strControlledPluginPowderIntegration) self.m_edPluginWriteSinogram = self.loadPlugin(self.m_strControlledPluginWriteSinogram) # Set the input data for the read header plugin xsDataInputReadHeader = XSDataInputReadHeader() xsdataStringPathToImage = self.getDataInput().getImage().getPath() self.m_xsDataFileInputImage = XSDataFile() self.m_xsDataFileInputImage.setPath(xsdataStringPathToImage) xsDataInputReadHeader.setInputFile(self.m_xsDataFileInputImage) self.m_edPluginReadHeader.setDataInput(xsDataInputReadHeader) def process(self, _edObject=None): EDPluginControl.process(self) EDVerbose.DEBUG("*** EDPluginControlDiffractionCTv1_0.process") self.m_edPluginReadHeader.connectSUCCESS(self.doSuccessReadHeader) self.m_edPluginReadHeader.connectFAILURE(self.doFailureReadHeader) self.m_edPluginPowderIntegration.connectSUCCESS(self.doSuccessPowderIntegration) self.m_edPluginPowderIntegration.connectFAILURE(self.doFailurePowderIntegration) self.m_edPluginWriteSinogram.connectSUCCESS(self.doSuccessWriteSinogram) self.m_edPluginWriteSinogram.connectFAILURE(self.doFailureWriteSinogram) self.m_edPluginReadHeader.executeSynchronous() def postProcess(self, _edObject=None): EDPluginControl.postProcess(self) EDVerbose.DEBUG("*** EDPluginControlDiffractionCTv1_0.postProcess") self.setDataOutput(self.m_xsDataResultDiffractionCT) def doSuccessReadHeader(self, _edPlugin=None): EDVerbose.DEBUG("*** EDPluginControlDiffractionCTv1_0.doSuccessReadHeader") self.retrieveSuccessMessages(_edPlugin, "EDPluginControlDiffractionCTv1_0.doSuccessReadHeader") # Translate dictionary to image and instrument objects xsDataInputPowderIntegration = XSDataInputPowderIntegration() self.m_xsDataDiffractionCTInstrument = XSDataDiffractionCTInstrument() self.m_xsDataDiffractionCTImage = XSDataDiffractionCTImage() xsDataDictionaryHeader = self.m_edPluginReadHeader.getDataOutput().getDictionary() for xsDataKeyValuePair in xsDataDictionaryHeader.getKeyValuePair(): strKey = str(xsDataKeyValuePair.getKey().getValue()) strValue = str(xsDataKeyValuePair.getValue().getValue()) if strKey == "_diffrn_radiation_wavelength": self.m_xsDataDiffractionCTInstrument.set_diffrn_radiation_wavelength(XSDataWavelength(float(strValue))) elif strKey == "_pd_instr_dist_spec/detc": self.m_xsDataDiffractionCTInstrument.set_pd_instr_dist_spec_detc(XSDataLength(float(strValue))) elif strKey == "_pd_meas_2theta_range_max": self.m_xsDataDiffractionCTInstrument.set_pd_meas_2theta_range_max(XSDataAngle(float(strValue))) elif strKey == "_pd_meas_2theta_range_min": self.m_xsDataDiffractionCTInstrument.set_pd_meas_2theta_range_min(XSDataAngle(float(strValue))) elif strKey == "_pd_meas_2theta_range_inc": self.m_xsDataDiffractionCTInstrument.set_pd_meas_2theta_range_inc(XSDataAngle(float(strValue))) elif strKey == "_synchrotron_photon-flux": self.m_xsDataDiffractionCTInstrument.set_synchrotron_photon_flux(XSDataFlux(float(strValue))) elif strKey == "_synchrotron_ring-intensity": self.m_xsDataDiffractionCTInstrument.set_synchrotron_ring_intensity(XSDataDouble(float(strValue))) elif strKey == "_tomo_scan_ampl": self.m_xsDataDiffractionCTInstrument.set_tomo_scan_ampl(XSDataAngle(float(strValue))) elif strKey == "_tomo_scan_type": self.m_xsDataDiffractionCTInstrument.set_tomo_scan_type(XSDataString(strValue)) elif strKey == "_tomo_spec_displ_rotation": self.m_xsDataDiffractionCTInstrument.set_tomo_spec_displ_rotation(XSDataAngle(float(strValue))) elif strKey == "_tomo_spec_displ_rotation_inc": self.m_xsDataDiffractionCTInstrument.set_tomo_spec_displ_rotation_inc(XSDataAngle(float(strValue))) elif strKey == "_tomo_spec_displ_x": self.m_xsDataDiffractionCTInstrument.set_tomo_spec_displ_x(XSDataLength(float(strValue))) elif strKey == "_tomo_spec_displ_x_inc": self.m_xsDataDiffractionCTInstrument.set_tomo_spec_displ_x_inc(XSDataLength(float(strValue))) elif strKey == "_tomo_spec_displ_x_max": self.m_xsDataDiffractionCTInstrument.set_tomo_spec_displ_x_max(XSDataLength(float(strValue))) elif strKey == "_tomo_spec_displ_x_min": self.m_xsDataDiffractionCTInstrument.set_tomo_spec_displ_x_min(XSDataLength(float(strValue))) elif strKey == "_tomo_spec_displ_z": self.m_xsDataDiffractionCTInstrument.set_tomo_spec_displ_z(XSDataLength(float(strValue))) elif strKey == "_tomo_spec_displ_z_inc": self.m_xsDataDiffractionCTInstrument.set_tomo_spec_displ_z_inc(XSDataLength(float(strValue))) elif strKey == "_tomo_spec_displ_z_max": self.m_xsDataDiffractionCTInstrument.set_tomo_spec_displ_z_max(XSDataLength(float(strValue))) elif strKey == "_tomo_spec_displ_z_min": self.m_xsDataDiffractionCTInstrument.set_tomo_spec_displ_z_min(XSDataLength(float(strValue))) elif strKey == "_pd_instr_special_details_tilt_angle": self.m_xsDataDiffractionCTImage.set_pd_instr_special_details_tilt_angle(XSDataAngle(float(strValue))) elif strKey == "_pd_instr_special_details_tilt_rotation": self.m_xsDataDiffractionCTImage.set_pd_instr_special_details_tilt_rotation(XSDataAngle(float(strValue))) elif strKey == "_array_element_size[1]": self.m_xsDataDiffractionCTImage.set_array_element_size_1(XSDataLength(float(strValue))) elif strKey == "_array_element_size[2]": self.m_xsDataDiffractionCTImage.set_array_element_size_2(XSDataLength(float(strValue))) elif strKey == "_diffrn_detector_element.center[1]": self.m_xsDataDiffractionCTImage.set_diffrn_detector_element_center_1(XSDataLength(float(strValue))) elif strKey == "_diffrn_detector_element.center[2]": self.m_xsDataDiffractionCTImage.set_diffrn_detector_element_center_2(XSDataLength(float(strValue))) ## Here the tricky case of lists .... # elif strKey.startswith("_pd_sum_2theta_range_max"): # if strKey.find("[")>0: # pyintIndex = int(strKey.split("[")[1].split("]")[0]) - 1 #gets the int that is between [] # else: # pyintIndex = 0 # while len(self.m_xsDataDiffractionCTInstrument.get_pd_sum_2theta_range_max()) < pyintIndex + 1: # self.m_xsDataDiffractionCTInstrument.get_pd_sum_2theta_range_max().append(None) # self.m_xsDataDiffractionCTInstrument.get_pd_sum_2theta_range_max()[pyintIndex] = XSDataAngle(float(strValue)) # elif strKey.startswith("_pd_sum_2theta_range_min"): # if strKey.find("[")>0: # pyintIndex = int(strKey.split("[")[1].split("]")[0]) - 1 #gets the int that is between [] # else: # pyintIndex = 0 # while len(self.m_xsDataDiffractionCTInstrument.get_pd_sum_2theta_range_min()) < pyintIndex + 1: # self.m_xsDataDiffractionCTInstrument.get_pd_sum_2theta_range_min().append(None) # self.m_xsDataDiffractionCTInstrument.get_pd_sum_2theta_range_min()[pyintIndex] = XSDataAngle(float(strValue)) ##end Seems OK 20091023 elif strKey == "_file_correction_image_dark-current": xsDataFileDark = XSDataFile() xsDataFileDark.setPath(XSDataString(strValue)) self.m_xsDataDiffractionCTImage.set_file_correction_image_dark_current(xsDataFileDark) elif strKey == "_file_correction_image_flat-field": xsDataFileFlat = XSDataFile() xsDataFileFlat.setPath(XSDataString(strValue)) self.m_xsDataDiffractionCTImage.set_file_correction_image_flat_field(xsDataFileFlat) elif strKey == "_file_correction_image-mask": xsDataFileMask = XSDataFile() xsDataFileMask.setPath(XSDataString(strValue)) self.m_xsDataDiffractionCTImage.set_file_correction_image_mask(xsDataFileMask) elif strKey == "_file_correction_spline_spatial-distortion": xsDataFileSpatialDist = XSDataFile() xsDataFileSpatialDist.setPath(XSDataString(strValue)) self.m_xsDataDiffractionCTImage.set_file_correction_spline_spatial_distortion(xsDataFileSpatialDist) xsDataInputPowderIntegration.setImageParameters(self.m_xsDataDiffractionCTImage) xsDataInputPowderIntegration.setInstrumentParameters(self.m_xsDataDiffractionCTInstrument) xsDataInputPowderIntegration.setImageFile(self.m_xsDataFileInputImage) self.m_edPluginPowderIntegration.setDataInput(xsDataInputPowderIntegration) self.m_edPluginPowderIntegration.executeSynchronous() def doFailureReadHeader(self, _edPlugin=None): EDVerbose.DEBUG("*** EDPluginControlDiffractionCTv1_0.doFailureReadHeader") self.retrieveFailureMessages(_edPlugin, "EDPluginControlDiffractionCTv1_0.doFailureReadHeader") def doSuccessPowderIntegration(self, _edPlugin=None): EDVerbose.DEBUG("*** EDPluginControlDiffractionCTv1_0.doSuccessPowderIntegration") self.retrieveSuccessMessages(_edPlugin, "EDPluginControlDiffractionCTv1_0.doSuccessPowderIntegration") self.m_xsDataResultDiffractionCT = XSDataResultDiffractionCT() # Copy file to final destination and add path to result object xsDataFileIntegratedIntensities = self.m_edPluginPowderIntegration.getDataOutput().getIntegratedIntensities() EDVerbose.DEBUG("Path to cif: " + xsDataFileIntegratedIntensities.getPath().getValue()) EDVerbose.DEBUG("%s" % xsDataFileIntegratedIntensities) if xsDataFileIntegratedIntensities is not None: strOutputFilePath = xsDataFileIntegratedIntensities.getPath().getValue() strDestinationDirectory = self.getDataInput().getDestinationDirectory().getPath().getValue() strPowderDiffractionSubdirectory = self.getDataInput().getPowderDiffractionSubdirectory().getValue() if not os.path.isdir(strDestinationDirectory): os.mkdir(strDestinationDirectory) if self.m_xsDataDiffractionCTInstrument.get_tomo_scan_type().getValue().lower() in ["flat", "spiral"]: # pyintLineNumber = int( abs( float( self.cif[ "_tomo_spec_displ_rotation" ] ) / float( self.cif[ "_tomo_spec_displ_rotation_inc" ] ) ) ) pyintLineNumber = int( abs(self.m_xsDataDiffractionCTInstrument.get_tomo_spec_displ_rotation().getValue()) / self.m_xsDataDiffractionCTInstrument.get_tomo_spec_displ_rotation_inc().getValue() ) elif ( self.m_xsDataDiffractionCTInstrument.get_tomo_scan_type().getValue().lower() == "mapping" ): # I agree mappings are not sinograms but the really looks like, no ? # pyintLineNumber = int( abs( ( float( self.cif[ "_tomo_spec_displ_z" ]) - float ( self.cif [ "_tomo_spec_displ_z_min" ] ) ) / float( self.cif["_tomo_spec_displ_z_inc"] ) ) ) pyintLineNumber = int( abs( self.m_xsDataDiffractionCTInstrument.get_tomo_spec_displ_z().getValue() - self.m_xsDataDiffractionCTInstrument.get_tomo_spec_displ_z_min().getValue() ) / self.m_xsDataDiffractionCTInstrument.get_tomo_spec_displ_z_inc().getValue() ) else: pyintLineNumber = None if pyintLineNumber is not None: pystrDestinationSubDir = "%s%04i" % (strPowderDiffractionSubdirectory, pyintLineNumber) strDestinationDirectoryWithSub = os.path.join(strDestinationDirectory, pystrDestinationSubDir) strDestinationFilePath = os.path.join( strDestinationDirectoryWithSub, os.path.basename(strOutputFilePath) ) if not os.path.isdir(os.path.join(strDestinationDirectoryWithSub)): os.mkdir(strDestinationDirectoryWithSub) EDVerbose.DEBUG("Full path should be now: %s" % strDestinationFilePath) else: EDVerbose.DEBUG( "No modification of the output directory: I was not able to determine on which line of the sinogram I am." ) strDestinationFilePath = os.path.abspath( os.path.join(strDestinationDirectory, EDUtilsFile.getBaseName(strOutputFilePath)) ) EDUtilsFile.copyFile(strOutputFilePath, strDestinationFilePath) xsDataFileDestination = XSDataFile() xsDataFileDestination.setPath(XSDataString(strDestinationFilePath)) self.m_xsDataResultDiffractionCT.setIntegratedIntensities(xsDataFileDestination) xsDataPathSinogramDirectory = XSDataFile() xsDataPathSinogramDirectory.setPath(XSDataString(strDestinationDirectory)) xsDataInputWriteSinogram = XSDataInputWriteSinogram() xsDataInputWriteSinogram.setSinogramDirectory(xsDataPathSinogramDirectory) xsDataInputWriteSinogram.setIntegratedIntensities(xsDataFileDestination) xsDataInputWriteSinogram.setSinogramFileNamePrefix(self.getDataInput().getSinogramFileNamePrefix()) self.m_edPluginWriteSinogram.setDataInput(xsDataInputWriteSinogram) self.m_edPluginWriteSinogram.executeSynchronous() def doFailurePowderIntegration(self, _edPlugin=None): EDVerbose.DEBUG("*** EDPluginControlDiffractionCTv1_0.doFailurePowderIntegration") self.retrieveFailureMessages(_edPlugin, "EDPluginControlDiffractionCTv1_0.doFailurePowderIntegration") def doSuccessWriteSinogram(self, _edPlugin=None): EDVerbose.DEBUG("*** EDPluginControlDiffractionCTv1_0.doSuccessWriteSinogram") self.retrieveSuccessMessages(_edPlugin, "EDPluginControlDiffractionCTv1_0.doSuccessWriteSinogram") xsDataResultWriteSinogram = self.m_edPluginWriteSinogram.getDataOutput() if xsDataResultWriteSinogram is not None: self.m_xsDataResultDiffractionCT.setSinogramFile(xsDataResultWriteSinogram.getSinogramFile()) def doFailureWriteSinogram(self, _edPlugin=None): EDVerbose.DEBUG("*** EDPluginControlDiffractionCTv1_0.doFailureWriteSinogram") self.retrieveFailureMessages(_edPlugin, "EDPluginControlDiffractionCTv1_0.doFailureWriteSinogram")
def doSuccessPowderIntegration(self, _edPlugin=None): EDVerbose.DEBUG("*** EDPluginControlDiffractionCTv1_0.doSuccessPowderIntegration") self.retrieveSuccessMessages(_edPlugin, "EDPluginControlDiffractionCTv1_0.doSuccessPowderIntegration") self.m_xsDataResultDiffractionCT = XSDataResultDiffractionCT() # Copy file to final destination and add path to result object xsDataFileIntegratedIntensities = self.m_edPluginPowderIntegration.getDataOutput().getIntegratedIntensities() EDVerbose.DEBUG("Path to cif: " + xsDataFileIntegratedIntensities.getPath().getValue()) EDVerbose.DEBUG("%s" % xsDataFileIntegratedIntensities) if xsDataFileIntegratedIntensities is not None: strOutputFilePath = xsDataFileIntegratedIntensities.getPath().getValue() strDestinationDirectory = self.getDataInput().getDestinationDirectory().getPath().getValue() strPowderDiffractionSubdirectory = self.getDataInput().getPowderDiffractionSubdirectory().getValue() if not os.path.isdir(strDestinationDirectory): os.mkdir(strDestinationDirectory) if self.m_xsDataDiffractionCTInstrument.get_tomo_scan_type().getValue().lower() in ["flat", "spiral"]: # pyintLineNumber = int( abs( float( self.cif[ "_tomo_spec_displ_rotation" ] ) / float( self.cif[ "_tomo_spec_displ_rotation_inc" ] ) ) ) pyintLineNumber = int( abs(self.m_xsDataDiffractionCTInstrument.get_tomo_spec_displ_rotation().getValue()) / self.m_xsDataDiffractionCTInstrument.get_tomo_spec_displ_rotation_inc().getValue() ) elif ( self.m_xsDataDiffractionCTInstrument.get_tomo_scan_type().getValue().lower() == "mapping" ): # I agree mappings are not sinograms but the really looks like, no ? # pyintLineNumber = int( abs( ( float( self.cif[ "_tomo_spec_displ_z" ]) - float ( self.cif [ "_tomo_spec_displ_z_min" ] ) ) / float( self.cif["_tomo_spec_displ_z_inc"] ) ) ) pyintLineNumber = int( abs( self.m_xsDataDiffractionCTInstrument.get_tomo_spec_displ_z().getValue() - self.m_xsDataDiffractionCTInstrument.get_tomo_spec_displ_z_min().getValue() ) / self.m_xsDataDiffractionCTInstrument.get_tomo_spec_displ_z_inc().getValue() ) else: pyintLineNumber = None if pyintLineNumber is not None: pystrDestinationSubDir = "%s%04i" % (strPowderDiffractionSubdirectory, pyintLineNumber) strDestinationDirectoryWithSub = os.path.join(strDestinationDirectory, pystrDestinationSubDir) strDestinationFilePath = os.path.join( strDestinationDirectoryWithSub, os.path.basename(strOutputFilePath) ) if not os.path.isdir(os.path.join(strDestinationDirectoryWithSub)): os.mkdir(strDestinationDirectoryWithSub) EDVerbose.DEBUG("Full path should be now: %s" % strDestinationFilePath) else: EDVerbose.DEBUG( "No modification of the output directory: I was not able to determine on which line of the sinogram I am." ) strDestinationFilePath = os.path.abspath( os.path.join(strDestinationDirectory, EDUtilsFile.getBaseName(strOutputFilePath)) ) EDUtilsFile.copyFile(strOutputFilePath, strDestinationFilePath) xsDataFileDestination = XSDataFile() xsDataFileDestination.setPath(XSDataString(strDestinationFilePath)) self.m_xsDataResultDiffractionCT.setIntegratedIntensities(xsDataFileDestination) xsDataPathSinogramDirectory = XSDataFile() xsDataPathSinogramDirectory.setPath(XSDataString(strDestinationDirectory)) xsDataInputWriteSinogram = XSDataInputWriteSinogram() xsDataInputWriteSinogram.setSinogramDirectory(xsDataPathSinogramDirectory) xsDataInputWriteSinogram.setIntegratedIntensities(xsDataFileDestination) xsDataInputWriteSinogram.setSinogramFileNamePrefix(self.getDataInput().getSinogramFileNamePrefix()) self.m_edPluginWriteSinogram.setDataInput(xsDataInputWriteSinogram) self.m_edPluginWriteSinogram.executeSynchronous()