{
"info": {
"author": "Ping Wu",
"author_email": "wpwupingwp@outlook.com",
"bugtrack_url": null,
"classifiers": [
"Development Status :: 4 - Beta",
"Intended Audience :: Developers",
"Intended Audience :: Science/Research",
"License :: OSI Approved :: GNU Affero General Public License v3",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Topic :: Scientific/Engineering :: Bio-Informatics"
],
"description": "# Table of Contents\n * [Background](#background)\n * [Introduction](#introduction)\n * [Function](#function)\n * [Application](#application)\n * [Prerequisite](#prerequisite)\n * [Software](#software)\n * [Python module](#python-module)\n * [Internet](#internet)\n * [Installation](#installation)\n * [Usage](#usage)\n * [Quick examples](#quick-examples)\n * [Input](#input)\n * [Sequence ID](#sequence-id)\n * [Output](#output)\n * [Options](#options)\n * [Help](#help)\n * [General](#general)\n * [Genbank](#genbank)\n * [Pre-process](#preprocess)\n * [Evaluate](#evaluate)\n * [Primer Design](#primer-design)\n * [Performance](#performance)\n# Background\nDNA barcoding is a molecular phylogenetic method that uses a standard DNA\nsequence to identify species. By comparing sequences of specific regions to an\nexisting reference database, samples can be identified with respect to\nspecies, genus, family or higher taxonomy rank.\n\nCompared to morphological identification, DNA barcoding has these advantages:\n\n* DNA sequences can offer many more characters for identification;\n* requires small sample (mg level);\n* samples can be of any form as long as they contain DNA; and\n* can identify mixed samples.\n\nHowever, it also has limitations:\n\n* requires a high-quality reference database\n* existing DNA barcodes show poor performance at the species level; and\n* different DNA barcodes may conflict with each other in specific taxonomic\n groups.\n\nTo date, DNA barcoding has been used widely in:\n\n* identifying species for research, food safety, customs inspections, criminal\n detection, forensic analyses, quality control of medicine, and so\n forth;\n* identifying mixed samples (soil, water, air, intestinal contents, and so on)\n for research purposes, environmental surveys, medical analyses, and so\n forth;\n* species classification, for determining relationships of species, delimiting\n cryptic species and validating morphological identification; and\n* species descriptions can be supplied as supplementary information for\n specimen vouchers.\n\n# Introduction\n## Function\nBarcodeFinder can discover novel DNA barcodes with universal\nprimers automatically. It does three things:\n* Collects data\n\n It can retrieve data automatically from the NCBI Genbank, using\n restrictions that the user provides, such as gene name, taxonomy, sequence\n name and organelle. Also, it can integrate sequences or alignments that\n users provide.\n* Pre-processes data\n\n BarcodeFinder utilises annotation information in data to divide sequences\n into fragments (gene, spacer, miscellaneous features) because the data\n collected from Genbank may not be \"uniform\". For instance, it is possible\n to find a gene's upstream and downstream sequences in one record, but only\n the gene sequence in another record. The situation is worse for intergenic\n spacers due to various annotation styles which may cause trouble in the\n analysis to follow.\n\n Given that one gene or spacer for each species may be sequenced several\n times, by default, BarcodeFinder removes redundant sequences, leaving only\n one record for each species. This behaviour can be changed as desired.\n Then, _MAFFT_ is called for alignment. Each sequence's direction is\n adjusted, and all sequences are reordered.\n* Analyse\n\n Firstly, BarcodeFinder evaluates the variance of each alignment by\n calculating Pi, the Shannon Index, the observed resolution, the tree\n resolution and the average terminal branch length. If the result is lower\n than the given threshold, i.e., it does not have sufficient resolution,\n then this alignment will be skipped.\n\n Next, a sliding-window scan will be performed for those alignments that\n pass the test. The high-variance region (variance \"hotspot\") is picked,\n and its upstream/downstream regions are used to find primers.\n\n The consensus sequences of those conserved regions for finding primers are\n generated, and with the help of _Primer3_, candidate primers are selected.\n After BLAST validation, suitable primers are combined to form several\n primer pairs. Given the limit of the PCR product's length, only pairs with\n desired length are left. Note that gaps are removed to calculated real\n length instead of the alignment length. The resolution of the\n sub-alignment is then recalculated to remove false-positive primer pairs.\n\n Finally, primer pairs are reordered by score to make it easy for the user\n to find the \"best\" primer pairs.\n## Application\nBarcodeFinder could be used to:\n* Collect data from Genbank. Full-support of Genbank's query syntax and\n optimization of download process make it easy for usage.\n* Convert gb file to fasta. The software make good use of annotation in gb\n file to generate well-organized fasta files. Particularly, the extraction of\n complete taxonomy ranks can be extremely useful for *phylogenetic\n researchers*.\n* Clean data. Various strategies are offered to remove redundant sequences.\n Several filters are also provided to pick out abnormal sequences.\n* Evaluate sequence polymorphism. Supports kinds of methods to calculate\n variance of whole alignment and to mark high-variance region. Compatible\n with ambiguous base and gap. Utilizes phylogenetic method to provide robust\n result.\n* Design universal primer. Abundant options, smart algorithm and strict\n validation result in reliable primers.\n* Discover novel DNA barcode for specific taxa. Automatic and high-efficient\n process could significantly reduce researchers work to find new barcodes.\n# Prerequisite\n## Hardware\nBarcodeFinder requires few computational resources. A normal PC/laptop is good\nenough. For a huge analysis that covers a large taxonomic group, a better\ncomputer may save time.\n## Software\n* Python3 (3.5 or above)\n* BLAST+\n* IQ-TREE\n* MAFFT\n## Python module\n* Biopython\n* coloredlogs\n* matplotlib\n* numpy\n* primer3-py\n## Internet\nThe data retrieval function requires an Internet connection. Please ensure a\nstable network and reasonable Internet traffic charge for downloading\nlarge-sized data sets.\n# Installation\nWe assume that users have already installed [Python3](https://www.python.org/downloads/) (3.5 or above).\n**For Windows user, please use Python 3.6 or 3.7 if failed to install dependent packages.**\n\nFirstly, install BarcodeFinder.\n\nThe easiest way to do so is to use pip. Make sure pip is not out of date (18.0 or\nnewer), then\n```\n# As administator\npip3 install BarcodeFinder\n# Normal user\npip3 install BarcodeFinder --user\n```\nFor some versions of Python (e.g. Python 3.7 or above), pip may ask the user\nto provide a compiler. If a user does not have a compiler (especially Windows\nusers), we recommend [this](https://www.lfd.uci.edu/~gohlke/pythonlibs/)\nwebsite. Users can download the compiled wheel file and use pip to install it:\n```\n# As administator\npip3 install wheel_file_name\n# Normal user\npip3 install wheel_file_name --user\n```\nSecondly, users need to install the dependent software. BarcodeFinder has an\nassistant function to install dependent software automatically if it cannot\nfind the software, i.e., users can skip this step if they wish. However, it is\n*highly recommended* that the official installation procedure be followed for\nease of management and a clean working directory.\n\nTo avoid this, **please try to use Python 3.6.**\n\nFor Linux users with root privileges, just use the package manager:\n```\n# Ubuntu and Debian\nsudo apt install mafft ncbi-blast+ iqtree\n# Fedora (1)\nsudo dnf install mafft ncbi-blast+ iqtree\n# Fedora (2)\nsudo yum install mafft ncbi-blast+ iqtree\n# ArchLinux\nsudo pacman -S mafft ncbi-blast+ iqtree\n# FreeBSD\nsudo pkg install mafft ncbi-blast+ iqtree\n```\nFor MacOS users with root privileges, install *brew* if it has not been\ninstalled previously:\n```\n/usr/bin/ruby -e \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)\"\n```\nIf any errors occur, install Xcode from the App Store and retry.\n\nThen:\n```\nbrew install blast mafft brewsci/science/iqtree\n```\nIf using Windows or lacking root privileges, users should follow these\ninstructions:\n1. BLAST+\n\n * [Windows](https://www.ncbi.nlm.nih.gov/books/NBK52637/)\n * [Linux and MacOS](https://www.ncbi.nlm.nih.gov/books/NBK52640/)\n2. MAFFT\n\n * [Windows](https://mafft.cbrc.jp/alignment/software/windows.html)\n\n Choose \"All-in-one version\", download and unzip. Then follow the steps\n in the BLAST+ installation manual to set the _PATH_.\n * [Linux](https://mafft.cbrc.jp/alignment/software/linux.html)\n\n Choose \"Portable package\", download and unzip. Then follow the\n instructions of BLAST+ to set the _PATH_ for *MAFFT*.\n * [MacOS](https://mafft.cbrc.jp/alignment/software/macosx.html)\n\n Choose \"All-in-one version\", download and unzip. Then follow the steps\n in the BLAST+ installation manual to set the _PATH_.\n3. IQ-TREE\n\n * [Download](http://www.iqtree.org/#download)\n\n Download the installer according to OS. Unzip and add the path of\n subfolder *bin* to _PATH_.\n# Usage\nBarcodeFinder is a command line program. Once a user opens the command line\n(Windows) or terminal (Linux and MacOS), just type the command:\n```\n# Windows\npython -m BarcodeFinder [input] -[options] -out [out_folder]\n# Linux and MacOS\npython3 -m BarcodeFinder [input] -[options] -out [out_folder]\n```\n## Quick examples\n1. Download all _rbcL_ sequences of plants(viridiplantae) and do pre-process.\n```\n# Windows\npython -m BarcodeFinder -gene rbcL -taxon Viridiplantae -stop 1 -out rbcL_all_plant\n# Linux and macOS\npython3 -m BarcodeFinder -gene rbcL -taxon Viridiplantae -stop 1 -out rbcL_all_plant\n```\n2. Download all ITS sequences of _Rosa_. Do pre-process and keep redundant\n sequences:\n```\n# Windows\npython -m BarcodeFinder -query internal transcribed spacer -taxon Rosa -stop 1 -out Rosa_its -uniq no\n# Linux and macOS\npython3 -m BarcodeFinder -query internal transcribed spacer -taxon Rosa -stop 1 -out Rosa_its -uniq no\n```\n3. Download all Poaceae chloroplast genome sequences in the RefSeq database,\n plus one's own data. Then do pre-process and evaluation of variance (skip\n primer\n design):\n```\n# Windows\npython -m BarcodeFinder -og cp -refseq -taxon Poaceae -out Poaceae_cpg -fasta my_data.fasta -stop 2\n# Linux and macOS\npython3 -m BarcodeFinder -og cp -refseq -taxon Poaceae -out Poaceae_cpg -fasta my_data.fasta stop 2\n```\n4. Download sequences of _Zea mays_, set length between 100 bp and 3000 bp,\n plus one's aligned data, and then run a full analysis:\n```\n# Windows\npython -m BarcodeFinder -taxon \"Zea mays\" -min_len 100 -max_len 3000 -out Zea_mays -aln my_data.aln\n# Linux and macOS\npython3 -m BarcodeFinder -taxon \"Zea mays\" -min_len 100 -max_len 3000 -out Zea_mays -aln my_data.aln\n```\n5. Download all _Oryza_ chloroplast genomes (not only in RefSeq database),\n keep the longest sequence for each species and run a full analysis:\n```\n# Windows\npython -m BarcodeFinder -taxon Oryza -og cp -min_len 50000 -max_len 500000 -uniq longest -out Oryza_cp\n# Linux and macOS\npython3 -m BarcodeFinder -taxon Oryza -og cp -min_len 50000 -max_len 500000 -uniq longest -out Oryza_cp\n```\n## Input\nBarcodeFinder accepts:\n1. Genbank queries. Users can use \"-query\" or combine with other filters;\n2. unaligned fasta files. Each file is considered one locus when evaluating\n the variance;\n3. alignments (fasta format); and\n4. Genbank format files.\n\nNote that ambiguous bases are allowed in sequence. If users want to use \"\\*\"\nor \"?\" to represent a series of files, they should make sure to use quotation\nmarks. For example, \"\\*.fasta\" (include quotation marks) means all fasta files\nin the folder.\n## Sequence ID\nBarcodeFinder uses a uniform sequence ID for all fasta files that it generates.\n```\nSeqName|Kingdom|Phylum|Class|Order|Family|Genus|Species|Accession|SpecimenID|Type\n# example\nrbcL|Poales|Poaceae|Oryza|longistaminata|MF998442|TAN:GB60B-2014|\n```\nThe order of the fields is fixed. The fields are separated by vertical bars\n(\"|\"). The space character (\" \") was disallowed and was replaced by an\nunderscore (\"\\_\"). Due to missing data, some fields may be empty. \n* SeqName\n\n SeqName refers to the name of a sequence. Usually it is the gene name. For\n intergenic spacer, an underscore (\"\\_\") is used to connect two gene's\n names, e.g., \"geneA_geneB\".\n\n If a valid sequence name cannot be found in the annotations of the Genbank\n file, BarcodeFinder will use \"Unknown\" instead.\n\n For chloroplast genes, if \"-rename\" option is set, the program will try to\n use regular expressions to fix potential errors in gene names.\n* Kingdom\n\n The kingdom (_Fungi, Viridiplantae, Metazoa_) of a species. For convenience,\n a superkingdom (_Bacteria, Archaea, Eukaryota, Viruses, Viroids_) may be used\n if the kingdom information for a sequence is missing.\n* Phylum\n\n The phylum of the species.\n* Class\n\n The class of the species.\n\n Because some species' classes are left emtpy (for instance, basal\n angiosperm) in the cases of plants, BarcodeFinder will guess the class of the\n species.\n\n Given the taxonomy information in Genbank file:\n ```\n Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta;\n Spermatophyta; Magnoliophyta; basal Magnoliophyta; Amborellales;\n Amborellaceae; Amborella.\n ```\n BarcodeFinder will use \"basal Magnoliophyta\" as the class because this\n expression is located before the order (\"Amborellales\").\n\n* Order\n\n The order name of the species.\n* Family\n\n The family name of the species.\n* Genus\n\n The genus name of the species, i.e., the first part of the scientific\n name.\n* Species\n\n The specific epithet of the species, i.e., the second part of the\n scientific name of the species. It may contains the subspecies' name.\n* Accession\n\n The Genbank Accession number for the sequence. It does not contain the\n record's version.\n* SpecimenID\n\n The ID of the specimen of the sequence. Usually this value is empty.\n* Type\n\n The type of the sequence. Could be \"gene\", \"spacer\", \"intron\" or else.\n## Output\nAll results will be put in the output folder. If the user does not set the\noutput path via \"-out\", BarcodeFinder will create a folder labelled \"Result\".\n* _a_.gb\n\n The raw Genbank file. The _a_ comes from the query's keyword.\n* _a_.gb.plus\n\n The raw Genbank file plus extended annotations for spacers and introns.\n* _a_.fasta\n\n The converted fasta file of the \".gb\" file.\n* _b_.primer.csv\n\n The list of primer pairs in CSV (comma-separated values text) format. The\n _b_ is the name of the locus/fragment (usually a gene or spacer).\n\n Its title:\n ```\n Locus,Score,Samples,AvgProductLength,StdEV,MinProductLength,MaxProductLength,Coverage,Resolution,TreeValue,AvgTerminalBranchLen,Entropy,LeftSeq,LeftTm,LeftAvgBitscore,LeftAvgMismatch,RightSeq,RightTm,RightAvgBitscore,RightAvgMismatch,DeltaTm,AlnStart,AlnEnd,AvgSeqStart,AvgSeqEnd\n ```\n\n * Locus\n\n The name of the locus/fragment.\n * Score\n\n The score of this pair of primers. Usually the higher, the better.\n * Samples\n\n The number of sequences which were used to find this pair of primers.\n\n * AvgProductLength\n\n The average length of the DNA fragment amplified by this pair of\n primers.\n * StdEV\n\n The standard deviation of the AvgProductLength. A higher number means\n the primer may amplify different lengths of DNA fragments.\n * MinProductLength\n\n The minimum length of an amplified fragment.\n * MaxProductLength\n\n The maximum length of an amplified fragment. Note that all of these\n fields are calculated using given sequences.\n * Coverage\n\n The coverage of this pair of primers over the sequences it used.\n Calculated with the BLAST result. High coverage means that the pair is\n much more \"universal\".\n * Resolution\n\n
\n\n The *observed resolution* of the sub-alignment sliced by the primer\n pair, which is equal to the number of unique sequences divided by the\n number of total sequences. The value is between 0 and 1.\n * TreeValue\n\n
\n\n The *tree resolution* of the sub-alignment, which is equal to the\n number of internal nodes on a phylogenetic tree (constructed from the\n alignment) divided by number of terminal nodes. The value is between 0\n and 1.\n\n * AvgTerminalBranchLen\n\n The average of the terminal branch's length.\n * Entropy\n\n
\n\n The Shannon equitability index of the sub-alignment. The value is\n between 0 and 1.\n * LeftSeq\n\n Sequence of the forward primer. The direction is 5' to 3'.\n * LeftTm\n\n The melting temperature of the forward primer. The unit is degress\n Celsius (\u00b0C).\n * LeftAvgBitscore\n\n The average raw bitscore of the forward primer, which is calculated by\n BLAST.\n * LeftAvgMismatch\n\n The average number of mismatched bases of the forward primer, as\n counted by BLAST.\n * RightSeq\n\n Sequence of reverse primer. The direction is 5' to 3'.\n * RightTm\n\n The melting temperature of the reverse primer. The unit is degrees\n Celsius (\u00b0C).\n * RightAvgBitscore\n\n The average raw bitscore of the reverse primer, which is calculated by\n BLAST.\n * RightAvgMismatch\n\n The average number of mismatched bases of the reverse primer, as\n counted by BLAST.\n * DeltaTm\n\n The difference in the melting temperatures of the forward and reverse\n primers. A pair of primers with a high DeltaTm may result in failure\n during the PCR experiment.\n * AlnStart\n\n The location of the beginning of the forward primer (5', leftmost of\n primer pairs) in the entire alignment.\n * AlnEnd\n\n The location of the end of the reverse primer (5', rightmost of primer\n pairs) in the entire alignment.\n * AvgSeqStart\n\n The average beginning of the forward primer in the original sequences.\n *ONLY USED FOR DEBUG*.\n * AvgSeqEnd\n\n The average end of the forward primer in the original sequences.\n *ONLY USED FOR DEBUG*.\n\n The primer pairs are sorted by *Score*. Since the score may not fully\n satisfy the user's specific considerations, it is suggested that primer\n pairs be chosen manually if the first primer pair fails during the PCR\n experiment.\n* _b_.primer.fastq\n\n The fastq format file of a primer's sequence. It contains two sequences,\n and the direction is 5' to 3'. The first is the forward primer, and the\n second is the reverse primer. The quality of each base is equal to its\n proportion of the column in the alignment. Note that the sequence may\n contains amibiguous bases if it was not disabled.\n* _b_.pdf\n\n The PDF format of the figure containing the sliding-window scan result of\n the alignment.\n* _b_.png\n\n The PNG format of the figure containing the sliding-window scan result of\n the alignment.\n* _b_.variance.tsv\n\n The CSV format of the sliding-window scan result. *\"Index\"* means the\n location of the base in the alignment. Note that the value DOES NOT means\n the variance of the base column; instead it refers to the variance of the\n fragment started from this column.\n\n* Log.txt\n\n The log file. Contains all the information printed on the screen.\n* Options.json\n\n The JSON file stores all options that the user inputs.\n* Loci.csv\n\n The summary of all loci/fragments, which only contains the variance\n information for each fragment. The only new field, *GapRatio*, means the\n ratio of the gap (\"-\") in the alignment. A higher value means that the\n sequences may have too many insertions/deletions or the alignment is not\n reliable.\n* by_name\n\n The folder contains *\"undivided\"* sequences and intermediate results.\n Actually they are \"roughly divided\" sequences. The original Genbank file\n is firstly divided into different fasta files if the Genbank record\n contains different contents. Usually, one Genbank record contains serveral\n annotated regions (multiple genes, for example). If two records contains\n the same series of annotations (same order), they are put into same fasta\n file. Each file contains the intact sequence form the related Genbank\n record.\n\n* by_gene\n\n The folder contains divided sequences and intermediate results. After\n the divided step occurred in by_name, BarcodeFinder then divides each\n *cluster* of Genbank records into several fasta files so that each file\n contains only one region (one locus, one gene, one spacer or one\n misc_feature) of the annotation.\n\n For instance, a record in a \"rbcL.gb\" file may also contains atpB gene's\n sequences. The \"rbcL.fasta\" file does not contain any upstream/downstream\n sequences (except for \".expand\" files) and \"atpB_rbcL.fasta\" does not have\n even one base of the atpB or rbcL gene, just the spacer (assuming that the\n annotation is precise).\n\n User can skip this dividing step by setting \"-no_divide\" to use the whole\n sequence for analysis. Note that doing so DOES NOT skip the first dividing\n step.\n\n These two folders can usually be ignored. However, a user may\n utilise one of these intermediate results (especially for those who only\n use BarcodeFinder to collect data from Genbank):\n * _b_.fasta\n The raw fasta file converted directly from the Genbank file containing\n only sequences of one locus/fragment.\n * _b_.expand\n\n To design primers, BarcodeFinder extend a sequence to its\n upstream/downstream. Users can use \"-expand 0\" to skip the expansion.\n The next step generates files that all have \".expand\" in their\n filenames.\n * _b_.uniq\n\n Non-redundant sequences.\n * _b_.uniq.aln\n\n The alignment of the fasta file.\n * _b_.uniq.candidate.fasta\n\n The candidate primers. This file may contains thousands of records. We do\n not recommend paying attention to it.\n * _b_.uniq.candidate.fastq\n\n Again, the candidate primers. This time, the file has the quality\n information that equals base's proportion in the column of the\n alignment.\n * _b_.uniq.consensus.fastq\n\n The fastq format of the consensus sequence of the alignment. Note that\n it contains alignment gap (\"-\"). Although this may be the most useful\n file in the folder, it is NOT RECOMMENDED that it be used directly\n because consensus-genrating algorithm are optimised for primer design. Hence, the consensus sequence may be different from the _\"real\"_ consensus.\n\n# Options\n## Help\n* -h\n\n Prints help messages for the program. It is highly recommended to use this\n option to see the list of options and their default values.\n## General\n* -aln filename\n\n Alignment files that the user provides. The filename can consist of one\n file or a series of files. One can use \"?\" and \"\\*\" to represent one or\n any characters. *Be sure to use quotation marks*. For example,\n \"a\\*.alignment\" means any file starting with the letter \"a\" and ending\n with \".alignment\".\n\n It only supports the fasta format. Ambiguous bases and gaps (\"-\") are\n supported.\n\n* -fasta filename\n\n User-provided unaligned fasta files. Also supports \"\\*\" and \"?\". If the\n user wants to use \"-uniq\" function, the sequences should be renamed. See\n the format for the sequence ID above.\n\n* -gb filename\n\n User-provided Genbank file or files.\n\n* -stop value\n\n To stop the running BarcodeFinder at a specific step. BarcodeFinder\n provides an all-in-one solution to find novel DNA barcodes. However, some\n users may only want to use one module. The *value* could be\n * 1\n Only collect data and do pre-processing (download, divide, remove\n redundant, rename, expand); or\n * 2\n Do step 1, and then analyse the variance. Do not design primers.\n\n* -out value\n\n The output folder's name. All results will be put into the output folder.\n If the user does not set an output path via \"-out\", BarcodeFinder will\n create a folder named \"Result\".\n\n BarcodeFinder does not overwrite the existing folder with the same name.\n\n It is HIGHLY RECOMMENDED to use only letters, numbers and underscores\n (\"_\") in the folder name to avoid mysterious errors caused by other\n Unicode characters.\n\n## Genbank\n* -allow_mosaic_spacer\n\n If one gene is nested with another gene, normally they do not have spacers.\n\n However, some users want the fragments between two gene's beginnings and\n ends. This option is for this specific purpose. For normal usage, *do not\n recommend*.\n* -allow_repeat\n\n If genes repeated in downstream, this option will allow the repeat region\n to be extracted, otherwise any repeated region will be omitted.\n\n The default value is False.\n* -allow_invert_repeat\n\n If two genes invert-repeated in downstream, this option will allow the\n spacer of them to be extracted, otherwise the spacer will be omitted.\n\n For instance, geneA-geneB located in one invert-repeat region (IR) of\n chloroplast genome. In another IR region, there are geneB-geneA. This\n option will extract sequences of two different direction as two unique\n spacers.\n\n The default value is False.\n* -email address\n\n BarcodeFinder uses Biopython to handle the communication between the user\n and the NCBI Genbank database. The database requires that the to provide\n an email address in case of abnormal situations that require NCBI to\n contact the user. The default address was designed to be empty.\n\n _However, for the convenience of the user, BarcodeFinder will use\n \"guest@example.com\" if the user does not provide an email address._\n\n* -exclude option\n\n Use this option to use negative option. For instance, \"-exclude Zea\n [organism]\" (do not include quotation marks) will add \" NOT\n (Zea[organism])\" to the query.\n\n This option can be useful for exclude specific taxon.\n ```\n -taxon Zea -exclude \"Zea mays\"[organism]\n ```\n This will query all records in genus *Zea* while records of *Zea mays*\n will be exclude.\n\n For much more complex exclude options, please consider to use \"Advance\n search\" in Genbank website.\n* -gene name\n\n The gene's name which the user wants to query in Genbank. If the user\n wants to use logical expressions like \"OR\", \"AND\", \"NOT\", s/he should use\n \"-query\" instead. If there is space in the gene's name, make sure to use\n quotation marks.\n\n Note that \"ITS\" is not a gene name--it is \"internal transcribed spacer\".\n\n Sometimes \"-gene\" options may bring in unwanted sequences. For example, if\n a user queries \"rbcL[gene]\" in Genbank, spacers containing rbcL or rbcL's\n upstream/downstream gene may be found, such as \"atpB_rbcL spacer\" or atpB.\n\n* -group value\n\n To restrict a group of species to their *superkingdom* or *kingdom*, the\n value can be\n\n * animals\n * plants\n * fungi\n * protists\n * bacteria\n * archaea\n * viruses\n\n It is reported that the \"group\" filter may return abnormal records, for\n instance, return plants' records when the group is \"animal\" and the\n \"organelle\" is \"chloroplast\". Furthermore, it may match a great number of\n records in Genbank. Hence, we strongly recommend using \"-taxon\" instead.\n\n The default *value* is empty.\n\n* -min_len value\n\n The minimum length of the records downloaded from Genbank. The default\n *value* is 100 (bp). The *number* must be an integer.\n\n* -max_len value\n\n The maximum length of the records downloaded from Genbank. The default\n *value* is 10000 (bp). The *number* must be an integer.\n\n* -molecular type\n\n The molecular type, which could be DNA or RNA. The default *type* is empty.\n\n* -og type (or -organelle type)\n\n Adds \"organelle[filter]\" to a query to limit results to a given organelle\n type only.\n\n The *type* could be\n\n * mitochondrion, or mt\n * plastid, or pl\n * chloroplast, or cp\n\n Usually, users only want organelle genomes instead of fragments. One\n solution for leaving out fragments is to set \"-min_len\" and \"-max_len\" to\n use a length filter to obtain genomes. Another simple solution is to use\n RefSeq only by adding the \"-refseq\" option.\n\n For instance,\n ```\n # all chloroplast sequences of Poaceae (not only in RefSeq)\n -taxon Poaceae -og chloroplast -min_len 50000 -max_len 300000\n # all chloroplast sequences of Poaceae (only in RefSeq)\n -taxon Poaceae -og chloroplast -refseq\n ```\n\n Make sure not to make any typo (e.g., chlorplast, or mitochondria).\n* -query string\n\n The query string provided by the user. It behaves in the same manner as\n the query the user typed into the Search Box in NCBI Genbank's webpage.\n\n Make sure to follow NCBI's grammar for queries. It can contain several\n words. Remember to add quotation marks if an item contains more than one\n words, for instance, *\"Homo sapiens\"[organism].\n\n Do not add quotation marks at the beginning and end of the query string.\n For instance, *\"cbs[gene] AND \"Homo sapiens\"[organism]\" may return empty\n results.\n\n* -refseq\n\n Ask BarcodeFinder to only query sequences in the RefSeq database.\n [RefSeq](https://www.ncbi.nlm.nih.gov/refseq/about/) is considered to be\n of higher quality than the other sequences in Genbank.\n\n If the user set this option, \"-min_seq\" and \"-max_seq\" will be removed to\n set no limit on the sequence length. If the user really wants to set a\n length limit when using \"-refseq\", s/he can put this filter into the query\n string:\n ```\n # Get all Poaceae sequence in RefSeq, sequences should be 1000 to 10000 bp\n -query refseq[filter] -taxon Poaceae -min_len 1000 -max_len 10000\n ```\n\n Usually, this option will be combined with \"-og\" to obtain organelle\n genomes.\n\n Note that this option is of Boolean type. It IS NOT followed with a *value*.\n\n* -seq_n value\n\n Download part of records. The *value* should be integer.\n\n The defaule *value* is None, i.e., download all records.\n* -taxon taxonomy\n\n The taxonomy name. It could be any taxonomic rank from kingdom (same as\n \"-group\") to species, as long as the user inputs correct name (the\n scientific name of species or taxonomic group in latin, NOT ENGLISH). It\n will restrict the query to the targeted taxonomy unit. Make sure to use\n quotation marks if *taxonomy* has more than one word.\n\n## Pre-process\n* -expand value\n\n The expand length for going upstream/downstream. If set, BarcodeFinder\n will expand the sequence to its upstream/downstream after the dividing\n step to find primer candidates. Set the *number* to 0 to skip.\n\n The default value is 0 if users set \"-stop\" to 1 or 2, i.e., users do not\n want to run the primer-design process.\n\n If users run the whole process but forget to set \"-expand\", BarcodeFinder\n will automatically set \"-expand\" to 200. However, users can force the\n program to not to expand the sequence by setting it to 0.\n* -max_name_len value\n\n The maximum length of a feature name. Some annotation's feature name in\n Genbank file is too long, and usually, they are not the target sequence\n the user wants. By setting this option, BarcodeFinder will truncate the\n annotation's feature name if it is too long. By default, the *value* is\n 50.\n* -max_seq_len value\n\n The maximum length of a sequence for one annotation. Some annotations'\n sequences are too long (for instance, one gene has two exons, and its\n intron is longer than 10 Kb). This option will skip those long sequences.\n By default, the *value* is 20000 (bp).\n\n Note that this option is different with \"-max_len\". This option limits the\n length of one annotation's sequence. The \"-max_len\" limits the whole\n sequence's length of one Genbank record.\n\n For an organelle genome's analysis, if the user sets the \"-no_divide\"\n option, this option will be ignored.\n* -no_divide\n\n If set, it will analyse the whole sequence instead of the divided\n fragments. By default, BarcodeFinder divides one Genbank record into\n several fragments according to its annotation.\n\n Note that this option is of Boolean type. It IS NOT followed with a *value*.\n* -rename\n\n If set, the program will try to rename genes. For instance, \"rbcl\" will be\n renamed to \"rbcL\", and \"tRNA UAC\" will be renamed to \"trnVuac\", which\n consists of \"trn\", the amino acid's letter and transcribed codon. This may\n be helpful if the annotation has nonstandard uppercase/lowercase or naming\n format so it can merge the same sequences to one file for the same locus\n having variant names.\n\n If using Windows, consider using this option to avoid contradictory\n filenames.\n\n It is also of Boolean type. The default is not to rename.\n* -uniq method\n\n The method used to remove redundant sequences. BarcodeFinder will remove\n redundant sequences to ensure only one sequence per species by default. A\n user can change its behaviour by setting different methods.\n * longest\n\n Keep the longest sequence for one species. The program will compare\n the sequence's length from the same species' same locus.\n * random\n\n The program will randomly pick one sequence for one species' one\n locus if there is more than one sequence.\n * first\n\n According to the records' order in the original Genbank file, only the\n first sequence of the same species' same locus will be kept. Others\n will be ignored directly. This is the default option due to\n performance considerations.\n * no\n\n Skip this step. All sequences will be kept.\n## Evaluate\n* -fast\n\n If set, BarcodeFinder will skip the calculations for the \"tree resolution\"\n and \"average terminal branch length\" to reduce running time.\n\n Although the program has been optimized greatly, the phylogenetic tree's\n inferences can be time consuming if there are too many species (for\n instance, 10,000). If the user wants to analyse organelle genomes and the\n species are too numerous, the user can set this option to reduce time. The\n \"tree resolution\" and \"average terminal branch length\" will both become 0\n in the resultsu file.\n* -step value\n\n The step length for the sliding-window scan. The default *value* is 50. If\n the input dataset is too large, an extreamely small *value* (such as 1 or\n 2) may require too much time, especially when the \"-fast\" option is not\n used.\n## Primer design\n* -a value\n\n The maximum number of ambiguous bases allowed in one primer. The default\n *value* is 4.\n* -c value\n\n The minimum coverage of the base and primer. The default *value* is 0.6\n (60%). It is used to remove primer candidates if its coverage among all\n sequences is smaller than the threshold. The coverage of primers is\n calculated by BLAST.\n\n Also, it is used to generate a consensus sequence. For one column, if the\n proportion of one type of base (A, T, C, G) is smaller than the threshold,\n the program will try to use an ambiguous base that represents two type of\n bases, and then three, then four (\"N\").\n* -m value\n\n The maximum number of mismatched bases in a primer. This options is used\n to remove primer candidates if the BLAST results show that there is too\n much mismatch. The default *value* is 4.\n* -pmin value\n\n The minimum length of the primer length. The default *value* is 18.\n* -pmax value\n\n The maximum length of the primer length. The default *value* is 24.\n* -r value\n\n The minimum *observed resolution* of the fragments or primer pairs. The\n default *value* is 0.5. It is used to skip conserved fragments (alignment\n or sub-alignment defined by a pair of primers).\n\n BarcodeFinder uses the *observed resolution* instead of others for several\n reasons:\n * speed\n\n The calculation of the *observed resolution* is very fast.\n * accuracy\n\n Due to the existence of possible alignment errors, the *observed\n resolution* may be higher than the resolutions obtained via other\n evaluation methods. Hence, it is used as a lower bound. That is to\n say, the program considers that a fragment with a low *observed\n resolution* may not have a satisfactory tree resolution either.\n\n By setting it to 0, BarcodeFinder can skip this filtration step.\n Meanwhile, the running time may be extremely long.\n* -t value\n\n Only keeps *value* pairs of primers for each highly variant region. The\n default *value* is 1, i.e., only keep the _best_ primer pair. To choose the\n best pairs of primers, the *Score* each pair received is used. To keep\n more pairs, set \"-t\" to more than 1.\n* -tmin value\n\n The minimum product length (include primer). The default *value* is 300\n (bp). Note this limits the PCR product's length instead of the\n sub-alignment's length.\n* -tmax value\n\n The maximum product length (include primer). The default *value* is 500\n (bp). Note that it limits the length of the PCR product given by the\n primer pair instead of the alignment.\n\n The \"-tmin\" and \"-tmax\" are used to screen primer candidates. It uses\n BLAST results to set the location of primers on each template sequence and\n calculates the average lengths of the products. Because of the variance of\n species, the same locus may have differenct lengths in different species,\n plus with the stretching of the alignment that gaps were added during the\n aligning, please consider adding some *margins* for these two options.\n\n For instance, if a user wants the amplified length to be smaller than 800\n and greater than 500, s/he could consider setting \"-tmin\" to 550 and\n \"-tmax\" to 750.\n\n# Performance\nFor a taxon that is not very large and includes few fragments, BarcodeFinder\ncan finish the task in *minutes*. For a large taxon (such as the Asteraceae\nfamily or the whole class of the Poales) and multiple fragments (such as the\nchloroplast genomes), the time to complete may be one hour or more on a PC or\nlaptop.\n\nBarcodeFinder requires less memory (usually less than 0.5 GB, although, for a\nlarge taxon BLAST may require more) and few CPUs (one core is enough). It can\nrun very well on a normal PC. Multiple CPU cores may be helpful for the\nalignment and tree construction steps.\n\nFor Windows users, MAFFT [may be very slow due to anti-virus\nsoftware](https://mafft.cbrc.jp/alignment/software/windows_without_cygwin.html).\nPlease consider following [this instruction](https://mafft.cbrc.jp/alignment/software/ubuntu_on_windows.html) to install\nUbuntu on Windows to obtain better results.\n\n\n",
"description_content_type": "text/markdown",
"docs_url": null,
"download_url": "",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "https://github.com/wpwupingwp/BarcodeFinder",
"keywords": "",
"license": "GNU AGPL v3",
"maintainer": "",
"maintainer_email": "",
"name": "BarcodeFinder",
"package_url": "https://pypi.org/project/BarcodeFinder/",
"platform": "",
"project_url": "https://pypi.org/project/BarcodeFinder/",
"project_urls": {
"Homepage": "https://github.com/wpwupingwp/BarcodeFinder"
},
"release_url": "https://pypi.org/project/BarcodeFinder/0.9.44/",
"requires_dist": [
"biopython (>=1.72)",
"certifi (>=2018.11.29)",
"coloredlogs (>=10.0)",
"matplotlib (>=3.0.0)",
"numpy (>=1.15.2)",
"pip (>=18.0)",
"primer3-py (>=0.6.0)",
"wheel (>=0.32.3)"
],
"requires_python": "",
"summary": "All-in-one solution for discovering novel DNA barcode",
"version": "0.9.44"
},
"last_serial": 5840121,
"releases": {
"0.9.26": [
{
"comment_text": "",
"digests": {
"md5": "c51baa57a7b56b8f8a00eac82b94abf4",
"sha256": "22a4fe9878eeb03cbaa238a79123bf64b775bbc70da62d2a9572ca18c93c4130"
},
"downloads": -1,
"filename": "BarcodeFinder-0.9.26-py3-none-any.whl",
"has_sig": false,
"md5_digest": "c51baa57a7b56b8f8a00eac82b94abf4",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 42721,
"upload_time": "2019-03-13T08:51:56",
"url": "https://files.pythonhosted.org/packages/55/11/55603a3cbf4010b2dfb97c1b8131085bf2b84990935d97e95f4a31f7a7ea/BarcodeFinder-0.9.26-py3-none-any.whl"
}
],
"0.9.27": [
{
"comment_text": "",
"digests": {
"md5": "7845bd2bb553066e5f4fd489cb4e3bca",
"sha256": "b5122b3ca6223879591feb8b7278d7553c3c9bd099804f249b166fd263d9f701"
},
"downloads": -1,
"filename": "BarcodeFinder-0.9.27-py3-none-any.whl",
"has_sig": false,
"md5_digest": "7845bd2bb553066e5f4fd489cb4e3bca",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 42721,
"upload_time": "2019-03-13T08:59:11",
"url": "https://files.pythonhosted.org/packages/da/5b/022fa07a2eda2661f91baabf00fbe03c56544658bfe705c88afcaf91e856/BarcodeFinder-0.9.27-py3-none-any.whl"
}
],
"0.9.28": [
{
"comment_text": "",
"digests": {
"md5": "81aa1c6932fdecfa9057d986dda8de73",
"sha256": "45dc2de29ea1222d70cbde178790d362f178ab1285b54bc36414efed5210c43e"
},
"downloads": -1,
"filename": "BarcodeFinder-0.9.28-py3-none-any.whl",
"has_sig": false,
"md5_digest": "81aa1c6932fdecfa9057d986dda8de73",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 42722,
"upload_time": "2019-03-21T09:04:33",
"url": "https://files.pythonhosted.org/packages/a4/a1/98c196d36a9a53193615f64fcc3be4a840a0204afc49da614fd818e6ceab/BarcodeFinder-0.9.28-py3-none-any.whl"
}
],
"0.9.29": [
{
"comment_text": "",
"digests": {
"md5": "72215fe1f3ce7276cad0c62d7b4fa4c2",
"sha256": "3534af65f9d444cb25cb1559fe49c6240db903681d224196db38a911749cccd8"
},
"downloads": -1,
"filename": "BarcodeFinder-0.9.29-py3-none-any.whl",
"has_sig": false,
"md5_digest": "72215fe1f3ce7276cad0c62d7b4fa4c2",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 42730,
"upload_time": "2019-03-21T10:37:23",
"url": "https://files.pythonhosted.org/packages/e9/5f/20fb640952ecfd99a7926073428df8f674503e954301571294967fbdbd26/BarcodeFinder-0.9.29-py3-none-any.whl"
}
],
"0.9.30": [
{
"comment_text": "",
"digests": {
"md5": "00248bccf3abeebbcac41dee17d69427",
"sha256": "d616d1bef0617611bfc6548970a012308ebb6773a86a65737e2c4748b62c01e2"
},
"downloads": -1,
"filename": "BarcodeFinder-0.9.30-py3-none-any.whl",
"has_sig": false,
"md5_digest": "00248bccf3abeebbcac41dee17d69427",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 42730,
"upload_time": "2019-03-21T10:44:31",
"url": "https://files.pythonhosted.org/packages/a2/c5/9f232e6a868c695c75414ed77158ddf2e08af2af78507344013452980e4a/BarcodeFinder-0.9.30-py3-none-any.whl"
}
],
"0.9.31": [
{
"comment_text": "",
"digests": {
"md5": "e0d66c6c9a2ef0b20acf22265cef9e24",
"sha256": "5fbedf554a69e89c4de9107ebd17308b65c72dabc5e3fe62c7a7886f26e6ddcc"
},
"downloads": -1,
"filename": "BarcodeFinder-0.9.31-py3-none-any.whl",
"has_sig": false,
"md5_digest": "e0d66c6c9a2ef0b20acf22265cef9e24",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 42765,
"upload_time": "2019-03-22T03:22:00",
"url": "https://files.pythonhosted.org/packages/12/32/36476f5e764dd2d270b7073a0194c0ad363bef37f4a9692d8d2123c0a48d/BarcodeFinder-0.9.31-py3-none-any.whl"
}
],
"0.9.32": [
{
"comment_text": "",
"digests": {
"md5": "e0e6a369a7bc09770b382d36727cf825",
"sha256": "245af94cbc9fafe4e1ebfe7930e231ac6437c57908683a5ebea35d70f508ee28"
},
"downloads": -1,
"filename": "BarcodeFinder-0.9.32-py3-none-any.whl",
"has_sig": false,
"md5_digest": "e0e6a369a7bc09770b382d36727cf825",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 43112,
"upload_time": "2019-03-29T03:28:59",
"url": "https://files.pythonhosted.org/packages/de/fb/2e200713ea4812834ec06181b09ad87be00cb4234cdf6e7c3e2457511603/BarcodeFinder-0.9.32-py3-none-any.whl"
}
],
"0.9.33": [
{
"comment_text": "",
"digests": {
"md5": "b6bf3dc40a90f321645078069702844e",
"sha256": "af20c81f4dc6f6c298171937f7e57c0da19988fccd148cd9b1e8a1a7ecd892ce"
},
"downloads": -1,
"filename": "BarcodeFinder-0.9.33-py3-none-any.whl",
"has_sig": false,
"md5_digest": "b6bf3dc40a90f321645078069702844e",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 43101,
"upload_time": "2019-04-01T03:35:13",
"url": "https://files.pythonhosted.org/packages/6e/62/7887ea70f2a5d07ed8686b4ad4711758061e9f669ffb17cd0a53776df898/BarcodeFinder-0.9.33-py3-none-any.whl"
}
],
"0.9.34": [
{
"comment_text": "",
"digests": {
"md5": "1e15747c5d19c9643a78657a17a23398",
"sha256": "2ef338a90c073b4f4c0067895c2e02ba19837b474c26208910fd371606aaa411"
},
"downloads": -1,
"filename": "BarcodeFinder-0.9.34-py3-none-any.whl",
"has_sig": false,
"md5_digest": "1e15747c5d19c9643a78657a17a23398",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 43161,
"upload_time": "2019-04-01T08:20:24",
"url": "https://files.pythonhosted.org/packages/6d/a4/ad26bbdea05233a22049a3f9d5aeccee99e6713d0fe9929985cea05c3d0c/BarcodeFinder-0.9.34-py3-none-any.whl"
}
],
"0.9.35": [
{
"comment_text": "",
"digests": {
"md5": "16ad671aa0f772f93d2023661d615e42",
"sha256": "84c44a075b9e98b70abf71e5e1785ea468cc1f618b13a4a863b8f4a04e181a07"
},
"downloads": -1,
"filename": "BarcodeFinder-0.9.35-py3-none-any.whl",
"has_sig": false,
"md5_digest": "16ad671aa0f772f93d2023661d615e42",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 43207,
"upload_time": "2019-04-10T08:32:39",
"url": "https://files.pythonhosted.org/packages/3a/70/30f152cc2ecb80568469f8f3aebf87f22b3249e1f2f9e69f689852ca4a50/BarcodeFinder-0.9.35-py3-none-any.whl"
}
],
"0.9.36": [
{
"comment_text": "",
"digests": {
"md5": "da4527aa09fd83f6def4cf814564b8df",
"sha256": "d54df62328fb97b2cfa94592627dd9af54cacc8f512528af15d1212bd80a870e"
},
"downloads": -1,
"filename": "BarcodeFinder-0.9.36-py3-none-any.whl",
"has_sig": false,
"md5_digest": "da4527aa09fd83f6def4cf814564b8df",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 43264,
"upload_time": "2019-05-13T02:18:34",
"url": "https://files.pythonhosted.org/packages/c7/2e/47a8c9967921733b8245293738bb2fdf3c54c001b1d8a01a89107328244b/BarcodeFinder-0.9.36-py3-none-any.whl"
}
],
"0.9.37": [
{
"comment_text": "",
"digests": {
"md5": "8bee2629319f847e2960d03d479e437f",
"sha256": "77f69e7b11189a548232dae8ab06ec2d86ac81b8675ae1aa67e9858bede8aa3a"
},
"downloads": -1,
"filename": "BarcodeFinder-0.9.37-py3-none-any.whl",
"has_sig": false,
"md5_digest": "8bee2629319f847e2960d03d479e437f",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 43317,
"upload_time": "2019-06-10T07:26:57",
"url": "https://files.pythonhosted.org/packages/d4/e7/f49c535be9f0ed3a34832c9a7c33a186e6944e04306c22985c510b8b7c5d/BarcodeFinder-0.9.37-py3-none-any.whl"
}
],
"0.9.38": [
{
"comment_text": "",
"digests": {
"md5": "1d585fcbf8fb337d515ec154a127528e",
"sha256": "37976277eb0434cea6c90905e2554482b98df10d8f039917c35172af755c2962"
},
"downloads": -1,
"filename": "BarcodeFinder-0.9.38-py3-none-any.whl",
"has_sig": false,
"md5_digest": "1d585fcbf8fb337d515ec154a127528e",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 43484,
"upload_time": "2019-06-27T10:17:58",
"url": "https://files.pythonhosted.org/packages/20/67/7cb32c34e13d0b70889b945277489215dc57f95720f3b1c1c711e43e6599/BarcodeFinder-0.9.38-py3-none-any.whl"
}
],
"0.9.39": [
{
"comment_text": "",
"digests": {
"md5": "636e3bc2ac94788f3b82f3d7f94d8bb2",
"sha256": "157466680bf4d81ec463b904b80ede3ae04dd698f6a3161579c185d0410df3eb"
},
"downloads": -1,
"filename": "BarcodeFinder-0.9.39-py3-none-any.whl",
"has_sig": false,
"md5_digest": "636e3bc2ac94788f3b82f3d7f94d8bb2",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 44107,
"upload_time": "2019-07-08T09:13:32",
"url": "https://files.pythonhosted.org/packages/66/c0/11728a53b3fc45e845ba5740ba0a909385562c743796d3f0c74f14990d99/BarcodeFinder-0.9.39-py3-none-any.whl"
}
],
"0.9.40": [
{
"comment_text": "",
"digests": {
"md5": "012cf6a431979ba2182d6849cc57bbc0",
"sha256": "4f2feb5ebd27aca209bc15b3392b2efe15d9e4453b0b284777952559f45f1e9d"
},
"downloads": -1,
"filename": "BarcodeFinder-0.9.40-py3-none-any.whl",
"has_sig": false,
"md5_digest": "012cf6a431979ba2182d6849cc57bbc0",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 44716,
"upload_time": "2019-07-16T02:10:01",
"url": "https://files.pythonhosted.org/packages/9c/d1/86e45f5c87aeb18a96b4c826f3adea16c3c862fb014356c7212af1f82c02/BarcodeFinder-0.9.40-py3-none-any.whl"
}
],
"0.9.41": [
{
"comment_text": "",
"digests": {
"md5": "c6a48f1b96c4a7e4445775bab5534967",
"sha256": "8ddcc875be7b9bb68895e570144c0f934dbf1fe8880f8ceaf309362b52600a14"
},
"downloads": -1,
"filename": "BarcodeFinder-0.9.41-py3-none-any.whl",
"has_sig": false,
"md5_digest": "c6a48f1b96c4a7e4445775bab5534967",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 44709,
"upload_time": "2019-07-30T04:17:44",
"url": "https://files.pythonhosted.org/packages/8c/88/e423f4439ac193c3af82a982cb727b73ccc02e6ee2793f9d0d1081ca2596/BarcodeFinder-0.9.41-py3-none-any.whl"
}
],
"0.9.42": [
{
"comment_text": "",
"digests": {
"md5": "17f875ff03e9e0c23424b4b9f2d767c3",
"sha256": "ee078aac611d854f5dbeb26d3844aad5ce842fe26e37be39d7cf4a3189e26de7"
},
"downloads": -1,
"filename": "BarcodeFinder-0.9.42-py3-none-any.whl",
"has_sig": false,
"md5_digest": "17f875ff03e9e0c23424b4b9f2d767c3",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 56575,
"upload_time": "2019-08-14T09:07:10",
"url": "https://files.pythonhosted.org/packages/fe/2d/5f8360106dbc25364ba451c2205c4baaab52bce61581f00c5bd0ca47c042/BarcodeFinder-0.9.42-py3-none-any.whl"
}
],
"0.9.43": [
{
"comment_text": "",
"digests": {
"md5": "f62df5308bdd376a998921375e225e9a",
"sha256": "e531e11ab0513b18a70e1ed532347c48798eb329d2f5d18fafc31d73212f37d0"
},
"downloads": -1,
"filename": "BarcodeFinder-0.9.43-py3-none-any.whl",
"has_sig": false,
"md5_digest": "f62df5308bdd376a998921375e225e9a",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 62561,
"upload_time": "2019-08-23T13:51:18",
"url": "https://files.pythonhosted.org/packages/f0/3e/a0c21a365842db701037b00f0953725bca218c0341551b516ce89bbeeaa7/BarcodeFinder-0.9.43-py3-none-any.whl"
}
],
"0.9.44": [
{
"comment_text": "",
"digests": {
"md5": "ab0b1a355d162ebb04e13c066902b6ba",
"sha256": "18460e2a885f2f62caea85971fa2580d9ecbb921cc24dd1e8f4347c0b88911eb"
},
"downloads": -1,
"filename": "BarcodeFinder-0.9.44-py3-none-any.whl",
"has_sig": false,
"md5_digest": "ab0b1a355d162ebb04e13c066902b6ba",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 62529,
"upload_time": "2019-09-17T07:43:49",
"url": "https://files.pythonhosted.org/packages/ee/5c/a8189ecc05b97270185f56a4ea14112aaca2c6554517460d7989fb43f401/BarcodeFinder-0.9.44-py3-none-any.whl"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "ab0b1a355d162ebb04e13c066902b6ba",
"sha256": "18460e2a885f2f62caea85971fa2580d9ecbb921cc24dd1e8f4347c0b88911eb"
},
"downloads": -1,
"filename": "BarcodeFinder-0.9.44-py3-none-any.whl",
"has_sig": false,
"md5_digest": "ab0b1a355d162ebb04e13c066902b6ba",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 62529,
"upload_time": "2019-09-17T07:43:49",
"url": "https://files.pythonhosted.org/packages/ee/5c/a8189ecc05b97270185f56a4ea14112aaca2c6554517460d7989fb43f401/BarcodeFinder-0.9.44-py3-none-any.whl"
}
]
}