コード例 #1
0
 def getInfo(self):
     text = ""
     text += "<nobr><H2><FONT color=#0000cc>"
     text += "Computed File :&nbsp;"
     text += "</FONT>"
     text += "<FONT color=#000000>"
     if self.fitfile is not None:
         if os.path.basename(self.fitfile) == self.fitfile:
             text += "<b><I>%s</I></b>" % (os.getcwd() + "/" + self.fitfile)
         else:
             text += "<b><I>%s</I></b>" % (self.fitfile)
     else:
         text += "<b><I>%s</I></b>" % (self.outdir + "/" + self.outfile +
                                       ".fit")
         #and I have to generate it!!!!!!!!!!!!"
         d = ConfigDict.ConfigDict(self.fitresult)
         try:
             os.remove(self.outdir + "/" + self.outfile + ".fit")
         except:
             pass
         if self.concentrations is not None:
             d['concentrations'] = self.concentrations
         d.write(self.outdir + "/" + self.outfile + ".fit")
     text += "</FONT>"
     text += "</H2>"
     text += "</nobr>"
     text += "<LEFT>"
     text += "<TABLE border=0>"
     text += "<TR><TD><SPACER TYPE=BLOCK WIDTH=50></TD><TD>"
     text += "<TABLE border=0 cellpadding=1 cellspacing=2>"
     text += "  <TR><TH ALIGN=LEFT>Source : &nbsp;</TH><TD ALIGN=LEFT>%s</TD></TR>" % (
         self.sourcename)
     text += "  <TR><TH ALIGN=LEFT>Selection : &nbsp;</TH><TD ALIGN=LEFT>%s</TD></TR>" % (
         self.selection)
     text += "  <TR><TH ALIGN=LEFT>Parameters : &nbsp;</TH><TD ALIGN=LEFT>"
     d = ConfigDict.ConfigDict(self.fitresult['result']['config'])
     try:
         os.remove(self.outdir + "/" + self.outfile + ".txt")
     except:
         pass
     d.write(self.outdir + "/" + self.outfile + ".txt")
     text += "<a HREF=" "%s" ">%s</a>" % (self.outfile + ".txt",
                                          self.outfile + ".txt")
     text += "</TD></TR>"
     """
     text+= "  <TR><TH ALIGN=RIGHT>Source : </TH><TD ALIGN=LEFT>%s</TD>"%(self.sourcename)
     text+= "  <TH ALIGN=RIGHT>Selection : </TH><TD ALIGN=LEFT>%s</TD></TR>"%(self.selection)
     keys= [ key for key in info.keys() if key not in ['paramfile', 'peakfile'] ]
     for idx in range(0, len(keys), 2):
         text+= "  <TR><TH ALIGN=RIGHT>%s : </TH><TD ALIGN=LEFT>%s</TD>"%(keys[idx], info[keys[idx]])
         if idx+1<len(keys):
             text+= "  <TH ALIGN=RIGHT>%s : </TH><TD ALIGN=LEFT>%s</TD></TR>"%(keys[idx+1], info[keys[idx+1]])
         else:
             text+= "  <TD COLSPAN=2></TD></TR>"
     """
     text += "</TABLE>"
     text += "</TD></TR></TABLE>"
     text += "</LEFT>"
     return text
コード例 #2
0
    def testConfigDictIO(self):
        # create a dictionnary
        from PyMca import ConfigDict
        testDict = {}
        testDict['simple_types'] = {}
        testDict['simple_types']['float'] = 1.0
        testDict['simple_types']['int'] = 1
        testDict['simple_types']['string'] = "Hello World"
        testDict['containers'] = {}
        testDict['containers']['list'] = [-1, 'string', 3.0]
        if ConfigDict.USE_NUMPY:
            import numpy
            testDict['containers']['array'] = numpy.array([1.0, 2.0, 3.0])
        testDict['containers']['dict'] = {'key1': 'Hello World', 'key2': 2.0}

        tmpFile = tempfile.mkstemp(text=False)
        os.close(tmpFile[0])
        self._tmpFileName = tmpFile[1]

        writeInstance = ConfigDict.ConfigDict(initdict=testDict)
        writeInstance.write(self._tmpFileName)

        #read the data back
        readInstance = ConfigDict.ConfigDict()
        readInstance.read(self._tmpFileName)

        # get read key list
        testDictKeys = list(testDict.keys())
        readKeys = list(readInstance.keys())
        self.assertTrue(
            len(readKeys) == len(testDictKeys),
            "Number of read keys not equal to number of written keys")

        topKey = 'simple_types'
        for key in testDict[topKey]:
            original = testDict[topKey][key]
            read = readInstance[topKey][key]
            self.assertTrue(read == original,
                            "Read <%s> instead of <%s>" % (read, original))

        topKey = 'containers'
        for key in testDict[topKey]:
            original = testDict[topKey][key]
            read = readInstance[topKey][key]
            if key == 'array':
                self.assertTrue(read.all() == original.all(),
                                "Read <%s> instead of <%s>" % (read, original))
            else:
                self.assertTrue(read == original,
                                "Read <%s> instead of <%s>" % (read, original))
コード例 #3
0
 def __init__(self, *args, **kwargs):
     XRFSpectrum.__init__(self, *args, **kwargs)
     self.mca_hwobj = self.getObjectByRole("mca")
     self.ctrl_hwobj = self.getObjectByRole("controller")
     self.fname = self.getProperty("cfgfile")
     self.config = ConfigDict.ConfigDict()
     self.mcafit = ClassMcaTheory.McaTheory(self.fname)
