Using gnoise to create a distribution with bounded values?

Hi there,

I'm trying to do a bit of modeling where I want to make a set of Gaussians built using random values for the positions, widths, and amplitudes. The part that is giving me issues is that the amplitudes must have values between 0 and 1 while the widths need to be larger than 0. I started using the code below, but I think that I need to use a truncated distribution to accomplish what I want (https://en.wikipedia.org/wiki/Truncated_normal_distribution). Any suggestions on how to approach this? Thanks!

Function randomGen(posSTD,gPos,widSTD,gWid,ampSTD,gAmp,nTrials)
   
    Variable posSTD //What's the standard deviation of the Gaussian positions?
    Variable gPos //What's the position of the Gaussian?
    Variable widSTD //What's the standard deviation of the Gaussian widths?
    Variable gWid //What's the width of the Gaussian?
    Variable ampSTD //What's the standard deviation of the Gaussian amplitudes?
    Variable gAmp   //What's the amplitude of the Gaussian?
    Variable nTrials    //How many trials to use to construct noise wave?

    Make/o/n=(nTrials) gnoisePosWave,gnoiseWidWave,gnoiseAmpWave,cdf,pdf
    gnoisePosWave = gnoise(posSTD) + gPos   //Make gaussian noise centered at gPos w/ STD= gaussSTD
    gnoiseWidWave = gnoise(widSTD) + gWid
    gnoiseAmpWave = gnoise(ampSTD) + gAmp
End

Function truncatedGNoise(Variable sigma, Variable mean, Variable minvalue, Variable maxvalue)
    Variable returnval
    do
        returnval = gnoise(sigma)+mean
    while (returnval < minvalue || returnval > maxvalue)
   
    return returnval
end

On the other hand, perhaps you need a different distribution?

The attached graph was made with

make/n=1000 junk
•junk=truncatedGNoise(3,3,0,10)
Make/N=20/O junk_Hist;DelayUpdate
Histogram/B=1 junk,junk_Hist

 

TruncatedGaussian.png (19.57 KB)