Lawrence Livermore National Laboratory: Data Science Challenge
What I did: I built the registration stage, the step that aligns the nominal lattice graph (the CAD design) to the CT scan of the printed part. Every strut measurement and defect call downstream depends on it, so I focused on making it trustworthy, not just close.
The problem
Additively manufactured metal lattices can fail because of small local strut defects that are hard to judge from a CT scan by eye. The team built an agent-orchestrated pipeline that registers the nominal design to the scan, measures every strut, and classifies each one as missing, broken, thin, thick, or bent, then writes an inspection report and opens it in an interactive 3D web app.
Learning a new domain fast
I came in as a computer science student, not a materials scientist. In a few weeks I had to get comfortable with laser powder bed fusion, X-ray CT density volumes, lattice unit cells and what each defect type physically looks like, well enough to make decisions about thresholds and tolerances that a materials scientist would accept.
Aligning the CT scan with the nominal graph
The design lives in clean CAD coordinates; the scan is a noisy 3D density volume of a part that never comes out exactly as designed. Registration answers: where should every design node sit inside the CT volume?
- Segment the CT with a validated per-scan Otsu threshold to get a binary material mask.
- Detect candidate junctions using a Euclidean distance transform: thick interior regions are where struts meet, and their centers become an unordered point cloud.
- Hold out 20% of those candidates so the fit can be tested on points it never saw.
- Fit a 7-degree-of-freedom similarity transform (scale, rotation, translation) with trimmed ICP, keeping only the closest 70% of matches so missing nodes, defects and false detections don't drag the fit.
- Guard against bad local optima by running ICP from 21 starting points and requiring the near-best solutions to agree within one voxel.
- Gate the result on holdout error, every node landing inside the CT, synthetic recovery tests (known transforms with noise, 20% missing points and 25% outliers) and a robustness sweep over threshold, downsampling and seed. If any gate fails, the pipeline halts instead of guessing.
- Freeze it. The CT-only result is sealed with SHA-256 hashes before the reference alignment is ever opened, so the answer key can't leak into the fit. Then each node is refined locally, and nodes that can't be refined confidently are flagged rather than silently moved.
This is what made the classifier's results believable under the team's label-blind validation framework.
Working across skill sets
We were a four-person team with very different backgrounds, including a statistics major and a software engineer. The statistics side shaped how we validated defect calls; the software side shaped how the agents, tools and reports fit together. I sat in the middle on registration: turning the geometry into something both could build on, and documenting the flow so anyone on the team could follow it.
Team repository