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, }, )