diff --git a/NAMESPACE b/NAMESPACE
index bf1e8a4ec4fea27995efec3caf11a52ed4066509..072919dafaa86df497c4a62e8cbabcfedf1d4e83 100644
--- a/NAMESPACE
+++ b/NAMESPACE
@@ -14,9 +14,11 @@ export(attributeTones)
 export(cwt_morlet)
 export(hilbert_extension)
 export(mem)
+export(mfft)
 export(mfft_anova)
 export(mfft_complex)
 export(mfft_real)
+export(mmfft)
 export(periodogram)
 export(powerspectrum.wavelet)
 export(reconstruct_mfft)
diff --git a/R/mfft_complex.R b/R/mfft_complex.R
index 366d860c1a137fa8b560f5c47b2d408563ee1ef7..d8fedd769d5dbee36e174ecf0a40613655c07a82 100644
--- a/R/mfft_complex.R
+++ b/R/mfft_complex.R
@@ -9,9 +9,6 @@
 #' `mfft` is a wrapper thar redirects the data
 #' to `mfft_real` or `mfft_complex` depending on the nature of
 #' the input data. 
-#' TODO: this needs more work  because the two routines
-#' do not yet take exactly the same inputs. In particular, the meaning
-#' the `correction` parameter is not the same 
 #' TODO: add Laskar reference and say that the correction=0 version
 #'       corresponds to Laskar's routine.
 #' @param xdata The data provided either as a time series (advised), or as a vector. 
@@ -20,20 +17,19 @@
 #'        more precisely angular velocities (2\pi / period), expressed in time-inverse units
 #'        with the time resolution encoded in `xdata` if the latter is a time series. 
 #'        The computed frequencies are in the range given by minfreq and maxfreq.
-#' @param correction :
-#'        The parameter is passed on to `mfft_real` or `mfft_complex` depending on
-#'        `xdata` is real or complex, but the meaning of the parameter is not
-#'        quite the same for both. This needs to be fixed. 
-#'        one approach would be to define scalars like 'fft', 'mfft', 'mfft_linear', 
-#'        'mfft_second_order_correction'. 
+#' @param correction:  0: no frequency correction (equivalent to Laskar); 1 : frequency correction using linear approximation ; 2: frequency correction using sythetic data; 
+#' 3: second order-correction using synthetic data (all documented in the Sidlichovsky and Nesvorny reference). Note: 1 is not implemented for complex time series; 4 is
+#' not documented for real time series
 #' @param nfreq is the number of frequencies returned, must be smaller that the length of  xdata.
+#' @param force_complex : use the complex number implementation even if the time series is real. 
 #' @return a `mfft_deco` object, based on a data.frame with columns "Freq", "Ampl" and "Phases". 
 #'         note that because of a language glitch (to be fixed), "Freq" actually means "Rate"
 #' @author Michel Crucifix for the R code, and David Nesvorny for most of the supporting C code doing the
 #'         Frequency Modified Fourier transform  for Complex Numbers
 #' \insertRef{sidlichovsky97aa}{gtseries}
