2 ***********************************************************
3 $SNARK_Header: S N A R K 1 4 - A PICTURE RECONSTRUCTION PROGRAM $
4 $HeadURL: svn://dig.cs.gc.cuny.edu/snark/trunk/src/snark/foru_prjtrn.cpp $
5 $LastChangedRevision: 85 $
6 $Date: 2014-07-02 16:07:08 -0400 (Wed, 02 Jul 2014) $
8 ***********************************************************
10 PRJTRN: PROJECTION TRANSFORM
11 PURPOSE: READ NP'TH PROJECTION INTO VECTOR, PUT THE ANGLE IN
12 PHI (IN RADIAN ) AND DPHI ( IN DEGREE ) WHERE THE ANGLE
13 IS ALWAYS BETWEEN -90 AND 90
14 IF THE ANGLE IS NOT IN THAT RANGE ADD N*PI OR SUBSTRACT
15 N*PI TO MAKE IT IN THE RANGE AND REVERSE THE PROJECTION
17 THEN TRANSFORM & FILTER THE DATA
18 ***NOTE THE UNCONVENTIONAL DEFINITION OF ANGLE AND ORDER OF PROJ
36 void foru_class::prjtrn(INTEGER np, REAL* vector, REAL* phi, REAL* dphi)
49 Anglst.getang(np, &theta, &sinth, &costh);
54 if (GeoPar.uni && ((theta - oldth) > Consts.pid2))
56 if (GeoPar.vri && ((theta - oldth) > (Consts.pi / 4.0)))
62 *phi = theta - Consts.pid2;
64 while (*phi < -Consts.pid2)
69 while (*phi > (Consts.pi + Consts.pid2))
74 revers = (*phi > Consts.pid2);
77 *dphi = *phi * (REAL) 180.0 / Consts.pi;
79 ProjFile.ReadProj(np, Fourie.ntemp, Fourie.nsize1);
83 fact = Fourie.rinc * (REAL) MAX0(fabs(cos(*phi)), fabs(sin(*phi)));
86 for (k = 0; k < Fourie.nsize1; k++)
88 Fourie.ntemp[k] /= fact;
92 ftmap(Fourie.ntemp, vector, revers);
96 fft(vector, Fourie.nforw, invdir, fact);
99 frfilt(vector, Fourie.nsize1, Fourie.nfiltr, Fourie.cutoff, *phi);