C# interface for the fCWT C++ code published in this paper: https://www.nature.com/articles/s43588-021-00183-z. fCWT github repo: https://github.com/fastlib/fCWT
The CWT of a typical MS transient can be very asymmetric in the sense that the number of points on the time axis can exceed the number of points in the frequency axis by multiple orders of magnitude. Currently our gaussian smoothing class only uses symmetrical 2D gaussian kernels to smooth data which may lead to insufficient smoothing in one axis and too much smoothing in another.
Adding the option to use an asymmetrical gaussian would allow us to smooth data in a manner consistent with the actual dimensions of our CWT data. This is especially important for finding maxima in plots where there may be time axis oscillation in the in the regions where a peak is meant to be identified. An example of this is shown in the attached files. The first contains the CWT of a transient corresponding to a complex mass spectrum and the second shows high frequency oscillations in many of the peaks appearing in this transient. complexTransient_modulus.pdf zoomed_Band2complexTransient_modulus.pdf
The wavelet center frequency parameter (C0) appears to be behaving in an unexpected way in which varying this parameter does not move the location of frequency bands in the resulting CWT of a given signal. This is a problem because when calculating frequencies through f = C0 / a, a single pure cosine wave's detected frequency will vary depending on what C0 is. Examples of this are given below for C0 = 10, 25 and 50 for a single cosine wave. Varying C0 appears to only affect the width of the resulting ridge. cosTestCWTHeatmapc0-50.pdf cosTestCWTHeatmapc0-25.pdf cosTestCWTHeatmapc0-10.pdf
.
Currently, there a Generate(typeofplot) method and then a GenerateCWT(typeofplot). So if you want to change one thing about a plot, you have to change several methods. Make one plot method per type of plot and use optional parameters and overloading to make methods that handle different subtypes of the same plot.
The unit test for TestSplitRealAndImaginary doesn't test that the splitting is working. It uses the already split array to check that the array splitting is working.