-mfft <- function(xdata, nfreq=30, minfreq=NULL, maxfreq=NULL, correction=1) {
-  if (is.complex(xdata)) return(mfft_complex(xdata, nfreq, minfreq, maxfreq, correction)) else 
+#' @export mfft
+mfft <- function(xdata, nfreq=15, minfreq=NULL, maxfreq=NULL, correction=1, force_complex = FALSE) {
+  if (is.complex(xdata) || force_complex) return(mfft_complex(xdata, nfreq, minfreq, maxfreq, correction)) else 
                          return(mfft_real(xdata, nfreq, minfreq, maxfreq, correction)) 
 }
 
@@ -76,10 +72,8 @@ mfft_complex <- function(xdata, nfreq=30,  minfreq=NULL, maxfreq=NULL, correctio
   xdata <- Re(xdata)
   ndata <- length(xdata);
 
-  flag <- correction + 1  # this is an ugly translation towards Sidlichovsky's convention
-
-  if (!(flag == 1 || flag == 2 || flag == 3)) stop("flag must be either 1, 2, or 3")
-
+  flag <- c(1,'NA',2,3)[correction+1]
+  if (is.na(flag)) stop('this correction scheme is not implemented for complex time series')
 
     if (is.null(minfreq)){
      my_minfreq <- -pi
@@ -108,21 +102,15 @@ mfft_complex <- function(xdata, nfreq=30,  minfreq=NULL, maxfreq=NULL, correctio
 
      # if this is input is a  real vector, there will be positive and negative frequencies 
      # corresponding to the same amplitude
-     # however, better use mfft_real in this case
      OUT <- data.frame(Freq=Freq, Amp=Ampl, Phases=Phase)
 
-     attr(OUT,"class") <- "mfft_deco"
+     class(OUT) <- c("mfft_deco", "data.frame")
      attr(OUT,"nfreq") <- nfreq
      attr(OUT,"data") <- xdata
 
      return(OUT)
 }
 
-
-
-
-#
-
 #
 #                         return(OUTVEC)
 # dyn.load('fmft.so')
diff --git a/R/mfft_real.R b/R/mfft_real.R
index f3dceb70c42a162bfb05befff9bcb3c3b5ddb294..b8f60c3f6e7f6536c55045f22366f011b647f08c 100644
--- a/R/mfft_real.R
+++ b/R/mfft_real.R
@@ -337,7 +337,8 @@ mfft_analyse <- function(xdata, nfreq, fast = TRUE, nu = NULL, minfreq=NULL, max
 #' @param minfreq,maxfreq If provided, bracket the frequencies to be probed. Note this are
 #'        more precisely angular velocities (2\pi / period), expressed in time-inverse units
 #'        with the time resolution encoded in `xdata` if the latter is a time series. 
-#' @param correction:  0: no frequency correction (equivalent to Laskar); 1 : frequency correction using linear approximation ; 2: frequency correction using sythetic data (both are documented in the Sidlichovsky and Nesvorny paper. 
+#' @param correction:  0: no frequency correction (equivalent to Laskar); 1 : frequency correction using linear approximation ; 2: frequency correction using sythetic data; 
+#' 3: second order-correction using synthetic data (all documented in the Sidlichovsky and Nesvorny reference)
 #' @param nfreq is the number of frequencies returned, must be smaller that the length of  xdata.
 #' @param fast (default = TRUE) uses analytical formulations for the crossproducts involving sines and cosines. 
 #'        note: this is not really faster because the bottleneck is actually the goden section search. But more elegant. 
@@ -354,6 +355,8 @@ mfft_analyse <- function(xdata, nfreq, fast = TRUE, nu = NULL, minfreq=NULL, max
 #' @export mfft_real
 mfft_real <- function(xdata, nfreq=5,  minfreq=NULL, maxfreq=NULL, correction = 1 , fast=TRUE){
 
+
+  if (correction == 4) "this correction scheme is currently not implemented for real time series"
   N <- length(xdata)
   N2 <- N/2.
   xdata = stats::as.ts(xdata)
@@ -427,7 +430,7 @@ mfft_real <- function(xdata, nfreq=5,  minfreq=NULL, maxfreq=NULL, correction =
 
     # rename for class compatibility
     names(OUT) <- c("Freq","Amp","Phases")
-    attr(OUT, "class") <- "mfft_deco"
+    class(OUT) <- c("mfft_deco", "data.frame")
     attr(OUT, "data")  <- xdata
     attr(OUT, "nfreq")  <- nfreq
     return(OUT)
diff --git a/R/mfft_support.R b/R/mfft_support.R
index 662afe43ed4fe692e7bb6b45bcd16236fe924427..cb8dfc7839cb3f555f7e9863593c11e5cfbf7615 100644
--- a/R/mfft_support.R
+++ b/R/mfft_support.R
@@ -52,9 +52,9 @@ plot.mfft_deco <- function (M,periods=FALSE,labels=NULL,...){
   plot(abs(M$Freq), abs(M$Amp),'h',ylab="Amplitudes", xlab="",  ...)
   if (periods) {
     frequencies <- pretty(range(M$Freq/(2*pi)))
-    labels <- as.character(1/frequencies)
-    if (0 %in% frequencies) labels[which(frequencies == 0)] = "∞"
-    axis(1, line=3, at=2*pi*frequencies, labels=labels)
+    plabels <- as.character(1/frequencies)
+    if (0 %in% frequencies) plabels[which(frequencies == 0)] = "∞"
+    axis(1, line=3, at=2*pi*frequencies, labels=plabels)
     mtext("Rate", 1, 2)
     mtext("Period", 1, 4)
   } else {
@@ -62,8 +62,8 @@ plot.mfft_deco <- function (M,periods=FALSE,labels=NULL,...){
   }
   points(abs(M$Freq), abs(M$Amp),'p',...)
   if (!is.null(labels)) {
-    yshift <- 0.05*range(M$Amp)
-    text(M$Freq, M$Amp + yshift, labels, srt=90, pos=4)
+    yshift <- 0.05*diff(range(M$Amp))
+    text(M$Freq, M$Amp, labels, srt=90, , adj=-0.4)
   }
 }
 
diff --git a/R/mmfft.R b/R/mmfft.R
new file mode 100644
index 0000000000000000000000000000000000000000..ae445c841d4af782c74cdb4597b38d4a4d1a58f8
--- /dev/null
+++ b/R/mmfft.R
@@ -0,0 +1,72 @@
+#' Moving Modified Fourier Transform
+#'
+#' @param xdata The data provided either as a time series (advised), or as a vector. 
+#' may be complex
+#' @param seglength Length of moving segment. Both xdata length and seglenthm are adviced to be a power of 2 (faster)
+#' @param ...  passed to mmft
+#' @return a `mmfft` object
+#' @note  in the current implementation, the right-hand-side of xdata that is left after an integer division 
+#'        by seglenth is discarded
+#' @author Michel Crucifix
+#' @export mmfft
+mmfft <- function(xdata, seglength = length(xdata) %/% 16, ...){
+  N <- length(xdata)
+  nsections <- (N %/% seglength) 
+  N0 <- nsections * seglength
+#   remainder  <- seglength - N0
+  xdata0 <- matrix(  xdata[1:N0], byrow=FALSE, seglength, nsections)
+  myMfft <- function(x) mfft(x, ...)
+  OUT <- apply(xdata0, 2, myMfft)
+  class(OUT) <- "mmfft"
+  attr(OUT, "nsections") <- nsections
+  attr(OUT, "seglength") <- seglength
+  attr(OUT, "start") <- ifelse(is.ts(xdata), stats::start(xdata), 1)
+  attr(OUT, "deltat") <- ifelse(is.ts(xdata), stats::deltat(xdata), 1)
+  return(OUT)
+}
+  
+#' @rdname mmfft
+plot.mmfft <- function(x){
+  freqrange <- 
+    c(min(sapply(x, function(xs) min(xs$Freq))), 
+      max(sapply(x, function(xs) max(xs$Freq))))
+
+  amprange <- 
+    c(min(sapply(x, function(xs) min(xs$Amp))), 
+      max(sapply(x, function(xs) max(xs$Amp))))
+
+  print(amprange)
+  amp2lwd <- function(amp){ 3*amp/amprange[2] }
+
+  length <- attr(x, "nsections") * 
+            attr(x, "seglength")
+
+  nsec <- length(x)
+  dt <- attr(x,"deltat")
+  tsec <- attr(x,"seglength")*dt
+
+  tstart <- attr(x,"start")
+  tend   <- tstart  + nsec * tsec
+
+  print(freqrange)
+  print(c(tstart, tend))
+  plot(c(tstart, tend), freqrange, type='n', xlab='Time', ylab='Rate')
+ 
+  for (iseq in seq(nsec)){
+    trange <- tstart + c(iseq-1,iseq)*tsec
+    obj <- x[[iseq]]
+    nfreq <- length(obj$Freq)
+    print(obj$Amp)
+    lwds <- sapply(obj$Amp, amp2lwd)
+    print(lwds)
+    for (j in seq(nfreq)){
+      lines(trange, rep(obj$Freq[j],2), lwd=lwds[j])
+    }
+  }
+
+}
+
+
+
+
+
diff --git a/man/mfft.Rd b/man/mfft.Rd
index 7fc6a0c4de07b370016a7b3588953e425ce77ca4..5d229ac6cb71dd630d397f61d14ce365ed94b7a9 100644
--- a/man/mfft.Rd
+++ b/man/mfft.Rd
@@ -4,7 +4,14 @@
 \alias{mfft}
 \title{Modified Fourier transform}
 \usage{
-mfft(xdata, nfreq = 30, minfreq = NULL, maxfreq = NULL, correction = 1)
+mfft(
+  xdata,
+  nfreq = 15,
+  minfreq = NULL,
+  maxfreq = NULL,
+  correction = 1,
+  force_complex = FALSE
+)
 }
 \arguments{
 \item{xdata}{The data provided either as a time series (advised), or as a vector. 
@@ -17,12 +24,11 @@ more precisely angular velocities (2\pi / period), expressed in time-inverse uni
 with the time resolution encoded in `xdata` if the latter is a time series. 
 The computed frequencies are in the range given by minfreq and maxfreq.}
 
-\item{correction}{:
-The parameter is passed on to `mfft_real` or `mfft_complex` depending on
-`xdata` is real or complex, but the meaning of the parameter is not
-quite the same for both. This needs to be fixed. 
-one approach would be to define scalars like 'fft', 'mfft', 'mfft_linear', 
-'mfft_second_order_correction'.}
+\item{force_complex}{: use the complex number implementation even if the time series is real.}
+
+\item{correction:}{0: no frequency correction (equivalent to Laskar); 1 : frequency correction using linear approximation ; 2: frequency correction using sythetic data; 
+3: second order-correction using synthetic data (all documented in the Sidlichovsky and Nesvorny reference). Note: 1 is not implemented for complex time series; 4 is
+not documented for real time series}
 }
 \value{
 a `mfft_deco` object, based on a data.frame with columns "Freq", "Ampl" and "Phases". 
@@ -38,9 +44,6 @@ by M. Crucifix when the input signal is real.
 `mfft` is a wrapper thar redirects the data
 to `mfft_real` or `mfft_complex` depending on the nature of
 the input data. 
-TODO: this needs more work  because the two routines
-do not yet take exactly the same inputs. In particular, the meaning
-the `correction` parameter is not the same 
 TODO: add Laskar reference and say that the correction=0 version
       corresponds to Laskar's routine.
 }
diff --git a/man/mfft_deco.Rd b/man/mfft_deco.Rd
index 1dd89634da5c781c9812f0c3fc97054b0a6c655c..b85616c3c53aa4e8656de358b086addb15fef44e 100644
--- a/man/mfft_deco.Rd
+++ b/man/mfft_deco.Rd
@@ -15,7 +15,7 @@ mfft_anova(M)
 
 \method{as.data.frame}{mfft_deco}(x)
 
-\method{plot}{mfft_deco}(M, periods = FALSE, ...)
+\method{plot}{mfft_deco}(M, periods = FALSE, labels = NULL, ...)
 
 \method{lines}{mfft_deco}(M, ...)
 
@@ -25,6 +25,12 @@ mfft_anova(M)
 \item{M}{: mfft_deco object}
 
 \item{sum}{: TRUE if user wants to sum components in the reconstruction}
+
+\item{periods}{if TRUE will add a lower axis with period labels}
+
+\item{labels}{to be set above the frequency peaks. Can be the output of `attributeTone`}
+
+\item{a}{`mfft_deco` object, typically the output of a `mfft` call.}
 }
 \value{
 list of reconstructed components if sum=FALSE,  full
diff --git a/man/mfft_real.Rd b/man/mfft_real.Rd
index 3d21180787c2e2ec4210eb562d8e260718272cd7..791d76b3b0be396784f60e261d2a21a9f56d01d4 100644
--- a/man/mfft_real.Rd
+++ b/man/mfft_real.Rd
@@ -25,7 +25,8 @@ with the time resolution encoded in `xdata` if the latter is a time series.}
 \item{fast}{(default = TRUE) uses analytical formulations for the crossproducts involving sines and cosines. 
 note: this is not really faster because the bottleneck is actually the goden section search. But more elegant.}
 
-\item{correction:}{0: no frequency correction (equivalent to Laskar); 1 : frequency correction using linear approximation ; 2: frequency correction using sythetic data (both are documented in the Sidlichovsky and Nesvorny paper.}
+\item{correction:}{0: no frequency correction (equivalent to Laskar); 1 : frequency correction using linear approximation ; 2: frequency correction using sythetic data; 
+3: second order-correction using synthetic data (all documented in the Sidlichovsky and Nesvorny reference)}
 }
 \value{
 a `mfft_deco` object, based on a data.frame with columns "Freq", "Ampl" and "Phases".
diff --git a/man/toneCombinations.Rd b/man/toneCombinations.Rd
index 9be4371e80e38c3fc96b926f7ef938e5162009c6..a716e1b81973d234492c0871128497f73c75ee45 100644
--- a/man/toneCombinations.Rd
+++ b/man/toneCombinations.Rd
@@ -21,7 +21,7 @@ explicit label names, up to order 3 (this could be made more flexible is the fut
 }
 \examples{
 omegas <- c( 0.123, 0.14312, 0.33251, 0.554313)
-print(toneCombinations(omegas)
+print(toneCombinations(omegas))
 }
 \author{
 Michel Crucifix
diff --git a/notebook/Untitled.ipynb b/notebook/Untitled.ipynb
index bc54ce5aa632731c24245aabb2d90e0aff772636..49d8e0fc0d2b8f000444be8c5b894f89fa78df09 100644
--- a/notebook/Untitled.ipynb
+++ b/notebook/Untitled.ipynb
@@ -101,7 +101,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 6,
    "id": "eddee22d-bfb4-40bb-a009-2f59a1152172",
    "metadata": {},
    "outputs": [],
@@ -111,7 +111,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 7,
    "id": "795d94ae-46c9-42a4-96d8-9058ff209056",
    "metadata": {},
    "outputs": [],
@@ -124,50 +124,212 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 8,
    "id": "14b06778-5775-4bfc-9f08-a16c9c508c3b",
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "data": {
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAANICAMAAADKOT/pAAAC+lBMVEUAAAABAQECAgIDAwME\nBAQFBQUGBgYHBwcICAgJCQkKCgoLCwsMDAwNDQ0ODg4PDw8QEBARERESEhITExMUFBQVFRUW\nFhYXFxcYGBgZGRkaGhobGxscHBwdHR0eHh4fHx8gICAhISEiIiIjIyMkJCQlJSUmJiYnJyco\nKCgpKSkqKiorKyssLCwtLS0uLi4vLy8wMDAxMTEyMjIzMzM0NDQ1NTU2NjY3Nzc4ODg5OTk6\nOjo7Ozs8PDw9PT0+Pj4/Pz9AQEBBQUFCQkJDQ0NERERFRUVGRkZHR0dISEhJSUlKSkpLS0tM\nTExNTU1OTk5PT09QUFBRUVFSUlJTU1NUVFRVVVVWVlZXV1dYWFhZWVlaWlpbW1tcXFxdXV1e\nXl5fX19gYGBhYWFiYmJjY2NkZGRlZWVmZmZnZ2doaGhpaWlqampra2tsbGxtbW1ubm5vb29w\ncHBxcXFycnJzc3N0dHR1dXV2dnZ3d3d4eHh5eXl6enp7e3t8fHx9fX1+fn5/f3+AgICBgYGC\ngoKDg4OEhISFhYWGhoaHh4eIiIiJiYmKioqLi4uMjIyNjY2Ojo6Pj4+QkJCSkpKTk5OUlJSV\nlZWWlpaXl5eYmJiampqbm5ucnJydnZ2enp6fn5+goKChoaGioqKjo6OkpKSlpaWmpqanp6eo\nqKipqamqqqqrq6usrKytra2urq6vr6+wsLCxsbGysrKzs7O0tLS1tbW2tra3t7e4uLi5ubm6\nurq7u7u8vLy9vb2+vr6/v7/AwMDBwcHCwsLDw8PExMTFxcXGxsbHx8fIyMjJycnKysrLy8vM\nzMzNzc3Ozs7Pz8/Q0NDR0dHS0tLT09PU1NTV1dXW1tbX19fY2NjZ2dna2trb29vc3Nzd3d3e\n3t7f39/g4ODh4eHi4uLj4+Pk5OTl5eXm5ubn5+fo6Ojp6enq6urr6+vs7Ozt7e3u7u7v7+/w\n8PDx8fHy8vLz8/P09PT19fX29vb39/f4+Pj5+fn6+vr7+/v8/Pz9/f3+/v7///9/GytdAAAA\nCXBIWXMAABJ0AAASdAHeZh94AAAgAElEQVR4nO3dCZgU1b2w8dMzAwMy7CC7Ao6COOIaQWWX\nKCARRAxuV3G5CrL4xURZjBo/96CRoF4/l6DxXo17ROMed80VFURMWE1UBAluINsAM+d5vq7u\nns3prl7qX6f6VL+/57ndRVcNdfpmXumuPl2lNADPVNADAMKAkAABhAQIICRAACEBAggJEEBI\ngABCAgQQEiCAkAABhAQIICRAACEBAggJEEBIgABCAgQQEiCAkAABhAQIICRAACEBAggJEEBI\ngABCAgQQEiCAkAABhAQIICRAACEBAggJEEBIgABCAgQQEiCAkAABhAQIICRAACEBAggJEEBI\ngABCAgQQEiCAkAABhAQIICRAACEBAggJEEBIgABCAgQQEiCAkAABhAQIICRAACEBAggJEEBI\ngABCAgQQEiCAkAABhAQIICRAACEBAggJEEBIgABCAgQQEiCAkAABhAQIICRAACEBAggJEEBI\ngABCAgQQEiCAkAABhAQIICRAACEBAggJEEBIgABCAgQQEiCAkAABhAQIICRAACEBAggJEEBI\ngABCAgQQEiCAkAABhAQIICRAACEBAggJEEBIgABCAgQYCGnp+4BVlmb/W+5/SIsVYJnFWf+a\n+x/S26rS930AgirV21n/DCEBP0JIgABCAgQQEiCAkAABhAQIICRAACEBAggJEEBIgABCAgQQ\nEiCAkAABhAQIICRAACEBAuwK6aNZY8bM+sj33QPZsiqkG4uHXHbZkOIbfd8/kCWbQnq06RPO\n3RNNH/N9AEB2bArpsF/F7391uO8DALJjUUg/qHe1Xr9e63ciW30fAZAVi0Jar1Zqff75Wq9Q\n630fAZAVi0La1exZrSdP1vqZZrt8HwGQFYtC0qccX+2EVPXTU3wfAJAdm0Ja0fqMDZMnbzij\n9UrfBwBkx6aQ9AcVqqxMVXzg+/6BLFkVkq76YNCg96t83z2QLbtCih9sAPIOIQECCAkQQEiA\nAEICBBASIICQAAGEBAggJEAAIQECCAkQQEiAAEICBBASIICQAAGEBAggJEAAIQECCAkQQEiA\nAEICBJgPafO69WnPA0RIsIzhkD4+u7NSqrjb6W+5bkZIsIzZkKZHVJcBY8YM7K7UBW7bERIs\nYzSkO9QJH8aXlk9St7psSEiwjNGQjumzu2axevCxLhsSEixjNKRW59Qtz23tsiEhwTJm/0Xq\nu6d2eTj/IiFEDL9HGr0svrTyDPVblw0JCZYxe9RuilI9Bp00bkgvpSZXu2xHSLCM4c+Rlpze\nwfkcqcvpr7luRkiwjPmZDd99viHpzIa1paqebSl+mpCQl/Jnrl31Gy/VukT9kGIrQkJeyp+Q\n6ruLkGAXQgIEEBIgwGRIC9o04LIlIcEyJkNaPbNUtayo5bIlIcEyZl/aPa/GZrQdIcEyht8j\nHUBICCXDIZ15ckabERIsw1E7QAAhAQIICRBASIAAQgIEEBIggJAAAYQECCAkQAAhAQIICRBA\nSIAAQgIEEBIggJAAAYQECCAkQAAhAQIICRBASIAAQgIEEBIggJAAAYQECCAkQAAhAQIICRBA\nSIAAQgIEEBIggJAAAYQECCAkQAAhAQIICRBASIAAQgIEEBIggJAAAYQECCAkQAAhAQIICRBA\nSIAAQgIEEBIggJAAAYQECCAkQAAhAQIICRBASIAAQgIEEBIggJAAAYQECCAkQAAhAQIICRBA\nSIAAQgIEEBIggJAAAYQECCAkQAAhAQIICRBASIAAQgIEEBIggJAAAYQECCAkQAAhAQIICRBA\nSIAAQgIEEBIggJAAAYQECCAkQAAhAQIICRBASIAAQgIEEBIggJAAAYQECCAkQAAhAQIICRBA\nSIAAQgIEEBIggJAAAYQECCAkQAAhAQIICRBASIAAQgIEEBIggJAAAYQECCAkQEAgIX2/eJP7\nBoQEy5gN6furxt+wRd+yl1JH/cNtO0KCZYyG9M1+SqmRD6j9/3NMUZuNLhsSEixjNKRfqPlf\n3l/S5MRKrZ+LTHHZkJBgGaMh9R0evZmkPnKWjzvIZUNCgmWMhrTXRdGbq9R2Z3lqix+t3DB6\nZK0D1ZYUfwUhIS+Z/xfpNLXMWT7+x/8ibf3NrFon8C8S7GL4PdKd//6fkpJxu7R+MXKRy4a8\ntINlzB61662UGn6POnDquOJWG1w2JCRYxuznSN/OOfGa7/UNzZQ65GO37QgJlglkZsM373zp\nvgEhwTLMtQMEEBIggJAAAYQECCAkQAAhAQIICRBASIAAQgIEEBIggJAAAYQECCAkQAAhAQII\nCRBASIAAQgIEEBIggJAAAYQECCAkQAAhAQIICRBASIAAQgIEEBIggJAAAYQECCAkQAAhAQII\nCRBASIAAQgIEEBIggJAAAYQECCAkQAAhAQIICRBASIAAQgIEEBIggJAAAYQECCAkQAAhAQII\nCRBASIAAQgIEEBIggJAAAYQECCAkQAAhAQIICRBASIAAQgIEEBIggJAAAYQECCAkQAAhAQII\nCRBASIAAQgIEEBIggJAAAYQECCAkQAAhAQIICRBASIAAQgIEEBIggJAAAYQECJAJqfqzSonB\n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",
+      "text/plain": [
+       "plot without title"
+      ]
+     },
+     "metadata": {
+      "image/png": {
+       "height": 420,
+       "width": 420
+      }
+     },
+     "output_type": "display_data"
+    }
+   ],
    "source": [
     "plot(M, labels=tones)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 9,
    "id": "612ded56-53be-400c-971a-0fa9b1b762bf",
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<style>\n",
+       ".list-inline {list-style: none; margin:0; padding: 0}\n",
+       ".list-inline>li {display: inline-block}\n",
+       ".list-inline>li:not(:last-child)::after {content: \"\\00b7\"; padding: 0 .5ex}\n",
+       "</style>\n",
+       "<ol class=list-inline><li>2.64933608960962</li><li>2.80151358146866</li><li>3.31110959465901</li><li>3.2802406825405</li><li>3.26211771637853</li><li>2.69742349946146</li></ol>\n"
+      ],
+      "text/latex": [
+       "\\begin{enumerate*}\n",
+       "\\item 2.64933608960962\n",
+       "\\item 2.80151358146866\n",
+       "\\item 3.31110959465901\n",
+       "\\item 3.2802406825405\n",
+       "\\item 3.26211771637853\n",
+       "\\item 2.69742349946146\n",
+       "\\end{enumerate*}\n"
+      ],
+      "text/markdown": [
+       "1. 2.64933608960962\n",
+       "2. 2.80151358146866\n",
+       "3. 3.31110959465901\n",
+       "4. 3.2802406825405\n",
+       "5. 3.26211771637853\n",
+       "6. 2.69742349946146\n",
+       "\n",
+       "\n"
+      ],
+      "text/plain": [
+       "[1] 2.649336 2.801514 3.311110 3.280241 3.262118 2.697423"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
    "source": [
     "Astro$omepre"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 10,
    "id": "00b4c33b-caf2-443c-b1de-cccd7f6773da",
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<style>\n",
+       ".list-inline {list-style: none; margin:0; padding: 0}\n",
+       ".list-inline>li {display: inline-block}\n",
+       ".list-inline>li:not(:last-child)::after {content: \"\\00b7\"; padding: 0 .5ex}\n",
+       "</style>\n",
+       "<ol class=list-inline><li>'p1'</li><li>'p2'</li><li>'p3'</li><li>'p4'</li><li>'p5'</li><li>'p6'</li><li>'o1'</li><li>'o2'</li><li>'o3'</li><li>'o4'</li><li>'o5'</li><li>'o6'</li></ol>\n"
+      ],
+      "text/latex": [
+       "\\begin{enumerate*}\n",
+       "\\item 'p1'\n",
+       "\\item 'p2'\n",
+       "\\item 'p3'\n",
+       "\\item 'p4'\n",
+       "\\item 'p5'\n",
+       "\\item 'p6'\n",
+       "\\item 'o1'\n",
+       "\\item 'o2'\n",
+       "\\item 'o3'\n",
+       "\\item 'o4'\n",
+       "\\item 'o5'\n",
+       "\\item 'o6'\n",
+       "\\end{enumerate*}\n"
+      ],
+      "text/markdown": [
+       "1. 'p1'\n",
+       "2. 'p2'\n",
+       "3. 'p3'\n",
+       "4. 'p4'\n",
+       "5. 'p5'\n",
+       "6. 'p6'\n",
+       "7. 'o1'\n",
+       "8. 'o2'\n",
+       "9. 'o3'\n",
+       "10. 'o4'\n",
+       "11. 'o5'\n",
+       "12. 'o6'\n",
+       "\n",
+       "\n"
+      ],
+      "text/plain": [
+       " [1] \"p1\" \"p2\" \"p3\" \"p4\" \"p5\" \"p6\" \"o1\" \"o2\" \"o3\" \"o4\" \"o5\" \"o6\""
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
    "source": [
     "astroFreqnames"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 11,
    "id": "bf2945fc-cbe0-48c4-85a2-a11cd8403003",
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<style>\n",
+       ".list-inline {list-style: none; margin:0; padding: 0}\n",
+       ".list-inline>li {display: inline-block}\n",
+       ".list-inline>li:not(:last-child)::after {content: \"\\00b7\"; padding: 0 .5ex}\n",
+       "</style>\n",
+       "<ol class=list-inline><li>''</li><li>'-p1 + p3'</li><li>'o1'</li><li>'-p3 + p1 + o1'</li><li>'-p1 + p4'</li><li>'p1'</li><li>'-p1 + p2'</li><li>'-p2 + p3'</li><li>'p2'</li><li>'-p4 + p1 + o1'</li></ol>\n"
+      ],
+      "text/latex": [
+       "\\begin{enumerate*}\n",
+       "\\item ''\n",
+       "\\item '-p1 + p3'\n",
+       "\\item 'o1'\n",
+       "\\item '-p3 + p1 + o1'\n",
+       "\\item '-p1 + p4'\n",
+       "\\item 'p1'\n",
+       "\\item '-p1 + p2'\n",
+       "\\item '-p2 + p3'\n",
+       "\\item 'p2'\n",
+       "\\item '-p4 + p1 + o1'\n",
+       "\\end{enumerate*}\n"
+      ],
+      "text/markdown": [
+       "1. ''\n",
+       "2. '-p1 + p3'\n",
+       "3. 'o1'\n",
+       "4. '-p3 + p1 + o1'\n",
+       "5. '-p1 + p4'\n",
+       "6. 'p1'\n",
+       "7. '-p1 + p2'\n",
+       "8. '-p2 + p3'\n",
+       "9. 'p2'\n",
+       "10. '-p4 + p1 + o1'\n",
+       "\n",
+       "\n"
+      ],
+      "text/plain": [
+       " [1] \"\"              \"-p1 + p3\"      \"o1\"            \"-p3 + p1 + o1\"\n",
+       " [5] \"-p1 + p4\"      \"p1\"            \"-p1 + p2\"      \"-p2 + p3\"     \n",
+       " [9] \"p2\"            \"-p4 + p1 + o1\""
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
    "source": [
     "tones"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 12,
    "id": "509faec7-a7b0-44dc-9ca0-ddd2aba207d3",
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      " [1] 0.000000 0.066177 0.153249 0.087072 0.063090 0.264934 0.015218 0.050960\n",
+      " [9] 0.280151 0.090159\n",
+      " [1]   -Inf  94.94  41.00  72.16  99.59  23.72 412.88 123.30  22.43  69.69\n"
+     ]
+    }
+   ],
    "source": [
     "print(M$Freq,5)\n",
     "print(2*pi/M$Freq, 4)"
@@ -175,20 +337,50 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 13,
    "id": "69c4cf20-605e-402c-8d63-c2fab9f01679",
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "     p1      p2      p3      p4      p5      p6      o1      o2      o3      o4 \n",
+      "0.26493 0.28015 0.33111 0.32802 0.32621 0.26974 0.15325 0.15815 0.11719 0.15506 \n",
+      "     o5      o6 \n",
+      "0.21733 0.15016 \n"
+     ]
+    }
+   ],
    "source": [
     "print(astroFreqs, 5)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 14,
    "id": "2ebf1fb3-9797-4c16-891a-7ffc692623b5",
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "0.06618"
+      ],
+      "text/latex": [
+       "0.06618"
+      ],
+      "text/markdown": [
+       "0.06618"
+      ],
+      "text/plain": [
+       "[1] 0.06618"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
    "source": [
     ".33111-0.26493"
    ]