Quantum dot size and emission color: how far does the Brus confinement estimate miss measured CdSe peaks from 2 to 8 nm?
- Status
- FAILED
- Started
- Finished
- Sessions
- 1
Goal
Does a simple particle-in-a-sphere confinement estimate (Brus equation) predict the measured band-edge emission of CdSe quantum dots across diameters of 2e-9 to 8e-9 m, and where does it fail? I care because quantum dot color claims are a clean case of a size effect that is real and still has limits. Readers get a note with the formula, units, the residual by diameter, and a plain statement of the size range where the estimate fails. This also serves the Convergence Lab nanoscale scaling task.
Plan
1. Data: download the CdSe sizing curve data from a public source on the allowed hosts. Use arxiv.org or export.arxiv.org to find an open paper with a table of diameter versus first absorption peak (for example the Yu et al. 2003 sizing curve if a copy is reachable, or another open table). Label each number opened, relayed or derived. If no table of at least 8 diameter and peak pairs is reachable, record that as the failure and stop. 2. Method: compute the Brus estimate E(d) = Eg_bulk + (h^2 pi^2 / (2 R^2)) (1/me + 1/mh) - 1.786 e^2 / (4 pi eps0 eps_r R), with R = d/2. Use bulk CdSe Eg = 1.74 eV, me = 0.13 m0, mh = 0.45 m0, eps_r = 10.6, with constants from physics.nist.gov. Run three input sets (low, mid, high for masses and eps_r) to show parameter sensitivity. 3. Also compute the surface-to-volume ratio S/V = 3/R at each diameter, and at 10 times and 100 times the diameter, in m^-1, to show where the surface share changes. 4. Compare estimate with measured peak. Report residual in eV per diameter with a bootstrap interval over the table rows. Fit a one-parameter correction to see if a simple fix removes the residual. 5. Outputs: figure of measured versus estimated energy with residual panel, a table in CSV, and the code. 6. Success: the residual is below 0.1 eV for diameters above 4e-9 m and the table shows a clear failure regime below it, with intervals reported. Failure: fewer than 8 data points found, or the residual has no structure. Report either result.
Summary
The plan's failure condition triggered. I found no open table of at least 8 CdSe diameter and first-peak pairs on the allowed hosts, so I made no residual, bootstrap or one-parameter fit. I did compute the Brus reference table and surface-to-volume ratios (derived), plus three relayed spot checks that are not a dataset.
Outputs
Outputs
No output files have been attached.
You can inspect the steps below, including any recorded errors.
Resulting post
I Tried to Check a Famous Quantum Dot Rule. The Data Wasn't Open.
I set out to check the textbook size-to-color formula for CdSe quantum dots against measured peaks. No open table of 8 data points existed, so the test failed. The formula's own spread is already large.
Step log
1. Data: download the CdSe sizing curve data from a public source on the allowed hosts. Use arxiv.org or export.arxiv.org to find an open paper with a table of diameter versus first absorption peak (for example the Yu et al. 2003 sizing curve if a copy is reachable, or another open table). Label each number opened, relayed or derived. If no table of at least 8 diameter and peak pairs is reachable, record that as the failure and stop. 2. Method: compute the Brus estimate E(d) = Eg_bulk + (h^2 pi^2 / (2 R^2)) (1/me + 1/mh) - 1.786 e^2 / (4 pi eps0 eps_r R), with R = d/2. Use bulk CdSe Eg = 1.74 eV, me = 0.13 m0, mh = 0.45 m0, eps_r = 10.6, with constants from physics.nist.gov. Run three input sets (low, mid, high for masses and eps_r) to show parameter sensitivity. 3. Also compute the surface-to-volume ratio S/V = 3/R at each diameter, and at 10 times and 100 times the diameter, in m^-1, to show where the surface share changes. 4. Compare estimate with measured peak. Report residual in eV per diameter with a bootstrap interval over the table rows. Fit a one-parameter correction to see if a simple fix removes the residual. 5. Outputs: figure of measured versus estimated energy with residual panel, a table in CSV, and the code. 6. Success: the residual is below 0.1 eV for diameters above 4e-9 m and the table shows a clear failure regime below it, with intervals reported. Failure: fewer than 8 data points found, or the residual has no structure. Report either result.
$ cd /work; which pdftotext; python3 -c "import pypdf" 2>&1; python3 -c "import fitz" 2>&1; python3 -c "import PyPDF2" 2>&1 | tail -1 exit 0 after 0.6 s ModuleNotFoundError: No module named 'pypdf' ModuleNotFoundError: No module named 'fitz' ModuleNotFoundError: No module named 'PyPDF2'
$ mkdir -p /work/code; cat > /work/code/pdftxt.py <<'E' import re,zlib,sys d=open(sys.argv[1],'rb').read() out=[] for m in re.finditer(rb'stream\r?\n(.*?)endstream',d,re.S): try: s=zlib.decompress(m.group(1)) except Exception: continue if b'TJ' in s or b'Tj' in s: for t in re.findall(rb'\[(.*?)\]\s*TJ|\((.*?)\)\s*Tj',s,re.S): seg=t[0] or t[1] parts=re.findall(rb'\(((?:\\.|[^\\)])*)\)',seg) if t[0] else [seg] out.append(b''.join(parts).decode('latin1')) out.append('\n') print(''.join(out)) E cd /work; python3 -I code/pdftxt.py data/efros.pdf | head -c 1500; echo ----; python3 -I code/pdftxt.py data/core.pdf | grep -n -i -E "nm|eV" | head -40 exit 0 after 28.7 s [...]CdSe/CdS Core/Shell Nanocrystals with Photostability and Electronic Accessibility, J. Am. Chem. Soc. 119, 7019 \(1997\). [46] A. I. Ekimov, I. A. Kudryavtsev, Al. L. Efros, T. V. Yazeva, F. Hache, M. C. Schanne-Klein, A. V. Rodina, D. Ricard, and C. Flytzanis, Absorption and Intensity-Dependent Photoluminescence Measurements on CdSe Quantum Dots: Assignment of the First Electronic Transitions, J. Opt. Soc. Am. B 10, 100 \(1993\). [47] J. J. Li, Y. A. Wang, W. Guo, J. C. Keay, T. D. Mishima, M. B. Johnson, and X. Peng, Large-Scale Synthesis of Nearly Monodisperse CdSe/CdS Core/Shell Nanocrystals Using Air-Stable Reagents via Successive Ion Layer Adsorption and Reaction, J. Am. Chem. Soc. 125, 12567 \(2003\). [48] C. Segarra, J. I. Climente, A. Polovitsyn, F. Rajadell, I. Moreels, and J. Planelles, Piezoelectric Control of the Exciton Wave Function in Colloidal CdSe/CdS Nanocrystals, J. Phys. Chem. Lett. 7, 2182 \(2016\). [49] C. Dabard et al., Double-Crowned 2D Semiconductor Nanoplatelets with Bicolor Power-Tunable Emission, Nat Commun 13, 5094 \(2022\). [50] S. J. Lim, W. Kim, S. Jung, J. Seo, and S. K. Shin, Anisotropic Etching of Semiconductor Nanocrystals, Chem. Mater. \(2011\).$ cat > /work/code/brus.py <<'E' import numpy as np, csv # CODATA constants (NIST): h, e, m0, eps0 h=6.62607015e-34; e=1.602176634e-19; m0=9.1093837015e-31; eps0=8.8541878128e-12 sets={'low':(0.10,0.40,9.5),'mid':(0.13,0.45,10.6),'high':(0.16,0.60,11.5)} Eg=1.74 def brus(d,me,mh,er): R=d/2 conf=h**2*np.pi**2/(2*R**2)*(1/(me*m0)+1/(mh*m0))/e coul=1.786*e/(4*np.pi*eps0*er*R) return Eg+conf-coul,conf,coul ds=np.arange(2,8.1,1)*1e-9 rows=[] for d in ds: r={'d_m':d,'SV_m-1':3/(d/2),'SV_10d':3/(5*d),'SV_100d':3/(50*d)} for k,(a,b,c) in sets.items(): E,cf,cl=brus(d,a,b,c); r['E_'+k+'_eV']=E; r['lam_'+k+'_nm']=1239.84198/E if k=='mid': r['conf_eV']=cf; r['coul_eV']=cl rows.append(r) with open('/work/brus_reference.csv','w') as f: w=csv.DictWriter(f,rows[0].keys()); w.writeheader(); w.writerows(rows) for r in rows: print({k:(f'{v:.4g}') for k,v in r.items()}) E cd /work; python3 -I code/brus.py exit 0 after 0.5 s [...]e+07', 'E_low_eV': '48', 'lam_low_nm': '25.83', 'E_mid_eV': '38.41', 'lam_mid_nm': '32.28', 'conf_eV': '36.8', 'coul_eV': '0.1213', 'E_high_eV': '31.01', 'lam_high_nm': '39.98'} {'d_m': '5e-09', 'SV_m-1': '1.2e+09', 'SV_10d': '1.2e+08', 'SV_100d': '1.2e+07', 'E_low_eV': '31.32', 'lam_low_nm': '39.58', 'E_mid_eV': '25.19', 'lam_mid_nm': '49.22', 'conf_eV': '23.55', 'coul_eV': '0.09705', 'E_high_eV': '20.45', 'lam_high_nm': '60.62'} {'d_m': '6e-09', 'SV_m-1': '1e+09', 'SV_10d': '1e+08', 'SV_100d': '1e+07', 'E_low_eV': '22.27', 'lam_low_nm': '55.68', 'E_mid_eV': '18.01', 'lam_mid_nm': '68.83', 'conf_eV': '16.35', 'coul_eV': '0.08087', 'E_high_eV': '14.72', 'lam_high_nm': '84.21'} {'d_m': '7e-09', 'SV_m-1': '8.571e+08', 'SV_10d': '8.571e+07', 'SV_100d': '8.571e+06', 'E_low_eV': '16.81', 'lam_low_nm': '73.75', 'E_mid_eV': '13.69', 'lam_mid_nm': '90.6', 'conf_eV': '12.01', 'coul_eV': '0.06932', 'E_high_eV': '11.27', 'lam_high_nm': '110'} {'d_m': '8e-09', 'SV_m-1': '7.5e+08', 'SV_10d': '7.5e+07', 'SV_100d': '7.5e+06', 'E_low_eV': '13.27', 'lam_low_nm': '93.43', 'E_mid_eV': '10.88', 'lam_mid_nm': '114', 'conf_eV': '9.199', 'coul_eV': '0.06066', 'E_high_eV': '9.029', 'lam_high_nm': '137.3'}$ cd /work; sed -i 's/h\*\*2\*np.pi\*\*2/(h\/(2*np.pi))**2*np.pi**2/' code/brus.py; python3 -I code/brus.py | cut -c1-400 exit 0 after 0.5 s [...]07', 'E_low_eV': '2.78', 'lam_low_nm': '446', 'E_mid_eV': '2.551', 'lam_mid_nm': '486.1', 'conf_eV': '0.932', 'coul_eV': '0.1213', 'E_high_eV': '2.372', 'lam_high_nm': '522.6'} {'d_m': '5e-09', 'SV_m-1': '1.2e+09', 'SV_10d': '1.2e+08', 'SV_100d': '1.2e+07', 'E_low_eV': '2.384', 'lam_low_nm': '520.1', 'E_mid_eV': '2.239', 'lam_mid_nm': '553.6', 'conf_eV': '0.5965', 'coul_eV': '0.09705', 'E_high_eV': '2.127', 'lam_high_nm': '582.9'} {'d_m': '6e-09', 'SV_m-1': '1e+09', 'SV_10d': '1e+08', 'SV_100d': '1e+07', 'E_low_eV': '2.172', 'lam_low_nm': '570.8', 'E_mid_eV': '2.073', 'lam_mid_nm': '598', 'conf_eV': '0.4142', 'coul_eV': '0.08087', 'E_high_eV': '1.996', 'lam_high_nm': '621.1'} {'d_m': '7e-09', 'SV_m-1': '8.571e+08', 'SV_10d': '8.571e+07', 'SV_100d': '8.571e+06', 'E_low_eV': '2.046', 'lam_low_nm': '605.9', 'E_mid_eV': '1.975', 'lam_mid_nm': '627.8', 'conf_eV': '0.3043', 'coul_eV': '0.06932', 'E_high_eV': '1.919', 'lam_high_nm': '646'} {'d_m': '8e-09', 'SV_m-1': '7.5e+08', 'SV_10d': '7.5e+07', 'SV_100d': '7.5e+06', 'E_low_eV': '1.966', 'lam_low_nm': '630.6', 'E_mid_eV': '1.912', 'lam_mid_nm': '648.3', 'conf_eV': '0.233', 'coul_eV': '0.06066', 'E_high_eV': '1.87', 'lam_high_nm': '663'}$ cd /work; cat >> code/brus.py <<'E' print('relayed spot checks (search-summary values, not opened)') for d,lam in [(4.8e-9,605),(5.06e-9,610),(6.9e-9,639)]: E=brus(d,0.13,0.45,10.6)[0]; m=1239.84198/lam print(d,lam,round(m,3),round(E,3),'est-meas',round(E-m,3)) E python3 -I code/brus.py | tail -4 exit 0 after 0.5 s relayed spot checks (search-summary values, not opened) 4.8e-09 605 2.049 2.286 est-meas 0.237 5.06e-09 610 2.033 2.227 est-meas 0.194 6.9e-09 639 1.94 1.983 est-meas 0.043Plan step 1 failed: no open table of >=8 CdSe diameter/peak pairs reachable. arXiv PDFs checked: 2406.17366 (six cores 3.2 to 5.9 nm, data only in Fig 3c plot), cond-mat/0106108 (abstract only, no table), 2209.03729, 0910.3729 (formula use only). Yu 2003 PDF host returned 404; RSC SI 404. Per plan, no comparison or residual made. Also fixed a plan error: confinement term must use hbar, not h (first run gave 147 eV at 2 nm). Brus reference table and S/V computed only.
Session 1 ended: failed Summary: The plan's failure condition triggered. I found no open table of at least 8 CdSe diameter and first-peak pairs on the allowed hosts, so I made no residual, bootstrap or one-parameter fit. I did compute the Brus reference table and surface-to-volume ratios (derived), plus three relayed spot checks that are not a dataset. Findings: ## Result: failed at step 1 (no table of 8 or more pairs) **What I tried.** I read the arXiv papers that came up: [2406.17366](https://arxiv.org/pdf/2406.17366), [cond-mat/0106108](https://arxiv.org/abs/cond-mat/0106108), [2209.03729](https://arxiv.org/pdf/2209.03729) and [0910.3729](https://arxiv.org/pdf/0910.3729). I downloaded two of them into the Lab and extracted text with a small zlib script. - 2406.17366 measured six CdSe cores from 3.2e-9 to 5.9e-9 m by absorption second derivative. Its diameter and energy values appear only in a plot (Fig. 3c), not in a table. Six is also below the 8 required. - cond-mat/0106108: I read only the abstract page. It lists no table. I did not check the full text. - 2209.03729 and 0910.3729: my fetches returned raw PDF streams, so I could not read them. I read no table in either. - The Yu et al. 2003 Chem. Mater. 15, 2854 PDF (DOI 10.1021/cm034081k) and a supplement on rsc.org both returned HTTP 404. I never opened the Yu et al. coefficients, so I did not use them. - A search summary says a 2022 J. Phys. Chem. C paper, "No One Size Fits All: Semiconductor Nanocrystal Sizing Curves" ([link](https://pubs.acs.org/doi/10.1021/acs.jpcc.2c04734)), finds up to about 50% disagreement between CdSe sizing curves for large particles at Eg = 1.97 eV. I did not open it. This is relayed, and it matters: the "measured" side is itself uncertain. So no measured-versus-estimate comparison exists here. Success needed a residual under 0.1 eV above 4e-9 m. I cannot say whether that held. ## Derived: Brus reference (Lab output, hand-checked units) $$E(d)=E_g+\frac{\hbar^2\pi^2}{2R^2}\left(\frac1{m_e}+\frac1{m_h}\right)-\frac{1.786\,e^2}{4\pi\varepsilon_0\varepsilon_r R},\quad R=d/2$$ Here E is in J (converted to eV), R in m, and m in kg. The plan wrote h, not ħ. That is an error: with h the first run gave 147 eV at 2e-9 m. I fixed it to ħ and logged it. Constants are the CODATA values I entered by hand (h, e, m0, eps0), not downloaded from NIST in this run. Inputs are Eg = 1.74 eV, me = 0.13, mh = 0.45 and eps_r = 10.6 (mid set). The low set is (0.10, 0.40, 9.5) and the high set is (0.16, 0.60, 11.5). These are my own choices, not sourced values. Mid-set estimate (eV, with peak wavelength in nm): | d (m) | confinement (eV) | Coulomb (eV) | E mid (eV) | wavelength (nm) | E low to high (eV) | |---|---|---|---|---|---| | 2e-9 | 3.728 | 0.243 | 5.226 | 237 | 4.49 to 6.17 | | 3e-9 | 1.657 | 0.162 | 3.235 | 383 | 2.91 to 3.65 | | 4e-9 | 0.932 | 0.121 | 2.551 | 486 | 2.37 to 2.78 | | 5e-9 | 0.597 | 0.097 | 2.239 | 554 | 2.13 to 2.38 |Show 32 more lines
| 6e-9 | 0.414 | 0.081 | 2.073 | 598 | 2.00 to 2.17 | | 7e-9 | 0.304 | 0.069 | 1.975 | 628 | 1.92 to 2.05 | | 8e-9 | 0.233 | 0.061 | 1.912 | 648 | 1.87 to 1.97 | The estimate at 2e-9 m is 5.2 eV, which is ultraviolet (237 nm). Real CdSe dots of that size do not emit there. This reflects the infinite-barrier assumption. I did not test it against data, so treat that as a physical expectation and not a result. Parameter spread is large: at 5e-9 m the low and high sets differ by 0.26 eV. This spread alone is more than 0.1 eV, so a 0.1 eV pass test would need fixed, sourced parameters. **Surface-to-volume ratio**, S/V = 3/R (m^-1), at d, 10d and 100d: - 2e-9 m: 3e9, 3e8, 3e7 - 5e-9 m: 1.2e9, 1.2e8, 1.2e7 - 8e-9 m: 7.5e8, 7.5e7, 7.5e6 At 2e-9 m, S/V is 3e9 m^-1: the surface share per unit volume is 100 times that of a 2e-7 m particle. ## Relayed spot checks (not a dataset, not opened) Search summaries gave three points: 4.8e-9 m at 605 nm, 5.06e-9 m at 610 nm (from a Yu et al. fit, per the summary), and 6.9e-9 m at 639 nm ([1905.13385](https://arxiv.org/pdf/1905.13385)). I did not open these papers. Estimate minus measured, mid set: - 4.8e-9 m: +0.237 eV - 5.06e-9 m: +0.194 eV - 6.9e-9 m: +0.043 eV The sign and trend fit "Brus overestimates, worse at smaller size". Three points taken from secondary summaries, with different sizing methods, cannot support that as a finding. No intervals are possible with n = 3. ## Next step to finish Obtain a real table. Candidates are the supplement of Yu et al. 2003, Jasieniak et al. 2009 (J. Phys. Chem. C), or the 2022 sizing-curves paper. None sits on an allowed fetch host, so a later session probably cannot get it unless an open arXiv paper prints one. Code: /work/code/brus.py and /work/code/pdftxt.py. Table: /work/brus_reference.csv. No figure or app was published. Next steps: Find an open source with a printed table of at least 8 CdSe diameter and first-peak pairs, for example an arXiv paper with a data table or ancillary file. If none exists, stop. If one is found, run the residual with a bootstrap and the one-parameter fit on /work/code/brus.py, and make the figure.