示例#1
0
 def importFile(self, filename):
     if not os.path.exists(filename):
         qt.QMessageBox.critical(self, "ERROR opening file",
                                 "File %s not found" % filename)
         return 1
     Elements.Material.read(filename)
     error = 0
     for material in list(Elements.Material.keys()):
         keys = list(Elements.Material[material].keys())
         compoundList = []
         if "CompoundList" in  keys:
             compoundList = Elements.Material[material]["CompoundList"]
         if "CompoundFraction" in  keys:
             compoundFraction = Elements.Material[material]["CompoundFraction"]
         if  (compoundList == []) or (compoundFraction == []):
             #no message?
             error = 1
             del Elements.Material[material]
             continue
         #I should try to calculate the attenuation at one energy ...
         try:
             Elements.getMaterialMassAttenuationCoefficients(compoundList,
                                                             compoundFraction,
                                                             energy = 10.0)
         except:
             #no message?
             error = 1
             del Elements.Material[material]
             if _logger.getEffectiveLevel() == logging.DEBUG:
                 raise
             continue
     return error
示例#2
0
 def __tableSlot(self,row, col):
     if self.__fillingValues:
         return
     item = self.__table.item(row, col)
     if item is not None:
         _logger.debug("table item is None")
         qstring = item.text()
     else:
         qstring = ""
     if col == 0:
         compound = str(qstring)
         if Elements.isValidFormula(compound):
             pass
         else:
             matkey  = Elements.getMaterialKey(compound)
             if matkey is not None:
                 item.setText(matkey)
             else:
                 msg=qt.QMessageBox(self.__table)
                 msg.setIcon(qt.QMessageBox.Critical)
                 msg.setText("Invalid Formula %s" % compound)
                 msg.exec_()
                 self.__table.setCurrentCell(row, col)
                 return
     else:
         try:
             float(str(qstring))
         except:
             msg=qt.QMessageBox(self.__table)
             msg.setIcon(qt.QMessageBox.Critical)
             msg.setText("Invalid Float")
             msg.exec_()
             self.__table.setCurrentCell(row, col)
             return
     self._updateCurrent()
示例#3
0
    def __tableSlot2(self,row, col):
        if self.__fillingValues:return
        if self.__lastRow is None:
            self.__lastRow = row

        if self.__lastColumn is None:
            self.__lastColumn = col

        item = self.__table.item(self.__lastRow,
                                self.__lastColumn)
        if item is None:
            item = qt.QTableWidgetItem("",qt.QTableWidgetItem.Type)
            self.__table.setItem(self.__lastRow,
                                 self.__lastColumn,
                                 item)
        qstring = item.text()

        if self.__lastColumn == 0:
            compound     = str(qstring)
            if Elements.isValidFormula(compound):
                pass
            else:
                matkey  = Elements.getMaterialKey(compound)
                if matkey is not None:
                    item = self.__table.item(self.__lastRow,
                                        self.__lastColumn)
                    if item is None:
                        item = qt.QTableWidgetItem(matkey,
                                        qt.QTableWidgetItem.Type)
                        self.__table.setItem(self.__lastRow,
                                         self.__lastColumn,
                                         item)
                    else:
                        item.setText(matkey)
                else:
                    msg=qt.QMessageBox(self.__table)
                    msg.setIcon(qt.QMessageBox.Critical)
                    msg.setText("Invalid Formula %s" % compound)
                    msg.exec_()
                    self.__table.setCurrentCell(self.__lastRow, self.__lastColumn)
                    return
        else:
            try:
                float(str(qstring))
            except:
                msg=qt.QMessageBox(self.__table)
                msg.setIcon(qt.QMessageBox.Critical)
                msg.setText("Invalid Float")
                msg.exec_()
                self.__table.setCurrentCell(self.__lastRow, self.__lastColumn)
                return
        self._updateCurrent()
