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/pick.cpp $
5 $LastChangedRevision: 80 $
6 $Date: 2014-07-01 21:01:54 -0400 (Tue, 01 Jul 2014) $
8 ***********************************************************
10 EACH CALL TO PICK RETURNS THE NUMBER NR OF A NEW RAY AND THE
11 NUMBER NP OF A NEW PROJECTION ACCORDING TO THE SELECTION OF
12 SEQUENCING MADE BY THE SELECT COMMAND. DEFAULT IS SEQUENTIAL RAY
13 SELECTION WITH RAY-STEP = PROJECTION-STEP = 1
29 void pick(INTEGER* np, INTEGER* nr)
35 //EFFICIENT RAY PICKING
37 case 7: // efficient picking
39 if (RaySel.effcnt % (RaySel.numray * GeoPar.prjnum) == 0)
41 RaySel.old_numprj[0] = -1;
42 RaySel.effcnt = 0; // Bug #214, wei, 11/20/2006
45 if (RaySel.effcnt % RaySel.numray == 0)
47 RaySel.old_numray[0] = -1;
49 pi_map(RaySel.num_digprj, RaySel.decompprj, RaySel.baseprj,
50 &RaySel.old_numprj, &RaySel.new_numprj, &RaySel.curnp);
53 pi_map(RaySel.num_digray, RaySel.decompray, RaySel.baseray,
54 &RaySel.old_numray, &RaySel.new_numray, &RaySel.curnr);
58 RaySel.curnr += GeoPar.fsnray; //(GeoPar.nrays-GeoPar.snrays)/2;
62 RaySel.curnr += GeoPar.fusray; //(GeoPar.nrays-GeoPar.usrays)/2;
71 L30: if (!RaySel.useray)
73 RaySel.curnr = (INTEGER) (Rand() * ((REAL) (GeoPar.snrays))
74 + ((REAL) (RaySel.begray))); // bug 184 - swr - 11/04/05
78 RaySel.curnr = (INTEGER) (Rand() * ((REAL) (GeoPar.usrays))
79 + ((REAL) (RaySel.begray))); // bug 184 - swr - 11/04/05
81 RaySel.curnp = (INTEGER) (Rand() * (REAL) (GeoPar.prjnum)); // bug 184 - swr - 11/04/05
86 L40: RaySel.curnp += RaySel.prjinc;
87 if (RaySel.curnp >= GeoPar.prjnum)
89 RaySel.curnp = RaySel.initnp;
90 RaySel.curnr += RaySel.rayinc;
91 if (RaySel.curnr > RaySel.endray)
95 >= MIN0((RaySel.begray + RaySel.rayinc - 1),
98 RaySel.initnr = RaySel.begray;
100 if (RaySel.initnp >= MIN0(RaySel.prjinc, GeoPar.prjnum))
104 RaySel.curnp = RaySel.initnp;
106 RaySel.curnr = RaySel.initnr;
113 L50: RaySel.curnr += RaySel.rayinc;
114 if (RaySel.curnr > RaySel.endray)
116 RaySel.curnr = RaySel.initnr;
117 RaySel.curnp += RaySel.prjinc;
118 if (RaySel.curnp >= GeoPar.prjnum)
121 if (RaySel.initnp >= MIN0(RaySel.prjinc, GeoPar.prjnum))
126 >= MIN0((RaySel.begray + RaySel.rayinc - 1),
129 RaySel.initnr = RaySel.begray;
131 RaySel.curnr = RaySel.initnr;
133 RaySel.curnp = RaySel.initnp;
138 // (CYCLES) OF RAYS AT RANDOM FOLLOWED BY SEQUENTIAL RAYS
140 if (RaySel.rcnt1 == RaySel.rn1)
144 if (RaySel.rcnt2 != RaySel.rn2)
155 // (CYCLES) OF RAYS AT RANDOM FOLLOWED BY SEQUENTIAL
156 // PROJECTION SELECTION
158 if (RaySel.rcnt1 == RaySel.rn1)
162 if (RaySel.rcnt2 != RaySel.rn2)
173 // (CYCLES) OF SEQUENTIAL RAYS FOLLOWED BY RAYS AT RANDOM
175 if (RaySel.rcnt1 == RaySel.rn1)
179 if (RaySel.rcnt2 != RaySel.rn2)
190 // (CYCLES) OF SEQUENTIAL PROJECTION RAYS FOLLOWED BY RAYS AT RANDOM
192 if (RaySel.rcnt1 == RaySel.rn1)
196 if (RaySel.rcnt2 != RaySel.rn2)
214 fprintf(output, "\n pick np = %5i nr = %5i", *np, *nr);