SlideShare a Scribd company logo
1 of 60
FBW 
27-10-2014 
Wim Van Criekinge
Three Basic Data Types 
• Scalars - $ 
• Arrays of scalars - @ 
• Associative arrays of 
scalers or Hashes - %
• [m]/PATTERN/[g][i][o] 
• s/PATTERN/PATTERN/[g][i][e][o] 
• tr/PATTERNLIST/PATTERNLIST/[c][d][s]
The ‘structure’ of a Hash 
• An array looks something like this: 
@array = 
Index 
Value 
0 1 2 
'val1' 'val2' 'val3' 
• A hash looks something like this: 
Rob Matt Joe_A 
353-7236 353-7122 555-1212 
Key (name) 
Value 
%phone =
Sub routine 
$a=5; 
$b=9; 
$sum=Optellen(5,9); 
print "The SUM is $sumn"; 
sub Optellen() 
{ 
$d=@_[0]; 
$e=@_[1]; 
#alternatively we could do this: 
my($a,$b)=@_; 
my($answer)=$d+$e; 
return $answer; 
}
Overview 
• Advanced data structures in Perl 
• Object-oriented Programming in Perl 
• Bioperl: is a large collection of Perl 
software for bioinformatics 
• Motivation: 
– Simple extension: “Multiline parsing“ 
more difficult than expected 
• Goal: to make software modular, 
easier to maintain, more reliable, and 
easier to reuse
Multi-line parsing 
use strict; 
use Bio::SeqIO; 
my $filename="sw.txt"; 
my $sequence_object; 
my $seqio = Bio::SeqIO -> new ( 
'-format' => 'swiss', 
'-file' => $filename 
); 
while ($sequence_object = $seqio -> next_seq) { 
my $sequentie = $sequence_object-> seq(); 
print $sequentie."n"; 
}
Advanced data structures in Perl 
• The scalar, array and hash data 
structures are builtin datatypes in Perl 
and cover most programming needs 
• More complex data structures can be 
built from this basic ones
References: Scalars 
• Advanced data structures depend on 
Perl references. A reference is a scalar 
variable that “points at” some other 
value (the “referent”) 
$peptide = “TGDTSGGT”; 
$peptideref = $peptide; 
Print $peptideref.”n”; 
Print $$peptideref.”n”;
Reference to arrays 
@tags=("acacac","tgtgtgt","gcgcgc"); 
$tagref = @tags; 
print "@$tagrefn"; 
print $$tagref[1]."n"; 
print $tagref->[1]."n"; 
push (@$tagref,"aaaaa"); 
print "@tags";
References to hashes 
%geneticmarkers = 
('curly'=>'yes','hairy'=>'no','topiary'=>'yes'); 
$hashref = %geneticmarkers; 
print $hashref."n"; 
foreach $k (keys %$hashref) { 
print "keyt$kttvaluet$$hashref{$k}n"; 
} 
foreach $k (keys %$hashref) { 
print "keyt$kttvaluet$hashref->{$k}n"; 
}
Anonymous References 
Anonymous … 
• A value need not be contained in a defined variable to 
create a reference 
• To create an anonymous array reference, use square 
brackets instead of parentheses: 
• $a_ref = [20, 30, 50, “hi!!”]; 
• @a = @$a_ref; 
– @a  (20, 30, 50, “hi!!”); 
• For hash references, use curly brackets instead of 
parentheses: 
• $h_ref={“sky”=>‘blue’,“grass”=>‘green’} 
• %h = %$h_ref; 
– %h  (“sky” => ‘blue’, “grass” => ‘green’);
Programming paradigms 
• Declarative (procedural) programming 
– Perl, C, Fortran, Pascal, Basic, … 
• Functional programming 
– Lisp, SML, … 
• Logic programming 
– Prolog 
• Object-oriented programming 
– Perl, C++,Smalltalk, Java, …
The key idea 
• All data is stored and used by means 
of objects, and each object can only be 
accessed by means of the defined 
subroutines call methods. 
• Together, the objects and methods 
constitute a class 
• Warning: a lot of conflicting 
terminology among 00 practitioners
Perl 00 
• A class is a package 
• An object is a reference to a data 
structure (usually a hash) in a class 
• A method is a subroutine in the class
Perl Classes 
• Modules/Packages 
– A Perl module is a file that uses a package 
declaration 
– Packages provide a separate namespace for 
different parts of program 
– A namespace protects the variable of one part of 
a program from unwanted modification by 
another part of the program 
– The module must always have a last line that 
evaluates to true, e.g. 1; 
– The module must be in “known” directory 
(environment variable) 
• Eg … site/lib/bio/Sequentie.pm
Bioperl.pl 
use Bio::Sequentie; 
use Data::Dumper; 
%sequence_object = 
(_id=>"AF001",_name=>"Demo",_seq=>"ATGAT 
G"); 
print Dumper(%sequence_object); 
$seqRef = %sequence_object; 
Bio::Sequentie::RandomSeq($seqRef,100); 
print Dumper($seqRef);
.. /site/lib/bio/Sequentie.pm 
package Bio::Sequentie; 
use strict; 
use Data::Dumper; 
sub RandomSeq { 
my @nucleotides = ('A','C','G','T'); 
my $self = shift; 
#print $self; 
print Dumper($self); 
my $length = shift || 40; 
print $length; 
$self->{_id} = "0000"; 
$self->{_name} = "Random Sequence"; 
$self->{_seq}=""; 
for (my $i = 0; $i < $length; $i++) { 
my $base = $nucleotides[int(rand(4))]; 
$self->{_seq} .= $base; 
} 
#return 1; 
} 
1;
Bless 
• Making objects … Bless attaches a 
class name to a reference, making it 
possible to use references as objects in 
a class
Bioperl.pl 
use Bio::Sequentie; 
use Data::Dumper; 
%sequence_object = 
(_id=>"AF001",_name=>"Demo",_se 
q=>"ATGATG"); 
$seqRef = %sequence_object; 
bless ($seqRef,"Bio::Sequentie"); 
$seqRef->RandomSeq(100); 
print Dumper($seqRef);
Bless 
• Making objects … Bless attaches a 
class name to a reference, making it 
possible to use references as objects in 
a class 
• New is the usual name given to the 
special method in the class that creates 
a new class object (CONSTRUCTOR)
Method: NEW (constructor) 
sub new { 
print "new"; 
my ($class, $id, $name, $seq) = @_; 
my $ref = 
{_id=>$id,_name=>$name,_seq=>$se 
q}; 
return bless $ref, $class; 
}
Random Sequence an OO Way 
use Bio::Sequentie; 
use Data::Dumper; 
$seqRef=Bio::Sequentie- 
>new("007","Constructor","it works"); 
print Dumper($seqRef); 
$seqRef->RandomSeq(100); 
print Dumper($seqRef);
Review 
• Three OO rules 
– Classes are packages 
– Methods are subroutines 
– Objects are blessed referents 
• Bless ($seq, “Bio::Seq”;)
CPAN 
• CPAN: The Comprehensive Perl 
Archive Network is available at 
www.cpan.org and is a very large 
respository of Perl modules for all 
kind of taks (including bioperl)
What is BioPerl? 
• An ‘open source’ project 
– http://bio.perl.org or http://www.cpan.org 
• A loose international collaboration of 
biologist/programmers 
– Nobody (that I know of) gets paid for this 
• A collection of PERL modules and methods for 
doing a number of bioinformatics tasks 
– Think of it as subroutines to do biology 
• Consider it a ‘tool-box’ 
– There are a lot of nice tools in there, and (usually) 
somebody else takes care of fixing parsers when 
they break 
• BioPerl code is portable - if you give somebody 
a script, it will probably work on their system
What BioPerl isn’t 
• ‘Out of the box’ solutions to problems 
– You will have to know a little perl, and you will have 
to read documentation 
• Particularly well documented 
– Yes, there is documentation, but it can be difficult to 
see the ‘big picture’ - or sometimes the small picture 
• It can be a substantial investment in time to 
learn how to use bioperl properly 
– Once you get used to it, it is pretty simple to 
do some complicated things
Installing Modules 
Steps for installing modules 
Uncompress the module 
Gunzip file.tar.gz 
 Tar –xvf file.tar 
perl Makefile.PL 
make 
make test 
make install
Bioperl installation 
• PPM 
• Perl Package Manager 
• Search Bioperl 
• Install Bioperl 
• What is the PPM? 
• The Programmer's Package Manager (PPM), formerly known 
as the Perl Package Manager, provides a command line 
interface for managing your modules and extensions 
(packages). PPM is used to access package repositories (or 
collections of packages on other machines), install and 
remove packages from your system, as well as update 
previously installed packages with the latest versions. 
• E:PerlBinppm
Installation on Windows (ActiveState) 
• Using PPM shell to install BioPerl 
– Get the number of the BioPerl repository: 
– PPM>repository 
– Set the BioPerl repository, find BioPerl, install 
BioPerl: 
– PPM>repository set <BioPerl repository number> 
– PPM>search * 
– PPM>install <BioPerl package number> 
• Download BioPerl in archive form from 
– http://www.BioPerl.org/Core/Latest/index.shtml 
– Use winzip to uncompress and install
Directory Structure 
• BioPerl directory structure organization: 
– Bio/ BioPerl modules 
– models/ UML for BioPerl classes 
– t/ Perl built-in tests 
– t/data/ Data files used for the tests 
– scripts/ Reusable scripts that use BioPerl 
– scripts/contributed/ Contributed scripts not 
necessarily integrated into BioPerl. 
– doc/ "How To" files and the FAQ as XML
# Let the code begin 
Seq Objects 
SeqIO Objects
Sequence Object Creation 
Sequence Creation : 
$sequence = Bio::Seq->new( -seq => ‘AATGCAA’); 
$sequence = Bio::Seq->new( -file => ‘sequencefile.fasta’); 
$sequence = Bio::Seq->new( -file => ‘sequencefile’, 
-ffmt => ‘gcg’ ); 
Flat File Format Support : 
Raw, FASTA, GCG, GenBank, EMBL, PIR 
Via ReadSeq: IG, NBRF, DnaStrider, Fitch, Phylip, MSF, PAUP
Multi-line parsing 
use strict; 
use Bio::SeqIO; 
my $filename="sw.txt"; 
my $sequence_object; 
my $seqio = Bio::SeqIO -> new ( 
'-format' => 'swiss', 
'-file' => $filename 
); 
while ($sequence_object = $seqio -> next_seq) { 
my $sequentie = $sequence_object-> seq(); 
print $sequentie."n"; 
}
Live.pl 
#!e:Perlbinperl.exe -w 
# script for looping over genbank entries, printing out name 
use Bio::DB::Genbank; 
use Data::Dumper; 
$gb = new Bio::DB::GenBank(); 
$sequence_object = $gb->get_Seq_by_id('MUSIGHBA1'); 
print Dumper ($sequence_object); 
$seq1_id = $sequence_object->display_id(); 
$seq1_s = $sequence_object->seq(); 
print "seq1 display id is $seq1_id n"; 
print "seq1 sequence is $seq1_s n";
Live2.pl 
#!e:Perlbinperl.exe -w 
# script for looping over genbank entries, printing out name 
use Bio::DB::Genbank 
$gb = new Bio::DB::GenBank(); 
$sequence_object = $gb->get_Seq_by_id('MUSIGHBA1'); 
$seq1_id = $sequence_object->display_id(); 
$seq1_s = $sequence_object->seq(); 
print "seq1 display id is $seq1_id n"; 
print "seq1 sequence is $seq1_s n"; 
$sequence_object = $gb->get_Seq_by_acc('AF303112'); 
$seq2_id = $sequence_object->display_id(); 
$seq2_s = $sequence_object->seq(); 
print "seq2 display id is $seq2_id n"; 
print "seq2 sequence id is $seq2_s n"; 
$seqio = $gb->get_Stream_by_id( 
[ qw(2981014 J00522 AF303112)]); 
$c=0; 
while ($sequence_object = $seqio->next_seq()){ 
$c++; 
print "Display id ($c) in stream is ", $sequence_object->display_id() ,"n"; 
}
File converter 
#!/opt/perl/bin/perl -w 
#genbank_to_fasta.pl 
use Bio::SeqIO; 
my $input = Bio::SeqIO::new->(‘-file’ => $ARGV[0], 
‘-format’ => 
‘GenBank’); 
my $output = Bio::SeqIO::new->(‘-file’ => ‘>output.fasta’, 
‘-format’ => ‘Fasta’); 
while (my $seq = $input->next_seq()){ 
$output->write_seq($seq) 
}
Changing Formats (with Filehandles): 
#!/opt/perl/bin/perl -w 
#genbank_to_fasta_with_filehandles.pl 
use Bio::SeqIO; 
my $input = Bio::SeqIO::newFh->(‘-file’ => $ARGV[0], 
‘-format’ => 
‘GenBank’); 
my $output = Bio::SeqIO::newFh->(‘-format’ => ‘Fasta’); 
while (<$input>){ 
print $output $_ 
}
• Bptutorial.pl 
• It includes the written tutorial as well 
as runnable scripts 
• 2 ESSENTIAL TOOLS 
– Data::Dumper to find out what class your 
in 
– Perl bptutorial (100 Bio::Seq) to find the 
available methods for that class
Oef 1 
• Zoek het meest zure en het meest basische aminozuur in Swiss-Prot 
door het isoelectrisch punt te berekenen. 
• Is er een biologische verklaring voor de gevonden resultaten ? 
Uit AAIndex 
H ZIMJ680104 
D Isoelectric point (Zimmerman et al., 1968) 
R LIT:2004109b PMID:5700434 
A Zimmerman, J.M., Eliezer, N. and Simha, R. 
T The characterization of amino acid sequences in proteins by statistical 
methods 
J J. Theor. Biol. 21, 170-201 (1968) 
C KLEP840101 0.941 FAUJ880111 0.813 FINA910103 0.805 
I A/L R/K N/M D/F C/P Q/S E/T G/W H/Y I/V 
6.00 10.76 5.41 2.77 5.05 5.65 3.22 5.97 7.59 6.02 
5.98 9.74 5.74 5.48 6.30 5.68 5.66 5.89 5.66 5.96
• Database 
– (choose) 
http://www.ebi.ac.uk/swissprot/FTP/ftp.h 
tml 
– (small) 
– http://biobix.ugent.be/zip/swiss-prot.zip
Oef 2 
• CpG Islands 
– Download from ENSEMBL 100 (random) promoters 
(3000 bp) 
– How many times would you expect to observe CG if all 
nucleotides were equipropable 
– Count the number op times CG is observed for these 100 
genes and make a histogram from these scores 
– CG repeats are often methylated. In order to study 
methylation patterns bisulfide treatment of DNA is used. 
Bisulfide changes every C which is not followed by G 
into T. Generate computationally the bisulfide treated 
version of DNA. 
– How would you find primers that discriminate between 
methylated and unmethylated DNA ? Given that the 
genome is 3.109 bp how long do you need to make a 
primer to avoid mispriming ?
So what is BioPerl? (continued…) 
• 551 modules (incl. 82 interface 
modules) 
• 37 module groups 
• 79,582 lines of code (223,310 lines 
total) 
• 144 lines of code per module 
• For More info: BioPerl Module 
Listing
Searching for Sequence Similarity 
• BLAST with BioPerl 
• Parsing Blast and FASTA Reports 
– Search and SearchIO 
– BPLite, BPpsilite, BPbl2seq 
• Parsing HMM Reports 
• Standalone BioPerl BLAST
Remote Execution of BLAST 
• BioPerl has built in capability of running BLAST 
jobs remotely using RemoteBlast.pm 
• Runs these jobs at NCBI automatically 
– NCBI has dynamic configurations (server side) to 
“always” be up and ready 
– Automatically updated for new BioPerl Releases 
• Convenient for independent researchers who do not 
have access to huge computing resources 
• Quick submission of Blast jobs without tying up 
local resources (especially if working from 
standalone workstation) 
• Legal Restrictions!!!
Example of Remote Blast 
A script to run a remote blast would be something like the 
following skeleton: 
$remote_blast = Bio::Tools::Run::RemoteBlast->new( 
'-prog' => 'blastp','-data' => 'ecoli','-expect' => '1e- 
10' ); 
$r = $remote_blast->submit_blast("t/data/ecolitst.fa"); 
while (@rids = $remote_blast->each_rid ) { foreach 
$rid ( @rids ) {$rc = $remote_blast- 
>retrieve_blast($rid);}} 
In this example we are running a blastp (pairwise comparison) 
using the ecoli database and a e-value threshold of 1e-10. 
The sequences that are being compared are located in the file 
“t/data/ecolist.fa”.
Example 
It is important to note that all command line options that fall 
under the blastall umbrella are available under 
BlastRemote.pm. 
For example you can change some parameters of the remote job. 
Consider the following example: 
$Bio::Tools::Run::RemoteBlast::HEADER{'MATRI 
X_NAME'} = 'BLOSUM25'; 
This basically allows you to change the matrix used to BLOSUM 
25, rather than the default of BLOSUM 62.
Parsing Blast Reports 
• One of the strengths of BioPerl is its ability to 
parse complex data structures. Like a blast 
report. 
• Unfortunately, there is a bit of arcane 
terminology. 
• Also, you have to ‘think like bioperl’, in order 
to figure out the syntax. 
• This next script might get you started
Sample Script to Read and Parse BLAST Report 
# Get the report $searchio = new Bio::SearchIO (-format => 
'blast', -file => $blast_report); 
$result = $searchio->next_result; # Get info about the entire 
report $result->database_name; 
$algorithm_type = $result->algorithm; 
# get info about the first hit $hit = $result->next_hit; 
$hit_name = $hit->name ; 
# get info about the first hsp of the first hit $hsp = 
$hit->next_hsp; 
$hsp_start = $hsp->query->start;
Parsing BLAST Using BPlite, BPpsilite, and BPbl2seq 
• Similar to Search and SearchIO in 
basic functionality 
• However: 
– Older and will likely be phased out in the 
near future 
– Substantially limited advanced 
functionality compared to Search and 
SearchIO 
– Important to know about because many 
legacy scripts utilize these objects and 
either need to be converted
Parse BLAST output 
#!/opt/perl/bin/perl -w 
#bioperl_blast_parse.pl 
# program prints out query, and all hits with scores for each blast result 
use Bio::SearchIO; 
my $record = Bio::SearchIO->new(-format => ‘blast’, -file => $ARGV[0]); 
while (my $result = $record->next_result){ 
print “>”, $result->query_name, “ “, $result->query_description, “n”; 
my $seen = 0; 
while (my $hit = $result->next_hit){ 
print “t”, $hit->name, “t”, $hit->bits, “t”, $hit->significance, “n”; 
$seen++ } 
if ($seen == 0 ) { print “No Hits Foundn” } 
}
Parse BLAST in a little more detail 
#!/opt/perl/bin/perl -w 
#bioperl_blast_parse_hsp.pl 
# program prints out query, and all hsps with scores for each blast result 
use Bio::SearchIO; 
my $record = Bio::SearchIO->new(-format => ‘blast’, -file => $ARGV[0]); 
while (my $result = $record->next_result){ 
print “>”, $result->query_name, “ “, $result->query_description, “n”; 
my $seen = 0; 
while (my $hit = $result->next_hit{ 
$seen++; 
while (my $hsp = $hit->next_hsp){ 
print “t”, $hit->name, “has an HSP with an evalue of: “, 
$hsp->evalue, “n”;} 
if ($seen == 0 ) { print “No Hits Foundn” } 
}
SearchIO parsers: 
• SearchIO can parse (and reformat) several 
formats containing alignment or similarity 
data: 
– blast 
– xml formatted blast (still a little wonky) 
– psi-blast 
– exonerate 
– WABA 
– FASTA 
– HMMER 
• The interface is the same for all of these, 
making your life a little easier.
What else is in BioPerl? 
– Cluster or Assembly tools 
– Protein structure tools 
– Graphics 
– Database functions 
– Phylogeny tools 
– Bibliography tools 
– …
Some advanced BioPerl 
• What if you want to draw pretty images of blast 
reports? Bio::Graphics to the rescue: 
• Input - A blast report (single query): 
• Output:
Some really advanced BioPerl 
• What if you want to display an entire genome with 
annotation? Grow your own genome project 
– We can do that all in BioPerl (and a mySQL or Oracle 
database): 
• GBrowse - the Generic Genome Browser 
– Allows any feature to be displayed on a reference sequence 
– Many different styles of ‘Glyphs’, so all features can be 
drawn in a different style 
– Allows user to zoom in and out on reference sequence 
– User can select which features to display 
– User can upload their own features to be displayed on your 
reference sequence 
– And more!!! 
• http://www.bch.msu.edu/cgi-bin/gbrowse 
• http://www.gmod.org/
GBrowse (Generic Genome Browser)

More Related Content

What's hot

New SPL Features in PHP 5.3
New SPL Features in PHP 5.3New SPL Features in PHP 5.3
New SPL Features in PHP 5.3Matthew Turland
 
Manifests of Future Past
Manifests of Future PastManifests of Future Past
Manifests of Future PastPuppet
 
Corephpcomponentpresentation 1211425966721657-8
Corephpcomponentpresentation 1211425966721657-8Corephpcomponentpresentation 1211425966721657-8
Corephpcomponentpresentation 1211425966721657-8PrinceGuru MS
 
Hands on Hadoop and pig
Hands on Hadoop and pigHands on Hadoop and pig
Hands on Hadoop and pigSudar Muthu
 
Programming in Computational Biology
Programming in Computational BiologyProgramming in Computational Biology
Programming in Computational BiologyAtreyiB
 
SPL: The Undiscovered Library - DataStructures
SPL: The Undiscovered Library -  DataStructuresSPL: The Undiscovered Library -  DataStructures
SPL: The Undiscovered Library - DataStructuresMark Baker
 
Neatly Hashing a Tree: FP tree-fold in Perl5 & Perl6
Neatly Hashing a Tree: FP tree-fold in Perl5 & Perl6Neatly Hashing a Tree: FP tree-fold in Perl5 & Perl6
Neatly Hashing a Tree: FP tree-fold in Perl5 & Perl6Workhorse Computing
 
Utility Modules That You Should Know About
Utility Modules That You Should Know AboutUtility Modules That You Should Know About
Utility Modules That You Should Know Aboutjoshua.mcadams
 
BSDM with BASH: Command Interpolation
BSDM with BASH: Command InterpolationBSDM with BASH: Command Interpolation
BSDM with BASH: Command InterpolationWorkhorse Computing
 
DPC 2012 : PHP in the Dark Workshop
DPC 2012 : PHP in the Dark WorkshopDPC 2012 : PHP in the Dark Workshop
DPC 2012 : PHP in the Dark WorkshopJeroen Keppens
 
Building Lithium Apps
Building Lithium AppsBuilding Lithium Apps
Building Lithium AppsNate Abele
 

What's hot (20)

New SPL Features in PHP 5.3
New SPL Features in PHP 5.3New SPL Features in PHP 5.3
New SPL Features in PHP 5.3
 
Manifests of Future Past
Manifests of Future PastManifests of Future Past
Manifests of Future Past
 
2012 03 08_dbi
2012 03 08_dbi2012 03 08_dbi
2012 03 08_dbi
 
Corephpcomponentpresentation 1211425966721657-8
Corephpcomponentpresentation 1211425966721657-8Corephpcomponentpresentation 1211425966721657-8
Corephpcomponentpresentation 1211425966721657-8
 
Hands on Hadoop and pig
Hands on Hadoop and pigHands on Hadoop and pig
Hands on Hadoop and pig
 
Introduction to Perl and BioPerl
Introduction to Perl and BioPerlIntroduction to Perl and BioPerl
Introduction to Perl and BioPerl
 
Programming in Computational Biology
Programming in Computational BiologyProgramming in Computational Biology
Programming in Computational Biology
 
Intro to The PHP SPL
Intro to The PHP SPLIntro to The PHP SPL
Intro to The PHP SPL
 
05php
05php05php
05php
 
SPL: The Undiscovered Library - DataStructures
SPL: The Undiscovered Library -  DataStructuresSPL: The Undiscovered Library -  DataStructures
SPL: The Undiscovered Library - DataStructures
 
Neatly Hashing a Tree: FP tree-fold in Perl5 & Perl6
Neatly Hashing a Tree: FP tree-fold in Perl5 & Perl6Neatly Hashing a Tree: FP tree-fold in Perl5 & Perl6
Neatly Hashing a Tree: FP tree-fold in Perl5 & Perl6
 
Utility Modules That You Should Know About
Utility Modules That You Should Know AboutUtility Modules That You Should Know About
Utility Modules That You Should Know About
 
Spl Not A Bridge Too Far phpNW09
Spl Not A Bridge Too Far phpNW09Spl Not A Bridge Too Far phpNW09
Spl Not A Bridge Too Far phpNW09
 
BSDM with BASH: Command Interpolation
BSDM with BASH: Command InterpolationBSDM with BASH: Command Interpolation
BSDM with BASH: Command Interpolation
 
DPC 2012 : PHP in the Dark Workshop
DPC 2012 : PHP in the Dark WorkshopDPC 2012 : PHP in the Dark Workshop
DPC 2012 : PHP in the Dark Workshop
 
Perl tutorial final
Perl tutorial finalPerl tutorial final
Perl tutorial final
 
Subroutines
SubroutinesSubroutines
Subroutines
 
Perl Basics for Pentesters Part 1
Perl Basics for Pentesters Part 1Perl Basics for Pentesters Part 1
Perl Basics for Pentesters Part 1
 
Building Lithium Apps
Building Lithium AppsBuilding Lithium Apps
Building Lithium Apps
 
Perl basics for pentesters part 2
Perl basics for pentesters part 2Perl basics for pentesters part 2
Perl basics for pentesters part 2
 

Viewers also liked

2015 bioinformatics python_io_wim_vancriekinge
2015 bioinformatics python_io_wim_vancriekinge2015 bioinformatics python_io_wim_vancriekinge
2015 bioinformatics python_io_wim_vancriekingeProf. Wim Van Criekinge
 
Jose María Ordovás-El impacto de las ciencias ómicas en la nutrición, la medi...
Jose María Ordovás-El impacto de las ciencias ómicas en la nutrición, la medi...Jose María Ordovás-El impacto de las ciencias ómicas en la nutrición, la medi...
Jose María Ordovás-El impacto de las ciencias ómicas en la nutrición, la medi...Fundación Ramón Areces
 
Bioinformatics t5-databasesearching v2014
Bioinformatics t5-databasesearching v2014Bioinformatics t5-databasesearching v2014
Bioinformatics t5-databasesearching v2014Prof. Wim Van Criekinge
 
Bioinformatics t9-t10-biocheminformatics v2014
Bioinformatics t9-t10-biocheminformatics v2014Bioinformatics t9-t10-biocheminformatics v2014
Bioinformatics t9-t10-biocheminformatics v2014Prof. Wim Van Criekinge
 
2014 05 21_personal_genomics_v_n2n_vfinal
2014 05 21_personal_genomics_v_n2n_vfinal2014 05 21_personal_genomics_v_n2n_vfinal
2014 05 21_personal_genomics_v_n2n_vfinalProf. Wim Van Criekinge
 
2015 bioinformatics alignments_wim_vancriekinge
2015 bioinformatics alignments_wim_vancriekinge2015 bioinformatics alignments_wim_vancriekinge
2015 bioinformatics alignments_wim_vancriekingeProf. Wim Van Criekinge
 
Bioinformatica t9-t10-biocheminformatics
Bioinformatica t9-t10-biocheminformaticsBioinformatica t9-t10-biocheminformatics
Bioinformatica t9-t10-biocheminformaticsProf. Wim Van Criekinge
 

Viewers also liked (20)

2015 bioinformatics wim_vancriekinge
2015 bioinformatics wim_vancriekinge2015 bioinformatics wim_vancriekinge
2015 bioinformatics wim_vancriekinge
 
Bioinformatics t8-go-hmm v2014
Bioinformatics t8-go-hmm v2014Bioinformatics t8-go-hmm v2014
Bioinformatics t8-go-hmm v2014
 
Bioinformatica t7-protein structure
Bioinformatica t7-protein structureBioinformatica t7-protein structure
Bioinformatica t7-protein structure
 
2015 bioinformatics python_io_wim_vancriekinge
2015 bioinformatics python_io_wim_vancriekinge2015 bioinformatics python_io_wim_vancriekinge
2015 bioinformatics python_io_wim_vancriekinge
 
2015 04 22_time_labs_shared
2015 04 22_time_labs_shared2015 04 22_time_labs_shared
2015 04 22_time_labs_shared
 
Jose María Ordovás-El impacto de las ciencias ómicas en la nutrición, la medi...
Jose María Ordovás-El impacto de las ciencias ómicas en la nutrición, la medi...Jose María Ordovás-El impacto de las ciencias ómicas en la nutrición, la medi...
Jose María Ordovás-El impacto de las ciencias ómicas en la nutrición, la medi...
 
2015 bioinformatics bio_python_part4
2015 bioinformatics bio_python_part42015 bioinformatics bio_python_part4
2015 bioinformatics bio_python_part4
 
2015 bioinformatics bio_python
2015 bioinformatics bio_python2015 bioinformatics bio_python
2015 bioinformatics bio_python
 
Thesis bio bix_2014
Thesis bio bix_2014Thesis bio bix_2014
Thesis bio bix_2014
 
Bioinformatics t5-databasesearching v2014
Bioinformatics t5-databasesearching v2014Bioinformatics t5-databasesearching v2014
Bioinformatics t5-databasesearching v2014
 
Bioinformatics v2014 wim_vancriekinge
Bioinformatics v2014 wim_vancriekingeBioinformatics v2014 wim_vancriekinge
Bioinformatics v2014 wim_vancriekinge
 
Bioinformatica t8-go-hmm
Bioinformatica t8-go-hmmBioinformatica t8-go-hmm
Bioinformatica t8-go-hmm
 
Bioinformatics t9-t10-biocheminformatics v2014
Bioinformatics t9-t10-biocheminformatics v2014Bioinformatics t9-t10-biocheminformatics v2014
Bioinformatics t9-t10-biocheminformatics v2014
 
2012 12 12_adam_v_final
2012 12 12_adam_v_final2012 12 12_adam_v_final
2012 12 12_adam_v_final
 
2014 05 21_personal_genomics_v_n2n_vfinal
2014 05 21_personal_genomics_v_n2n_vfinal2014 05 21_personal_genomics_v_n2n_vfinal
2014 05 21_personal_genomics_v_n2n_vfinal
 
Bioinformatica 06-10-2011-t2-databases
Bioinformatica 06-10-2011-t2-databasesBioinformatica 06-10-2011-t2-databases
Bioinformatica 06-10-2011-t2-databases
 
Bioinformatica 27-10-2011-t4-alignments
Bioinformatica 27-10-2011-t4-alignmentsBioinformatica 27-10-2011-t4-alignments
Bioinformatica 27-10-2011-t4-alignments
 
2015 bioinformatics alignments_wim_vancriekinge
2015 bioinformatics alignments_wim_vancriekinge2015 bioinformatics alignments_wim_vancriekinge
2015 bioinformatics alignments_wim_vancriekinge
 
Bioinformatica t3-scoring matrices
Bioinformatica t3-scoring matricesBioinformatica t3-scoring matrices
Bioinformatica t3-scoring matrices
 
Bioinformatica t9-t10-biocheminformatics
Bioinformatica t9-t10-biocheminformaticsBioinformatica t9-t10-biocheminformatics
Bioinformatica t9-t10-biocheminformatics
 

Similar to Bioinformatics p5-bioperlv2014

Learning Puppet basic thing
Learning Puppet basic thing Learning Puppet basic thing
Learning Puppet basic thing DaeHyung Lee
 
Automating Content Import
Automating Content ImportAutomating Content Import
Automating Content ImportDavid Lippman
 
FFW Gabrovo PMG - PHP OOP Part 3
FFW Gabrovo PMG - PHP OOP Part 3FFW Gabrovo PMG - PHP OOP Part 3
FFW Gabrovo PMG - PHP OOP Part 3Toni Kolev
 
php fundamental
php fundamentalphp fundamental
php fundamentalzalatarunk
 
Php introduction with history of php
Php introduction with history of phpPhp introduction with history of php
Php introduction with history of phppooja bhandari
 
Test in action week 3
Test in action   week 3Test in action   week 3
Test in action week 3Yi-Huan Chan
 
Workshop quality assurance for php projects - phpbelfast
Workshop quality assurance for php projects - phpbelfastWorkshop quality assurance for php projects - phpbelfast
Workshop quality assurance for php projects - phpbelfastMichelangelo van Dam
 
Practical PHP 5.3
Practical PHP 5.3Practical PHP 5.3
Practical PHP 5.3Nate Abele
 
Workshop quality assurance for php projects - ZendCon 2013
Workshop quality assurance for php projects - ZendCon 2013Workshop quality assurance for php projects - ZendCon 2013
Workshop quality assurance for php projects - ZendCon 2013Michelangelo van Dam
 
Supercharging WordPress Development in 2018
Supercharging WordPress Development in 2018Supercharging WordPress Development in 2018
Supercharging WordPress Development in 2018Adam Tomat
 
Advanced symfony Techniques
Advanced symfony TechniquesAdvanced symfony Techniques
Advanced symfony TechniquesKris Wallsmith
 
Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12Michelangelo van Dam
 
Advanced Php - Macq Electronique 2010
Advanced Php - Macq Electronique 2010Advanced Php - Macq Electronique 2010
Advanced Php - Macq Electronique 2010Michelangelo van Dam
 
TYPO3 Extension development using new Extbase framework
TYPO3 Extension development using new Extbase frameworkTYPO3 Extension development using new Extbase framework
TYPO3 Extension development using new Extbase frameworkChristian Trabold
 
Quality Assurance for PHP projects - ZendCon 2012
Quality Assurance for PHP projects - ZendCon 2012Quality Assurance for PHP projects - ZendCon 2012
Quality Assurance for PHP projects - ZendCon 2012Michelangelo van Dam
 

Similar to Bioinformatics p5-bioperlv2014 (20)

Learning Puppet basic thing
Learning Puppet basic thing Learning Puppet basic thing
Learning Puppet basic thing
 
Automating Content Import
Automating Content ImportAutomating Content Import
Automating Content Import
 
FFW Gabrovo PMG - PHP OOP Part 3
FFW Gabrovo PMG - PHP OOP Part 3FFW Gabrovo PMG - PHP OOP Part 3
FFW Gabrovo PMG - PHP OOP Part 3
 
php fundamental
php fundamentalphp fundamental
php fundamental
 
Php introduction with history of php
Php introduction with history of phpPhp introduction with history of php
Php introduction with history of php
 
php
phpphp
php
 
Test in action week 3
Test in action   week 3Test in action   week 3
Test in action week 3
 
Workshop quality assurance for php projects - phpbelfast
Workshop quality assurance for php projects - phpbelfastWorkshop quality assurance for php projects - phpbelfast
Workshop quality assurance for php projects - phpbelfast
 
CakePHP
CakePHPCakePHP
CakePHP
 
Practical PHP 5.3
Practical PHP 5.3Practical PHP 5.3
Practical PHP 5.3
 
Workshop quality assurance for php projects - ZendCon 2013
Workshop quality assurance for php projects - ZendCon 2013Workshop quality assurance for php projects - ZendCon 2013
Workshop quality assurance for php projects - ZendCon 2013
 
Supercharging WordPress Development in 2018
Supercharging WordPress Development in 2018Supercharging WordPress Development in 2018
Supercharging WordPress Development in 2018
 
Advanced symfony Techniques
Advanced symfony TechniquesAdvanced symfony Techniques
Advanced symfony Techniques
 
Ch8(oop)
Ch8(oop)Ch8(oop)
Ch8(oop)
 
Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12
 
Intro to Perl and Bioperl
Intro to Perl and BioperlIntro to Perl and Bioperl
Intro to Perl and Bioperl
 
Advanced Php - Macq Electronique 2010
Advanced Php - Macq Electronique 2010Advanced Php - Macq Electronique 2010
Advanced Php - Macq Electronique 2010
 
TYPO3 Extension development using new Extbase framework
TYPO3 Extension development using new Extbase frameworkTYPO3 Extension development using new Extbase framework
TYPO3 Extension development using new Extbase framework
 
Training on php by cyber security infotech (csi)
Training on  php by cyber security infotech (csi)Training on  php by cyber security infotech (csi)
Training on php by cyber security infotech (csi)
 
Quality Assurance for PHP projects - ZendCon 2012
Quality Assurance for PHP projects - ZendCon 2012Quality Assurance for PHP projects - ZendCon 2012
Quality Assurance for PHP projects - ZendCon 2012
 

More from Prof. Wim Van Criekinge

2019 03 05_biological_databases_part5_v_upload
2019 03 05_biological_databases_part5_v_upload2019 03 05_biological_databases_part5_v_upload
2019 03 05_biological_databases_part5_v_uploadProf. Wim Van Criekinge
 
2019 03 05_biological_databases_part4_v_upload
2019 03 05_biological_databases_part4_v_upload2019 03 05_biological_databases_part4_v_upload
2019 03 05_biological_databases_part4_v_uploadProf. Wim Van Criekinge
 
2019 03 05_biological_databases_part3_v_upload
2019 03 05_biological_databases_part3_v_upload2019 03 05_biological_databases_part3_v_upload
2019 03 05_biological_databases_part3_v_uploadProf. Wim Van Criekinge
 
2019 02 21_biological_databases_part2_v_upload
2019 02 21_biological_databases_part2_v_upload2019 02 21_biological_databases_part2_v_upload
2019 02 21_biological_databases_part2_v_uploadProf. Wim Van Criekinge
 
2019 02 12_biological_databases_part1_v_upload
2019 02 12_biological_databases_part1_v_upload2019 02 12_biological_databases_part1_v_upload
2019 02 12_biological_databases_part1_v_uploadProf. Wim Van Criekinge
 
Bio ontologies and semantic technologies[2]
Bio ontologies and semantic technologies[2]Bio ontologies and semantic technologies[2]
Bio ontologies and semantic technologies[2]Prof. Wim Van Criekinge
 
2018 03 27_biological_databases_part4_v_upload
2018 03 27_biological_databases_part4_v_upload2018 03 27_biological_databases_part4_v_upload
2018 03 27_biological_databases_part4_v_uploadProf. Wim Van Criekinge
 
2018 02 20_biological_databases_part2_v_upload
2018 02 20_biological_databases_part2_v_upload2018 02 20_biological_databases_part2_v_upload
2018 02 20_biological_databases_part2_v_uploadProf. Wim Van Criekinge
 
2018 02 20_biological_databases_part1_v_upload
2018 02 20_biological_databases_part1_v_upload2018 02 20_biological_databases_part1_v_upload
2018 02 20_biological_databases_part1_v_uploadProf. Wim Van Criekinge
 

More from Prof. Wim Van Criekinge (20)

2020 02 11_biological_databases_part1
2020 02 11_biological_databases_part12020 02 11_biological_databases_part1
2020 02 11_biological_databases_part1
 
2019 03 05_biological_databases_part5_v_upload
2019 03 05_biological_databases_part5_v_upload2019 03 05_biological_databases_part5_v_upload
2019 03 05_biological_databases_part5_v_upload
 
2019 03 05_biological_databases_part4_v_upload
2019 03 05_biological_databases_part4_v_upload2019 03 05_biological_databases_part4_v_upload
2019 03 05_biological_databases_part4_v_upload
 
2019 03 05_biological_databases_part3_v_upload
2019 03 05_biological_databases_part3_v_upload2019 03 05_biological_databases_part3_v_upload
2019 03 05_biological_databases_part3_v_upload
 
2019 02 21_biological_databases_part2_v_upload
2019 02 21_biological_databases_part2_v_upload2019 02 21_biological_databases_part2_v_upload
2019 02 21_biological_databases_part2_v_upload
 
2019 02 12_biological_databases_part1_v_upload
2019 02 12_biological_databases_part1_v_upload2019 02 12_biological_databases_part1_v_upload
2019 02 12_biological_databases_part1_v_upload
 
P7 2018 biopython3
P7 2018 biopython3P7 2018 biopython3
P7 2018 biopython3
 
P6 2018 biopython2b
P6 2018 biopython2bP6 2018 biopython2b
P6 2018 biopython2b
 
P4 2018 io_functions
P4 2018 io_functionsP4 2018 io_functions
P4 2018 io_functions
 
P3 2018 python_regexes
P3 2018 python_regexesP3 2018 python_regexes
P3 2018 python_regexes
 
T1 2018 bioinformatics
T1 2018 bioinformaticsT1 2018 bioinformatics
T1 2018 bioinformatics
 
P1 2018 python
P1 2018 pythonP1 2018 python
P1 2018 python
 
Bio ontologies and semantic technologies[2]
Bio ontologies and semantic technologies[2]Bio ontologies and semantic technologies[2]
Bio ontologies and semantic technologies[2]
 
2018 05 08_biological_databases_no_sql
2018 05 08_biological_databases_no_sql2018 05 08_biological_databases_no_sql
2018 05 08_biological_databases_no_sql
 
2018 03 27_biological_databases_part4_v_upload
2018 03 27_biological_databases_part4_v_upload2018 03 27_biological_databases_part4_v_upload
2018 03 27_biological_databases_part4_v_upload
 
2018 03 20_biological_databases_part3
2018 03 20_biological_databases_part32018 03 20_biological_databases_part3
2018 03 20_biological_databases_part3
 
2018 02 20_biological_databases_part2_v_upload
2018 02 20_biological_databases_part2_v_upload2018 02 20_biological_databases_part2_v_upload
2018 02 20_biological_databases_part2_v_upload
 
2018 02 20_biological_databases_part1_v_upload
2018 02 20_biological_databases_part1_v_upload2018 02 20_biological_databases_part1_v_upload
2018 02 20_biological_databases_part1_v_upload
 
P7 2017 biopython3
P7 2017 biopython3P7 2017 biopython3
P7 2017 biopython3
 
P6 2017 biopython2
P6 2017 biopython2P6 2017 biopython2
P6 2017 biopython2
 

Recently uploaded

Grant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingGrant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingTechSoup
 
Z Score,T Score, Percential Rank and Box Plot Graph
Z Score,T Score, Percential Rank and Box Plot GraphZ Score,T Score, Percential Rank and Box Plot Graph
Z Score,T Score, Percential Rank and Box Plot GraphThiyagu K
 
Disha NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdfDisha NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdfchloefrazer622
 
BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...
BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...
BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...Sapna Thakur
 
Mastering the Unannounced Regulatory Inspection
Mastering the Unannounced Regulatory InspectionMastering the Unannounced Regulatory Inspection
Mastering the Unannounced Regulatory InspectionSafetyChain Software
 
Measures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and ModeMeasures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and ModeThiyagu K
 
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptxSOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptxiammrhaywood
 
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdf
BASLIQ CURRENT LOOKBOOK  LOOKBOOK(1) (1).pdfBASLIQ CURRENT LOOKBOOK  LOOKBOOK(1) (1).pdf
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdfSoniaTolstoy
 
Sanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdfSanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdfsanyamsingh5019
 
Accessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactAccessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactdawncurless
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfciinovamais
 
The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13Steve Thomason
 
Sports & Fitness Value Added Course FY..
Sports & Fitness Value Added Course FY..Sports & Fitness Value Added Course FY..
Sports & Fitness Value Added Course FY..Disha Kariya
 
Separation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and ActinidesSeparation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and ActinidesFatimaKhan178732
 
A Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy ReformA Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy ReformChameera Dedduwage
 
mini mental status format.docx
mini    mental       status     format.docxmini    mental       status     format.docx
mini mental status format.docxPoojaSen20
 
Call Girls in Dwarka Mor Delhi Contact Us 9654467111
Call Girls in Dwarka Mor Delhi Contact Us 9654467111Call Girls in Dwarka Mor Delhi Contact Us 9654467111
Call Girls in Dwarka Mor Delhi Contact Us 9654467111Sapana Sha
 
Beyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global ImpactBeyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global ImpactPECB
 

Recently uploaded (20)

Grant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingGrant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy Consulting
 
Z Score,T Score, Percential Rank and Box Plot Graph
Z Score,T Score, Percential Rank and Box Plot GraphZ Score,T Score, Percential Rank and Box Plot Graph
Z Score,T Score, Percential Rank and Box Plot Graph
 
Disha NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdfDisha NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdf
 
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
 
BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...
BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...
BAG TECHNIQUE Bag technique-a tool making use of public health bag through wh...
 
Mastering the Unannounced Regulatory Inspection
Mastering the Unannounced Regulatory InspectionMastering the Unannounced Regulatory Inspection
Mastering the Unannounced Regulatory Inspection
 
Measures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and ModeMeasures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and Mode
 
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptxSOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
SOCIAL AND HISTORICAL CONTEXT - LFTVD.pptx
 
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdf
BASLIQ CURRENT LOOKBOOK  LOOKBOOK(1) (1).pdfBASLIQ CURRENT LOOKBOOK  LOOKBOOK(1) (1).pdf
BASLIQ CURRENT LOOKBOOK LOOKBOOK(1) (1).pdf
 
Sanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdfSanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdf
 
Accessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactAccessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impact
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdf
 
The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13
 
Sports & Fitness Value Added Course FY..
Sports & Fitness Value Added Course FY..Sports & Fitness Value Added Course FY..
Sports & Fitness Value Added Course FY..
 
Código Creativo y Arte de Software | Unidad 1
Código Creativo y Arte de Software | Unidad 1Código Creativo y Arte de Software | Unidad 1
Código Creativo y Arte de Software | Unidad 1
 
Separation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and ActinidesSeparation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and Actinides
 
A Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy ReformA Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy Reform
 
mini mental status format.docx
mini    mental       status     format.docxmini    mental       status     format.docx
mini mental status format.docx
 
Call Girls in Dwarka Mor Delhi Contact Us 9654467111
Call Girls in Dwarka Mor Delhi Contact Us 9654467111Call Girls in Dwarka Mor Delhi Contact Us 9654467111
Call Girls in Dwarka Mor Delhi Contact Us 9654467111
 
Beyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global ImpactBeyond the EU: DORA and NIS 2 Directive's Global Impact
Beyond the EU: DORA and NIS 2 Directive's Global Impact
 

Bioinformatics p5-bioperlv2014

  • 1.
  • 2. FBW 27-10-2014 Wim Van Criekinge
  • 3. Three Basic Data Types • Scalars - $ • Arrays of scalars - @ • Associative arrays of scalers or Hashes - %
  • 4. • [m]/PATTERN/[g][i][o] • s/PATTERN/PATTERN/[g][i][e][o] • tr/PATTERNLIST/PATTERNLIST/[c][d][s]
  • 5. The ‘structure’ of a Hash • An array looks something like this: @array = Index Value 0 1 2 'val1' 'val2' 'val3' • A hash looks something like this: Rob Matt Joe_A 353-7236 353-7122 555-1212 Key (name) Value %phone =
  • 6. Sub routine $a=5; $b=9; $sum=Optellen(5,9); print "The SUM is $sumn"; sub Optellen() { $d=@_[0]; $e=@_[1]; #alternatively we could do this: my($a,$b)=@_; my($answer)=$d+$e; return $answer; }
  • 7. Overview • Advanced data structures in Perl • Object-oriented Programming in Perl • Bioperl: is a large collection of Perl software for bioinformatics • Motivation: – Simple extension: “Multiline parsing“ more difficult than expected • Goal: to make software modular, easier to maintain, more reliable, and easier to reuse
  • 8. Multi-line parsing use strict; use Bio::SeqIO; my $filename="sw.txt"; my $sequence_object; my $seqio = Bio::SeqIO -> new ( '-format' => 'swiss', '-file' => $filename ); while ($sequence_object = $seqio -> next_seq) { my $sequentie = $sequence_object-> seq(); print $sequentie."n"; }
  • 9. Advanced data structures in Perl • The scalar, array and hash data structures are builtin datatypes in Perl and cover most programming needs • More complex data structures can be built from this basic ones
  • 10. References: Scalars • Advanced data structures depend on Perl references. A reference is a scalar variable that “points at” some other value (the “referent”) $peptide = “TGDTSGGT”; $peptideref = $peptide; Print $peptideref.”n”; Print $$peptideref.”n”;
  • 11. Reference to arrays @tags=("acacac","tgtgtgt","gcgcgc"); $tagref = @tags; print "@$tagrefn"; print $$tagref[1]."n"; print $tagref->[1]."n"; push (@$tagref,"aaaaa"); print "@tags";
  • 12. References to hashes %geneticmarkers = ('curly'=>'yes','hairy'=>'no','topiary'=>'yes'); $hashref = %geneticmarkers; print $hashref."n"; foreach $k (keys %$hashref) { print "keyt$kttvaluet$$hashref{$k}n"; } foreach $k (keys %$hashref) { print "keyt$kttvaluet$hashref->{$k}n"; }
  • 13. Anonymous References Anonymous … • A value need not be contained in a defined variable to create a reference • To create an anonymous array reference, use square brackets instead of parentheses: • $a_ref = [20, 30, 50, “hi!!”]; • @a = @$a_ref; – @a  (20, 30, 50, “hi!!”); • For hash references, use curly brackets instead of parentheses: • $h_ref={“sky”=>‘blue’,“grass”=>‘green’} • %h = %$h_ref; – %h  (“sky” => ‘blue’, “grass” => ‘green’);
  • 14. Programming paradigms • Declarative (procedural) programming – Perl, C, Fortran, Pascal, Basic, … • Functional programming – Lisp, SML, … • Logic programming – Prolog • Object-oriented programming – Perl, C++,Smalltalk, Java, …
  • 15. The key idea • All data is stored and used by means of objects, and each object can only be accessed by means of the defined subroutines call methods. • Together, the objects and methods constitute a class • Warning: a lot of conflicting terminology among 00 practitioners
  • 16. Perl 00 • A class is a package • An object is a reference to a data structure (usually a hash) in a class • A method is a subroutine in the class
  • 17. Perl Classes • Modules/Packages – A Perl module is a file that uses a package declaration – Packages provide a separate namespace for different parts of program – A namespace protects the variable of one part of a program from unwanted modification by another part of the program – The module must always have a last line that evaluates to true, e.g. 1; – The module must be in “known” directory (environment variable) • Eg … site/lib/bio/Sequentie.pm
  • 18. Bioperl.pl use Bio::Sequentie; use Data::Dumper; %sequence_object = (_id=>"AF001",_name=>"Demo",_seq=>"ATGAT G"); print Dumper(%sequence_object); $seqRef = %sequence_object; Bio::Sequentie::RandomSeq($seqRef,100); print Dumper($seqRef);
  • 19. .. /site/lib/bio/Sequentie.pm package Bio::Sequentie; use strict; use Data::Dumper; sub RandomSeq { my @nucleotides = ('A','C','G','T'); my $self = shift; #print $self; print Dumper($self); my $length = shift || 40; print $length; $self->{_id} = "0000"; $self->{_name} = "Random Sequence"; $self->{_seq}=""; for (my $i = 0; $i < $length; $i++) { my $base = $nucleotides[int(rand(4))]; $self->{_seq} .= $base; } #return 1; } 1;
  • 20. Bless • Making objects … Bless attaches a class name to a reference, making it possible to use references as objects in a class
  • 21. Bioperl.pl use Bio::Sequentie; use Data::Dumper; %sequence_object = (_id=>"AF001",_name=>"Demo",_se q=>"ATGATG"); $seqRef = %sequence_object; bless ($seqRef,"Bio::Sequentie"); $seqRef->RandomSeq(100); print Dumper($seqRef);
  • 22. Bless • Making objects … Bless attaches a class name to a reference, making it possible to use references as objects in a class • New is the usual name given to the special method in the class that creates a new class object (CONSTRUCTOR)
  • 23. Method: NEW (constructor) sub new { print "new"; my ($class, $id, $name, $seq) = @_; my $ref = {_id=>$id,_name=>$name,_seq=>$se q}; return bless $ref, $class; }
  • 24. Random Sequence an OO Way use Bio::Sequentie; use Data::Dumper; $seqRef=Bio::Sequentie- >new("007","Constructor","it works"); print Dumper($seqRef); $seqRef->RandomSeq(100); print Dumper($seqRef);
  • 25. Review • Three OO rules – Classes are packages – Methods are subroutines – Objects are blessed referents • Bless ($seq, “Bio::Seq”;)
  • 26. CPAN • CPAN: The Comprehensive Perl Archive Network is available at www.cpan.org and is a very large respository of Perl modules for all kind of taks (including bioperl)
  • 27. What is BioPerl? • An ‘open source’ project – http://bio.perl.org or http://www.cpan.org • A loose international collaboration of biologist/programmers – Nobody (that I know of) gets paid for this • A collection of PERL modules and methods for doing a number of bioinformatics tasks – Think of it as subroutines to do biology • Consider it a ‘tool-box’ – There are a lot of nice tools in there, and (usually) somebody else takes care of fixing parsers when they break • BioPerl code is portable - if you give somebody a script, it will probably work on their system
  • 28. What BioPerl isn’t • ‘Out of the box’ solutions to problems – You will have to know a little perl, and you will have to read documentation • Particularly well documented – Yes, there is documentation, but it can be difficult to see the ‘big picture’ - or sometimes the small picture • It can be a substantial investment in time to learn how to use bioperl properly – Once you get used to it, it is pretty simple to do some complicated things
  • 29. Installing Modules Steps for installing modules Uncompress the module Gunzip file.tar.gz  Tar –xvf file.tar perl Makefile.PL make make test make install
  • 30. Bioperl installation • PPM • Perl Package Manager • Search Bioperl • Install Bioperl • What is the PPM? • The Programmer's Package Manager (PPM), formerly known as the Perl Package Manager, provides a command line interface for managing your modules and extensions (packages). PPM is used to access package repositories (or collections of packages on other machines), install and remove packages from your system, as well as update previously installed packages with the latest versions. • E:PerlBinppm
  • 31. Installation on Windows (ActiveState) • Using PPM shell to install BioPerl – Get the number of the BioPerl repository: – PPM>repository – Set the BioPerl repository, find BioPerl, install BioPerl: – PPM>repository set <BioPerl repository number> – PPM>search * – PPM>install <BioPerl package number> • Download BioPerl in archive form from – http://www.BioPerl.org/Core/Latest/index.shtml – Use winzip to uncompress and install
  • 32. Directory Structure • BioPerl directory structure organization: – Bio/ BioPerl modules – models/ UML for BioPerl classes – t/ Perl built-in tests – t/data/ Data files used for the tests – scripts/ Reusable scripts that use BioPerl – scripts/contributed/ Contributed scripts not necessarily integrated into BioPerl. – doc/ "How To" files and the FAQ as XML
  • 33.
  • 34. # Let the code begin Seq Objects SeqIO Objects
  • 35. Sequence Object Creation Sequence Creation : $sequence = Bio::Seq->new( -seq => ‘AATGCAA’); $sequence = Bio::Seq->new( -file => ‘sequencefile.fasta’); $sequence = Bio::Seq->new( -file => ‘sequencefile’, -ffmt => ‘gcg’ ); Flat File Format Support : Raw, FASTA, GCG, GenBank, EMBL, PIR Via ReadSeq: IG, NBRF, DnaStrider, Fitch, Phylip, MSF, PAUP
  • 36. Multi-line parsing use strict; use Bio::SeqIO; my $filename="sw.txt"; my $sequence_object; my $seqio = Bio::SeqIO -> new ( '-format' => 'swiss', '-file' => $filename ); while ($sequence_object = $seqio -> next_seq) { my $sequentie = $sequence_object-> seq(); print $sequentie."n"; }
  • 37. Live.pl #!e:Perlbinperl.exe -w # script for looping over genbank entries, printing out name use Bio::DB::Genbank; use Data::Dumper; $gb = new Bio::DB::GenBank(); $sequence_object = $gb->get_Seq_by_id('MUSIGHBA1'); print Dumper ($sequence_object); $seq1_id = $sequence_object->display_id(); $seq1_s = $sequence_object->seq(); print "seq1 display id is $seq1_id n"; print "seq1 sequence is $seq1_s n";
  • 38. Live2.pl #!e:Perlbinperl.exe -w # script for looping over genbank entries, printing out name use Bio::DB::Genbank $gb = new Bio::DB::GenBank(); $sequence_object = $gb->get_Seq_by_id('MUSIGHBA1'); $seq1_id = $sequence_object->display_id(); $seq1_s = $sequence_object->seq(); print "seq1 display id is $seq1_id n"; print "seq1 sequence is $seq1_s n"; $sequence_object = $gb->get_Seq_by_acc('AF303112'); $seq2_id = $sequence_object->display_id(); $seq2_s = $sequence_object->seq(); print "seq2 display id is $seq2_id n"; print "seq2 sequence id is $seq2_s n"; $seqio = $gb->get_Stream_by_id( [ qw(2981014 J00522 AF303112)]); $c=0; while ($sequence_object = $seqio->next_seq()){ $c++; print "Display id ($c) in stream is ", $sequence_object->display_id() ,"n"; }
  • 39. File converter #!/opt/perl/bin/perl -w #genbank_to_fasta.pl use Bio::SeqIO; my $input = Bio::SeqIO::new->(‘-file’ => $ARGV[0], ‘-format’ => ‘GenBank’); my $output = Bio::SeqIO::new->(‘-file’ => ‘>output.fasta’, ‘-format’ => ‘Fasta’); while (my $seq = $input->next_seq()){ $output->write_seq($seq) }
  • 40. Changing Formats (with Filehandles): #!/opt/perl/bin/perl -w #genbank_to_fasta_with_filehandles.pl use Bio::SeqIO; my $input = Bio::SeqIO::newFh->(‘-file’ => $ARGV[0], ‘-format’ => ‘GenBank’); my $output = Bio::SeqIO::newFh->(‘-format’ => ‘Fasta’); while (<$input>){ print $output $_ }
  • 41. • Bptutorial.pl • It includes the written tutorial as well as runnable scripts • 2 ESSENTIAL TOOLS – Data::Dumper to find out what class your in – Perl bptutorial (100 Bio::Seq) to find the available methods for that class
  • 42.
  • 43. Oef 1 • Zoek het meest zure en het meest basische aminozuur in Swiss-Prot door het isoelectrisch punt te berekenen. • Is er een biologische verklaring voor de gevonden resultaten ? Uit AAIndex H ZIMJ680104 D Isoelectric point (Zimmerman et al., 1968) R LIT:2004109b PMID:5700434 A Zimmerman, J.M., Eliezer, N. and Simha, R. T The characterization of amino acid sequences in proteins by statistical methods J J. Theor. Biol. 21, 170-201 (1968) C KLEP840101 0.941 FAUJ880111 0.813 FINA910103 0.805 I A/L R/K N/M D/F C/P Q/S E/T G/W H/Y I/V 6.00 10.76 5.41 2.77 5.05 5.65 3.22 5.97 7.59 6.02 5.98 9.74 5.74 5.48 6.30 5.68 5.66 5.89 5.66 5.96
  • 44. • Database – (choose) http://www.ebi.ac.uk/swissprot/FTP/ftp.h tml – (small) – http://biobix.ugent.be/zip/swiss-prot.zip
  • 45. Oef 2 • CpG Islands – Download from ENSEMBL 100 (random) promoters (3000 bp) – How many times would you expect to observe CG if all nucleotides were equipropable – Count the number op times CG is observed for these 100 genes and make a histogram from these scores – CG repeats are often methylated. In order to study methylation patterns bisulfide treatment of DNA is used. Bisulfide changes every C which is not followed by G into T. Generate computationally the bisulfide treated version of DNA. – How would you find primers that discriminate between methylated and unmethylated DNA ? Given that the genome is 3.109 bp how long do you need to make a primer to avoid mispriming ?
  • 46. So what is BioPerl? (continued…) • 551 modules (incl. 82 interface modules) • 37 module groups • 79,582 lines of code (223,310 lines total) • 144 lines of code per module • For More info: BioPerl Module Listing
  • 47. Searching for Sequence Similarity • BLAST with BioPerl • Parsing Blast and FASTA Reports – Search and SearchIO – BPLite, BPpsilite, BPbl2seq • Parsing HMM Reports • Standalone BioPerl BLAST
  • 48. Remote Execution of BLAST • BioPerl has built in capability of running BLAST jobs remotely using RemoteBlast.pm • Runs these jobs at NCBI automatically – NCBI has dynamic configurations (server side) to “always” be up and ready – Automatically updated for new BioPerl Releases • Convenient for independent researchers who do not have access to huge computing resources • Quick submission of Blast jobs without tying up local resources (especially if working from standalone workstation) • Legal Restrictions!!!
  • 49. Example of Remote Blast A script to run a remote blast would be something like the following skeleton: $remote_blast = Bio::Tools::Run::RemoteBlast->new( '-prog' => 'blastp','-data' => 'ecoli','-expect' => '1e- 10' ); $r = $remote_blast->submit_blast("t/data/ecolitst.fa"); while (@rids = $remote_blast->each_rid ) { foreach $rid ( @rids ) {$rc = $remote_blast- >retrieve_blast($rid);}} In this example we are running a blastp (pairwise comparison) using the ecoli database and a e-value threshold of 1e-10. The sequences that are being compared are located in the file “t/data/ecolist.fa”.
  • 50. Example It is important to note that all command line options that fall under the blastall umbrella are available under BlastRemote.pm. For example you can change some parameters of the remote job. Consider the following example: $Bio::Tools::Run::RemoteBlast::HEADER{'MATRI X_NAME'} = 'BLOSUM25'; This basically allows you to change the matrix used to BLOSUM 25, rather than the default of BLOSUM 62.
  • 51. Parsing Blast Reports • One of the strengths of BioPerl is its ability to parse complex data structures. Like a blast report. • Unfortunately, there is a bit of arcane terminology. • Also, you have to ‘think like bioperl’, in order to figure out the syntax. • This next script might get you started
  • 52. Sample Script to Read and Parse BLAST Report # Get the report $searchio = new Bio::SearchIO (-format => 'blast', -file => $blast_report); $result = $searchio->next_result; # Get info about the entire report $result->database_name; $algorithm_type = $result->algorithm; # get info about the first hit $hit = $result->next_hit; $hit_name = $hit->name ; # get info about the first hsp of the first hit $hsp = $hit->next_hsp; $hsp_start = $hsp->query->start;
  • 53. Parsing BLAST Using BPlite, BPpsilite, and BPbl2seq • Similar to Search and SearchIO in basic functionality • However: – Older and will likely be phased out in the near future – Substantially limited advanced functionality compared to Search and SearchIO – Important to know about because many legacy scripts utilize these objects and either need to be converted
  • 54. Parse BLAST output #!/opt/perl/bin/perl -w #bioperl_blast_parse.pl # program prints out query, and all hits with scores for each blast result use Bio::SearchIO; my $record = Bio::SearchIO->new(-format => ‘blast’, -file => $ARGV[0]); while (my $result = $record->next_result){ print “>”, $result->query_name, “ “, $result->query_description, “n”; my $seen = 0; while (my $hit = $result->next_hit){ print “t”, $hit->name, “t”, $hit->bits, “t”, $hit->significance, “n”; $seen++ } if ($seen == 0 ) { print “No Hits Foundn” } }
  • 55. Parse BLAST in a little more detail #!/opt/perl/bin/perl -w #bioperl_blast_parse_hsp.pl # program prints out query, and all hsps with scores for each blast result use Bio::SearchIO; my $record = Bio::SearchIO->new(-format => ‘blast’, -file => $ARGV[0]); while (my $result = $record->next_result){ print “>”, $result->query_name, “ “, $result->query_description, “n”; my $seen = 0; while (my $hit = $result->next_hit{ $seen++; while (my $hsp = $hit->next_hsp){ print “t”, $hit->name, “has an HSP with an evalue of: “, $hsp->evalue, “n”;} if ($seen == 0 ) { print “No Hits Foundn” } }
  • 56. SearchIO parsers: • SearchIO can parse (and reformat) several formats containing alignment or similarity data: – blast – xml formatted blast (still a little wonky) – psi-blast – exonerate – WABA – FASTA – HMMER • The interface is the same for all of these, making your life a little easier.
  • 57. What else is in BioPerl? – Cluster or Assembly tools – Protein structure tools – Graphics – Database functions – Phylogeny tools – Bibliography tools – …
  • 58. Some advanced BioPerl • What if you want to draw pretty images of blast reports? Bio::Graphics to the rescue: • Input - A blast report (single query): • Output:
  • 59. Some really advanced BioPerl • What if you want to display an entire genome with annotation? Grow your own genome project – We can do that all in BioPerl (and a mySQL or Oracle database): • GBrowse - the Generic Genome Browser – Allows any feature to be displayed on a reference sequence – Many different styles of ‘Glyphs’, so all features can be drawn in a different style – Allows user to zoom in and out on reference sequence – User can select which features to display – User can upload their own features to be displayed on your reference sequence – And more!!! • http://www.bch.msu.edu/cgi-bin/gbrowse • http://www.gmod.org/