{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Example usage\n",
"\n",
"The poorly named `labtools` python package is a collection of diverse modules that might be of use to Staller Lab members and collaborators. \n",
"- tools to analyze raw sequencing data\n",
"- simple tools to shuffle/mutate sequences for library design\n",
"- (hopefully) tools to run in-house neural net"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"# add the comment \n",
" # @hidden\n",
"# anywhere in any cell you want to hide\n",
"# works with custom sphinx layout\n",
"\n",
"# Following code is used to style and truncate the pandas dataframe outputs for easier example viewing\n",
"\n",
"def format_index(s):\n",
" return f\"font-size: 8pt; max-width: 250px; text-overflow: ellipsis; overflow: hidden\"\n",
"def format(s):\n",
" return [\"font-size: 10pt;\"] *len(s)\n",
"def display_df(df, **kwargs):\n",
" disp = df.head(10).style.applymap_index(format_index)\n",
" disp = disp.applymap_index(format_index, axis = 0)\n",
" disp = disp.apply(format)\n",
" return disp\n",
"\n",
"# @hidden"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Sequencing Analysis Tools"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Sort Processing Example\n",
"#### What you need\n",
"[Also, see documentation for clearer idea of what inputs should look like](https://massivejords.github.io/tools/docs/_build/html/autoapi/labtools/adtools/sort/index.html)\n",
"\n",
"* data_files : list of str\n",
" + path to fastq file for each sample in the sort in order of bins\n",
"* bin_counts : list of int\n",
" + cells per bin in order of data files\n",
"* bin_values : list of int\n",
" + mean or median fluorescence of the bin in order of data files\n",
" \n",
"**If you want to look for only perfect matches to certain sequences ([see note](#perfect_matches_note))**\n",
"* design_file : str\n",
" + path to a csv with one column headered as \"ArrayDNA\" which contains your 120 bp AD sequences as DNA\n",
" \n",
"NOTE: If you want to count untransformed plasmid, **please add what that tile would look like to your design file.** The length does not matter as long as the sequence covers the end of the read. If you used phasing, include additional seqs for each primer possibility. For example, for pMVS219 backbone phased with 4 R primers, you should add the following:\n",
"* \"GGTTAATTAAGGCGCGCCACTTCTAAATAAGCGATAG\"\n",
"* \"GGTTAATTAAGGCGCGCCACTTCTAAATAAGCGATA\"\n",
"* \"GGTTAATTAAGGCGCGCCACTTCTAAATAAGCGAT\"\n",
"* \"GGTTAATTAAGGCGCGCCACTTCTAAATAAGCGA\"\n",
"\n",
"**NOTE: the read cutoff is 10 reads total summed across all bins** This means that if a tile is not found at least 10 times combined across any of the fastq files, it will not be analysed.\n",
"\n",
"**If your reads differ from default ([see example](#custom_anchor_example))**\n",
"* ad_preceder : str\n",
" + the sequence directly preceding your AD sequence in your reads (anchor sequence)\n",
"\n",
"**If you have barcodes, you need the sequence directly preceding them and anteceding them (anchor sequences), otherwise ignore these. See the example with barcodes below.** \n",
"* bc_preceder : str\n",
"* bc_anteceder : str\n",
"\n",
"#### What you get out\n",
"* a dataframe with your AD tiles as indices, normalized scores for tile at each bin, and the tile Activity value"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Use the sequence directly preceding the AD/tile as an anchor sequence. Additional characters between AD/tile and preceding anchor seqeunce will not work\n",
"\n",
"My preceding anchor sequence is in blue while my AD/tile sequence is in green in this example read.\n",
"\n",
"The anchor sequence preceding the barcode is purple while the anchor sequence anteceding is red. Barcode length is 11 by default. (Not necessary if you don't have barcodes)\n",
"\n",
"##### Example read showing the default values. No need to change anything if your sequence matches the defaults.\n",
"\n",
"TCCCTGCGGGCTCTACTTCATCGGCTAGC**GGTTCTT...CTGCTAAA**TGATAAATAGATGAGGGCCCGTCAACATAGAAGGAGAGAAACATCTAAAAAAGCGATA"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Imports"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"from labtools.adtools import sort"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Initialize a sort"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"my_sort = sort.Sort([\"../exampledata/bin1.fastq\", \"../exampledata/bin2.fastq\", \"../exampledata/bin3.fastq\", \n",
" \"../exampledata/bin4.fastq\"], bin_counts = [100000,100000,100000,100000], \n",
" bin_values = [61,141,251,1462], design_file = \"../exampledata/unique_seqs.csv\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Get activity values"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"activities, total_reads, reads_per_bin = my_sort.process()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" 0 | \n",
" 1 | \n",
" 2 | \n",
" 3 | \n",
" Activity | \n",
"
\n",
" \n",
" \n",
" \n",
" GAAGATCCAACTTGGTTTGATTCTGGTTCTCAATTTATCTTAAATTCTCAACAATTGGTTGAAGCTTTGTCTTTGTGTGATGATGCTGCTGGTTCTCAAGATAGAGAAGAGAATACTAAT | \n",
" 0.251461 | \n",
" 0.288201 | \n",
" 0.460339 | \n",
" 0.000000 | \n",
" 171.520411 | \n",
"
\n",
" \n",
" GAAGCTTTGTCTTTGTGTGATGATTTGTTGGGTGATCAAGATAGAGAAGAGAATGATAATGATGGTGATTTGAAAGATAAACAACCATGTATTGCTGATTATGCTCATTTGGGTCCAGAA | \n",
" 0.097356 | \n",
" 0.519277 | \n",
" 0.343084 | \n",
" 0.040284 | \n",
" 224.165635 | \n",
"
\n",
" \n",
" GATTTGGCTGAAGATGATGAAGTTATGTGTATGGAAGATGAAGTTCAATCTATTCAACCAAATCATGAAAGACCAGATGATGGTCCAGAATTGGAACATGGTTTGGAGAATGGTGCTAAA | \n",
" 0.352021 | \n",
" 0.502035 | \n",
" 0.145944 | \n",
" 0.000000 | \n",
" 128.892233 | \n",
"
\n",
" \n",
" GGTCAAAGGAAGAGAAGGAAGATTACTCCAACTTTGGTTAATGATGAACCAGTTAGATGGCATAAGACTGGTAGAACTAAACCAGTTATGTTGTCTGGTGTTCAAAGAGGTTGTAAGAAA | \n",
" 0.378641 | \n",
" 0.367199 | \n",
" 0.254160 | \n",
" 0.000000 | \n",
" 138.666285 | \n",
"
\n",
" \n",
" TCTGAATTGACTTCTACTTTGGGTATTTCTCATAGATTGCCACAATCTTTGACTCCATGTGTTAAGACTGGTTCTTTGCAATCTGGTGGTTTGGTTCAATCTGTTCCATTTGAAGAATTG | \n",
" 0.330550 | \n",
" 0.278750 | \n",
" 0.390700 | \n",
" 0.000000 | \n",
" 157.533007 | \n",
"
\n",
" \n",
" GAAATGGCTGATGATAAAGAAGAACAAGAGAAAGATAGAGATAATGAGAATCAAGGTGAAGAAGATCCAACTTGGGCTGATTCTGGTGATCAATTTATTGCTAATTCTCAACAATTGGTT | \n",
" 0.361290 | \n",
" 0.420448 | \n",
" 0.218262 | \n",
" 0.000000 | \n",
" 136.105579 | \n",
"
\n",
" \n",
" TCTGAACCACATGTCTTGATTGAAGAATTTATTAGACCAGTTACTGAAGATGTTGGTATTAATTATACTCATCCACAGAATTTGCCAGGTGCTAATAAAGATGGTGTTTCTGTCTTCTTT | \n",
" 0.315398 | \n",
" 0.367040 | \n",
" 0.317562 | \n",
" 0.000000 | \n",
" 150.700019 | \n",
"
\n",
" \n",
" CAATTTATCTTGAATGCTCAACAATTGGTTGAAGCTTTGTCTTTGTGTGATGATTTGTTGGGTTCTCAAGATAGAGAAGAGAATACTAATTCTGGTTCTTTGAAAGATAAACAACCATGT | \n",
" 0.393467 | \n",
" 0.254385 | \n",
" 0.352148 | \n",
" 0.000000 | \n",
" 148.258990 | \n",
"
\n",
" \n",
" ATTATTTGGCATTTGTTGGCTAAATCTGGTTTGTCTGGTTTGTCTTCTCATCCATTTATTGATGAATTTATTCCAACTGTTAATCAAGATGATGGTATTTGTTATACTCATCCTAAGAAT | \n",
" 0.566048 | \n",
" 0.243975 | \n",
" 0.189977 | \n",
" 0.000000 | \n",
" 116.613702 | \n",
"
\n",
" \n",
" AAGAAGAGGAAGAATAAGAATCAAGGTAAGAAGAAACCAACTTGGTTTAAATCTGGTGCTCAATTTATCTTGAATGCTCAACAATTGGTTAAAGCTGCTTCTGCTTGTAAGAAATTGTTG | \n",
" 0.253394 | \n",
" 0.491474 | \n",
" 0.255133 | \n",
" 0.000000 | \n",
" 148.793098 | \n",
"
\n",
" \n",
"
\n"
],
"text/plain": [
""
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# activity + normalized abundance in each bin\n",
"display_df(activities)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"GAAGATCCAACTTGGTTTGATTCTGGTTCTCAATTTATCTTAAATTCTCAACAATTGGTTGAAGCTTTGTCTTTGTGTGATGATGCTGCTGGTTCTCAAGATAGAGAAGAGAATACTAAT 44.0\n",
"GAAGCTTTGTCTTTGTGTGATGATTTGTTGGGTGATCAAGATAGAGAAGAGAATGATAATGATGGTGATTTGAAAGATAAACAACCATGTATTGCTGATTATGCTCATTTGGGTCCAGAA 21.0\n",
"GATTTGGCTGAAGATGATGAAGTTATGTGTATGGAAGATGAAGTTCAATCTATTCAACCAAATCATGAAAGACCAGATGATGGTCCAGAATTGGAACATGGTTTGGAGAATGGTGCTAAA 49.0\n",
"GGTCAAAGGAAGAGAAGGAAGATTACTCCAACTTTGGTTAATGATGAACCAGTTAGATGGCATAAGACTGGTAGAACTAAACCAGTTATGTTGTCTGGTGTTCAAAGAGGTTGTAAGAAA 16.0\n",
"TCTGAATTGACTTCTACTTTGGGTATTTCTCATAGATTGCCACAATCTTTGACTCCATGTGTTAAGACTGGTTCTTTGCAATCTGGTGGTTTGGTTCAATCTGTTCCATTTGAAGAATTG 70.0\n",
" ... \n",
"GACCCAACTGAATGGTTTGATTCTGGTGCTCAATTTATCTTGAATGCTCAACAATTGGTTGAAGCTCAATGTTTGGATGATAATTTGACTAGAGAATTGGAATCTAATGATGGTGCTTTG 23.0\n",
"TCTACTGATTCTACTCCAATGTTTGATTATGATAATTTGGAAGATAATTCTAAAGATTGGACTTCTTTGTTTGATAATGATATTCCAGTTACTACTGATGATGTTTCTTTGGCTGATAAA 24.0\n",
"TCTACTGGTCAAGTCTTGTTTGATATTGATGACTTTAGATGGTTGTTGGATCCAGATGATGAACAATTGGGTAAAGAAGCTATCTTGTCTGATCAATTTGGTAAACCAACTCCAGAGAAT 12.0\n",
"GAAGATCCAACTTCTGATTCTGCTATTCAACAATTGTGGAATCAAGGATTCTTGTTTGTTGAATCTTTGTCTTTGTGTGATGATTTGTTGGGTTCTCAAGATAGAGAAGAGAATACTAAT 11.0\n",
"GAAATTGATCAAATTTCTGATCCAGATAAATTGCCAGTTAATTTGGAACCATTTAGATTGGATCAATTGGAATTTACTGGTGATGATACTTCTGGTGCTGGTTTGAAATTTCAATGGGAT 13.0\n",
"Length: 200, dtype: float64"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# the total reads for each sequence\n",
"total_reads"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
" \n",
" \n",
" | \n",
" 0 | \n",
" 1 | \n",
" 2 | \n",
" 3 | \n",
"
\n",
" \n",
" \n",
" \n",
" GAAGATCCAACTTGGTTTGATTCTGGTTCTCAATTTATCTTAAATTCTCAACAATTGGTTGAAGCTTTGTCTTTGTGTGATGATGCTGCTGGTTCTCAAGATAGAGAAGAGAATACTAAT | \n",
" 11.000000 | \n",
" 13.000000 | \n",
" 20.000000 | \n",
" 0.000000 | \n",
"
\n",
" \n",
" GAAGCTTTGTCTTTGTGTGATGATTTGTTGGGTGATCAAGATAGAGAAGAGAATGATAATGATGGTGATTTGAAAGATAAACAACCATGTATTGCTGATTATGCTCATTTGGGTCCAGAA | \n",
" 2.000000 | \n",
" 11.000000 | \n",
" 7.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" GATTTGGCTGAAGATGATGAAGTTATGTGTATGGAAGATGAAGTTCAATCTATTCAACCAAATCATGAAAGACCAGATGATGGTCCAGAATTGGAACATGGTTTGGAGAATGGTGCTAAA | \n",
" 17.000000 | \n",
" 25.000000 | \n",
" 7.000000 | \n",
" 0.000000 | \n",
"
\n",
" \n",
" GGTCAAAGGAAGAGAAGGAAGATTACTCCAACTTTGGTTAATGATGAACCAGTTAGATGGCATAAGACTGGTAGAACTAAACCAGTTATGTTGTCTGGTGTTCAAAGAGGTTGTAAGAAA | \n",
" 6.000000 | \n",
" 6.000000 | \n",
" 4.000000 | \n",
" 0.000000 | \n",
"
\n",
" \n",
" TCTGAATTGACTTCTACTTTGGGTATTTCTCATAGATTGCCACAATCTTTGACTCCATGTGTTAAGACTGGTTCTTTGCAATCTGGTGGTTTGGTTCAATCTGTTCCATTTGAAGAATTG | \n",
" 23.000000 | \n",
" 20.000000 | \n",
" 27.000000 | \n",
" 0.000000 | \n",
"
\n",
" \n",
" GAAATGGCTGATGATAAAGAAGAACAAGAGAAAGATAGAGATAATGAGAATCAAGGTGAAGAAGATCCAACTTGGGCTGATTCTGGTGATCAATTTATTGCTAATTCTCAACAATTGGTT | \n",
" 5.000000 | \n",
" 6.000000 | \n",
" 3.000000 | \n",
" 0.000000 | \n",
"
\n",
" \n",
" TCTGAACCACATGTCTTGATTGAAGAATTTATTAGACCAGTTACTGAAGATGTTGGTATTAATTATACTCATCCACAGAATTTGCCAGGTGCTAATAAAGATGGTGTTTCTGTCTTCTTT | \n",
" 5.000000 | \n",
" 6.000000 | \n",
" 5.000000 | \n",
" 0.000000 | \n",
"
\n",
" \n",
" CAATTTATCTTGAATGCTCAACAATTGGTTGAAGCTTTGTCTTTGTGTGATGATTTGTTGGGTTCTCAAGATAGAGAAGAGAATACTAATTCTGGTTCTTTGAAAGATAAACAACCATGT | \n",
" 9.000000 | \n",
" 6.000000 | \n",
" 8.000000 | \n",
" 0.000000 | \n",
"
\n",
" \n",
" ATTATTTGGCATTTGTTGGCTAAATCTGGTTTGTCTGGTTTGTCTTCTCATCCATTTATTGATGAATTTATTCCAACTGTTAATCAAGATGATGGTATTTGTTATACTCATCCTAAGAAT | \n",
" 9.000000 | \n",
" 4.000000 | \n",
" 3.000000 | \n",
" 0.000000 | \n",
"
\n",
" \n",
" AAGAAGAGGAAGAATAAGAATCAAGGTAAGAAGAAACCAACTTGGTTTAAATCTGGTGCTCAATTTATCTTGAATGCTCAACAATTGGTTAAAGCTGCTTCTGCTTGTAAGAAATTGTTG | \n",
" 5.000000 | \n",
" 10.000000 | \n",
" 5.000000 | \n",
" 0.000000 | \n",
"
\n",
" \n",
"
\n"
],
"text/plain": [
""
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# the reads of each tile per bin\n",
"display_df(reads_per_bin)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"#### Locate any tiles, not just perfect matches\n",
"If you want to find sequences even if they don't match your designed sequences, simply do not include the design file. A short (less than 120 bp) tile will probably appear with a significant number of reads. This is **probably** your untransformed background (cells transformed with a plasmid that did not get a tile). Most of the non-perfect matching tiles will be sequencing errors. You might find a way to map these back to their true tile. A few of the non-perfect matching tiles (likely those with a significant number of reads) will be sequencing library PCR amplification errors. An even fewer number of the non-perfect matching tiles could be mutants that arose within the actual cell, or free tiles. These will probably have a significant number of reads. Someone may put in the effort to distinguish these categories in the future."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"my_sort = sort.Sort([\"../exampledata/bin1.fastq\", \"../exampledata/bin2.fastq\", \"../exampledata/bin3.fastq\", \n",
" \"../exampledata/bin4.fastq\"], bin_counts = [100000,100000,100000,100000], \n",
" bin_values = [61,141,251,1462])\n",
"activities_no_design, numreads_total, _ = my_sort.process()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
" \n",
" \n",
" | \n",
" 0 | \n",
" 1 | \n",
" 2 | \n",
" 3 | \n",
" Activity | \n",
"
\n",
" \n",
" \n",
" \n",
" GAAGATCCAACTTGGTTTGATTCTGGTTCTCAATTTATCTTAAATTCTCAACAATTGGTTGAAGCTTTGTCTTTGTGTGATGATGCTGCTGGTTCTCAAGATAGAGAAGAGAATACTAAT | \n",
" 0.249091 | \n",
" 0.283698 | \n",
" 0.467211 | \n",
" 0.000000 | \n",
" 172.465991 | \n",
"
\n",
" \n",
" GAAGCTTTGTCTTTGTGTGATGATTTGTTGGGTGATCAAGATAGAGAAGAGAATGATAATGATGGTGATTTGAAAGATAAACAACCATGTATTGCTGATTATGCTCATTTGGGTCCAGAA | \n",
" 0.096596 | \n",
" 0.512002 | \n",
" 0.348777 | \n",
" 0.042625 | \n",
" 227.945173 | \n",
"
\n",
" \n",
" GATTTGGCTGAAGATGATGAAGTTATGTGTATGGAAGATGAAGTTCAATCTATTCAACCAAATCATGAAAGACCAGATGATGGTCCAGAATTGGAACATGGTTTGGAGAATGGTGCTAAA | \n",
" 0.351864 | \n",
" 0.498670 | \n",
" 0.149466 | \n",
" 0.000000 | \n",
" 129.292147 | \n",
"
\n",
" \n",
" GGTTAATTAAGGCGCGCCACTTCTAAATAAGCGA | \n",
" 0.210811 | \n",
" 0.528218 | \n",
" 0.260971 | \n",
" 0.000000 | \n",
" 152.841957 | \n",
"
\n",
" \n",
" GGTCAAAGGAAGAGAAGGAAGATTACTCCAACTTTGGTTAATGATGAACCAGTTAGATGGCATAAGACTGGTAGAACTAAACCAGTTATGTTGTCTGGTGTTCAAAGAGGTTGTAAGAAA | \n",
" 0.377151 | \n",
" 0.363465 | \n",
" 0.259384 | \n",
" 0.000000 | \n",
" 139.360114 | \n",
"
\n",
" \n",
" TCTGAATTGACTTCTACTTTGGGTATTTCTCATAGATTGCCACAATCTTTGACTCCATGTGTTAAGACTGGTTCTTTGCAATCTGGTGGTTTGGTTCAATCTGTTCCATTTGAAGAATTG | \n",
" 0.327972 | \n",
" 0.274844 | \n",
" 0.397184 | \n",
" 0.000000 | \n",
" 158.452427 | \n",
"
\n",
" \n",
" GAAATGGCTGATGATAAAGAAGAACAAGAGAAAGATAGAGATAATGAGAATCAAGGTGAAGAAGATCCAACTTGGGCTGATTCTGGTGATCAATTTATTGCTAATTCTCAACAATTGGTT | \n",
" 0.360305 | \n",
" 0.416677 | \n",
" 0.223018 | \n",
" 0.000000 | \n",
" 136.707585 | \n",
"
\n",
" \n",
" TCTGAACCACATGTCTTGATTGAAGAATTTATTAGACCAGTTACTGAAGATGTTGGTATTAATTATACTCATCCACAGAATTTGCCAGGTGCTAATAAAGATGGTGTTTCTGTCTTCTTT | \n",
" 0.313669 | \n",
" 0.362744 | \n",
" 0.323586 | \n",
" 0.000000 | \n",
" 151.500974 | \n",
"
\n",
" \n",
" CAATTTATCTTGAATGCTCAACAATTGGTTGAAGCTTTGTCTTTGTGTGATGATTTGTTGGGTTCTCAAGATAGAGAAGAGAATACTAATTCTGGTTCTTTGAAAGATAAACAACCATGT | \n",
" 0.390706 | \n",
" 0.251019 | \n",
" 0.358275 | \n",
" 0.000000 | \n",
" 149.153731 | \n",
"
\n",
" \n",
" ATTATTTGGCATTTGTTGGCTAAATCTGGTTTGTCTGGTTTGTCTTCTCATCCATTTATTGATGAATTTATTCCAACTGTTAATCAAGATGATGGTATTTGTTATACTCATCCTAAGAAT | \n",
" 0.564274 | \n",
" 0.241688 | \n",
" 0.194038 | \n",
" 0.000000 | \n",
" 117.202291 | \n",
"
\n",
" \n",
"
\n"
],
"text/plain": [
""
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"display_df(activities_no_design)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"GAAGATCCAACTTGGTTTGATTCTGGTTCTCAATTTATCTTAAATTCTCAACAATTGGTTGAAGCTTTGTCTTTGTGTGATGATGCTGCTGGTTCTCAAGATAGAGAAGAGAATACTAAT 44.0\n",
"GAAGCTTTGTCTTTGTGTGATGATTTGTTGGGTGATCAAGATAGAGAAGAGAATGATAATGATGGTGATTTGAAAGATAAACAACCATGTATTGCTGATTATGCTCATTTGGGTCCAGAA 21.0\n",
"GATTTGGCTGAAGATGATGAAGTTATGTGTATGGAAGATGAAGTTCAATCTATTCAACCAAATCATGAAAGACCAGATGATGGTCCAGAATTGGAACATGGTTTGGAGAATGGTGCTAAA 49.0\n",
"GGTTAATTAAGGCGCGCCACTTCTAAATAAGCGA 24.0\n",
"GGTCAAAGGAAGAGAAGGAAGATTACTCCAACTTTGGTTAATGATGAACCAGTTAGATGGCATAAGACTGGTAGAACTAAACCAGTTATGTTGTCTGGTGTTCAAAGAGGTTGTAAGAAA 16.0\n",
" ... \n",
"TCTACTGATTCTACTCCAATGTTTGATTATGATAATTTGGAAGATAATTCTAAAGATTGGACTTCTTTGTTTGATAATGATATTCCAGTTACTACTGATGATGTTTCTTTGGCTGATAAA 24.0\n",
"TCTACTGGTCAAGTCTTGTTTGATATTGATGACTTTAGATGGTTGTTGGATCCAGATGATGAACAATTGGGTAAAGAAGCTATCTTGTCTGATCAATTTGGTAAACCAACTCCAGAGAAT 12.0\n",
"AATACTCCAACTCCACCATCTTTGGTTGATGGTGTTGCTGGTGATGAAGAAGCATTTGATGAGATGTTTGATCCATTCTTTGAAGAATTGGATTCTATTCCAGAAGCTGCTTTGTGATAA 14.0\n",
"GAAGATCCAACTTCTGATTCTGCTATTCAACAATTGTGGAATCAAGGATTCTTGTTTGTTGAATCTTTGTCTTTGTGTGATGATTTGTTGGGTTCTCAAGATAGAGAAGAGAATACTAAT 11.0\n",
"GAAATTGATCAAATTTCTGATCCAGATAAATTGCCAGTTAATTTGGAACCATTTAGATTGGATCAATTGGAATTTACTGGTGATGATACTTCTGGTGCTGGTTTGAAATTTCAATGGGAT 13.0\n",
"Length: 220, dtype: float64"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"numreads_total"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Get data for reads that include barcodes AND tiles\n",
"Support for barcoded only data may or may not be added in the future."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"activities_barcoded, total_reads, reads_per_bin = my_sort.process(barcoded = True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that you get back less tiles using this method. The reason for this is because the read must have a locatable barcode AND tile, which is less likely than having one or the other. The primary reason for doing this analysis is assessing per-transformant variation. The assumption is that unique tile-barcode pairs come from unique original transformants."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
" \n",
" \n",
" | \n",
" | \n",
" 0 | \n",
" 1 | \n",
" 2 | \n",
" 3 | \n",
" Activity | \n",
"
\n",
" \n",
" \n",
" \n",
" GAAGATCCAACTTGGTTTGATTCTGGTTCTCAATTTATCTTAAATTCTCAACAATTGGTTGAAGCTTTGTCTTTGTGTGATGATGCTGCTGGTTCTCAAGATAGAGAAGAGAATACTAAT | \n",
" ATCGTTACGTC | \n",
" 0.266147 | \n",
" 0.298408 | \n",
" 0.435445 | \n",
" 0.000000 | \n",
" 167.607130 | \n",
"
\n",
" \n",
" GATTTGGCTGAAGATGATGAAGTTATGTGTATGGAAGATGAAGTTCAATCTATTCAACCAAATCATGAAAGACCAGATGATGGTCCAGAATTGGAACATGGTTTGGAGAATGGTGCTAAA | \n",
" GGAAGGTAGTA | \n",
" 0.220979 | \n",
" 0.545081 | \n",
" 0.233940 | \n",
" 0.000000 | \n",
" 149.055134 | \n",
"
\n",
" \n",
" TCTGAATTGACTTCTACTTTGGGTATTTCTCATAGATTGCCACAATCTTTGACTCCATGTGTTAAGACTGGTTCTTTGCAATCTGGTGGTTTGGTTCAATCTGTTCCATTTGAAGAATTG | \n",
" GAGACCAAATC | \n",
" 0.306310 | \n",
" 0.276763 | \n",
" 0.416927 | \n",
" 0.000000 | \n",
" 162.357171 | \n",
"
\n",
" \n",
" GAAATGGCTGATGATAAAGAAGAACAAGAGAAAGATAGAGATAATGAGAATCAAGGTGAAGAAGATCCAACTTGGGCTGATTCTGGTGATCAATTTATTGCTAATTCTCAACAATTGGTT | \n",
" GGCAAAAGGCT | \n",
" 0.425497 | \n",
" 0.484412 | \n",
" 0.090091 | \n",
" 0.000000 | \n",
" 116.870239 | \n",
"
\n",
" \n",
" AAGAAGAGGAAGAATAAGAATCAAGGTAAGAAGAAACCAACTTGGTTTAAATCTGGTGCTCAATTTATCTTGAATGCTCAACAATTGGTTAAAGCTGCTTCTGCTTGTAAGAAATTGTTG | \n",
" CGCATGGGCAC | \n",
" 0.252775 | \n",
" 0.479624 | \n",
" 0.267601 | \n",
" 0.000000 | \n",
" 150.214165 | \n",
"
\n",
" \n",
" AATCATGAAAGACCATCTTCTGGTCCAGAAGCTGAACATGGTTTGGAGAATGGTGCTAAAGAAATGGCTGATGATAAAGAAGAACAAGAGAAAGATAGAGATAATGAGAATCAAGGTGAA | \n",
" ACACAAACCAT | \n",
" 0.737589 | \n",
" 0.262411 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 81.992908 | \n",
"
\n",
" \n",
" AAAGATAGAGATAATGAGAATCAAGGTGAAGAAGATCCAACTGCATTTGATTCTGGTTCTCAAGCTATCTTGAATGCTCAACAAGCTGTTGAAGCTTTGTCTGCTTGTGATGATTTGGCT | \n",
" GGTTATTGTCG | \n",
" 0.266923 | \n",
" 0.379852 | \n",
" 0.353225 | \n",
" 0.000000 | \n",
" 158.500845 | \n",
"
\n",
" \n",
" CCATCTGATTATGTTTCTGCTCATGAAGTTTCTTTGGCTGAAACTTCTGAAGTTATGTGTATGGAAGATGAAGTTCAATCTATTCAACCAAATCATGAAAGACCATCTTCTGGTCCAGAA | \n",
" GCTTCACTTCC | \n",
" 0.155332 | \n",
" 0.515782 | \n",
" 0.328886 | \n",
" 0.000000 | \n",
" 164.750908 | \n",
"
\n",
" \n",
" ATTGCTGATGCTGCTCATTTGGGTCCAGAAGATGCTAAGAGAGATTTGGAAGAATGTCAGAAGATTGTTGCTGATCCATCTAATATTGAATTGGATGATCCACCAGAAGCTAGATTGGAT | \n",
" AATGCATAAAC | \n",
" 0.451797 | \n",
" 0.428628 | \n",
" 0.119574 | \n",
" 0.000000 | \n",
" 118.009397 | \n",
"
\n",
" \n",
" GACCCAGTTGATCCTAAATTGGCTGATCCAGAACCAAGAAATGCTGTTAGAATTTGTGATGATGATCATATTGCTGATGATGAAGTTGATCCAGATGATGAAGTTGATGCTCATGAAGTT | \n",
" GCTCAGTAACC | \n",
" 0.376720 | \n",
" 0.357401 | \n",
" 0.265878 | \n",
" 0.000000 | \n",
" 140.108949 | \n",
"
\n",
" \n",
"
\n"
],
"text/plain": [
""
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"display_df(activities_barcoded)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"### Support for custom anchor sequences\n",
"If your tiles or barcodes have a custom anchor sequence (AKA the non-variable portion of the read that is used to locate the variable portion of the read), you can specify that in the kwargs of your Sort(). This passes the arguments to the pull_AD() function used on each read to locate the sequence of interest (AKA AD or tile). "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Use the sequence directly preceding the AD/tile as an anchor sequence. Additional characters between AD/tile and preceding anchor seqeunce will not work\n",
"\n",
"My preceding anchor sequence is in blue while my AD/tile sequence is in green in this example read.\n",
"\n",
"The anchor sequence preceding the barcode is purple while the anchor sequence anteceding is red. Barcode length is 11 by default. (Not necessary if you don't have barcodes)\n",
"\n",
"##### Example read\n",
"\n",
"TCCCTGCGGGCTCTACTTCATCGGCTAGC**GGTTCTT...CTGCTAAA**TGATAAATAGATGAGGGCCCGTCAACATAGAAGGAGAGAAACATCTAAAAAAGCGATA"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Specify alternate values in a dictionary and pass that dictionary to Sort.process()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"# these are the default values which would work for my example read above\n",
"# no input is required if they work for you\n",
"kwargs = {\"ad_preceder\":\"GCTAGC\", \"bc_preceder\":\"GGGCCCG\", \"bc_anteceder\":\"GGAGAGAA\", \"bclength\":11, \"ad_length\":120}"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"activities_barcoded, _, _ = my_sort.process(barcoded = True, **kwargs)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"pd.set_option('display.max_colwidth', 1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Example output for pull_AD\n",
"This might be useful for someone who wants to use pull_AD to analyze reads for a purpose outside of calculating activities. "
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"from labtools.adtools.finder import pull_AD"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"('GGTTCTTCTAAATTGAGATGTGATAATAATGCTGCTGCTCATGTTAAATTGGATTCATTTCCAGCTGGTGTTAGATTTGATACATCTGATGAAGAATTGTTGGAACATTTGGCTGCTAAA',\n",
" 'TCAACATAGAA')"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"read = \"TCCCTGCGGGCTCTACTTCATCGGCTAGCGGTTCTTCTAAATTGAGATGTGATAATAATGCTGCTGCTCATGTTAAATTGGATTCATTTCCAGCTGGTGTTAGATTTGATACATCTGATGAAGAATTGTTGGAACATTTGGCTGCTAAATGATAAATAGATGAGGGCCCGTCAACATAGAAGGAGAGAAACATCTAAAAAAGCGATA\"\n",
"pull_AD(read, kwargs)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Counting tiles in a fastq file\n",
"This essentially applies the pull_AD function shown above to every read in the fastq file. You can also pass the kwargs dict to it to specify custom anchor sequences. "
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"GGTTCTTCTAAATTGAGATGTGATAATAATGCTGCTGCTCATGTTAAATTGGATTCATTTCCAGCTGGTGTTAGATTTGATACATCTGATGAAGAATTGTTGGAACATTTGGCTGCTAAA 1\n",
"GAAGAATTGTTTTTACATTTGTCTGCTAAGATTGGTAGATCTTCTAGGAAACCACATCCATTCTTGGATGAATTTATTCATACTTTGGTTGAAGAAGATGGTATTTGTAGAACTCATCCA 3\n",
"dtype: int64"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from labtools.adtools.counter import seq_counter\n",
"seq_counter(\"../exampledata/mini.fastq\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Use barcoded = True to count tile and barcode pairs\n",
"- Use the design_file flag to look for specific tiles"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"GAAGATCCAACTTGGTTTGATTCTGGTTCTCAATTTATCTTAAATTCTCAACAATTGGTTGAAGCTTTGTCTTTGTGTGATGATGCTGCTGGTTCTCAAGATAGAGAAGAGAATACTAAT ATCGTTACGTC 11.0\n",
"GAAGCTTTGTCTTTGTGTGATGATTTGTTGGGTGATCAAGATAGAGAAGAGAATGATAATGATGGTGATTTGAAAGATAAACAACCATGTATTGCTGATTATGCTCATTTGGGTCCAGAA ACCATTTAGCG 1.0 \n",
"GATTTGGCTGAAGATGATGAAGTTATGTGTATGGAAGATGAAGTTCAATCTATTCAACCAAATCATGAAAGACCAGATGATGGTCCAGAATTGGAACATGGTTTGGAGAATGGTGCTAAA GGAAGGTAGTA 5.0 \n",
"GGTCAAAGGAAGAGAAGGAAGATTACTCCAACTTTGGTTAATGATGAACCAGTTAGATGGCATAAGACTGGTAGAACTAAACCAGTTATGTTGTCTGGTGTTCAAAGAGGTTGTAAGAAA TAGCTCAAACC 4.0 \n",
"TCTGAATTGACTTCTACTTTGGGTATTTCTCATAGATTGCCACAATCTTTGACTCCATGTGTTAAGACTGGTTCTTTGCAATCTGGTGGTTTGGTTCAATCTGTTCCATTTGAAGAATTG GAGACCAAATC 21.0\n",
" ... \n",
"CAAGCTATTGCTAATGATCAACAAGCTGTTGAAGCTGCTTCTGCTTGTGATGATGCTGCTGGTTCTCAAGATAGAGAAGAGAATACTAATTCTGGTTCTGCTAAAGATAAACAACCATGT TCGTCTGACAC 1.0 \n",
"AAAGATAGAGATAATGAGAATCAAGGTGAAGAAGATCCAACTTGGTTTGATTCTGGTTCTCAATTTATCTTGAATGCTCAACAATTGGTTGAAGCTTTGTCTTTGTGTGATGATTTGTTG TTCTTTCCCTA 1.0 \n",
"CATTTGGGTATTGAAGAAGATGAGAAAGAAGGTGATGAAGTTGTTTCTAAGATCTTCTATCAACAACCACAACAATTGGTTGTTAAGAGAGGTGATAAAGCTGAACAAGAAGTTGATGAA ACTCCCCGCAA 1.0 \n",
"GAAGATCCAACTGCATTTGATTCTGGTGATCAAGCTATCTTGAATGATCAACAAGCTGTTGAAGCTTTGTCTGCTTGTGATGATTTGGCTGGTTCTCAAGATAGAGAAGAGAATACTAAT GGTTGAAGTGC 1.0 \n",
"GAAGAAACTGTTGTCTTGCCACCATCTGTTAAGACTACTAAAGATGGTGATAATTTGCAATCTCAAGATCAGAAATTGTGGGAAGGTGATTCTCAATTTGAATTGTTGGATTCTCAACAA ACCACCGACGA 1.0 \n",
"Length: 684, dtype: float64"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"counts = seq_counter(\"../exampledata/bin1.fastq\", barcoded = True, design_to_use=\"../exampledata/unique_seqs.csv\")\n",
"counts"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Sequence Design Tools"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Imports"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"from labtools import shuffle"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Shuffle a sequence\n",
"\n",
"Create shuffles of the alphabet:"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"['adcbeFGHIJKLMNOPQRSTUVWYXZ',\n",
" 'AcbedfGHIJKLMNOPQRSTUVWYXZ',\n",
" 'ABgcefdHIJKLMNOPQRSTUVWYXZ',\n",
" 'ABCdhfegIJKLMNOPQRSTUVWYXZ',\n",
" 'ABCDfigheJKLMNOPQRSTUVWYXZ',\n",
" 'ABCDEfhjigKLMNOPQRSTUVWYXZ',\n",
" 'ABCDEFgkhjiLMNOPQRSTUVWYXZ',\n",
" 'ABCDEFGihljkMNOPQRSTUVWYXZ',\n",
" 'ABCDEFGHjmkilNOPQRSTUVWYXZ',\n",
" 'ABCDEFGHIknjlmOPQRSTUVWYXZ',\n",
" 'ABCDEFGHIJlnomkPQRSTUVWYXZ',\n",
" 'ABCDEFGHIJKlmnpoQRSTUVWYXZ',\n",
" 'ABCDEFGHIJKLqnmpoRSTUVWYXZ',\n",
" 'ABCDEFGHIJKLMopnqrSTUVWYXZ',\n",
" 'ABCDEFGHIJKLMNqorpsTUVWYXZ',\n",
" 'ABCDEFGHIJKLMNOtqsrpUVWYXZ',\n",
" 'ABCDEFGHIJKLMNOPtsruqVWYXZ',\n",
" 'ABCDEFGHIJKLMNOPQuvtsrWYXZ',\n",
" 'ABCDEFGHIJKLMNOPQRwuvstYXZ',\n",
" 'ABCDEFGHIJKLMNOPQRSvtwyuXZ',\n",
" 'ABCDEFGHIJKLMNOPQRSTxvyuwZ',\n",
" 'ABCDEFGHIJKLMNOPQRSTUzvywx']"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"shuffles_list, names_list = shuffle.windowed_shuffle(\"ABCDEFGHIJKLMNOPQRSTUVWYXZ\")\n",
"shuffles_list"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Predictors (coming soon?)"
]
}
],
"metadata": {
"celltoolbar": "Raw Cell Format",
"kernelspec": {
"display_name": "bioinformatics",
"language": "python",
"name": "bioinformatics"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
}
},
"nbformat": 4,
"nbformat_minor": 4
}