9990622 Письма Евгению Неделько

Письмо N0

Привет, Женя!
Я придумал, как сделать конвертор более компактным.
Его лучше написать на Java.
Координаты можно вычислять по специальному коду, типа генов виртуальной реальности...
Делаются несколько простых массивов.
Выходной массив вычисляется...
Короче, идеи изложены в приложении к письму.
Как ты на это все смотришь?

У меня есть подозрение, что мы вместе смогли бы этот конвертор за один день написать...
Главная трудность в алгоритме вычисления координат.
Смысл в том, что расставлять атомы аминокислот можно по тому же принципу, что и сам белок строить.
Продвигаешь систему отсчета и крутишь в зависимости от специального кода.
Нужно лишь сообразить, как считать координаты при переносе системы отсчета из центра одного октаэдра в центр другого.
See attachment, please! (9990620.htm)

Письмо N1

Привет, Женя!
Я тут начал разбираться в программе dne2ent.exe
Мне кажется, что можно заменить процедуру AddTriplet на работу с массивом имен по индексу (0..23) и с массивом структур по тому же индексу (0..23), который вытаскивается из массива вторичных индексов по первичному индексу (0..63), который в свою очередь вычисляется по триплету (первая буква, умноженная на 16 + вторая, умноженная на 4 + третья, где значения букв: A=0, C=1, G=2, T=3

При этом я думаю, что полторы сотни строчек можно сократить.
Еще сотню строк мы сократим, работая не с файлом, а с буфером обмена (Это же будет на Java), которую файлами лучше не пугать.
Еще пару сотен строк можно сэкономить на координатах, если их вычислять по массиву специальных кодов, типа генов виртуальной реальности (см. вчерашнее письмо)
Таким образом, конвертор dne2ent на Java может оказаться в несколько раз компактнее, что исключительно важно для удобства рассылки по e-mail.
Что ты обо всем этом думаешь?
Твой Кушелев  

Письмо N2

Привет, Женя!
Ты написал, что получится куча неиспользуемых элементов массивов.
Я этого не понял.
Если мы
будем держать список из 64 чисел по одному байту (массив вторичных индексов),  список из 23 имен аминокислот по 3 символа,  список из 23 строк по 10 имен атомов,  список из 23 масок по 30 бит, разве это можно сравнить со 150 строчками исходного кода, где case выбирает структуру для аминокислоты?
Ты пишешь:И две сотни приобрести. Не понимаю, почему...
Ты пишешь:Можно уменьшить точность. На сколько?
Ты пишешь: эти константы занимают всего около килобайта. А как же сотни строк, задающих немеренное количество координат? Исходный код тоже хочется минимизировать...
Твой Кушелев
 

Письмо N3

Получил твое письмо.
Может быть ты и прав. Координаты занимают не так уж много места... Может быть их можно более компактно представить в массиве?
Координаты многих атомов повторяются. Может это можно как-то использовать?

Твой Кушелев

Письмо N4

Привет, Женя!
У меня появились новые радикальные идеи по поводу конвертора
Я предлагаю исходные данные представить в следующем виде
.

1.Список оригинальных координат (около 30 троек чисел)
2.Список масок. Каждая строка - маска наличия у аминокислоты атома на одной из 30 позиций
3.Список имен атомов (химический состав аминокислоты). В каждой строке около 10 элементов по 4 символа
4.Список вторичных индексов (64 строки по одному целому числу)
5.Список имен аминокислот (23 имени по 3 символа)
6.Список вариантов поворота аминокислоты (64 цифры 1,2,3,4) (уже практически есть в твоей программе)
7.Список углов DNE(его нужно распаковать из архива DATA/TEXTS.RUS/9990618/990618.rar) (уже практически есть в твоей программе)

Все эти списки фиксированной длины.

Всю программу предлагается сделать одной процедурой с вложенными циклами

Внешний цикл
По аргументу (триплет) вычисляется первичный индекс (0...63) по формуле a*16+b*4+c
По первичному индексу выдергивается вторичный индекс (0...23) из массива вторичных индексов
Внутренний цикл
Из списка оригинальных координат выдергиваются строки списка координат атомов аминокислоты, как будто у любой аминокислоты есть все 30 атомов радикала

Конец внутреннего цикла
Формируется список координат атомов белка (повороты по трем осям + сдвиг)
Цикл печати
Печатаются имена атомов, имена аминокислот. Координаты очередного атома печатаются в случае значения маски = 1.
Конец цикла печати
Конец внешнего цикла

У меня есть подозрение, что такой алгоритм может занять менее 200 строк.
Как ты к этому относишься?
Твой Кушелев

Письмо N5

Женя! Я тут задумал создать алгоритмически-ориентированный язык,  направленный на минимизацию исходного кода...  Но об этом потом.

>В общем согласен но в частности смотри прикидку:
> Если мы будем держать список из 64 чисел по одному байту (массив вторичных
индексов), 64*4=256 байт (все числа выравниваются по границе 4 байта)
> список из 23 имен аминокислот по 3 символа,=23*4=92 байта
> список из 23 строк по 10 имен атомов,=23*10=230 байт
> список из 23 масок по 30 бит, 23*32=736 байт (работа с битами весьма сложна для процессора)
итого 1314 байт

Годится! Против 840 байт и хрен с ними! Посмотри на список масок. Может его можно оптимизировать (там много пустого места и мало единиц).

>Но это в общем не мешает мне использовать твой вариант.
>Ты только данные подготовь пожалуйста.

Подготовил в предыдущем письме.
>вполне можно использовать 4 байтные

Если это не приведет к какой-нибудь ловушке, то давай...

>> Исходный код тоже хочется минимизировать...

>за счет увеличения программного кода?
Я даже думаю, что минимизация исходного кода для меня важнее...
Если программный код не сильно увеличится, то черт с ним...

Твой Кушелев   

Письмо N6

Привет, Женя!
Есть идея!
Список масок - самый большой массив (23*51).
Его можно сделать динамическим и формировать в процессе выполнения программы по этапам.

1.Создаем массив (23*51)
2.Обнуляем
3.Первые 5 столбцов забиваем единицами
4.Присваиваем отдельным элементам единицы, а пятую колонку для Gly и Pro обнуляем. (не так много операций)

Как тебе нравится такой подход?
Твой Кушелев
 

Письмо N7

Женя!
Наверное, массив вариантов придется упорядочить по-другому, в соответствии с номерами аминокислот из таблицы, которую я прикладываю к этому письму. A массив углов DNE нет смысла менять, хотя тебе видней...

015
021 Массив углов DNE

Старый массив вариантов:

022 DNE_Groups: array [TGrpIndex, TGrpIndex, TGrpIndex] of TGrpIndex =
023 (((1,2,3,4), (1,3,3,1), (1,2,3,4), (1,2,3,4) ),
024 ((1,2,3,4), (1,3,3,1), (1,2,3,1), (1,3,3,1) ),
025 ((1,2,3,4), (1,1,3,1), (1,3,3,1), (1,1,3,1) ),
026 ((1,2,3,4), (1,3,3,1), (1,2,3,4), (1,2,3,4) ));

Новый массив вариантов: смотри вложение

Твой Кушелев

Письмо N8

Может быть веселее ввести массив вариантов композиции в виде одной строки? 3113214331132113321121432143214331132143214321431113214312113113

http://ftp.decsy.ru/nanoworld/index.htm