示例#4
0
 def _referenceLineSlot(self, ddict):
     if ddict['event'] == "returnPressed":
         current = str(self.referenceLine.text())
         current = current.replace(' ', '')
         if (current == '') or (current.upper() == 'AUTO'):
             pass
         elif len(current) == 2:
             current = current.upper()[0] + current.lower()[1]
         elif len(current) == 1:
             current = current.upper()[0]
         else:
             self.referenceLine.setText('Auto')
             msg = qt.QMessageBox(self.referenceLine)
             msg.setIcon(qt.QMessageBox.Critical)
             msg.setText("Invalid Element %s" % current)
             msg.exec_()
             self.referenceLine.setFocus()
             return
         if (current == '') or (current.upper() == 'AUTO'):
             self.referenceLine.setText('Auto')
             self._mySignal()
         elif not Elements.isValidFormula(current):
             self.referenceLine.setText('Auto')
             msg = qt.QMessageBox(self.referenceLine)
             msg.setIcon(qt.QMessageBox.Critical)
             msg.setText("Invalid Element %s" % current)
             if QTVERSION < '4.0.0':
                 msg.exec_loop()
             else:
                 msg.exec_()
             self.referenceLine.setFocus()
         else:
             self.referenceLine.setText(current)
             self._mySignal()
示例#5
0
 def __nameLineSlot(self):
     _logger.debug("__nameLineSlot(self)")
     qstring = self.__nameLine.text()
     text = str(qstring)
     if self.__toolMode:
         if len(text):
             matkey = Elements.getMaterialKey(text)
         if matkey is not None:
             self.setCurrent(matkey)
             #Disable everything
             self.__disableInput()
         elif text in Elements.ElementList:
             self.__disableInput()
             name = Elements.Element[text]['name']
             self._current['Comment'] = name[0].upper() + name[1:]
             self._current['CompoundList'] = [text+"1"]
             self._current['CompoundFraction'] = [1.0]
             self._current['Density'] = Elements.Element[text]['density']
             self._fillValues()
             self._updateCurrent()
             self.__nameLine.setText("%s" % text)
         else:
             self._current['Comment'] = text
             self.__numberSpin.setEnabled(True)
             self.__table.setEnabled(True)
             self.__densityLine.setEnabled(True)
             self.__thicknessLine.setEnabled(True)
     else:
         self._current['Comment'] = text
示例#6
0
 def setSelection(self, symbol=None):
     if symbol is None:
         if self.addnone:
             self.setCurrentIndex(0)
     else:
         idx= self.addnone+Elements.getz(symbol)-1
         self.setCurrentIndex(idx)
示例#7
0
    def mySlot(self):
        try:
            energy    = float(str(self.energy.text()))
        except ValueError:
            msg=qt.QMessageBox(self.energy)
            msg.setIcon(qt.QMessageBox.Critical)
            msg.setText("Invalid Energy Value")
            msg.setWindowTitle("Invalid energy")
            msg.exec_()
            self.energy.setFocus()
            return

        threshold = float(str(self.threshold.text()))/1000.
        lines=[]
        if self.k.isChecked():
             lines.append('K')
        if self.l1.isChecked():
             lines.append('L1')
        if self.l2.isChecked():
             lines.append('L2')
        if self.l3.isChecked():
             lines.append('L3')
        if self.m.isChecked():
             lines.append('M')
        ddict=Elements.getcandidates(energy,threshold,lines)[0]
        ddict['text'] =self.getHtmlText(ddict)
        ddict['event']='Candidates'
        ddict['lines']=lines
        if self.__useviewer:
            self.__browsertext.clear()
            #self.__browsertext.insertHtml("<CENTER>"+dict['text']+\
            #                              "</CENTER>")
            self.__browsertext.insertHtml(ddict['text'])
        self.sigPeakIdentifierSignal.emit(ddict)
示例#8
0
 def fixup(self, qstring):
     if qstring is None:
         return None
     text = str(qstring)
     key  = Elements.getMaterialKey(text)
     if key is not None:
         return QString(key)
     else:
         return qstring
示例#9
0
 def validate(self, qstring, pos):
     text = str(qstring)
     if text == '-':
         return (self.Valid, pos)
     try:
         # this test is needed even if pyflakes complains!
         float(text)
         return (self.Invalid, pos)
     except:
         pass
     if text.endswith(' '):
         return (self.Invalid, pos)
     if Elements.isValidFormula(text):
         return (self.Valid, pos)
     elif Elements.isValidMaterial(text):
         return (self.Valid, pos)
     else:
         return (self.Invalid,pos)
