# Optolithium #
![Logo.png](https://github.com/xthebat/optolithium/blob/master/Logo.png)
## What is it? ##
Optolithium is a optical lithography (see [Photolithography](http://en.wikipedia.org/wiki/Photolithography)) modelling software that allow to calculate results at the different steps of process. It's open-source software and it isn't aimed to correspond to high-end VLSI fabrication technological nodes. The main goal of the project is studying students basics of nanotechnological processes (as an example is optical lithography). Optolithium refers to [computational lithography](http://en.wikipedia.org/wiki/Computational_lithography) software and can be used for simulation of different stage of the lithography process. The following stages can be simulated at current version:
* Aerial image
* Aerial image in resist
* Exposed latent image in resist
* PEB latent image in resist
* Develop time contours
* Resist profile
Also automated simulation set with variating at most two parameters is available.
At this time only 2D resist profile modelling is implemented but one of roadmap's point is add 3D simulation possibility. The following figure denotes resist profile simulations results for 365 nm technological process:
![Optolithium-Profile.png](https://github.com/xthebat/optolithium/blob/master/Profile.png)
Screenshot of the main window of Optolithium software with simulation results of aerial image in resist as distribution of light intensity. Also an effect of standing waves could be seen in this figure.
![Optolithium_IR.png](https://github.com/xthebat/optolithium/blob/master/Profile_IR.png)
## Papers
Note: all papers made in Russian language.
- [Optical lithography basics](https://github.com/xthebat/optolithium/releases/download/papers/Optical.Lithography.Simulation.Basics.pdf)
- [Lithography lecture](https://github.com/xthebat/optolithium/releases/download/papers/4.Lecture.ppt.pdf)
- [Simulation lecture](https://github.com/xthebat/optolithium/releases/download/papers/7.Lecture.ppt.pdf)
- [Optolithium lecture](https://github.com/xthebat/optolithium/releases/download/papers/8.Lecture.Optolithium.ppt.pdf)
## What are internals? ##
The program can be considered as two main part:
* The Core (OptolithiumC) - part of software that required high performance calculations and different iterations throughout list, arrays and etc.
* The GUI (OptoltihiumGui) - another part where interaction with user performed. This part use OptolithiumC for optical lithography modelling.
Accordingly, Optolithium software separated into two parts, is written primarily by mean of the two complementary programming language: Python (only version 2.7 supported) and C++11x. The Optolithium Core wrapped with Python binding and can be used sheer without OptolithiumGui module. Also software can be extent by plugins. Plugin is standalone shared library with a special exported symbol (descriptor) and Optolithium plugin can represent different objects modelling object:
* Photomask 1D/2D
* Source shape map model
* Optical system pupil filter model
* Resist rate development model
Anyone could simple write own plugin using C programming language with definition in header file:
<OPTOLITHIUM_SRC>/OptolithiumC/include/optolithium.h
At this time next plugins have already implemented:
* 1D - binary space
* 1D - binary line
* 1D - binary line with SRAF (Sub-Resolution Assist Features)
* Annular source shape
* Partially coherent source shape
* Coherent source shape
* Mack resist rate model
* Enhanced Mack resist rate model
* Notch resist rate model
## Current software state ##
Optolithium is open source software and under developing. There are a lot of bugs may appear when you work with software. I'll be glad if detailed reports and bug description will be added to issue whenever it possible. That helps me to improve Optolithium and make it more comprehensive.
## How to run software? ##
You can choose one of two choices: the first use prebuilt by mean of Cython executable distributive and the second is compile and configure software by your self. When using prebuilt binaries total package will be in binary but if you will built it from source you can only compile Optolithium Core (not necessarily Cythonize Optolithium GUI module written in pure Python). Development of the source code was carried out with opportunity to compile Optolithium Core under various OS: Windows, Linux and Mac OS X. Currently prebuilt packages you could found in Downloads.
Since a half of program written in Python programming language GUI can be run without any compilation and set up. You only required to install all dependencies libraries that were used in GUI module (see OptolithiumGui below) . As for photolithography modelling core it should be compiled using GCC compatible compiler. To compile go into OptolithiumC directory and run build using CMake:
cd <OPTOLITHIUM_SRC>/OptolithiumC
cmake CMakeLists.txt
make install
These commands will build OptolithiumC module (core) and also build standard plugins set.
The software tested for build with GNU GCC Toolchain hence MinGW required in Windows operating system environment. Also cmake configuration command should be replaced with the next:
cmake CMakeLists.txt -G "MSYS Makefiles"
## Fourier Transform ##
Since light diffraction simulation is tied to a huge count of Fourier transform calculation a very fast algorithm and approaches or library must be used. The one fastest library to calculate Fourier transform is [FFTW3](http://www.fftw.org/) it can be used thought the front-end is presented in source code. Currently Optolithium used it self Fourier Transform library. FFTW3 can be activated by uncommenting the following line in CMakeLists.txt (see "How to run software?")
SET(OPTOLITHIUMC_USE_FFTW_LIBRARY "ON")
and comment the following:
SET(OPTOLITHIUMC_USE_FOURIER_LIBRARY "ON")
This front-end has been used just to compare performance FFTW3 library and Optolithium Fourier library. The comparison has been made for ~160 1D-simulation of binary line when calculate Focus-Exposure Matrix using "Simulation Sets" tab (X/Y and Z grid = 5 nm, Speed Factor = 5) on Intel Core i7 2.2 GHz with 8 Gb RAM. In result Optolithium Fourier library is approximately 2.5 times slower then FFTW3 library in presented benchmark (NOTE: it isn't mean that for any other simulation types, masks, models and etc. Optolithium Fourier library will be in 2.5 times slower the results can be different).
The source code of the Optolithium Fourier Transform library is presented under the next path:
<OPTOLITHIUM_SRC>/OptolithiumC/libs/fourier
The simple benchmark code can be found in src/check.c files
### Optolithium Fourier Transform library License ###
Copyright © 2015 *Alexei Gladkikh*. All rights reserved.
This software may be modified and distributed under the terms of the BSD license. See the LICENSE file for details.
## Dependencies ##
### Optolithium GUI ###
Because the project required heavily numerical calculation different third party libraries have been used (Note Optolithium has been tested with the specified versions of libraries)
* [Python 2.7.8](https://www.python.org/)
* [PySide 1.2.1](https://pypi.python.org/pypi/PySide)
* [NumPy-1.6.2](https://pypi.python.org/pypi/numpy)
* [SciPy-0.15.1](https://pypi.python.org/pypi/scipy)
* [Matplotlib-1.4.0](https://pypi.python.org/pypi/matplotlib)
* [SQLAlchemy-0.9.4](https://pypi.python.org/pypi/SQLAlchemy)
* [python-gdsii-0.2.1](https://pypi.python.org/pypi/python-gdsii/)
* [bson-0.3.3](https://pypi.python.org/pypi/bson)
* [psutils-2.2.1](https://pypi.python.org/pypi/psutil)
* [filemagic-1.6](https://pypi.python.org/pypi/filemagic/1.6)
Binary packages and libraries
* [File for Windows](http://gnuwin32.sourceforge.net/packages/file.htm)
### Optolithium C