Skip to content

Commit

Permalink
Update docs
Browse files Browse the repository at this point in the history
  • Loading branch information
roflmaostc committed Feb 12, 2024
1 parent eb4d3e6 commit b4a5ffc
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 34 deletions.
56 changes: 40 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,41 +1,65 @@
# SwissVAMyKnife.jl

[Volumetric Additive Manufacturing](https://www.nature.com/articles/s41467-020-14630-4) is a novel 3D printing technique
[![CI](https://github.com/EPFL-LAPD/SwissVAMyKnife.jl/actions/workflows/CI.yml/badge.svg)](https://github.com/EPFL-LAPD/SwissVAMyKnife.jl/actions/workflows/CI.yml)[![codecov](https://codecov.io/gh/EPFL-LAPD/SwissVAMyKnife.jl/graph/badge.svg?token=JZYHT3P3B7)](https://codecov.io/gh/EPFL-LAPD/SwissVAMyKnife.jl)[![Documentation for stable version](https://img.shields.io/badge/docs-stable-blue.svg)](https://roflmaostc.github.io/SwissVAMyKnife.jl/stable) [![Documentation for development version](https://img.shields.io/badge/docs-main-blue.svg)](https://roflmaostc.github.io/SwissVAMyKnife.jl/dev)
[Tomographic Volumetric Additive Manufacturing](https://www.nature.com/articles/s41467-020-14630-4) is a novel 3D printing technique
which is based on a tomographic principle.
Light is illuminated from different directions onto a glass vial which contains a photosensitive resin.
Once a voxel in the resin receives enough light, polymerization is triggered.
Light is illuminated from different angles onto a glass vial which contains a photosensitive resin.
Once a voxel in the resin receives enough light, polymeristartss.

This toolbox is developed to solve the optimization challenge around VAM.
What are the required patterns on the projector such object voxels polymerize and not-object voxels
stay unpolymerized.

This package is developed in [Julia Lang](https://julialang.org/) and features CUDA and CPU support. CUDA can accelerate reconstruction typically 10-20x times.

It runs on Windows, Linux and macOS!


# Features
* 3D parallel Radon transform for ray optical simulation
* rigorous simulation of absorption and vial refraction
* CUDA acceleration hence high performance
* 3D coherent wave optical optimization (see this [paper](https://arxiv.org/abs/2402.06283) for details and limitations). Note this has been only theoretical demonstrated and experimentally not validated.


# Installation
We recommend the most recent Julia version:
```julia
julia> ]add github.com/EPFL-LAPD/SwissVAMyKnife.jl
```
julia> using Pkg

# Features
julia> Pkg.add(url="github.com/EPFL-LAPD/SwissVAMyKnife.jl")
```

* [x] several optimizers (such as L-BFGS provided by [Optim.jl](https://github.com/JuliaNLSolvers/Optim.jl))
* [x] based on automatic differentiation
* [x] CUDA acceleration
* [x] 3D parallel inverse (exponential) Radon for ray optical simulation
* [x] 3D coherent wave optical optimization (see this paper for details and limitations). Note this has been only theoretical demonstrated and experimentally not validated.
* [x] absorption can be included
* [x] refraction of glass vial is included
# Examples
You can also run the [examples](https://github.com/EPFL-LAPD/SwissVAMyKnife.jl/tree/main/examples) locally.
Download this repository and then do the following in your REPL:
```julia
julia> cd("examples/")

julia> using Pkg; Pkg.activate("."); Pkg.instantiate()
Activating project at `~/.julia/dev/SwissVAMyKnife.jl/examples`

# Examples
julia> using Pluto; Pluto.run()
```


# Other packages
There is the Python based [VAM Toolbox](https://github.com/computed-axial-lithography/VAMToolbox) and [LDCD-VAM](https://github.com/facebookresearch/LDCT-VAM/). In terms of functionality, they also offer a ray based method including absorption.
There is the Python based [VAM Toolbox](https://github.com/computed-axial-lithography/VAMToolbox) and [LDCD-VAM](https://github.com/facebookresearch/LDCT-VAM/).
In terms of functionality, they also offer a ray based methods including absorption.
Wave optical methods are not offered.

# Development
File an issue on [GitHub](https://github.com/EPFL-LAPD/SwissVAMyKnife.jl) if you encounter any problems.


# Citation
If you use this software in academic work, please consider citing:
```bibtex
@misc{wechsler2024wave,
title={Wave optical model for tomographic volumetric additive manufacturing},
author={Felix Wechsler and Carlo Gigli and Jorge Madrid-Wolff and Christophe Moser},
year={2024},
eprint={2402.06283},
archivePrefix={arXiv},
primaryClass={physics.optics}
}
```
1 change: 1 addition & 0 deletions docs/src/function_docstrings.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ PropagationScheme
ParallelRayOptics
VialRayOptics
WaveOptics
Polarization
```

# Optimization
Expand Down
50 changes: 37 additions & 13 deletions docs/src/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,32 +10,56 @@ What are the required patterns on the projector such object voxels polymerize an
stay unpolymerized.

This package is developed in [Julia Lang](https://julialang.org/) and features CUDA and CPU support. CUDA can accelerate reconstruction typically 10-20x times.
It runs on Windows, Linux and MacOS

It runs on Windows, Linux and macOS!


# Features
* 3D parallel Radon transform for ray optical simulation
* rigorous simulation of absorption and vial refraction
* CUDA acceleration hence high performance
* 3D coherent wave optical optimization (see this [paper](https://arxiv.org/abs/2402.06283) for details and limitations). Note this has been only theoretical demonstrated and experimentally not validated.


# Installation
We recommend the most recent Julia version:
```julia
julia> ]add github.com/EPFL-LAPD/SwissVAMyKnife.jl
```
julia> using Pkg

# Features
julia> Pkg.add(url="github.com/EPFL-LAPD/SwissVAMyKnife.jl")
```

* [x] several optimizers (such as L-BFGS provided by [Optim.jl](https://github.com/JuliaNLSolvers/Optim.jl))
* [x] based on automatic differentiation
* [x] CUDA acceleration
* [x] 3D parallel inverse (exponential) Radon for ray optical simulation
* [x] 3D coherent wave optical optimization (see this paper for details and limitations). Note this has been only theoretical demonstrated and experimentally not validated.
* [x] absorption can be included
* [x] refraction of glass vial is included
# Examples
You can also run the [examples](https://github.com/EPFL-LAPD/SwissVAMyKnife.jl/tree/main/examples) locally.
Download this repository and then do the following in your REPL:
```julia
julia> cd("examples/")

julia> using Pkg; Pkg.activate("."); Pkg.instantiate()
Activating project at `~/.julia/dev/RadonKA.jl/examples`

# Examples
julia> using Pluto; Pluto.run()
```


# Other packages
There is the Python based [VAM Toolbox](https://github.com/computed-axial-lithography/VAMToolbox) and [LDCD-VAM](https://github.com/facebookresearch/LDCT-VAM/). In terms of functionality, they also offer a ray based method including absorption.
There is the Python based [VAM Toolbox](https://github.com/computed-axial-lithography/VAMToolbox) and [LDCD-VAM](https://github.com/facebookresearch/LDCT-VAM/).
In terms of functionality, they also offer a ray based methods including absorption.
Wave optical methods are not offered.

# Development
File an issue on [GitHub](https://github.com/EPFL-LAPD/SwissVAMyKnife.jl) if you encounter any problems.


# Citation
If you use this software in academic work, please consider citing:
```bibtex
@misc{wechsler2024wave,
title={Wave optical model for tomographic volumetric additive manufacturing},
author={Felix Wechsler and Carlo Gigli and Jorge Madrid-Wolff and Christophe Moser},
year={2024},
eprint={2402.06283},
archivePrefix={arXiv},
primaryClass={physics.optics}
}
```
10 changes: 5 additions & 5 deletions src/ray_optics.jl
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
export ParallelRayOptics, VialRayOptics
export PolarizationParallel, PolarizationPerpendicular, PolarizationRandom
export Polarization, PolarizationParallel, PolarizationPerpendicular, PolarizationRandom


"""
Polarization
- `PolarizationParallel` is the parallel polarization.
- `PolarizationPerpendicular` is the perpendicular polarization.
- `PolarizationRandom` is the random polarization.
- `PolarizationParallel()` describes a parallel polarization.
- `PolarizationPerpendicular()` describes a perpendicular polarization.
- `PolarizationRandom()` describes a random polarization.
"""
abstract type Polarization end

Expand Down Expand Up @@ -45,7 +45,7 @@ is taken into account.
- `R_inner` is the inner radius of the glass vial.
- `n_vial` is the refractive index of the glass vial.
- `n_resin` is the refractive index of the resin.
- `polarization` is the polarization of the light.
- `polarization=PolarizationRandom()` is the polarization of the light. See [`Polarization`](@ref) for the options.
"""
@with_kw struct VialRayOptics{T, ToN, A, P} <: PropagationScheme
angles::A
Expand Down

0 comments on commit b4a5ffc

Please sign in to comment.