Синхронный пимол

Я пытаюсь загрузить файл mrc, создать его карту, а затем сохранить изображение, проблема в том, что он сохраняет только пустое изображение, код, который я запускаю, следующий:

from pymol import cmd
cmd.load('./6vof.mrc', ' 6vof')
cmd.volume( '6vof _volume', ' 6vof')
cmd.png('./test.png', 300, 200)

Эквивалентный код в интерфейсе работает, я хотел знать, как заставить метод сохранения ждать рендеринга всего.


person Luis José Castillo    schedule 10.02.2021    source источник
comment
Я не очень много знаю о PyMOL, но мне интересно, являются ли пробелы в кавычках строк cmd.load() и cmd.volume() частью проблемы или это просто нормальный формат. Изменится ли что-нибудь, если убрать пробелы, чтобы строка 2 выглядела так: cmd.load('./6vof.mrc', '6vof'), а строка 3 выглядела так: cmd.volume('6vof_volume', '6vof')?   -  person summea    schedule 11.02.2021
comment
Привет, давайте не будем говорить, что проблема не в том, что он не работает, а в том, что хранилище изображений выполняется первым, прежде чем том будет полностью сгенерирован.   -  person Luis José Castillo    schedule 13.02.2021


Ответы (1)


Привет Луис Хосе Кастильо,

кажется, я столкнулся с той же проблемой, что и вы. Я хотел использовать Pymol из приложения Ruby on Rails и всегда получал его сообщение, когда запускал его из ruby:

 CmdLoad: "mypol/4hhb.pdb" loaded as "4hhb".
 Ray: render time: 0.02 sec. = 178776.9 frames/hour (0.02 sec. accum.).

В результате получился пустой прозрачный png. Если я запустил его в командной строке с тем же скриптом, я получил это сообщение и идеальный png:

CmdLoad: "4hhb.pdb" loaded as "4hhb".
 Ray: render time: 4.04 sec. = 890.8 frames/hour (4.04 sec. accum.).

Я получил такое поведение на Ubuntu 20, Ubuntu 18 Server и в Docker. Я понял, что единственная разница заключалась в том, что я использовал относительные пути изнутри ruby, но всегда запускал все в одной и той же папке в командной строке. Итак, я просто делаю этот обходной путь для своего приложения Rails, и теперь он работает:

  def get_protein_image(pdb_id)
    dir_path = get_pdb_file(pdb_id)
    `cp lib/png_from_pdb.py #{dir_path} && cd #{dir_path} && pymol protein.pdb png_from_pdb.py -qc` 
  end

Извините за рубиновый код здесь, но здесь основное решение, попробуйте запустить все в одной папке (я просто удаляю подпапку tmp после генерации png).

cp lib/png_from_pdb.py #{dir_path} && cd #{dir_path} && pymol protein.pdb png_from_pdb.py -qc

Надеюсь, этот трюк поможет и вам! С уважением, Стефан

person Stephan Sinn    schedule 12.02.2021
comment
Здравствуйте, я пытался реализовать то, что вы мне сказали, но выполнение хранилища продолжает происходить до :cccc, то есть у меня это не сработало. - person Luis José Castillo; 13.02.2021