LALPulsar 7.1.1.1-eeff03c
StackSlideFstat.c
Go to the documentation of this file.
1/*
2 * Copyright (C) 2005 Gregory Mendell
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 * \author Gregory Mendell
22 * \file StackSlideFstat.c
23 * \ingroup lalpulsar_bin_HoughFstat
24 * \brief Module with functions that StackSlide a vector of Fstat values or any REAL8FrequencySeriesVector.
25 */
26
27/* define preprocessor flags: */
28/* #define PRINT_STACKSLIDE_BINOFFSETS */
29/* Uncomment the next flag when using a threshold to only accept local maximum that stand high enough above neighboring bins */
30/* #define INCLUDE_EXTRA_STACKSLIDE_THREHOLDCHECK */
31/* THRESHOLDFRACSS is the fraction of power that must be in the local maxima when INCLUDE_EXTRA_STACKSLIDE_THREHOLDCHECK is defined */
32#define THRESHOLDFRACSS 0.667
33
34#include "StackSlideFstat.h"
35
36#define TRUE (1==1)
37#define FALSE (1==0)
38
39#define SSMAX(x,y) ( (x) > (y) ? (x) : (y) )
40#define SSMIN(x,y) ( (x) < (y) ? (x) : (y) )
41
42#define BLOCKSIZE_REALLOC 50
43
44static int smallerStackSlide( const void *a, const void *b )
45{
47 a1 = *( ( const SemiCohCandidate * )a );
48 b1 = *( ( const SemiCohCandidate * )b );
49
50 if ( a1.significance < b1.significance ) {
51 return ( 1 );
52 } else if ( a1.significance > b1.significance ) {
53 return ( -1 );
54 } else {
55 return ( 0 );
56 }
57}
58
59/**
60 * Function StackSlides a vector of Fstat frequency series or any REAL8FrequencySeriesVector.
61 */
62void StackSlideVecF( LALStatus *status, /**< pointer to LALStatus structure */
63 SemiCohCandidateList *out, /**< output candidates */
64 REAL4FrequencySeriesVector *vecF, /**< vector with Fstat values or any REAL8FrequencySeriesVector */
65 SemiCoherentParams *params ) /**< input parameters */
66{
67 REAL8FrequencySeries stackslideSum; /* The output of StackSliding the vecF values */
68
69 REAL8 *pstackslideData; /* temporary pointer */
70 REAL4 *pFVecData; /* temporary pointer */
71
72 REAL8 pixelFactor;
73 REAL8 alphaStart, alphaEnd, dAlpha, thisAlpha;
74 REAL8 deltaStart, deltaEnd, dDelta, thisDelta;
75 REAL8 fdotStart, dfdot, thisFdot;
76 UINT4 ialpha, nalpha, idelta, ndelta, ifdot, nfdot;
77 UINT2 numSpindown;
78
79 /* INT4 fBinIni, fBinFin, nSearchBins, nSearchBinsm1; */
80 INT4 fBinIni, fBinFin, nSearchBins, nStackBinsm1; /* 12/14/06 gm; now account for extra bins in stack */
81 INT4 j, k, nStacks, offset, offsetj;
82 INT4 extraBinsFstat, halfExtraBinsFstat; /* 12/14/06 gm; new parameter and half this parameter */
83 UINT4 uk;
84 REAL8 f0, deltaF, tEffSTK, fmid, alpha, delta;
85 /* REAL8 patchSizeX, patchSizeY, f1jump; */ /* 12/14/06 gm; f1jump no longer needed */
86 REAL8 patchSizeX, patchSizeY;
88 REAL8 fdot, refTime;
89 LIGOTimeGPS refTimeGPS;
90 LIGOTimeGPSVector *tsMid;
91 REAL8Vector *timeDiffV = NULL;
92 REAL8Vector *weightsV = NULL;
93 REAL8 thisWeight;
94 REAL8 threshold;
95
96 toplist_t *stackslideToplist;
97
98 PulsarDopplerParams outputPoint, outputPointUnc, inputPoint;
99
100 /* Add error checking here: */
102
105
106 /* create toplist of candidates */
107 if ( params->useToplist ) {
108 create_toplist( &stackslideToplist, out->length, sizeof( SemiCohCandidate ), smallerStackSlide );
109 }
110
111 /* copy some params to local variables */
112 pixelFactor = params->pixelFactor;
113 nStacks = vecF->length;
114 extraBinsFstat = ( INT4 )params->extraBinsFstat; /* 12/14/06 gm; new parameter */
115 halfExtraBinsFstat = extraBinsFstat / 2; /* 12/14/06 gm; half the new parameter */
116 nSearchBins = vecF->data->data->length;
117 nSearchBins -= extraBinsFstat; /* 12/14/06 gm; subtract extra bins */
118 /* nSearchBinsm1 = nSearchBins - 1; */
119 nStackBinsm1 = vecF->data->data->length - 1; /* 12/14/06 gm; need to know this for the entire stack */
120 deltaF = vecF->data[0].deltaF;
121 tEffSTK = 1.0 / deltaF; /* Effective time baseline a stack */
122 /* fBinIni = floor( f0*tEffSTK + 0.5);
123 fBinFin = fBinIni + nSearchBins - 1; */
124 fBinIni = floor( vecF->data[0].f0 * tEffSTK + 0.5 ); /* 12/14/06 gm; defined on the full stack band */
125 fBinFin = fBinIni + vecF->data->data->length - 1; /* 12/14/06 gm; defined on the full stack band */
126 /* fmid = vecF->data[0].f0 + ((REAL8)(nSearchBins/2))*deltaF;*/
127 /* f0 = vecF->data[0].f0; */
128 fmid = ( ( REAL8 )( ( fBinIni + fBinFin ) / 2 ) ) * deltaF; /* 12/14/06 gm; defined on the full stack band */
129 f0 = ( ( REAL8 )( fBinIni + halfExtraBinsFstat ) ) * deltaF; /* 12/14/06 gm; start frequency of stackslide output */
130 weightsV = params->weightsV; /* Needs to be NULL or normalized stack weights */
131 threshold = params->threshold;
132
133 numSpindown = 1; /* Current search is over 1 spindown value, df/dt */
134 nfdot = params->nfdot; /* Number of df/dt values to search over */
135 alpha = params->alpha;
136 delta = params->delta;
137 vel = params->vel;
138 fdot = params->fdot;
139 tsMid = params->tsMid;
140 refTimeGPS = params->refTime;
141 refTime = XLALGPSGetREAL8( &refTimeGPS );
142
143 /* allocate memory for StackSlide of Fvec values */
144 stackslideSum.epoch = vecF->data[0].epoch; /* just use the epoch of the first stack */
145 stackslideSum.deltaF = deltaF;
146 stackslideSum.f0 = f0;
147 stackslideSum.data = ( REAL8Sequence * )LALCalloc( 1, sizeof( REAL8Sequence ) );
148 stackslideSum.data->length = nSearchBins;
149 stackslideSum.data->data = ( REAL8 * )LALCalloc( 1, nSearchBins * sizeof( REAL8 ) );
150 pstackslideData = stackslideSum.data->data;
151
152 /* set patch size */
153 /* this is supposed to be the "educated guess"
154 delta theta = 1.0 / (Tcoh * f0 * Vepi )
155 where Tcoh is coherent time baseline,
156 f0 is frequency and Vepi is rotational velocity
157 of detector */
158 patchSizeX = params->patchSizeX;
159 patchSizeY = params->patchSizeY;
160 /* if patchsize is negative, then set default value */
161 if ( patchSizeX < 0 ) {
162 patchSizeX = 0.5 / ( fBinFin * VEPI );
163 }
164
165 if ( patchSizeY < 0 ) {
166 patchSizeY = 0.5 / ( fBinFin * VEPI );
167 }
168
169 LogPrintf( LOG_DEBUG, "StackSlide patchsize is %f rad x %f rad\n", patchSizeX, patchSizeY );
170
171 /* set up sky grid */
172 alphaStart = alpha - patchSizeX / 2.0;
173 alphaEnd = alpha + patchSizeX / 2.0;
174 deltaStart = delta + patchSizeY / 2.0;
175 deltaEnd = delta + patchSizeY / 2.0;
176 dDelta = 1.0 / ( VTOT * pixelFactor * fBinFin );
177 ndelta = floor( ( deltaEnd - deltaStart ) / dDelta + 0.5 );
178 if ( ndelta < 1 ) {
179 ndelta = 1; /* do at least one value of delta below */
180 }
181 /* Will compute dAlpha and nalpha for each delta in the loops below */
182
183 /* calculate time differences from start of observation time */
184 TRY( LALDCreateVector( status->statusPtr, &timeDiffV, nStacks ), status );
185
186 for ( k = 0; k < nStacks; k++ ) {
187 REAL8 tMidStack;
188 tMidStack = XLALGPSGetREAL8( tsMid->data + k );
189 timeDiffV->data[k] = tMidStack - refTime;
190 }
191
192 /* if there are residual spindowns */
193 /* f1jump = 1.0 / timeDiffV->data[nStacks - 1]; */ /* resolution in residual fdot */
194 /* dfdot = deltaF * f1jump; */
195 dfdot = params->dfdot; /* 12/14/06 gm; dfdot now a user parameter; default is df1dot/nStacks1; not nfdot set above. */
196 fdotStart = fdot - dfdot * ( REAL8 )( nfdot / 2 );
197 /* unused: fdotEnd = fdot + dfdot*(REAL8)(nfdot/2); */
198 if ( nfdot < 1 ) {
199 nfdot = 1; /* do at least one value of fdot below */
200 }
201
202 /* The input parameter space point */
203 inputPoint.refTime = refTimeGPS;
204 inputPoint.asini = 0 /* isolated pulsar */;
205 XLAL_INIT_MEM( inputPoint.fkdot );
206 inputPoint.fkdot[0] = fmid;
207 inputPoint.fkdot[1] = fdot;
208 inputPoint.Alpha = alpha;
209 inputPoint.Delta = delta;
210
211 /* Values for output parameter space point that do not change */
212 outputPoint.refTime = refTimeGPS;
213 outputPoint.asini = 0 /* isolated pulsar */;
214 XLAL_INIT_MEM( outputPoint.fkdot );
215
216 /* uncertainties in the output parameter space point */
217 outputPointUnc.refTime = refTimeGPS;
218 outputPointUnc.asini = 0 /* isolated pulsar */;
219 XLAL_INIT_MEM( outputPointUnc.fkdot );
220 outputPointUnc.fkdot[0] = deltaF;
221 outputPointUnc.fkdot[1] = dfdot;
222 outputPointUnc.Delta = dDelta;
223
224 /* Let the loops over sky position and spindown values begin! */
225
226 /* loop over delta */
227 for ( idelta = 0; idelta < ndelta; idelta++ ) {
228
229 thisDelta = deltaStart + ( ( REAL8 )idelta ) * dDelta;
230
231 if ( ( thisDelta < LAL_PI_2 ) && ( thisDelta > -1.0 * LAL_PI_2 ) ) {
232 /* Find the spacing in alpha for thisDelta and adjust this to */
233 /* fit evenly spaced points between alphaEnd and alphaStart */
234 dAlpha = dDelta / cos( thisDelta );
235 nalpha = ceil( ( alphaEnd - alphaStart ) / dAlpha );
236 if ( nalpha < 1 ) {
237 nalpha = 1; /* do at least one value of alpha */
238 }
239 dAlpha = ( alphaEnd - alphaStart ) / ( ( REAL8 )nalpha );
240 } else {
241 dAlpha = 0.0;
242 nalpha = 1;
243 }
244 outputPointUnc.Alpha = dAlpha;
245
246 /* loop over alpha */
247 for ( ialpha = 0; ialpha < nalpha; ialpha++ ) {
248 thisAlpha = alphaStart + ( ( REAL8 )ialpha ) * dAlpha;
249
250 /* loop over fdot */
251 for ( ifdot = 0; ifdot < nfdot; ifdot++ ) {
252 thisFdot = fdotStart + ( ( REAL8 )ifdot ) * dfdot;
253
254 /* for thisAlpha, thisDelta, and thisFdot, compute the StackSlide Sum (average) of the Fvecs */
255 outputPoint.fkdot[0] = fmid; /* This will get changed by solving the Master Equation */
256 outputPoint.fkdot[1] = thisFdot;
257 outputPoint.Alpha = thisAlpha;
258 outputPoint.Delta = thisDelta;
259
260 /* loop over each stack */
261 for ( k = 0; k < nStacks; k++ ) {
262
263 /* COMPUTE f(t) using the master equation and find bin offset for */
264 /* the frequency in the middle of the band, fmid. */
265 /* ASSUMES same offset for entire band, assumed to be very narrow. */
266 TRY( FindFreqFromMasterEquation( status->statusPtr, &outputPoint, &inputPoint, ( vel->data + 3 * k ), timeDiffV->data[k], numSpindown ), status );
267
268 offset = floor( ( outputPoint.fkdot[0] - fmid ) * tEffSTK + 0.5 );
269
270#ifdef PRINT_STACKSLIDE_BINOFFSETS
271 LogPrintf( LOG_DETAIL, "offset = %i for stack %i.\n", offset, k );
272#endif
273
274 pFVecData = vecF->data[k].data->data;
275 /* loop over frequency bins */
276 if ( weightsV == NULL ) {
277 /* WITHOUT WEIGHTS */
278 for ( j = 0; j < nSearchBins; j++ ) {
279 /* offsetj = j + offset; */
280 offsetj = j + halfExtraBinsFstat + offset; /* 12/14/06 gm; account for extra bins */
281 if ( offsetj < 0 ) {
282 j = 0; /* 12/14/06 gm; do not go off the end of the stack */
283 }
284 /* if (offsetj > nSearchBinsm1) j = nSearchBinsm1; */
285 if ( offsetj > nStackBinsm1 ) {
286 j = nStackBinsm1; /* 12/14/06 gm; do not go off the end of the stack */
287 }
288
289 if ( k == 0 ) {
290 pstackslideData[j] = pFVecData[offsetj];
291 } else {
292 pstackslideData[j] += pFVecData[offsetj];
293 } /* END if (k == 0) */
294 } /* END for(j=0; j<nSearchBins; j++) */
295 } else {
296 /* WITH WEIGHTS */
297 thisWeight = weightsV->data[k];
298 for ( j = 0; j < nSearchBins; j++ ) {
299 /* offsetj = j + offset; */
300 offsetj = j + halfExtraBinsFstat + offset; /* 12/14/06 gm; account for extra bins */
301 if ( offsetj < 0 ) {
302 j = 0; /* 12/14/06 gm; do not go off the end of the stack */
303 }
304 /* if (offsetj > nSearchBinsm1) j = nSearchBinsm1; */
305 if ( offsetj > nStackBinsm1 ) {
306 j = nStackBinsm1; /* 12/14/06 gm; do not go off the end of the stack */
307 }
308
309 if ( k == 0 ) {
310 pstackslideData[j] = thisWeight * pFVecData[offsetj];
311 } else {
312 pstackslideData[j] += thisWeight * pFVecData[offsetj];
313 } /* END if (k == 0) */
314 } /* END for(j=0; j<nSearchBins; j++) */
315 } /* END if (weightsV == NULL) */
316
317 } /* END for (k=0; k<nStacks; k++) */
318
319 /* TO DO: get candidates */
320 /* 12/18/06 gm; Even if using a toplist, get candidate list based on threshold if thresold > 0.0 */
321 if ( params->useToplist && threshold <= 0.0 ) {
322 TRY( GetStackSlideCandidates_toplist( status->statusPtr, stackslideToplist, &stackslideSum, &outputPoint, &outputPointUnc ), status );
323 } else {
324 TRY( GetStackSlideCandidates_threshold( status->statusPtr, out, &stackslideSum, &outputPoint, &outputPointUnc, threshold ), status );
325 }
326
327 } /* END for (ifdot = 0; ifdot<nfdot; ifdot++) */
328
329 } /* END for (ialpha = 0; ialpha<nalpha; ialpha++) */
330
331 } /* END for (idelta = 0; idelta<ndelta; idelta++) */
332
333 /* free remaining memory */
334 TRY( LALDDestroyVector( status->statusPtr, &timeDiffV ), status );
335
336 LALFree( stackslideSum.data->data );
337 LALFree( stackslideSum.data );
338
339 /* copy toplist candidates to output structure if necessary */
340 if ( params->useToplist && threshold <= 0.0 ) {
341 for ( uk = 0; uk < stackslideToplist->elems; uk++ ) {
342 out->list[uk] = *( ( SemiCohCandidate * )( toplist_elem( stackslideToplist, uk ) ) );
343 }
344 out->nCandidates = stackslideToplist->elems;
345 free_toplist( &stackslideToplist );
346 } else if ( params->useToplist ) {
347 /* 12/18/06 gm; Even if using a toplist, get candidate list based on threshold if thresold > 0.0 */
348 /* First put candidates into the top list: */
349 for ( uk = 0; uk < ( UINT4 )out->nCandidates; uk++ ) {
350 insert_into_toplist( stackslideToplist, out->list + uk );
351 }
352 /* Now put back into the output list: */
353 for ( uk = 0; uk < stackslideToplist->elems; uk++ ) {
354 out->list[uk] = *( ( SemiCohCandidate * )( toplist_elem( stackslideToplist, uk ) ) );
355 }
356 out->nCandidates = stackslideToplist->elems;
357 free_toplist( &stackslideToplist );
358 }
359
361 RETURN( status );
362
363} /* END StackSlideVecF */
364
365
366
367
368/**
369 * Function StackSlides a vector of Fstat frequency series or any REAL8FrequencySeriesVector.
370 * This is similar to StackSlideVecF but adapted to calculate the hough number count and to be as
371 * similar to Hough as possible but without using the hough look-up-tables.
372 */
373void StackSlideVecF_HoughMode( LALStatus *status, /**< pointer to LALStatus structure */
374 SemiCohCandidateList *out, /**< output candidates */
375 REAL4FrequencySeriesVector *vecF, /**< vector with Fstat values or any REAL8FrequencySeriesVector */
376 SemiCoherentParams *params ) /**< input parameters */
377{
378
379 UINT2 xSide, ySide;
380 INT8 fBinIni, fBinFin, fBin;
381 INT4 nfdot;
382 UINT4 k, nStacks ;
383 REAL8 deltaF, dfdot, alpha, delta;
384 REAL8 patchSizeX, patchSizeY;
385 REAL8 fdot, refTime;
386 LIGOTimeGPS refTimeGPS;
387 LIGOTimeGPSVector *tsMid;
388 REAL8Vector *timeDiffV = NULL;
389
390 /* a minimal number of hough structs needed */
391 HOUGHMapTotal ht;
392 HOUGHDemodPar parDem; /* demodulation parameters */
393 HOUGHSizePar parSize;
394 HOUGHResolutionPar parRes; /* patch grid information */
395 HOUGHPatchGrid patch; /* Patch description */
396 INT4 nfSize;
397
398 toplist_t *houghToplist;
399 UINT8FrequencyIndexVector freqInd; /* for trajectory in time-freq plane */
400
403
404
405 /* check input is not null */
406 if ( out == NULL ) {
408 }
409 if ( out->length == 0 ) {
411 }
412 if ( out->list == NULL ) {
414 }
415 if ( vecF == NULL ) {
417 }
418 if ( vecF->length == 0 ) {
420 }
421 if ( vecF->data == NULL ) {
423 }
424 if ( params == NULL ) {
426 }
427
428
429
430 /* copy some parameters from peakgram vector */
431 deltaF = vecF->data->deltaF;
432 nStacks = vecF->length;
433 fBinIni = ( UINT4 )( vecF->data[0].f0 / deltaF + 0.5 );
434 fBinFin = fBinIni + vecF->data->data->length - 1;
435
436
437 /* copy some params to local variables */
438 nfdot = params->nfdot;
439 dfdot = params->dfdot;
440 alpha = params->alpha;
441 delta = params->delta;
442 fdot = params->fdot;
443 tsMid = params->tsMid;
444 refTimeGPS = params->refTime;
445 refTime = XLALGPSGetREAL8( &refTimeGPS );
446
447 /* set patch size */
448 /* this is supposed to be the "educated guess"
449 delta theta = 1.0 / (Tcoh * f0 * Vepi )
450 where Tcoh is coherent time baseline,
451 f0 is frequency and Vepi is rotational velocity
452 of detector */
453 patchSizeX = params->patchSizeX;
454 patchSizeY = params->patchSizeY;
455
456 /* calculate time differences from start of observation time for each stack*/
457 TRY( LALDCreateVector( status->statusPtr, &timeDiffV, nStacks ), status );
458
459 for ( k = 0; k < nStacks; k++ ) {
460 REAL8 tMidStack;
461 tMidStack = XLALGPSGetREAL8( tsMid->data + k );
462 timeDiffV->data[k] = tMidStack - refTime;
463 }
464
465 /* residual spindown trajectory */
466 freqInd.deltaF = deltaF;
467 freqInd.length = nStacks;
468 freqInd.data = NULL;
469 freqInd.data = ( UINT8 * )LALCalloc( 1, nStacks * sizeof( UINT8 ) );
470 if ( freqInd.data == NULL ) {
472 }
473
474
475 /* resolution in space of residual spindowns */
476 ht.dFdot.length = 1;
477 ht.dFdot.data = NULL;
478 ht.dFdot.data = ( REAL8 * )LALCalloc( 1, ht.dFdot.length * sizeof( REAL8 ) );
479 if ( ht.dFdot.data == NULL ) {
481 }
482
483 /* the residual spindowns */
484 ht.spinRes.length = 1;
485 ht.spinRes.data = NULL;
486 ht.spinRes.data = ( REAL8 * )LALCalloc( 1, ht.spinRes.length * sizeof( REAL8 ) );
487 if ( ht.spinRes.data == NULL ) {
489 }
490
491 /* the residual spindowns */
492 ht.spinDem.length = 1;
493 ht.spinDem.data = NULL;
494 ht.spinDem.data = ( REAL8 * )LALCalloc( 1, ht.spinRes.length * sizeof( REAL8 ) );
495 if ( ht.spinDem.data == NULL ) {
497 }
498
499 /* the demodulation params */
500 parDem.deltaF = deltaF;
501 parDem.skyPatch.alpha = alpha;
502 parDem.skyPatch.delta = delta;
503 parDem.spin.length = 1;
504 parDem.spin.data = NULL;
505 parDem.spin.data = ( REAL8 * )LALCalloc( 1, sizeof( REAL8 ) );
506 if ( parDem.spin.data == NULL ) {
508 }
509 parDem.spin.data[0] = fdot;
510
511 /* the skygrid resolution params */
512 parRes.deltaF = deltaF;
513 parRes.patchSkySizeX = patchSizeX;
514 parRes.patchSkySizeY = patchSizeY;
515 parRes.pixelFactor = params->pixelFactor;
516 parRes.pixErr = PIXERR;
517 parRes.linErr = LINERR;
518 parRes.vTotC = VTOT;
519
520
521 {
522 REAL8 maxTimeDiff, startTimeDiff, endTimeDiff;
523
524 startTimeDiff = fabs( timeDiffV->data[0] );
525 endTimeDiff = fabs( timeDiffV->data[timeDiffV->length - 1] );
526 maxTimeDiff = SSMAX( startTimeDiff, endTimeDiff );
527
528 /* set number of freq. bins for which LUTs will be calculated */
529 /* this sets the range of residual spindowns values */
530 /* phmdVS.nfSize = 2*nfdotBy2 + 1; */
531 nfSize = 2 * floor( ( nfdot - 1 ) * ( REAL4 )( dfdot * maxTimeDiff / deltaF ) + 0.5f ) + 1;
532 }
533
534 /* adjust fBinIni and fBinFin to take maxNBins into account */
535 /* and make sure that we have fstat values for sufficient number of bins */
536 parRes.f0Bin = fBinIni;
537
538 fBinIni += params->extraBinsFstat;
539 fBinFin -= params->extraBinsFstat;
540 /* this is not very clean -- the Fstat calculation has to know how many extra bins are needed */
541
542 LogPrintf( LOG_DETAIL, "Freq. range analyzed by Hough = [%fHz - %fHz] (%"LAL_INT8_FORMAT" bins)\n",
543 fBinIni * deltaF, fBinFin * deltaF, fBinFin - fBinIni + 1 );
545
546 /* initialise number of candidates -- this means that any previous candidates
547 stored in the list will be lost for all practical purposes*/
548 out->nCandidates = 0;
549
550 /* create toplist of candidates */
551 if ( params->useToplist ) {
552 create_toplist( &houghToplist, out->length, sizeof( SemiCohCandidate ), smallerStackSlide );
553 } else {
554 /* if no toplist then use number of hough maps */
555 INT4 numHmaps = ( fBinFin - fBinIni + 1 ) * nfSize;
556 if ( out->length != numHmaps ) {
557 out->length = numHmaps;
558 out->list = ( SemiCohCandidate * )LALRealloc( out->list, out->length * sizeof( SemiCohCandidate ) );
559 if ( out->list == NULL ) {
561 }
562 }
563 }
564
565 /*------------------ start main Hough calculation ---------------------*/
566
567 /* initialization */
568 fBin = fBinIni; /* initial search bin */
569
570 while ( fBin <= fBinFin ) {
571 INT8 fBinSearch, fBinSearchMax;
572 UINT4 j;
573
574 parRes.f0Bin = fBin;
575 TRY( LALHOUGHComputeSizePar( status->statusPtr, &parSize, &parRes ), status );
576 xSide = parSize.xSide;
577 ySide = parSize.ySide;
578
579 /*------------------ create patch grid at fBin ----------------------*/
580 patch.xSide = xSide;
581 patch.ySide = ySide;
582 patch.xCoor = NULL;
583 patch.yCoor = NULL;
584 patch.xCoor = ( REAL8 * )LALCalloc( 1, xSide * sizeof( REAL8 ) );
585 if ( patch.xCoor == NULL ) {
587 }
588
589 patch.yCoor = ( REAL8 * )LALCalloc( 1, ySide * sizeof( REAL8 ) );
590 if ( patch.yCoor == NULL ) {
592 }
593 TRY( LALHOUGHFillPatchGrid( status->statusPtr, &patch, &parSize ), status );
594
595 /*-------------- initializing the Total Hough map space ------------*/
596 ht.xSide = xSide;
597 ht.ySide = ySide;
598 ht.skyPatch.alpha = alpha;
599 ht.skyPatch.delta = delta;
600 ht.mObsCoh = nStacks;
601 ht.deltaF = deltaF;
602 ht.spinDem.data[0] = fdot;
603 ht.patchSizeX = patchSizeX;
604 ht.patchSizeY = patchSizeY;
605 ht.dFdot.data[0] = dfdot;
606 ht.map = NULL;
607 ht.map = ( HoughTT * )LALCalloc( 1, xSide * ySide * sizeof( HoughTT ) );
608 if ( ht.map == NULL ) {
610 }
611
612 TRY( LALHOUGHInitializeHT( status->statusPtr, &ht, &patch ), status ); /*not needed */
613
614 /* Search frequency interval possible using the same LUTs */
615 fBinSearch = fBin;
616 fBinSearchMax = fBin + parSize.nFreqValid - 1;
617
618 /* loop over frequencies */
619 while ( ( fBinSearch <= fBinFin ) && ( fBinSearch < fBinSearchMax ) ) {
620
621 /* finally we can construct the hough maps and select candidates */
622 {
623 INT4 n, nfdotBy2;
624
625 nfdotBy2 = nfdot / 2;
626 ht.f0Bin = fBinSearch;
627
628 /*loop over all values of residual spindown */
629 /* check limits of loop */
630 for ( n = -nfdotBy2; n <= nfdotBy2 ; n++ ) {
631
632 ht.spinRes.data[0] = n * dfdot;
633
634 for ( j = 0; j < ( UINT4 )nStacks; j++ ) {
635 freqInd.data[j] = fBinSearch + floor( ( REAL4 )( timeDiffV->data[j] * n * dfdot / deltaF ) + 0.5f );
636 }
637
638
639
640
641
642
643 /* get candidates */
644 if ( params->useToplist ) {
645 TRY( GetHoughCandidates_toplist( status->statusPtr, houghToplist, &ht, &patch, &parDem ), status );
646 } else {
647 TRY( GetHoughCandidates_threshold( status->statusPtr, out, &ht, &patch, &parDem, params->threshold ), status );
648 }
649
650 } /* end loop over spindown trajectories */
651
652 } /* end of block for calculating total hough maps */
653
654
655 /*------ shift the search freq. & PHMD structure 1 freq.bin -------*/
656
657 ++fBinSearch;
658
659
660 } /* closing while loop over fBinSearch */
661
662
663 }
664
665
666 /* copy toplist candidates to output structure if necessary */
667 if ( params->useToplist ) {
668 for ( k = 0; k < houghToplist->elems; k++ ) {
669 out->list[k] = *( ( SemiCohCandidate * )( toplist_elem( houghToplist, k ) ) );
670 }
671 out->nCandidates = houghToplist->elems;
672 free_toplist( &houghToplist );
673 }
674
675 LALFree( ht.map );
676
677 /* free remaining memory */
678 LALFree( ht.spinRes.data );
679 LALFree( ht.spinDem.data );
680 LALFree( ht.dFdot.data );
681
682 TRY( LALDDestroyVector( status->statusPtr, &timeDiffV ), status );
683 LALFree( freqInd.data );
684
685 LALFree( patch.xCoor );
686 LALFree( patch.yCoor );
687
689 RETURN( status );
690
691} /* END StackSlideVecF */
692
693
694
695
696
697
698
699
700
701/* Calculate f(t) using the master equation given by Eq. 6.18 in gr-qc/0407001 */
702/* Returns f(t) in outputPoint.fkdot[0] */
703void FindFreqFromMasterEquation( LALStatus *status, /**< pointer to LALStatus structure */
704 PulsarDopplerParams *outputPoint, /**< outputs f(t) for output sky position and spindown values */
705 PulsarDopplerParams *inputPoint, /**< input demodulation f0, sky position, and spindown values */
706 REAL8 *vel, /**< vx = vel[0], vy = vel[1], vz = vel[2] = ave detector velocity */
707 REAL8 deltaT, /**< time since the reference time */
708 UINT2 numSpindown ) /**< Number of spindown values == high deriv. of include == 1 if just df/dt, etc... */
709{
710 UINT2 k;
711 REAL8 f0, F0, F0zeta, alpha, delta, cosAlpha, cosDelta, sinDelta;
712 REAL8 nx, ny, nz, ndx, ndy, ndz;
713 REAL8 vx, vy, vz;
714 REAL8 kFact, deltaTPowk;
715 PulsarSpins inputfkdot; /* input demodulation spindown values */
716 PulsarSpins deltafkdot; /* residual spindown values */
717
720
724
725 /* the x, y, and z components of the input demodulation sky position: */
726 alpha = inputPoint->Alpha;
727 delta = inputPoint->Delta;
728 cosAlpha = cos( alpha );
729 cosDelta = cos( delta );
730 sinDelta = sin( delta );
731 ndx = cosDelta * cosAlpha;
732 ndy = cosDelta * sinDelta;
733 ndz = sinDelta;
734
735 /* the x, y, and z components of the output sky position: */
736 alpha = outputPoint->Alpha;
737 delta = outputPoint->Delta;
738 cosAlpha = cos( alpha );
739 cosDelta = cos( delta );
740 sinDelta = sin( delta );
741 nx = cosDelta * cosAlpha;
742 ny = cosDelta * sinDelta;
743 nz = sinDelta;
744
745 f0 = inputPoint->fkdot[0]; /* input f0 */
746
747 /* input and residual spindown values: */
748 deltafkdot[0] = 0; /* unused */
749 inputfkdot[0] = f0; /* unused */
750 for ( k = 1; k <= numSpindown; k++ ) {
751 inputfkdot[k] = inputPoint->fkdot[k];
752 deltafkdot[k] = outputPoint->fkdot[k] - inputPoint->fkdot[k];
753 }
754
755 /* the x, y, and z components of velocity of the detector(s) for this stack */
756 vx = vel[0];
757 vy = vel[1];
758 vz = vel[2];
759
760 /* Compute F0 */
761 F0 = f0;
762 kFact = 1.0;
763 deltaTPowk = 1.0;
764 for ( k = 1; k <= numSpindown; k++ ) {
765 kFact *= ( ( REAL8 )k );
766 deltaTPowk *= deltaT;
767 F0 += deltafkdot[k] * deltaTPowk / kFact;
768 }
769
770 /* Compute F0 plus spindown; call this F0zeta. See the master equation. */
771 F0zeta = F0;
772 kFact = 1.0;
773 deltaTPowk = 1.0;
774 for ( k = 1; k <= numSpindown; k++ ) {
775 kFact *= ( ( REAL8 )k );
776 deltaTPowk *= deltaT;
777 F0zeta += inputfkdot[k] * deltaTPowk / kFact;
778 }
779
780 /* Compute the output frequency. */
781 /* NOTE that the small correction fkdot[k]*(deltaT^(k-1)/(k-1)!)*(r - r0)/c is ignored */
782 outputPoint->fkdot[0] = F0 + F0zeta * ( vx * ( nx - ndx ) + vy * ( ny - ndy ) + vz * ( nz - ndz ) );
783
785 RETURN( status );
786} /* END FindFreqFromMasterEquation */
787
788/* Get StackSlide candidates using a fixed threshold */
789void GetStackSlideCandidates_threshold( LALStatus *status, /**< pointer to LALStatus structure */
790 SemiCohCandidateList *out, /**< output list of candidates */
791 REAL8FrequencySeries *stackslideSum, /**< input stackslide sum of F stat values */
792 PulsarDopplerParams *outputPoint, /**< parameter space point for which to output candidate */
793 PulsarDopplerParams *outputPointUnc, /**< uncertainties in parameter space point for which to output candidate */
794 REAL8 threshold ) /**< threshold on significance */
795{
797 INT4 j, jminus1, jplus1, nSearchBins, nSearchBinsm1, numCandidates;
798 SemiCohCandidate thisCandidate;
799 BOOLEAN isLocalMax = TRUE;
800 REAL8 thisSig, thisSigMinus1, thisSigPlus1;
801 REAL8 *pstackslideData; /* temporary pointer */
802
805
812
813 pstackslideData = stackslideSum->data->data;
814
815
816 f0 = stackslideSum->f0;
817 deltaF = stackslideSum->deltaF;
818 thisCandidate.dFreq = deltaF;
819 thisCandidate.fdot = outputPoint->fkdot[1];
820 thisCandidate.dFdot = outputPointUnc->fkdot[1];
821 thisCandidate.alpha = outputPoint->Alpha;
822 thisCandidate.delta = outputPoint->Delta;
823 thisCandidate.dAlpha = outputPointUnc->Alpha;
824 thisCandidate.dDelta = outputPointUnc->Delta;
825 thisCandidate.varianceSig = 0;
826 thisCandidate.meanSig = 0;
827 thisCandidate.deltaBest = 0;
828 thisCandidate.alphaBest = 0;
829
830 numCandidates = out->nCandidates;
831 nSearchBins = stackslideSum->data->length;
832 nSearchBinsm1 = nSearchBins - 1;
833
834 /* Search frequencies for candidates above threshold that are local maxima */
835 for ( j = 0; j < nSearchBins; j++ ) {
836 freq = f0 + ( ( REAL8 )j ) * deltaF;
837
838 /* realloc list if necessary */
839 if ( numCandidates >= out->length ) {
840 out->length += BLOCKSIZE_REALLOC;
841 out->list = ( SemiCohCandidate * )LALRealloc( out->list, out->length * sizeof( SemiCohCandidate ) );
842 LogPrintf( LOG_DEBUG, "Need to realloc StackSlide candidate list to %d entries\n", out->length );
843 } /* need a safeguard to ensure that the reallocs don't happen too often */
844
845 thisSig = pstackslideData[j]; /* Should we do more than this to find significance? */
846
847 /* candidates are above threshold and local maxima */
848 if ( thisSig > threshold ) {
849 /* 12/14/06 gm; improve local maxima checking */
850 jminus1 = j - 1;
851 jplus1 = j + 1;
852 if ( jminus1 < 0 ) {
853 if ( jplus1 > nSearchBinsm1 ) {
854 jplus1 = nSearchBinsm1; /* just to be safe */
855 }
856 thisSigPlus1 = pstackslideData[jplus1];
857 isLocalMax = ( thisSig > thisSigPlus1 );
858#ifdef INCLUDE_EXTRA_STACKSLIDE_THREHOLDCHECK
859 isLocalMax = ( isLocalMax && ( thisSig > 2.0 * THRESHOLDFRACSS * thisSigPlus1 ) );
860#endif
861 } else if ( jplus1 > nSearchBinsm1 ) {
862 if ( jminus1 < 0 ) {
863 jminus1 = 0; /* just to be safe */
864 }
865 thisSigMinus1 = pstackslideData[jminus1];
866 isLocalMax = ( thisSig > thisSigMinus1 );
867#ifdef INCLUDE_EXTRA_STACKSLIDE_THREHOLDCHECK
868 isLocalMax = ( isLocalMax && ( thisSig > 2.0 * THRESHOLDFRACSS * thisSigMinus1 ) );
869#endif
870 } else {
871 thisSigMinus1 = pstackslideData[jminus1];
872 thisSigPlus1 = pstackslideData[jplus1];
873 isLocalMax = ( thisSig > thisSigMinus1 ) && ( thisSig > thisSigPlus1 );
874#ifdef INCLUDE_EXTRA_STACKSLIDE_THREHOLDCHECK
875 isLocalMax = ( isLocalMax && ( thisSig > THRESHOLDFRACSS * ( thisSigMinus1 + thisSigPlus1 ) ) );
876#endif
877 }
878 if ( ( numCandidates < out->length ) && isLocalMax ) {
879 thisCandidate.significance = thisSig;
880 thisCandidate.freq = freq;
881 out->list[numCandidates] = thisCandidate;
882 numCandidates++;
883 out->nCandidates = numCandidates;
884 }
885 }
886 } /* END for(j=0; j<nSearchBins; j++) */
887
889 RETURN( status );
890
891} /* END GetStackSlideCandidates_threshold */
892
893/* Get StackSlide candidates as a toplist */
895 toplist_t *list,
896 REAL8FrequencySeries *stackslideSum, /* input stackslide sum of F stat values */
897 PulsarDopplerParams *outputPoint, /* parameter space point for which to output candidate */
898 PulsarDopplerParams *outputPointUnc ) /* uncertainties in parameter space point for which to output candidate */
899{
901 INT4 j, nSearchBins;
902 SemiCohCandidate thisCandidate;
903 REAL8 *pstackslideData; /* temporary pointer */
904
907
911
912 pstackslideData = stackslideSum->data->data;
913
914 f0 = stackslideSum->f0;
915 deltaF = stackslideSum->deltaF;
916 thisCandidate.dFreq = deltaF;
917 thisCandidate.fdot = outputPoint->fkdot[1];
918 thisCandidate.dFdot = outputPointUnc->fkdot[1];
919 thisCandidate.alpha = outputPoint->Alpha;
920 thisCandidate.delta = outputPoint->Delta;
921 thisCandidate.dAlpha = outputPointUnc->Alpha;
922 thisCandidate.dDelta = outputPointUnc->Delta;
923
924 nSearchBins = stackslideSum->data->length;
925
926 /* Search frequencies for candidates above threshold that are local maxima */
927 for ( j = 0; j < nSearchBins; j++ ) {
928
929 freq = f0 + ( ( REAL8 )j ) * deltaF;
930 thisCandidate.freq = freq;
931 thisCandidate.significance = pstackslideData[j]; /* Should we do more than this to find significance? */
932
933 insert_into_toplist( list, &thisCandidate );
934
935 } /* END for(j=0; j<nSearchBins; j++) */
936
938 RETURN( status );
939
940} /* END GetStackSlideCandidates_toplist */
int create_toplist(toplist_t **list, size_t length, size_t size, int(*smaller)(const void *, const void *))
Definition: HeapToplist.c:101
void free_toplist(toplist_t **list)
Definition: HeapToplist.c:139
void * toplist_elem(toplist_t *list, size_t ind)
Definition: HeapToplist.c:185
int insert_into_toplist(toplist_t *list, void *element)
Definition: HeapToplist.c:151
#define HIERARCHICALSEARCH_MSGENULL
#define HIERARCHICALSEARCH_ENULL
#define HIERARCHICALSEARCH_EVAL
#define HIERARCHICALSEARCH_MSGEVAL
void GetHoughCandidates_toplist(LALStatus *status, toplist_t *list, HOUGHMapTotal *ht, HOUGHPatchGrid *patch, HOUGHDemodPar *parDem)
Get Hough candidates as a toplist.
void GetHoughCandidates_threshold(LALStatus *status, SemiCohCandidateList *out, HOUGHMapTotal *ht, HOUGHPatchGrid *patch, HOUGHDemodPar *parDem, REAL8 threshold)
Get Hough candidates as a toplist using a fixed threshold.
int j
int k
#define LALRealloc(p, n)
#define LALCalloc(m, n)
#define LALFree(p)
const double b1
static double double delta
#define ABORT(statusptr, code, mesg)
#define TRY(func, statusptr)
#define ATTATCHSTATUSPTR(statusptr)
#define ASSERT(assertion, statusptr, code, mesg)
#define DETATCHSTATUSPTR(statusptr)
#define INITSTATUS(statusptr)
#define RETURN(statusptr)
void GetStackSlideCandidates_toplist(LALStatus *status, toplist_t *list, REAL8FrequencySeries *stackslideSum, PulsarDopplerParams *outputPoint, PulsarDopplerParams *outputPointUnc)
#define THRESHOLDFRACSS
#define BLOCKSIZE_REALLOC
static int smallerStackSlide(const void *a, const void *b)
void GetStackSlideCandidates_threshold(LALStatus *status, SemiCohCandidateList *out, REAL8FrequencySeries *stackslideSum, PulsarDopplerParams *outputPoint, PulsarDopplerParams *outputPointUnc, REAL8 threshold)
void StackSlideVecF(LALStatus *status, SemiCohCandidateList *out, REAL4FrequencySeriesVector *vecF, SemiCoherentParams *params)
Function StackSlides a vector of Fstat frequency series or any REAL8FrequencySeriesVector.
#define TRUE
void StackSlideVecF_HoughMode(LALStatus *status, SemiCohCandidateList *out, REAL4FrequencySeriesVector *vecF, SemiCoherentParams *params)
Function StackSlides a vector of Fstat frequency series or any REAL8FrequencySeriesVector.
#define SSMAX(x, y)
void FindFreqFromMasterEquation(LALStatus *status, PulsarDopplerParams *outputPoint, PulsarDopplerParams *inputPoint, REAL8 *vel, REAL8 deltaT, UINT2 numSpindown)
Header file for StackSlideFstat.c.
#define STACKSLIDEFSTAT_ENULL
#define STACKSLIDEFSTAT_EVAL
#define STACKSLIDEFSTAT_MSGENULL
#define STACKSLIDEFSTAT_MSGEVAL
const double ny
const double vy
const double vz
const double nz
const double vx
const double nx
REAL8 HoughTT
Total Hough Map pixel type.
Definition: HoughMap.h:113
void LALHOUGHInitializeHT(LALStatus *status, HOUGHMapTotal *ht, HOUGHPatchGrid *patch)
This function initializes the total Hough map HOUGHMapTotal *ht to zero and checks consistency betwee...
Definition: HoughMap.c:74
#define LAL_PI_2
unsigned char BOOLEAN
#define XLAL_INIT_MEM(x)
uint64_t UINT8
double REAL8
int64_t INT8
uint16_t UINT2
uint32_t UINT4
int32_t INT4
float REAL4
#define LAL_INT8_FORMAT
#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 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 LALHOUGHComputeSizePar(LALStatus *status, HOUGHSizePar *out, HOUGHResolutionPar *in)
Definition: PatchGrid.c:92
void LogPrintf(LogLevel_t, const char *format,...) _LAL_GCC_PRINTF_FORMAT_(2
LOG_DEBUG
LOG_DETAIL
REAL8 PulsarSpins[PULSAR_MAX_SPINS]
Typedef for fixed-size array holding GW frequency and derivatives fk = d^k Freq/dt^k|(tau_ref)
static const INT4 a
void LALDCreateVector(LALStatus *, REAL8Vector **, UINT4)
void LALDDestroyVector(LALStatus *, REAL8Vector **)
REAL8 XLALGPSGetREAL8(const LIGOTimeGPS *epoch)
n
out
int deltaF
#define F0
double alpha
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
REAL8Vector spin
Spin down information.
Definition: LUT.h:359
REAL8UnitPolarCoor skyPatch
(alpha, delta): position of the center of the patch
Definition: LUT.h:355
This structure stores the Hough map.
Definition: HoughMap.h:130
UINT2 ySide
number of physical pixels in the y direction
Definition: HoughMap.h:142
UINT2 xSide
number of physical pixels in the x direction
Definition: HoughMap.h:141
HoughTT * map
the pixel counts; the number of elements to allocate is ySide*xSide
Definition: HoughMap.h:143
REAL8Vector dFdot
resolution in spindown parameters
Definition: HoughMap.h:140
REAL8Vector spinRes
Refined spin parameters used in the Hough transform.
Definition: HoughMap.h:139
REAL8UnitPolarCoor skyPatch
Coordinates of the versor (alpha, delta) pointing to the center of the sky patch.
Definition: HoughMap.h:137
INT8 f0Bin
frequency bin for which it has been constructed
Definition: HoughMap.h:131
UINT4 mObsCoh
ratio of observation time and coherent timescale
Definition: HoughMap.h:133
REAL8 patchSizeX
x size of patch
Definition: HoughMap.h:135
REAL8 deltaF
frequency resolution
Definition: HoughMap.h:132
REAL8 patchSizeY
y size of patch
Definition: HoughMap.h:136
REAL8Vector spinDem
Spin parameters used in the demodulation stage.
Definition: HoughMap.h:138
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 ySide
number of pixels in the y direction
Definition: LUT.h:300
INT8 nFreqValid
number of frequencies where the LUT is valid
Definition: LUT.h:303
UINT2 xSide
number of pixels in the x direction (projected plane)
Definition: LUT.h:299
A vector of 'timestamps' of type LIGOTimeGPS.
Definition: SFTfileIO.h:188
LIGOTimeGPS * data
array of timestamps
Definition: SFTfileIO.h:193
Type containing the 'Doppler-parameters' affecting the time-evolution of the phase.
PulsarSpins fkdot
Intrinsic spins: [Freq, f1dot, f2dot, ... ] where fkdot = d^kFreq/dt^k.
REAL8 Delta
Sky position: DEC (latitude) in equatorial coords and radians.
LIGOTimeGPS refTime
Reference time of pulsar parameters (in SSB!)
REAL8 Alpha
Sky position: RA (longitude) in equatorial coords and radians.
REAL8 asini
Binary: projected, normalized orbital semi-major axis (s).
REAL4Sequence * data
A vector of REAL4FrequencySeries.
REAL4FrequencySeries * data
Pointer to the data array.
UINT4 length
Number of elements in array.
REAL4 * data
REAL8Sequence * data
REAL8 alpha
any value
Definition: LUT.h:328
REAL8 delta
In the interval [ ].
Definition: LUT.h:329
REAL8 * data
one hough or stackslide candidate
REAL8 varianceSig
variance of significance values in Hough map
REAL8 dDelta
delta error
REAL8 deltaBest
delta for best candidate in hough map
REAL8 dFdot
fdot error
REAL8 dAlpha
alpha error
REAL8 meanSig
mean of significance values in hough map
REAL8 alpha
right ascension
REAL8 freq
frequency
REAL8 dFreq
frequency error
REAL8 alphaBest
alpha for best candidate in hough map
REAL8 significance
significance
REAL8 delta
declination
structure for storing candidates produced by Hough search
parameters for the semicoherent stage
This structure stores the frequency indexes of the partial-Hough map derivatives at different time st...
Definition: LALHough.h:149
UINT8 * data
the frequency indexes
Definition: LALHough.h:152
REAL8 deltaF
frequency resolution
Definition: LALHough.h:151
UINT4 length
number of elements
Definition: LALHough.h:150
size_t elems
Definition: HeapToplist.h:37
double deltaT