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 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
# wd = homDir + relPrj + "/py/dtsa" wd = homDir + relPrj + "/py/dtsa" os.chdir(wd) pyrDir = wd + "/simPdLineInCuMatrix Results" #start clean DataManager.clearSpectrumList() # xrts=mc3.suggestTransitions("PdCu") xrts = [epq.XRayTransition(epq.Element.Cu, epq.XRayTransition.LA1), epq.XRayTransition(epq.Element.Pd, epq.XRayTransition.LA1)] xtraParams={} xtraParams.update(mc3.configureXRayAccumulators(xrts, charAccum=charF, charFluorAccum=charF, bremFluorAccum=bremF)) xtraParams.update(mc3.configureOutput(simDir)) xtraParams.update(mc3.configureBeam(0.5*nmLinWid*1.0e-9, 0, -0.099, 1.0)) # xtraParams.update(mc3.configureGun(gun)) # mc3.useHeatMapPalette() print(xtraParams) # spc = jm3.lineInMatrix(lin, blk, nmLinWid, umBlock, det, e0, withPoisson=True, nTraj=nTraj, dose=dose, sf=charF, bf=bremF, xtraParams=xtraParams) # spc = jm3.lineInMatrix(lin, blk, nmLinWid, umBlock, det, e0, poisN, nTraj, dose, charF, bremF, xtraParams) #e0=20.0, dose=defaultDose, withPoisson=poisN, nTraj=defaultNumTraj, sf=defaultCharFluor, bf=defaultBremFluor, xtraParams=defaultXtraParams): # spc = mc3.simulate(blk, det, e0, dose, poisN, nTraj, charF, bremF, xtraParams) # # Embedded Rectangle # # This works as expected. # spc = mc3.embeddedRectangle(lin, [umLine*sc, umBlock*sc, umBlock*sc], blk, 0, det, e0, withPoisson=poisN, nTraj=nTraj, dose=dose, sf=charF, bf=bremF, xtraParams=xtraParams)
rhoAu = 19.3 rhoCu = 8.95 SRM482A = material("Au",rhoAu) SRM482B = epq.Material(epq.Composition(map(element,["Au","Cu"],),[0.801,0.198],"Au80Cu20"),epq.ToSI.gPerCC(0.8*rhoAu+0.2*rhoCu)) SRM482C = epq.Material(epq.Composition(map(element,["Au","Cu"],),[0.603,0.396],"Au60Cu40"),epq.ToSI.gPerCC(0.6*rhoAu+0.4*rhoCu)) SRM482D = epq.Material(epq.Composition(map(element,["Au","Cu"],),[0.401,0.599],"Au40Cu60"),epq.ToSI.gPerCC(0.4*rhoAu+0.6*rhoCu)) SRM482E = epq.Material(epq.Composition(map(element,["Au","Cu"],),[0.201,0.798],"Au20Cu80"),epq.ToSI.gPerCC(0.2*rhoAu+0.8*rhoCu)) SRM482F = material("Cu",rhoCu) 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] }
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)
def simLineInMatrixLimScan(lin, linMat, blk, blkMat, nmLinWid, umBlock, nmScan, nPts, trs, outDir, hdr, det, e0, lt, pc, withPoisson=True, nTraj=100, sf=True, bf=True, iDigits=5, bVerbose=False, xtraParams={}): """simLineInMatrixLimScan(lin, linMat, blk, blkMat, nmLinWid, umBlock, nmScan, nPts, trs, outDir, hdr, det, e0, lt, pc, withPoisson=True, nTraj=nTraj, sf=True, bf=True, iDigits=5, bVerbose=False, xtraParams={}) Simulate a line of width `nmLinWid' nm at the center of a block of `umBlock' microns. The line is of material `lin' with a name `linMat'. The block is of material `blk' with a name `blkMat'. We step a total distance of nmScan across the center of the line. We analyze an list `trs' of transitions, writing the K-ratios to a .csv file with a header `hdr'. We use the detector `det', voltage `e0' (kV) and live time `lt' sec and probe current `pc' nA. This will compute the standard spectra, compute the spectra the scanned region. It will then compute the K-ratios for each spectrum and write them to a file `name' in outDir with a header `hdr' that matches the transition order. """ # order is order of trs.. sc = 1.0e-6 # scale from microns to meters for positions dose = lt * pc lX = [] # an array for postions lKlin = [] # an array for the K-ratio of the line lKblk = [ ] # an array for the K-ratio of the block. Title correspond to hdr string umLine = nmLinWid * 1.0e-3 # start clean dt2.DataManager.clearSpectrumList() # create the standards linStd = simulateBulkStandard(lin, linMat, det, e0, lt, pc, withPoisson=withPoisson, nTraj=nTraj, sf=sf, bf=bf, xtraParams={}) dt2.display(linStd) blkStd = simulateBulkStandard(blk, blkMat, det, e0, lt, pc, withPoisson=withPoisson, nTraj=nTraj, sf=sf, bf=sf, xtraParams={}) dt2.display(blkStd) lStd = {"El": dt2.element(linMat), "Spc": linStd} bStd = {"El": dt2.element(blkMat), "Spc": blkStd} stds = [lStd, bStd] # note: put the transitions in this order iCount = 0 for x in range(-nPts / 2, (nPts / 2) + 1, 1): xPosNm = x * nmScan / nPts lX.append(round(xPosNm, iDigits)) xtraParams = {} xtraParams.update( mc3.configureXRayAccumulators(trs, charAccum=sf, charFluorAccum=sf, bremFluorAccum=bf)) xtraParams.update(mc3.configureOutput(outDir)) xtraParams.update(mc3.configureBeam(xPosNm * 1.0e-09, 0, -0.099, 1.0)) spec = mc3.embeddedRectangle(lin, [umLine * sc, umBlock * sc, umBlock * sc], blk, 0, det, e0, withPoisson=withPoisson, nTraj=nTraj, dose=dose, sf=sf, bf=bf, xtraParams=xtraParams) props = spec.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) spcName = "x = %.3f um" % x epq.SpectrumUtils.rename(spec, spcName) spec = epq.SpectrumUtils.addNoiseToSpectrum(spec, 1.0) # display(spec) a = jmg.compKRs(spec, stds, trs, det, e0) iCount += 1 print(iCount, xPosNm) lKlin.append(round(a[0], iDigits)) lKblk.append(round(a[1], iDigits)) basFile = "%gnm-%s-in-%gum-%s-%gkV-%g-Traj.csv" % ( nmLinWid, linMat, umBlock, blkMat, e0, nTraj) strOutFile = outDir + "/" + basFile f = open(strOutFile, 'w') strLine = hdr + '\n' f.write(strLine) for i in range(iCount): strLine = "%.3f" % lX[i] + "," strLine = strLine + "%.5f" % lKlin[i] + "," strLine = strLine + "%.5f" % lKblk[i] + "\n" f.write(strLine) f.close()
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)
trs = [epq.XRayTransition(epq.Element.Ag, epq.XRayTransition.LB1), epq.XRayTransition(epq.Element.Fe, epq.XRayTransition.KB1)] print(trs) # create samples consisting of silver film on steel (316H) substrate film = {} film[1] = [ag , 0.000000020],[s316H, 0.000010] # 0.000005000 = 5 um 0.000010 = 10um Configuring multi-layers composition and thickness film[2] = [ag , 0.000000015],[s316H, 0.000010] # 0.000000050 = 0.05 um film[3] = [ag , 0.000000010],[s316H, 0.000010] xtraP = {} xtraP = {"Characteristic Accumulator":True, "Char Fluor Accumulator":True, "Brem Fluor Accumulator":True} # outpathoutPath = "/Users/jrminter/Documents/git/dtsa2Scripts/ben-buse/out/" xtraP.update(mc3.configureOutput(outPath)) xtraP.update(mc3.configurePhiRhoZ(1.5*range)) xtraP.update(mc3.configureEmissionImages(trs, 1.5*range, size = 512)) xtraP.update(mc3.configureTrajectoryImage(1.5*range, size = 512)) resF = {} for fil in film: extension = str(film[fil][0]) extension = extension.replace("[","") extension = extension.replace("]","") extension = extension.replace(",","") # pathloc = 'O:\Documents\PFE_Data\Users\Charles_Younes\\041115_CarbonInSteel\\dtsa2repeat7_' + extension # Change to output folder
siTS = epq.XRayTransitionSet(epq.Element.Si, epq.XRayTransitionSet.K_FAMILY) siTrs = siTS.getTransitions() for tr in siTrs: xrts.append(tr) 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"]
def simLineInMatrixLimScan(lin, linMat, blk, blkMat, nmLinWid, umBlock,nmScan, nPts, trs, outDir, hdr, det, e0, lt, pc, withPoisson=True, nTraj=100, sf=True, bf=True, iDigits=5, bVerbose=False, xtraParams={}): """simLineInMatrixLimScan(lin, linMat, blk, blkMat, nmLinWid, umBlock, nmScan, nPts, trs, outDir, hdr, det, e0, lt, pc, withPoisson=True, nTraj=nTraj, sf=True, bf=True, iDigits=5, bVerbose=False, xtraParams={}) Simulate a line of width `nmLinWid' nm at the center of a block of `umBlock' microns. The line is of material `lin' with a name `linMat'. The block is of material `blk' with a name `blkMat'. We step a total distance of nmScan across the center of the line. We analyze an list `trs' of transitions, writing the K-ratios to a .csv file with a header `hdr'. We use the detector `det', voltage `e0' (kV) and live time `lt' sec and probe current `pc' nA. This will compute the standard spectra, compute the spectra the scanned region. It will then compute the K-ratios for each spectrum and write them to a file `name' in outDir with a header `hdr' that matches the transition order. """ # order is order of trs.. sc = 1.0e-6 # scale from microns to meters for positions dose = lt*pc lX = [] # an array for postions lKlin = [] # an array for the K-ratio of the line lKblk = [] # an array for the K-ratio of the block. Title correspond to hdr string umLine = nmLinWid * 1.0e-3 # start clean dt2.DataManager.clearSpectrumList() # create the standards linStd = simulateBulkStandard(lin, linMat, det, e0, lt, pc, withPoisson=withPoisson, nTraj=nTraj, sf=sf, bf=bf, xtraParams={}) dt2.display(linStd) blkStd = simulateBulkStandard(blk, blkMat, det, e0, lt, pc, withPoisson=withPoisson, nTraj=nTraj, sf=sf, bf=sf, xtraParams={}) dt2.display(blkStd) lStd = {"El":dt2.element(linMat), "Spc":linStd} bStd = {"El":dt2.element(blkMat), "Spc":blkStd} stds = [lStd, bStd] # note: put the transitions in this order iCount = 0 for x in range(-nPts/2, (nPts/2)+1, 1): xPosNm = x * nmScan / nPts lX.append(round(xPosNm, iDigits)) xtraParams={} xtraParams.update(mc3.configureXRayAccumulators(trs, charAccum=sf, charFluorAccum=sf, bremFluorAccum=bf)) xtraParams.update(mc3.configureOutput(outDir)) xtraParams.update(mc3.configureBeam(xPosNm*1.0e-09, 0, -0.099, 1.0)) spec = mc3.embeddedRectangle(lin, [umLine*sc, umBlock*sc, umBlock*sc], blk, 0, det, e0, withPoisson=withPoisson, nTraj=nTraj, dose=dose, sf=sf, bf=bf, xtraParams=xtraParams) props = spec.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) spcName = "x = %.3f um" % x epq.SpectrumUtils.rename(spec, spcName) spec = epq.SpectrumUtils.addNoiseToSpectrum(spec, 1.0) # display(spec) a = jmg.compKRs(spec, stds, trs, det, e0) iCount += 1 print(iCount, xPosNm) lKlin.append(round(a[0], iDigits)) lKblk.append(round(a[1], iDigits)) basFile ="%gnm-%s-in-%gum-%s-%gkV-%g-Traj.csv" % (nmLinWid, linMat, umBlock, blkMat, e0, nTraj) strOutFile = outDir + "/" + basFile f=open(strOutFile, 'w') strLine = hdr + '\n' f.write(strLine) for i in range(iCount): strLine = "%.3f" % lX[i] + "," strLine = strLine + "%.5f" % lKlin[i] + "," strLine = strLine + "%.5f" % lKblk[i] + "\n" f.write(strLine) f.close()
# get and add the Cu-L family siTS = epq.XRayTransitionSet(epq.Element.Si, epq.XRayTransitionSet.K_FAMILY) siTrs = siTS.getTransitions() for tr in siTrs: xrts.append(tr) 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"]
trs = mc3.suggestTransitions(eagleXG, e0) for tr in trs: xrts.append(tr) trs = mc3.suggestTransitions(c, e0) for tr in trs: xrts.append(tr) 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(outDir)) print(xtraParams) fmtS = "%g-nm-C-on-EagleXG-at-%g-kV" print("Starting simulation") multiLaySim = mc3.multiFilm(layers, det, e0, True, nTraj, dose, True, True, xtraParams) sName = fmtS % (tCNm, e0) multiLaySim.rename(sName) multiLaySim.setAsStandard(eagleXG) multiLaySim.display() fi = outDir + "/" fi += sName
def fullSimBulkStd(mat, ctg, ctgThickNm, det, e0, nTraj, outPath, dim=5.0e-6, lt=100, pc=1.0, emiSize=512, ctd=False): """ fullSimBulkStd(mat, ctg, ctgThickNm, 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. ctg - a dtsa2 material for the coating 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 4K") cu = material("Cu", density=8.92) outPath = "C:/Users/johnr/Documents/git/dtsa2Scripts/ben-buse/out" a = fullSimBulkStd(cu, det, 15.0, 100, outPath, dim=5.0e-6, lt=100, pc=1.0, emiSize=512, ctd=False) a.display() """ strCtg = ctg.getName() 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) trs = mc3.suggestTransitions(ctg, 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, 2.0e-6, 512)) xtraParams.update(mc3.configurePhiRhoZ(2.0e-6)) xtraParams.update(mc3.configureTrajectoryImage(2.0e-6, 512)) xtraParams.update(mc3.configureVRML(nElectrons=100)) xtraParams.update(mc3.configureOutput(outPath)) print("Output sent to %s") % (outPath) layers = [ [ctg, ctgThickNm*1.0e-9], [mat, 1.0e-3]] sim = mc3.multiFilm(layers, det, e0, withPoisson=True, nTraj=nTraj, dose=dose, sf=True, bf=True, xtraParams=xtraParams) sName = "%g-nm-%s-on-%s" % (tNmC, strCtg, strMat) sim.rename(sName) sim.setAsStandard(mat) sim.display() return(sim)