Python / MDAnalysis SelectionError: Ошибка выбора: «не удалось преобразовать строку в число с плавающей точкой - PullRequest
0 голосов
/ 19 декабря 2018

Я новичок в Python и MDAnalysis.Я пытаюсь использовать MDAnalysis для анализа.Однако я сталкиваюсь с этой ошибкой:

SelectionError: Selection failed: could not convert string to float 'cold'.

Я хотел бы выбрать молекулы с именами "BF4", "EMI" и "TMA".Выбор зависит от положения z молекул.У меня есть cold и cnew, но я не могу сравнить значение координаты z каждой молекулы с этими двумя значениями, поскольку они считаются строковыми, а не плавающими.

Не могли бы вы мне помочь?Большое спасибо

  with MDAnalysis.Writer("tube.xtc",tube.n_atoms) as W: 
     t=50 
     with open('lineCNT16.gro','w') as f: 
        for ts in universe.trajectory: 
           W.write(tube) 
           tube = sum(sorted(tube, key=lambda x: x.position[2]))  
           lobf = [] 
           chunk = 40 
           for i in range(len(tube) // 40):  # how many times can we chunk the tube? 
            piece = tube[i*chunk:(i+1)*chunk]  # this is selecting [0:20] first, then [20:40] etc 
            position = piece.positions.mean(axis=0) 
            lobf.append(position) 

           print (ts,lobf) 
           mol=29627 
           f.write('Generated by trjconv : Ionic liquid simulation t=  '"%s\n"%t) 
           f.write('18\n') 
           f.write('    1C08      C29626   4.247   4.253   7.544\n') 
           cold = 7.544 
           for position in lobf: 
            a=position[0]/10   
            b=position[1]/10 
            c=position[2]/10 
            cnew=c 
            print(cnew) 
            f.write('    1C08      ')     
            f.write('C')   
            f.write("%0.8s"%mol) 
            f.write('   ')      
            f.write("%0.5s"%a)  
            f.write('   ') 
            f.write("%0.5s"%b)   
            f.write('   ') 
            f.write("%0.5s\n"%c) 
            mol=mol+1 
            BF4=universe.atoms.select_atoms("resname BF4 and prop z >= cold and prop z<= cnew") 
            #EMI=universe.atoms.select_atoms("resname EMI and prop z >= cold and prop z<= cnew") 
            #TMA=universe.atoms.select_atoms("resname TMA and prop z >= cold and prop z<= cnew") 
            #print(EMI) 
            #print(BF4) 
            #print(TMA) 
            cold=cnew 
           f.write('    1C08      C29643   4.247   4.253   12.64\n')  
           f.write('6.15000   6.20000  20.18420\n') 
           t=t+50.00000   
           mol=29627 

1 Ответ

0 голосов
/ 07 января 2019
BF4=universe.atoms.select_atoms("resname BF4 and prop z >= cold and prop z<= cnew") 

MDAnalysis ожидает действительные значения (с плавающей запятой, например, 5,7), а не строку («холодная»).Он говорит вам, что ему нужно число вместо строки.Например:

BF4=universe.atoms.select_atoms("resname BF4 and prop z >= 5.2 and prop z<= 7.5"

У вас есть переменная "cold", однако вам может потребоваться освежить свои навыки в том, как объединить строку выбора с этой переменной.

Вот один небольшой урок, который объясняет это: https://www.pythonforbeginners.com/concatenation/string-concatenation-and-formatting-in-python

...