Metadata-Version: 2.4
Name: dont-fret
Version: 0.2.1
Summary: Analyze confocal solution smFRET data
Project-URL: Source, https://github.com/Jhsmit/dont-fret/
Author-email: Jochem Smit <jhsmit@gmail.com>
License-Expression: MIT
License-File: LICENSE
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Science/Research
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Requires-Python: >=3.10
Requires-Dist: altair
Requires-Dist: anywidget
Requires-Dist: click
Requires-Dist: dacite
Requires-Dist: numba>=0.56.4
Requires-Dist: numpy>=1.18.0
Requires-Dist: pandas>=1.5.3
Requires-Dist: phconvert
Requires-Dist: plotly
Requires-Dist: polars>=0.20.23
Requires-Dist: pyyaml>=6.0
Requires-Dist: solara>=1.19.0
Requires-Dist: tqdm>=4.64.1
Requires-Dist: typing-extensions>=4.4.0
Requires-Dist: vegafusion[embed]
Requires-Dist: vl-convert-python
Provides-Extra: docs
Requires-Dist: mkdocs-gen-files>=0.4.0; extra == 'docs'
Requires-Dist: mkdocs-literate-nav>=0.5.0; extra == 'docs'
Requires-Dist: mkdocs-material>=8.5.11; extra == 'docs'
Requires-Dist: mkdocs>=1.4.2; extra == 'docs'
Requires-Dist: mkdocstrings[python]>=0.19.1; extra == 'docs'
Requires-Dist: pygments>=2.13.0; extra == 'docs'
Provides-Extra: plot
Requires-Dist: kdepy; extra == 'plot'
Requires-Dist: matplotlib; extra == 'plot'
Provides-Extra: test
Requires-Dist: pytest-asyncio; extra == 'test'
Requires-Dist: pytest-ipywidgets[solara]; extra == 'test'
Requires-Dist: pytest-playwright>=0.3.3; extra == 'test'
Requires-Dist: pytest>=7.2.0; extra == 'test'
Description-Content-Type: text/markdown

Don't FRET
============


Don't FRET! is a python package featuring a web application for performing burst search on confocal smFRET data. 

```
pip install dont-fret
```

![screenshot](assets/screenshot.png)

## Process photon files

```
dont-fret process filename.ptu
```

Will process the file. It will perform burst search as specified in the configuration file. Output (default) are burst photons and bursts as .pq files. 

## Run the web application

To launch with the default configuration file:

```
dont-fret serve
```

To create a local default configuration file:

```
dont-fret config
```

Then you can edit the created config file. To launch the web application with a specific config file:

```
dont-fret serve --config config.yaml
```

## Configuration

Configuration for channels, photon streams and (default) burst search settings is done from the config .yaml file. 

First, define your channels:

```yaml
channels: # refactor channels in code to channel_identifiers
  laser_D:
    target: nanotimes
    value: [ 0, 1000 ]
  laser_A:
    target: nanotimes
    value: [ 1000, 2000 ] # intervals are inclusive, exclusive
  det_D:
    target: detectors
    value: 1
  det_A:
    target: detectors
    value: 0
```

Currently supported targets are `nanotimes`, `detectors` and `timestamps`. These are as read from the file and not converted to seconds. Modulo is supported (untested) for us-ALEX:
```yaml
channels: # refactor channels in code to channel_identifiers
  laser_D:
    target: timestamps
    value: [ 0, 100 ]
    modulo: 200
```

This will assign photons with a timestamp modulo 200 in the range from 0 up to 100 to "laser_D".

Next, define your photon streams. Photons streams are combinations of channels ("AND"):

```yaml
streams:
  DD: [laser_D, det_D]
  DA: [laser_D, det_A]
  AA: [laser_A, det_A]
  AD: [laser_A, det_D]
```

!IMPORTANT
The notation used here is excitation then emission, thus the FRET stream is 'DA' while in literature the FRET photon stream is often written as `A|D` (Acceptor emission during donor excitation). 


!IMPORTANT  
At the moment apparent FRET and stoichiometry are calculated from the defined photon streams and it is required the following streams are defined: 'AA', 'DD', 'DA' (=FRET). This is expected to be changed in future updates.

## Development

Download a test file:

```sh
wget https://kuleuven-my.sharepoint.com/:u:/g/personal/jochem_smit_kuleuven_be/Efy7ur779ARNiBlP05Ki7NMBabKX3auswj30xmpRLaIfPg?e=E6wWoZ&download=1
```


If autoreload (refresh web application upon code changes) doesnt work, run from:
solara run dont_fret\tmp.py -- --config default_testing.yaml

### Create a new release

- Create a new release on github. Create a new tag with the version (format: v0.1.0)
- github actions creates release on pypi
- done!
