Initial snark14m import
[snark14.git] / src / snark / quad_nxtpct.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_nxtpct.cpp $
5  $LastChangedRevision: 89 $
6  $Date: 2014-07-02 17:24:53 -0400 (Wed, 02 Jul 2014) $
7  $Author: agulati $
8  ***********************************************************
9
10  COMPUTE NEXT PICTURE
11  */
12
13 #include <cstdio>
14 #include <cmath>
15 #include "blkdta.h"
16 #include "geom.h"
17 #include "modefl.h"
18 #include "consts.h"
19 #include "uiod.h"
20 #include "blob.h"
21 #include "quad.h"
22
23 void quad_class::nxtpct(REAL* x, REAL* cg, REAL delta)
24 {
25
26         INTEGER i;
27         REAL prjden;
28         REAL temden;
29         REAL tem;
30         REAL ratio;
31         REAL snorm;
32         REAL corr;
33
34         INTEGER area;
35         //INTEGER pr;
36
37         //pr = (Blob.H + Blob.M)%2;
38
39         if (Blob.pix_basis)
40         {
41                 area = GeoPar.area;
42         }
43         else
44         {
45                 area = Blob.area;
46         }
47
48         for (i = 0; i < area; i++)
49         {
50                 x[i] -= delta * cg[i];
51         }
52
53         // CONSTRAIN VALUES AND AVERAGE DENSITY ADJUSTMENT
54
55         prjden = GeoPar.aveden * ((REAL) (GeoPar.area));
56
57         temden = 0.0;
58
59         for (i = 0; i < area; i++)
60         {
61                 if (Blob.pix_basis || (!Blob.pix_basis && i % 2 == Blob.pr))
62                 {
63                         tem = x[i];
64                         if (Modefl.lofl)
65                                 tem = MAX0(tem, Modefl.lower);
66                         if (Modefl.upfl)
67                                 tem = MIN0(tem, Modefl.upper);
68                         temden += tem;
69                         x[i] = tem;
70                 }
71         }
72
73         if (hopt >= 1)
74         {
75
76                 if (fabs(temden) <= Consts.zero)
77                 {
78                         fprintf(output,
79                                         "\n\n      reconstructed picture is zero, your request for picture normalizing set the picture to aveden");
80
81                         for (i = 0; i < area; i++)
82                         {
83                                 x[i] = GeoPar.aveden;
84                         }
85
86                 }
87                 else
88                 {
89
90                         ratio = prjden / temden;
91                         if (popt >= 1)
92                         {
93                                 fprintf(output, "\n\n      ratio of densities ,%15.4e", ratio); //bug 147, wei, 2005/10
94                         }
95
96                         for (i = 0; i < area; i++)
97                         {
98                                 x[i] *= ratio;
99                         }
100                 }
101         }
102
103         if (popt <= 0)
104                 return;
105
106 //     CALCULATE INDICATOR SIZE OF CORRECTION
107
108         snorm = 0.0;
109         for (i = 0; i < area; i++)
110         {
111                 if (Blob.pix_basis || (!Blob.pix_basis && i % 2 == Blob.pr))
112                 {
113                         snorm += cg[i] * cg[i];
114                 }
115         }
116
117         snorm = (REAL) sqrt(snorm);
118         corr = (REAL) fabs(delta) * snorm;
119
120         fprintf(output, "\n\n      norm of correction ,%15.4e", corr); //bug 147, wei, 2005/10
121         fprintf(output, "\n      delta              %15.4e", delta);
122         fprintf(output, "\n      norm of corr vector %15.4e", snorm);
123
124         return;
125 }