コード例 #4
0
 def loadDict(self):
     openDir = PyMcaDirs.outputDir
     filter = 'PyMca (*.shift)'
     filename = qt.QFileDialog.\
                 getOpenFileName(self,
                                 'Load Shifts obtained from FFTAlignment',
                                 openDir,
                                 filter)
     if len(filename) == 0:
         return
     inDict = ConfigDict.ConfigDict()
     try:
         inDict.read(filename)
     except IOError:
         msg = qt.QMessageBox()
         msg.setTitle('FFTAlignment Load Error')
         msg.setText('Unable to read shifts form file \'%s\''%filename)
         msg.exec_()
         return
     if 'Shifts' not in inDict.keys():
         # Only if the shift file consists exclusively of ShiftList
         orderedLegends = [legend for legend in self.plugin.getOrder()]
         try:
             shiftList = inDict['ShiftList']['ShiftList']
         except KeyError:
             msg = qt.QMessageBox()
             msg.setWindowTitle('FFTAlignment Load Error')
             msg.setText('No shift information found in file \'%s\''%filename)
             msg.exec_()
         ddict = dict(zip(orderedLegends, shiftList))
         llist = self.plugin.getOrder()
     else:
         llist = inDict['Order']['Order']
         ddict = inDict['Shifts']
     self.setDict(llist, ddict)
コード例 #5
0
 def saveDict(self):
     saveDir = PyMcaDirs.outputDir
     filter = ['PyMca (*.shift)']
     try:
         filename = PyMcaFileDialogs.\
                     getFileList(parent=self,
                         filetypelist=filter,
                         message='Safe FFT Alignment shifts',
                         mode='SAVE',
                         single=True)[0]
     except IndexError:
         # Returned list is empty
         return False
     if len(filename) == 0:
         return False
     if not str(filename).endswith('.shift'):
         filename += '.shift'
     if DEBUG:
         print('saveOptions -- Filename: "%s"' % filename)
     currentOrder = self.plugin.getOrder()
     outDict = ConfigDict.ConfigDict()
     llist, ddict = self.getDict()
     outDict['Order'] = {'Order': currentOrder}
     outDict['Shifts'] = ddict
     outDict['ShiftList'] = {
         'ShiftList':[ddict[legend] for legend in currentOrder]}
     try:
         outDict.write(filename)
     except IOError:
         msg = qt.QMessageBox()
         msg.setWindowTitle('FFTAlignment Save Error')
         msg.setText('Unable to write configuration to \'%s\''%filename)
         msg.exec_()
     return True
コード例 #6
0
 def generateReportFromFitFile(self):
     d = ConfigDict.ConfigDict()
     d.read(self.fitfile)
     sourcename = "Unknown Source"
     selection = "Unknown Selection"
     if 'info' in d:
         if 'key' in d['info']:
             selection = d['info']['key']
         elif 'Key' in d['info']:
             selection = d['info']['Key']
         for key in d['info'].keys():
             if key.upper() == 'SOURCENAME':
                 sourcename = d['info'][key]
             elif (key.upper() == 'SELECTION') or\
                  (key.upper() == 'LEGEND'):
                 selection = d['info'][key]
     self.sourcename = sourcename
     self.selection = selection
     if self.outfile is None:
         if self.outdir is None:
             self.outdir = os.getcwd()
         self.outfile = os.path.basename(self.fitfile)
     else:
         if self.outdir is None:
             self.outdir = os.path.dirname(self.outfile)
         self.outfile = os.path.basename(self.outfile)
     if self.outdir == '': self.outdir = "."
     self.fitresult = d
     if 'concentrations' in d:
         self.concentrations = d['concentrations']
コード例 #7
0
 def save(self, filename):
     d= ConfigDict.ConfigDict()
     d['ROI'] = {}
     d['ROI'] = {'roilist': self.mcaROITable.roilist * 1,
                 'roidict':{}}
     d['ROI']['roidict'].update(self.mcaROITable.roidict)
     d.write(filename)
コード例 #8
0
 def __init__(self, *args, **kwargs):
     XRFSpectrum.__init__(self, *args, **kwargs)
     self.mca_hwobj = self.getObjectByRole('mca')
     self.ctrl_hwobj = self.getObjectByRole('controller')
     self.fname = "/users/blissadm/local/beamline_configuration/misc/15keV.cfg"
     self.config = ConfigDict.ConfigDict()
     self.mcafit = ClassMcaTheory.McaTheory(self.fname)
コード例 #9
0
ファイル: XRFMCPyMca.py プロジェクト: tonnrueter/pymca_devel
    def fitFileChanged(self, ddict):
        #for the time being only one ...
        fitfile= ddict['filelist'][0]
        self.fitConfiguration = ConfigDict.ConfigDict()
        self.fitConfiguration.read(fitfile)
        if 'result' in self.fitConfiguration:
            matrix = self.fitConfiguration['result']\
                     ['config']['attenuators'].get('Matrix', None)
        else:
            matrix = self.fitConfiguration\
                     ['attenuators'].get('Matrix', None)

        if matrix is None:
            text = 'Undefined sample matrix in file %s' % fitfile
            title = "Invalid Matrix"
            self.errorMessage(text, title)
            return
        if matrix[0] != 1:
            text = 'Undefined sample matrix in file %s' % fitfile
            title = "Matrix not considered in fit"
            self.errorMessage(text, title)
            return
        if matrix[1] == '-':
            text = 'Invalid sample Composition "%s"' % matrix[1]
            title = "Invalid Sample"
            self.errorMessage(text, title)
            return

        if self.fitConfiguration.has_key('xrfmc'):
            if self.fitConfiguration['xrfmc'].has_key('setup'):
                self.parametersWidget.setParameters(self.fitConfiguration)

        if matrix[1] != "MULTILAYER":
            self.parametersWidget.setParameters({'layer':1})
            self.parametersWidget.fitLayer.setMaximum(0)
