Initial snark14m import
[snark14.git] / src / snark / quad_back.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/quad_back.cpp $
5  $LastChangedRevision: 80 $
6  $Date: 2014-07-01 21:01:54 -0400 (Tue, 01 Jul 2014) $
7  $Author: agulati $
8  ***********************************************************
9
10  THE BACK PROJECTIONS ARE STORED IN X AFTER CORRECTION TO AVRDEN
11  */
12
13 #include <cstdio>
14
15 #include "blkdta.h"
16 #include "geom.h"
17 #include "ray.h"
18 #include "wray.h"
19 #include "anglst.h"
20
21 #include "quad.h"
22
23 void quad_class::back(REAL* x, INTEGER* list, REAL* weight)
24 {
25
26         INTEGER i;
27         INTEGER np;
28         REAL dum;   // what is this variable for?? hstau
29         INTEGER nr;
30         INTEGER numb;
31         REAL snorm;
32         INTEGER nb;
33         INTEGER ky;
34         REAL zn;
35
36         // ZERO OUT X
37
38         for (i = 0; i < GeoPar.area; i++)
39         {
40                 x[i] = 0.0;
41         }
42
43         // COMPUTE BACK PROJECTION
44
45         if (!GeoPar.strip)
46         {
47
48                 for (np = 0; np < GeoPar.prjnum; np++)
49                 {
50                         dum = Anglst.prdta(np, 1);  // should be Anglst.prdta(np, 0)? hstau
51                         for (nr = 0; nr < GeoPar.nrays; nr++)
52                         {
53                                 wray(np, nr, list, weight, &numb, &snorm);
54                                 if (numb > 0)
55                                 {
56                                         for (nb = 0; nb < numb; nb++)
57                                         {
58                                                 ky = list[nb];
59                                                 x[ky] += Anglst.prdta(np, nr) * weight[nb];
60                                         }
61                                 }
62                         }
63                 }
64                 zn = (REAL) 1.0 / ((REAL) (GeoPar.prjnum));
65         }
66         else
67         {
68                 for (np = 0; np < GeoPar.prjnum; np++)
69                 {
70                         dum = Anglst.prdta(np, 1);
71                         for (nr = 0; nr < GeoPar.nrays; nr++)
72                         {
73                                 ray(np, nr, list, weight, &numb, &snorm);
74                                 if (numb > 0)
75                                 {
76                                         for (nb = 0; nb < numb; nb++)
77                                         {
78                                                 ky = list[nb];
79                                                 x[ky] += Anglst.prdta(np, nr);
80                                         }
81                                 }
82                         }
83                 }
84
85                 zn = (GeoPar.pixsiz * GeoPar.pixsiz) / ((REAL) (GeoPar.prjnum));
86
87                 // CORRECT TO AVRDEN
88         }
89
90         for (i = 0; i < GeoPar.area; i++)
91         {
92                 x[i] *= zn;
93         }
94
95         return;
96 }