Loading [MathJax]/extensions/TeX/AMSsymbols.js
LALPulsar 7.1.1.1-8a6b96f
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
NDConstructPLUTTest.c
Go to the documentation of this file.
1/*
2* Copyright (C) 2007 Badri Krishnan, Alicia Sintes Olives
3*
4* This program is free software; you can redistribute it and/or modify
5* it under the terms of the GNU General Public License as published by
6* the Free Software Foundation; either version 2 of the License, or
7* (at your option) any later version.
8*
9* This program is distributed in the hope that it will be useful,
10* but WITHOUT ANY WARRANTY; without even the implied warranty of
11* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12* GNU General Public License for more details.
13*
14* You should have received a copy of the GNU General Public License
15* along with with program; see the file COPYING. If not, write to the
16* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
17* MA 02110-1301 USA
18*/
19
20/*-----------------------------------------------------------------------
21 *
22 * File Name: TestNDConstructPLUT.c
23 *
24 * Authors: Sintes, A.M., Krishnan, B.
25 *
26 *
27 * History: Created by Sintes June 7, 2001
28 * Modified by Badri Krishnan Feb 2003
29 *
30 *-----------------------------------------------------------------------
31 */
32
33/*
34 * 1. An author and Id block
35 */
36
37/**
38 * \author Sintes, A. M., Krishnan, B.
39 * \file
40 * \ingroup LUT_h
41 * \brief Tests the construction of the Look up Table (\c LUT)
42 *
43 * ### Usage ###
44 *
45 * \code
46 * TestNDConstructPLUT [-d debuglevel] [-o outfile] [-f f0] [-p alpha delta] [-s patchSizeX patchSizeY]
47 * \endcode
48 *
49 * ### Description ###
50 *
51 * \%TO BE CHANGED
52 *
53 * This program generates a patch grid, calculates the parameters needed for
54 * building the \c LUT, builds the \c LUT and outputs a partial Hough map
55 * derivative into a file. The sky patch is set at the south pole,
56 * no spin-down parameters are assumed for the demodulation and
57 * every third peak in the spectrum is selected.
58 *
59 * By default, running this program with no arguments simply tests the subroutines,
60 * producing an output file called <tt>OutHough.asc</tt>. All default parameters are set from
61 * <tt>\#define</tt>d constants.
62 *
63 * The <b>-d</b> option sets the debug level to the specified value
64 * \c debuglevel. The <b>-o</b> flag tells the program to print the partial Hough map
65 * derivative to the specified data file \c outfile. The
66 * <b>-f</b> option sets the intrinsic frequency \c f0 at which build the <tt>LUT</tt>.
67 * The <b>-p</b> option sets the velocity orientation of the detector \c alpha, \c delta (in radians).
68 *
69 * ### Uses ###
70 *
71 * \code
72 * LALNDHOUGHParamPLUT()
73 * LALHOUGHConstructPLUT()
74 * LALPrintError()
75 * LALMalloc()
76 * LALFree()
77 * LALCheckMemoryLeaks()
78 * \endcode
79 *
80 */
81
82
83#include <lal/LUT.h>
84
85/* Error codes and messages */
86
87/**\name Error Codes */ /** @{ */
88#define TESTNDCONSTRUCTPLUTC_ENORM 0
89#define TESTNDCONSTRUCTPLUTC_ESUB 1
90#define TESTNDCONSTRUCTPLUTC_EARG 2
91#define TESTNDCONSTRUCTPLUTC_EBAD 3
92#define TESTNDCONSTRUCTPLUTC_EFILE 4
93
94#define TESTNDCONSTRUCTPLUTC_MSGENORM "Normal exit"
95#define TESTNDCONSTRUCTPLUTC_MSGESUB "Subroutine failed"
96#define TESTNDCONSTRUCTPLUTC_MSGEARG "Error parsing arguments"
97#define TESTNDCONSTRUCTPLUTC_MSGEBAD "Bad argument values"
98#define TESTNDCONSTRUCTPLUTC_MSGEFILE "Could not create output file"
99/** @} */
100
101
102/** \cond DONT_DOXYGEN */
103
104/* Default parameters. */
105
106
107
108#define F0 500.0 /* frequency to build the LUT. */
109#define TCOH 1800.0 /* time baseline of coherent integration. */
110#define DF (1./TCOH) /* frequency resolution. */
111#define ALPHA 0.0
112#define DELTA 0.0
113#define FILEOUT "OutHough.asc" /* file output */
114#define PIXELFACTOR 2
115/* Usage format string. */
116
117#define USAGE "Usage: %s [-d debuglevel] [-o outfile] [-f f0] [-p alpha delta][-s patchSizeX patchSizeY]\n"
118
119/*********************************************************************/
120/* Macros for printing errors & testing subroutines (from Creighton) */
121/*********************************************************************/
122
123#define ERROR( code, msg, statement ) \
124do { \
125 if ( lalDebugLevel & LALERROR ) \
126 XLALPrintError( "Error[0] %d: program %s, file %s, line %d, %s\n" \
127 " %s %s\n", (code), *argv, __FILE__, \
128 __LINE__, "$Id$", statement ? statement : \
129 "", (msg) ); \
130} while (0)
131
132#define INFO( statement ) \
133do { \
134 if ( lalDebugLevel & LALINFO ) \
135 XLALPrintError( "Info[0]: program %s, file %s, line %d, %s\n" \
136 " %s\n", *argv, __FILE__, __LINE__, \
137 "$Id$", (statement) ); \
138} while (0)
139
140#define SUB( func, statusptr ) \
141do { \
142 if ( (func), (statusptr)->statusCode ) { \
143 ERROR( TESTNDCONSTRUCTPLUTC_ESUB, TESTNDCONSTRUCTPLUTC_MSGESUB, \
144 "Function call \"" #func "\" failed:" ); \
145 return TESTNDCONSTRUCTPLUTC_ESUB; \
146 } \
147} while (0)
148/******************************************************************/
149
150/* the Hough Map derivative pixel type */
151typedef CHAR HoughDT;
152
153
154/* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< */
155/* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv------------------------------------ */
156int main( int argc, char *argv[] )
157{
158
159 static LALStatus status; /* LALStatus pointer */
160 static HOUGHptfLUT lut; /* the Look Up Table */
161 static HOUGHPatchGrid patch; /* Patch description */
162 static HOUGHParamPLUT parLut; /* parameters needed to build lut */
163 static HOUGHResolutionPar parRes;
164 static HOUGHSizePar parSize;
165 static HOUGHDemodPar parDem; /* demodulation parameters */
166 /* ------------------------------------------------------- */
167
168 INT8 f0Bin; /* freq. bin to construct LUT */
169 UINT2 xSide, ySide;
170 UINT2 maxNBins, maxNBorders;
171
172 /* the Hough derivative map. The patch containing at most
173 SIDEX*SIDEY pixels */
174 /* HoughDT PHMD[SIDEY][SIDEX+1]; */
175
176 HoughDT *PHMD;
177
178 HoughDT *pointer;
179
180 CHAR *fname = NULL; /* The output filename */
181 FILE *fp = NULL; /* Output file */
182
183 INT4 arg; /* Argument counter */
184 INT4 i, j, k, binPoint; /* Index counter, etc */
185 REAL8 f0, alpha, delta, veloMod;
186 REAL8 patchSizeX, patchSizeY;
187
188 /************************************************************/
189 /* Set up the default parameters. */
190 /************************************************************/
191
192 f0 = F0;
193 f0Bin = F0 * TCOH;
194
195 parRes.f0Bin = f0Bin;
196 parRes.deltaF = DF;
197 parRes.patchSkySizeX = patchSizeX = 1.0 / ( TCOH * F0 * VEPI );
198 parRes.patchSkySizeY = patchSizeY = 1.0 / ( TCOH * F0 * VEPI );
199 parRes.pixelFactor = PIXELFACTOR;
200 parRes.pixErr = PIXERR;
201 parRes.linErr = LINERR;
202 parRes.vTotC = VTOT;
203
204 parDem.deltaF = DF;
205 parDem.skyPatch.alpha = 0.0;
206 parDem.skyPatch.delta = -LAL_PI_2;
207
208
209 alpha = ALPHA;
210 delta = DELTA;
211 veloMod = VTOT;
212
213
214 /********************************************************/
215 /* Parse argument list. i stores the current position. */
216 /********************************************************/
217 arg = 1;
218 while ( arg < argc ) {
219 /* Parse debuglevel option. */
220 if ( !strcmp( argv[arg], "-d" ) ) {
221 if ( argc > arg + 1 ) {
222 arg++;
223 } else {
225 XLALPrintError( USAGE, *argv );
227 }
228 }
229 /* Parse output file option. */
230 else if ( !strcmp( argv[arg], "-o" ) ) {
231 if ( argc > arg + 1 ) {
232 arg++;
233 fname = argv[arg++];
234 } else {
236 XLALPrintError( USAGE, *argv );
238 }
239 }
240 /* Parse frequency option. */
241 else if ( !strcmp( argv[arg], "-f" ) ) {
242 if ( argc > arg + 1 ) {
243 arg++;
244 f0 = atof( argv[arg++] );
245 f0Bin = f0 * TCOH;
246 parRes.f0Bin = f0Bin;
247 } else {
249 XLALPrintError( USAGE, *argv );
251 }
252 }
253 /* Parse velocity position options. */
254 else if ( !strcmp( argv[arg], "-p" ) ) {
255 if ( argc > arg + 2 ) {
256 arg++;
257 alpha = atof( argv[arg++] );
258 delta = atof( argv[arg++] );
259 } else {
261 XLALPrintError( USAGE, *argv );
263 }
264 }
265 /* Parse patch size option. */
266 else if ( !strcmp( argv[arg], "-s" ) ) {
267 if ( argc > arg + 2 ) {
268 arg++;
269 parRes.patchSkySizeX = patchSizeX = atof( argv[arg++] );
270 parRes.patchSkySizeY = patchSizeY = atof( argv[arg++] );
271 } else {
273 XLALPrintError( USAGE, *argv );
275 }
276 }
277 /* Unrecognized option. */
278 else {
280 XLALPrintError( USAGE, *argv );
282 }
283 } /* End of argument parsing loop. */
284 /******************************************************************/
285
286 if ( f0 < 0 ) {
288 XLALPrintError( USAGE, *argv );
290 }
291
292 /******************************************************************/
293 /* create patch grid */
294 /******************************************************************/
295
296 SUB( LALHOUGHComputeNDSizePar( &status, &parSize, &parRes ), &status );
297
298 xSide = parSize.xSide;
299 ySide = parSize.ySide;
300 maxNBins = parSize.maxNBins;
301 maxNBorders = parSize.maxNBorders;
302
303 /* allocate memory based on xSide and ySide */
304 patch.xSide = xSide;
305 patch.ySide = ySide;
306
307 patch.xCoor = NULL;
308 patch.yCoor = NULL;
309 patch.xCoor = ( REAL8 * )LALMalloc( xSide * sizeof( REAL8 ) );
310 patch.yCoor = ( REAL8 * )LALMalloc( ySide * sizeof( REAL8 ) );
311
312 SUB( LALHOUGHFillPatchGrid( &status, &patch, &parSize ), &status );
313
314
315 /******************************************************************/
316 /* memory allocation again and settings */
317 /******************************************************************/
318
319 lut.maxNBins = maxNBins;
320 lut.maxNBorders = maxNBorders;
321 lut.border =
322 ( HOUGHBorder * )LALMalloc( maxNBorders * sizeof( HOUGHBorder ) );
323 lut.bin =
324 ( HOUGHBin2Border * )LALMalloc( maxNBins * sizeof( HOUGHBin2Border ) );
325
326 PHMD = ( HoughDT * )LALMalloc( ( xSide + 1 ) * ySide * sizeof( HoughDT ) );
327
328 for ( i = 0; i < maxNBorders; ++i ) {
329 lut.border[i].ySide = ySide;
330 lut.border[i].xPixel = ( COORType * )LALMalloc( ySide * sizeof( COORType ) );
331 }
332
333
334 /******************************************************************/
335 /* Case: no spins, patch at south pole */
336 /******************************************************************/
337
338 parDem.veloC.x = veloMod * cos( delta ) * cos( alpha );
339 parDem.veloC.y = veloMod * cos( delta ) * sin( alpha );
340 parDem.veloC.z = veloMod * sin( delta );
341
342 /*parDem.positC.x = 0.0;
343 parDem.positC.y = 0.0;
344 parDem.positC.z = 0.0;*/
345 parDem.timeDiff = 0.0;
346 parDem.spin.length = 0;
347 parDem.spin.data = NULL;
348
349 /******************************************************************/
350 /* calculate parameters needed for buiding the LUT */
351 /******************************************************************/
352 SUB( LALNDHOUGHParamPLUT( &status, &parLut, &parSize, &parDem ), &status );
353
354 /******************************************************************/
355 /* build the LUT */
356 /******************************************************************/
357 SUB( LALHOUGHConstructPLUT( &status, &lut, &patch, &parLut ), &status );
358
359 /******************************************************************/
360 /* construct PHMD[i][j] accordingly */
361 /*******************************************************/
362
363 /* initializing output space */
364 pointer = &( PHMD[0] );
365 for ( k = 0; k < ( xSide + 1 ) * ySide; ++k ) {
366 *pointer = 0;
367 ++pointer;
368 }
369
370 binPoint = lut.iniBin + lut.nBin;
371
372 /* just as a test examples */
373
374 for ( k = lut.iniBin; k < binPoint ; k += 2 ) {
375 /* this should be for plotting each two bins!
376 so one can see all border with +1 or -1 */
377
378 /* for( k= -2; k < 3 ; k+=2 ){ */
379 /* now just 3 peaks selected -2,0,+2 */
380
381
382 INT2 lb1, rb1, lb2, rb2; /* The border index. If zero means that */
383 /* it does not intersect the patch, or nothing to clip */
384 INT2 max1, min1, max2, min2;
385 INT2 xindex;
386
387 /* conversion of "peak index" (separation to the f0 frequency)
388 into the bin in the LUT */
389
390 i = k;
391 if ( k < 0 ) {
392 i = binPoint - 1 - k;
393 }
394
395 /*reading the bin information */
396
397 lb1 = lut.bin[i].leftB1;
398 rb1 = lut.bin[i].rightB1;
399 lb2 = lut.bin[i].leftB2;
400 rb2 = lut.bin[i].rightB2;
401
402 max1 = lut.bin[i].piece1max;
403 min1 = lut.bin[i].piece1min;
404 max2 = lut.bin[i].piece2max;
405 min2 = lut.bin[i].piece2min;
406
407 /* drawing the annuli borders */
408 if ( lb1 ) {
409 for ( j = lut.border[lb1].yLower;
410 j <= lut.border[lb1].yUpper; j++ ) {
411 xindex = lut.border[lb1].xPixel[j];
412 PHMD[j * ( xSide + 1 ) + xindex] += 1;
413 }
414 }
415 if ( lb2 ) {
416 for ( j = lut.border[lb2].yLower;
417 j <= lut.border[lb2].yUpper; j++ ) {
418 xindex = lut.border[lb2].xPixel[j];
419 PHMD[j * ( xSide + 1 ) + xindex] += 1;
420 }
421 }
422 if ( rb1 ) {
423 for ( j = lut.border[rb1].yLower;
424 j <= lut.border[rb1].yUpper; j++ ) {
425 xindex = lut.border[rb1].xPixel[j];
426 PHMD[j * ( xSide + 1 ) + xindex] -= 1;
427 }
428 }
429 if ( rb2 ) {
430 for ( j = lut.border[rb2].yLower;
431 j <= lut.border[rb2].yUpper; j++ ) {
432 xindex = lut.border[rb2].xPixel[j];
433 PHMD[j * ( xSide + 1 ) + xindex] -= 1;
434 }
435 }
436
437 /* correcting border effects */
438
439 /* note: if max1<min1, nothing should be done! */
440 for ( j = min1; j <= max1; ++j ) {
441 PHMD[j * ( xSide + 1 )] += 1;
442 }
443
444 for ( j = min2; j <= max2; ++j ) {
445 PHMD[j * ( xSide + 1 )] += 1;
446 }
447
448 }
449
450
451 /*******************************************************/
452 /* printing the results into a particular file */
453 /* if the -o option was given, or into FILEOUT */
454 /*******************************************************/
455
456 if ( fname ) {
457 fp = fopen( fname, "w" );
458 } else {
459 fp = fopen( FILEOUT, "w" );
460 }
461
462 if ( !fp ) {
465 }
466
467
468 for ( j = ySide - 1; j >= 0; --j ) {
469 for ( i = 0; i < xSide; ++i ) {
470 fprintf( fp, " %d", PHMD[j * ( xSide + 1 ) + i] );
471 fflush( fp );
472 }
473 fprintf( fp, " \n" );
474 fflush( fp );
475 }
476
477 fclose( fp );
478
479 /******************************************************************/
480 /* Free memory and exit */
481 /******************************************************************/
482
483 for ( i = 0; i < maxNBorders; ++i ) {
484 LALFree( lut.border[i].xPixel );
485 }
486
487 LALFree( lut.border );
488 LALFree( lut.bin );
489
490 LALFree( PHMD );
491
492 LALFree( patch.xCoor );
493 LALFree( patch.yCoor );
494
496
499}
500
501/* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< */
502
503/** \endcond */
#define SUB(func, statusptr)
#define ERROR(code, msg, statement)
#define INFO(statement)
#define DELTA
#define ALPHA
int j
int k
void LALCheckMemoryLeaks(void)
#define LALMalloc(n)
#define LALFree(p)
static double double delta
#define TESTNDCONSTRUCTPLUTC_MSGEFILE
#define TESTNDCONSTRUCTPLUTC_EFILE
#define TESTNDCONSTRUCTPLUTC_EARG
#define TESTNDCONSTRUCTPLUTC_MSGEARG
#define TESTNDCONSTRUCTPLUTC_EBAD
#define TESTNDCONSTRUCTPLUTC_MSGENORM
#define TESTNDCONSTRUCTPLUTC_ENORM
#define TESTNDCONSTRUCTPLUTC_MSGEBAD
#define fprintf
int main(int argc, char **argv)
#define LAL_PI_2
double REAL8
int16_t INT2
int64_t INT8
uint16_t UINT2
char CHAR
int32_t INT4
void LALNDHOUGHParamPLUT(LALStatus *status, HOUGHParamPLUT *out, HOUGHSizePar *sizePar, HOUGHDemodPar *par)
Definition: NDParamPLUT.c:72
#define VTOT
Total detector velocity/c TO BE CHANGED DEPENDING ON DETECTOR.
Definition: LUT.h:207
#define PIXERR
Maximum `‘error’' (as a fraction of the width of the thinnest annulus) which allows to consider two b...
Definition: LUT.h:195
#define LINERR
Maximum `‘error’' (as a fraction of the width of the thinnest annulus) which allows to represent a ci...
Definition: LUT.h:188
void LALHOUGHComputeNDSizePar(LALStatus *status, HOUGHSizePar *out, HOUGHResolutionPar *in)
Definition: PatchGrid.c:204
void LALHOUGHFillPatchGrid(LALStatus *status, HOUGHPatchGrid *out, HOUGHSizePar *par)
Definition: PatchGrid.c:331
#define VEPI
Earth v_epicycle/c TO BE CHANGED DEPENDING ON DETECTOR.
Definition: LUT.h:202
void LALHOUGHConstructPLUT(LALStatus *status, HOUGHptfLUT *lut, HOUGHPatchGrid *patch, HOUGHParamPLUT *par)
INT2 COORType
To be changed to {INT2 COORType} if the number of pixels in the x-direction exceeds 255.
Definition: LUT.h:218
REAL8 HoughDT
Hough Map derivative pixel type.
Definition: PHMD.h:121
int XLALPrintError(const char *fmt,...) _LAL_GCC_PRINTF_FORMAT_(1
#define F0
#define FILEOUT
#define PIXELFACTOR
double alpha
This structure stores the border indexes corresponding to one frequency bin plus the corrections to b...
Definition: LUT.h:234
INT2 rightB2
Border index to be used (stop-border ‘ ’)
Definition: LUT.h:238
INT2 leftB1
Border index to be used (start-border ‘ ’)
Definition: LUT.h:235
INT2 piece1min
If piece1min piece1max no corrections should be added.
Definition: LUT.h:240
INT2 piece2max
Interval limits of the (second piece) correction to the first column.
Definition: LUT.h:241
INT2 rightB1
Border index to be used (stop-border ‘ ’)
Definition: LUT.h:236
INT2 piece1max
Interval limits of the (first piece) correction to the first column.
Definition: LUT.h:239
INT2 leftB2
Border index to be used (start-border ‘ ’)
Definition: LUT.h:237
INT2 piece2min
If piece2min piece2max no corrections should be added.
Definition: LUT.h:242
This structure stores the border of a circle clipped on the projected plane.
Definition: LUT.h:221
COORType * xPixel
x pixel index to be marked
Definition: LUT.h:226
INT4 yLower
lower y pixel affected by this border and yUpper<yLower or yUpper<0 are possible
Definition: LUT.h:223
UINT2 ySide
length of xPixel
Definition: LUT.h:225
INT4 yUpper
upper y pixel affected by this border
Definition: LUT.h:222
Demodulation parameters needed for the Hough transform; all coordinates are assumed to be with respec...
Definition: LUT.h:353
REAL8 deltaF
Frequency resolution: df=1/TCOH
Definition: LUT.h:354
REAL8 timeDiff
: time difference
Definition: LUT.h:358
REAL8Cart3Coor veloC
(x,y,z): Relative detector velocity
Definition: LUT.h:356
REAL8Vector spin
Spin down information.
Definition: LUT.h:359
REAL8UnitPolarCoor skyPatch
(alpha, delta): position of the center of the patch
Definition: LUT.h:355
Parameters needed to construct the partial look up table.
Definition: LUT.h:333
This structure stores patch-frequency grid information.
Definition: LUT.h:264
UINT2 ySide
Real number of pixels in the y-direction (in the projected plane).
Definition: LUT.h:275
REAL8 * xCoor
Coordinates of the pixel centers.
Definition: LUT.h:271
UINT2 xSide
Real number of pixels in the x direction (in the projected plane); it should be less than or equal to...
Definition: LUT.h:270
REAL8 * yCoor
Coordinates of the pixel centers.
Definition: LUT.h:278
parameters needed for gridding the patch
Definition: LUT.h:282
REAL8 deltaF
Frequency resolution: df=1/TCOH
Definition: LUT.h:284
REAL8 pixErr
for validity of LUT as PIXERR
Definition: LUT.h:288
INT8 f0Bin
Frequency bin at which construct the grid.
Definition: LUT.h:283
REAL8 patchSkySizeY
Patch size in radians along y-axis.
Definition: LUT.h:286
REAL8 patchSkySizeX
Patch size in radians along x-axis.
Definition: LUT.h:285
REAL8 pixelFactor
number of pixel that fit in the thinnest annulus
Definition: LUT.h:287
REAL8 vTotC
estimate value of v-total/C as VTOT
Definition: LUT.h:290
REAL8 linErr
as LINERR circle ->line
Definition: LUT.h:289
required for constructing patch
Definition: LUT.h:294
UINT2 maxNBorders
maximum number of borders affecting the patch; for memory allocation
Definition: LUT.h:302
UINT2 maxNBins
maximum number of bins affecting the patch; for memory allocation
Definition: LUT.h:301
UINT2 ySide
number of pixels in the y direction
Definition: LUT.h:300
UINT2 xSide
number of pixels in the x direction (projected plane)
Definition: LUT.h:299
This structure stores the patch-time-frequency look up table.
Definition: LUT.h:246
UINT2 maxNBins
Maximum number of bins affecting the patch (for memory allocation purposes)
Definition: LUT.h:256
INT4 nBin
Exact number of bins affecting the patch.
Definition: LUT.h:254
HOUGHBorder * border
The annulus borders.
Definition: LUT.h:258
INT4 iniBin
First bin affecting the patch with respect to f0.
Definition: LUT.h:253
HOUGHBin2Border * bin
Bin to border correspondence.
Definition: LUT.h:259
UINT2 maxNBorders
Maximum number of borders affecting the patch (for memory allocation purposes)
Definition: LUT.h:257
REAL8 y
Definition: LUT.h:310
REAL8 x
Definition: LUT.h:309
REAL8 z
Definition: LUT.h:311
REAL8 alpha
any value
Definition: LUT.h:328
REAL8 delta
In the interval [ ].
Definition: LUT.h:329
REAL8 * data