from termcolor import colored
import IPython

class Practice():
  def __init__(self):   
    self.proccess = False   
    self.answ_2 = False
    self.good_experiment = False

  def task_light(self):
    print('                                      *** Уровень LIGHT ***')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    print('Для продукции большого количества белка альбумина ученые решили вывести новый генно-модифицированный сорт')
    print('картошки, который бы накапливал в клубнях человеческий альбумин.')
    print()
    print('Расставьте в нужном порядке блоки, для того чтобы эксперимент был успешным:')
    print('1.  Отбор положительных клонов Agrobacterium tumifaciens по маркеру')
    print('2.  Стимуляция каллуса и получение новых растений')
    print('3.  PCR для наработки последовательности гена для встройки')
    print('4.  Лигирование вставки с вектором')
    print('5.  Сбор клубней, выделение белков')
    print('6.  Отбор образцов каллуса по маркеру и подтверждение успешной трансформации')
    print('7.  Наработка высокого титра агробактерий с рекомбинантным вектором')
    print('8.  Подбор праймеров по последовательности из базы данных для гена ALB, кодирующего альбумин')
    print('9.  Трансформация культуры Agrobacterium tumifaciens полученным рекомбинантным вектором')
    print('10. Заражение клеток каллуса картофеля культурой Agrobacterium tumifaciens')
    print('11. Подбор и рестрикция Ti-плазмидного вектора. Рестрикция PCR вставки')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    print('Введите свой вариант ответа (номера блоков через пробел. Например: 6 3 8 2 1 11 7 4 8 9 5)')
    print()
    answer = input('Ответ: ')
    answer=answer.replace(' ','')
    answer=answer.replace(',','')
    print()
    if answer.replace(' ','') == '8311491710625':
      print(colored('Ура! Эксперимент удачен! Вы получили новый сорт картофеля!!!', color='green', attrs=['bold']))
    else:
      print(colored('Упс!Эксперимент не удачен', color='red', attrs=['bold']))
 
  def task_hard_1(self):
    print('                                      *** Уровень HARD (1)***')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    print('Введите область генома человека, содержащую кодирующую последовательность гена альбумина')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    print('Введите свой вариант ответа (Например: hg38 chr4:78,563,123-67,422,456)')
    print()
    answer = input('Ответ: ')
    print()
    if answer.replace(' ','') == 'hg38chr4:73,404,328-73,420,298' or answer.replace(' ','') == 'hg38chr4:73,406,730-73,420,298' or answer.replace(' ','') == 'hg38chr4:73,404,328-73,421,121':      
      print(colored('Отлично. Переходим к следующему пункту', color='green', attrs=['bold']))
    else:
      print(colored('Эксперимент не удачен', color='red', attrs=['bold']))

  def task_hard_2(self):
    print('                                      *** Уровень HARD (2)***')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    print('Выберите подходящий промотор для создания химерной конструкции для клонирования:')
    print('1.  Patatin B33 promoter')
    print('2.  CMV promoter')
    print('3.  promoter of the potato chitinase C gene')
    print('4.  ALB gene promoter')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    print('Введите свой вариант ответа (порядковый номер)')
    print()
    answer = input('Ответ: ')
    print()
    if answer in ['1', '3']:
      print(colored('ДА, переходим к следующему пункту', color='green', attrs=['bold']))
    else:
      print(colored('Упс! Нет продукта, эксперимент неудачен', color='red', attrs=['bold']))
    self.answ_2 = answer == '1'

    
  def task_hard_3(self):
    print('                                      *** Уровень HARD (3)***')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    print('Выберите вектор для трансформации:')
    print('1.  pBin 19 Vector')
    print('2.  pGL3 basic IRES')
    print('3.  vector pAquaN1')
    print('4.  Psi-СHECK 2 vector')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    print('Введите свой вариант ответа (порядковый номер)')
    print()
    answer = input('Ответ: ')
    print()
    if answer=='1':
      print(colored('ДА, переходим к следующему пункту', color='green', attrs=['bold']))
    else:
      print(colored('Эксперимент неудачен', color='red', attrs=['bold']))
  def task_hard_4(self):
    print('                                      *** Уровень HARD (4)***')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    print('Напишите порядок клонирования:')
    print('1.  Промотор, Ген ALB')
    print('2.  Ген ALB, Промотор')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    print('Введите свой вариант ответа (порядковый номер)')
    print()
    answer = input('Ответ: ')
    print()
    if answer=='1':
      print(colored('ДА, переходим к следующему пункту', color='green', attrs=['bold']))
    else:
      print(colored('Эксперимент неудачен', color='red', attrs=['bold']))
  def task_hard_5(self):
    print('                                      *** Уровень HARD (5)***')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    print('Расположите в нужном порядке пары рестриктаз для процесса клонирования промотора и вставки:')
    print('1.  HindIII/EcoR1 --- BamH1/Sma1')
    print('2.  Not/HindII – BamH1/Sma1')
    print('3.  BamH1/EcoR1 – HindII/Kpn1')
    print('4.  BamH1/SmaI - -- HindIII/EcoR1')
    print('5.  BamH1/ХmaI - -- HindIII/EcoR1')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    print('Введите свой вариант ответа (порядковый номер)')
    print()
    answer = input('Ответ: ')
    print()
    if answer in ['4','5']:
      print(colored('ДА, переходим к следующему пункту', color='green', attrs=['bold']))
    else:
      print(colored('Эксперимент неудачен', color='red', attrs=['bold']))  
    self.proccess = answer=='5'
    
  def task_hard_6(self):
    print('                                      *** Уровень HARD (6)***')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    print('Ну что, проводим клонирование?')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    print('Введите свой вариант ответа (Да или нет)')
    print()
    answer = input('Ответ: ')    
    print()
    if answer.lower()=='да':
      if (self.proccess):
        print(colored('ДА, переходим к следующему пункту', color='green', attrs=['bold']))
      else:
        print(colored('Итак, очень мало положительных клонов! Повторите еще раз эксперимент №5!', color='red', attrs=['bold']))
    else:
      print(colored('Завершаем эксперименты', color='red', attrs=['bold']))  

  def task_hard_7(self):
    print('                                      *** Уровень HARD (7)***')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    print('Ура мы получили нужный вектор для трансформации! Как будем доставлять его в растения?')
    print('1.  Агробактериальная трансформация')
    print('2.  Кальций-фосфатный метод')
    print('3.  Баллистическая пушка')
    print('4.  Липофекция')    
    print('--------------------------------------------------------------------------------------------------------')
    print()
    print('Введите свой вариант ответа (порядковый номер)')
    print()
    answer = input('Ответ: ')
    print()    
    print(colored('ДА, переходим к следующему пункту', color='green', attrs=['bold']))
    self.good_experiment = answer in ['1', '3']

  def result(self):
    if self.good_experiment:
      print(colored('Ура, все отлично.  Мы имеем положительные клоны!', color='green', attrs=['bold']))
    else:
      print(colored('Упс! У нас нет положительных клонов! Повторите задание 7', color='red', attrs=['bold']))

  def get_belok(self):
    if self.answ_2:
      print(colored('Ура! Мы вывели новый сорт картофеля!', color='green', attrs=['bold']))
    else:
      print(colored('Ой! Синтез альбумина в клубнях не зафиксирован. Повторите задание 2', color='red', attrs=['bold']))

