Download presentation
Presentation is loading. Please wait.
Published byDelilah McDowell Modified over 9 years ago
1
11/4/2015BCHB524 - 2015 - Edwards Advanced Python Concepts: Object Oriented Programming BCHB524 2015 Lecture 17
2
11/4/2015BCHB524 - 2015 - Edwards2 Using Classes We've actually been using objects and their methods already! s = 'ACGTACGTACGTACGT' print s.count('T') print s.replace('T','U') l = [6,5,4,3,2,1] l.append(10) l.sort() s = set() s.add(1) s.add(2)
3
11/4/2015BCHB524 - 2015 - Edwards3 Using Classes We've actually been using objects and their methods already! import Bio.SeqIO thefile = open("ls_orchid.fasta") for seq_record in Bio.SeqIO.parse(thefile, "fasta"): print seq_record.id print seq_record.description print seq_record.seq thefile.close()
4
11/4/2015BCHB524 - 2015 - Edwards4 Using Classes Classes make instances of objects string is a class, 'ACGT' is an instance of a string. Make new instances using class name: s = string(), d = dict(), s = set(), i = int(2) Objects can hold information seq_record.id, seq_record.seq, seq_record.annotations Called data members or attributes Objects can perform actions s = 'ACGT'; print s.count('a') Called methods
5
11/4/2015BCHB524 - 2015 - Edwards5 Classes as Concepts Classes allow us to add new concepts to a language. Suppose we wanted to add a "DNA sequence" concept to python What information should "DNA sequence" capture? What actions or operations should "DNA sequence" provide?
6
11/4/2015BCHB524 - 2015 - Edwards6 DNA Sequence Class Data members: sequence, name, organism. Methods: length, reverse, complement, reverseComplement, transcribe, translate percentGC, initMet, freq
7
11/4/2015BCHB524 - 2015 - Edwards7 DNA Sequence Class class DNASeq: def reverse(self): return self.seq[::-1] def complement(self): d = {'A':'T','C':'G','G':'C','T':'A'} return ''.join(map(d.get,self.seq)) def reverseComplement(self): return ''.join(reversed(self.complement())) def length(self): return len(self.seq) ds = DNASeq() ds.seq = 'ACGTACGTACGT' ds.name = 'My sequence' print ds.complement(),ds.length(),ds.reverseComplement()
8
11/4/2015BCHB524 - 2015 - Edwards8 DNA Sequence Class class DNASeq: #.... def length(self): return len(self.seq) def freq(self,nuc): return self.seq.count(nuc) def percentGC(self): gccount = self.freq('C') + self.freq('G') return 100*float(gccount)/self.length() ds = DNASeq() ds.seq = 'ACGTACGTACGT' ds.name = 'My sequence' print ds.freq('C'),ds.freq('G'),ds.length(),ds.percentGC()
9
11/4/2015BCHB524 - 2015 - Edwards9 DNA Sequence Class The special method __init__ is called when a new instance is created. Used to initialize data-members. Forces class user to provide valid initial information. class DNASeq: def __init__(self,seq,name): self.seq = seq self.name = name #.... ds = DNASeq('ACGTACGTACGTACGT', 'My sequence') print ds.freq('C'),ds.freq('G'),ds.length(),ds.percentGC()
10
11/4/2015BCHB524 - 2015 - Edwards10 DNA Sequence Class Somtimes __init__ is used to set up an "empty" instance. Other methods or data-members used to instantiate class DNASeq: def __init__(self): self.seq = "" self.name = "" def read(self,filename): self.seq = ''.join(open(filename).read().split()) #.... ds = DNASeq() ds.name = 'Anthrax SASP' ds.read('anthrax_sasp.nuc') print ds.freq('C'),ds.freq('G'),ds.length(),ds.percentGC()
11
11/4/2015BCHB524 - 2015 - Edwards11 DNA Sequence Class Default arguments allow us to set up "empty", partial, or completely instantiated instances. class DNASeq: def __init__(self,seq="",name=""): self.seq = seq self.name = name def read(self,filename): self.seq = ''.join(open(filename).read().split()) #.... ds = DNASeq(name='Anthrax SASP') ds.read('anthrax_sasp.nuc') print ds.freq('C'),ds.freq('G'),ds.length(),ds.percentGC()
12
11/4/2015BCHB524 - 2015 - Edwards12 Complete DNASeq.py Module class DNASeq: def __init__(self,seq="",name=""): self.seq = seq self.name = name def read(self,filename): self.seq = ''.join(open(filename).read().split()) def reverse(self): return self.seq[::-1] def complement(self): d = {'A':'T','C':'G','G':'C','T':'A'} return ''.join(map(d.get,self.seq)) def reverseComplement(self): return ''.join(reversed(self.complement())) def length(self): return len(self.seq) def freq(self,nuc): return self.seq.count(nuc) def percentGC(self): gccount = self.freq('C') + self.freq('G') return 100*float(gccount)/self.length()
13
Describe class in a module, then access using an import statement 11/4/2015BCHB524 - 2015 - Edwards13 Complete DNASeq.py Module from DNASeq import DNASeq ds = DNASeq('ACGTACGTACGTACGT','My sequence') print ds.complement(),ds.length(),ds.reverseComplement() print ds.freq('C'),ds.freq('G'),ds.length(),ds.percentGC() ds = DNASeq() ds.read('anthrax_sasp.nuc') print ds.complement(),ds.length(),ds.reverseComplement() print ds.freq('C'),ds.freq('G'),ds.length(),ds.percentGC()
14
A class for codon tables Method calls, for instance "codons": codons.read(filename) stores the contents of filename in the codon_table object. codons.amino_acid(codon) returns amino-acid symbol for codon codons.is_init(codon) returns true if codon is an initiation codon false, otherwise codons.get_ambig_aa (codon) returns single amino-acid represented by a codon with N's codons.startswith_init(seq) returns true if DNA sequence seq starts with init codon codons.translate(seq,frame) returns amino-acid sequence for DNA sequence seq 11/4/2015BCHB524 - 2015 - Edwards14
15
11/4/2015BCHB524 - 2015 - Edwards15 A class for codons from DNASeq import * from codon_table import * import sys if len(sys.argv) < 3: print "Require codon table and DNA sequence on command-line." sys.exit(1) codons = codon_table() codons.read(sys.argv[1]) seq = DNASeq() seq.read(sys.argv[2]) if codons.startswith_init(seq): print "Initial codon is an initiation codon" for frame in (1,2,3): print "Frame",frame,"(forward):",codons.translate(seq,frame)
16
11/4/2015BCHB524 - 2015 - Edwards16 A class for codons In codon_table.py: class codon_table: def __init__(self): self.table = {} def read(self,filename): # magic def amino_acid(self,codon): # magic return aa def is_init(self,codon): # magic return result def get_ambig_aa(self,codon): # magic return aa def startswith_init(self,seq): # magic return result def translate(self,seq,frame): # magic return aaseq
17
11/4/2015BCHB524 - 2015 - Edwards17 Side by side from DNASeq import * from codon_table import * import sys if len(sys.argv) < 3: print "Require codon table and", \ "DNA sequence on command-line." sys.exit(1) codons = codon_table() codons.read(sys.argv[1]) seq = DNASeq() seq.read(sys.argv[2]) if codons.startswith_init(seq): print "Initial codon" print codons.translate(seq,1) from MyNucStuff import * from codon_table import * import sys if len(sys.argv) < 3: print "Require codon table and", \ "DNA sequence on command-line." sys.exit(1) codons = read_codons(sys.argv[1]) seq = read_seq(sys.argv[2]) if is_init(codons,seq[:3]): print "Initial codon" print translate(codons,seq,1)
18
11/4/2015BCHB524 - 2015 - Edwards18 Exercises Convert your modules for DNA sequence and codons to a codon_table and DNASeq class. Demonstrate the use of this module and the codon table module to translate an amino-acid sequence in all six-frames with just a few lines of code. Hint: just import the new classes from their module(s) and call the necessary methods/functions!
19
Homework 10 Due Monday, November 9th. Exercises from Lecture 16 Exercises from Lecture 17 11/4/2015BCHB524 - 2015 - Edwards19
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.