コード例 #10
0
ファイル: XRFMCPyMca.py プロジェクト: tonnrueter/pymca_devel
 def configurationFileChanged(self, ddict):
     configFile= ddict['filelist'][0]
     configuration = ConfigDict.ConfigDict()
     configuration.read(configFile)
     if not configuration['xrfmc'].has_key('setup'):
         title = "Invalid file" 
         text = "Invalid configuration file." 
         self.errorMessage(text, title)        
     else:
         self.parametersWidget.setParameters(configuration['xrfmc']['setup'])
コード例 #11
0
 def _configure(self,config):
     d = ConfigDict.ConfigDict()
     d.read(config["file"])
     if not d.has_key('concentrations'):
         d['concentrations']= {}
     if not d.has_key('attenuators'):
         d['attenuators']= {}
         d['attenuators']['Matrix'] = [1, 'Water', 1.0, 0.01, 45.0, 45.0]
     if config.has_key('flux'):
         d['concentrations']['flux'] = float(config['flux'])
     if config.has_key('time'):
         d['concentrations']['time'] = float(config['time'])
     self.mcafit_widget.mcafit.configure(d)
コード例 #12
0
 def saveConfiguration(self, filename):
     cfg = ConfigDict.ConfigDict(self.getConfiguration())
     if DEBUG:
         cfg.write(filename)
         self.initDir = os.path.dirname(filename)
     else:
         try:
             cfg.write(filename)
             self.initDir = os.path.dirname(filename)
         except:
             qt.QMessageBox.critical(self, "Save Parameters", 
                 "ERROR while saving parameters to\n%s"%filename,
                 qt.QMessageBox.Ok, qt.QMessageBox.NoButton, qt.QMessageBox.NoButton)
コード例 #13
0
 def _configure(self,config):
     d = ConfigDict.ConfigDict()
     d.read(config["file"])
     if 'concentrations' not in d:
         d['concentrations']= {}
     if 'attenuators' not in d:
         d['attenuators']= {}
         d['attenuators']['Matrix'] = [1, 'Water', 1.0, 0.01, 45.0, 45.0]
     if 'flux' in config:
         d['concentrations']['flux'] = float(config['flux'])
     if 'time' in config:
         d['concentrations']['time'] = float(config['time'])
     self.mcafit_widget.mcafit.configure(d)
コード例 #14
0
 def loadConfiguration(self, filename):
     cfg= ConfigDict.ConfigDict()
     try:
         cfg.read(filename)
         self.initDir = os.path.dirname(filename)
         self.setConfiguration(cfg)
     except:
         if DEBUG:
             raise
         qt.QMessageBox.critical(self, "Load Parameters",
             "ERROR while loading parameters from\n%s"%filename, 
             qt.QMessageBox.Ok,
             qt.QMessageBox.NoButton,
             qt.QMessageBox.NoButton)
コード例 #15
0
ファイル: XRFMCHelper.py プロジェクト: tonnrueter/pymca_devel
def test(filename):
    fitConfig = ConfigDict.ConfigDict()
    fitConfig.read(filename)
    ddict = getXRFMCCorrectionFactors(fitConfig, verbose=True)
    fitConfig = None
    for element in ddict:
        for line in ddict[element]:
            if line == "z":
                #atomic number
                continue
            if line in ['K', 'Ka', 'Kb', 'L', 'L1', 'L2', 'L3', 'M']:
                correction1 = ddict[element][line]['correction_factor'][1]
                correctionn = ddict[element][line]['correction_factor'][-1]
                print("Element %s Line %s Correction 2 = %f Correction n = %f" %\
                            (element, line,correction1, correctionn))
コード例 #16
0
 def saveConfiguration(self):
     wdir = Object3DDirs.outputDir
     message = "Enter output scene configuration file name"
     filename = qt.QFileDialog.getSaveFileName(self, message, wdir,
                                               "*.scene")
     filename = str(filename)
     if not len(filename):
         return
     Object3DDirs.outputDir = os.path.dirname(filename)
     config = self.glWindow.scene.getConfiguration()
     d = ConfigDict.ConfigDict()
     if os.path.exists(filename):
         os.remove(filename)
     d.update(config)
     d.write(filename)
コード例 #17
0
    def _saveCounterTableConfiguration(self):
        fname = self.getOutputFilename()
        if not len(fname):
            return
        if not fname.endswith('.ini'):
            fname += '.ini'

        ddict = ConfigDict.ConfigDict()
        if "PyMcaDirs" in sys.modules:
            ddict['PyMca'] = {}
            ddict['PyMca']['HDF5'] = {'WidgetConfiguration':\
                                      self.getWidgetConfiguration()}
        else:
            ddict['HDF5'] ={'WidgetConfiguration':\
                             self.getWidgetConfiguration()}
        ddict.write(fname)
コード例 #18
0
 def load(self, filename):
     d = ConfigDict.ConfigDict()
     d.read(filename)
     current = ""
     if self.mcaROITable.rowCount():
         row = self.mcaROITable.currentRow()
         item = self.mcaROITable.item(row, 0)
         if item is not None:
             current = str(item.text())
     self.fillfromroidict(roilist=d['ROI']['roilist'],
                          roidict=d['ROI']['roidict'])
     if current in d['ROI']['roidict'].keys():
         if current in d['ROI']['roilist']:
             row = d['ROI']['roilist'].index(current, 0)
             self.mcaROITable.setCurrentCell(row, 0)
             self.mcaROITable._cellChangedSlot(row, 2)
             return            
     self.mcaROITable.setCurrentCell(0, 0)
     self.mcaROITable._cellChangedSlot(0, 2)
