Загрузка данных


"$OSD_BINARY" --gateway "$GATEWAY" --token "$TOKEN" session send "$SES" "Ты — научный ассистент для автоматической генерации отчетов о клонировании. Твоя задача: обработать ВСЕ папки в текущей рабочей директории (каждая папка соответствует одному гену) и создать отчет '[GENE]_report.docx' для каждого гена.

В каждой папке находятся три файла:
- *.docx со словом 'паспорт' в названии (паспорт клонирования)
- *.png (карта картирования NGS)
- *.gbk (аннотация плазмиды GenBank)

В корне проекта находятся ДВА файла-шаблона:
- EXAMPLE1_report.doc — шаблон для генов, амплифицированных из кДНК библиотеки
- EXAMPLE2_report.doc — шаблон для генов, синтезированных de novo (оптимизированных для митохондрий)

КРИТИЧЕСКИ ВАЖНЫЕ ПРАВИЛА:
1. Работай только с расширениями файлов, не используй конкретные имена папок.
2. Название гена определяй из имени папки (например, из 'pAAV-CAG-COX10' извлеки 'COX10') ИЛИ из содержимого паспорта.
3. Создай ТОЛЬКО ОДИН файл '[GENE]_report.docx' для каждого гена в его папке.
4. НЕ добавляй фразы '[ДАННЫЕ ОТСУТСТВУЮТ В ПАСПОРТЕ]'.
5. НЕ запускай Python интерактивно. ВСЕГДА создавай файл скрипта через cat, потом запускай через python3.
6. Форматирование должно совпадать с выбранным шаблоном (EXAMPLE1 или EXAMPLE2).
7. Обработай ВСЕ папки в текущей директории (кроме служебных типа passport_images/).

ВЫПОЛНИ СЛЕДУЮЩИЕ ШАГИ:

ШАГ 0: Создание главного скрипта для обработки всех папок.
Создай файл process_all_genes.py через команду cat. Этот скрипт должен:
а) Просканировать текущую директорию и найти все подпапки (исключая служебные типа 'passport_images/', '__pycache__/', '.git/').
б) Для каждой найденной папки:
   - Найти файл *.docx со словом 'паспорт' (PASSPORT_FILE)
   - Найти файл *.png (MAP_FILE)
   - Найти файл *.gbk (GBK_FILE)
   - Определить название гена из имени папки (например, из 'pAAV-CAG-COX10' извлечь 'COX10') или из паспорта
в) Вывести список найденных папок и генов.

ШАГ 1: Извлечение изображений из паспорта (для каждой папки).
В скрипт process_all_genes.py добавь функцию extract_images(passport_file, output_dir), которая:
а) Открывает PASSPORT_FILE через python-docx
б) Проходит по всем inline_shapes и извлекает каждое изображение через image.blob
в) Сохраняет изображения в папку output_dir/passport_images/ как img_01.png, img_02.png и т.д.
г) Возвращает количество изображений

ШАГ 2: Извлечение текста из паспорта и ОПРЕДЕЛЕНИЕ ТИПА ГЕНА (для каждой папки).
В скрипт process_all_genes.py добавь функцию extract_passport_and_detect_type(passport_file), которая:
а) Использует docx2txt для извлечения текста из PASSPORT_FILE
б) Распарсит текст и извлечет: название гена, вектор, праймеры (если есть), размер ПЦР-продукта (если есть), условия ПЦР (если есть), TEDA, трансформации, ферменты рестрикции, фрагменты, номер клона, концентрацию ДНК, даты, шифр
в) ОПРЕДЕЛИТ ТИП ГЕНА по содержимому паспорта:
   - Если в тексте есть упоминания 'РНК', 'кДНК', 'праймеры' (для амплификации), 'амплификация', 'ПЦР' — это ген из кДНК (тип 'cDNA')
   - Если в тексте есть упоминания 'синтез', 'синтезирован', 'de novo', 'оптимизирован', 'митохондриальная оптимизация', 'codon optimization', 'gene synthesis' — это синтетический ген (тип 'synthetic')
г) Возвращает словарь с данными и типом гена

