Commit 0d9b5b53 authored by Zhi Zhang's avatar Zhi Zhang
Browse files

Initial commit

parents
# Created by https://www.gitignore.io/api/intellij
### Intellij ###
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff:
.idea/workspace.xml
.idea/tasks.xml
.idea/dictionaries
.idea/vcs.xml
.idea/jsLibraryMappings.xml
# Sensitive or high-churn files:
.idea/dataSources.ids
.idea/dataSources.xml
.idea/dataSources.local.xml
.idea/sqlDataSources.xml
.idea/dynamic.xml
.idea/uiDesigner.xml
# Gradle:
.idea/gradle.xml
.idea/libraries
# Mongo Explorer plugin:
.idea/mongoSettings.xml
## File-based project format:
*.iws
## Plugin-specific files:
# IntelliJ
/out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
### Intellij Patch ###
# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
*.iml
# modules.xml
# Created by https://www.gitignore.io/api/python
### Python ###
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
env/
build/
develop-eggs/
/dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*,cover
.hypothesis/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# IPython Notebook
.ipynb_checkpoints
# pyenv
.python-version
# celery beat schedule file
celerybeat-schedule
# dotenv
.env
# virtualenv
venv/
ENV/
# Spyder project settings
.spyderproject
# Rope project settings
.ropeproject
.idea
.metadata/
.project
.pydevproject
.settings/
app/uploads
app/results
The MIT License (MIT)
Copyright (c) 2013 Miguel Grinberg
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Flasky
======
This repository contains the source code examples for my O'Reilly book [Flask Web Development](http://www.flaskbook.com).
The commits and tags in this repository were carefully created to match the sequence in which concepts are presented in the book. Please read the section titled "How to Work with the Example Code" in the book's preface for instructions.
from flask import Flask
from flask_bootstrap import Bootstrap
from flask_mail import Mail
from flask_moment import Moment
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.schema import UniqueConstraint
from flask_login import LoginManager
from config import config,Config
from celery import Celery
from flask_security import Security, SQLAlchemyUserDatastore,UserMixin, RoleMixin, login_required
from flask_dropzone import Dropzone
bootstrap = Bootstrap()
mail = Mail()
moment = Moment()
db = SQLAlchemy()
dropzone = Dropzone()
login_manager = LoginManager()
login_manager.session_protection = 'strong'
login_manager.login_view = 'auth.login'
celery = Celery(__name__, broker=Config.CELERY_BROKER_URL,backend=Config.CELERY_RESULT_BACKEND)
def create_app(config_name):
app = Flask(__name__)
app.config.from_object(config[config_name])
config[config_name].init_app(app)
bootstrap.init_app(app)
# add dropzone
dropzone.init_app(app)
mail.init_app(app)
moment.init_app(app)
db.init_app(app)
celery.conf.update(app.config)
login_manager.init_app(app)
from .main import main as main_blueprint
app.register_blueprint(main_blueprint)
from .auth import auth as auth_blueprint
app.register_blueprint(auth_blueprint, url_prefix='/auth')
return app
from flask import Blueprint
auth = Blueprint('auth', __name__)
from . import views
from flask_wtf import Form
from wtforms.validators import Required, Length, Email, Regexp, EqualTo, NumberRange, Optional
from wtforms import ValidationError,RadioField, FloatField, FileField, SubmitField, FieldList, TextField, SelectField, StringField, FormField, PasswordField, BooleanField,TextAreaField
from wtforms.ext.sqlalchemy.fields import QuerySelectField
from .. import db
from ..models import User,Role,Files
from wtforms.fields.core import IntegerField
from flask import current_app
from flask_login import login_user, logout_user, login_required, current_user
class LoginForm(Form):
email = StringField('Email', validators=[Required(), Length(1, 64),
Email()])
password = PasswordField('Password', validators=[Required()])
remember_me = BooleanField('Keep me logged in')
submit = SubmitField('Log In')
class RegistrationForm(Form):
email = StringField('Email', validators=[Required(), Length(1, 64),
Email()])
username = StringField('Username', validators=[
Required(), Length(1, 64), Regexp('^[A-Za-z][A-Za-z0-9_.]*$', 0,
'Usernames must have only letters, '
'numbers, dots or underscores')])
password = PasswordField('Password', validators=[
Required(), EqualTo('password2', message='Passwords must match.')])
password2 = PasswordField('Confirm password', validators=[Required()])
submit = SubmitField('Register')
def validate_email(self, field):
if User.query.filter_by(email=field.data).first():
raise ValidationError('Email already registered.')
def validate_username(self, field):
if User.query.filter_by(username=field.data).first():
raise ValidationError('Username already in use.')
class ChangePasswordForm(Form):
old_password = PasswordField('Old password', validators=[Required()])
password = PasswordField('New password', validators=[
Required(), EqualTo('password2', message='Passwords must match')])
password2 = PasswordField('Confirm new password', validators=[Required()])
submit = SubmitField('Update Password')
class PasswordResetRequestForm(Form):
email = StringField('Email', validators=[Required(), Length(1, 64),
Email()])
submit = SubmitField('Reset Password')
class PasswordResetForm(Form):
email = StringField('Email', validators=[Required(), Length(1, 64),
Email()])
password = PasswordField('New Password', validators=[
Required(), EqualTo('password2', message='Passwords must match')])
password2 = PasswordField('Confirm password', validators=[Required()])
submit = SubmitField('Reset Password')
def validate_email(self, field):
if User.query.filter_by(email=field.data).first() is None:
raise ValidationError('Unknown email address.')
class ChangeEmailForm(Form):
email = StringField('New Email', validators=[Required(), Length(1, 64),
Email()])
password = PasswordField('Password', validators=[Required()])
submit = SubmitField('Update Email Address')
def validate_email(self, field):
if User.query.filter_by(email=field.data).first():
raise ValidationError('Email already registered.')
class UploadTestForm(Form):
uploadfile1 = FileField('Enter uploading file1', validators=[Required()])
uploadfile2 = FileField('Enter uploading file2', validators=[Required()])
submit = SubmitField('Upload')
def fastq_choices():
return Files.query.filter_by(owners=current_user.id).filter_by(ftype1 ='U').filter_by(ftype3 ='Fastq')
def bam_choices():
return Files.query.filter_by(owners=current_user.id).filter_by(ftype1 ='U').filter_by(ftype3 ='Bam')
def map_choices():
return Files.query.filter_by(owners=current_user.id).filter_by(ftype1 ='U').filter_by(ftype3 ='Map')
class NameFormBam(Form):
uploadfile1 = QuerySelectField('H_Bam file&nbsp&nbsp', validators=[Required()],query_factory=bam_choices)
uploadfile2 = QuerySelectField('L_Bam file&nbsp&nbsp', validators=[Required()],query_factory=bam_choices)
class NameFormBam1(Form):
uploadfile1 = QuerySelectField(u'Bam file&nbsp&nbsp', validators=[Required()],query_factory=bam_choices)
class NameFormFastq(Form):
uploadfile1 = QuerySelectField(u'H_Fastq file&nbsp&nbsp', validators=[Required()],query_factory=fastq_choices)
uploadfile2 = QuerySelectField(u'L_Fastq file&nbsp&nbsp', validators=[Required()],query_factory=fastq_choices)
class NameFormFastq1(Form):
uploadfile1 = QuerySelectField(u'Fastq file&nbsp&nbsp', validators=[Required()],query_factory=fastq_choices)
class NameFormMap(Form):
uploadfile1 = QuerySelectField(u'H_Map file&nbsp&nbsp', validators=[Required()],query_factory=map_choices)
uploadfile2 = QuerySelectField(u'L_Map file&nbsp&nbsp', validators=[Required()],query_factory=map_choices)
class NameFormMap1(Form):
uploadfile1 = QuerySelectField(u'Map file&nbsp&nbsp', validators=[Required()],query_factory=map_choices)
class SubmitForm(Form):
submit = SubmitField('Calculate G\'')
class IndexForm(Form):
input_type = SelectField('a) Choose input file type: ', default='Fastq', choices=[('Fastq', 'Fastq'), ('Bam', 'Bam'), ('Map', 'Map')], validators=[Optional()])
numbermap = SelectField('b) Enter the number (or pairs) of Bulk file: ', default='1',choices=[(str(i), str(i)) for i in range(1, 21)], validators=[Optional()])
result_prefix=StringField('c) Enter the prefix of result: ',default='myresult')
bulk_design = SelectField('d) Enter 1_ or 2_ bulk design: ', choices=(('1','1'),('2','2')), default='2', validators=[Optional()])
submit = SubmitField('Next')
class FastqForm2(Form):
P1fastqfile = QuerySelectField('Enter P1 fastq file: ', validators=[Required()],query_factory=fastq_choices)
P2fastqfile = QuerySelectField('Enter P2 fastq file: ', validators=[Required()],query_factory=fastq_choices)
Bulkfastqfile = FieldList(FormField(NameFormFastq),label='Bulk fastq file list: ', min_entries=0, validators=[Required()])
readlen=IntegerField('Enter the length of reads (bp): ', default=100, validators=[Optional()])
phred=SelectField('Enter Phred score: ', choices=(('33','33'),('64','64')), default='33', validators=[Optional()])
qccheck=SelectField('Enter whether perform qccheck: ', choices=(('true','true'),('false','false')), default='true', validators=[Optional()])
trim=SelectField('Enter whether perform trim reads: ', choices=(('true','true'),('false','false')), default='true', validators=[Optional()])
lastkeep=IntegerField('Enter the length of trimmed reads (bp): ', default=75, validators=[Optional()])
rmadapt=SelectField('Enter whether remove adapter of reads: ', choices=(('true','true'),('false','false')), default='true', validators=[Optional()])
ladapter=StringField('Enter the left adapter: ',default='AGATCGGAAGAGC')
radapter=StringField('Enter the right adapter: ',default='AGATCGGAAGAGC')
minlen=IntegerField('Discard trimmed reads that are shorter than (bp): ', default=50, validators=[Optional()])
removen=SelectField('Enter whether remove "N" bases of reads: ', choices=(('true','true'),('false','false')), default='true', validators=[Optional()])
ncutoff=FloatField('N cutoff: ', default=0.1, validators=[Optional()])
filtq=SelectField('Filters sequences based on quality of reads: ', choices=(('true','true'),('false','false')), default='true', validators=[Optional()])
minq=IntegerField('Minimum quality score to keep: ', default=20, validators=[Optional()])
pminq=IntegerField('Minimum percent of bases: ', default=80, validators=[Optional()])
rmunpaired=SelectField('Remove unpaied reads of reads: ', choices=(('true','true'),('false','false')), default='true', validators=[Optional()])
qcstat=SelectField('Generate QC statistic plot for reads: ', choices=(('true','true'),('false','false')), default='true', validators=[Optional()])
insertsize=IntegerField('Insert size of sequencing: ', default=400, validators=[Optional()])
windowsize=IntegerField('Coverage window size for plot: ', default=50000, validators=[Optional()])
pass
cov_depth = SelectField('Enter the number of the depth of coverage: ', default='5',choices=[(str(i), str(i)) for i in range(5, 105,5)], validators=[Optional()])
kernel = SelectField('Enter the type of smoothing kernel: ', default='tricube', choices=[('tricube', 'tricube'), ('uniform', 'uniform'), ('triangle', 'triangle'), ('triweight', 'triweight'), ('quartic', 'quartic')], validators=[Optional()])
width = IntegerField('Enter the width of the smoothing kernel (bp): ', default=33750, validators=[Optional()])
a = [(str(i), str(i)) for i in range(1, 17)]
a.insert(0, ('all', 'all'))
chrnum = SelectField('Enter the chromosome number to draw: ', choices=a, default='all', validators=[Optional()])
noraw = SelectField("Enter whether drawing raw G\' values or not: ", choices=[('no', 'no'), ('yes', 'yes')], default='no', validators=[Optional()])
submit = SubmitField('Upload')
class BamForm2(Form):
P1bamfile = QuerySelectField('Enter P1 bam file: ', validators=[Required()],query_factory=bam_choices)
P2bamfile = QuerySelectField('Enter P2 bam file: ', validators=[Required()],query_factory=bam_choices)
Bulkbamfile = FieldList(FormField(NameFormBam),label='Bam file list: ', min_entries=0, validators=[Required()])
cov_depth = SelectField('Enter the number of the depth of coverage: ', default='5',choices=[(str(i), str(i)) for i in range(5, 105,5)], validators=[Optional()])
kernel = SelectField('Enter the type of smoothing kernel: ', default='tricube', choices=[('tricube', 'tricube'), ('uniform', 'uniform'), ('triangle', 'triangle'), ('triweight', 'triweight'), ('quartic', 'quartic')], validators=[Optional()])
width = IntegerField('Enter the width of the smoothing kernel (bp): ', default=33750, validators=[Optional()])
a = [(str(i), str(i)) for i in range(1, 17)]
a.insert(0, ('all', 'all'))
chrnum = SelectField('Enter the chromosome number to draw: ', choices=a, default='all', validators=[Optional()])
noraw = SelectField("Enter whether drawing raw G\' values or not: ", choices=[('no', 'no'), ('yes', 'yes')], default='no', validators=[Optional()])
submit = SubmitField('Upload')
class MapForm2(Form):
Bulkmapfile = FieldList(FormField(NameFormMap),label='Bam file list: ', min_entries=0, validators=[Required()])
kernel = SelectField('Enter the type of smoothing kernel: ', default='tricube', choices=[('tricube', 'tricube'), ('uniform', 'uniform'), ('triangle', 'triangle'), ('triweight', 'triweight'), ('quartic', 'quartic')], validators=[Optional()])
width = IntegerField('Enter the width of the smoothing kernel (bp): ', default=33750, validators=[Optional()])
a = [(str(i), str(i)) for i in range(1, 17)]
a.insert(0, ('all', 'all'))
chrnum = SelectField('Enter the chromosome number to draw: ', choices=a, default='all', validators=[Optional()])
noraw = SelectField("Enter whether drawing raw G\' values or not: ", choices=[('no', 'no'), ('yes', 'yes')], default='no', validators=[Optional()])
submit = SubmitField('Upload')
class FastqForm1(Form):
P1fastqfile = QuerySelectField('Enter P1 fastq file', validators=[Required()],query_factory=fastq_choices)
P2fastqfile = QuerySelectField('Enter P2 fastq file', validators=[Required()],query_factory=fastq_choices)
Bulkfastqfile = FieldList(FormField(NameFormFastq1),label='Bulk fastq file list: ', min_entries=0, validators=[Required()])
readlen=IntegerField('Enter the length of reads (bp): ', default=100, validators=[Optional()])
phred=SelectField('Enter Phred score: ', choices=(('33','33'),('64','64')), default='33', validators=[Optional()])
qccheck=SelectField('Enter whether perform qccheck: ', choices=(('true','true'),('false','false')), default='true', validators=[Optional()])
trim=SelectField('Enter whether perform trim reads: ', choices=(('true','true'),('false','false')), default='true', validators=[Optional()])
lastkeep=IntegerField('Enter the length of trimmed reads (bp): ', default=75, validators=[Optional()])
rmadapt=SelectField('Enter whether remove adapter of reads: ', choices=(('true','true'),('false','false')), default='true', validators=[Optional()])
ladapter=StringField('Enter the left adapter: ',default='AGATCGGAAGAGC')
radapter=StringField('Enter the right adapter: ',default='AGATCGGAAGAGC')
minlen=IntegerField('Discard trimmed reads that are shorter than (bp): ', default=50, validators=[Optional()])
removen=SelectField('Enter whether remove "N" bases of reads: ', choices=(('true','true'),('false','false')), default='true', validators=[Optional()])
ncutoff=FloatField('N cutoff: ', default=0.1, validators=[Optional()])
filtq=SelectField('Filters sequences based on quality of reads: ', choices=(('true','true'),('false','false')), default='true', validators=[Optional()])
minq=IntegerField('Minimum quality score to keep: ', default=20, validators=[Optional()])
pminq=IntegerField('Minimum percent of bases: ', default=80, validators=[Optional()])
rmunpaired=SelectField('Remove unpaied reads of reads: ', choices=(('true','true'),('false','false')), default='true', validators=[Optional()])
qcstat=SelectField('Generate QC statistic plot for reads: ', choices=(('true','true'),('false','false')), default='true', validators=[Optional()])
insertsize=IntegerField('Insert size of sequencing: ', default=400, validators=[Optional()])
windowsize=IntegerField('Coverage window size for plot: ', default=50000, validators=[Optional()])
pass
cov_depth = SelectField('Enter the number of the depth of coverage: ', default='5',choices=[(str(i), str(i)) for i in range(5, 105,5)], validators=[Optional()])
kernel = SelectField('Enter the type of smoothing kernel: ', default='tricube', choices=[('tricube', 'tricube'), ('uniform', 'uniform'), ('triangle', 'triangle'), ('triweight', 'triweight'), ('quartic', 'quartic')], validators=[Optional()])
width = IntegerField('Enter the width of the smoothing kernel (bp): ', default=33750, validators=[Optional()])
a = [(str(i), str(i)) for i in range(1, 17)]
a.insert(0, ('all', 'all'))
chrnum = SelectField('Enter the chromosome number to draw: ', choices=a, default='all', validators=[Optional()])
noraw = SelectField("Enter whether drawing raw G' values or not: ", choices=[('no', 'no'), ('yes', 'yes')], default='no', validators=[Optional()])
submit = SubmitField('Upload')
class BamForm1(Form):
P1bamfile = QuerySelectField('Enter P1 bam file', validators=[Required()],query_factory=bam_choices)
P2bamfile = QuerySelectField('Enter P2 bam file', validators=[Required()],query_factory=bam_choices)
Bulkbamfile = FieldList(FormField(NameFormBam1),label='Bam file list: ', min_entries=0, validators=[Required()])
cov_depth = SelectField('Enter the number of the depth of coverage: ', default='5',choices=[(str(i), str(i)) for i in range(5, 105,5)], validators=[Optional()])
kernel = SelectField('Enter the type of smoothing kernel: ', default='tricube', choices=[('tricube', 'tricube'), ('uniform', 'uniform'), ('triangle', 'triangle'), ('triweight', 'triweight'), ('quartic', 'quartic')], validators=[Optional()])
width = IntegerField('Enter the width of the smoothing kernel (bp): ', default=33750, validators=[Optional()])
a = [(str(i), str(i)) for i in range(1, 17)]
a.insert(0, ('all', 'all'))
chrnum = SelectField('Enter the chromosome number to draw: ', choices=a, default='all', validators=[Optional()])
noraw = SelectField("Enter whether drawing raw G' values or not: ", choices=[('no', 'no'), ('yes', 'yes')], default='no', validators=[Optional()])
submit = SubmitField('Upload')
class MapForm1(Form):
Bulkmapfile = FieldList(FormField(NameFormMap1),label='Bam file list: ', min_entries=0, validators=[Required()])
kernel = SelectField('Enter the type of smoothing kernel: ', default='tricube', choices=[('tricube', 'tricube'), ('uniform', 'uniform'), ('triangle', 'triangle'), ('triweight', 'triweight'), ('quartic', 'quartic')], validators=[Optional()])
width = IntegerField('Enter the width of the smoothing kernel (bp): ', default=33750, validators=[Optional()])
a = [(str(i), str(i)) for i in range(1, 17)]
a.insert(0, ('all', 'all'))
chrnum = SelectField('Enter the chromosome number to draw: ', choices=a, default='all', validators=[Optional()])
noraw = SelectField("Enter whether drawing raw G' values or not: ", choices=[('no', 'no'), ('yes', 'yes')], default='no', validators=[Optional()])
submit = SubmitField('Upload')
class EditProfileForm(Form):
name = StringField('Real name', validators=[Length(0, 64)])
location = StringField('Location', validators=[Length(0, 64)])
about_me = TextAreaField('About me')
submit = SubmitField('Submit')
class EditProfileAdminForm(Form):
email = StringField('Email', validators=[Required(), Length(1, 64),
Email()])
username = StringField('Username', validators=[
Required(), Length(1, 64), Regexp('^[A-Za-z][A-Za-z0-9_.]*$', 0,
'Usernames must have only letters, '
'numbers, dots or underscores')])
confirmed = BooleanField('Confirmed')
role = SelectField('Role', coerce=int)
name = StringField('Real name', validators=[Length(0, 64)])
location = StringField('Location', validators=[Length(0, 64)])
about_me = TextAreaField('About me')
submit = SubmitField('Submit')
def __init__(self, user, *args, **kwargs):
super(EditProfileAdminForm, self).__init__(*args, **kwargs)
self.role.choices = [(role.id, role.name)
for role in Role.query.order_by(Role.name).all()]
self.user = user
def validate_email(self, field):
if field.data != self.user.email and \
User.query.filter_by(email=field.data).first():
raise ValidationError('Email already registered.')
def validate_username(self, field):
if field.data != self.user.username and \
User.query.filter_by(username=field.data).first():
raise ValidationError('Username already in use.')
This diff is collapsed.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleAllowMixedLocalizations</key>
<string>true</string>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>fastqc</string>
<key>CFBundleIconFile</key>
<string>fastqc_icons.icns</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>FastQC</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.11.4</string>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleAllowMixedLocalizations</key>
<string>true</string>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>seqmonk</string>
<key>CFBundleIconFile</key>
<string>seqmonk.icns</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>SeqMonk</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.25.0</string>
</dict>
</plist>
# This file contains a set of sequence fragments which will be explicitly
# searched against your library. The reporting will be similar to the
# Kmer plot, except that every sequence in this list will be shown so
# you can use this to judge the level of adapter read-through even if those
# adapter sequences aren't picked out by the Kmer module.
#
# Since every sequence here will be analysed and the results plotted it
# doesn't make any sense to include duplicate sequences, or to add too
# many sequences since your plot will end up a mess.
#
# You can add more sequences to the file by putting one line per entry
# and specifying a name[tab]sequence. If the contaminant you add is
# likely to be of use to others please consider sending it to the FastQ
# authors, either via a bug report at www.bioinformatics.babraham.ac.uk/bugzilla/
# or by directly emailing simon.andrews@babraham.ac.uk so other users of
# the program can benefit.
#
# For the time being it's going to be easier to interpret this plot if all
# of the sequences provided are the same length, so we've gone with 12bp
# fragments for now.
Illumina Universal Adapter AGATCGGAAGAG
Illumina Small RNA 3' Adapter TGGAATTCTCGG
Illumina Small RNA 5' Adapter GATCGTCGGACT
Nextera Transposase Sequence CTGTCTCTTATA
SOLID Small RNA Adapter CGCCTTGGCCGT
\ No newline at end of file
# This file contains a list of potential contaminants which are
# frequently found in high throughput sequencing reactions. These
# are mostly sequences of adapters / primers used in the various
# sequencing chemistries.
#