Package: alphatims
AlphaTimsAlphaTims is an open-source Python package that provides fast accession and visualization of unprocessed LC-TIMS-Q-TOF data fromBruker’s timsTOF Proinstruments. It indexes the data such that it can easily be sliced along all five dimensions: LC, TIMS, QUADRUPOLE, TOF and DETECTOR. It was developed by theMann Labs at the Max Planck Institute of Biochemistryas a modular tool of theAlphaPept ecosystem. To enable all hyperlinks in this document, please view it atGitHub.AlphaTimsAboutLicenseInstallationOne-click GUIPip installerDeveloper installerInstallation issuesTest dataTest sampleLCDDADIAUsageGUICLIPython and jupyter notebooksOther toolsPerformanceSpeedRAMTroubleshootingHow it worksBruker raw dataTimsTOF objects in PythonSlicing TimsTOF objectsFuture perspectivesCiting AlphaTimsHow to contributeChangelog1.0.00.3.20.3.10.3.00.2.80.2.7AboutHigh-resolution quadrupole time-of-flight (Q-TOF) tandem mass spectrometry can be coupled to several other analytical techniques such as liquid chromatography (LC) and trapped ion mobility spectrometry (TIMS). LC-TIMS-Q-TOF has gained considerable interest since the introduction of theParallel Accumulation–Serial Fragmentation (PASEF)method in both data-dependent (DDA) and data-independent acquisition (DIA). With this setup, ion intensity values are acquired as a function of the chromatographic retention time, ion mobility, quadrupole mass to charge and TOF mass to charge. As these five-dimensional data points are detected at GHz rates, datasets often contain billions of data points which makes them impractical and slow to access. Raw data are therefore frequently binned for faster data analysis or visualization. In contrast, AlphaTims is a Python package that provides fast accession and visualization of unprocessed raw data. By recognizing that all measurements are ultimately arrival times linked to intensity values, it constructs an efficient set of indices such that raw data can be interpreted as a sparse five-dimensional matrix. On a modern laptop, this indexing takes less than half a minute for raw datasets of more than two billion datapoints. Following this step, interactive visualization of the same dataset can also be done in milliseconds. AlphaTims is freely available, open-source and available on all major Operating Systems. It can be used with a graphical user interface (GUI), a command-line interface (CLI) or as a regular Python package.LicenseAlphaTims was developed by theMann Labs at the Max Planck Institute of Biochemistryand is freely available with anApache License. Since AlphaTims uses Bruker libraries (available in thealphatims/extfolder) additionalthird-party licensesare applicable. External Python packages (available in therequirementsfolder) have their own licenses, which can be consulted on their respective websites.InstallationAlphaTims can be installed and used on all major operating systems (Windows, macOS and Linux).
There are three different types of installation possible:One-click GUI installer:Choose this installation if you only want the GUI and/or keep things as simple as possible.Pip installer:Choose this installation if you want to use AlphaTims as a Python package in an existing Python 3.8 environment (e.g. a Jupyter notebook). If needed, the GUI and CLI can be installed with pip as well.Developer installer:Choose this installation if you are familiar with CLI tools,condaand Python. This installation allows access to all available features of AlphaTims and even allows to modify its source code directly. Generally, the developer version of AlphaTims outperforms the precompiled versions which makes this the installation of choice for high-throughput experiments.Docker:Use this installation if you want to use a container based workflow. This is usefull to preserve a clean environment or when running multiple tools that might have conflicting dependencies.IMPORTANT: While AlphaTims is mostly platform independent, some calibration functions requireBruker librarieswhich are only available on Windows and Linux.One-click GUIThe GUI of AlphaTims is a completely stand-alone tool that requires no knowledge of Python or CLI tools. Click on one of the links below to download the latest release for:WindowsmacOSLinuxIMPORTANT: Please refer to theGUI manualfor detailed instructions on the installation, troubleshooting and usage of the stand-alone AlphaTims GUI.Older releases remain available on therelease page, but no backwards compatibility is guaranteed.PipAlphaTims can be installed in an existing Python 3.8 environment with a singlebashcommand.Thisbashcommand can also be run directly from within a Jupyter notebook by prepending it with a!. The lightweight version of AlphaTims that purely focuses on data accession (no plotting without additional packages) can be installed with:pipinstallalphatimsInstalling AlphaTims like this avoids conflicts when integrating it in other tools, as this does not enforce strict versioning of dependancies. However, if new versions of dependancies are released, they are not guaranteed to be fully compatible with AlphaTims. While this should only occur in rare cases where dependencies are not backwards compatible, you can always force AlphaTims to use dependancy versions which are known to be compatible with:pipinstall"alphatims[stable]"NOTE: You might need to runpip install pip==21.0before installing AlphaTims like this. Also note the double quotes".Alternatively, some basic plotting functions can be installed with the following command:pipinstall"alphatims[plotting]"While the above command does allow usage of the full GUI, there are some known compatability issues with newer versions of bokeh. As such, it is generally advised to not use loose plotting dependancies and force a stable installation with:pipinstall"alphatims[plotting-stable]"When older samples need to be analyzed, it might be essential to install thelegacyversion as well (See also thetroubleshootingsection):pipinstall"alphatims[legacy]"When a new version of AlphaTims becomes available, the old version can easily be upgraded by running e.g. the command again with an additional--upgradeflag:pipinstall"alphatims[plotting,legacy,stable]"--upgradeThe following extra options are available:stableplottingplotting-stablelegacylegacy-stabledevelopmentdevelopment-stableNOTE: Multiple dependancy packs can be installed by comma-separation. Note however that this only works without spaces!DeveloperAlphaTims can also be installed in editable (i.e. developer) mode with a fewbashcommands. This allows to fully customize the software and even modify the source code to your specific needs. When an editable Python package is installed, its source code is stored in a transparent location of your choice. While optional, it is advised to first (create and) navigate to e.g. a general software folder:mkdir~/folder/where/to/install/softwarecd~/folder/where/to/install/softwareThe following commands assume you do not perform any additionalcdcommands anymore.Next, download the AlphaTims repository from GitHub either directly or with agitcommand. This creates a new AlphaTims subfolder in your current directory.gitclonehttps://github.com/MannLabs/alphatims.gitFor any Python package, it is highly recommended to use aconda virtual environment. The best way to install an editable version of AlphaTims is to use AlphaTims' pre-built conda development environment (note that the--forceflag overwrites an already existing AlphaTims environment):condaenvcreate--force--namealphatims--filealphatims/misc/conda_development_environment.yaml
condaactivatealphatimsAlternatively, a new conda environment can manually be created or AlphaTims can be installed in an already existing environment.Note that dependancy conflicts can occur with already existing packages in the latter case! Once a conda environment is activated, AlphaTims and all itsdependanciesneed to be installed. To take advantage of all features and allow development (with the-eflag), this is best done by installing both theplotting dependenciesanddevelopment dependenciesinstead of only thecore dependencies:condacreate-nalphatimspython=3.8-y
condaactivatealphatims
pipinstall-e"./alphatims[plotting-stable,development]"By using the editable flag-e, all modifications to the AlphaTimssource code folderare directly reflected when running AlphaTims. Note that the AlphaTims folder cannot be moved and/or renamed if an editable version is installed.The following steps are optional, but make working with AlphaTims slightly more convenient:To avoid callingconda activate alphatimsandconda deactivateevery time AlphaTims is used, the binary execution (which still reflects all modifications to the source code) can be added as an alias. On linux and MacOS, this can be done with e.g.:condaactivatealphatimsalphatims_bin="$(whichalphatims)"echo"alias alphatims='"${alphatims_bin}"'">>~/.bashrc
condadeactivateWhenzshis the default terminal instead ofbash, replace~/.bashrcwith~/.zshrc. On Windows, the commandwhere alphatimscan be used to find the location of the binary executable. This path can then be (permanently) added to Windows' path variable.When using Jupyter notebooks and multiple conda environments direcly from the terminal, it is recommended toconda install nb_conda_kernelsin the conda base environment. Hereafter, running ajupyter notebookfrom the conda base environment should have apython [conda env: alphatims]kernel available, in addition to all other conda kernels in which the commandconda install ipykernelwas run.Docker(WIP)dockerpullghcr://MannLabs/alphatims:latestInstallation issuesSee the generaltroubleshootingsection.Test dataAlphaTims is compatible with bothddaPASEFanddiaPASEF.Test sampleA test sample of human cervical cancer cells (HeLa, S3, ATCC) is provided for AlphaTims. These cells were cultured in Dulbecco's modified Eagle's medium (all Life Technologies Ltd., UK). Subsequently, the cells were collected, washed, flash-frozen, and stored at -80 °C.
Following the previously publishedin-StageTip protocol, cell lysis, reduction, and alkylation with chloroacetamide were carried out simultaneously in a lysis buffer (PreOmics, Germany). The resultant dried peptides were reconstituted in water comprising 2 vol% acetonitrile and 0.1% vol% trifluoroacetic acid, yielding a 200 ng/µL solution. This solution was further diluted with water containing 0.1% vol% formic acid. The manufacturer's instructions were followed to load approximately 200ng peptides onto Evotips (Evosep, Denmark).LCSingle-run LC-MS analysis was executed via anEvosep One LC system (Evosep). This was coupled online with a hybridTIMS quadrupole TOF mass spectrometer (Bruker timsTOF Pro, Germany). A silica emitter (Bruker) was placed inside a nano-electrospray ion source (Captive spray source, Bruker) and connected to an 8 cm x 150 µm reverse phase column to perform LC. The column was packed with 1.5 µm C18-beads (Pepsep, Denmark). Mobile phases were water and acetonitrile, buffered with 0.1% formic acid. The samples were separated with a predefined 60 samples per day method (Evosep).DDAA ddaPASEF dataset is available fordownload from the release page. Each topN acquisition cycle consisted of 10 PASEF MS/MS scans, and the accumulation and ramp times were set to 100 ms. Single-charged precursors were excluded using a polygon filter in the m/z-ion mobility plane. Furthermore, all precursors, which reached the target value of 20000, were excluded for 0.4 min from the acquisition. Precursors were isolated with a quadrupole window of 2 Th for m/z <700 and 3 Th for m/z >700.DIAThe same sample was acquired with diaPASEF and is also available fordownload from the release page. The "high-speed" method (mass range: m/z 400 to 1000, 1/K0: 0.6 – 1.6 Vs cm- 2, diaPASEF windows: 8 x 25 Th) was used, as described inMeier et al.UsageThere are three ways to use AlphaTims:GUI:This allows to interactively browse, visualize and export the data.CLI:This allows to incorporate AlphaTims in automated workflows.Python:This allows to access data and explore it interactively with custom code.NOTE: The first time you use a fresh installation of AlphaTims, it is often quite slow because some functions might still need compilation on your local operating system and architecture. Subsequent use should be a lot faster.GUIPlease refer to theGUI manualfor detailed instructions on the installation, troubleshooting and usage of the stand-alone AlphaTims GUI.If the GUI was not installed through a one-click GUI installer, it can be activate with the followingbashcommand:alphatimsguiNote that this needs to be prepended with a!when you want to run this from within a Jupyter notebook. When the command is run directly from the command-line, make sure you use the right environment (activate it with e.g.conda activate alphatimsor set an alias to the binary executable).CLIThe CLI can be run with the following command (after activating thecondaenvironment withconda activate alphatimsor if an alias was set to the alphatims executable):alphatims-hIt is possible to get help about each function and their (required) parameters by using the-hflag. For instance, the commandalphatims export hdf -hwill produce the following output:************************
* AlphaTims 0.0.210310 *
************************
Usage: alphatims export hdf [OPTIONS] BRUKER_D_FOLDER

  Export BRUKER_D_FOLDER as hdf file.