示例#10
0
    def setFitConfiguration(self, fitConfiguration):
        # obtain the peak families fitted
        _peakList = _getPeakList(fitConfiguration)
        if not len(_peakList):
            raise ValueError("No peaks to fit!!!!")

        matrixDescription = _getMatrixDescription(fitConfiguration)
        layerList = list(matrixDescription.keys())
        layerList.sort()

        materialList = list(Elements.Material.keys())
        materialList.sort()
        a = ["-"]
        for key in materialList:
            a.append(key)

        # Material options
        self._materialOptions.setOptions(a)
        self._table.setMaterialOptions(a)

        # If only one layer, all the elements are selectable
        layerPeaks = {}
        if len(layerList) == 1:
            layerPeaks[layerList[0]] = _peakList
        else:
            inAllLayers = []
            toDeleteFromAllLayers = []
            toForgetAbout = []
            for layer in layerList:
                layerPeaks[layer] = []
            for peak in _peakList:
                element = peak.split()[0]
                layersPresent = []
                for layer in layerList:
                    material = matrixDescription[layer][0]
                    if element in Elements.getMaterialMassFractions(\
                                                                [material],
                                                                [1.0]).keys():
                        layersPresent.append(layer)
                if len(layersPresent) == 1:
                    layerPeaks[layersPresent[0]].append(peak)
        oldOption  = qt.safe_str(self._layerOptions.currentText())
        self._layerOptions.clear()
        for item in layerList:
            self._layerOptions.addItem(item)
        self._layerList = layerList

        if oldOption not in layerList:
            oldOption = layerList[0]

        self._layerOptions.setCurrentIndex(layerList.index(oldOption))
        self._layerList = layerList
        self._layerPeaks = layerPeaks
        self._table.setLayerPeakFamilies(layerPeaks[oldOption])
        strategy = fitConfiguration["fit"].get("strategy", "SingleLayerStrategy")
        if strategy in fitConfiguration:
            self.setParameters(fitConfiguration["SingleLayerStrategy"])
示例#11
0
 def _checkDensityThickness(self, text, row):
     try:
         currentDensity = float(str(self.text(row, 3)))
     except:
         currentDensity = 0.0
     try:
         currentThickness = float(str(self.text(row, 4)))
     except:
         currentThickness = 0.0
     defaultDensity = -1.0
     defaultThickness = -0.1
     #check if default density is there
     if Elements.isValidFormula(text):
         #check if single element
         if text in Elements.Element.keys():
             defaultDensity = Elements.Element[text]['density']
         else:
             elts = [ w for w in re.split('[0-9]', text) if w != '']
             nbs = [ int(w) for w in re.split('[a-zA-Z]', text) if w != '']
             if len(elts) == 1 and len(nbs) == 1:
                 defaultDensity = Elements.Element[elts[0]]['density']
     elif Elements.isValidMaterial(text):
         key = Elements.getMaterialKey(text)
         if key is not None:
             if 'Density' in Elements.Material[key]:
                 defaultDensity = Elements.Material[key]['Density']
             if 'Thickness' in Elements.Material[key]:
                 defaultThickness = Elements.Material[key]['Thickness']
     if defaultDensity >= 0.0:
         self.setText(row, 3, "%g" % defaultDensity)
     elif currentDensity <= 0:
         # should not be better to raise an exception if the
         # entered density or thickness were negative?
         self.setText(row, 3, "%g" % 1.0)
     if defaultThickness >= 0.0:
         self.setText(row, 4, "%g" % defaultThickness)
     elif currentThickness <= 0.0:
         # should not be better to raise an exception if the
         # entered density or thickness were negative?
         self.setText(row, 4, "%g" % 0.1)
示例#12
0
    def setParameters(self, ddict):
        layer = ddict.get("layer", "Auto")
        if layer not in self._layerList:
            if layer.upper() != "AUTO":
                raise ValueError("Layer %s not among fitted layers" % layer)
            else:
                layerList = self._layerList + ["Auto"]
                self._layerOptions.clear()
                for item in layerList:
                    self._layerOptions.addItem(item)
                self._layerList = layerList

        nIterations = ddict.get("iterations", 3)
        self._nIterations.setValue(nIterations)

        layerList = self._layerList
        layerPeaks = self._layerPeaks

        self._layerOptions.setCurrentIndex(layerList.index(layer))
        if layer in layerPeaks:
            self._table.setLayerPeakFamilies(layerPeaks[layer])

        completer = ddict.get("completer", "-")
        self._materialOptions.setCurrentText(completer)

        flags     = ddict["flags"]
        families  = ddict["peaks"]
        materials = ddict["materials"]

        nItem = 0
        for i in range(len(flags)):
            doIt = 0
            if (flags[i] in [1, True, "1", "True"]) and (layer in layerPeaks):
                flag = 1
                if families[i] in layerPeaks[layer]:
                    if materials[i] in ["-"]:
                        doIt = 1
                    else:
                        element = families[i].split()[0]
                        if element in Elements.getMaterialMassFractions( \
                                                [materials[i]], [1.0]):
                            doIt = 1
                    if doIt:
                        self._table.setData(nItem, flag, families[i], materials[i])
                    else:
                        self._table.setData(nItem, flag, families[i], element)
            else:
                self._table.setData(nItem, 0, "-", "-")
            nItem += 1
