-
Notifications
You must be signed in to change notification settings - Fork 0
/
rotatePDB.m
62 lines (43 loc) · 1.85 KB
/
rotatePDB.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
function pdb = rotatePDB(pdb,System)
Coordinates = [pdb.x,pdb.y,pdb.z];
originVec = getRotationOrigin(System,Coordinates);
Coordinates = Coordinates - originVec';
R = rotateZYZ(System.pdbAlpha,System.pdbBeta,System.pdbGamma);
Coordinates = R*Coordinates*R';
Coordinates = Coordinates + originVec;
%<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
function Rotation_Coordinates = getRotationOrigin(System,Coordinates)
Rotation_Coordinates = System.pdbOrigin;
if iscell(Rotation_Coordinates)
% find nuclei to average over
replaceNuclei = [Rotation_Coordinates{:}];
ReplaceNuclei = zeros(size(replaceNuclei));
for irep = 1:length(replaceNuclei)
ReplaceNuclei(irep) = find(pdb.serial==replaceNuclei(irep));
end
% place the electron at the mean coordinates
System.Electron.Coordinates = mean( Coordinates(ReplaceNuclei,:),1);
% set initial electron coordinates to a 3-vector
Rotation_Coordinates = System.Electron.Coordinates;
elseif length(System.Electron.Coordinates) == 1
replaceNucleus = System.Electron.Coordinates;
System.Electron.Coordinates = Coordinates(replaceNucleus,:);
Rotation_Coordinates = Coordinates(replaceNucleus,:);
elseif length(System.Electron.Coordinates) == 2
replaceNucleus1 = System.Electron.Coordinates(1);
replaceNucleus2 = System.Electron.Coordinates(2);
System.Electron.Coordinates = ...
0.5*( Coordinates(replaceNucleus1,:) +Coordinates(replaceNucleus2,:));
Rotation_Coordinates = System.Electron.Coordinates;
end
if all( size(Rotation_Coordinates)==[3,1])
return;
elseif all( size(Rotation_Coordinates)==[1,3])
Rotation_Coordinates = Rotation_Coordinates';
else
error(['Error in getElectronCoordinates():', ...
'could not get electron coordinates.']);
end
end
%>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end