コード例 #19
0
    def _getConfigurationFromFile(self, fname):
        ddict = ConfigDict.ConfigDict()
        ddict.read(fname)

        keys = ddict.keys
        if 'PyMca' in keys():
            ddict = ddict['PyMca']

        if 'HDF5' not in ddict.keys():
            msg = qt.QMessageBox(self)
            msg.setIcon(qt.QMessageBox.Information)
            msg.setText("File does not contain HDF5 configuration")
            msg.exec_()
            return None

        if 'WidgetConfiguration' not in ddict['HDF5'].keys():
            msg = qt.QMessageBox(self)
            msg.setIcon(qt.QMessageBox.Information)
            msg.setText("File does not contain HDF5 WidgetConfiguration")
            msg.exec_()
            return None

        ddict = ddict['HDF5']['WidgetConfiguration']
        keys = ddict.keys()

        if ('counters' not in keys) or\
           ('aliases' not in keys):
            msg = qt.QMessageBox(self)
            msg.setIcon(qt.QMessageBox.Information)
            msg.setText("File does not contain HDF5 counters information")
            msg.exec_()
            return None

        if len(ddict['counters']) != len(ddict['aliases']):
            msg = qt.QMessageBox(self)
            msg.setIcon(qt.QMessageBox.Critical)
            msg.setText("Number of counters does not match number of aliases")
            msg.exec_()
            return None

        return ddict
コード例 #20
0
def main():
    import sys
    import getopt

    from PyMca import ConfigDict

    if len(sys.argv) > 1:
        options = ''
        longoptions = [
            'flux=', 'time=', 'area=', 'distance=', 'attenuators=',
            'usematrix='
        ]
        tool = ConcentrationsTool()
        opts, args = getopt.getopt(sys.argv[1:], options, longoptions)
        config = tool.configure()
        for opt, arg in opts:
            if opt in ('--flux'):
                config['flux'] = float(arg)
            elif opt in ('--area'):
                config['area'] = float(arg)
            elif opt in ('--time'):
                config['time'] = float(arg)
            elif opt in ('--distance'):
                config['distance'] = float(arg)
            elif opt in ('--attenuators'):
                config['useattenuators'] = int(float(arg))
            elif opt in ('--usematrix'):
                config['usematrix'] = int(float(arg))
        tool.configure(config)
        filelist = args
        for filename in filelist:
            d = ConfigDict.ConfigDict()
            d.read(filename)
            for material in d['result']['config']['materials'].keys():
                Elements.Material[material] =\
                    copy.deepcopy(d['result']['config']['materials'][material])
            print(tool.processFitResult(fitresult=d, elementsfrommatrix=True))
    else:
        print("Usage:")
        print("ConcentrationsTool [--flux=xxxx --area=xxxx] fitresultfile")
コード例 #21
0
 def loadConfiguration(self):
     wdir = Object3DDirs.inputDir
     message = "Enter input scene configuration file name"
     filename = qt.QFileDialog.getOpenFileName(self, message, wdir,
                                               "*.scene")
     filename = str(filename)
     if not len(filename):
         return
     Object3DDirs.inputDir = os.path.dirname(filename)
     d = ConfigDict.ConfigDict()
     d.read(filename)
     self.glWindow.scene.setConfiguration(d)
     #This partially works but it is awful
     current = self.glWindow.scene.getSelectedObject()
     if current is None:
         current = 'Scene'
     self.sceneControl.sceneWidget.setSelectedObject(current)
     self.sceneControl.sceneWidget.treeWidget.emitSignal('objectSelected')
     ddict = {}
     ddict['event'] = 'configurationLoaded'
     ddict['object'] = None
     ddict['legend'] = None
     self.emit(qt.SIGNAL('SceneManagerSignal'), ddict)
コード例 #22
0
ファイル: XRFMCHelper.py プロジェクト: tonnrueter/pymca_devel
def getBasicSubprocessCommand(fitFile, outputDir=None, xmimsim_pymca=None):
    ddict = getOutputFileNames(fitFile, outputDir)
    scriptFile = getScriptFile(pathToExecutable=xmimsim_pymca,
                               name=ddict['script'])
    if ddict['fit'] != fitFile:
        if outputDir is None:
            # this should never happen
            raise ValueError("Inconsistent internal behaviour!")
        # recreate input in output directory
        new = ConfigDict.ConfigDict()
        new.read(fitFile)
        if os.path.exists(ddict['fit']):
            os.remove(ddict['fit'])
        new.write(ddict['fit'])
        new = None
    speName = ddict['spe']
    csvName = ddict['csv']
    newFitFile = ddict['fit']
    xmsoName = ddict['xmsoName']
    args = [
        scriptFile,
        #"--enable-single-run",
        "--verbose",
        "--spe-file=%s" % speName,
        "--csv-file=%s" % csvName,
        #"--enable-roi-normalization",
        #"--disable-roi-normalization", #default
        #"--enable-pile-up"
        #"--disable-pile-up" #default
        #"--enable-poisson",
        #"--disable-poisson", #default no noise
        #"--set-threads=2", #overwrite default maximum
        newFitFile,
        xmsoName
    ]
    return args
