пʼятниця, 14 листопада 2014 р.

Биоинформатика на курсере подвинула дедлайны. Йоу) Считала скор. Посетили новые мысли. На екстрадате и квизе не работает, хоть пример отсчитывает отменно. Хз. С повторениями какое-то непонимание..

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 SpectrumScore(PeptideSpectrum).
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

Немає коментарів:

Дописати коментар