Skip to content

A tool to calculate lifetimes, average charge separation and dipole moments of excited states along DNA within the formalism of open quantum systems.

License

Notifications You must be signed in to change notification settings

dehe1011/QuantumDNA

Repository files navigation

License DOI Documentation Status Release Coverage Status GitHub Workflow Status Code Style: black


QuantumDNA

Author: Dennis Herb

This Python package can be cited as:

QuantumDNA (github.com/dehe1011/QuantumDNA), D. Herb, 2024, DOI: 10.5281/zenodo.12734027

Introduction

Welcome to QuantumDNA, a powerful and flexible tool designed to calculate lifetimes, average charge separation, and dipole moments of excited states along DNA. Leveraging the formalism of open quantum systems and based on tight-binding Hamiltonians, QuantumDNA is equipped to handle various tight-binding models. Users can incorporate custom tight-binding parameters from ab initio calculations or experimental data, as well as define their own models, making the tool highly adaptable. QuantumDNA is regularly updated to ensure it remains at the cutting edge and includes a user-friendly interface to be accessible even to researchers less familiar with computer science. Results from several research papers can be reproduced with QuantumDNA.

Key Features

  • Versatile Calculations: Calculate lifetimes, charge separation, and dipole moments.
  • Customizable Models: Add and use custom tight-binding parameters and models.
  • User-Friendly Interface: Designed for ease of use by all researchers.
  • Parallelization: Supports parallel computing for the calculation of excited state properties for large ensembles of DNA sequences, optimizing performance within the computationally intensive context of open quantum systems.
  • Regular Updates: Stay current with the latest advancements and improvements.

What's new

July 2024

Getting started

Quick Installation

For a quick installation, you can install the qDNA package using pip within a virtual environment:

pip install qDNA

To ensure compatibility and avoid conflicts with other packages, we recommend using a virtual environment. For detailed installation instructions and alternative methods, please refer to the Installation Guide.

Example Program

To test QuantumDNA, you can run the following simple example where the exciton lifetime and the average charge separation of a double-stranded GCG DNA sequence are calculated. You can try different sequences, tight-binding models, and keyword arguments to investigate how these factors affect the exciton lifetime and average charge separation. For example, you might find that in general more uniform sequences show higher values. Do you know the reason for this observation?

from qDNA import calc_lifetime, calc_dipole

# input
upper_strand = 'GCG'
tb_model_name = 'ELM'
kwargs = dict(unit='rad/ps', relax_rate=3, source='Hawke2010')

# calculation 
lifetime = calc_lifetime(upper_strand, tb_model_name, **kwargs)
dipole = calc_dipole(upper_strand, tb_model_name, **kwargs)

# output 
print(f"Exciton lifetime {lifetime} fs")
print(f"Average charge separation {dipole} A")

Documentation

The documentation for the latest release is available for reading on Read The Docs. The package website contains general information about the project and planned future developments.

Tutorials

The code contains some tutorials and demonstrations to better understand and explore the functionalities.

In the docs/tutorials folder you can find the notebook 0_Paper that contains and reproduces all the figures contained in D. Herb, M. Rossini and J. Ankerhold, Ultrafast excitonic dynamics in DNA: Bridging correlated quantum dynamics and sequence dependence.

Additionally, the QuantumDNA/docs/tutorials folder contains the following tutorials:

Tutorial Name Description
1_TB_Models Tutorials on predefined and custom tight-binding models.
2_Data_Visualization Tutorial on the predefined plotting routines.
3_DNA_environment Tutorial on different ways to treat DNA relaxation and the DNA environment.
4_Parallelized_Calculations Tutorial on how to perform parallelized calculations for several properties.
Exploration_Notebook A place to test the functionality of individual functions isolated from the rest of the code.

These tutorials provide hands-on examples and explanations to help you effectively use the qDNA package.

Graphical user interface

The qDNA package includes a graphical user interface (GUI) that provides an intuitive and user-friendly way to interact with the package's functionalities. You can access the GUI with the following code:

from qDNA.gui import qDNA_app

app = qDNA_app()
app.mainloop()

The GUI allows you to easily explore and utilize the capabilities of the qDNA package. Below are some examples demonstrating its use:

  • Menu Window: Access various functionalities from a centralized menu.

Screenshot of the menu of the user interface.

Screenshot of the menu of the user interface.
  • Plot Generation: Create plots effortlessly by submitting your parameters through the GUI.

Plot obtained after pressing the submit button on the menu.

Plot obtained after pressing the submit button on the menu (see image above).
  • Calculation Display: Perform calculations, such as exciton lifetime and average charge separation, and view the results directly within the interface.

Screenshot of the menu of the user interface with calculations of the exciton lifetime, average charge separation and dipole moment displayed in the frame on the bottom right.

Screenshot of the menu of the user interface with calculations of the exciton lifetime, average charge separation and dipole moment displayed in the frame on the bottom right.

The GUI streamlines the process of working with qDNA, making it accessible even to those who may not be familiar with coding. Whether you're generating plots or calculating complex dynamics, the GUI provides a convenient and efficient way to achieve your goals.

Shortcuts

To enhance the readability and maintainability of the code, we have standardized a set of frequently used shortcuts. These abbreviations help keep the code concise while still being clear and understandable:

  • ham: hamiltonian
  • dm: density matrix
  • tb: tight-binding
  • eigv: eigenvalue/ eigenenergy
  • eigs: eigenstates/ eigenvectors
  • dim: dimension
  • fig: figure
  • op: operator
  • loc: local
  • glob: global
  • deph: dephasing
  • therm: thermalizing
  • seq: sequence
  • calc: calculate

References

Papers from our group:

Tight-binding parameters:

Tight-binding models:

Excitons and electron-hole Coulomb interaction:

The biological relevance of DNA charge transfer:

Simulation of open quantum systems:

Support

For support, please contact the author at dennis.herb@uni-ulm.de.