-
Nicola Vigano authored
Signed-off-by:
Nicola Vigano <nicola.vigano@esrf.fr> git-svn-id: https://svn.code.sf.net/p/dct/code/trunk@864 4c865b51-4357-4376-afb4-474e03ccb993
Nicola Vigano authoredSigned-off-by:
Nicola Vigano <nicola.vigano@esrf.fr> git-svn-id: https://svn.code.sf.net/p/dct/code/trunk@864 4c865b51-4357-4376-afb4-474e03ccb993
gtCreateProjectionGeometry.m 1.35 KiB
function grain=gtCreateProjectionGeometry(grain,parameters)
% create Projection Geometry input structure for ASTRA code
%
grainfile=sprintf('%s/4_grainsASTRA/grain%d_/grain%d_.mat',parameters.acq.dir,grain.id,grain.id);
if ~isfield(grain,'index')
grain.index=ones(length(grain.difspots),1);
end
total_spots=length(grain.index); % total number of spots for the grain
detucen0=parameters.acq.detucen0;
detvcen0=parameters.acq.detvcen0;
detdiru0=parameters.acq.detdiru0';
detdirv0=parameters.acq.detdirv0';
detpos0=(parameters.acq.detpos0/parameters.acq.pixelsize)';
detposcorner=detpos0-detucen0*detdiru0-detvcen0*detdirv0; % the (0,0) corner of the detector in Lab system
rotcomp = gtFedRotationMatrixComp(parameters.acq.rotdir0');
for n=1:total_spots
omega=grain.omega(n);
eta=grain.eta(n);
theta=grain.theta(n);
r=[cosd(2*theta);sind(2*theta)*sind(eta);sind(2*theta)*cosd(eta)];
Rottens = gtFedRotationTensor(-omega,rotcomp);
detdiru = Rottens*detdiru0;
detdirv = Rottens*detdirv0;
detpos = Rottens*detpos0;
r = Rottens*r;
V(n,:)=[r(1), r(2), r(3), detpos(1), detpos(2), detpos(3), detdiru(1), detdiru(2), detdiru(3), detdirv(1), detdirv(2), detdirv(3)];
end
%% save the projection stack and geometry information into the grain.mat file...
grain.proj_geom_full=V;
save(grainfile,'grain');
end