Options:
  --disable_overwrite            Disable overwriting of existing files.
  --enable_compression           Enable compression of hdf files. If set, this
                                 roughly halves files sizes (on-disk), at the
                                 cost of taking 2-10 longer accession times.
  -o, --output_folder DIRECTORY  A directory for all output (blank means
                                 `input_file` root is used).
  -l, --log_file PATH            Save all log data to a file (blank means
                                 'log_[date].txt' with date format
                                 yymmddhhmmss in 'log' folder of AlphaTims
                                 directory).  [default: ]
  -t, --threads INTEGER          The number of threads to use (0 means all,
                                 negative means how many threads to leave
                                 available).  [default: -1]
  -s, --disable_log_stream       Disable streaming of log data.
  -p, --parameter_file FILE      A .json file with (non-required) parameters
                                 (blank means default parameters are used).
                                 NOTE: Parameters defined herein override all
                                 default and given CLI parameters.
  -e, --export_parameters FILE   Save currently selected parameters to a
                                 parameter file.
  -h, --help                     Show this message and exit.For this particular command, the lineUsage: alphatims export hdf [OPTIONS] BRUKER_D_FOLDERshows that you always need to provide a path to aBRUKER_D_FOLDERand that all other options are optional (indicated by the brackets in[OPTIONS]). Each option can be called with a double dash--followed by a long name, while common options also can be called with a single dash-followed by their short name. It is indicated what type of parameter is expected, e.g. aDIRECTORYfor--output_folderor nothing forenable/disableflags. Defaults are also shown and all parameters will be saved in a log file. Alternatively, all used parameters can be exported with the--export_parametersoption and the non-required ones can be reused with the--parameter_file.IMPORTANT: Please refer to theCLI manualfor detailed instructions on the usage and troubleshooting of the stand-alone AlphaTims CLI.Python and Jupyter notebooksAlphaTims can be imported as a Python package into any Python script or notebook with the commandimport alphatims. Documentation for all functions is available in theRead the Docs API.A briefJupyter notebook tutorialon how to use the API is also present in thenbs folder. When running locally it provides interactive plots, which are not rendered on GitHub. Instead, they are available as individual html pages in thenbs folder.Other toolsInitial exploration of Bruker TimsTOF data files can be done by opening the .tdf file in the .d folder with anSQL browser.HDF filescan be explored withHDF CompassorHDFView.Annotating Bruker TimsTOF data files can be done withAlphaPeptVisualization of identified Bruker TimsTOF data files can be done withAlphaVizPerformancePerformance can be measured in function ofspeedorRAMusage.SpeedTypical time performance statistics on data in-/output and slicing of standardHeLa datasetsare available in theperformance notebook. All result can be summarized as follows:RAMOn average, RAM usage is twice the size of a raw Bruker .d folder. Since most .d folders have file sizes of less than 10 Gb, a modern computer with 32 Gb RAM suffices to explore most datasets with ease.TroubleshootingCommon installation/usage issues include:Always make sure you have activated the AlphaTims environment withconda activate alphatims.If this fails, make sure you have installedcondaand have created an AlphaTims environment withconda create -n alphatims python=3.8.Nogitcommand. Make suregitis installed. In a notebook!conda install git -ymight work.Wrong Python version.AlphaTims is only guaranteed to be compatible with Python 3.8. You can check if you have the right version with the commandpython --version(or!python --versionin a notebook). If not, reinstall the AlphaTims environment withconda create -n alphatims python=3.8.Dependancy conflicts/issues.Pip changed their dependancy resolver withpip version 20.3. Downgrading or upgrading pip to version 20.2 or 21.0 withpip install pip==20.2orpip install pip==21.0(before runningpip install alphatims) could solve dependancy conflicts.AlphaTims is not found.Make sure you use the right folder. Local folders are best called by prefixing them with./(e.g.pip install "./alphatims"). On some systems, installation specifically requires (not) to use single quotes'around the AlphaTims folder, e.g.pip install "./alphatims[plotting-stable,development]".Modifications to the AlphaTims source code are not reflected.Make sure you use the-eflag when usingpip install -e alphatims.Numpy does not work properly.On Windows,numpy==1.19.4has some issues. After installing AlphaTims, downgrade NumPy withpip install numpy==1.19.3.Exporting PNG images with the CLI or Python package might not work out-of-the-box. If a conda environment is used, this can be fixed by runningconda install -c conda-forge firefox geckodriverin the AlphaTims conda environment. Alternatively, a file can be exported as html and opened in a browser. From the browser there is asave as pngbutton available.GUI does not open.In some cases this can be simply because of using an incompatible (default) browser. AlphaTims has been tested with Google Chrome and Mozilla Firefox. Windows IE and Windows Edge compatibility is not guaranteed.When older Bruker files need to be processed as well,thelegacy dependenciesare also needed. However, note that this requiresMicrosoft Visual C++to be manually installed (on Windows machines) prior to AlphaTims installation! To include the legacy dependencies, install AlphaTims withpip install "alphatims[legacy]"orpip install "alphatims[legacy]" --upgradeif already pre-installed.When installed throughpip, the GUI cannot be started.Make sure you install AlphaTims withpip install "alphatims[plotting-stable]"to include the GUI with stable dependancies. If this was done and it still fails to run the GUI, a possible fix might be to runpip install panel==0.10.3after AlphaTims was installed.Some external libraries are missing.On some OS, there might be libraries missing. As an exmaple, the following error message might pop up:OSError: libgomp.so.1: cannot open shared object file: No such file or directory. This can be solved by installing those manually, e.g. on Linux:apt-get install libgomp1.How it worksThe basic workflow of AlphaTims looks as follows:Read data from aBruker.dfolder.Convert data to aTimsTOF object in Pythonand optionally store them as a persistentHDF5 file.Use Python'sslicing mechanismto retrieve data from this object e.g. for visualisation.Also checkout:Thepaperfor a complete overview.ThepresentationatISCBfor a brief video.Bruker raw dataBruker stores TimsTOF raw data in a.dfolder. The two main files in this folder areanalysis.tdfandanalysis.tdf_bin.Theanalysis.tdffile is an SQL database, in which all metadata are stored together with summarised information. This includes theFramestable, wherein information about each individual TIMS cycle is summarised including the retention time, the number of scans (i.e. a single TOF push is related to a single ion mobility value), the summed intensity and the total number of ions that have hit the detector. More details about individual scans of the frames are available in thePasefFrameMSMSInfo(for PASEF acquisition) orDiaFrameMsMsWindows(for diaPASEF acquisition) tables. This includes quadrupole and collision settings of the frame/scan combinations.Theanalysis.tdf_binfile is a binary file that contains the number of detected ions per individual scan, all detector arrival times and their intensity values. These values are grouped and compressed per frame (i.e. TIMS cycle), thereby allowing fast appendage during online acquisition.TimsTOF objects in PythonAlphaTims first reads relevant metadata from theanalysis.tdfSQL database and creates a Python object of thebruker.TimsTOFclass. Next, AlphaTims reads the summary information from theFramestable and creates three empty arrays:An emptytof_indicesarray, in which all TOF arrival times of each individual detector hit will be stored. Its size is determined by summing the number of detector hits for all frames.An emptyintensitiesarray of the same size, in which all intensity values of each individual detector hit will be stored.An emptytof_indptrarray, that will store the number of detector hits per scan. Its size is equal to(frame_max_index + 1) * scans_max_index + 1. It includes one additional frame to compensate for the fact that Bruker arrays are 1-indexed, while Python uses 0-indexing. The final+1is because this array will be converted to an offset array, similar to the index pointer array of acompressed sparse row matrix. Typical values arescans_max_index = 1000andframe_max_index = gradient_length_in_seconds * 10, resulting in approximatelylen(tof_indptr) = 10000 * gradient_length_in_seconds.After reading thePasefFrameMSMSInfoorDiaFrameMsMsWindowstable from theanalysis.tdfSQL database, four arrays are created:Aquad_indptrarray that indexes thetof_indptrarray. Each element points to an index of thetof_indptrwhere the voltage on the quadrupole and collision cell is adjusted. For PASEF acquisitions, this is typically 20 times per MSMS frame (turning on and off a value for 10 precursor selections) and once per change from an MS (precursor) frame to an MSMS (fragment) frame. For diaPASEF, this is typically twice to 10 times per frame and with a repetitive pattern over the frame cycle. This results in an array of approximatelylen(quad_indptr) = 100 * gradient_length_in_seconds. As with thetof_indptrarray, this array is converted to an offset array with size+1.Aquad_low_valuesarray oflen(quad_indptr) - 1. This array stores the lower m/z boundary that is selected with the quadrupole. For precursors without quadrupole selection, this value is set to -1.Aquad_high_valuesarray, similar toquad_low_values.Aprecursor_indicesarray oflen(quad_indptr) - 1. For PASEF this array stores the index of the selected precursor. For diaPASEF, this array stores theWindowGroupof the fragment frame. A value of 0 indicates an MS1 ion (i.e. precursor) without quadrupole selection.After processing this summarising information from theanalysis.tdfSQL database, the actual raw data from theanalysis.tdf_binbinary file is read and stored in the emptytof_indices,intensitiesandtof_indptrarrays.Finally, three arrays are defined that allow quick translation offrame_,scan_andtof_indicestort_values,mobility_valuesandmz_valuesarrays.Thert_valuesarray is read read directly from theFramestable inanalysis.tdfand has a length equal toframe_max_index + 1. Note that an empty zeroth frame withrt = 0is created to make Python's 0-indexing compatible with Bruker's 1-indexing.Themobility_valuesarray is defined by using the functiontims_scannum_to_oneoverk0fromtimsdata.dllon the first frame and typically has a length of1000.Similarly, themz_valuesarray is defined by using the functiontims_index_to_mzfromtimsdata.dllon the first frame. Typically this has a length of400000.All these arrays can be loaded into memory, taking up roughly twice as much RAM as the.dfolder on disk. This increase in RAM memory is mainly due to the compression used in theanalysis.tdf_binfile. The HDF5 file can also be compressed so that its size is roughly halved and thereby has the same size as the Bruker.dfolder, but (de)compression reduces accession times by 3-6 fold.Slicing TimsTOF objectsOnce a Python TimsTOF object is available, it can be loaded into memory for ultrafast accession. Accession of thedataobject is done by simple Python slicing such as e.g.selected_ion_indices = data[frame_selection, scan_selection, quad_selection, tof_selection]. This slicing returns apd.DataFramefor subsequent analysis. The columns of this dataframe contain all information for all selected ions, i.e.frame,scan,precursorandtofindices andrt,mobility,quad_low,quad_high,mzandintensityvalues. See thetutorial jupyter notebookfor usage examples.Future perspectivesDetection of:precursor and fragment ionsisotopic envelopes (i.e. features)fragment clusters (i.e. pseudo MSMS spectra)Citing AlphaTimsCheck out thepaper.How to contributeIf you like AlphaTims you can give us astarto boost our visibility! All direct contributions are also welcome. Feel free to post a newissueor clone the repository and create apull requestwith a new branch. For an even more interactive participation, check out thediscussions.
