python-2.7
  • perl
  • python-3.x
  • bioinformatics
  • biopython
  • 2016-10-06 4 views -5 likes 
    -5

    Я хочу напечатать последовательность Ribose Puckering.Я хочу сортировать данные из pdb-файла в perl или python

    сценария в Perl:

    open (filehandler, "List_NAD_ID.txt") or die $!; #Input file 
        my @file1=<filehandler>; 
    
        my $OutputDir = 'C:\Users\result'; #output directory path 
    
        foreach my $line (@file1) 
        { 
         chomp $line; 
         open (fh,"$line") or die $!; 
         open (out, ">$OutputDir/$line.pdb") or die $!;   
         print out "\n" , "$line "; 
         print out "\n"; 
    
         while($file = <fh>) 
         { 
    
    
          if($file =~/^HETATM.{7}(?:C4B|O4B|C1B|C2B|O4B|C1B|C2B|C3B|C1B|C2B|C3B|C4B|C2B|C3B|C4B|O4B|C3B|C4B|O4B|C1B)/) 
          { 
    
           print out "$file"; 
          } 
         } 
         print "Completed", "\n"; 
        } 
    

    У меня есть PDB входной файл:

    HETATM 3934 C4B NAD A 255  10.495 -11.444 1.016 1.00 50.46   C 
    HETATM 3935 O4B NAD A 255  10.768 -11.615 2.448 1.00 48.17   O 
    HETATM 3936 C3B NAD A 255  10.445 -12.867 0.431 1.00 49.69   C 
    HETATM 3938 C2B NAD A 255  10.431 -13.759 1.675 1.00 48.46   C 
    HETATM 3940 C1B NAD A 255  11.323 -12.898 2.593 1.00 46.97   C 
    HETATM 3978 C4B NAD B 256  14.596 1.733 33.219 1.00 50.48   C 
    HETATM 3979 O4B NAD B 256  14.370 0.578 32.357 1.00 48.22   O 
    HETATM 3980 C3B NAD B 256  14.940 1.177 34.603 1.00 49.64   C 
    HETATM 3982 C2B NAD B 256  14.987 -0.347 34.401 1.00 48.48   C 
    HETATM 3984 C1B NAD B 256  14.066 -0.517 33.189 1.00 46.98   C 
    

    Ожидаемый результат:

    Я хочу, чтобы скопировать следующий атом, а затем вставьте согласно следующей последовательности. Все должно быть целым. (Сеть "А, В, С, ..........")

    HETATM 3934 **C4B** NAD **A** 255  10.495 -11.444 1.016 1.00 50.46   C 
    HETATM 3935 **O4B** NAD **A** 255  10.768 -11.615 2.448 1.00 48.17   O 
    HETATM 3938 **C2B** NAD **A** 255  10.431 -13.759 1.675 1.00 48.46   C 
    HETATM 3940 **C1B** NAD **A** 255  11.323 -12.898 2.593 1.00 46.97   C  
    HETATM 3935 **O4B** NAD **A** 255  10.768 -11.615 2.448 1.00 48.17   O 
    HETATM 3940 **C1B** NAD **A** 255  11.323 -12.898 2.593 1.00 46.97   C 
    HETATM 3938 **C2B** NAD **A** 255  10.431 -13.759 1.675 1.00 48.46   C 
    HETATM 3936 **C3B** NAD **A** 255  10.445 -12.867 0.431 1.00 49.69   C 
    . 
    . 
    . 
    

    У меня пять уровня последовательности пасты, v0, v1, v2, v3, v4.

    Последовательность:

    C4B-O4B-C1B-C2B 
    O4B-C1B-C2B-C3B 
    C1B-C2B-C3B-C4B 
    C2B-C3B-C4B-O4B 
    C3B-C4B-O4B-C1B 
    

    Это все последовательности, я хочу, чтобы распечатать данные в соответствии с приведенной выше последовательности. Я также отредактировал ожидаемый результат.

    Я хочу сортировать данные в соответствии с вышеприведенной последовательностью, chain wise. Я не ожидаю результата. Я пробовал в perl. Я новичок в Perl и Python ... так что, пожалуйста, попытайтесь решить мою проблему

    Его, как матричная задача:

    , например, у нас есть пять значений: 1,2,3,4,5

    Row 1 - 1 2 3 4 
    Row 2 - 2 3 4 5 
    Row 3 - 3 4 5 1 
    Row 4 - 4 5 1 2 
    

    Я хочу напечатать данные, подобные этим для каждой цепочки. Цепь от A до Z.

    +1

    Не могли бы вы описать, как вы хотели бы, чтобы отсортировать данные? Правила не ясны из примера. – choroba

    +0

    @ Choroba, я хочу скопировать все необходимые ATOM и затем распечатать только (C4B, O4B, C1B, C2B, C3B) в соответствии с последовательностью. – krish

    +1

    Я не понимаю. Почему строка 3 идет до строки 4, когда C1B предшествует C2b в строке последовательности 1? Или вы сортируете по столбцу 2? Но тогда почему строка 7 не предшествует строке 6? – choroba

    ответ

    0

    Если вы хотите использовать Biopython, вам нужно создать все Chains и вставить в него Atoms. Но атомы должны держать в Residue для этого работать:

    from Bio.PDB import PDBParser, PDBIO, Chain, Residue 
    
    # This is your source structure 
    pdb = PDBParser().get_structure("UGLY", "ugly.pdb") 
    
    # Now you cycle all your chains 
    for chain in pdb.get_chains(): 
        # Load all the atoms and residues in each Chain 
        atoms = list(chain.get_atoms()) 
        residues = list(chain.get_residues()) 
    
        # Start a new structure to save the output 
        io = PDBIO() 
        this_chain = Chain.Chain("A") 
        this_residue = Residue.Residue(residues[0].id, 
                residues[0].resname, 
                residues[0].segid) 
    
        # Now get the atoms in your source structure that matches your sort keys 
        # You should refactor this out to a function that accepts a sort key 
        # and returns a list of atoms or a residue with the atoms added. 
        for atom_name in "O4B-C1B-C2B-C3B".split("-"): 
         for atom in atoms: 
          if atom.get_name() == atom_name: 
           this_residue.add(atom) 
    
        # Add the residue to a structure and save it 
        this_chain.add(this_residue) 
        io.set_structure(this_chain) 
        # And now write your output file. Remember to change the name! 
        io.save("temp.pdb") 
    
    +0

    Спасибо @xbello, не могли бы вы рассказать мне, как добавить каталог для ввода и вывода. У меня 2000 файлов pdb, а идентификатор цепочки может быть от A до Z. – krish

    +0

    Вы должны использовать модули 'os.path' или' glob' и использовать результаты для подачи функций анализатора/записи. Это совсем другой вопрос. – xbello

    +0

    Я пробовал, но получаю ошибку Вы можете отредактировать выше программу – krish

     Смежные вопросы

    • Нет связанных вопросов^_^