Initial snark14m import
[snark14.git] / src / snark / foru_bckwrd.cpp
1 /*
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_bckwrd.cpp $
5  $LastChangedRevision: 85 $
6  $Date: 2014-07-02 16:07:08 -0400 (Wed, 02 Jul 2014) $
7  $Author: agulati $
8  ***********************************************************
9
10  PURPOSE: PERFORM BACKTRANSFORM THEN CALL SUBROUTINE FTFILL TO
11  STORE THE VALUES IN THE ARRAY RECON
12  */
13
14 #include <cstdio>
15
16 #include "blkdta.h"
17 #include "geom.h"
18 #include "fourie.h"
19 #include "uiod.h"
20 #include "second.h"
21
22 #include "foru.h"
23
24 void foru_class::bckwrd(REAL* recon)
25 {
26         REAL tback;
27         INTEGER n1;
28         INTEGER n3;
29         REAL* nr;
30         REAL t1;
31         REAL fact;
32         INTEGER invdir;
33         REAL t2;
34         REAL sum;
35         INTEGER k;
36         REAL ave;
37         REAL adj;
38
39         tback = 0.0;
40         n1 = Fourie.nsize2;
41         n3 = Fourie.nsize2 + 2;
42         nr = Fourie.nfrpln;
43
44         // PERFORM BACKTRANSFORM
45         second(&t1);
46         fact = (REAL) 1.0 / (GeoPar.pixsiz * GeoPar.pixsiz);
47         invdir = -1;
48         fft(Fourie.nfrpln, Fourie.nback, invdir, fact);
49         second(&t2);
50         tback = t2 - t1;
51         fprintf(output, "\ntime for backtransform :           %10.3f  seconds   ", tback); // changed precision to three digits - swr 1/21/06
52         nr = Fourie.nfrpln;
53
54
55         // CALL FTFILL TO PUT THE NUMBERS IN RECON
56         ftfill(recon, Fourie.nfrpln, Fourie.nsize2);
57
58
59         // ADJUST THE NUMBERS IN RECON SO THAT THE AVERAGE DENSITY IS AVEDEN
60         sum = 0.0;
61         for (k = 0; k < GeoPar.area; k++)
62         {
63                 sum += recon[k];
64         }
65
66         ave = sum / GeoPar.area;
67         adj = GeoPar.aveden - ave;
68         for (k = 0; k < GeoPar.area; k++)
69         {
70                 recon[k] += adj;
71         }
72
73         return;
74 }