For more information seethe Contributors License Agreement.ChangelogThe following changes were introduced in the following versions of AlphaTims. Download the latest version in theinstallation section.1.0.0FEAT: tempmmap for large arrays by default.0.3.2FEAT: cli/gui allow bruker data as argument.FEAT/FIX: Polarity included in frame table.FIX: utils cleanup.FIX: utils issues.FEAT: by default use -1 threads in utils.FIX: disable cla check.0.3.1FIX/FEAT: Intensity correction when ICC is used. Note that this is only for exported data, not for visualized data.FEAT: By default, hdf files are now mmapped, making them much faster to initially load and use virtual memory in favor of residual memory.0.3.0FEAT: Introduction of global mz calibration.FEAT: Introduction of dia_cycle for diaPASEF.CHORE: Verified Python 3.9 compatibility.FEAT: Included option to open Bruker raw data when starting the GUI.FEAT: Provided hash for TimsTOF objects.FEAT: Filter push indices.CHORE: included stable and loose versions for all dependancies0.2.8FIX: Ensure stable version for one click GUI.FIX: Do not require plotting dependancies for CLI export csv selection.FIX: Import of very old diaPASEF samples where the analysis.tdf file still looks like ddaPASEF.FIX: frame pointers of fragment_frame table.FEAT: Include visual report in performance notebook.FEAT: Include DIA 120 sample in performance tests.FEAT: Show performance in README.FIX: Move python-lzf dependancy (to decompress older Bruker files) to legacy requirements, as pip install on Windows requires visual c++ otherwise.DOCS: BioRxiv paper link.FEAT/FIX: RT in min column.FEAT: CLI manual.FEAT: Inclusion of more coordinates in CLI.0.2.7CHORE: Introduction of changelog.CHORE: Automated publish_and_release action to parse version numbers.FEAT/FIX: Include average precursor mz in MGF titles and set unknown precursor charges to 0.FIX: Properly resolve set_global argument ofalphatims.utils.set_threads.FIX: Set nogil option foralphatims.bruker.indptr_lookup.DOCS: GUI Manual typos.FEAT: Include buttons to download test data and citation in GUI.FEAT: Include option for progress_callback in alphatims.utils.pjit.FIX/FEAT: Older samples with TimsCompressionType 1 can now also be read. This is at limited performance.FEAT: By default use loose versioning for the base dependancies. Stable dependancy versions can be enforced withpip install "alphatims[stable]". NOTE: This option is not guaranteed to be maintained. Future AlphaTims versions might opt for an intermediate solution with semi-strict dependancy versioning.