示例#13
0
 def _massAttenuationSlot(self, ddict):
     try:
         compoundList = ddict['CompoundList']
         fractionList = ddict['CompoundFraction']
         energy = numpy.arange(1, 100, 0.1)
         data=Elements.getMaterialMassAttenuationCoefficients(compoundList,
                                                              fractionList,
                                                              energy)
         addButton = False
         if self.graph is None:
             # probably dead code (ScanWindow.ScanWindow not imported)
             self.graphDialog = qt.QDialog(self)
             self.graphDialog.mainLayout = qt.QVBoxLayout(self.graphDialog)
             self.graphDialog.mainLayout.setContentsMargins(0, 0, 0, 0)
             self.graphDialog.mainLayout.setSpacing(0)
             #self.graph = ScanWindow.ScanWindow(self.graphDialog)
             self.graph = ScanWindow(self.graphDialog)
             self.graphDialog.mainLayout.addWidget(self.graph)
             self.graph._togglePointsSignal()
             self.graph.graph.crossPicker.setEnabled(False)
             addButton = True
         if addButton:
             self._addGraphDialogButton()
         self.graph.setGraphTitle(ddict['Comment'])
         legend = 'Coherent'
         self.graph.addCurve(energy, numpy.array(data[legend.lower()]),
                             legend=legend,
                             xlabel='Energy (keV)',
                             ylabel='Mass Att. (cm2/g)',
                             replace=True,
                             replot=False)
         for legend in ['Compton', 'Photo','Total']:
             self.graph.addCurve(energy, numpy.array(data[legend.lower()]),
                                 legend=legend,
                                 xlabel='Energy (keV)',
                                 ylabel='Mass Att. (cm2/g)',
                                 replace=False,
                                 replot=False)
         self.graph.setActiveCurve(legend+' '+'Mass Att. (cm2/g)')
         self.graph.setGraphTitle(ddict['Comment'])
         if self.graphDialog is not None:
             self.graphDialog.exec_()
     except:
         msg=qt.QMessageBox(self)
         msg.setIcon(qt.QMessageBox.Critical)
         msg.setInformativeText(str(sys.exc_info()[1]))
         msg.setDetailedText(traceback.format_exc())
         msg.exec_()
示例#14
0
 def _transmissionSlot(self, ddict):
     try:
         compoundList = ddict['CompoundList']
         fractionList = ddict['CompoundFraction']
         density = ddict['Density']
         thickness = ddict.get('Thickness', 0.1)
         energy = numpy.arange(1, 100, 0.1)
         data=Elements.getMaterialTransmission(compoundList, fractionList, energy,
                                          density=density, thickness=thickness, listoutput=False)
         addButton = False
         if self.graph is None:
             # probably dead code (ScanWindow not imported)
             self.graphDialog = qt.QDialog(self)
             self.graphDialog.mainLayout = qt.QVBoxLayout(self.graphDialog)
             self.graphDialog.mainLayout.setContentsMargins(0, 0, 0, 0)
             self.graphDialog.mainLayout.setSpacing(0)
             #self.graph = ScanWindow.ScanWindow(self.graphDialog)
             self.graph = ScanWindow(self.graphDialog)
             self.graphDialog.mainLayout.addWidget(self.graph)
             self.graph._togglePointsSignal()
             self.graph.graph.crossPicker.setEnabled(False)
             addButton = True
         if addButton:
             self._addGraphDialogButton()
         if self.__toolMode:
             legend = ddict['Comment']
         else:
             legend = str(self.matCombo.currentText()) +\
                      " with density = %f g/cm3" % density +\
                      " and thickness = %f cm" % thickness
         self.graph.addCurve(energy, data['transmission'],
                             legend=legend,
                             xlabel='Energy (keV)',
                             ylabel='Transmission',
                             replace=True)
         self.graph.setGraphTitle(ddict['Comment'])
         if self.graphDialog is not None:
             self.graphDialog.exec_()
     except:
         msg=qt.QMessageBox(self)
         msg.setIcon(qt.QMessageBox.Critical)
         msg.setInformativeText(str(sys.exc_info()[1]))
         msg.setDetailedText(traceback.format_exc())
         msg.exec_()
