Differences between revisions 32 and 33
Revision 32 as of 2006-02-28 09:10:36
Size: 8737
Editor: 211
Comment:
Revision 33 as of 2006-02-28 09:15:11
Size: 8727
Editor: 211
Comment:
Deletions are marked like this. Additions are marked like this.
Line 16: Line 16:
  def getPeptidesBy(self, kw=1): def getPeptidesBy(self, kw=1):
Line 34: Line 34:
    def calculateMass(self, peptide): def calculateMass(self, peptide):
Line 41: Line 41:
    def getMassesOfPeptide(self): def getMassesOfPeptide(self):

[../2006-03]

(->)

2006 / February
Monday Tuesday Wednesday Thursday Friday Saturday Sunday
-1- -2- -3- -4- -5-
-6- -7- -8- -9- -10- -11- -12-
-13- -14- -15- -16- -17- -18- -19-
-20- -21- -22- -23- -24- -25- -26-
BioXP
-->
-->
-->
BioXP
-27- -28-


2006-02-27

protease에 의해 잘린 peptide의 mass 측정

  • 우선 peptide sequence 하나에 대해 질량을 구하는 함수를 만든다.

   1 def getPeptidesBy(self, kw=1):
   2         peptide = []
   3         RE = self.RestrictionEnzymes[kw]
   4         resite = RE.re
   5         repos = RE.rpos
   6         for aminoacid in self.sequence:
   7             if repos == 'C':
   8                 peptide.append(aminoacid)
   9             if aminoacid in resite:
  10                 if peptide:
  11                     yield ''.join(peptide)
  12                 peptide = []
  13             if repos == 'N':
  14                 peptide.append(aminoacid)
  15         if peptide:
  16             yield ''.join(peptide)
  17 
  18 
  19 def calculateMass(self, peptide):
  20         mass = 0
  21         for aminoacid in peptide:
  22             mass += self.AminoAcidMass[aminoacid]
  23         return mass - 18.02*(len(peptide)-1)
  24 
  25 
  26 def getMassesOfPeptide(self):
  27         masses = []
  28         for peptide in self.peptidelist:
  29             mass = self.calculateMass(peptide)
  30             masses.append(mass)
  31         return masses
  • 테스트시 값이 실수인 경우에는 assertAlmostEqual을 사용해서 테스트를 한다. (결과값이 리스트인 경우에는 안된다.)


2006-02-17

protease로 절단한 부위 리턴하기

  • protease마다 절단 부위만 다르고, 동작하는 함수는 흡사하기 때문데 함수를 하나로 통일해서 작업하자...
  • 유의사항) C-term, N-term 어디서 시작하는지 유의할 것.
  • tip) generator를 활용하자...
    • yield는 발생자를 위해서 파이썬 2.2에 새롭게 도입된 예약어이다. 어떤 함수이든 yield를 가지고 있다면 발생자이다. 파이썬 컴파일러가 이 키워드를 검출하면 이 함수를 발생자로 만들기 위해 별도로 처리한다. yield는 return과 유사하나 실행 상태를 보존한 상태에서 복귀한다.

   1 def digest(aProtein, ReSites, RsPos='C'):
   2         peptide=[]
   3         for aminoacid in aProtein:
   4                 if RsPos=='C':
   5                         peptide.append(aminoacid)
   6                 if aminoacid in ReSites:
   7                         yield ''.join(peptide)
   8                         peptide = []
   9                 if RsPos=='N':
  10                         peptide.append(aminoacid)
  11         else:
  12                 yield ''.join(peptide)
  • tip) for문에 else는 for문이 다 돌고 나면 마지막에 돌고, for문에서 error가 나면 else도 수행하지 않는다.


2006-02-16

오늘은 회사 홈페이지 몇 군데를 수정했다.

  • product/transcriptomics --> 149,139,259,154

  • product/proteomics --> 275,140,350,152

  • product/metabolomics --> 365,140,458,153

포토샵 팁) gif파일 수정하기

  • 우선 gif파일을 열고, image -> mode -> RGB color를 선택, background layer를 더블클릭해서 자물쇠를 없애면 그때부터 작업할 수 있다. 스포이드로 색깔을 찍어서 확인할 수 있고, T 를 누르면 글자를 생성.작업할 수 있고 마쳤으면 위에 꺽쇠를 누르면 된다. 오른쪽 layer표시에 주의해서 작업하자...


2006-02-15

RNA translate

  • 자세히 보면 DNA서열로 translate한 코드와 유사하다. (단, U가 T로 바뀌는 것만 제외하면...)
  • tip) 같은 부분은 부모 class로 빼고, 다른 부분만 적어 준다.
  • 주의사항) U가 T로 바뀌면 self.sequence가 바뀌기 때문에 translate 돌려주고 다시 self.sequence는 원래 sequence로 바꿔준다.