###################################################################################
##
##                        Практика 17.04
##
##
###################################################################################

class Practice17_04():
  def __init__(self):   
    self.proccess = False   
    self.answ_2 = False
    self.good_experiment = False

  def task_light(self):
    print('                                      *** Уровень LIGHT ***')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    print('Для создания новой вакцины необходимо синтезировать химерный белок содержащий ')
    print('участки гемаглютинина, принадлежащих разным штаммам вируса гриппа, а именно: H5N1 и H7N9')
    print()
    print('Расположите блоки эксперимента в нужном порядке:')
    print('1.  Клонирование вектора в культуру E.coli')
    print('2.  Трансфекция вектора в культуру эпителиальных клеток человека')
    print('3.  Выделение химерного белка')
    print('4.  Отбор положительных клонов по селективному маркеру – получение вектора и первой вставки')
    print('5.  Встройка второй вставки методом рекомбинации in fusion')
    print('6.  Проведение реакциии PCR на полученной кДНК и получение двух разных вставок – составных частей гена, кодирующего химерный белок')
    print('7.  Повторное клонирование  вектора в культуру E.coli')
    print('8.  Выбор экспрессионной плазмиды для наработки белка с вирусным промотором SV40')
    print('9.  Поиск в базах данных нужных ДНК-последовательностей и подбор двух пар праймеров')
    print('10. Лигирование вставки и вектора')
    print('11. Подтверждение структуры белка с помощью Вестерн-блот анализа  и масс-спектрометрии')
    print('12. Выделение из культуры клеток вирусной РНК двух штаммов и проведение реакции обратной транскрипции')
    print('13. Рестрикция вектора и первой вставки')
    print('14. Отбор положительных клонов по селективному маркеру – получение итоговой плазмиды содержащей вставку, гена гемаглютиннина вируса гриппа, кодирующего химерный белок')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    print('Введите свой вариант ответа (номера блоков через пробел. Например: 6 3 8 2 1 11 7 4 8 9 5)')
    print()
    answer = input('Ответ: ')
    answer=answer.replace(' ','')
    answer=answer.replace(',','')
    print()
    if answer.replace(' ','') == '9126813101457142311':
      print(colored('Ура! Эксперимент удачен!', color='green', attrs=['bold']))
    else:
      print(colored('Упс!Эксперимент не удачен', color='red', attrs=['bold']))

  def task_hard_1(self):
    print('                                      *** Уровень HARD (1)***')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    print('Задача эксперимента – получить генно-модифицированную породу коз, дающих молоко с белком человека PMS1 –  белком-супрессором опухоли')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    print('Укажите область в геноме, содержащую полный транскрипт гена (включая некодирующие участки)')
    print(colored('Внимание! Не учитывайте урезанные транскрипты, в которых количество экзонов менее 10!',  attrs=['bold']))
    print()
    answer = input('Ответ: ')
    print()
    if answer.replace(' ','') == 'chr2:189,784,085-189,864,359' or answer.replace(' ','') == 'chr2:189,784,450-189,877,629':
      print(colored('Отлично. Переходим к следующему пункту', color='green', attrs=['bold']))
    else:
      print(colored('Эксперимент не удачен', color='red', attrs=['bold']))

  def task_hard_2(self):
    print('                                      *** Уровень HARD (2)***')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    print('Выберете плазмиду для встройки:')
    print('1.  pMDLg/pRRE')
    print('2.  pAdEasy-1')
    print('3.  pUc')
    print('4.  PGemT-Easy')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    print('Введите свой вариант ответа (порядковый номер)')
    print()
    answer = input('Ответ: ')
    print()
    if answer in ['1', '2']:
      print(colored('ДА, переходим к следующему пункту', color='green', attrs=['bold']))
    else:
      print(colored('Упс! Нет продукта, эксперимент неудачен', color='red', attrs=['bold']))
    self.answ_2 = answer == '1'

    
  def task_hard_3(self):
    print('                                      *** Уровень HARD (3)***')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    print('Расставьте блоки в нужном порядке:')
    print('1.  Лигирование вставки и вектора')
    print('2.  Рестрикция вектора и вставки')
    print('3.  Выделение плазмиды из культуры клеток')
    print('4.  Клонирование плазмиды в культуру E.coli')
    print('5.  Наработка вставки, содержащей сайт рестрикции')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    print('Введите свой вариант ответа (номера блоков через пробел. Например: 5 3 4 1 2)')
    print()
    answer = input('Ответ: ')
    answer=answer.replace(' ','')
    answer=answer.replace(',','')
    print()
    if answer.replace(' ','') == '52143':
      print(colored('Отлично! Переходим к следующему пункту', color='green', attrs=['bold']))
    else:
      print(colored('Упс!Эксперимент не удачен', color='red', attrs=['bold']))

  def task_hard_4(self):
    print('                                      *** Уровень HARD (4)***')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    print('Выберите подходящую культуру клеток для трансфекции плазмиды с вирусным вектором:')
    print('1.  Эмбриональные стволовые клетки')
    print('2.  Фибробласты человека')
    print('3.  Hek293T')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    print('Введите свой вариант ответа (порядковый номер)')
    print()
    answer = input('Ответ: ')
    print()
    if answer in ['2','3']:
      print(colored('ДА, переходим к следующему пункту', color='green', attrs=['bold']))
    else:
      print(colored('Эксперимент неудачен', color='red', attrs=['bold']))

  def task_hard_5(self):
    print('                                      *** Уровень HARD (5)***')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    print('Выберете подходящий метод для трансфекции:')
    print('1.  Агробактериальная трансформация')
    print('2.  Липофекция')
    print('3.  Электропорация')
    print('4.  Баллистическая пушка')    
    print('--------------------------------------------------------------------------------------------------------')
    print()
    print('Введите свой вариант ответа (порядковый номер)')
    print()
    answer = input('Ответ: ')
    print()
    if answer == '2':
      print(colored('ДА, переходим к следующему пункту', color='green', attrs=['bold']))
    elif answer in ['1','4']:
      print(colored('Эксперимент неудачен', color='red', attrs=['bold']))
    else:
      print(colored('Увы! Клетки погибли(', color='red', attrs=['bold']))
    self.proccess = answer=='3'
    
  def task_hard_6(self):
    print('                                      *** Уровень HARD (6)***')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    print('Ну что? Какой титр вирусных частиц мы имеем?')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    if (self.proccess):
      print(colored('Ура! У нас очень высокий титр! Продолжаем!', color='green', attrs=['bold']))
    else:
      print(colored('Да…титр не очень высокий. Придется повторить эксперимент снова(! Повторите еще раз эксперимент №5!', color='red', attrs=['bold']))
    

  def task_hard_7(self):
    print('                                      *** Уровень HARD (7)***')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    print('Мы имеем суспензию, содержащую вирусные частицы. Что делаем дальше?')
    print('1.  Заражаем культуру клеток CHO Chinese hamster cells')
    print('2.  Трансдукцируем вирусы с помощью микроиньекции в ооцит козы')
    print('3.  Заражаем культуру эпителиальных клеток козы')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    answer = input('Ответ: ')
    print()
    if answer == '1':
      print(colored('Ну и как мы получим трансгенную козу?', color='red', attrs=['bold']))
    elif answer == '2':
      print(colored('Ура! Мы на верном пути!', color='green', attrs=['bold']))
    else:
      print(colored('И что же нам делать дальше с этой культурой клеток?', color='red', attrs=['bold']))

  def task_hard_8(self):
    print('                                      *** Уровень HARD (7)***')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    print('Мы получили трансгенный эмбрион. Выращиваем из него трансгенную козу')
    print('Проверим, есть ли экспрессия нужного нам белка? Укажите нужный метод для детекции белка в молоке козы?')
    print('1.  PCR')
    print('2.  Western-blot с антителами к PMS1')
    print('3.  Окрашивание антителами образца и анализ с помощью проточной цитометрии')
    print('--------------------------------------------------------------------------------------------------------')
    print()
    answer = input('Ответ: ')
    print()
    if answer == '1':
      print(colored('Эксперимент неудачен!', color='red', attrs=['bold']))
    elif answer == '2':
      print(colored('Ура! Мы на верном пути!', color='green', attrs=['bold']))
    else:
      print(colored('Эксперимент неудачен. В образце нет клеток для детекции', color='red', attrs=['bold']))
  
  def result(self):
    print('Итак, есть ли у нас экпрессия белка?')
    if self.answ_2:
      print(colored('Ура! Мы создали новую трансгенную породу коз, содержащую белок PMS1!!', color='green', attrs=['bold']))
    else:
      print(colored('Упс. Белок в образце отсутсвует. Повторите пунтк 2', color='red', attrs=['bold']))