Example #1
0
 def OnSimulate(self, event):
     #----------  Retrive values from panel --------------
     AtomList = []
     ConcList = []
     Atoms = []
     text = self.textENERGY.GetValue()
     eV0 = float(text)  # incident energy
     text = self.textANGLE.GetValue()
     angle0 = float(text)  # incident angle
     if eV0 <= 1000: eV0 = 1010
     text = self.textELEMENT.GetValue(
     )  # list of elements and concentrations
     words = text.split()
     junk = ["'", ",", ":", ";", "/", "\\"]
     for (ix, word) in enumerate(words):
         concentration = 1.0
         skip = 0
         for test in junk:
             if word == test: skip = 1
             if word.startswith(test): word = word[1:]
             if word.endswith(test): word = word[:-1]
         if skip == 1: continue
         if (word.isalpha()):  # element name
             word = word[0].upper() + word[1:]
             AtomList.append(str(word))
         else:  # concentration
             concentration = float(word)
             ConcList.append(concentration)
     # appending to Atoms is done later.
     #
     text = self.textSUBSTRATE.GetValue()
     substrate1 = str(text)  # substrate1 material
     text = self.textDENSITY.GetValue()
     density1 = float(text)  # substrate1 density in g/cc
     text = self.textTOP.GetValue()
     thickness1 = float(text)  # substrate1 thickness in cm
     #
     text = self.textSUBSTRATE2.GetValue()
     substrate2 = str(text)  # substrate2 material
     text = self.textDENSITY2.GetValue()
     density2 = float(text)  # substrate2 density
     text = self.textBOT.GetValue()
     thickness2 = float(text)  # substrate2 thickness
     text = self.cbLOCATION.GetValue()
     loc = text  # location of elements
     #
     unit_PPM = self.cbPPM.GetValue(
     )  # unit for concentration atomic fraction or  weight fraction
     #
     if unit_PPM == 'weight fraction':  # concentrations are in weight fraction
         substrate1_material = fluo_det.Material(substrate1, density1)
         AtomicWeight_substrate1 = substrate1_material.AtWt  # g/mol of substrate1
         for (ii, item) in enumerate(AtomList):
             AtomicSymbol = item  # dilute elements
             AtomicWeight = fluo_elem.AtSym2AtWt(AtomicSymbol)  # g/mol
             concentration_AtWtFract = ConcList[
                 ii]  # concentration in weight fraction
             Conversion = AtomicWeight_substrate1 / AtomicWeight  # weight fraction to atomic fraction
             ConcList[ii] = Conversion * concentration_AtWtFract
             #print(AtomicSymbol, concentration_AtWtFract, Conversion, Conversion * concentration_AtWtFract)
     # concentrations are in atomic percent now
     #
     for (ii, item) in enumerate(AtomList):
         AtSym = item  # name of element
         con = ConcList[
             ii] / 1.0e6  # concentration, from ppm(1e-6) to fraction
         atom1 = fluo_det.ElemFY(
             AtSym, con)  # atom1.AtomicSybol, atom1.Concentration
         Atoms.append(atom1)  # Atoms is a list of objects with attributes
     #
     text = self.cbHE.GetValue()
     if text == 'Yes':
         xHe = 1
     else:
         xHe = 0
     text = self.textAL.GetValue()
     xAl = float(text)
     text = self.textKAPTON.GetValue()
     xKap = float(text)
     text = self.textWD.GetValue()
     WD = float(text)
     text = self.cbXSW.GetValue()  # collimator
     if text == 'WD60mm(XRM)': xsw = 0
     if text == 'WD30mm(XSW)': xsw = 1
     if text == 'none': xsw = -1
     # --------------  run functions in fluo.py -----------------------------
     reload(fluo_det)
     self.input = fluo_det.input_param(eV0, Atoms, xHe, xAl, xKap, WD, xsw)
     matrix = fluo_det.SampleMatrix2(substrate1, density1, thickness1,
                                     substrate2, density2, thickness2,
                                     angle0, loc)
     #print('####', substrate1, density1, thickness1,substrate2, density2, thickness2)
     # --- change directory for pc executable: py2exe makes exe-file in dist folder.  put outputfiles one folder up.
     exeExists = 0
     if os.path.exists(
             'fluo_panel.exe'
     ):  # run from exe file put outputs in different folder
         exeExists = 1
     path0 = os.getcwd()
     if self.path == path0 and exeExists == 1:  # current directory is the original location
         num = len(path0)
         range0 = range(num - 1, -1, -1)
         for ix in range0:
             if path0[ix] == '\\':  # find position for right-most '\'
                 pos0 = ix
                 break
         path0 = path0[:pos0]
         os.chdir(path0)  # go up one level in directory
     # ------------------------------------------------------------------------
     textOut = fluo_det.sim_spectra(eV0,
                                    Atoms,
                                    xHe,
                                    xAl,
                                    xKap,
                                    WD,
                                    xsw,
                                    sample=matrix)
     printout = 'output: simSpectrum_table.txt, simSpectrum_plot.txt, Elemental_Sensitivity.txt'
     printout += ' saved in ' + path0
     print(printout)
     #self.cbLINES.Destroy()
     #self.fyList=[]
     #self.cbLINES = wx.ComboBox(self, 3, 'Press [Plot!] to update', (120, 30), (165, 10), self.fyList, wx.CB_DROPDOWN)
     self.cbLINES.Clear(
     )  # use these three lines instead of above 3, 8/27/2010
     self.cbLINES.SetValue(str('Press [Plot!] to update'))
     self.cbLINES.AppendItems(self.fyList)
     # -------------  display output message from fluo.sim_spectra -------------
     textList = textOut.split()
     self.TextOutputList = []
     #self.TextOutput.Destroy()  # 8/27/2010
     for ii in range(0, len(textList), 2):
         temp = textList[ii] + ' ' + textList[ii + 1]
         self.TextOutputList.append(temp)
     #self.TextOutput = wx.ComboBox(self, 26, 'concentration list', (10, 410), (280, 20), self.TextOutputList, wx.CB_DROPDOWN)
     self.TextOutput.Clear()
     self.TextOutput.AppendItems(self.TextOutputList)
