Биоинформатика на курсере подвинула дедлайны. Йоу) Считала скор. Посетили новые мысли. На екстрадате и квизе не работает, хоть пример отсчитывает отменно. Хз. С повторениями какое-то непонимание..
def spectrum(Peptide):
linear_spec = []
cyclic_spec = []
mass = []
mass.append(0)
linear_spec.append(0)
cyclic_spec.append(0)
f = open('aa_mass.txt')
lines = f.readlines()
for i in range(0, len(Peptide)):
for line in lines:
if line[0] == Peptide[i]:
print (int(line[2:int(len(line))]))
mass.append(int(mass[i]) + int(line[2:int(len(line))]))
mass_pept = int(mass[i]) + int(line[2:int(len(line))])
print (str(mass_pept) + " mass pept")
mass.sort()
mass_cyclic = mass
print (mass)
print (mass_cyclic)
for i in range(0, len(mass)-1):
for j in range(i+1, len(mass)):
#print()
#print (mass[j] - mass[i])
linear_spec.append(mass[j]-mass[i])
f.close()
linear_spec.sort()
for i in range(len(linear_spec)):
linear_spec[i] = str(linear_spec[i])
for i in range(0, len(mass_cyclic)-1):
for j in range(i+1, len(mass_cyclic)):
#print()
#print (mass[j] - mass[i])
cyclic_spec.append(mass[j]-mass[i])
if i > 0 and j < len(mass_cyclic) - 1:
#if mass_pept - mass[j] + mass[i] in cyclic_spec:
# continue
cyclic_spec.append(mass_pept - mass[j] + mass[i])
cyclic_spec.sort()
for i in range(len(cyclic_spec)):
cyclic_spec[i] = str(cyclic_spec[i])
return " ".join(cyclic_spec)
#return " ".join(linear_spec)
#print (spectrum("NQEL"))
def score_spec(teoretical, experiment):
t = teoretical.split(" ")
e = experiment.split(" ")
same = []
print (teoretical)
print (teoretical.split(" "))
print (experiment.split(" "))
count = 0
for i in range(len(t)):
for j in range(len(e)):
if t[i] == e[j]:
count+=1
return count
print (score_spec(spectrum("NQEL"), "0 99 113 114 128 227 257 299 355 356 370 371 484"))
-------------------------------------------
Получилось!
и вот так надо поменять йф-цию скор, чтоб оно рассчитывало корект. Логика такая: каждый раз, когда значение из експериментального спектра совпало со значением из теоретического - из теоретического убираем это значение. На всякий случай, дабы не перезатирать реальный теоретичсекий спектр - создаем новую переменную под "обрезаемый" теоретический спектр (хотя можно было и не создавать, а использовать t).
def score_spec(teoretical, experiment):
t = teoretical.split(" ")
e = experiment.split(" ")
t_cut = t
count = 0
for j in range(len(e)):
if e[j] in t_cut:
t_cut.remove(e[j])
count+=1
return count
Cyclopeptide Scoring Problem: Compute the score of a cyclic peptide against a spectrum.
Input: An amino acid string Peptide and a collection of integers Spectrum.
Output: The score of Peptide against Spectrum, Score(Peptide, Spectrum).
Input: An amino acid string Peptide and a collection of integers Spectrum.
Output: The score of Peptide against Spectrum, Score(Peptide, Spectrum).
CODE CHALLENGE: Solve the Cyclopeptide Scoring Problem.
def spectrum(Peptide):
linear_spec = []
cyclic_spec = []
mass = []
mass.append(0)
linear_spec.append(0)
cyclic_spec.append(0)
f = open('aa_mass.txt')
lines = f.readlines()
for i in range(0, len(Peptide)):
for line in lines:
if line[0] == Peptide[i]:
print (int(line[2:int(len(line))]))
mass.append(int(mass[i]) + int(line[2:int(len(line))]))
mass_pept = int(mass[i]) + int(line[2:int(len(line))])
print (str(mass_pept) + " mass pept")
mass.sort()
mass_cyclic = mass
print (mass)
print (mass_cyclic)
for i in range(0, len(mass)-1):
for j in range(i+1, len(mass)):
#print()
#print (mass[j] - mass[i])
linear_spec.append(mass[j]-mass[i])
f.close()
linear_spec.sort()
for i in range(len(linear_spec)):
linear_spec[i] = str(linear_spec[i])
for i in range(0, len(mass_cyclic)-1):
for j in range(i+1, len(mass_cyclic)):
#print()
#print (mass[j] - mass[i])
cyclic_spec.append(mass[j]-mass[i])
if i > 0 and j < len(mass_cyclic) - 1:
#if mass_pept - mass[j] + mass[i] in cyclic_spec:
# continue
cyclic_spec.append(mass_pept - mass[j] + mass[i])
cyclic_spec.sort()
for i in range(len(cyclic_spec)):
cyclic_spec[i] = str(cyclic_spec[i])
return " ".join(cyclic_spec)
#return " ".join(linear_spec)
#print (spectrum("NQEL"))
def score_spec(teoretical, experiment):
t = teoretical.split(" ")
e = experiment.split(" ")
same = []
print (teoretical)
print (teoretical.split(" "))
print (experiment.split(" "))
count = 0
for i in range(len(t)):
for j in range(len(e)):
if t[i] == e[j]:
count+=1
return count
print (score_spec(spectrum("NQEL"), "0 99 113 114 128 227 257 299 355 356 370 371 484"))
-------------------------------------------
Получилось!
и вот так надо поменять йф-цию скор, чтоб оно рассчитывало корект. Логика такая: каждый раз, когда значение из експериментального спектра совпало со значением из теоретического - из теоретического убираем это значение. На всякий случай, дабы не перезатирать реальный теоретичсекий спектр - создаем новую переменную под "обрезаемый" теоретический спектр (хотя можно было и не создавать, а использовать t).
def score_spec(teoretical, experiment):
t = teoretical.split(" ")
e = experiment.split(" ")
t_cut = t
count = 0
for j in range(len(e)):
if e[j] in t_cut:
t_cut.remove(e[j])
count+=1
return count
Немає коментарів:
Дописати коментар