Programování v jazyce C pro chemiky (C2160) - závěrečné cvičení 8. Graf úhlů peptidické páteře Zadání Vytvořte program, který zobrazí graf úhlů peptidické páteře \\i a cp pro jednotlivá residua. 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 torzní úhly (p a iJj pro jednotlivá residua • Bude zobrazovat zdvojený graf, kde v horní části budou zobrazeny hodnoty úhlu \\i pro jednotlivá residua proteinu a v dolní části totéž pro úhel cp. 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". Graf uhlu peptidické pateré phi a )SÍ 180 ■ psi 0 ■ -180 180 phi o ■ 180 1 10 0 30 40 Beta listy Heli^nebo listy unk ALA ^^lARG ■ asn ■ ■ asp 1 cys ^^■gln ■ gl u ■ gly his 1 ■ met ^^■phe PRO SER ■ THR ■ TRP TYR 1 VAL PDB soubor: /home/martinp/C£läO/data/lJKy_noal.pdb Graf uhlu peptidické pateré phi a psi [mtwtf ■ Alfahelixy ■ Beta list/ r: /home/martinp/C21áO/data/2dhc.piib wsm ■T'l'í í"''.l,.i"i|' ■' ' 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 uhel 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 radiánech) = 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