Source code for bandwagon.ladders
"""Definition of custom ladders for BandWagon."""
from .BandsPattern import Band, BandsPattern
try:
import pandas
PANDAS_AVAILABLE = True
except ImportError:
PANDAS_AVAILABLE = False
[docs]def custom_ladder(label, bands_migrations):
"""Generate a BandsPattern object meant to be used as a ladder.
By default the ladder is dark red on a white background.
"""
migrations = bands_migrations.values()
min_migrations = min(migrations)
ladder_span = max(migrations) - min_migrations
if min_migrations < 0.1 * ladder_span:
shift = 0
else:
shift = min_migrations - 0.1 * ladder_span
return BandsPattern(
[
Band(size, migration_distance=migration - shift, band_color="#8B0000",)
for (size, migration) in bands_migrations.items()
],
background_color="#ffffff",
label=label,
)
[docs]def ladder_from_aati_fa_calibration_table(filepath=None, dataframe=None, label=None):
"""Extract a BandPattern from an AATI Fragment Analyzer calibration file.
The calibration table is generated after each run from the migration
times of the ladder and is generally in a file called something like
``2016 11 08 16H 57M Size Calibration.csv``.
This method requires Pandas installed.
Parameters
----------
filepath
Path to the calibration file.
dataframe
Pandas dataframe obtained by reading the file, can be provided instead of
``filepath``.
label
Label that will be given to the ladder when plotted.
"""
if not PANDAS_AVAILABLE:
raise ImportError("The Pandas library is required for this method.")
if filepath is not None:
dataframe = pandas.read_csv(filepath)
dataframe["migration"] = (
1.1 * dataframe["Time (sec)"].max() - dataframe["Time (sec)"]
)
return custom_ladder(
label,
{row["Ladder Size (bp)"]: row["migration"] for i, row in dataframe.iterrows()},
)
LADDER_100_to_4k = custom_ladder(
"100-4k",
{
100: 205,
200: 186,
300: 171,
400: 158,
500: 149,
650: 139,
850: 128,
1000: 121,
1650: 100,
2000: 90,
3000: 73,
4000: 65,
},
)