Example #2
0
        def __init__(self, parent, id, title):
                wx.Dialog.__init__(self, parent, id, 'SimFluo: fluorescence spectrum simulation', size=(350, 480))
#-------------  read simulated spectrum and set plot limits  --------------------------
                self.data=[]; self.data2=[]
                self.plot_on=0
                self.path=os.getcwd()   # remembers current directory
                inputfile='simSpectrum_plot.txt'
                if os.path.exists(inputfile)==0:
                        fo=open(inputfile, 'w')
                        out1=str(1e3)+' '+str(1e6)+'\n'
                        fo.write(out1)
                        out1=str(10e3)+' '+str(10e6)+'\n'
                        fo.write(out1)
                        fo.close()
                f=open(inputfile)
                lines=f.readlines()
                self.xMin=1e6; self.xMax=-1e6; self.yMin=1e6; self.yMax=-1e6
                for line in lines:
                    if line.startswith('#'):    continue
                    words=line.split()
                    xx=float(words[0])
                    if self.xMin>xx: self.xMin=xx
                    if self.xMax<=xx: self.xMax=xx
                    yy=float(words[1])
                    if self.yMin>yy: self.yMin=yy
                    if self.yMax<=yy: self.yMax=yy
                    self.data.append((xx, yy))
                f.close()
                HeList=['Yes', 'No']
                xswList=['WD60mm(XRM)', 'WD30mm(XSW)', 'none']
                self.fyList=[]
                self.locationList=['all', 'top', 'bottom', 'surface']
                self.ppmList=['atomic fraction', 'weight fraction']
                self.TextOutputList=[]
                self.input=fluo_det.input_param()
