#!/bin/bash

# Analyze 2d histogram to get mean and rms values from line-outs. 

\rm xyValues.* xyLines.sdds

# Make a distribution of 10k x and y values
# x: mean=2mm, sigma=2mm
# y: mean=-3mm, sigma=1mm

sddssampledist xyValues.sdds -samples=10000 \
    -gaussian=column=x,mean=0.002,sigma=0.002,units=m \
    -uniform=column=y,minimum=-0.003,maximum=0.001,units=m 

# First, compute true mean and sigma values
sddsprocess xyValues.sdds -pipe=out \
    -process=[xy],ave,%sMean \
    -process=[xy],stand,%sStDev \
    | sddsprintout -pipe -param=x*,end -param=y*,end

# Make a 100x100 2d histogram
# Reorganize it into 100 columns of 100 values
# This simulates a video frame with 100 horizontal lines
# Analyzing these horizontal lines gives information x distribution
sddshist2d xyValues.sdds -pipe=out -column=x,y -xparam=100,-0.01,0.01 -yparam=100,-0.01,0.01 \
    | sddsbreak -pipe -rowlimit=100 \
    | sddstranspose -pipe -noOldColumnNames \
    | sddscombine -merge -pipe \
    | sddsprocess -pipe \
    "-define=column,Index,i_row,type=long"  \
    | sddsrowstats -pipe -sum=ColumnSum,Column??? \
    | sddsprocess -pipe \
    "-define=col,x,Index xInterval * xMinimum +,units=m" \
    -process=x,ave,xMean,weight=ColumnSum \
    -process=x,stand,xStDev,weight=ColumnSum \
    | sddsprintout -pipe -param 

# Analyze vertical distribution

sddshist2d xyValues.sdds -pipe=out -column=y,x -xparam=100,-0.01,0.01 -yparam=100,-0.01,0.01 \
    | sddsbreak -pipe -rowlimit=100 \
    | sddstranspose -pipe -noOldColumnNames \
    | sddscombine -merge -pipe \
    | sddsprocess -pipe \
    "-define=column,Index,i_row,type=long"  \
    | sddsrowstats -pipe -sum=ColumnSum,Column??? \
    | sddsprocess -pipe \
    "-define=col,y,Index yInterval * yMinimum +,units=m" \
    -process=y,ave,yMean,weight=ColumnSum \
    -process=y,stand,yStDev,weight=ColumnSum \
    | sddsprintout -pipe -param 

