def getElementsInstance(dataDir=None, bindingEnergies=None, xcomFile=None): if dataDir is None: dataDir = DataDir.FISX_DATA_DIR try: from PyMca5.PyMcaDataDir import PYMCA_DATA_DIR as pymcaDataDir from PyMca5 import getDataFile except: _logger.info("Using fisx shell constants and ratios") pymcaDataDir = None if bindingEnergies is None: if pymcaDataDir is None: bindingEnergies = os.path.join(dataDir, "BindingEnergies.dat") else: bindingEnergies = getDataFile("BindingEnergies.dat") if xcomFile is None: if pymcaDataDir is None: xcomFile = os.path.join(dataDir, "XCOM_CrossSections.dat") else: xcomFile = getDataFile("XCOM_CrossSections.dat") t0 = time.time() instance = FisxElements(dataDir, bindingEnergies, xcomFile) _logger.debug("Shell constants") # the files should be taken from PyMca to make sure the same data are used for key in ["K", "L", "M"]: fname = instance.getShellConstantsFile(key) if sys.version > '3.0': # we have to make sure we have got a string if hasattr(fname, "decode"): fname = fname.decode("latin-1") _logger.debug("Before %s", fname) if pymcaDataDir is not None: fname = getDataFile(key + "ShellConstants.dat") else: fname = os.path.join(os.path.dirname(fname), key + "ShellConstants.dat") instance.setShellConstantsFile(key, fname) _logger.debug("After %s", instance.getShellConstantsFile(key)) _logger.debug("Radiative transitions") for key in ["K", "L", "M"]: fname = instance.getShellRadiativeTransitionsFile(key) if sys.version > '3.0': # we have to make sure we have got a string ... if hasattr(fname, "decode"): fname = fname.decode("latin-1") _logger.debug("Before %s", fname) if pymcaDataDir is not None: fname = getDataFile(key + "ShellRates.dat") else: fname = os.path.join(os.path.dirname(fname), key + "ShellRates.dat") instance.setShellRadiativeTransitionsFile(key, fname) _logger.debug("After %s ", instance.getShellRadiativeTransitionsFile(key)) _logger.debug("Reading Elapsed = %s", time.time() - t0) return instance
def testElementCrossSectionsReadout(self): if DEBUG: print() print("Test XCOM Cross Sections Readout") from PyMca5 import getDataFile from PyMca5.PyMcaIO import specfile xcomFile = getDataFile('XCOM_CrossSections.dat') sf = specfile.Specfile(xcomFile) for ele in ['Si', 'Fe', 'Pb', 'U']: if DEBUG: print("Testing element %s" % ele) z = self._elements.getz(ele) scan = sf[z-1] xcomLabels = scan.alllabels() self.assertTrue('ENERGY' in xcomLabels[0].upper()) self.assertTrue('COHERENT' in xcomLabels[1].upper()) self.assertTrue('COMPTON' in xcomLabels[2].upper()) self.assertTrue('PHOTO' in xcomLabels[-3].upper()) self.assertTrue('PAIR' in xcomLabels[-2].upper()) self.assertTrue('TOTAL' in xcomLabels[-1].upper()) xcomData = scan.data() # WARNING: This call is to read XCOM data # only in case energy is None the data are the same as # those found later on in the 'xcom' key of the element. data = self._elements.getelementmassattcoef(ele, energy=None) # The original data are in the xcom key data = self._elements.Element[ele]['xcom'] # Energy grid self.assertTrue(numpy.allclose(data['energy'], xcomData[0, :])) # Test the different cross sections self.assertTrue(numpy.allclose(data['coherent'], xcomData[1, :])) self.assertTrue(numpy.allclose(data['compton'], xcomData[2, :])) self.assertTrue(numpy.allclose(data['photo'], xcomData[-3, :])) self.assertTrue(numpy.allclose(data['pair'], xcomData[-2, :])) self.assertTrue(numpy.allclose(data['total'], xcomData[-1, :])) total = xcomData[1, :] + xcomData[2, :] +\ xcomData[-3, :] + xcomData[-2, :] # Check the total is self-consistent self.assertTrue(numpy.allclose(total, xcomData[-1, :]))
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # #############################################################################*/ __author__ = "V.A. Sole - ESRF Data Analysis" __contact__ = "*****@*****.**" __license__ = "MIT" __copyright__ = "European Synchrotron Radiation Facility, Grenoble, France" import os import numpy from PyMca5.PyMcaIO import specfile from PyMca5 import getDataFile sf = specfile.Specfile(getDataFile("MShellRates.dat")) ElementM1ShellTransitions = sf[0].alllabels() ElementM2ShellTransitions = sf[1].alllabels() ElementM3ShellTransitions = sf[2].alllabels() ElementM4ShellTransitions = sf[3].alllabels() ElementM5ShellTransitions = sf[4].alllabels() ElementM1ShellRates = numpy.transpose(sf[0].data()).tolist() ElementM2ShellRates = numpy.transpose(sf[1].data()).tolist() ElementM3ShellRates = numpy.transpose(sf[2].data()).tolist() ElementM4ShellRates = numpy.transpose(sf[3].data()).tolist() ElementM5ShellRates = numpy.transpose(sf[4].data()).tolist() sf = specfile.Specfile(getDataFile("MShellConstants.dat")) ElementM1ShellConstants = sf[0].alllabels() ElementM2ShellConstants = sf[1].alllabels() ElementM3ShellConstants = sf[2].alllabels()
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # #############################################################################*/ __author__ = "V.A. Sole - ESRF Data Analysis" __contact__ = "*****@*****.**" __license__ = "MIT" __copyright__ = "European Synchrotron Radiation Facility, Grenoble, France" import os import numpy from PyMca5 import getDataFile from PyMca5.PyMcaIO import specfile filename = getDataFile("BindingEnergies.dat") sf = specfile.Specfile(filename) ElementShells = sf[0].alllabels() ElementBinding = numpy.transpose(sf[0].data()).tolist() sf = None Elements = ['H', 'He', 'Li', 'Be', 'B', 'C', 'N', 'O', 'F', 'Ne', 'Na', 'Mg', 'Al', 'Si', 'P', 'S', 'Cl', 'Ar', 'K', 'Ca', 'Sc', 'Ti', 'V', 'Cr', 'Mn', 'Fe', 'Co', 'Ni', 'Cu', 'Zn', 'Ga', 'Ge', 'As', 'Se', 'Br', 'Kr', 'Rb', 'Sr', 'Y', 'Zr', 'Nb', 'Mo', 'Tc', 'Ru', 'Rh', 'Pd', 'Ag', 'Cd', 'In', 'Sn', 'Sb', 'Te', 'I', 'Xe', 'Cs', 'Ba', 'La', 'Ce', 'Pr', 'Nd', 'Pm', 'Sm', 'Eu', 'Gd', 'Tb', 'Dy', 'Ho', 'Er', 'Tm', 'Yb', 'Lu', 'Hf', 'Ta', 'W',
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # #############################################################################*/ __author__ = "V.A. Sole - ESRF Data Analysis" __contact__ = "*****@*****.**" __license__ = "MIT" __copyright__ = "European Synchrotron Radiation Facility, Grenoble, France" import os import numpy from PyMca5.PyMcaIO import specfile from PyMca5 import getDataFile sf=specfile.Specfile(getDataFile("LShellRates.dat")) ElementL1ShellTransitions = sf[0].alllabels() ElementL2ShellTransitions = sf[1].alllabels() ElementL3ShellTransitions = sf[2].alllabels() ElementL1ShellRates = numpy.transpose(sf[0].data()).tolist() ElementL2ShellRates = numpy.transpose(sf[1].data()).tolist() ElementL3ShellRates = numpy.transpose(sf[2].data()).tolist() sf=specfile.Specfile(getDataFile("LShellConstants.dat")) ElementL1ShellConstants = sf[0].alllabels() ElementL2ShellConstants = sf[1].alllabels() ElementL3ShellConstants = sf[2].alllabels() ElementL1ShellValues = numpy.transpose(sf[0].data()).tolist() ElementL2ShellValues = numpy.transpose(sf[1].data()).tolist() ElementL3ShellValues = numpy.transpose(sf[2].data()).tolist() sf=None
import numpy log = numpy.log exp = numpy.exp ElementList = [ 'H', 'He', 'Li', 'Be', 'B', 'C', 'N', 'O', 'F', 'Ne', 'Na', 'Mg', 'Al', 'Si', 'P', 'S', 'Cl', 'Ar', 'K', 'Ca', 'Sc', 'Ti', 'V', 'Cr', 'Mn', 'Fe', 'Co', 'Ni', 'Cu', 'Zn', 'Ga', 'Ge', 'As', 'Se', 'Br', 'Kr', 'Rb', 'Sr', 'Y', 'Zr', 'Nb', 'Mo', 'Tc', 'Ru', 'Rh', 'Pd', 'Ag', 'Cd', 'In', 'Sn', 'Sb', 'Te', 'I', 'Xe', 'Cs', 'Ba', 'La', 'Ce', 'Pr', 'Nd', 'Pm', 'Sm', 'Eu', 'Gd', 'Tb', 'Dy', 'Ho', 'Er', 'Tm', 'Yb', 'Lu', 'Hf', 'Ta', 'W', 'Re', 'Os', 'Ir', 'Pt', 'Au', 'Hg', 'Tl', 'Pb', 'Bi', 'Po', 'At', 'Rn', 'Fr', 'Ra', 'Ac', 'Th', 'Pa', 'U', 'Np', 'Pu', 'Am', 'Cm', 'Bk', 'Cf', 'Es', 'Fm', 'Md', 'No', 'Lr', 'Rf', 'Db', 'Sg', 'Bh', 'Hs', 'Mt' ] EPDL97_FILE = getDataFile("EPDL97_CrossSections.dat") EADL97_FILE = getDataFile("EADL97_BindingEnergies.dat") EPDL97_DICT = {} for element in ElementList: EPDL97_DICT[element] = {} #initialize the dictionary, for the time being compatible with PyMca 4.3.0 EPDL97_DICT = {} for element in ElementList: EPDL97_DICT[element] = {} EPDL97_DICT[element]['binding'] = {} EPDL97_DICT[element]['EPDL97'] = {} EPDL97_DICT[element]['original'] = True
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # #############################################################################*/ __author__ = "V.A. Sole - ESRF Data Analysis" __contact__ = "*****@*****.**" __license__ = "MIT" __copyright__ = "European Synchrotron Radiation Facility, Grenoble, France" import os import numpy from PyMca5 import getDataFile from PyMca5.PyMcaIO import specfile sf = specfile.Specfile(getDataFile("KShellRates.dat")) ElementKShellTransitions = sf[0].alllabels() ElementKShellRates = numpy.transpose(sf[0].data()).tolist() ElementKAlphaTransitions = [] ElementKBetaTransitions = [] for transition in ElementKShellTransitions: if transition[0] == 'K': if transition[1] == 'L': ElementKAlphaTransitions.append(transition) else: ElementKBetaTransitions.append(transition) elif transition[0] == 'Z': ElementKAlphaTransitions.append(transition) ElementKBetaTransitions.append(transition) else:
# of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # #############################################################################*/ __author__ = "V.A. Sole - ESRF Data Analysis" __contact__ = "*****@*****.**" __license__ = "MIT" __copyright__ = "European Synchrotron Radiation Facility, Grenoble, France" import sys import os from PyMca5.PyMcaIO import ConfigDict from PyMca5 import getDataFile dict = ConfigDict.ConfigDict() dictfile = getDataFile("Scofield1973.dict") dict.read(dictfile)
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # #############################################################################*/ __author__ = "V.A. Sole - ESRF Data Analysis" __contact__ = "*****@*****.**" __license__ = "MIT" __copyright__ = "European Synchrotron Radiation Facility, Grenoble, France" import os import numpy from PyMca5 import getDataFile from PyMca5.PyMcaIO import specfile filename = getDataFile("BindingEnergies.dat") sf = specfile.Specfile(filename) ElementShells = sf[0].alllabels() ElementBinding = numpy.transpose(sf[0].data()).tolist() sf = None Elements = [ 'H', 'He', 'Li', 'Be', 'B', 'C', 'N', 'O', 'F', 'Ne', 'Na', 'Mg', 'Al', 'Si', 'P', 'S', 'Cl', 'Ar', 'K', 'Ca', 'Sc', 'Ti', 'V', 'Cr', 'Mn', 'Fe', 'Co', 'Ni', 'Cu', 'Zn', 'Ga', 'Ge', 'As', 'Se', 'Br', 'Kr', 'Rb', 'Sr', 'Y', 'Zr', 'Nb', 'Mo', 'Tc', 'Ru', 'Rh', 'Pd', 'Ag', 'Cd', 'In', 'Sn', 'Sb', 'Te', 'I', 'Xe', 'Cs', 'Ba', 'La', 'Ce', 'Pr', 'Nd', 'Pm', 'Sm', 'Eu', 'Gd', 'Tb', 'Dy', 'Ho', 'Er', 'Tm', 'Yb', 'Lu', 'Hf', 'Ta', 'W', 'Re', 'Os', 'Ir', 'Pt', 'Au', 'Hg', 'Tl', 'Pb', 'Bi', 'Po', 'At', 'Rn', 'Fr', 'Ra', 'Ac', 'Th', 'Pa', 'U', 'Np', 'Pu', 'Am', 'Cm', 'Bk', 'Cf', 'Es', 'Fm', 'Md', 'No', 'Lr', 'Rf', 'Db', 'Sg', 'Bh', 'Hs', 'Mt'
'Li', 'Be', 'B', 'C', 'N', 'O', 'F', 'Ne', 'Na', 'Mg', 'Al', 'Si', 'P', 'S', 'Cl', 'Ar', 'K', 'Ca', 'Sc', 'Ti', 'V', 'Cr', 'Mn', 'Fe', 'Co', 'Ni', 'Cu', 'Zn', 'Ga', 'Ge', 'As', 'Se', 'Br', 'Kr', 'Rb', 'Sr', 'Y', 'Zr', 'Nb', 'Mo', 'Tc', 'Ru', 'Rh', 'Pd', 'Ag', 'Cd', 'In', 'Sn', 'Sb', 'Te', 'I', 'Xe', 'Cs', 'Ba', 'La', 'Ce', 'Pr', 'Nd', 'Pm', 'Sm', 'Eu', 'Gd', 'Tb', 'Dy', 'Ho', 'Er', 'Tm', 'Yb', 'Lu', 'Hf', 'Ta', 'W', 'Re', 'Os', 'Ir', 'Pt', 'Au', 'Hg', 'Tl', 'Pb', 'Bi', 'Po', 'At', 'Rn', 'Fr', 'Ra', 'Ac', 'Th', 'Pa', 'U', 'Np', 'Pu', 'Am', 'Cm', 'Bk', 'Cf', 'Es', 'Fm', 'Md', 'No', 'Lr', 'Rf', 'Db', 'Sg', 'Bh', 'Hs', 'Mt'] EPDL97_FILE = getDataFile("EPDL97_CrossSections.dat") EADL97_FILE = getDataFile("EADL97_BindingEnergies.dat") EPDL97_DICT = {} for element in ElementList: EPDL97_DICT[element] = {} #initialize the dictionnary, for the time being compatible with PyMca 4.3.0 EPDL97_DICT = {} for element in ElementList: EPDL97_DICT[element] = {} EPDL97_DICT[element]['binding'] = {} EPDL97_DICT[element]['EPDL97'] = {} EPDL97_DICT[element]['original'] = True #fill the dictionnary with the binding energies
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # #############################################################################*/ __author__ = "V.A. Sole - ESRF Data Analysis" __contact__ = "*****@*****.**" __license__ = "MIT" __copyright__ = "European Synchrotron Radiation Facility, Grenoble, France" import os import numpy from PyMca5 import getDataFile from PyMca5.PyMcaIO import specfile sf=specfile.Specfile(getDataFile("KShellRates.dat")) ElementKShellTransitions = sf[0].alllabels() ElementKShellRates = numpy.transpose(sf[0].data()).tolist() ElementKAlphaTransitions = [] ElementKBetaTransitions = [] for transition in ElementKShellTransitions: if transition[0] == 'K': if transition[1] == 'L': ElementKAlphaTransitions.append(transition) else: ElementKBetaTransitions.append(transition) elif transition[0] == 'Z': ElementKAlphaTransitions.append(transition) ElementKBetaTransitions.append(transition) else: