Created
November 19, 2012 00:55
-
-
Save AntonPetrov/4108400 to your computer and use it in GitHub Desktop.
Sample code for outputting basepair, basestacking, basephosphate, and baseribose annotations found by FR3D in a PDB file. Get FR3D here: https://github.com/BGSU-RNA/FR3D
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
% Sample code for outputting basepair, basestacking, basephosphate, and | |
% baseribose annotations found by FR3D in a PDB file. | |
% Input parameters: | |
% <pdb_id> - four-character PDB identifier. | |
% <output_filename> - optional name of the output file. If not provided, the | |
% output is printed to the screen | |
% Sample output: | |
% "1_A_1001_A","cWW","1_A_1040_U" | |
% "1_A_1002_G","s55","1_A_1040_U" | |
% "1_A_1039_C","s35","1_A_1040_U" | |
% FR3D looks in the /PDBFiles folder for <pdb_id>.pdb, if it's not there, | |
% then it attempts to download the structure from PDB. | |
% FR3D stores internal representation of the 3D structure in the | |
% /PrecomputedData folder for faster performance. | |
% Make sure that /PDBFiles and /PrecomputedData folders are writeable. | |
% Examples: | |
% from Matlab or octave command line: | |
% annotate_pdb('1S72') | |
% annotate_pdb('1S72', 'output.csv') | |
% from Unix system command line: | |
% path/to/matlab -nodisplay -r "setup_path; annotate_pdb('1S72'), quit" | |
% path/to/matlab -nodisplay -r "setup_path; annotate_pdb('1S72', 'output.csv'), quit" | |
% path/to/octave --eval "setup_path; annotate_pdb('1S72')" | |
% path/to/octave --eval "setup_path; annotate_pdb('1S72', 'output.csv')" | |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
function annotate_pdb(pdb_id, output_filename) | |
if nargin == 2 | |
writeToFile = 1; | |
fid = fopen(output_filename, 'w'); | |
else | |
writeToFile = 0; | |
fid = -1; | |
end | |
% create internal FR3D representation of the input file | |
File = zAddNTData(pdb_id); | |
% first parameter - function handle for data exporting | |
% second parameter - matrix with the interaction data | |
outputInteractions(@zEdgeText, File, 'Edge', writeToFile, fid); | |
outputInteractions(@zBasePhosphateText, File, 'BasePhosphate', writeToFile, fid); | |
outputInteractions(@zBaseRiboseText, File, 'BaseRibose', writeToFile, fid); | |
if writeToFile, fclose(fid); end | |
end | |
function outputInteractions(functionHandle, File, field_name, writeToFile, fid) | |
interaction_matrix = getfield(File, field_name); | |
interactions = find(interaction_matrix); | |
dimensions = size(interaction_matrix); | |
N = length(interactions); | |
for i = 1:N | |
[nt1, nt2] = ind2sub(dimensions, interactions(i)); | |
% convert internal interaction label to its text representation | |
annotation = strtrim(functionHandle(interaction_matrix(nt1, nt2))); | |
if strcmp(annotation, '----'), continue; end | |
% edit this line to change the output format | |
output = sprintf('"%i_%s_%s_%s","%s","%i_%s_%s_%s"\n', ... | |
File.NT(nt1).ModelNum, ... | |
File.NT(nt1).Chain, ... | |
File.NT(nt1).Number, ... | |
File.NT(nt1).Base, ... | |
annotation, ... | |
File.NT(nt1).ModelNum, ... | |
File.NT(nt2).Chain, ... | |
File.NT(nt2).Number, ... | |
File.NT(nt2).Base); | |
if writeToFile | |
fprintf(fid, output); | |
else | |
fprintf(output); | |
end | |
end | |
end |
Tested with Matlab R2007b and octave 3.8.0
Tested with the following Docker image: https://hub.docker.com/r/schickling/octave/
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Tested with Matlab R2007b and octave 3.6.3