示例#15
0
 def _transmissionSlot(self, ddict):
     try:
         compoundList = ddict['CompoundList']
         fractionList = ddict['CompoundFraction']
         density = ddict['Density']
         thickness = ddict.get('Thickness', 0.1)
         energy = numpy.arange(1, 100, 0.1)
         data=Elements.getMaterialTransmission(compoundList, fractionList, energy,
                                          density=density, thickness=thickness, listoutput=False)
         addButton = False
         if self.graph is None:
             # probably dead code (ScanWindow not imported)
             self.graphDialog = qt.QDialog(self)
             self.graphDialog.mainLayout = qt.QVBoxLayout(self.graphDialog)
             self.graphDialog.mainLayout.setContentsMargins(0, 0, 0, 0)
             self.graphDialog.mainLayout.setSpacing(0)
             #self.graph = ScanWindow.ScanWindow(self.graphDialog)
             self.graph = ScanWindow(self.graphDialog)
             self.graphDialog.mainLayout.addWidget(self.graph)
             self.graph._togglePointsSignal()
             self.graph.graph.crossPicker.setEnabled(False)
             addButton = True
         if addButton:
             self._addGraphDialogButton()
         if self.__toolMode:
             legend = ddict['Comment']
         else:
             legend = str(self.matCombo.currentText()) +\
                      " with density = %f g/cm3" % density +\
                      " and thickness = %f cm" % thickness
         self.graph.addCurve(energy, data['transmission'],
                             legend=legend,
                             xlabel='Energy (keV)',
                             ylabel='Transmission',
                             replace=True)
         self.graph.setGraphTitle(ddict['Comment'])
         if self.graphDialog is not None:
             self.graphDialog.exec_()
     except:
         msg=qt.QMessageBox(self)
         msg.setIcon(qt.QMessageBox.Critical)
         msg.setInformativeText(str(sys.exc_info()[1]))
         msg.setDetailedText(traceback.format_exc())
         msg.exec_()
示例#16
0
    def setPeaksDisabled(self,symbol):
        z = self.__getZ(symbol)
        if (z > 47) and (Elements.getomegam5('Cd') > 0.0):
            #we have data available to support that
            disabled = []
        elif z > 66:
            #self.peaks.setDisabled(['Ka','Kb'])
            #disabled = ['Ka','Kb']
            disabled = []
        elif z > 17:
            #self.peaks.setDisabled(['Ka','Kb','M'])
            #disabled = ['Ka','Kb','M']
            disabled = ['M']
        elif z > 2:
            #self.peaks.setDisabled(['Ka','Kb','L','L1','L2','L3','M'])
            #disabled = ['Ka','Kb','L','L1','L2','L3','M']
            disabled = ['L','L1','L2','L3','M']
        else:
            #self.peaks.setDisabled(['K','Ka','Kb','L','L1','L2','L3','M'])
            #disabled = ['Ka','Kb','L','L1','L2','L3','M']
            disabled = ['Ka', 'Kb','L','L1','L2','L3','M']

        ele = symbol
        if self.energyValue is not None:
            for peak in ['K', 'Ka', 'Kb', 'L','L1','L2','L3','M']:
                if peak not in disabled:
                    if peak == 'L':
                        if Elements.Element[ele]['binding']['L3'] > self.energyValue:
                            disabled.append(peak)
                    elif peak == 'M':
                        if Elements.Element[ele]['binding']['M5'] > self.energyValue:
                            disabled.append(peak)
                    elif peak == 'Ka':
                        if Elements.Element[ele]['binding']['K'] > self.energyValue:
                            disabled.append(peak)
                    elif peak == 'Kb':
                        if Elements.Element[ele]['binding']['K'] > self.energyValue:
                            disabled.append(peak)
                    elif Elements.Element[ele]['binding'][peak] > self.energyValue:
                            disabled.append(peak)
                    else:
                        pass
        self.peaks.setDisabled(disabled)
