Code Structure

The basic structure of the software is:

_images/code_structure.png

The folder structure:

root
|- ErwinJr2.....................The main souce code
|  |- oned_quantum...............The C library and its Python interface
|  |  |- fftautocorr............A small FFT-based autocorrelation calculator
|  |  |  |- ....
|  |  |- docs...................The Doxygen documentation for the C library
|  |  |- Makefile...............The build system for make
|  |  |- 1DSchrodinger.c
|  |  |- band.c
|  |  |- band.h
|  |  |- science.h
|  |  |- __init__.py
|  |  |- c_schrodinger.pyx
|  |  |- typeDefs.py
|  |- images....................The images needed for the GUI
|  |  |- ....
|  |- example....................Example files as QCL design
|  |- __init__.py
|  |- __main__.py...............This defines how ErwinJr will start outside command line
|  |- opt_strata.py
|  |- qclayers.py
|  |- material.py
|  |- rFittings.py
|  |- save_load.py
|  |- qc_plotter.py
|  |- erwinjr.py
|  |- quantum_tab.py
|  |- optical_tab.py
|  |- ej_canvas.py
|  |- custom_qt_class.py.py
|  |- dark_detect.py
|  |- version.py
|  |- genshortcut.py
|  |- Info.plist............The sample file for creating macOS shortcut
|- test.....................Test cases
|  |- ....
|- docs.....................The documentation, as is shown online
|  |- ....
|- tool.....................Scripts to help developers, git negelets files starting by `p\_`
|  |- ....
|- CHANGELOG
|- LICENSE
|- README.md................This is shown in the project front page in GitHub
|- pyproject.toml...........Part of the setup system required by PEP518
|- setup.py.................The `setuptools` based setup system
|- .readthedocs.yml.........The online documentation generation definition
|- .github..................Configs for github deployment
   |- ....

The C library in oned_quantum has two sets of building system: make defined in Makefile and Visual Studio solution file defined in oned_quantum.sln and 1DSchrodinger.vcxproj. They are intended to be consistent, so that the software behaves the same under Linux/macOS and under Windows.

For the Python code, the project complies with the PEP8 code style, and for the C code, the project complies K&R style.