ШАГ 3: Копирование стилей из ОБОИХ шаблонов (один раз).
В скрипт process_all_genes.py добавь функцию copy_styles_from_both_templates(template1_file, template2_file), которая:
а) Открывает TEMPLATE1_FILE (EXAMPLE1_report.doc) через python-docx
б) Открывает TEMPLATE2_FILE (EXAMPLE2_report.doc) через python-docx
в) Извлекает стили из ОБОИХ шаблонов (шрифты, размеры, отступы для Normal, Heading 1, Heading 2)
г) Возвращает два словаря со стилями: styles_cDNA и styles_synthetic

ШАГ 4: Генерация текста отчета (для каждой папки, в зависимости от типа гена).
В скрипт process_all_genes.py добавь функцию generate_report_text(template_file, passport_data, gene_name, gene_type), которая:
а) Загружает шаблон из template_file через docx2txt (выбирается в зависимости от gene_type: EXAMPLE1 для cDNA, EXAMPLE2 для synthetic)
б) Создает текст отчета, заменив: название гена, размер, вектор, праймеры (если есть), клон, фрагменты рестрикции, концентрацию, даты, шифр на данные из паспорта
в) ОБРЕЗАЕТ текст на маркере 'Дополнительные материалы'
г) Возвращает текст отчета

ШАГ 5: Создание DOCX отчета с рисунками (для каждой папки, в зависимости от типа гена).
В скрипт process_all_genes.py добавь функцию create_docx_report(output_path, gene_name, vector_name, report_text, passport_images_dir, map_file, styles, gene_type), которая:
а) Использует python-docx для создания файла output_path
б) Применяет стили из styles (выбираются в зависимости от gene_type)
в) Добавляет заголовок Heading 1: 'Клонирование гена [GENE] из кДНК матрицы в вектор [VECTOR]' (для cDNA) ИЛИ 'Клонирование синтезированного гена [GENE] в вектор [VECTOR]' (для synthetic)
г) Добавляет разделы из report_text В ЗАВИСИМОСТИ ОТ ТИПА ГЕНА:
   
   ДЛЯ ГЕНОВ ИЗ кДНК (gene_type == 'cDNA'):
   - 'Выделение РНК'
   - 'Синтез кДНК'
   - 'Дизайн праймеров'
   - 'Амплификация ДНК-копии гена из кДНК'
   - 'Создание конструкции'
   - 'Трансформация клеток E.coli'
   - 'Проверка клонов с помощью рестрикционного анализа'
   - 'Подтверждение конструкции с помощью NGS секвенирования'
   - 'Заключение'
   
   ДЛЯ СИНТЕТИЧЕСКИХ ГЕНОВ (gene_type == 'synthetic'):
   - 'Дизайн конструкции' (включая оптимизацию для митохондрий)
   - 'Проверка синтезированной конструкции' (рестрикционный анализ)
   - 'Проверка конструкции с помощью NGS секвенирования'
   - 'Заключение'

д) РАСПОЛАГАЕТ РИСУНКИ В ПРАВИЛЬНОМ ПОРЯДКЕ:
   * Рисунок 1 (img_01.png — гель рестрикции) ВНУТРЬ раздела 'Проверка клонов с помощью рестрикционного анализа' (для cDNA) ИЛИ 'Проверка синтезированной конструкции' (для synthetic), после текста. Подпись: 'Рисунок 1. Электрофорез рестрикционных фрагментов успешных клонов и отрицательного контроля.' Ширина 6 дюймов.
   * Рисунок 2 (MAP_FILE — analysis.png, картирование NGS) ВНУТРЬ раздела 'Подтверждение конструкции с помощью NGS секвенирования' (для cDNA) ИЛИ 'Проверка конструкции с помощью NGS секвенирования' (для synthetic), после текста. Подпись: 'Рисунок 2. Картирование ридов на референсную последовательность. Верхняя панель: диаграмма распределения количества прочтений в зависимости от их длины; Средняя панель: графическое отображение картирования прочтений на сборку de novo и референс; Нижняя панель: графическое отображение картирования прочтений на референс'. Ширина 7 дюймов.
   * Рисунок 3 (img_02.png — спектрофотометр/выделение ДНК) ВНУТРЬ раздела 'Выделение ДНК клонов для Cell Facility' (если такой раздел есть в паспорте) или ПОСЛЕ раздела с рестрикцией. Подпись: 'Рисунок 3. Проверка качества выделенной ДНК клонов.' Ширина 6 дюймов.
е) Добавляет раздел 'Заключение' после всех рисунков
ж) Сохраняет файл