示例#17
0
    def __updateMaterialOptions(self, ddict):
        row = ddict['row']
        col = ddict['col']
        text = ddict['text']
        element = text.split()[0]
        materialItem = self.cellWidget(row, col + 1)
        associatedMaterial = str(materialItem.currentText())

        goodCandidates = [element]
        for i in range(materialItem.count()):
            material = str(materialItem.itemText(i))
            if material not in ["-", element]:
                if element in Elements.getMaterialMassFractions([material],
                                                                    [1.0]):
                    goodCandidates.append(material)
        materialItem.clear()
        materialItem.setOptions(goodCandidates)
        if associatedMaterial in goodCandidates:
            materialItem.setCurrentIndex(goodCandidates.index(associatedMaterial))
        else:
            materialItem.setCurrentIndex(0)
    def __updateMaterialOptions(self, ddict):
        row = ddict['row']
        col = ddict['col']
        text = ddict['text']
        element = text.split()[0]
        materialItem = self.cellWidget(row, col + 1)
        associatedMaterial = str(materialItem.currentText())

        goodCandidates = [element]
        for i in range(materialItem.count()):
            material = str(materialItem.itemText(i))
            if material not in ["-", element]:
                if element in Elements.getMaterialMassFractions([material],
                                                                    [1.0]):
                    goodCandidates.append(material)
        materialItem.clear()
        materialItem.setOptions(goodCandidates)
        if associatedMaterial in goodCandidates:
            materialItem.setCurrentIndex(goodCandidates.index(associatedMaterial))
        else:
            materialItem.setCurrentIndex(0)
示例#19
0
 def setCurrent(self, matkey0):
     _logger.debug("setCurrent(self, matkey0=%s)", matkey0)
     matkey = Elements.getMaterialKey(matkey0)
     if matkey is not None:
         if self.__toolMode:
             #make sure the material CANNOT be modified
             self._current = copy.deepcopy(Elements.Material[matkey])
             if self.__table.isEnabled():
                 self.__disableInput()
         else:
             self._current = Elements.Material[matkey]
     else:
         self._setCurrentDefault()
         if not self.__toolMode:
             Elements.Material[matkey0] = self._current
     self.__numberSpin.setFocus()
     try:
         self._fillValues()
         self._updateCurrent()
     finally:
         if self.__toolMode:
             self.__nameLine.setText("%s" % matkey)
         self.__fillingValues = False
示例#20
0
 def setCurrent(self, matkey0):
     _logger.debug("setCurrent(self, matkey0=%s)", matkey0)
     matkey = Elements.getMaterialKey(matkey0)
     if matkey is not None:
         if self.__toolMode:
             #make sure the material CANNOT be modified
             self._current = copy.deepcopy(Elements.Material[matkey])
             if self.__table.isEnabled():
                 self.__disableInput()
         else:
             self._current = Elements.Material[matkey]
     else:
         self._setCurrentDefault()
         if not self.__toolMode:
             Elements.Material[matkey0] = self._current
     self.__numberSpin.setFocus()
     try:
         self._fillValues()
         self._updateCurrent()
     finally:
         if self.__toolMode:
             self.__nameLine.setText("%s" % matkey)
         self.__fillingValues = False
示例#21
0
 def _mySlot(self, ddict):
     if ddict['event'] == "returnPressed":
         current = str(self.currentText())
         current = current.replace(' ', '')
         if (current == '') or (current.upper() == 'AUTO'):
             pass
         elif len(current) == 2:
             current = current.upper()[0] + current.lower()[1]
         elif len(current) == 1:
             current = current.upper()[0]
         else:
             msg = qt.QMessageBox(self._lineEdit)
             msg.setIcon(qt.QMessageBox.Critical)
             msg.setText("Invalid Element %s" % current)
             msg.exec_()
             self._lineEdit.setFocus()
         if not Elements.isValidFormula(current):
             msg = qt.QMessageBox(self._lineEdit)
             msg.setIcon(qt.QMessageBox.Critical)
             msg.setText("Invalid Element %s" % current)
             msg.exec_()
             self._lineEdit.setFocus()
         else:
             self.setCurrentText(current)
示例#22
0
    return text

fname = sys.argv[1]
if os.path.exists(fname):
    os.remove(fname)

if int(sys.argv[2]):
    BARNS = True
else:
    BARNS = False
print("BARNS = %s" % BARNS)
outfile = open(fname, 'wb')
outfile.write(getHeader(fname))

for i in range(1, 101):
    ele = Elements.getsymbol(i)
    print("i = %d element = %s" % (i, ele))
    # force data readout
    dataDict = Elements.getelementmassattcoef(ele)

    # pure XCOM data
    dataDict = Elements.Element[ele]['xcom']

    # energy (keV)
    energy = dataDict['energy']

    # coherent (cm2/g)
    cohe = dataDict['coherent']
    
    # incoherent
    incohe = dataDict['compton']
