VanVleck.h

Classes

VanVleck -- A class of static functions to aid with vanVleck corrections of lag data. (full description)

class VanVleck

Interface

Public Members
static void size(uInt npts)
static uInt getsize()
static void setQuantization(const Matrix<Double> &qx, const Matrix<Double> &qy)
static Bool setEquiSpaced(Double xlev, Double ylev, Double xmean, Double ymean, Int n)
static void getTable(Vector<Double> &rs, Vector<Double> &rhos)
static Double r(const Double rho)
static Double thresh(Int n, Double zerolag)
static Double predict(Int n, Double threshhold)
static Bool dcoff(Double &dcoffset, Double &threshold, Int n, Double zerolag, Double bias)
Private Members
static Double drbydrho(Double *rho)
static Double rinc(Double &rhoi, Double &rhof)
static void initInterpolator()
static Double threshNgt3(Int n, Double zerolag)
static Double threshN3(Double zerolag)
static Double invErf(Double x)
static Double invErfc(Double x)
static Double predictNgt3(Int n, Double threshhold)
static Double predictN3(Double threshhold)
static Bool dcoff3(Double &dcoffset, Double &threshold, Double zerolag, Double bias)

Description

Review Status

Date Reviewed:
yyyy/mm/dd

Prerequisite

Etymology

This provides the functions necessary to determine the van Vleck correction for a general n-level by m-level correlator.

Synopsis

This provides the functions necessary to determine the van Vleck correction for a general n-level by m-level correlator.

Example

Motivation

The GBT spectrometer provides the measured auto-correlation and cross-correlation lags. The gbt MeasurementSet filler (gbtmsfiller) needs to convert those lags to the spectral domain. These functions allow the filler to calculate the van Vleck correction appropriate for each measured set of lags. They are of general and hence are not specific to the GBT spectrometer.

The functions here are static because of the nature of the underlying numerical quadrature fortran code used to integrate the drbyrho function.

Thrown Exceptions

To Do

Member Description

static void size(uInt npts)

Set the interpolation table size. Should be an odd number. The default size is 65.

static uInt getsize()

get the current size.

static void setQuantization(const Matrix<Double> &qx, const Matrix<Double> &qy)

Set the x and y quantization functions. Each matrix should have dimensions (2,n) where n is the number of levels. The first row (0,...) is the (n-1) threshold levels and the second row is the n quantizations based on those thresholds. The thresholds may include a DC offset. The (0,(n-1)) element is never used and need not be set.

static Bool setEquiSpaced(Double xlev, Double ylev, Double xmean, Double ymean, Int n)

Set the x and y quantization levels for the case of equi-spaced levels with a possible non-zero offset. The total number of levels is given by n, which must be 3 or 9. If n is not 3 or 9, False will be returned and no quantization will have been set. For the 3- and 9- level cases a bivarate normal integral calculation will be used. That is much faster than the more general numerical integration used by setQuantization.

static void getTable(Vector<Double> &rs, Vector<Double> &rhos)

Get the data used in setting up the interpolation

static Double r(const Double rho)

Given a rho return the corresponding corrected r Returns 0.0 if no quantization has been set yet.

static Double thresh(Int n, Double zerolag)

Given a measured zero-lag autocorrelation and number of levels (n>=3) return the first positive quantizer input threshold level. This can be used to set the up the matrix arguments used in setQuantization.

static Double predict(Int n, Double threshhold)

Predict a given zero-lag given n and a threshold. This is included here to be used as a check against the output of thresh.

static Bool dcoff(Double &dcoffset, Double &threshold, Int n, Double zerolag, Double bias)

Compute an approximation to the mean signal level (DC offset) and quantizer threshold setting (both in terms of the r.m.s. signal input level) given the observed positive bias (the asymptotic limit of the measured autocorrelation at large lags) and the zero-lag autocorrelation. dcoffset is the mean signal level, threshold is the quantizer setting, n is the number of levels, zerolag is the zero-lag value and bias is the asymptotic bias. Currently, this is only available for the n==3 level case, all other cases set the returned dcoffset to 0 and use thresh() to set the returned value of threshold. A return value of F indicates that the zerolag and bias values are inconsistent and the dcoffset can not be determined. In that case, the returned dcoffset is 0 and thresh() is used to set the threshold level.

static Double drbydrho(Double *rho)

The fortran numerical integration function will call this. For a given rho and quantization functions, this computes, via Price's theorem, the value dr/drho of the derivative, with respect to rho, of the expected value of the correlator output.

static Double rinc(Double &rhoi, Double &rhof)

For a given rhoi, rhof, this produces a high-accuracy numerical approximation to the integral of drbydrho over the range rhoi to rhof. It calls the standard QUADPACK adaptive Gaussian quadrature procedure, dqags, to do the numerical integration.

static void initInterpolator()

initialize the interpolator

static Double threshNgt3(Int n, Double zerolag)

compute first threshhold for a given zerolag for n>3

static Double threshN3(Double zerolag)

compute first threshhold for a given zerolag for n==3

static Double invErf(Double x)

inverse err fn - used by invErfc

static Double invErfc(Double x)

inverse complementary err fn - used by threshN3

static Double predictNgt3(Int n, Double threshhold)

Predict a zero-lag value given the indicated first threshold level for n>3.

static Double predictN3(Double threshhold)

Predict a zero-lag value given the indicated first threshold level for n=3.

static Bool dcoff3(Double &dcoffset, Double &threshold, Double zerolag, Double bias)

implementation of dcoff for the 3-level case