コード例 #23
0
    def __processOneMca(self, x, y, filename, key, info=None):
        self._concentrationsAsAscii = ""
        if not self.roiFit:
            result = None
            concentrationsdone = 0
            concentrations = None
            outfile = self.os_path_join(self._outputdir, filename)
            fitfile = self.__getFitFile(filename, key)
            if self.chunk is not None:
                con_extension = "_%06d_partial_concentrations.txt" % self.chunk
            else:
                con_extension = "_concentrations.txt"
            self._concentrationsFile = self.os_path_join(
                self._outputdir, self._rootname + con_extension)
            #                        self._rootname+"_concentrationsNEW.txt")
            if self.counter == 0:
                if os.path.exists(self._concentrationsFile):
                    try:
                        os.remove(self._concentrationsFile)
                    except:
                        print("I could not delete existing concentrations file %s" %\
                              self._concentrationsFile)
            #print "self._concentrationsFile", self._concentrationsFile
            if self.useExistingFiles and os.path.exists(fitfile):
                useExistingResult = 1
                try:
                    dict = ConfigDict.ConfigDict()
                    dict.read(fitfile)
                    result = dict['result']
                    if 'concentrations' in dict:
                        concentrationsdone = 1
                except:
                    print("Error trying to use result file %s" % fitfile)
                    print("Please, consider deleting it.")
                    print(sys.exc_info())
                    return
            else:
                useExistingResult = 0
                try:
                    #I make sure I take the fit limits configuration
                    self.mcafit.config['fit']['use_limit'] = 1
                    self.mcafit.setData(x, y)
                except:
                    print("Error entering data of file with output = %s" %\
                          filename)
                    return
                try:
                    self.mcafit.estimate()
                    if self.fitFiles:
                        fitresult, result = self.mcafit.startfit(digest=1)
                    elif self._concentrations and (self.mcafit._fluoRates is
                                                   None):
                        fitresult, result = self.mcafit.startfit(digest=1)
                    elif self._concentrations:
                        fitresult = self.mcafit.startfit(digest=0)
                        try:
                            fitresult0 = {}
                            fitresult0['fitresult'] = fitresult
                            fitresult0[
                                'result'] = self.mcafit.imagingDigestResult()
                            fitresult0['result']['config'] = self.mcafit.config
                            conf = self.mcafit.configure()
                            tconf = self._tool.configure()
                            if 'concentrations' in conf:
                                tconf.update(conf['concentrations'])
                            else:
                                #what to do?
                                pass
                            concentrations = self._tool.processFitResult(
                                config=tconf,
                                fitresult=fitresult0,
                                elementsfrommatrix=False,
                                fluorates=self.mcafit._fluoRates)
                        except:
                            print("error in concentrations")
                            print(sys.exc_info()[0:-1])
                        concentrationsdone = True
                    else:
                        #just images
                        fitresult = self.mcafit.startfit(digest=0)
                except:
                    print("Error fitting file with output = %s: %s)" %\
                          (filename, sys.exc_info()[1]))
                    return
            if self._concentrations:
                if concentrationsdone == 0:
                    if not ('concentrations' in result):
                        if useExistingResult:
                            fitresult0 = {}
                            fitresult0['result'] = result
                            conf = result['config']
                        else:
                            fitresult0 = {}
                            if result is None:
                                result = self.mcafit.digestresult()
                            fitresult0['result'] = result
                            fitresult0['fitresult'] = fitresult
                            conf = self.mcafit.configure()
                        tconf = self._tool.configure()
                        if 'concentrations' in conf:
                            tconf.update(conf['concentrations'])
                        else:
                            pass
                            #print "Concentrations not calculated"
                            #print "Is your fit configuration file correct?"
                            #return
                        try:
                            concentrations = self._tool.processFitResult(
                                config=tconf,
                                fitresult=fitresult0,
                                elementsfrommatrix=False)
                        except:
                            print("error in concentrations")
                            print(sys.exc_info()[0:-1])
                            #return
                self._concentrationsAsAscii = self._toolConversion.getConcentrationsAsAscii(
                    concentrations)
                if len(self._concentrationsAsAscii) > 1:
                    text = ""
                    text += "SOURCE: " + filename + "\n"
                    text += "KEY: " + key + "\n"
                    text += self._concentrationsAsAscii + "\n"
                    f = open(self._concentrationsFile, "a")
                    f.write(text)
                    f.close()

            #output options
            # .FIT files
            if self.fitFiles:
                fitdir = self.os_path_join(self._outputdir, "FIT")
                if not os.path.exists(fitdir):
                    try:
                        os.mkdir(fitdir)
                    except:
                        print("I could not create directory %s" % fitdir)
                        return
                fitdir = self.os_path_join(fitdir, filename + "_FITDIR")
                if not os.path.exists(fitdir):
                    try:
                        os.mkdir(fitdir)
                    except:
                        print("I could not create directory %s" % fitdir)
                        return
                if not os.path.isdir(fitdir):
                    print("%s does not seem to be a valid directory" % fitdir)
                else:
                    outfile = filename + "_" + key + ".fit"
                    outfile = self.os_path_join(fitdir, outfile)
                if not useExistingResult:
                    result = self.mcafit.digestresult(outfile=outfile,
                                                      info=info)
                if concentrations is not None:
                    try:
                        f = ConfigDict.ConfigDict()
                        f.read(outfile)
                        f['concentrations'] = concentrations
                        try:
                            os.remove(outfile)
                        except:
                            print("error deleting fit file")
                        f.write(outfile)
                    except:
                        print("Error writing concentrations to fit file")
                        print(sys.exc_info())

                #python like output list
                if not self.counter:
                    name = os.path.splitext(
                        self._rootname)[0] + "_fitfilelist.py"
                    name = self.os_path_join(self._outputdir, name)
                    try:
                        os.remove(name)
                    except:
                        pass
                    self.listfile = open(name, "w+")
                    self.listfile.write("fitfilelist = [")
                    self.listfile.write('\n' + outfile)
                else:
                    self.listfile.write(',\n' + outfile)
            else:
                if not useExistingResult:
                    if 0:
                        #this is very slow and not needed just for imaging
                        if result is None: result = self.mcafit.digestresult()
                    else:
                        if result is None:
                            result = self.mcafit.imagingDigestResult()

            #IMAGES
            if self.fitImages:
                #this only works with EDF
                if self.__ncols is not None:
                    if not self.counter:
                        imgdir = self.os_path_join(self._outputdir, "IMAGES")
                        if not os.path.exists(imgdir):
                            try:
                                os.mkdir(imgdir)
                            except:
                                print("I could not create directory %s" %\
                                      imgdir)
                                return
                        elif not os.path.isdir(imgdir):
                            print("%s does not seem to be a valid directory" %\
                                  imgdir)
                        self.imgDir = imgdir
                        self.__peaks = []
                        self.__images = {}
                        self.__sigmas = {}
                        if not self.__stack:
                            self.__nrows = len(
                                range(0, len(self._filelist), self.fileStep))
                        for group in result['groups']:
                            self.__peaks.append(group)
                            self.__images[group] = numpy.zeros(
                                (self.__nrows, self.__ncols), numpy.float)
                            self.__sigmas[group] = numpy.zeros(
                                (self.__nrows, self.__ncols), numpy.float)
                        self.__images['chisq'] = numpy.zeros(
                            (self.__nrows, self.__ncols), numpy.float) - 1.
                        if self._concentrations:
                            layerlist = concentrations['layerlist']
                            if 'mmolar' in concentrations:
                                self.__conLabel = " mM"
                                self.__conKey = "mmolar"
                            else:
                                self.__conLabel = " mass fraction"
                                self.__conKey = "mass fraction"
                            for group in concentrations['groups']:
                                key = group + self.__conLabel
                                self.__concentrationsKeys.append(key)
                                self.__images[key] = numpy.zeros(
                                    (self.__nrows, self.__ncols), numpy.float)
                                if len(layerlist) > 1:
                                    for layer in layerlist:
                                        key = group + " " + layer
                                        self.__concentrationsKeys.append(key)
                                        self.__images[key] = numpy.zeros(
                                            (self.__nrows, self.__ncols),
                                            numpy.float)
                for peak in self.__peaks:
                    try:
                        self.__images[peak][
                            self.__row, self.__col] = result[peak]['fitarea']
                        self.__sigmas[peak][
                            self.__row, self.__col] = result[peak]['sigmaarea']
                    except:
                        pass
                if self._concentrations:
                    layerlist = concentrations['layerlist']
                    for group in concentrations['groups']:
                        self.__images[group+self.__conLabel][self.__row, self.__col] = \
                                              concentrations[self.__conKey][group]
                        if len(layerlist) > 1:
                            for layer in layerlist:
                                self.__images[group+" "+layer] [self.__row, self.__col] = \
                                              concentrations[layer][self.__conKey][group]
                try:
                    self.__images['chisq'][self.__row,
                                           self.__col] = result['chisq']
                except:
                    print("Error on chisq row %d col %d" %\
                          (self.__row, self.__col))
                    print("File = %s\n" % filename)
                    pass

        else:
            dict = self.mcafit.roifit(x, y, width=self.roiWidth)
            #this only works with EDF
            if self.__ncols is not None:
                if not self.counter:
                    imgdir = self.os_path_join(self._outputdir, "IMAGES")
                    if not os.path.exists(imgdir):
                        try:
                            os.mkdir(imgdir)
                        except:
                            print("I could not create directory %s" %\
                                  imgdir)
                            return
                    elif not os.path.isdir(imgdir):
                        print("%s does not seem to be a valid directory" %\
                              imgdir)
                    self.imgDir = imgdir
                    self.__ROIpeaks = []
                    self._ROIimages = {}
                    if not self.__stack:
                        self.__nrows = len(self._filelist)
                    for group in dict.keys():
                        self.__ROIpeaks.append(group)
                        self._ROIimages[group] = {}
                        for roi in dict[group].keys():
                            self._ROIimages[group][roi] = numpy.zeros(
                                (self.__nrows, self.__ncols), numpy.float)

            if not hasattr(self, "_ROIimages"):
                print("ROI fitting only supported on EDF")
            for group in self.__ROIpeaks:
                for roi in self._ROIimages[group].keys():
                    try:
                        self._ROIimages[group][roi][
                            self.__row, self.__col] = dict[group][roi]
                    except:
                        print("error on (row,col) = %d,%d" %\
                              (self.__row, self.__col))
                        print("File = %s" % filename)
                        pass

        #update counter
        self.counter += 1