示例#23
0
    def _mySignal(self, qstring0):
        qstring = qstring0
        text = str(qstring0)
        if text == '-':
            return
        (result, index) = self.ownValidator.validate(qstring,0)
        if result != self.ownValidator.Valid:
            qstring = self.ownValidator.fixup(qstring)
            (result, index) = self.ownValidator.validate(qstring,0)
        if result != self.ownValidator.Valid:
            text = str(qstring)
            if text.endswith(" "):
                msg =  qt.QMessageBox(self)
                msg.setIcon(qt.QMessageBox.Critical)
                msg.setText("Invalid Material Name '%s'\n" % text + \
                            "It ends with a space character.\n")
                msg.exec_()
                msg = qt.QMessageBox.No
            else:
                try:
                    # this test is needed even if pyflakes complains
                    float(text)
                    msg =  qt.QMessageBox(self)
                    msg.setIcon(qt.QMessageBox.Critical)
                    msg.setText("Invalid Material Name %s\n" % text + \
                                "You cannot use a number as material name.\n" +\
                                "Hint: You can use _%s_" % text)
                    msg.exec_()
                    msg = qt.QMessageBox.No
                except:
                    msg=qt.QMessageBox.information( self, "Invalid Material %s" % str(qstring),
                                          "The material %s is not a valid Formula " \
                                          "nor a valid Material.\n" \
                                          "Do you want to define the material %s\n" % \
                                          (str(qstring), str(qstring)),
                                          qt.QMessageBox.Yes,qt.QMessageBox.No)
            if msg == qt.QMessageBox.No:
                self.setCurrentIndex(0)
                for i in range(self.count()):
                    selftext = self.itemText(i)
                    if selftext == qstring0:
                        self.removeItem(i)
                return
            else:
                qstring = qstring0
        text = str(qstring)

        if Elements.isValidFormula(text):
            msg =  qt.QMessageBox(self)
            msg.setIcon(qt.QMessageBox.Critical)
            msg.setText("Invalid Material Name %s\n" % text + \
                        "The material is a valid Formula.\n " \
                        "There is no need to define it.")
            msg.exec_()
            self.setCurrentIndex(0)
            for i in range(self.count()):
                selftext = self.itemText(i)
                if selftext == qstring0:
                    self.removeItem(i)
                    break
            return
        self.setCurrentText(text)
        self.lastText = text
        ddict = {}
        ddict['event'] = 'activated'
        ddict['row']   = self.row
        ddict['col']   = self.col
        ddict['text']  = text
        if qstring0 != qstring:
            self.removeItem(self.count()-1)

        insert = True
        for i in range(self.count()):
            selftext = self.itemText(i)
            if qstring == selftext:
                insert = False
        if insert:
            self.insertItem(self.count(), qstring)

        self.sigMaterialComboBoxSignal.emit(ddict)
        sys.exit(0)

    fname = sys.argv[1]
    if os.path.exists(fname):
        os.remove(fname)

    if int(sys.argv[2]):
        BARNS = True
    else:
        BARNS = False
    print("BARNS = %s" % BARNS)
    outfile = open(fname, 'wb')
    outfile.write(getHeader(fname))

    for i in range(1, 101):
        ele = Elements.getsymbol(i)
        print("i = %d element = %s" % (i, ele))
        # force data readout
        dataDict = Elements.getelementmassattcoef(ele)

        # pure XCOM data
        dataDict = Elements.Element[ele]['xcom']

        # energy (keV)
        energy = dataDict['energy']

        # coherent (cm2/g)
        cohe = dataDict['coherent']

        # incoherent
        incohe = dataDict['compton']