DNA서열로 만든 protein서열을 fasta로 돌려주기

  • 이미 NucleicAcid라는 class를 만들어서 DNA와 RNA에 관련된 일을 하는 코드들을 묶어 두었다.

  • protein서열은 NucleicAcid class에는 적합하지 않다고 판단, BioMolecule이라는 NucleicAcid의 상위 클래스를 만들어서 protein에 관한 일을 하는 코드들은 직접 Biomolecule에 쓰고, BioMoleculeNucleicAcid를 상속 받는다.

  • 문제점 해결) 내 sequence 가지고 이미 만들어진 getFasta라는 함수를 쓰면 되기 때문에 test코드에 있는 title만 유념해서 getFasta를 상속받아서 쓰면 된다.
  • tip) 클래스 이름이나 함수 이름을 지을 때, 그리고 그 함수와 클래스의 관계를 잘 파악해서 상속 받는 개념을 잘 이해해 두자...

amino acid sequence에서 trysine으로 절단한 부위 리턴하기

   1 def getTrypticDigests(self):
   2         result = []
   3         changelist = self.sequence
   4         for each in changelist:
   5             self.sequence = changelist
   6             Arg = self.sequence.find('R')+1
   7             Lys = self.sequence.find('K')+1
   8             if each == 'R':
   9                 result.append(self.sequence[:Arg])
  10                 changelist = self.sequence[Arg:]
  11             elif each == 'K':
  12                 result.append(self.sequence[:Lys])
  13                 changelist = self.sequence[Lys:]
  14         if changelist != '':
  15             result.append(changelist)
  16         return result
  • 문제점 발견) 마지막 sequence가 R이나 K가 아니면 그 뒤에 sequence는 return이 되지 않는다.
  • 문제점 해결) return하기전에 sequence를 result에 추가하고, 추가할게 없는 result는 공문자열을 생성하는데, 그걸 if문으로 삭제했다.

amino acid sequence에서 chymotrypsin으로 절단한 부위 리턴하기

  • trysine으로 절단하는 코드와 유사하다...


2006-02-14

error 메시지를 자세히 보면서 풀면 잘 해낼 수 있다...

  • 문제점 해결) 일단 RNA의 class를 만든다. 그 다음 title과 sequence를 print로 찍어보면, 다음에 무엇을 해야할 지 알 수 있을 것이다.

RNA 서열 fasta 포맷 형식으로 출력하기...

  • 문제점 해결) RNA class에 DNA class에서 사용했던 parseFasta()를 사용

상속

  • DNA나 RNA는 서로 비슷하고 하는 일도 비슷한 것이 있다...이 때, 하는 일이 비슷한 함수를 부모 class에 묶어서 두는 것을 상속이라 한다.

새로운 문제

  • reversetranscription 하는 test code

   1 class RNA(NucleicAcid):
   2     def getcDNA(self):
   3         dna = DNA()
   4         dna.title = 'cDNA of ' + self.title
   5         dna.sequence = self.sequence.replace('U', 'T')
   6         return dna
  • tip) 함수를 만들었을 때, 중간중간 테스트 하다보면 AttributeError: 'NoneType' object has no attribute 'title' 이라는 에러코드가 뜬다. 이게 뜨는 이유는 함수에 return 값이 없기 때문이다...


2006-02-13

-1을 제외한 가장 작은 수를 구하는 함수를 만들어서 start codon을 구해서 code 작성.

  • 문제점 발견 : stop codon을 for문을 이용해서 하나씩 seq에 대입해서 code를 작성했더니, stop codon에서 멈추지 않고 끝까지 translation했다.
  • 이유 : 아마도 for문을 벗어나도 result문이 있기 때문인 것 같다.
  • 문제점 해결 : 일단 start codon code는 그대로 가고, start codon 이후의 seq에서 stop codon의 -1을 제외한 가장 작은 수를 구해서 stop codon이 있으면 stop codon을 3으로 나눈 수에 1을 더한 만큼 for문을 돌려서 translation했다.
  • tip) -1을 제외한 가장 작은 수 구하는 함수를 만들어 놓고, 다른 함수에서 쓰려고 한다. 이 때, 이 함수 역시 DNA()라는 class안에 있기 때문에 self.mymin()이라고 쓰면 된다.

새로운 문제

   1 def testGetRna(self):
   2     rna = self.dna.getRna()
   3     self.assertEquals('RNA of test', rna.title)
   4     self.assertEquals('AGUC', rna.sequence)

이 테스트 code를 통과하는 함수를 만들어라...


2006-02-10

계속해서 translation code 작성 중... - start codon이 여러개일때 가장 먼저 나오는 start codon을 찾아야 한다.

  • tip) 논리 연산을 이용해 차례대로 하나씩 비교해서 작은 수를 변수에 저장한다. 그런데, -1이 나오면 제외시켜야 한다.
  • 문제점 발견) [0]부분에 -1이 있으면 return 값이 -1이 나온다.
  • 문제점 해결) 배열을 sorted(배열, reverse=1)로 정렬한 다음 진행한다.


2006-02-08

translation code 작성

  • genetic code는 17개 정도로 종마다 다르다.
  • 이걸 함수 하나에 작성해야 한다.
  • tip) class를 써서 종마다 다른 부분(ProComp, icodon, tcodon)을 작성. 함수에는 translation하는 code를 작성하는데, 다른 부분은 class에서 따온다.


[../2006-03]

(->)


CategoryWebLogYong

parkpro/2006-02 (last edited 2011-08-03 11:00:55 by localhost)

web biohackers.net