コード例 #24
0
#
# You should have received a copy of the GNU General Public License along with
# PyMca; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
# PyMca follows the dual licensing model of Riverbank's PyQt and cannot be
# used as a free plugin for a non-free program.
#
# Please contact the ESRF industrial unit ([email protected]) if this license
# is a problem for you.
#############################################################################*/
import sys
import os
from PyMca import ConfigDict
from PyMca import PyMcaDataDir

dict = ConfigDict.ConfigDict()
dirmod = PyMcaDataDir.PYMCA_DATA_DIR
dictfile = os.path.join(dirmod, "Scofield1973.dict")
if not os.path.exists(dictfile):
    dirmod = os.path.dirname(dirmod)
    dictfile = os.path.join(dirmod, "Scofield1973.dict")
    if not os.path.exists(dictfile):
        if dirmod.lower().endswith(".zip"):
            dirmod = os.path.dirname(dirmod)
    dictfile = os.path.join(dirmod, "Scofield1973.dict")
if not os.path.exists(dictfile):
    print("Cannot find file ", dictfile)
    raise IOError("Cannot find file %s " % dictfile)
dict.read(dictfile)
コード例 #25
0
 def setConfigurationFile(self, fname):
     if not os.path.exists(fname):
         raise IOError("File %s does not exist" % fname)
     w = ConfigDict.ConfigDict()
     w.read(fname)
     self.setConfiguration(w)
