Sorry for the delayed answer, here is my matlab code(is is still not working somhow the same issue is still apparing):
function [angle]= Diheadral_angle_reader_one(path,array);
path=[“”];%the path is leading to the file which i will attach at the end of this file, for testing
array=[26 27 29 31]; %orca input starts from 0, the array is incating the number of atom %which is wanted to be concidered in orca numbering! (also for testing)
atom1=array(1)+1;%due to matlab +1, matlab starts to count from one
atom2=array(2)+1;
atom3=array(3)+1;
atom4=array(4)+1;
formatSpeccoord = ‘%s’;% the format
formatSpec = ‘%d’;
fileID = fopen(path);%open xyz
formatSpecatoms=‘%s’;
Sizem = textscan(fileID,formatSpec);
fclose(fileID);
Sizem = uint64(Sizem{1}); %size of molecule that is given in xyz file
C_data0=cell(Sizem,4);
dim=size(C_data0);
fileID = fopen(path);
% C_data0 = textscan(fileID,‘%c %f %f %f’,2,‘Delimiter’,‘\n’);
C = textscan(fileID,formatSpeccoord,‘HeaderLines’,2,‘Delimiter’,‘\n’);
atom1_coord=C{1}{atom1};%char array of the atom type and the respective coorinates
atom2_coord=C{1}{atom2};
atom3_coord=C{1}{atom3};
atom4_coord=C{1}{atom4};
atom1_coord=str2num(atom1_coord(3:end)); %neglicting the the atom type, 3 because some atom types has 2 letters (eg, vor example Pt)
atom2_coord=str2num(atom2_coord(3:end));
atom3_coord=str2num(atom3_coord(3:end));
atom4_coord=str2num(atom4_coord(3:end));
vector1=atom1_coord-atom2_coord;% cacluating the vators betweeen the 4 atoms
vector2=atom2_coord-atom3_coord;
vector3=atom3_coord-atom4_coord;
v1norm=vector1/sqrt(vector1(1)^2+vector1(2)^2+vector1(3)^2); %normalisation of vector1
v2norm=vector2/sqrt(vector2(1)^2+vector2(2)^2+vector2(3)^2);%normalisation of vector2
v3norm=vector3/sqrt(vector3(1)^2+vector3(2)^2+vector3(3)^2);%normalisation of vector3
normal1=cross(vector1,vector2);% calculating the normal of the vectors
normal2=cross(vector2,vector3);
n1=normal1/sqrt(normal1(1)^2+normal1(2)^2+normal1(3)^2);%normal1 but normilsed
n2=normal2/sqrt(normal1(1)^2+normal1(2)^2+normal1(3)^2);
%i choose the methode of your fist link, with the 16 upvotes,
%all the other vaiables are named the same as in the link
m1=cross(normal1,v2norm); %cacluatin the m1 for the first linke, of the fist answer(with 16 upvoes)
x=dot(n1,n2);%
y=dot(m1,n2);
control_value=dot(v2norm,n2);% should be 0 and will be a control as said in the post
angle=atan2(y,x);% angle
end
the XYZ file is:
62
Coordinates from ORCA-job 2_opt_S0_DMF_wB97X-D3_def2-TZVP_alpha
C -3.10710226026588 0.24118543720111 -1.11916379438834
C -3.13653697345593 -1.10752175996764 -1.53135088015023
C -4.09370208546276 0.74653577093161 -0.31832217251697
C -4.15316807690156 -1.93334654034725 -1.13854815558684
C -5.18301505643120 -1.43148792088035 -0.31771872237643
C -5.15258052877653 -0.08607603684429 0.09614872978083
N -6.13806605010077 0.41800780498366 0.89344881043909
N -6.20390802745153 -2.25112503383327 0.06268395314644
C -7.12663245937811 -1.75203821303779 0.82248884775704
C -7.08965650301085 -0.38304684387180 1.25528530619125
H -2.34489148028874 -1.48746512050211 -2.16566067103805
H -4.19430217846450 -2.97154307438358 -1.44515385683735
H -2.29252137771917 0.87867529980372 -1.44075820406447
H -4.08744066878187 1.77875014287434 0.01000090485393
S -8.27420198328421 0.23395640220761 2.40521880834832
S -8.37170578750967 -2.85043727524953 1.40540273230530
C -9.79254403646249 -1.80320567852944 1.40735384080210
C -9.75684432458846 -0.53470436593729 1.83323415027339
S -11.16214706727395 0.50600656005298 1.82162244467476
S -11.24025653889001 -2.54664791398125 0.77528214797188
Pt -12.81348919905665 -0.88835944890716 1.05719388305997
S -14.41099296129232 0.77621699209481 1.34357984328353
S -14.47469598372043 -2.24074983916541 0.17518657997524
C -15.80129881453538 0.20568271080354 0.46813824277070
C -15.79703376345837 -1.22710401887076 -0.01956600859505
N -16.85203428590848 0.86117444389771 0.18717531271576
N -16.89961509088588 -1.60211798799019 -0.61189313162456
C -17.13409779848628 -2.86744157653488 -1.29430053580530
H -17.57075431509295 -0.84181657719869 -0.71537615375310
C -17.18033913998781 -4.04186628440231 -0.33474026243415
C -17.76613649384608 -3.93083409260547 0.92048651838374
C -16.68381143005267 -5.27249964855638 -0.74591535567373
C -16.77327940712957 -6.38078703872817 0.08292312748220
C -17.85021157717123 -5.03647121799188 1.75411251555710
C -17.35726537221368 -6.26494534921641 1.33672899143238
H -18.15075533092470 -2.97366413036259 1.25577133941313
H -18.30311816583027 -4.93748636352921 2.73367006005664
H -17.42329324926610 -7.12829102486289 1.98817921039567
H -16.21732285269169 -5.36156508634259 -1.72159135022925
H -16.38163737131382 -7.33469004917215 -0.25026507619352
C -18.43913902975768 -2.75716923730633 -2.07305081142683
H -16.30171623619317 -3.02362348833151 -1.98800281386952
H -19.27599290667424 -2.59796390587548 -1.39014348432072
H -18.61402410904270 -3.68060052581867 -2.62336031498707
H -18.39696532410435 -1.93002784373568 -2.78399018407371
C -16.99268534631188 2.25120697048005 0.57904840094956
C -17.75402702107626 3.00634580895760 -0.49074041013648
C -17.26774414906089 4.21790006991392 -0.96568944639668
C -18.95580593642236 2.51998579090700 -0.99823440942851
C -19.65428138949346 3.23124541026798 -1.96090157653801
C -19.16077055307776 4.44243350850938 -2.43045575180466
C -17.96586142576182 4.93503960314860 -1.92907984649461
H -16.32919682282724 4.60349958172767 -0.58094911537463
H -19.70496032278990 4.99632845354779 -3.18638086769489
H -17.56994604585308 5.87637108157858 -2.29250761259975
H -19.34289346649781 1.57257615481389 -0.64026892539661
H -20.58706876902127 2.83883768226486 -2.34938786704314
C -17.70260825546483 2.33018223684295 1.93219681264278
H -16.00587208076309 2.71645672173098 0.68149837563780
H -18.69302626964000 1.87594750267716 1.86905562778761
H -17.81679416182551 3.37262499457465 2.23288405321831
H -17.12574431098945 1.80768737607124 2.69722819754831