Initial snark14m import
[snark14.git] / src / snark / prdta.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/prdta.cpp $
5  $LastChangedRevision: 80 $
6  $Date: 2014-07-01 21:01:54 -0400 (Tue, 01 Jul 2014) $
7  $Author: agulati $
8  ***********************************************************
9
10  PRDTA RETURNS AS ITS VALUE THE RAYSUM OF THE NR-TH RAY IN THE
11  NP-TH PROJECTION.
12  IT BRINGS INTO CORE THE NRAYS VALUES FOR THE PROJECTION IF THEY
13  ARE NOT ALREADY THERE
14  */
15
16 #include <cstdlib>
17 #include <cstdio>
18
19 #include "blkdta.h"
20 #include "geom.h"
21 #include "anglst.h"
22 #include "uiod.h"
23
24 #include "projfile.h"
25
26 REAL anglst_class::prdta(INTEGER np, INTEGER nr)
27 {
28         REAL raysum;
29
30 // IF NP IS NOT A VALID PROJECTION  TERMINATE WITH ERROR MESSAGE
31
32         if ((np < 0) || (np >= GeoPar.prjnum))
33         {
34                 // ARGUMENTS OUT OF RANGE
35                 fprintf(output, "\n **** np = %d is out of range (0..%d)", np, GeoPar.prjnum - 1);
36                 fprintf(output, "\n **** program aborted\n");
37                 exit(777);
38         }
39
40         raysum = 0.0;
41
42         // TEST IF PROJECTION IS ALREADY IN CORE, SAME AS LAST ONE READ
43
44         if (np != Anglst.incore)
45         {
46
47                 // GET PROJECTION DATA FROM RANDOM FILE
48                 Anglst.incore = np;
49                 ProjFile.ReadProj(np, Anglst.pbase, GeoPar.nrays);
50         }
51
52         // IF  NR  IS NOT A VALID RAY NUMBER TERMINATE WITH ERROR MESSAGE
53
54         if ((nr < 0) || (nr >= GeoPar.nrays))
55         {
56                 fprintf(output, "\n **** nr = %d is out of range (0..%d)", nr, GeoPar.nrays - 1);
57                 fprintf(output, "\n **** program aborted\n");
58                 exit(777);
59         }
60
61         raysum = Anglst.pbase[nr];
62
63         if (trace > 5)
64         {
65                 fprintf(output, "\n          prdta   np = %5i  nr = %5i  raysum = %9.4f", np, nr, raysum);
66         }
67         return raysum;
68 }
69