#--------------------------------------------------------------------------
                btnSim = wx.Button(self,  1, 'Simulate!', (30,10))
                btnPlot = wx.Button(self,  2, 'Plot!', (30,35))
                self.cbLINES = wx.ComboBox(self, 3, 'emission lines', (120, 30), (165, 10), self.fyList, wx.CB_DROPDOWN)
                #
                wx.StaticText(self, -1, "incident x-ray energy (eV)", (5, 60))
                self.textENERGY = wx.TextCtrl(self, 10, '7500', (10, 75))
                wx.StaticText(self, -1, "incident x-ray angle (Deg.)", (165, 60))
                self.textANGLE = wx.TextCtrl(self, 11, '45.', (170, 75))
                #
                wx.StaticText(self, -1, "elements and concentrations (ppm of top substrate material)", (5, 100))
                wx.StaticText(self, -1, "in atomic fraction or weight fraction", (5, 115))
                self.cbPPM = wx.ComboBox(self, 12, 'atomic fraction', (200, 113), (140, 10), self.ppmList, wx.CB_DROPDOWN)
                self.textELEMENT = wx.TextCtrl(self,  13, 'La 10 Ce 10 Nd 10', (10,135), size=(280, 20))
                #
                wx.StaticText(self, -1, "top substrate material", (5, 155))
                self.textSUBSTRATE = wx.TextCtrl(self, 14, 'CaCO3', (10, 170), (80, 20))
                wx.StaticText(self, -1, "density (g/cc)", (135, 155))
                self.textDENSITY = wx.TextCtrl(self, 15, '2.71', (140, 170), (80, 20))
                wx.StaticText(self, -1, "thickness (cm)", (235, 155))
                self.textTOP = wx.TextCtrl(self, 16, '0.001', (240, 170), (80, 20))
                #
                wx.StaticText(self, -1, "bottom substrate material", (5, 195))
                self.textSUBSTRATE2 = wx.TextCtrl(self, 17, 'Al2O3', (10, 210), (80, 20))
                wx.StaticText(self, -1, "density (g/cc)", (135, 195))
                self.textDENSITY2 = wx.TextCtrl(self, 18, '3.97', (140, 210), (80, 20))
                wx.StaticText(self, -1, "thickness (cm)", (235, 195))
                self.textBOT = wx.TextCtrl(self, 19, '0.001', (240, 210), (80, 20))
                #
                wx.StaticText(self, -1, 'location of fluorescence elements', (5, 235))
                self.cbLOCATION = wx.ComboBox(self, 20, 'all', (10, 250), (165, 10), \
                                       self.locationList, wx.CB_DROPDOWN)              
                #
                wx.StaticText(self, -1, "He-path used?", (5, 275))
                self.cbHE = wx.ComboBox(self, 21, 'No', (10, 290), (95, 10), HeList, wx.CB_DROPDOWN)
                wx.StaticText(self, -1, '# of Al film (1.5mil)', (5, 315))
                self.textAL = wx.TextCtrl(self, 22, '0', (10, 330))
                wx.StaticText(self, -1, "# of Kapton film (0.3mil)", (165, 315))
                self.textKAPTON = wx.TextCtrl(self, 23, '0', (170, 330))
                wx.StaticText(self, -1, "Vortex detector distance (cm)", (5, 355))
                self.textWD = wx.TextCtrl(self, 24, '6.0', (10, 370))
                wx.StaticText(self, -1, "detector collimator", (165, 355))
                self.cbXSW = wx.ComboBox(self, 25, 'WD60mm(XRM)', (170, 370), (120, 10), xswList, wx.CB_DROPDOWN)
                self.TextOutput = wx.ComboBox(self, 26, 'output message', (10, 410), (250, 20), self.TextOutputList, wx.CB_DROPDOWN)
                #
                wx.EVT_BUTTON(self, 1, self.OnSimulate)
                wx.EVT_BUTTON(self, 2, self.OnPlot)
                wx.EVT_TEXT(self, 14, self.OntextSUBSTRATE)
                wx.EVT_TEXT(self, 17, self.OntextSUBSTRATE2)
                wx.EVT_TEXT(self, 25, self.OnCBXSW)
                wx.EVT_CLOSE(self, self.OnQuit)
