mxlib
c++ tools for analyzing astronomical data and other tasks by Jared R. Males. [git repo]
Todo List
Module circular_buffer

perform circular buffer testing on an isolated core, with one test per executable

implement a circular buffer with fixed power-of-two size to test & modulo

Class mx::AO::analysis::aoAtmosphere< _realT >

layer outer scales need work

layer PSD params isn't finished. Need to push that to PSD itself, and manage things like wavelength dependence.

Member mx::AO::analysis::aoAtmosphere< _realT >::dumpAtmosphere (iosT &ios)
update for new vector components (L_0, etc.)
Member mx::AO::analysis::aoAtmosphere< _realT >::f_g ()
derive full value of the constant
Member mx::AO::analysis::aoAtmosphere< _realT >::fwhm (realT lam_sci)
this needs to handle layers with different L_0
Member mx::AO::analysis::aoAtmosphere< _realT >::tau_0 ()
derive full value of the constant
Member mx::AO::analysis::aoAtmosphere< _realT >::update_v_wind ()
handle dir_wind averaging across 0/2pi
Member mx::AO::analysis::aoSystem< _realT, _inputSpectT, iosT >::C0var (realT m, realT n)
handle multiple layers
Member mx::AO::analysis::aoSystem< _realT, _inputSpectT, iosT >::C1var (realT m, realT n)
handle multiple layers
Member mx::AO::analysis::aoSystem< _realT, _inputSpectT, iosT >::C4var (realT m, realT n)
handle multiple layers
Member mx::AO::analysis::aoSystem< _realT, _inputSpectT, iosT >::C5var (realT m, realT n)
handle multiple layers
Member mx::AO::analysis::aoSystem< _realT, _inputSpectT, iosT >::C7var (realT m, realT n)
this needs to handle multiple layers – do we violate an assumption of L_0 isn't constant?
Member mx::AO::analysis::aoSystem< _realT, _inputSpectT, iosT >::d_opt ()

this should be in a separate valideModes function

investigate why we tolerate m_d_min = 0 here. Is this just a config error?

Member mx::AO::analysis::aoSystem< _realT, _inputSpectT, iosT >::fittingError (realT m, realT n)
handle multiple layers
Member mx::AO::analysis::aoSystem< _realT, _inputSpectT, iosT >::loadConfig (app::appConfigurator &config)
: "\test Loading aoAtmosphere config settings \ref tests_ao_analysis_aoAtmosphere_config "[test doc]""
Member mx::AO::analysis::aoSystem< _realT, _inputSpectT, iosT >::optimumTauWFS (realT m, realT n)
Check inclusion of X in parameters
Member mx::AO::analysis::aoSystem< _realT, _inputSpectT, iosT >::optimumTauWFS (realT m, realT n, realT d, int b)

Check inclusion of X in parameters

handle multiple layers

Member mx::AO::analysis::aoSystem< _realT, _inputSpectT, iosT >::timeDelayError (realT m, realT n, realT d, int b)
handle multiple layers
Member mx::AO::analysis::fourierCovariance< realT, aosysT >::getVariance (realT &error)

document me

handle gsl errors

Class mx::AO::analysis::fourierTemporalPSD< _realT, aosysT >

Split off the integration parameters in a separate structure.

once integration parameters are in a separate structure, make this a class with protected members.

GSL error handling

Member mx::AO::analysis::fourierTemporalPSD< _realT, aosysT >::intensityPSD (const std::string &subDir, const std::string &psdDir, const std::string &CvdPath, int mnMax, int mnCon, const std::string &si_or_lp, std::vector< realT > &mags, int lifetimeTrials, bool writePSDs)
should be able to scale the covar by r0, and possibly D
Member mx::AO::analysis::fourierTemporalPSD< _realT, aosysT >::multiLayerPSD (std::vector< realT > &PSD, std::vector< realT > &freq, realT m, realT n, int p, realT fmax=0)

implement error checking

handle reports of convergence failures form singleLayerPSD when implemented.

Member mx::AO::analysis::fourierTemporalPSD< _realT, aosysT >::singleLayerPSD (std::vector< realT > &PSD, std::vector< realT > &freq, realT m, realT n, int layer_i, int p, realT fmax=0)

implement error checking.

need a way to track convergence failures in integral without throwing an error.

