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, :]))
def _initializeBindingEnergies(): #read the specfile data sf = specfile.Specfile(EADL97_FILE) scan = sf[0] labels = scan.alllabels() data = scan.data() scan = None sf = None i = -1 for element in ElementList: if element == 'Md': break i += 1 EPDL97_DICT[element]['binding'] = {} for j in range(len(labels)): if j == 0: #this is the atomic number continue label = labels[j].replace(" ", "").split("(")[0] EPDL97_DICT[element]['binding'][label] = data[j, i]
from PyMca5 import PyMcaDataDir dirname = PyMcaDataDir.PYMCA_DATA_DIR inputfile = os.path.join(dirname, "KShellRates.dat") if not os.path.exists(inputfile): dirname = os.path.dirname(dirname) inputfile = os.path.join(dirname, "KShellRates.dat") if not os.path.exists(inputfile): if dirname.lower().endswith(".zip"): dirname = os.path.dirname(dirname) inputfile = os.path.join(dirname, "KShellRates.dat") if not os.path.exists(inputfile): print("Cannot find inputfile ", inputfile) raise IOError("Cannot find KShellRates.dat file") sf = specfile.Specfile(os.path.join(dirname, "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:
# 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()
def Specfile(filename): if BlissSpecFile.isBlissSpecFile(filename): return BlissSpecFile.BlissSpecFile(filename) if sys.version_info < (3, 0): f = open(filename) else: f = open(filename, 'r', errors="ignore") line0 = f.readline() if filename.upper().endswith('DTA'): #TwinMic single column file line = line0 * 1 line = line.replace('\r', '') line = line.replace('\n', '') line = line.replace('\t', ' ') s = line.split(' ') if len(s) == 2: if len(s[-1]) == 0: try: float(s[0]) f.close() output = specfilewrapper(filename, dta=True) return output except: #try to read in other way pass # this piece of code checks if we deal with a SPEC file # Prior to any data, all lines have to be either empty or starting # by the hash character. line = line0 while (len(line)): if len(line) > 1: if line[0:2] == '#S': if ('#SIGNALTYPE' in line) or \ ('#SPECTRUM' in line): line = "" break elif line[0] not in ['#', ' ', '\r']: line = "" break try: line = f.readline() except: line = "" break f.close() # end of specfile identification amptek = False qxas = False if len(line): #it is a Specfile _logger.debug("This looks as a specfile") output = specfile.Specfile(filename) elif SPX and ArtaxFileParser.isArtaxFile(filename): _logger.debug("This looks as an Artax file") output = ArtaxFileParser.ArtaxFileParser(filename) else: _logger.debug("this does not look as a specfile") if len(line0) > 7: if line0.startswith('$SPEC_ID') or\ line0.startswith('$DATE_MEA') or\ line0.startswith('$MEAS_TIM') or\ line0.startswith('$Core_ID') or\ line0.startswith('$Section_ID'): qxas = True if (not qxas) and line0.startswith('<<'): amptek = True if (not qxas) and ( not amptek) and Fit2DChiFileParser.isFit2DChiFile(filename): return Fit2DChiFileParser.Fit2DChiFileParser(filename) if (not qxas) and ( not amptek) and APSMEDFileParser.isAPSMEDFile(filename): return APSMEDFileParser.APSMEDFileParser(filename) if (not qxas) and (not amptek) and SRSFileParser.isSRSFile(filename): _logger.debug("SRSFileParser") return SRSFileParser.SRSFileParser(filename) if (not qxas) and ( not amptek) and BAXSCSVFileParser.isBAXSCSVFile(filename): _logger.debug("BAXSCSVFileParser") return BAXSCSVFileParser.BAXSCSVFileParser(filename) if (not qxas) and (not amptek) and \ OlympusCSVFileParser.isOlympusCSVFile(filename): _logger.debug("OlympusCSVFileParser") return OlympusCSVFileParser.OlympusCSVFileParser(filename) if (not qxas) and (not amptek) and \ ThermoEMSFileParser.isThermoEMSFile(filename): _logger.debug("ThermoEMSFileParser") return ThermoEMSFileParser.ThermoEMSFileParser(filename) if (not qxas) and (not amptek) and \ JcampFileParser.isJcampFile(filename): _logger.debug("JcampFileParser") return JcampFileParser.JcampFileParser(filename) output = specfilewrapper(filename, amptek=amptek, qxas=qxas) return output
def _initializeElement(element): """ _initializeElement(element) Supposed to be of internal use. Reads the file and loads all the relevant element information contained int the EPDL97 file into the internal dictionary. """ #read the specfile data sf = specfile.Specfile(EPDL97_FILE) scan_index = ElementList.index(element) if scan_index > 99: #just to avoid a crash #I do not expect any fluorescent analysis of these elements ... scan_index = 99 scan = sf[scan_index] labels = scan.alllabels() data = scan.data() scan = None #fill the information into the dictionary i = -1 for label0 in labels: i += 1 label = label0.lower() #translate the label to the PyMca keys if ('coherent' in label) and ('incoherent' not in label): EPDL97_DICT[element]['EPDL97']['coherent'] = data[i, :] EPDL97_DICT[element]['EPDL97']['coherent'].shape = -1 continue if ('incoherent' in label) and ('plus' not in label): EPDL97_DICT[element]['EPDL97']['compton'] = data[i, :] EPDL97_DICT[element]['EPDL97']['compton'].shape = -1 continue if 'allother' in label: EPDL97_DICT[element]['EPDL97']['all other'] = data[i, :] EPDL97_DICT[element]['EPDL97']['all other'].shape = -1 continue label = label.replace(" ", "").split("(")[0] if 'energy' in label: EPDL97_DICT[element]['EPDL97']['energy'] = data[i, :] EPDL97_DICT[element]['EPDL97']['energy'].shape = -1 continue if 'photoelectric' in label: EPDL97_DICT[element]['EPDL97']['photo'] = data[i, :] EPDL97_DICT[element]['EPDL97']['photo'].shape = -1 #a reference should not be expensive ... EPDL97_DICT[element]['EPDL97']['photoelectric'] =\ EPDL97_DICT[element]['EPDL97']['photo'] continue if 'total' in label: EPDL97_DICT[element]['EPDL97']['total'] = data[i, :] EPDL97_DICT[element]['EPDL97']['total'].shape = -1 continue if label[0].upper() in ['K', 'L', 'M']: #for the time being I do not use the other shells in PyMca EPDL97_DICT[element]['EPDL97'][label.upper()] = data[i, :] EPDL97_DICT[element]['EPDL97'][label.upper()].shape = -1 continue EPDL97_DICT[element]['EPDL97']['pair'] = 0.0 *\ EPDL97_DICT[element]['EPDL97']['energy'] EPDL97_DICT[element]['EPDL97']['photo'] = \ EPDL97_DICT[element]['EPDL97']['total'] -\ EPDL97_DICT[element]['EPDL97']['compton']-\ EPDL97_DICT[element]['EPDL97']['coherent']-\ EPDL97_DICT[element]['EPDL97']['pair'] atomic_shells = ['M5', 'M4', 'M3', 'M2', 'M1', 'L3', 'L2', 'L1', 'K'] # with the new (short) version of the cross-sections file, "all other" contains all # shells above the M5. Nevertheless, we calculate it if scan_index > 17: idx = EPDL97_DICT[element]['EPDL97']['all other'] > 0.0 delta = 0.0 for key in atomic_shells: delta += EPDL97_DICT[element]['EPDL97'][key] EPDL97_DICT[element]['EPDL97']['all other'] =\ (EPDL97_DICT[element]['EPDL97']['photo'] - delta) * idx else: EPDL97_DICT[element]['EPDL97']['all other'] = 0.0 * \ EPDL97_DICT[element]['EPDL97']['photo'] #take care of rounding problems idx = EPDL97_DICT[element]['EPDL97']['all other'] < 0.0 EPDL97_DICT[element]['EPDL97']['all other'][idx] = 0.0
def Specfile(filename): f = open(filename) line0 = f.readline() if filename.upper().endswith('DTA'): #TwinMic single column file line = line0 * 1 line = line.replace('\r', '') line = line.replace('\n', '') line = line.replace('\t', ' ') s = line.split(' ') if len(s) == 2: if len(s[-1]) == 0: try: float(s[0]) f.close() output = specfilewrapper(filename, dta=True) f.close() return output except: #try to read in other way pass line = line0 while (len(line)): if len(line) > 1: if line[0:2] == '#S': if ('#SIGNALTYPE' in line) or \ ('#SPECTRUM' in line): line = "" break line = f.readline() f.close() amptek = False qxas = False if len(line): #it is a Specfile _logger.debug("This looks as a specfile") output = specfile.Specfile(filename) elif SPX and filename.upper().endswith("SPX"): _logger.debug("This looks as an SPX file") output = SPXFileParser.SPXFileParser(filename) else: _logger.debug("this does not look as a specfile") if len(line0) > 7: if line0.startswith('$SPEC_ID') or\ line0.startswith('$DATE_MEA') or\ line0.startswith('$MEAS_TIM') or\ line0.startswith('$Core_ID') or\ line0.startswith('$Section_ID'): qxas = True if (not qxas) and line0.startswith('<<'): amptek = True if (not qxas) and ( not amptek) and Fit2DChiFileParser.isFit2DChiFile(filename): return Fit2DChiFileParser.Fit2DChiFileParser(filename) if (not qxas) and ( not amptek) and APSMEDFileParser.isAPSMEDFile(filename): return APSMEDFileParser.APSMEDFileParser(filename) if (not qxas) and (not amptek) and SRSFileParser.isSRSFile(filename): _logger.debug("SRSFileParser") return SRSFileParser.SRSFileParser(filename) if (not qxas) and ( not amptek) and BAXSCSVFileParser.isBAXSCSVFile(filename): _logger.debug("BAXSCSVFileParser") return BAXSCSVFileParser.BAXSCSVFileParser(filename) if (not qxas) and (not amptek) and \ OlympusCSVFileParser.isOlympusCSVFile(filename): _logger.debug("OlympusCSVFileParser") return OlympusCSVFileParser.OlympusCSVFileParser(filename) if (not qxas) and (not amptek) and \ ThermoEMSFileParser.isThermoEMSFile(filename): _logger.debug("ThermoEMSFileParser") return ThermoEMSFileParser.ThermoEMSFileParser(filename) if (not qxas) and (not amptek) and \ JcampFileParser.isJcampFile(filename): _logger.debug("JcampFileParser") return JcampFileParser.JcampFileParser(filename) output = specfilewrapper(filename, amptek=amptek, qxas=qxas) return output
# 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' ]
filename = "BindingEnergies.dat" dirname = PyMcaDataDir.PYMCA_DATA_DIR inputfile = os.path.join(dirname, filename) if not os.path.exists(inputfile): dirname = os.path.dirname(dirname) inputfile = os.path.join(dirname, filename) if not os.path.exists(inputfile): if dirname.lower().endswith(".zip"): dirname = os.path.dirname(dirname) inputfile = os.path.join(dirname, filename) if not os.path.exists(inputfile): print("Cannot find inputfile ", inputfile) raise IOError("Cannot find BindingEnergies.dat file") sf = specfile.Specfile(os.path.join(dirname, 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',
import numpy from PyMca5.PyMcaIO import specfile from PyMca5 import PyMcaDataDir, getUserDataFile dirname = PyMcaDataDir.PYMCA_DATA_DIR inputfile = os.path.join(dirname, "LShellRates.dat") if not os.path.exists(inputfile): dirname = os.path.dirname(dirname) inputfile = os.path.join(dirname, "LShellRates.dat") if dirname.lower().endswith(".zip"): dirname = os.path.dirname(dirname) inputfile = os.path.join(dirname, "LShellRates.dat") if not os.path.exists(inputfile): print("Cannot find inputfile ",inputfile) raise IOError("Cannot find LShellRates.dat file") sf=specfile.Specfile(getUserDataFile(os.path.join(dirname, "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(getUserDataFile(os.path.join(dirname, "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
filename = "BindingEnergies.dat" dirname = PyMcaDataDir.PYMCA_DATA_DIR inputfile = os.path.join(dirname, filename) if not os.path.exists(inputfile): dirname = os.path.dirname(dirname) inputfile = os.path.join(dirname, filename) if not os.path.exists(inputfile): if dirname.lower().endswith(".zip"): dirname = os.path.dirname(dirname) inputfile = os.path.join(dirname, filename) if not os.path.exists(inputfile): print("Cannot find inputfile ", inputfile) raise IOError("Cannot find BindingEnergies.dat file") sf = specfile.Specfile(getUserDataFile(os.path.join(dirname, 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' ]