Software Open Access
Pospiech, Solveig;
Gericke, Robert
{
"language": "eng",
"id": "4736",
"author": [
{
"family": "Pospiech, Solveig"
},
{
"family": "Gericke, Robert"
}
],
"type": "article",
"version": "0.0.1",
"publisher": "Rodare",
"abstract": "<p># SplitFit</p>\n\n<p>**Version:** This version of SplitFit was published as used to calculate the values for the publication of</p>\n\n<p>Till Sawallisch, Dennis Grödler, Adrian Näder, Clara L. Silva, Peter Kaden, Michael Patzschke, Lucia Amidani, Kristina O. Kvashnina, Solveig Pospiech, Jan van Leusen, Moritz Schmidt, Thorsten Stumpf and Robert Gericke, Hexa-Coordinate Actinide(IV) Compounds: Benchmark Complexes for Magnetism and Electronic Structure Analysis, 2026.</p>\n\n<p><br>\n## Introduction</p>\n\n<p>SplitFit is a Python package for parameter fitting in quantum chemical calculations, specifically designed to optimize fitting of ligand field parameters obtained from CONDON 3. The package uses a combination of Quasi-Monte Carlo (method Sobol) sampling and iterative refinement to find optimal parameter combinations that minimize the difference between calculated and experimental energy levels.</p>\n\n<p>The core workflow involves:</p>\n\n<p>1. Running quantum chemistry calculations via CONDON 3</p>\n\n<p>2. Sampling parameter space using low-discrepancy Sobol sequences</p>\n\n<p>3. Iteratively refining parameter ranges based on best-matching results</p>\n\n<p><br>\n## Sampling Methods - Quasi-Monte Carlo (Sobol Sequences)</p>\n\n<p>SplitFit uses **Sobol sequences** as the primary sampling method for exploring the parameter space. Sobol sequences are a type of **low-discrepancy sequence** that provides more uniform coverage of the parameter space compared to pseudo-random sampling.</p>\n\n<p><br>\n## Input File Format</p>\n\n<p>The input file (`input.txt`) uses a simple text-based format with sections separated by `--end--` markers. Lines starting with `#` are treated as comments.</p>\n\n<p>### Example `input.txt`</p>\n\n<p>```text<br>\nFITINPUT<br>\nsize_sampling: 8100<br>\nfit_loops: 10<br>\nfit_ratio: 0.7<br>\nfit_threshold: 10</p>\n\n<p>--end--</p>\n\n<p># here are some comments</p>\n\n<p>BKQ</p>\n\n<p>Bkq, lower_limit, upper_limit<br>\nB20, 2480, 2884<br>\nB40, 4558, 5507<br>\nB44, 3214, 3814<br>\nB60, 6806, 8173<br>\nB64, -8665, -7851</p>\n\n<p>--end--</p>\n\n<p>ENERGYLEVEL</p>\n\n<p> 0.00<br>\n 676.56<br>\n 988.76<br>\n1138.46 <br>\n1345.10 <br>\n1569.05<br>\n2413.42<br>\n2548.75 <br>\n2630.14</p>\n\n<p>--end--<br>\n```</p>\n\n<p><br>\n## Configuration</p>\n\n<p>### Config File (`config.yaml`)</p>\n\n<p>```yaml<br>\npaths:<br>\n input_data: "data/input.txt" # Path to your input.txt file<br>\n condon_files: "data/" # Directory containing Condon files and QMC schemes<br>\n```</p>\n\n<p><br>\n## Output Files</p>\n\n<p>After running, the following files are generated in the `condon_files` directory:</p>\n\n<p>| File | Description |<br>\n|------|-------------|<br>\n| `BXX_output_XX_orig.dat` | All results from iteration XX (unsorted) |<br>\n| `BXX_output_XX.dat` | Sorted results for iteration XX (top % only) |<br>\n| `bkq_summary_XX.csv` | Summary statistics with refined parameter ranges for next iteration |</p>\n\n<p><br>\n## Workflow Diagram</p>\n\n<p>```<br>\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br>\n\u2502 Configuration Load \u2502<br>\n\u2502 (config.yaml → paths_from_config) \u2502<br>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<br>\n \u2502<br>\n \u25bc<br>\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br>\n\u2502 Input File Parsing \u2502<br>\n\u2502 (input.txt → fitinput, BKQ_ranges, energylevels) \u2502<br>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<br>\n \u2502<br>\n \u25bc<br>\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br>\n\u2502 Initial Condon Run \u2502<br>\n\u2502 (Generate fort.* files) \u2502<br>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<br>\n \u2502<br>\n \u25bc<br>\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br>\n\u2502 QMC Sampling Setup \u2502<br>\n\u2502 (Load Sobol sequence, map to filtered parameter ranges) \u2502<br>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<br>\n \u2502<br>\n \u25bc<br>\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br>\n\u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502<br>\n\u2502 \u2502 FITTING LOOP (fit_loops) \u2502 \u2502<br>\n\u2502 \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524 \u2502<br>\n\u2502 \u2502 For each sample (size_sampling): \u2502 \u2502<br>\n\u2502 \u2502 1. Get Bxx from QMC \u2502 \u2502<br>\n\u2502 \u2502 2. Update BWYBIN.DAT \u2502 \u2502<br>\n\u2502 \u2502 3. Clear old fort files \u2502 \u2502<br>\n\u2502 \u2502 4. Run Condon \u2502 \u2502<br>\n\u2502 \u2502 5. Extract SQX and energy levels \u2502 \u2502<br>\n\u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502<br>\n\u2502 \u2502 \u2502<br>\n\u2502 Normalize: sqx_norm + energy_norm \u2502 \u2502<br>\n\u2502 \u2502 \u2502<br>\n\u2502 Score = fit_ratio × sqx_norm + (1-fit_ratio) × energy_norm \u2502<br>\n\u2502 \u2502 \u2502<br>\n\u2502 Sort and select top fit_threshold% \u2502 \u2502<br>\n\u2502 \u2502 \u2502<br>\n\u2502 Write: BXX_output_XX.dat, bkq_summary_XX.csv \u2502 \u2502<br>\n\u2502 \u2502 \u2502<br>\n\u2502 Refine ranges for next iteration \u2502 \u2502<br>\n\u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502<br>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<br>\n \u2502<br>\n \u25bc<br>\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br>\n\u2502 Complete \u2502<br>\n\u2502 (Use bkq_summary_XX.csv for next run or analysis) \u2502<br>\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<br>\n```</p>\n\n<p>## Dependencies</p>\n\n<p>- Python ≥ 3.8<br>\n- NumPy<br>\n- Pandas<br>\n- PyYAML</p>\n\n<p><br>\n## License</p>\n\n<p>This software is provided for academic use. Please cite the relevant publications when using this code in your research:</p>\n\n<p>- **SplitFit:** Pospiech & Gericke, 2026</p>\n\n<p>- **Condon:** Speldrich et al. *Journal of Computational Chemistry*, 2017 DOI: [10.1002/jcc.25389](https://doi.org/10.1002/jcc.25389)</p>\n\n<p><br>\n## Contact For questions regarding this package, please refer to the original publication:</p>\n\n<p>Till Sawallisch, Dennis Grödler, Adrian Näder, Clara L. Silva, Peter Kaden, Michael Patzschke, Lucia Amidani, Kristina O. Kvashnina, Solveig Pospiech, Jan van Leusen, Moritz Schmidt, Thorsten Stumpf and Robert Gericke, Hexa-Coordinate Actinide(IV) Compounds: Benchmark Complexes for Magnetism and Electronic Structure Analysis, 2026.</p>",
"issued": {
"date-parts": [
[
2026,
6,
25
]
]
},
"title": "SplitFit - a Python package for parameter fitting in quantum chemical calculations",
"DOI": "10.14278/rodare.4736"
}
| All versions | This version | |
|---|---|---|
| Views | 121 | 121 |
| Downloads | 1 | 1 |
| Data volume | 104.5 MB | 104.5 MB |
| Unique views | 101 | 101 |
| Unique downloads | 1 | 1 |