示例#25
0
    def _mySignal(self, qstring0):
        qstring = qstring0
        text = str(qstring0)
        if text == '-':
            return
        (result, index) = self.ownValidator.validate(qstring,0)
        if result != self.ownValidator.Valid:
            qstring = self.ownValidator.fixup(qstring)
            (result, index) = self.ownValidator.validate(qstring,0)
        if result != self.ownValidator.Valid:
            text = str(qstring)
            if text.endswith(" "):
                msg =  qt.QMessageBox(self)
                msg.setIcon(qt.QMessageBox.Critical)
                msg.setText("Invalid Material Name '%s'\n" % text + \
                            "It ends with a space character.\n")
                msg.exec_()
                msg = qt.QMessageBox.No
            else:
                try:
                    # this test is needed even if pyflakes complains
                    float(text)
                    msg =  qt.QMessageBox(self)
                    msg.setIcon(qt.QMessageBox.Critical)
                    msg.setText("Invalid Material Name %s\n" % text + \
                                "You cannot use a number as material name.\n" +\
                                "Hint: You can use _%s_" % text)
                    msg.exec_()
                    msg = qt.QMessageBox.No
                except:
                    msg=qt.QMessageBox.information( self, "Invalid Material %s" % str(qstring),
                                          "The material %s is not a valid Formula " \
                                          "nor a valid Material.\n" \
                                          "Do you want to define the material %s\n" % \
                                          (str(qstring), str(qstring)),
                                          qt.QMessageBox.Yes,qt.QMessageBox.No)
            if msg == qt.QMessageBox.No:
                self.setCurrentIndex(0)
                for i in range(self.count()):
                    selftext = self.itemText(i)
                    if selftext == qstring0:
                        self.removeItem(i)
                return
            else:
                qstring = qstring0
        text = str(qstring)

        if Elements.isValidFormula(text):
            msg =  qt.QMessageBox(self)
            msg.setIcon(qt.QMessageBox.Critical)
            msg.setText("Invalid Material Name %s\n" % text + \
                        "The material is a valid Formula.\n " \
                        "There is no need to define it.")
            msg.exec_()
            self.setCurrentIndex(0)
            for i in range(self.count()):
                selftext = self.itemText(i)
                if selftext == qstring0:
                    self.removeItem(i)
                    break
            return
        self.setCurrentText(text)
        self.lastText = text
        ddict = {}
        ddict['event'] = 'activated'
        ddict['row']   = self.row
        ddict['col']   = self.col
        ddict['text']  = text
        if qstring0 != qstring:
            self.removeItem(self.count()-1)

        insert = True
        for i in range(self.count()):
            selftext = self.itemText(i)
            if qstring == selftext:
                insert = False
        if insert:
            self.insertItem(self.count(), qstring)

        self.sigMaterialComboBoxSignal.emit(ddict)
    def setFitConfiguration(self, fitConfiguration):
        # obtain the peak families fitted
        _peakList = _getPeakList(fitConfiguration)
        if not len(_peakList):
            raise ValueError("No peaks to fit!!!!")

        matrixDescription = _getMatrixDescription(fitConfiguration)
        layerList = list(matrixDescription.keys())
        layerList.sort()

        materialList = list(Elements.Material.keys())
        materialList.sort()
        a = ["-"]
        for key in materialList:
            a.append(key)

        # Material options
        self._materialOptions.setOptions(a)
        self._table.setMaterialOptions(a)

        # If only one layer, all the elements are selectable
        layerPeaks = {}
        if len(layerList) == 1:
            layerPeaks[layerList[0]] = _peakList
        else:
            inAllLayers = []
            toDeleteFromAllLayers = []
            toForgetAbout = []
            for layer in layerList:
                layerPeaks[layer] = []
            for peak in _peakList:
                element = peak.split()[0]
                alreadyInSomeLayer = False
                presentInLayer = ""
                toDeleteFromAllLayers = False
                for layer in layerList:
                    material = matrixDescription[layer][0]
                    if element in Elements.getMaterialMassFractions([material],
                                                                    [1.0]):
                        if alreadyInSomeLayer:
                            toDeleteFromAllLayers = True
                        else:
                            alreadyInSomeLayer = True
                            presentInLayer = layer
                if toDeleteFromAllLayers:
                    continue
                if not alreadyInSomeLayer:
                    for layer in layerList:
                        layerPeaks[layer].append(peak)
                else:
                    layerPeaks[presentInLayer].append(peak)

        oldOption  = self._layerOptions.currentText()
        self._layerOptions.clear()
        for item in layerList:
            self._layerOptions.addItem(item)
        self._layerList = layerList

        if oldOption not in layerList:
            oldOption = layerList[0]

        self._layerOptions.setCurrentIndex(layerList.index(oldOption))
        self._layerList = layerList
        self._layerPeaks = layerPeaks
        self._table.setLayerPeakFamilies(layerPeaks[oldOption])
        strategy = fitConfiguration["fit"].get("strategy", "SingleLayerStrategy")
        if strategy in fitConfiguration:
            self.setParameters(fitConfiguration["SingleLayerStrategy"])