ШАГ 6: Парсинг GenBank (для каждой папки).
В скрипт process_all_genes.py добавь функцию parse_gbk_features(gbk_file), которая:
а) Загружает GBK_FILE через Bio.SeqIO
б) Определяет общий размер последовательности
в) Пронумеровывает фичи, извлекает type/label/start/end
г) ИСКЛЮЧАЕТ фичи где (end-start) >= 0.95*общий_размер
д) Для каждого названия делает запрос к Wikipedia API и берет первые 2 предложения как описание
е) Возвращает список фичей

ШАГ 7: Генерация карты плазмиды с раскраской (для каждой папки).
В скрипт process_all_genes.py добавь функцию draw_plasmid_map(gbk_file, features_data, output_path), которая:
а) Загружает GBK_FILE и features_data
б) Создает CircularGraphicRecord из dna_features_viewer
в) Добавляет отфильтрованные фичи С РАСКРАСКОЙ ПО ТИПАМ:
   * type == 'CDS' или 'gene' → цвет '#8B008B' (тёмно-фиолетовый/бордовый)
   * type == 'promoter' или label содержит 'promoter' → цвет '#4682B4' (стальной синий)
   * type == 'rep_origin' или label содержит 'ori' → цвет '#FFD700' (золотой/желтый)
   * label содержит 'Amp' или 'resistance' → цвет '#228B22' (зелёный)
   * label содержит 'ITR' → цвет '#808080' (серый)
   * остальные → цвет '#A9A9A9' (тёмно-серый)
г) Вызывает plot(figure_width=14, figure_height=14)
д) Удаляет заголовок через ax.set_title('')
е) Сохраняет в output_path (dpi=300)

ШАГ 8: Добавление раздела 'Дополнительные материалы' с таблицей (для каждой папки).
В скрипт process_all_genes.py добавь функцию append_supplements(report_path, plasmid_map_path, features_data), которая:
а) Открывает report_path
б) Добавляет разрыв страницы и заголовок Heading 1: 'Дополнительные материалы: Карта конструкции'
в) Добавляет абзац: 'На рисунке представлена круговая карта конструкции. Расшифровка элементов приведена в таблице ниже.'
г) Вставляет изображение plasmid_map_path (ширина 6 дюймов)
д) Добавляет заголовок Heading 2: 'Аннотация элементов конструкции'
е) Создает таблицу с 4 колонками: '№', 'Название элемента', 'Координаты', 'Описание'
ж) Устанавливает ширину колонок: последняя колонка ('Описание') = 50% ширины таблицы (3.251 дюйма), остальные три колонки делят оставшиеся 50% поровну (~1.083 дюйма каждая). Используй row.cells[i].width в python-docx.
з) Заполняет таблицу данными из features_data
и) Сохраняет файл

ГЛАВНЫЙ ЦИКЛ:
В конец скрипта process_all_genes.py добавь главный цикл, который:
а) Вызывает функцию из Шага 0 для поиска всех папок
б) Вызывает функцию из Шага 3 один раз для копирования стилей из ОБОИХ шаблонов (EXAMPLE1_report.doc и EXAMPLE2_report.doc)
в) Для каждой папки:
   - Вызывает функцию из Шага 1 (извлечение изображений)
   - Вызывает функцию из Шага 2 (извлечение текста и определение типа гена)
   - Определяет, какой шаблон использовать: TEMPLATE_FILE = EXAMPLE1_report.doc если gene_type == 'cDNA', ИЛИ EXAMPLE2_report.doc если gene_type == 'synthetic'
   - Определяет, какие стили использовать: styles = styles_cDNA если gene_type == 'cDNA', ИЛИ styles_synthetic если gene_type == 'synthetic'
   - Вызывает функцию из Шага 4 (генерация текста)
   - Вызывает функцию из Шага 5 (создание DOCX с рисунками)
   - Вызывает функцию из Шага 6 (парсинг GenBank)
   - Вызывает функцию из Шага 7 (генерация карты)
   - Вызывает функцию из Шага 8 (добавление дополнительных материалов)
   - Выводит отчет о прогрессе: 'Обработан ген [GENE] (тип: [cDNA/synthetic]): создан файл [GENE]_report.docx'

После создания файла запусти его: /NatureUsers/ras/work/open-science/env/bin/python3 process_all_genes.py

НЕ делай это вручную. Создай файл через cat и запусти его. Начни с Шага 0." --agent build --wait