Example #3
0
 def __init__(self, parent, id, title):
     wx.Dialog.__init__(self,
                        parent,
                        id,
                        'SimFluo: fluorescence spectrum simulation',
                        size=(350, 480))
     #-------------  read simulated spectrum and set plot limits  --------------------------
     self.data = []
     self.data2 = []
     self.plot_on = 0
     self.path = os.getcwd()  # remembers current directory
     inputfile = 'simSpectrum_plot.txt'
     if os.path.exists(inputfile) == 0:
         fo = open(inputfile, 'w')
         out1 = str(1e3) + ' ' + str(1e6) + '\n'
         fo.write(out1)
         out1 = str(10e3) + ' ' + str(10e6) + '\n'
         fo.write(out1)
         fo.close()
     f = open(inputfile)
     lines = f.readlines()
     self.xMin = 1e6
     self.xMax = -1e6
     self.yMin = 1e6
     self.yMax = -1e6
     for line in lines:
         if line.startswith('#'): continue
         words = line.split()
         xx = float(words[0])
         if self.xMin > xx: self.xMin = xx
         if self.xMax <= xx: self.xMax = xx
         yy = float(words[1])
         if self.yMin > yy: self.yMin = yy
         if self.yMax <= yy: self.yMax = yy
         self.data.append((xx, yy))
     f.close()
     HeList = ['Yes', 'No']
     xswList = ['WD60mm(XRM)', 'WD30mm(XSW)', 'none']
     self.fyList = []
     self.locationList = ['all', 'top', 'bottom', 'surface']
     self.ppmList = ['atomic fraction', 'weight fraction']
     self.TextOutputList = []
     self.input = fluo_det.input_param()
     #--------------------------------------------------------------------------
     btnSim = wx.Button(self, 1, 'Simulate!', (30, 10))
     btnPlot = wx.Button(self, 2, 'Plot!', (30, 35))
     self.cbLINES = wx.ComboBox(self, 3, 'emission lines', (120, 30),
                                (165, 10), self.fyList, wx.CB_DROPDOWN)
     #
     wx.StaticText(self, -1, "incident x-ray energy (eV)", (5, 60))
     self.textENERGY = wx.TextCtrl(self, 10, '7500', (10, 75))
     wx.StaticText(self, -1, "incident x-ray angle (Deg.)", (165, 60))
     self.textANGLE = wx.TextCtrl(self, 11, '45.', (170, 75))
     #
     wx.StaticText(
         self, -1,
         "elements and concentrations (ppm of top substrate material)",
         (5, 100))
     wx.StaticText(self, -1, "in atomic fraction or weight fraction",
                   (5, 115))
     self.cbPPM = wx.ComboBox(self, 12, 'atomic fraction', (200, 113),
                              (140, 10), self.ppmList, wx.CB_DROPDOWN)
     self.textELEMENT = wx.TextCtrl(self,
                                    13,
                                    'La 10 Ce 10 Nd 10', (10, 135),
                                    size=(280, 20))
     #
     wx.StaticText(self, -1, "top substrate material", (5, 155))
     self.textSUBSTRATE = wx.TextCtrl(self, 14, 'CaCO3', (10, 170),
                                      (80, 20))
     wx.StaticText(self, -1, "density (g/cc)", (135, 155))
     self.textDENSITY = wx.TextCtrl(self, 15, '2.71', (140, 170), (80, 20))
     wx.StaticText(self, -1, "thickness (cm)", (235, 155))
     self.textTOP = wx.TextCtrl(self, 16, '0.001', (240, 170), (80, 20))
     #
     wx.StaticText(self, -1, "bottom substrate material", (5, 195))
     self.textSUBSTRATE2 = wx.TextCtrl(self, 17, 'Al2O3', (10, 210),
                                       (80, 20))
     wx.StaticText(self, -1, "density (g/cc)", (135, 195))
     self.textDENSITY2 = wx.TextCtrl(self, 18, '3.97', (140, 210), (80, 20))
     wx.StaticText(self, -1, "thickness (cm)", (235, 195))
     self.textBOT = wx.TextCtrl(self, 19, '0.001', (240, 210), (80, 20))
     #
     wx.StaticText(self, -1, 'location of fluorescence elements', (5, 235))
     self.cbLOCATION = wx.ComboBox(self, 20, 'all', (10, 250), (165, 10), \
                            self.locationList, wx.CB_DROPDOWN)
     #
     wx.StaticText(self, -1, "He-path used?", (5, 275))
     self.cbHE = wx.ComboBox(self, 21, 'No', (10, 290), (95, 10), HeList,
                             wx.CB_DROPDOWN)
     wx.StaticText(self, -1, '# of Al film (1.5mil)', (5, 315))
     self.textAL = wx.TextCtrl(self, 22, '0', (10, 330))
     wx.StaticText(self, -1, "# of Kapton film (0.3mil)", (165, 315))
     self.textKAPTON = wx.TextCtrl(self, 23, '0', (170, 330))
     wx.StaticText(self, -1, "Vortex detector distance (cm)", (5, 355))
     self.textWD = wx.TextCtrl(self, 24, '6.0', (10, 370))
     wx.StaticText(self, -1, "detector collimator", (165, 355))
     self.cbXSW = wx.ComboBox(self, 25, 'WD60mm(XRM)', (170, 370),
                              (120, 10), xswList, wx.CB_DROPDOWN)
     self.TextOutput = wx.ComboBox(self, 26, 'output message', (10, 410),
                                   (250, 20), self.TextOutputList,
                                   wx.CB_DROPDOWN)
     #
     wx.EVT_BUTTON(self, 1, self.OnSimulate)
     wx.EVT_BUTTON(self, 2, self.OnPlot)
     wx.EVT_TEXT(self, 14, self.OntextSUBSTRATE)
     wx.EVT_TEXT(self, 17, self.OntextSUBSTRATE2)
     wx.EVT_TEXT(self, 25, self.OnCBXSW)
     wx.EVT_CLOSE(self, self.OnQuit)
