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.cpp $
5 $LastChangedRevision: 85 $
6 $Date: 2014-07-02 16:07:08 -0400 (Wed, 02 Jul 2014) $
8 ***********************************************************
11 IMPLEMENTATION OF FOURIER RECONSTRUCTION METHOD
12 SEE, E.G., GORDON AND HERMAN, 1974, LUTZ, 1975 AND MERSEREAU,
14 THE METHOD HAS FOUR STAGES:
15 (1) FOURIER TRANSFORMING THE DATA
16 (2) FILTERING THE FOURIER TRANSFORM
17 (3) INTERPOLATING THE FOURIER TRANSFORM TO A SQUARE GRID
18 (4) TAKING THE INVERSE FOURIER TRANSFORM
20 TO EXECUTE THE ROUTINE SPECIFY EXEC FOURIER AND CHOOSE PARAMETERS
22 FILTER : BAND BANDLIMITING FILTER
26 CUTOFF : REAL MODIFIER
27 THIS SPECIFIES THE CUTOFF RADIUS AS CUTOFF/(2.0*RINC)
28 WHERE RINC IS THE MODIFIED PINC (SEE FRINIT)
29 CUTOFF IS SUPPOSED TO BE A NUMBER BETWEEN 0 AND 1
30 IF CUTOFF EQ 0 IT IS REASSIGED TO 1.0
31 IF CUTOFF LT 0 IT IS REASSIGNED TO 2.0*PRJNUM/(PI*NELEM
33 IF CUTOFF GT 1 IT IS REASSIGNED TO 1.0
34 INTERP : INTEGER MODIFIER
35 =1 NEAREST NEIGHBOR IN CARTESIAN SENSE
36 =2 NEAREST NEIGHBOR IN RADIAL SENSE
37 =3 LINEAR INTERPOLATION
38 =4 HARMONIC INTERPOLATION
39 SIZE1 : INTEGER MODIFIER
40 THE SIZE OF THE ARRAY TO BE USED FOR FOURIER TRANSFORM
41 IF OMITTED, IT WILL BE ASSIGNED NRAYS+1
42 IF LESS THEN USRAYS+1 IT WILL BE REASSIGNED USRAYS+1
43 SIZE2 : INTEGER MODIFIER
44 SIZE2*SIZE2 WILL BE THE SIZE OF THE ARRAY TO BE
46 IF OMITTED OR LESS THAN NELEM+1 IT WILL BE REASSIGNED
49 MORE DETAILED PROCEDURE :
50 STEP1 READ 1ST PROJECTION INTO COMMON BLOCK STARTING AT NTEMP+1
51 STEP2 REARRANGE THE PROJECTION DATA SO THAT THE ORIGIN IS THE
52 FIRST ELEMENT IN THE ARRAY
53 PUT INTO COMMON BLOCK STARTING AT NPROJ1+1
54 PERFORM FILTERING & FOURIER TRANSFORM, THE TRANSFORM REPLACES THE
56 STEP3 REPEAT UNTIL ALL PROJECTIONS ARE USED:
57 READ NEXT PROJECTION INTO NTEMP+1
58 REARRANGE THE DATA, PUT INTO COMMON BLOCK STARTING AT NPROJ2+1
59 OR NPROJ1+1 (LEAST RECENTLY USED)
60 PERFORM FILTERING & FOURIER TRANSFORM
61 PERFORM INTERPOLATION USING THE DATA IN NPROJ1 AND NPROJ2
62 STEP4 READ 1ST PROJECTION, REARRANGE, TRANSFORM, INTERPOLATE BRTWEEN
63 1ST & LAST PROJECTIONS
64 STEP5 INVERSE TRANSFORM THE INTERPOLATED VALUES
65 STEP6 REARRANGE THE INVERSE TRANSFORM AND PUT INTO RECON
76 BOOLEAN foru_class::Run(REAL* recon, INTEGER* list, REAL* weight, INTEGER iter)