コード例 #26
0
ffile = os.path.join(ffile, "incoh.dict")
if not os.path.exists(ffile):
    #freeze does bad things with the path ...
    dirmod = os.path.dirname(dirmod)
    ffile = os.path.join(dirmod, "attdata")
    ffile = os.path.join(ffile, "incoh.dict")
    if not os.path.exists(ffile):
        if dirmod.lower().endswith(".zip"):
            dirmod = os.path.dirname(dirmod)
            ffile = os.path.join(dirmod, "attdata")
            ffile = os.path.join(ffile, "incoh.dict")
    if not os.path.exists(ffile):
        print("Cannot find file ", ffile)
        raise IOError("Cannot find file %s" % ffile)

COEFFICIENTS = ConfigDict.ConfigDict()
COEFFICIENTS.read(ffile)
xvalues = COEFFICIENTS['ISCADT']['XSVAL']
svalues = numpy.reshape(COEFFICIENTS['ISCADT']['SCATF'], (100, len(xvalues)))
#svalues = COEFFICIENTS['ISCADT']['SCATF']
#print svalues[100:110]
KEVTOANG = 12.39852000
R0 = 2.82E-13  #electron radius in cm


def getZ(ele):
    if ele in ElementList:
        return float(ElementList.index(ele) + 1)
    else:
        return None
コード例 #27
0
            if opt in ('--flux'):
                config['flux'] = float(arg)
            elif opt in ('--area'):
                config['area'] = float(arg)
            elif opt in ('--time'):
                config['time'] = float(arg)
            elif opt in ('--distance'):
                config['distance'] = float(arg)
            elif opt in ('--attenuators'):
                config['useattenuators'] = int(float(arg))
            elif opt in ('--usematrix'):
                config['usematrix'] = int(float(arg))
        demo.setParameters(config)
        filelist = args
        for file in filelist:
            d = ConfigDict.ConfigDict()
            d.read(file)
            for material in d['result']['config']['materials'].keys():
                Elements.Material[material] = copy.deepcopy(d['result']['config']['materials'][material])
            demo.processFitResult(fitresult=d, elementsfrommatrix=False)
        demo.show()
        if QTVERSION < '4.0.0':
            app.setMainWidget(demo)
            app.exec_loop()
        else:
            app.exec_()

    else:
        print("Usage:")
        print("ConcentrationsWidget.py [--flux=xxxx --area=xxxx] fitresultfile")
コード例 #28
0
ファイル: XRFMCPyMca.py プロジェクト: tonnrueter/pymca_devel
    def _start(self):
        """
        """
        if self.logWidget is not None:
            if self.logWidget.isSubprocessRunning():
                text = "A simulation is already started\n"
                self.errorMessage(text)
                return
        pymcaFitFile = self.fitFileWidget.getFileList()
        if len(pymcaFitFile) < 1:
            text = "PyMca .fit or .cfg file is mandatory\n"
            self.errorMessage(text)
            return
        pymcaFitFile = pymcaFitFile[0]
        
        program = self.programWidget.getFileList()
        if len(program) < 1:
            text = "Simulation program file is mandatory\n"
            self.errorMessage(text)
            return
        program = program[0]

        #This one would only be needed for backup purposes
        #self.iniFileWidget.getFileList()

        #The output directory
        outputDir = self.outputDirWidget.getFileList()
        if len(outputDir) < 1:
            text = "Output directory is mandatory\n"
            self.errorMessage(text)
            return

        #the actual parameters to be used
        ddict = self.parametersWidget.getParameters()

        #the output directory
        ddict['xrfmc']['setup']['output_dir'] = outputDir[0]
        self.__outputDir = outputDir[0]

        #the simulation parameters
        simPar = self.simulationWidget.getParameters()
        ddict['xrfmc']['setup']['histories'] = simPar['histories']

        #write a file containing both, PyMca and XRFMC configuration in output dir
        if pymcaFitFile.lower().endswith(".cfg"):
            # not a fit result but a configuration file
            # but this does not work
            newFile=ConfigDict.ConfigDict()
            newFile.read(pymcaFitFile)
            #perform a dummy fit till xmimsim-pymca is upgraded
            if 0:
                import numpy
                from PyMca import ClassMcaTheory 
                newFile['fit']['linearfitflag']=1
                newFile['fit']['stripflag']=0
                newFile['fit']['stripiterations']=0
                xmin = newFile['fit']['xmin']
                xmax = newFile['fit']['xmax']
                #xdata = numpy.arange(xmin, xmax + 1) * 1.0
                xdata = numpy.arange(0, xmax + 1) * 1.0
                ydata = 0.0 + 0.1 * xdata
                mcaFit = ClassMcaTheory.McaTheory()
                mcaFit.configure(newFile)
                mcaFit.setData(x=xdata, y=ydata, xmin=xmin, xmax=xmax)
                mcaFit.estimate()
                fitresult,result = mcaFit.startfit(digest=1)
                newFile = None
                nfile=ConfigDict.ConfigDict()
                nfile['result'] = result
                #nfile.write("tmpFitFileFromConfig.fit")
            else:
                nfile = ConfigDict.ConfigDict()
                nfile.read(pymcaFitFile)
            nfile.update(ddict)
            newFile = os.path.join(outputDir[0],\
                                   os.path.basename(pymcaFitFile[:-4] + ".fit"))
        else:
            nfile = ConfigDict.ConfigDict()
            nfile.read(pymcaFitFile)
            nfile.update(ddict)
            newFile = os.path.join(outputDir[0],\
                                   os.path.basename(pymcaFitFile))
        if os.path.exists(newFile):
            os.remove(newFile)
        nfile.write(newFile)
        nfile = None

        fileNamesDict = XRFMCHelper.getOutputFileNames(newFile,
                                                       outputDir=outputDir[0])
        if newFile != fileNamesDict['fit']:
            raise ValueError("Inconsistent internal behaviour!")

        scriptName = fileNamesDict['script']
        scriptFile = XRFMCHelper.getScriptFile(program, name=scriptName)
        csvName = fileNamesDict['csv']
        speName = fileNamesDict['spe']
        xmsoName = fileNamesDict['xmso']

        # basic parameters
        args = [scriptFile,
               #"--enable-single-run",
               "--verbose",
               "--spe-file=%s" % speName,
               "--csv-file=%s" % csvName,
               #"--enable-roi-normalization",
               #"--disable-roi-normalization", #default
               #"--enable-pile-up"
               #"--disable-pile-up" #default
               #"--enable-poisson",
               #"--disable-poisson", #default no noise
               #"--set-threads=2", #overwrite default maximum
               newFile,
               xmsoName]

        self.__fileNamesDict = fileNamesDict

        # additionalParameters
        if self.simulationWidget.getSimulationMode().lower() == "fit":
            simulationParameters = []
        else:
            simulationParameters = ["--enable-single-run",
                                    "--set-threads=2"]
        i = 0
        for parameter in simulationParameters:
            i += 1             
            args.insert(1, parameter)

        # show the command on the log widget
        text = "%s" % scriptFile 
        for arg in args[1:]:
            text += " %s" % arg
        self.logWidget.clear()
        self.logWidget.append(text)
        self.logWidget.start(args=args)
