def getInfo(self): text = "" text += "<nobr><H2><FONT color=#0000cc>" text += "Computed File : " 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 : </TH><TD ALIGN=LEFT>%s</TD></TR>" % ( self.sourcename) text += " <TR><TH ALIGN=LEFT>Selection : </TH><TD ALIGN=LEFT>%s</TD></TR>" % ( self.selection) text += " <TR><TH ALIGN=LEFT>Parameters : </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
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))
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)
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)
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
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']
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)
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)
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)
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'])
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)
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)
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)
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)
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))
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)
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)
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)
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
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")
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)
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
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
# # 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)
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)
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
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")
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)
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