need better handling of averaging for the -17/3 extension.

Member mx::AO::analysis::speckleAmpPSD (std::vector< realT > &spFreq, std::vector< realT > &spPSD, const std::vector< realT > &freq, const std::vector< realT > &fmPSD, const std::vector< std::complex< realT >> &fmXferFxn, const std::vector< realT > &nPSD, const std::vector< std::complex< realT >> &nXferFxn, int N, std::vector< realT > *vars=nullptr, std::vector< realT > *bins=nullptr, bool noPSD=false)

Figure out what's going on with psdFilter normalization!

probably need to not do overlapped averaging in periodogram. Could drop mean-sub then.

Member mx::AO::analysis::vonKarmanSpectrum< realT >::dumpPSD (iosT &ios)
generatlize for different alpha and beta
Member mx::AO::analysis::vonKarmanSpectrum< realT >::operator() (psdParamsT &par, size_t layer_i, realT k, realT sec_zeta)
this needs to handle layers with different L_0
Class mx::AO::analysis::zernikeTemporalPSD< _realT, aosysT >

Split off the integration parameters in a separate structure.

once integration parameters are in a separate structure, make this a class with protected members.

GSL error handling

Member mx::AO::analysis::zernikeTemporalPSD< _realT, aosysT >::multiLayerPSD (std::vector< realT > &PSD, std::vector< realT > &freq, int zern_j, realT fmax=0)

implement error checking

handle reports of convergence failures form singleLayerPSD when implemented.

Member mx::AO::analysis::zernikeTemporalPSD< _realT, aosysT >::singleLayerPSD (std::vector< realT > &PSD, std::vector< realT > &freq, int zern_j, int layer_i, realT fmax=0)

implement error checking.

need a way to track convergence failures in integral without throwing an error.

need better handling of averaging for the -17/3 extension.

Class mx::AO::sim::generalIntegrator< _realT >

document the math for the G.I.

document the filter coefficients, etc.

Class mx::AO::sim::turbAtmosphere< _aoSystemT >

add facility for switching interpolators

need to include wrap detection when using subharmonics (e.g. frames needs to be right)

Member mx::AO::sim::turbAtmosphere< _aoSystemT >::m_forceGen
need check for changes in parameters to decide if saved frames are valid per layer
Class mx::AO::sim::turbLayer< _aoSystemT >

document this

add facility for changing interpolator

Class mx::app::appConfigurator

add handling of += in subsequent files.

should just swith to strict TOML

Member mx::app::appConfigurator::readConfig (const std::string &fname, bool reportFileNotFound=true)

handle += here, by appending to the last value as if a vector.

update error handling to include >0 (line numer of parse error) and -2 memory allocation error.

Member mx::app::iniFile::insert (const char *section, const char *name, const char *value)
need error checking.
Member mx::astro::baseSpectrum< realT >::charFlux (realT &flambda0, realT &fnu0, realT &fphot0, const realT &lambda_0, const std::vector< realT > &lambda, const filterT &trans)

use unit conversions to make it work for everything.

check on integration method, should it be trap?

Member mx::astro::baseSpectrum< realT >::charFlux (realT &flambda0, realT &fnu0, realT &fphot0, const realT &lambda_0, const std::vector< realT > &lambda, const std::vector< realT > &trans)

use unit conversions to make it work for everything.

check on integration method, should it be trap?

Member mx::astro::getGMST (realT &GMST, int Yr, int Mo, int Dy, int hr, int min, realT sec)

handle SOFA error.

handle SOFA error.

handle SOFA error.

handle SOFA error.

Member mx::fits::fitsFile< dataT >::read (dataT *data)
test if there is a speed difference for full reads for fits_read_pix/subset
Member mx::fits::fitsFile< dataT >::read (arrT &data)
this can probably be made part of one read function (or call read(data *)) with a call to resize with SFINAE
Member mx::improc::HCIobservation< _realT >::coaddImages (int coaddCombineMethod, int coaddMaxImno, int coaddMaxTime, std::vector< std::string > &coaddKeywords, std::vector< double > &imageMJD, std::vector< fits::fitsHeader > &heads, eigenCube< realT > &ims)

this should really include end of exposure too.

this needs to handle averaging of angles