コード例 #29
0
ファイル: XRFMCHelper.py プロジェクト: tonnrueter/pymca_devel
def getXRFMCCorrectionFactors(fitConfiguration,
                              xmimsim_pymca=None,
                              verbose=False):
    outputDir = tempfile.mkdtemp(prefix="pymcaTmp")
    if 'result' in fitConfiguration:
        # we have to create a .fit file with the information
        ddict = ConfigDict.ConfigDict()
        ddict.update(fitConfiguration)
    else:
        # for the time being we have to build a "fit-like" file with the information
        import numpy
        from PyMca import ClassMcaTheory
        fitConfiguration['fit']['linearfitflag'] = 1
        fitConfiguration['fit']['stripflag'] = 0
        fitConfiguration['fit']['stripiterations'] = 0
        xmin = fitConfiguration['fit']['xmin']
        xmax = fitConfiguration['fit']['xmax']
        #xdata = numpy.arange(xmin, xmax + 1) * 1.0
        xdata = numpy.arange(0, xmax + 1) * 1.0
        ydata = 0.0 + 0.1 * xdata
        mcaFit = ClassMcaTheory.McaTheory()
        mcaFit.configure(fitConfiguration)
        mcaFit.setData(x=xdata, y=ydata, xmin=xmin, xmax=xmax)
        mcaFit.estimate()
        fitresult, result = mcaFit.startfit(digest=1)
        ddict = ConfigDict.ConfigDict()
        ddict['result'] = result
        ddict['xrfmc'] = fitConfiguration['xrfmc']
    handle, fitFile = tempfile.mkstemp(suffix=".fit",
                                       prefix="pymca",
                                       dir=outputDir,
                                       text=False)
    os.close(handle)
    ddict.write(fitFile)
    ddict = None

    # we have the input file ready
    fileNamesDict = getOutputFileNames(fitFile, outputDir)
    scriptFile = getScriptFile(pathToExecutable=xmimsim_pymca,
                               name=fileNamesDict['script'])
    xmsoName = fileNamesDict['xmso']
    # basic parameters
    args = [
        scriptFile,
        "--enable-single-run",
        #"--set-threads=2",
        #"--verbose",
        #"--spe-file=%s" % speName,
        #"--csv-file=%s" % csvName,
        #"--enable-roi-normalization",
        #"--disable-roi-normalization", #default
        #"--enable-pile-up"
        #"--disable-pile-up" #default
        #"--enable-poisson",
        #"--disable-poisson", #default no noise
        #"--set-threads=2", #overwrite default maximum
        fitFile,
        xmsoName
    ]
    if verbose:
        args.insert(2, "--verbose")
    process = subprocess.Popen(args,
                               bufsize=0,
                               stdout=subprocess.PIPE,
                               stderr=subprocess.PIPE,
                               universal_newlines=True)
    while process.poll() is None:
        # process did not finish yet
        time.sleep(0.1)
        line = process.stdout.readline()
        if verbose:
            if len(line) > 1:
                print("OUTPUT = <%s>" % line[:-1])
    returnCode = process.returncode
    line = process.stdout.readline()
    while len(line) > 1:
        if verbose:
            print("OUTPUT = %s" % line[:-1])
        line = process.stdout.readline()
    if returnCode:
        text = ""
        line = process.stderr.readline()
        while len(line) > 1:
            text += line
            if verbose:
                print("ERROR = %s" % line[:-1])
            line = process.stderr.readline()
            removeDirectory(outputDir)
        raise IOError("Program terminated with error code %d:\n%s" %
                      (returnCode, text))
    corrections = getXMSOFileFluorescenceInformation(xmsoName)
    xmsoName = None
    removeDirectory(outputDir)
    return corrections