Example #4
0
 def OnSimulate(self, event):
         #----------  Retrive values from panel --------------
         AtomList=[]; ConcList=[]; Atoms=[]
         text=self.textENERGY.GetValue()
         eV0=float(text)                 # incident energy
         text=self.textANGLE.GetValue()
         angle0=float(text)              # incident angle
         if eV0<=1000:   eV0=1010
         text=self.textELEMENT.GetValue()        # list of elements and concentrations
         words=text.split()
         junk=["'", ",", ":", ";", "/", "\\"]
         for (ix,word) in enumerate(words):
                 concentration=1.0;      skip=0
                 for test in junk:
                         if word==test: skip=1
                         if word.startswith(test): word=word[1:]
                         if word.endswith(test): word=word[:-1]                               
                 if skip==1: continue
                 if (word.isalpha()):            # element name
                         word=word[0].upper()+word[1:]
                         AtomList.append(str(word))
                 else:                           # concentration
                         concentration=float(word)
                         ConcList.append(concentration)
         # appending to Atoms is done later.
         #
         text=self.textSUBSTRATE.GetValue()
         substrate1=str(text)                    # substrate1 material
         text=self.textDENSITY.GetValue()
         density1=float(text)                    # substrate1 density in g/cc
         text=self.textTOP.GetValue()
         thickness1=float(text)                  # substrate1 thickness in cm
         #
         text=self.textSUBSTRATE2.GetValue()
         substrate2=str(text)                    # substrate2 material
         text=self.textDENSITY2.GetValue()
         density2=float(text)                    # substrate2 density
         text=self.textBOT.GetValue()
         thickness2=float(text)                  # substrate2 thickness
         text=self.cbLOCATION.GetValue()
         loc=text                                # location of elements 
         #
         unit_PPM=self.cbPPM.GetValue()          # unit for concentration atomic fraction or  weight fraction
         # 
         if unit_PPM=='weight fraction':                   # concentrations are in weight fraction
                 substrate1_material = fluo_det.Material(substrate1, density1)
                 AtomicWeight_substrate1 = substrate1_material.AtWt      # g/mol of substrate1
                 for (ii, item) in enumerate(AtomList):
                         AtomicSymbol = item                               # dilute elements
                         AtomicWeight = fluo_elem.AtSym2AtWt(AtomicSymbol)      # g/mol
                         concentration_AtWtFract = ConcList[ii]            # concentration in weight fraction
                         Conversion = AtomicWeight_substrate1/AtomicWeight # weight fraction to atomic fraction
                         ConcList[ii] = Conversion * concentration_AtWtFract
                         #print AtomicSymbol, concentration_AtWtFract, Conversion, Conversion * concentration_AtWtFract
         # concentrations are in atomic percent now
         # 
         for (ii, item) in enumerate(AtomList):
                 AtSym=item                      # name of element
                 con=ConcList[ii]/1.0e6          # concentration, from ppm(1e-6) to fraction 
                 atom1=fluo_det.ElemFY(AtSym, con)   # atom1.AtomicSybol, atom1.Concentration
                 Atoms.append(atom1)             # Atoms is a list of objects with attributes
         #
         text=self.cbHE.GetValue()
         if text=='Yes':
                 xHe=1
         else:
                 xHe=0
         text=self.textAL.GetValue()
         xAl=float(text)
         text=self.textKAPTON.GetValue()
         xKap=float(text)
         text=self.textWD.GetValue()
         WD=float(text)
         text=self.cbXSW.GetValue()              # collimator
         if text=='WD60mm(XRM)': xsw=0
         if text=='WD30mm(XSW)': xsw=1
         if text=='none':        xsw=-1
         # --------------  run functions in fluo.py -----------------------------
         reload(fluo_det)
         self.input=fluo_det.input_param(eV0, Atoms, xHe, xAl, xKap, WD, xsw)
         matrix=fluo_det.SampleMatrix2(substrate1, density1, thickness1,substrate2, density2, thickness2, angle0, loc)
         #print '####', substrate1, density1, thickness1,substrate2, density2, thickness2
         # --- change directory for pc executable: py2exe makes exe-file in dist folder.  put outputfiles one folder up.
         exeExists=0
         if os.path.exists('fluo_panel.exe'):    # run from exe file put outputs in different folder
                 exeExists=1
         path0=os.getcwd()
         if self.path==path0 and exeExists==1:   # current directory is the original location
                 num=len(path0)
                 range0=range(num-1, -1, -1)
                 for ix in range0:
                         if path0[ix]=='\\' :    # find position for right-most '\'
                                 pos0=ix
                                 break
                 path0=path0[:pos0]              
                 os.chdir(path0)                 # go up one level in directory
         # ------------------------------------------------------------------------
         textOut=fluo_det.sim_spectra(eV0, Atoms, xHe, xAl, xKap, WD, xsw, sample=matrix)
         printout='output: simSpectrum_table.txt, simSpectrum_plot.txt, Elemental_Sensitivity.txt'
         printout+=' saved in '+path0
         print printout
         #self.cbLINES.Destroy()
         #self.fyList=[]
         #self.cbLINES = wx.ComboBox(self, 3, 'Press [Plot!] to update', (120, 30), (165, 10), self.fyList, wx.CB_DROPDOWN)
         self.cbLINES.Clear()  # use these three lines instead of above 3, 8/27/2010
         self.cbLINES.SetValue(str('Press [Plot!] to update'))
         self.cbLINES.AppendItems(self.fyList)
         # -------------  display output message from fluo.sim_spectra -------------
         textList=textOut.split()
         self.TextOutputList=[]
         #self.TextOutput.Destroy()  # 8/27/2010
         for ii in range(0, len(textList), 2):
                 temp=textList[ii]+' '+textList[ii+1]
                 self.TextOutputList.append(temp)
         #self.TextOutput = wx.ComboBox(self, 26, 'concentration list', (10, 410), (280, 20), self.TextOutputList, wx.CB_DROPDOWN)
         self.TextOutput.Clear()
         self.TextOutput.AppendItems(self.TextOutputList)