def simSpc(mat, e0, det, dose, ntraj, simDir): """ simSpc(mat, e0, det, dose, ntraj, simDir) simulate a spectrum from a material and write it out. """ xrts = [] trs = mc3.suggestTransitions(mat, e0) for tr in trs: xrts.append(tr) xtraParams = {} xtraParams.update(mc3.configureXRayAccumulators(xrts, True, True, True)) xtraParams.update(mc3.configureOutput(simDir)) spc = mc3.simulate(mat, det, e0, dose, True, nTraj, True, True, xtraParams) fmtS = "%s-at-%g-kV" sName = fmtS % (mat.getName(), e0) spc.rename(sName) spc.display() fi = simDir + "/" fi += sName fi += "-%g-Traj.msa" % (nTraj) spc.save(fi) return spc
def simulateBulkStandard(mat, name, det, e0, lt, pc, withPoisson=True, nTraj=100, sf=True, bf=True, xtraParams={}): """simulateBulkStandard(mat, name, det, e0, lt, pc, withPoisson=True, nTraj=100, sf=True, bf=True, xtraParams={})""" std = mc3.simulate(mat, det, e0, lt * pc, withPoisson=True, nTraj=nTraj, sf=True, bf=True, xtraParams={}) props = std.getProperties() props.setNumericProperty(epq.SpectrumProperties.LiveTime, lt) props.setNumericProperty(epq.SpectrumProperties.FaradayBegin, pc) props.setNumericProperty(epq.SpectrumProperties.FaradayEnd, pc) props.setNumericProperty(epq.SpectrumProperties.BeamEnergy, e0) std.setAsStandard(mat) return (std)
def simBulkStd(mat, det, e0, nTraj, lt=100, pc=1.0, ctd=True): """simBulkStd(mat, det, e0, nTraj, lt=100, pc=1.0) Use mc3 simulation to simulate an uncoated standard specimen Parameters ---------- mat - a dtsa material. Note the material must have an associated density. It should have a useful name. det - a dtsa detector Here is where we get the detector properties and calibration e0 - float The accelerating voltage in kV nTraj - integer The number of trajectories to run lt - integer (100) The live time (sec) pc - float (1.0) The probe current in nA ctd - Boolean (True) - is C coated Returns ------- sim - DTSA scriptable spectrum The simulated standard spectrum Example ------- import dtsa2.jmMC3 as jm3 det = findDetector("Oxford p4 05eV 2K") cu = material("Cu", density=8.92) a = jm3.simBulkStd(cu, det, 20.0, 100, 100, 1.0) a.display() """ dose = pc * lt # na-sec" xrts = [] trs = mc3.suggestTransitions(mat, e0) for tr in trs: xrts.append(tr) xtraParams = {} xtraParams.update(mc3.configureXRayAccumulators(xrts, True, True, True)) sim = mc3.simulate(mat, det, e0, dose, withPoisson=True, nTraj=nTraj, sf=True, bf=True, xtraParams=xtraParams) sName = "%s-%g-kV" % (mat, e0) sim.rename(sName) sim.setAsStandard(mat) return sim
def simSpc(mat, e0, det, dose, ntraj, simDir): """ simSpc(mat, e0, det, dose, ntraj, simDir) simulate a spectrum from a material and write it out. """ xrts = [] trs = mc3.suggestTransitions(mat, e0) for tr in trs: xrts.append(tr) xtraParams={} xtraParams.update(mc3.configureXRayAccumulators(xrts,True, True, True)) xtraParams.update(mc3.configureOutput(simDir)) spc = mc3.simulate(mat, det, e0, dose, True, nTraj, True, True, xtraParams) fmtS = "%s-at-%g-kV" sName = fmtS % (mat.getName(), e0) spc.rename(sName) spc.display() fi = simDir + "/" fi += sName fi += "-%g-Traj.msa" % (nTraj) spc.save(fi) return spc
def simulateBulkStandard(mat, name, det, e0, lt, pc, withPoisson=True, nTraj=100, sf=True, bf=True, xtraParams={}): """simulateBulkStandard(mat, name, det, e0, lt, pc, withPoisson=True, nTraj=100, sf=True, bf=True, xtraParams={})""" std = mc3.simulate(mat, det, e0, lt*pc, withPoisson=True, nTraj=nTraj, sf=True, bf=True, xtraParams={}) props=std.getProperties() props.setNumericProperty(epq.SpectrumProperties.LiveTime, lt) props.setNumericProperty(epq.SpectrumProperties.FaradayBegin, pc) props.setNumericProperty(epq.SpectrumProperties.FaradayEnd, pc) props.setNumericProperty(epq.SpectrumProperties.BeamEnergy, e0) std.setAsStandard(mat) return(std)
def simBulkStd(mat, det, e0, nTraj, lt=100, pc=1.0, ctd=True): """simBulkStd(mat, det, e0, nTraj, lt=100, pc=1.0) Use mc3 simulation to simulate an uncoated standard specimen Parameters ---------- mat - a dtsa material. Note the material must have an associated density. It should have a useful name. det - a dtsa detector Here is where we get the detector properties and calibration e0 - float The accelerating voltage in kV nTraj - integer The number of trajectories to run lt - integer (100) The live time (sec) pc - float (1.0) The probe current in nA ctd - Boolean (True) - is C coated Returns ------- sim - DTSA scriptable spectrum The simulated standard spectrum Example ------- import dtsa2.jmMC3 as jm3 det = findDetector("Oxford p4 05eV 2K") cu = material("Cu", density=8.92) a = jm3.simBulkStd(cu, det, 20.0, 100, 100, 1.0) a.display() """ dose = pc * lt # na-sec" xrts = [] trs = mc3.suggestTransitions(mat, e0) for tr in trs: xrts.append(tr) xtraParams={} xtraParams.update(mc3.configureXRayAccumulators(xrts,True, True, True)) sim = mc3.simulate(mat, det, e0, dose, withPoisson=True, nTraj=nTraj, sf=True, bf=True, xtraParams=xtraParams) sName = "%s-%g-kV" % (mat, e0) sim.rename(sName) sim.setAsStandard(mat) return sim
def simulate_spectrum(mat, e0, det, nTraj, dose, spcDir): """ simulate_spectrum(mat, e0, det, nTraj, dose, spcDir) """ xrts = [] trs = mc3.suggestTransitions(mat, e0) for tr in trs: xrts.append(tr) xtraParams={} xtraParams.update(mc3.configureXRayAccumulators(xrts,True, True, True)) # xtraParams.update(mc3.configureOutput(simDir)) spc = mc3.simulate(mat, det, e0, dose, True, nTraj, True, True, xtraParams) sName = "%s std-%g-kV" % (mat.getName(), e0) spc.rename(sName) spc.setAsStandard(mat) spc.display() # Save the spectra if NTraj > 500 if nTraj > 500: fi = spcDir + "/" fi += sName fi += "-%g-Traj.msa" % (nTraj) spc.save(fi) return (spc)
def fullSimBulkStd(mat, det, e0, nTraj, outPath, dim=5.0e-6, lt=100, pc=1.0, emiSize=512, ctd=False): """ fullSimBulkStd(mat, det, e0, nTraj, outPath, dim=5.0e-6, lt=100, pc=1.0, emiSize=512, ctd=False) Use mc3 simulation to simulate an uncoated standard specimen Parameters ---------- mat - a dtsa material. Note the material must have an associated density. It should have a useful name. det - a dtsa detector Here is where we get the detector properties and calibration e0 - float The accelerating voltage in kV nTraj - integer The number of trajectories to run outPath - string The path to the directory for output dim - float (5.0e-6) The size of the emission images lt - integer (100) The live time (sec) pc - float (1.0) The probe current in nA emiSize - int (default 512) The width and depth of the emission images. ctd - Boolean (False) - is C coated Returns ------- sim - DTSA scriptable spectrum The simulated standard spectrum Example ------- import dtsa2 as dtsa2 import dtsa2.mcSimulate3 as mc3 det = findDetector("Oxford p4 05eV 2K") cu = material("Cu", density=8.92) a = fullSimBulkStd(cu, det, 20.0, 100, 100, 1.0) a.display() """ dose = pc * lt # na-sec" xrts = [] trs = mc3.suggestTransitions(mat, e0) for tr in trs: xrts.append(tr) mc3.configureEmissionImages(xrts, dim, emiSize) xtraParams={} xtraParams.update(mc3.configureXRayAccumulators(xrts,True, True, True)) # note that the image size on the specimen is in meters... xtraParams.update(mc3.configureEmissionImages(xrts, 5.0e-6, 512)) xtraParams.update(mc3.configurePhiRhoZ(5.0e-6)) xtraParams.update(mc3.configureTrajectoryImage(5.0e-6, 512)) xtraParams.update(mc3.configureVRML(nElectrons=100)) xtraParams.update(mc3.configureOutput(outPath)) mc3.configureOutput(outPath) print("Output sent to %s") % (outPath) dose = lt*pc sim = mc3.simulate(mat, det, e0, dose, withPoisson=True, nTraj=nTraj, sf=True, bf=True, xtraParams=xtraParams) sName = "%s-%g-kV" % (mat, e0) sim.rename(sName) sim.setAsStandard(mat) sim.display() fi = outPath + "/" fi += sName fi += "-%g-Traj.msa" % (nTraj) print(fi) sim.save(fi) return(sim)
DataManager.clearSpectrumList() start = time.time() zno = material("ZnO", density=5.61) si = material("Si", density=2.33) xrts = [] trs = mc3.suggestTransitions(zno, e0) for tr in trs: xrts.append(tr) xtraParams={} xtraParams.update(mc3.configureXRayAccumulators(xrts,True, True, True)) # xtraParams.update(mc3.configureOutput(simDir)) spc_zno_std = mc3.simulate(zno, det, e0, dose, True, nTraj, True, True, xtraParams) sName = "ZnO std-%g-kV" % (e0) spc_zno_std.rename(sName) spc_zno_std.setAsStandard(zno) spc_zno_std.display() fi = resDir + "/" fi += sName fi += "-%g-Traj.msa" % (nTraj) spc_zno_std.save(fi) xrts = [] trs = mc3.suggestTransitions(si, e0) for tr in trs: xrts.append(tr) xtraParams={}
start = time.time() homDir = os.environ['HOME'] homDir = homDir.replace('\\', '/') wrkDir = homDir + "/Documents/git/dtsa2Scripts/utility" outDir = homDir + "/Documents/git/dtsa2Scripts/utility/output/" rptDir = wrkDir + '/test-mc3-simulate-Al Results/' DataManager.clearSpectrumList() e0 = 15.0 det = findDetector("Probe") mat = material("Al", 2.7) spc = mc3.simulate(mat, det, e0, 120.0, True, 10000, True, True, {}) sName = "Bulk Al" spc.rename(sName) spc.display() shutil.rmtree(rptDir) print "Done!" end = time.time() delta = (end - start) / 60 msg = "This script required %.3f min" % delta print msg if (delta > 60): delta = delta / 60 msg = "...or %.3f hr" % delta print msg
xrts.append(tr) # print(xrts) xtraParams = {} xtraParams.update(mc3.configurePhiRhoZ(przDepUm * 1.0e-6)) xtraParams.update(mc3.configureXRayAccumulators(xrts, True, True, True)) # note that the image size on the specimen is in meters... xtraParams.update(mc3.configureEmissionImages(xrts, imgSzUm * 1.0e-6, imgSize)) xtraParams.update(mc3.configureTrajectoryImage(imgSzUm * 1.0e-6, imgSize)) xtraParams.update(mc3.configureVRML(nElectrons=vmrlEl)) xtraParams.update(mc3.configureOutput(simDir)) print(xtraParams) sim = mc3.simulate(mix, det, e0, dose, True, nTraj, True, True, xtraParams) fmtS = "Admiralty-Brass-at-%g-kV" sName = fmtS % (e0) sim.rename(sName) sim.display() fi = simDir + "/" fi += sName fi += "-%g-Traj.msa" % (nTraj) sim.save(fi) # clean up cruft shutil.rmtree(rptDir) print "Done!" end = time.time() delta = (end - start) / 60
gitHom = os.environ['GIT_HOME'] relPrj = "/dtsa2Scripts/mc3Scripts" prjDir = gitHom + relPrj datDir = prjDir + "/dat" simDir = datDir + "/sim" jmg.ensureDir(datDir) jmg.ensureDir(simDir) os.chdir(prjDir) pyrDir = prjDir + "/mc3Bulk Results" xrts = [transition("Fe K-L3"), transition("Fe K-M3"), transition("Fe L3-M5"), transition("O K-L3")] xtraParams={} xtraParams.update(mc3.configureXRayAccumulators(xrts, charAccum=True, charFluorAccum=True, bremFluorAccum=True)) # note that the image size on the specimen is in meters... xtraParams.update(mc3.configureEmissionImages(xrts, imgSzUm*1.0e-6, imgSizePx)) xtraParams.update(mc3.configurePhiRhoZ(imgSzUm*1.0e-6)) xtraParams.update(mc3.configureTrajectoryImage(imgSzUm*1.0e-6, imgSizePx)) xtraParams.update(mc3.configureVRML(nElectrons = vmrlEl)) xtraParams.update(mc3.configureOutput(simDir)) spc = mc3.simulate(material("Fe2O3",5.0), det, e0, dose = pc*lt, nTraj=nTraj, sf=True, bf=True, xtraParams = xtraParams) display(spc) shutil.rmtree(pyrDir) print "Done!"
# mc3SimulateBaTiO3.py # # Simulate a bulk barium titanante spectrum. This is as simple as it # gets. # # Date Ver Who Notes # 2015-05-21 0.90 JRM Initial example. Verified with Iona v.2015-05-01 # import dtsa2.mcSimulate3 as mc3 det = findDetector("Probe") # DTSA-II default detector, use yours e0 = 15 # keV nTraj = 1000 # electrons dose = 150 # nA*sec withPoisson = True # Add Poisson noise sf = True # Secondary Florescence bf = True # Brehmstrahlung Florescence mat = epq.Material( epq.Composition([epq.Element.Ba, epq.Element.Ti, epq.Element.O], [0.2058, 0.2053, 0.5889]), epq.ToSI.gPerCC(6.02)) mat.setName("BaTiO3") spc = mc3.simulate(mat, det, e0, dose, withPoisson, nTraj) # sf=False, bf=False, xtraParams={}) display(spc)
def uncoatedSimBulkStd(mat, det, e0, nTraj, outPath, dim=5.0e-6, lt=100, pc=1.0, emiSize=512): """ uncoatedSimBulkStd(mat, det, e0, nTraj, outPath, dim=5.0e-6, lt=100, pc=1.0, emiSize=512) Use mc3 simulation to simulate an uncoated standard specimen Parameters ---------- mat - a dtsa material. Note the material must have an associated density. It should have a useful name. det - a dtsa detector Here is where we get the detector properties and calibration e0 - float The accelerating voltage in kV nTraj - integer The number of trajectories to run outPath - string The path to the directory for output dim - float (5.0e-6) The size of the emission images in um lt - integer (100) The live time (sec) pc - float (1.0) The probe current in nA emiSize - int (default 512) The width and depth of the emission images. Returns ------- sim - DTSA scriptable spectrum The simulated standard spectrum Example ------- import dtsa2 as dtsa2 import dtsa2.jmMC3 as jm3 outPath = "path/to/yours/spc" cu = material("Cu", density=8.92) det = findDetector("Si(Li)") a = jm3.uncoatedSimBulkStd(cu, det, 15.0, 100, outPath, dim=5.0e-6, lt=100, pc=1.0, emiSize=512) a.display() """ start = time.time() strMat = mat.getName() dose = pc * lt # na-sec" # specify the transitions to generate xrts = [] trs = mc3.suggestTransitions(mat, e0) for tr in trs: xrts.append(tr) # At 20 kV the images are best at 2.0e-6 xtraParams = {} xtraParams.update(mc3.configureXRayAccumulators(xrts, True, True, True)) # note that the image size on the specimen is in meters... xtraParams.update(mc3.configureEmissionImages(xrts, dim, emiSize)) xtraParams.update(mc3.configurePhiRhoZ(dim)) xtraParams.update(mc3.configureTrajectoryImage(dim, emiSize)) xtraParams.update(mc3.configureVRML(nElectrons=100)) xtraParams.update(mc3.configureOutput(outPath)) print("Output sent to %s") % (outPath) sim = mc3.simulate(mat, det, e0, lt * pc, True, nTraj, True, True, xtraParams) sName = "%s-%g-kV" % (strMat, e0) sim.rename(sName) sim.setAsStandard(mat) sim.display() end = time.time() delta = end - start msg = "This simulation required %.f sec" % (delta) print(msg) msg = " %.f min" % (delta / 60.0) print(msg) msg = " %.f hr" % (delta / 360.0) print("") return (sim)
dose = pc * lt # nA sec DataManager.clearSpectrumList() b = material("B", density=2.37) bn = material("BN", density=2.1) aln = material("AlN", density=3.26) # Sim B xrts = [transition("B K-L2"), transition("B K-L3")] xtraParams={} xtraParams.update(mc3.configureXRayAccumulators(xrts, charAccum=True, charFluorAccum=True, bremFluorAccum=True)) # note that the image size on the specimen is in meters... xtraParams.update(mc3.configureEmissionImages(xrts, imgSzUm*1.0e-6, imgSizePx)) xtraParams.update(mc3.configurePhiRhoZ(imgSzUm*1.0e-6)) xtraParams.update(mc3.configureTrajectoryImage(imgSzUm*1.0e-6, imgSizePx)) xtraParams.update(mc3.configureVRML(nElectrons = vmrlEl)) xtraParams.update(mc3.configureOutput(spcDir)) b_spc = mc3.simulate(b, det, e0, dose = pc*lt, nTraj=nTraj, sf=True, bf=True, xtraParams = xtraParams) b_spc.rename("B") # b_spec.setAsStandard(b) display(b_spc) fi = spcDir + "/B-%g-kV-%g-Traj.msa" % (e0, nTraj) b_spc.save(fi) # Sim BN xrts = [transition("B K-L2"), transition("B K-L3"), transition("N K-L2"), transition("N K-L3")] xtraParams={} xtraParams.update(mc3.configureXRayAccumulators(xrts, charAccum=True, charFluorAccum=True, bremFluorAccum=True)) # # note that the image size on the specimen is in meters... xtraParams.update(mc3.configureEmissionImages(xrts, imgSzUm*1.0e-6, imgSizePx)) xtraParams.update(mc3.configurePhiRhoZ(imgSzUm*1.0e-6)) xtraParams.update(mc3.configureTrajectoryImage(imgSzUm*1.0e-6, imgSizePx))
xp.update( mc3.configureXRayAccumulators(xrts, charAccum=True, charFluorAccum=True, bremFluorAccum=True)) # xp.update(mc3.configureEmissionImages(xrts,imgSzUm*1.0e-6, imgSzPx)) # xp.update(mc3.configurePhiRhoZ(imgSzUm*1.0e-6)) # xp.update(mc3.configureTrajectoryImage(imgSzUm*1.0e-6, imgSzPx)) # xp.update(mc3.configureVRML(nElectrons = 40)) xp.update(mc3.configureOutput(outDir)) xp.update(mc3.configureGun(beamSzNm * 1.0e-9)) ts = time.time() # first sim bare Si spc = mc3.simulate(si, det, e0, dose, True, nTraj, True, True, xp) spc = epq.SpectrumUtils.addNoiseToSpectrum(spc, 1.0) spc = wrap(spc) sName = "Si-%g-kV-%d-traj" % (e0, nTraj) spc.rename(sName) res = anaConSi(spc, det, digits=2, display=False) cI = res["C"] siI = res["Si"] lT.append(0.0) lPICmu.append(cI[0]) lPICuc.append(cI[1]) lPISimu.append(siI[0]) lPISiuc.append(siI[1])
wrkDir = homDir + "/Documents/git/dtsa2Scripts/utility" outDir = homDir + "/Documents/git/dtsa2Scripts/utility/output/" rptDir = wrkDir + '/test-mc3-simulate-Fe2O3/' # Note: On Win10 MSA files are in: # C:\Users\johnr\Documents\git\dtsa2scripts\utility\output bSaveSpc = True DataManager.clearSpectrumList() e0 = 20.0 # or 5.0 nTraj = 10000 det = findDetector("Oxford p4 05eV 4K") mat = material("Fe2O3", 5.0) spc = mc3.simulate(mat, det, e0, 120.0, True, nTraj, True, True, {}) sName = "Bulk Fe2O3" spc.rename(sName) spc.display() fi = outDir + "/Fe2O3-%g-kV-%g-Traj.msa" % (e0, nTraj) spc.save(fi) print "Done!" end = time.time() delta = (end - start) / 60 msg = "This script required %.3f min" % delta print msg if (delta > 60): delta = delta / 60 msg = "...or %.3f hr" % delta
transition("O K-L3") ] xtraParams = {} xtraParams.update( mc3.configureXRayAccumulators(xrts, charAccum=True, charFluorAccum=True, bremFluorAccum=True)) # note that the image size on the specimen is in meters... xtraParams.update( mc3.configureEmissionImages(xrts, imgSzUm * 1.0e-6, imgSizePx)) xtraParams.update(mc3.configurePhiRhoZ(imgSzUm * 1.0e-6)) xtraParams.update(mc3.configureTrajectoryImage(imgSzUm * 1.0e-6, imgSizePx)) xtraParams.update(mc3.configureVRML(nElectrons=vmrlEl)) xtraParams.update(mc3.configureOutput(simDir)) spc = mc3.simulate(material("Fe2O3", 5.0), det, e0, dose=pc * lt, nTraj=nTraj, sf=True, bf=True, xtraParams=xtraParams) display(spc) shutil.rmtree(pyrDir) print "Done!"
b = material("B", density=2.37) # bn = material("BN", density=2.1) # aln = material("AlN", density=3.26) # Sim B xrts = [transition("B K-L2"), transition("B K-L3")] xtraParams = {} xtraParams.update( mc3.configureXRayAccumulators(xrts, charAccum=True, charFluorAccum=True, bremFluorAccum=True)) # note that the image size on the specimen is in meters... xtraParams.update( mc3.configureEmissionImages(xrts, imgSzUm * 1.0e-6, imgSizePx)) xtraParams.update(mc3.configurePhiRhoZ(imgSzUm * 1.0e-6)) xtraParams.update(mc3.configureTrajectoryImage(imgSzUm * 1.0e-6, imgSizePx)) xtraParams.update(mc3.configureVRML(nElectrons=vmrlEl)) xtraParams.update(mc3.configureOutput(spcDir)) b_spc = mc3.simulate(b, det, e0, dose, nTraj, True, True, xtraParams) b_spc.rename("B") b_spc.setAsStandard(b) display(b_spc) fi = spcDir + "/B-%g-kV-%g-Traj.msa" % (e0, nTraj) b_spc.save(fi) end = time.time() delta = end - start print(delta)
DataManager.clearSpectrumList() start = time.time() zno = material("ZnO", density=5.61) si = material("Si", density=2.33) xrts = [] trs = mc3.suggestTransitions(zno, e0) for tr in trs: xrts.append(tr) xtraParams = {} xtraParams.update(mc3.configureXRayAccumulators(xrts, True, True, True)) # xtraParams.update(mc3.configureOutput(simDir)) spc_zno_std = mc3.simulate(zno, det, e0, dose, True, nTraj, True, True, xtraParams) sName = "ZnO std-%g-kV" % (e0) spc_zno_std.rename(sName) spc_zno_std.setAsStandard(zno) spc_zno_std.display() fi = resDir + "/" fi += sName fi += "-%g-Traj.msa" % (nTraj) spc_zno_std.save(fi) xrts = [] trs = mc3.suggestTransitions(si, e0) for tr in trs: xrts.append(tr) xtraParams = {}
xp.update(mc3.configureXRayAccumulators(xrts, charAccum=True, charFluorAccum=True, bremFluorAccum=True)) # xp.update(mc3.configureEmissionImages(xrts,imgSzUm*1.0e-6, imgSzPx)) # xp.update(mc3.configurePhiRhoZ(imgSzUm*1.0e-6)) # xp.update(mc3.configureTrajectoryImage(imgSzUm*1.0e-6, imgSzPx)) # xp.update(mc3.configureVRML(nElectrons = 40)) xp.update(mc3.configureOutput(outDir)) xp.update(mc3.configureGun(beamSzNm*1.0e-9)) ts = time.time() # first sim bare Si spc = mc3.simulate(si, det, e0, dose, True, nTraj, True, True, xp) spc = epq.SpectrumUtils.addNoiseToSpectrum(spc, 1.0) spc = wrap(spc) sName = "Si-%g-kV-%d-traj" % ( e0, nTraj) spc.rename(sName) res = anaConSi(spc, det, digits=2, display=False) cI = res["C"] siI = res["Si"] lT.append(0.0) lPICmu.append(cI[0]) lPICuc.append(cI[1]) lPISimu.append(siI[0]) lPISiuc.append(siI[1])
start = time.time() homDir = os.environ['HOME'] homDir = homDir.replace('\\','/') wrkDir = homDir + "/Documents/git/dtsa2Scripts/utility" outDir = homDir + "/Documents/git/dtsa2Scripts/utility/output/" rptDir = wrkDir + '/test-mc3-simulate-Al Results/' DataManager.clearSpectrumList() e0 = 15.0 det = findDetector("Probe") mat = material("Al", 2.7) spc = mc3.simulate(mat, det, e0, 120.0, True, 10000, True, True, {}) sName = "Bulk Al" spc.rename(sName) spc.display() shutil.rmtree(rptDir) print "Done!" end = time.time() delta = (end-start)/60 msg = "This script required %.3f min" % delta print msg if(delta > 60): delta = delta/60 msg = "...or %.3f hr" % delta print msg
# mc3SimulateBaTiO3.py # # Simulate a bulk barium titanante spectrum. This is as simple as it # gets. # # Date Ver Who Notes # 2015-05-21 0.90 JRM Initial example. Verified with Iona v.2015-05-01 # import dtsa2.mcSimulate3 as mc3 det = findDetector("Probe") # DTSA-II default detector, use yours e0 = 15 # keV nTraj = 1000 # electrons dose = 150 # nA*sec withPoisson = True # Add Poisson noise sf = True # Secondary Florescence bf = True # Brehmstrahlung Florescence mat = epq.Material(epq.Composition([epq.Element.Ba, epq.Element.Ti, epq.Element.O], [0.2058, 0.2053, 0.5889] ), epq.ToSI.gPerCC(6.02)) mat.setName("BaTiO3") spc = mc3.simulate(mat, det, e0, dose, withPoisson, nTraj) # sf=False, bf=False, xtraParams={}) display(spc)
# print(xrts) xtraParams={} xtraParams.update(mc3.configurePhiRhoZ(przDepUm*1.0e-6)) xtraParams.update(mc3.configureXRayAccumulators(xrts,True, True, True)) # note that the image size on the specimen is in meters... xtraParams.update(mc3.configureEmissionImages(xrts, imgSzUm*1.0e-6, imgSize)) xtraParams.update(mc3.configureTrajectoryImage(imgSzUm*1.0e-6, imgSize)) xtraParams.update(mc3.configureVRML(nElectrons = vmrlEl)) xtraParams.update(mc3.configureOutput(simDir)) print(xtraParams) sim = mc3.simulate(mix, det, e0, dose, True, nTraj, True, True, xtraParams) fmtS = "Admiralty-Brass-at-%g-kV" sName = fmtS % (e0) sim.rename(sName) sim.display() fi = simDir + "/" fi += sName fi += "-%g-Traj.msa" % (nTraj) sim.save(fi) # clean up cruft shutil.rmtree(rptDir) print "Done!"
lDoseUnk = [50, 100, 200, 500, 1000, 2500, 5000] xrts = [] trs = mc3.suggestTransitions(sio2, e0) for tr in trs: xrts.append(tr) xtraParams = {} xtraParams.update(mc3.configureXRayAccumulators(xrts, True, True, True)) # xtraParams.update(mc3.configureOutput(simDir)) print(xtraParams) spc_sio2_std = mc3.simulate(sio2, det, e0, doseStd, True, nTrajStd, True, True, xtraParams) sName = "SiO2 std" spc_sio2_std.rename(sName) spc_sio2_std.setAsStandard(sio2) spc_sio2_std.display() stds = {element("O"): spc_sio2_std, element("Si"): spc_sio2_std} # oStd = {"El":element("O"), "Spc":spc_sio2_std} # # stds = [oStd, siStd] for doseUnk in lDoseUnk: spc_sio = mc3.simulate(sio, det, e0, doseUnk, True, nTrajStd, True, True, xtraParams) sName = "SiO Unk %g nA-sec" % (doseUnk)
SRM482 = ( SRM482A, SRM482B, SRM482C, SRM482D, SRM482E, SRM482F, ) range = electronRange(SRM482A,e0,density=None) xtraP = {} xtraP.update(mc3.configureOutput(DefaultOutput)) xtraP.update(mc3.configurePhiRhoZ(1.5*range)) xtraP.update(mc3.configureEmissionImages(mc3.suggestTransitions(SRM482C,e0), 1.5*range, size = 512)) xtraP.update(mc3.configureTrajectoryImage(1.5*range, size = 512)) specs = {} for mat in SRM482: if terminated: break specs[mat] = mc3.simulate(mat, det,e0=e0, nTraj=nE, dose=500.0, sf=True, bf=True,xtraParams=xtraP) specs[mat].save("%s/%s.msa" % ( DefaultOutput, specs[mat] )) specs[mat].display() unks = ( specs[SRM482B], specs[SRM482C], specs[SRM482D], specs[SRM482E] ) stds = { "Au" : specs[SRM482A], "Cu" : specs[SRM482F] } res = {} for unk in unks: res[unk]=quantify(unk, stds, preferred = ( "Au L3-M5", "Cu K-L3" )) tabulate(unks) # Finally output analytical model phi(rho z) curves for comparison
trs = [ epq.XRayTransitionSet(epq.Element.C, epq.XRayTransitionSet.K_ALPHA), epq.XRayTransitionSet(epq.Element.O, epq.XRayTransitionSet.K_ALPHA), epq.XRayTransitionSet(epq.Element.Si, epq.XRayTransitionSet.K_ALPHA) ] # start with bulk standards # # C siSpc = mc3.simulate(si, det, e0=e0, dose=dose, withPoisson=True, nTraj=nTraj, sf=charF, bf=bremF, xtraParams={}) sp = siSpc.getProperties() sp.setTextProperty(epq.SpectrumProperties.SpectrumDisplayName, "Si-std") sp.setNumericProperty(epq.SpectrumProperties.LiveTime, lt) sp.setNumericProperty(epq.SpectrumProperties.FaradayBegin, dose) sp.setNumericProperty(epq.SpectrumProperties.FaradayEnd, dose) sp.setNumericProperty(epq.SpectrumProperties.BeamEnergy, e0) sp.setCompositionProperty(epq.SpectrumProperties.StandardComposition, epq.Composition(epq.Element.Si)) display(siSpc) siStd = {"El": element("Si"), "Spc": siSpc}
e0 = 7.0 # keV dose = pc * lt # nA sec # start clean DataManager.clearSpectrumList() # create the materials c = material("C", density=2.25) cu = material("Cu", density=8.96) trs = [epq.XRayTransitionSet(epq.Element.C, epq.XRayTransitionSet.K_FAMILY), epq.XRayTransitionSet(epq.Element.Cu, epq.XRayTransitionSet.L_FAMILY)] # start with bulk standards cSpc = mc3.simulate(c, det, e0=e0, dose=dose, withPoisson=True, nTraj=nTraj, sf=charF, bf=bremF, xtraParams={}) sp=cSpc.getProperties() sp.setTextProperty(epq.SpectrumProperties.SpectrumDisplayName,"C-std") sp.setNumericProperty(epq.SpectrumProperties.LiveTime, lt) sp.setNumericProperty(epq.SpectrumProperties.FaradayBegin, dose) sp.setNumericProperty(epq.SpectrumProperties.FaradayEnd, dose) sp.setNumericProperty(epq.SpectrumProperties.BeamEnergy, e0) sp.setCompositionProperty(epq.SpectrumProperties.StandardComposition, epq.Composition(epq.Element.C)) # display(cSpc) cStd = {"El":element("C"), "Spc":cSpc} cuSpc = mc3.simulate(cu, det, e0=e0, dose=dose, withPoisson=True, nTraj=nTraj, sf=charF, bf=bremF, xtraParams={}) sp=cuSpc.getProperties() sp.setTextProperty(epq.SpectrumProperties.SpectrumDisplayName,"Cu-std") sp.setNumericProperty(epq.SpectrumProperties.LiveTime, lt) sp.setNumericProperty(epq.SpectrumProperties.FaradayBegin, dose)
ag = material("Ag", density=10.5) trs = [ epq.XRayTransitionSet(epq.Element.Au, epq.XRayTransitionSet.L_ALPHA), epq.XRayTransitionSet(epq.Element.Cu, epq.XRayTransitionSet.K_ALPHA) ] # start with bulk standards # # Au auSpc = mc3.simulate(au, det, e0=e0, dose=dose, withPoisson=True, nTraj=nTraj, sf=charF, bf=bremF, xtraParams={}) sp = auSpc.getProperties() sp.setTextProperty(epq.SpectrumProperties.SpectrumDisplayName, "Au-std") sp.setNumericProperty(epq.SpectrumProperties.LiveTime, lt) sp.setNumericProperty(epq.SpectrumProperties.FaradayBegin, dose) sp.setNumericProperty(epq.SpectrumProperties.FaradayEnd, dose) sp.setNumericProperty(epq.SpectrumProperties.BeamEnergy, e0) sp.setCompositionProperty(epq.SpectrumProperties.StandardComposition, epq.Composition(epq.Element.Au)) display(auSpc) auStd = {"El": element("Au"), "Spc": auSpc}