Programování v jazyce C pro chemiky (C2160) - závěrečné cvičení 7. Ramachandranův diagram Zadání Vytvořte program, který zobrazí Ramachandranův diagram, tj. graf závislosti úhlu peptidické páteře \\i na cp (viz. https://en.wikipedia.org/wiki/Ramachandran ploť). V grafu vyznačí oblasti charakteristické pro alfa-šroubovice a beta-listy. Program bude mít následující vlastnosti: • Bude načítat PDB soubor s proteinem (pouze standardní residua z řádků ATOM) • Budou určeny atomy peptidické páteře N, C a C-alfa • Bude implementována funkce pro výpočet torzního úhlu • Budou spočítány úhly pro jednotlivá \\i na cp residua • Bude zobrazovat graf kde na ose x bude úhel cp a na y úhel ijj. Body v grafu odpovídající jednotlivým residuím budou barevně odlišeny pro různé typy residuí. • V grafu budou barevně vyznačeny oblasti charakteristické pro alfa-šroubovice (-110° < cp < -40°, -80° < ijj < -20°) a beta-listy (-150° < cp < -50°, 90° < ijj < 170°) • Graf bude obsahovat barevnou legendu, nadpis a jméno PDB souboru • Jméno vstupního PDB souboru bude specifikováno jako parametr na příkazovém řádku • Program bude uživatele informovat o chybě při otevření souboru, načítání konfiguračního souboru, překročení maximální přípustné velikosti polí a pod. • Zdrojový kód programu bude opatřen komentáři Nepovinné rozšíření (+5 bodů): • Program bude načítat konfigurační soubor, ve kterém bude specifikováno jméno vstupního PDB souboru na řádku ve formátu "INPUT_FILE = jmeno_pdb_souboru", dále bude v konfiguračním souboru na samostatném řádku specifikována velikost okna ve formátu "WINDOW_SIZE = sirka, vyska" • Název konfiguračního souboru bude předán programu jako parametr na příkazovém řádku Program otestujte se strukturou crambinu (ljxy_noal.pdb) a enzymu haloalkan dehalogenáza (2dhc.pdb), které najdete mezi studijními materiály v IS MU ve složce „data". Rsraschsndrsnuv diagram UNK ALA I ARG ASW GLN GLU GLY AHahelfciy PDBsoiabor: ljxy_noal.pdb Ramachatidratiuv diagram □ □ □ □ ma □ □ □ □ □ □ □ □ □ □ □ □ □ n □ □ ■ UNK ALA ■ ARG ■ ASN ■ ASP CYS ■ GLN ■ GLU ■ GLY HIS ■ ILE ■ LEU ■ LYS ■ MET ■ PHE PRO SER ■ T HR ■ TRP TYR ■ VAL -180 -90 0 phi h Alfahejixy Betalisty PDB soubor: 2dhc_noH20.pdb Dodržujte následující pravidla • Dbejte na správné odsazování textu • Pro reálné proměnné používejte typ double, ne f loat • Při každém použití operátoru dělení si ujasněte, zdali dochází k celočíselnému nebo reálnému dělení a jaký typ dělení požadujete • Proměnné vždy inicializujte vhodnou hodnotou • Při použití funkcí pro práci s řetězci a při práci s poli dbejte na to, aby nedošlo k překročení velikosti pole • Dobře zvažte, které proměnné budou lokální a které globální • Názvy globálních proměnných volte tak aby z nich byl jasný význam proměnné, volte raději delší názvy • Názvy funkcí volte tak, aby z nich bylo jasné, jakou činnost funkce vykonává • Pro překlad programů používejte nástroj make (tj. vytvořte si příslušný Makefile) • Z programu odstraňte veškerý kód, který není nutný pro splnění zadání (např. pozůstatky z minulých cvičení, zakomentované části kódu). Ponechat můžete funkci pro zápis PDB • Program nesmí při překladu vypisovat žádné varovné hlášky (při použití parametrů -Wall - pedantic) • Na začátek programu umístěte stručný komentář obsahující jméno autora, rok vytvoření, popis funkce programu, parametry příkazového řádku, popř. formát konfiguračního souboru popisující činnost programu • Všechny funkce a proměnné opatřete komentářem Nápověda 1. Upravte funkci pro načítání PDB souboru tak, že bude načítat pouze řádky ATOM a nikoliv HETATM. 2. Ve struktuře proteinu vyhledejte pro každé residuum atomy peptidické páteře, tj atomy se jménem " N ", " CA", " C ", " O " (vč. mezery na začátku a na konci) - viz. úloha 3 ze cvič. 9 3. Pro pohodlnější práci s těmito atomy přidejte do struktury RESIDUE čtyři celočíselné proměnné (např. atom_C , atom_c_alpha, atom_n, atom_o) které budou obsahovat index příslušných atomů v poli atomů (tj. pořadí v poli atomů). Hodnoty proměnných nastavte pro každé residuum ve funkci pro vyhledávaní residuí nebo v samostatné funkci. 4. Do struktury RESIDUE přidejte dvě proměnné, které budou obsahovat hodnoty torzního úhlu (p a ijj (pojmenované např. angle_phi, angle_psi). 5. Spočítejte hodnoty obou torzních úhlů pro každé residuum (s výjimkou prvního a posledního, pro které nejsou definovány). Uhel se počítá pro atomy peptidické páteře "N", "CA", "C" následovně: cp je úhel mezi atomy C(i-l) -N(i) - CA(i) - C(i) a iJj je uhel mezi atomy N(i) - CA(i) -C(i) - N(i+1) (i je pořadí residua v sekvenci) 6. Pro výpočet torzního úhlu vytvořte samostatnou funkci, které předáte indexy (tj. pořadí v poli atomů) čtyř atomů a funkce vrátí torzní úhel mezi nimi. Torzní úhel (https://en.wikipedia.org/wiki/Dihedral angle) vypočítáme následovně: Pro atomy se souřadnicemi pl, p2, p3, p4 spočítáme vektory b2 = p2-pl, b2 = p3-p2, b3 = p4-p3 (viz obrázek), torzní úhel pak spočítáme: uhel = atan2(|b2| • bl • [b2xb3], [blxb2] • [b2xb3]) kde |b2| je velikost vektoru b2, • symbolizuje skalární součin a x vektorový součin |b2| = sqrt(b2x2 + b2y2 + b2z2) a • b = ax • bx + ay • by + az • bz a x b = [aybz - az-by, az-bx-ax-bz, ax-by-aybx] Testovací data Příklad výpočtu torzního úhlu pro první torzní úhel (p residua THR2 ze struktury crambinu (ljxy_noal.pdb): pl = (15.614, 12.736, 5.075) p2 = (15.046, 11.539, 5.178) p3 = (13.824, 11.392, 5.952) p4 = (14.140, 10.687, 7.279) uhel(v radianech) = atan2(|b2|-bl-[b2xb3], [blxb2]-[b2xb3]) = atan2(1.454 • (-0.568, -1.197, 0.103) • (0.351, 1.866, 0.908), (-0.911, 0.314, -1.379) • (0.351, 1.866, 0.908)) = atan2(-3.401, -0.986) = -1.853 radiánu (tj. -106.2°) Úhly (p a iJj (ve stupních) pro prvních 5 residuí crambinu (soubor ljxy_noal.pdb): THR2: -106 2, 142 6 CYS3: -132 4, 136 0 CYS4: -124 0, 147 4 PR05: -76 2, -19 3 SER6: -157 9, 168 1