Presentation is loading. Please wait.

Presentation is loading. Please wait.

11/4/2015BCHB524 - 2015 - Edwards Advanced Python Concepts: Object Oriented Programming BCHB524 2015 Lecture 17.

Similar presentations


Presentation on theme: "11/4/2015BCHB524 - 2015 - Edwards Advanced Python Concepts: Object Oriented Programming BCHB524 2015 Lecture 17."— Presentation transcript:

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


Download ppt "11/4/2015BCHB524 - 2015 - Edwards Advanced Python Concepts: Object Oriented Programming BCHB524 2015 Lecture 17."

Similar presentations


Ads by Google