Member mx::improc::HCIobservation< _realT >::m_comboWeights
check how comboWeights are handled in coadding
Member mx::improc::HCIobservation< _realT >::outputPreProcessed ()
Should add a HISTORY card here
Member mx::improc::HCIobservation< _realT >::readMask ()
here re-size mask if needed to match imSize
Member mx::improc::imageDownSample (imageOutT &imout, const imageInT &imin)
Allow selection of interpolator, providing a default version.
Member mx::improc::imageXCorrFFT< _ccImT >::normalize (bool no)
check if this has side effects that should be triggered
Member mx::improc::imCenterCircleSym< realT >::center (realT &x, realT &y, eigenImage< realT > &im, realT x0, realT y0)
This needs to be able to handle highly non-symmetric peaks much better.
Member mx::improc::imCenterRadon< transformT >::fitGrid (realT &x, realT &y, eigenImage< realT > grid)
This needs to be able to handle highly non-symmetric peaks much better.
Member mx::ioutils::getSequentialFilename (const std::string &basename, const std::string &extension="", const int startat=0, int ndigit=4)
switch to using a regex or something so we can detect the missing file.
Member mx::ioutils::readColumns (const std::string &fname, arrTs &... arrays)
lineSize should be configurable
Class mx::ioutils::textTable

have ability to add whole row, with a variadic template to handle different types

allow non-wrapping (i.e. unlimited width) columns

headers and footers

add centering (h and v) and right and bottom justification

have a latex() setup function

add sort capability, with vector of column choices to sort first by column N, then M, etc.

Class mx::math::fft::fftT< _inputT, _outputT, _rank, 0 >

add execute interface with fftw like signature

add plan interface where user passes in pointers (to avoid allocations)

Member mx::math::func::root_epsilon ()
this isn't, but should be constexpr – need constr sqrt.
Class mx::math::gnuPlot
Use mxError for error reporting.
Member mx::math::gnuPlot::checkResponse (std::string &response, double timeout=0)
investigate having a second thread monitor for responses.
Member mx::math::gsl_interpolate (const gsl_interp_type *interpT, realT *xin, realT *yin, size_t Nin, realT *xout, realT *yout, size_t Nout)
report errors iaw mxlib standard in gsl_interpolate
Member mx::math::radprofIntegral (vectorScT r, vectorT p, bool inczero=false)
the trapezoid rule may not be strictly valid as implemented. Is there a weighting to apply based on r?
Class mx::math::syevrMem< floatT >
this should have the working memory for the first exploratory call to ?syevr as well.
Member mx::sigproc::autocorrelation (std::vector< T > &ac, std::vector< T > &sig)
this should probably re-allocate if ac.size() != sig.size(), or at least <
Class mx::sigproc::linearPredictor< _realT >
document linearPredictor
Member mx::sigproc::makeFourierModeFreqs_Circ (std::vector< fourierModeDef > &spf, int N)
use push_back instead of resize
Member mx::sigproc::makeFourierModeFreqs_PandV (std::vector< fourierModeDef > &spf, int N)
use push_back instead of resize
Class mx::sigproc::psdFilter< _realT, 1 >
once fftT has a plan interface with pointers for working memory, use it.
Class mx::sigproc::psdFilter< _realT, _rank, 0 >
once fftT has a plan interface with pointers for working memory, use it.
Class mx::sigproc::psdVarMean< paramsT >
document the paramsT interface
Member mx::sigproc::psdVarMean< paramsT >::init ()
We'll get the occasional failure to reach tolerance error, just ignore them all for now.
Member mx::sigproc::psdVarMeanParams< _realT >::psdVal (realT k)
implement better extrapolation past max-freq.
Member mx::sigproc::zernikeQNorm (realT k, realT phi, int n, int m)
need a more robust jinc_n function for n > 1
Member mx::wfp::drawLine (arrayT &im, typename arrayT::Scalar x0, typename arrayT::Scalar y0, typename arrayT::Scalar x1, typename arrayT::Scalar y1, typename arrayT::Scalar halfWidth)
should handle width much more intelligently, this only works for ~45 degree lines.
Class mx::wfp::fraunhoferPropagator< _wavefrontT >
check if we should reverse the FFT orders to be proper
File zernike.hpp
the basic zernike polys should be in math::func.