Exemplo n.º 1
0
def plot_and_test(args, xarr=np.linspace(-25,25,1000), moments=moments, nsigcut=None):
    arrargs = np.array([0] + list(args))

    gg = gaussian(xarr, *args)

    noise = np.random.randn(1000)

    moments_nonoise = np.array(moments(xarr,gg,veryverbose=True))

    fmtstring = "h: %6.2f a: %6.2f x: %6.2f w: %6.2f "
    print("No noise")
    print("Moments:    "+fmtstring % tuple(moments_nonoise) )
    print("Difference: "+fmtstring % tuple(moments_nonoise-arrargs))
    pylab.subplot(2,2,1)
    pylab.plot(xarr,gg,'k')
    pylab.plot(xarr,gaussian(xarr,*moments_nonoise[1:]),'r')
    print("diff^2: %0.2f" % (((gg-gaussian(xarr,*moments_nonoise[1:]))**2).sum()))

    def plottest_withnoise(noiseamp, spnum, xarr=xarr, gg=gg, noise=noise):
        fitspec = gg+noiseamp*noise
        moments_noise1 = np.array(moments(xarr,fitspec,veryverbose=True,nsigcut=nsigcut))
        print("Noise = %i%% of peak" % (round(noiseamp/args[0]*100)))
        print("Moments:    "+fmtstring % tuple(moments_noise1) )
        print("Difference: "+fmtstring % tuple(moments_noise1-arrargs))
        pylab.subplot(2,2,spnum)
        pylab.plot(xarr,fitspec,'k')
        pylab.plot(xarr,gaussian(xarr,*moments_noise1[1:]),'r')
        print("chi^2: %0.2f" % ( (((fitspec-gaussian(xarr,*moments_noise1[1:]))**2) / ((noise*noiseamp)**2)).sum() / len(noise) ),)
        print("correct chi^2: %0.2f" % ( (((fitspec-gg)**2) / ((noise*noiseamp)**2)).sum() / len(noise) ))

    for noiseamp,spnum in zip((0.5,2,5),(2,3,4)):
        plottest_withnoise(noiseamp, spnum)
Exemplo n.º 2
0
def voigt_moments(self, *args, **kwargs):
    """
    Get the spectral moments from the moments package.  Use the gaussian width
    for the lorentzian width (not a great guess!)
    """
    m = moments(*args,**kwargs)
    return list(m) + [m[-1]]
Exemplo n.º 3
0
 def plottest_withnoise(noiseamp, spnum, xarr=xarr, gg=gg, noise=noise):
     fitspec = gg+noiseamp*noise
     moments_noise1 = np.array(moments(xarr,fitspec,veryverbose=True,nsigcut=nsigcut))
     print("Noise = %i%% of peak" % (round(noiseamp/args[0]*100)))
     print("Moments:    "+fmtstring % tuple(moments_noise1) )
     print("Difference: "+fmtstring % tuple(moments_noise1-arrargs))
     pylab.subplot(2,2,spnum)
     pylab.plot(xarr,fitspec,'k')
     pylab.plot(xarr,gaussian(xarr,*moments_noise1[1:]),'r')
     print("chi^2: %0.2f" % ( (((fitspec-gaussian(xarr,*moments_noise1[1:]))**2) / ((noise*noiseamp)**2)).sum() / len(noise) ),)
     print("correct chi^2: %0.2f" % ( (((fitspec-gg)**2) / ((noise*noiseamp)**2)).sum() / len(noise) ))
Exemplo n.º 4
0
 def plottest_withnoise(noiseamp, spnum, xarr=xarr, gg=gg, noise=noise):
     fitspec = gg + noiseamp * noise
     moments_noise1 = np.array(
         moments(xarr, fitspec, veryverbose=True, nsigcut=nsigcut))
     print("Noise = %i%% of peak" % (round(noiseamp / args[0] * 100)))
     print("Moments:    " + fmtstring % tuple(moments_noise1))
     print("Difference: " + fmtstring % tuple(moments_noise1 - arrargs))
     pylab.subplot(2, 2, spnum)
     pylab.plot(xarr, fitspec, 'k')
     pylab.plot(xarr, gaussian(xarr, *moments_noise1[1:]), 'r')
     print(
         "chi^2: %0.2f" %
         ((((fitspec - gaussian(xarr, *moments_noise1[1:]))**2) /
           ((noise * noiseamp)**2)).sum() / len(noise)), )
     print("correct chi^2: %0.2f" %
           ((((fitspec - gg)**2) /
             ((noise * noiseamp)**2)).sum() / len(noise)))
Exemplo n.º 5
0
def plot_and_test(args,
                  xarr=np.linspace(-25, 25, 1000),
                  moments=moments,
                  nsigcut=None):
    arrargs = np.array([0] + list(args))

    gg = gaussian(xarr, *args)

    noise = np.random.randn(1000)

    moments_nonoise = np.array(moments(xarr, gg, veryverbose=True))

    fmtstring = "h: %6.2f a: %6.2f x: %6.2f w: %6.2f "
    print("No noise")
    print("Moments:    " + fmtstring % tuple(moments_nonoise))
    print("Difference: " + fmtstring % tuple(moments_nonoise - arrargs))
    pylab.subplot(2, 2, 1)
    pylab.plot(xarr, gg, 'k')
    pylab.plot(xarr, gaussian(xarr, *moments_nonoise[1:]), 'r')
    print("diff^2: %0.2f" %
          (((gg - gaussian(xarr, *moments_nonoise[1:]))**2).sum()))

    def plottest_withnoise(noiseamp, spnum, xarr=xarr, gg=gg, noise=noise):
        fitspec = gg + noiseamp * noise
        moments_noise1 = np.array(
            moments(xarr, fitspec, veryverbose=True, nsigcut=nsigcut))
        print("Noise = %i%% of peak" % (round(noiseamp / args[0] * 100)))
        print("Moments:    " + fmtstring % tuple(moments_noise1))
        print("Difference: " + fmtstring % tuple(moments_noise1 - arrargs))
        pylab.subplot(2, 2, spnum)
        pylab.plot(xarr, fitspec, 'k')
        pylab.plot(xarr, gaussian(xarr, *moments_noise1[1:]), 'r')
        print(
            "chi^2: %0.2f" %
            ((((fitspec - gaussian(xarr, *moments_noise1[1:]))**2) /
              ((noise * noiseamp)**2)).sum() / len(noise)), )
        print("correct chi^2: %0.2f" %
              ((((fitspec - gg)**2) /
                ((noise * noiseamp)**2)).sum() / len(noise)))

    for noiseamp, spnum in zip((0.5, 2, 5), (2, 3, 4)):
        plottest_withnoise(noiseamp, spnum)
Exemplo n.º 6
0
 def moments(self, *args, **kwargs):
     """
     Get the spectral moments from the moments package
     """
     return moments(*args,**kwargs)
Exemplo n.º 7
0
 def moments(self, *args, **kwargs):
     """
     Get the spectral moments from the moments package
     """
     return moments(*args, **kwargs)