Parsing the numerical output from Sensovation SensoSpot image analysis.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

94 lines
3.6 KiB

Sensospot Data Parser
=====================
4 years ago
Parsing the numerical output from Sensovation Sensospot image analysis and some
other useful functions for working with the data.
## Example:
```python
import sensospot_data
# read the raw data of a folder
4 years ago
raw_data = sensospot_data.parse_folder(<path to results directory>)
# apply an exposure map to add more data:
# key relates to column "Exposure.Id"
# values are (Exposure.Channel, Exposure.Time)
exposure_map = {
1: ("Cy3", 100),
2: ("Cy5", 150),
3: ("Cy5", 15),
}
enhanced_data = sensospot_data.apply_exposure_map(raw_data, exposure_map)
# split the measurement according to channels
channels = sensospot_data.split(enhanced_data "Exposure.Channel")
4 years ago
# merge the two cy5 measurements together, creating an extended dynamic range
cy5_xdr = sensospot_data.create_xdr(channels["cy5"], normalized_time=25)
```
4 years ago
## Avaliable functions:
from .parser import parse_file, parse_folder # noqa: F401
- **parse_folder(path_to_folder)**
Searches the folder for parsable .csv files, parses them into one big pandas
data frame and will add additional meta data from parameters folder, if
it is present.
- **parse_file(path_to_csv_file)**
Parses the csv file into a pandas data frame and will add additional some
meta data from the file name. Is internally also used by `parse_folder()`
- **split(data_frame, column)**
4 years ago
Splits a data frame based on the unique values of a column. Will return a
dict, with the unique values as keys and the corresponding data frame as
value
- **apply_map(data_frame, map, idex_col)**
Adds information provided in the nested dictionary `map` to a data frame,
based on the values in the data_frame column `index_col`.
4 years ago
- **apply_exposure_map(data_frame, exposure_map)**
Adds information about the channel and exposure time to a data frame, based
on the exposure id. Will get bonus karma points, if the named tuple
`ExposureInfo` is used:
`{1:ExposureInfo("Cy3", 100), 2:ExposureInfo("Cy3", 100), }`
- **ExposureInfo(exposure_channel, exposure_time)**
A named tuple for defining an exposure map. Usage will increase readability
and karma points.
- **blend(data_frame, [column="Spot.Saturation", limit=2])**
4 years ago
If provided with a data frame with multiple exposure times for the same
exposure channel, the function will blend theese two times together based
on given column and limit.
- **normalize_values(data_frame, [normalized_time=None])**
Adds new columns to the data frame with intensity values recalculated to the
normalized exposure time. If no time is given, the max exposure time is used.
- **create_xdr(data_frame, [normalized_time=None, column="Spot.Saturation", limit=2])**
4 years ago
This combines the methods `blend()` and `normalize_values()` into one call.
What a joy!
## CLI
For the (propably) most important function, there is even a cli command
```sh
Usage: parse_sensospot_data [OPTIONS] SOURCE
Arguments:
SOURCE: Folder with Sensospot measurement
Options:
-o, --outfile TEXT Output file name, relative to SOURCE, defaults to 'raw_data.h5'
--help Show this message and exit.
```
## Development
To install the development version of Sensovation Data Parser:
git clone https://git.cpi.imtek.uni-freiburg.de/holgi/sensospot_data.git
# create a virtual environment and install all required dev dependencies
cd sensospot_data
make devenv
To run the tests, use `make tests` (failing on first error) or `make coverage` for a complete report.