Skip to content
Snippets Groups Projects
testAnalysis.py 3.96 KiB
Newer Older
import unittest
import numpy as np
from analysis import Analysis
import matplotlib.pyplot as plt
lorenzennio's avatar
lorenzennio committed
# Parameter to set how far the results can deviate from the true value
# (We use much larger errors here for the initial data than for the
# simualtion, so we allow for a bigger range. We are randomize error
# as oppodes to the actial simualtion.)
lorenzennio's avatar
lorenzennio committed
    A simple test to check the correct results for individual fits
    and for the combined fit.
    The individual fits can only be tested upto absolute values as for
    the correct sign determination the information of all fits is
    required.
        A = Analysis()
lorenzennio's avatar
lorenzennio committed
        #initial parameters
        param = [35] #Vx
lorenzennio's avatar
lorenzennio committed
        t = np.arange(0.3, 0.5, 0.025)
        x = A.xEOM(param, t)
lorenzennio's avatar
lorenzennio committed
        for i in range(0,len(t)):
            err =0.01* np.random.random(size=(2))
            Data.append([[x[i]*(1+err[0]),x[i]*(1-err[1])],
                         [0,0],
                         [0,0],
                         [t[i], t[i]]])
        Data = np.array(Data)

        A.fill(Data)
lorenzennio's avatar
lorenzennio committed
        OUT = A.xFit()
lorenzennio's avatar
lorenzennio committed
        self.assertTrue(np.abs(param[0]) < np.abs(OUT.beta[0]) + sigma*OUT.sd_beta[0])
        self.assertTrue(np.abs(param[0]) > np.abs(OUT.beta[0]) - sigma*OUT.sd_beta[0])

lorenzennio's avatar
lorenzennio committed
        param = [2, 25, 250]

        t = np.arange(0.3, 0.5, 0.025)
        y = A.yEOM(param, t)
lorenzennio's avatar
lorenzennio committed
        Data = []
        for i in range(0,len(t)):
            err =0.01* np.random.random(size=(2))
            Data.append([[0,0],
                         [y[i]*(1+err[0]),y[i]*(1-err[1])],
                         [0,0],
                         [t[i], t[i]]])
        Data = np.array(Data)
lorenzennio's avatar
lorenzennio committed
        A.fill(Data)
        OUT = A.yFit()
lorenzennio's avatar
lorenzennio committed
        self.assertTrue(np.abs(param[0]) < np.abs(OUT.beta[0]) + sigma*OUT.sd_beta[0])
        self.assertTrue(np.abs(param[0]) > np.abs(OUT.beta[0]) - sigma*OUT.sd_beta[0])


lorenzennio's avatar
lorenzennio committed
    def testzFit(self):
        A = Analysis()
        param = [2, 25, 250]

        t = np.arange(0.3, 0.5, 0.025)
        y = A.zEOM(param, t)
lorenzennio's avatar
lorenzennio committed
        for i in range(0,len(t)):
            err =0.01* np.random.random(size=(2))
            Data.append([[0,0],
                         [0,0],
                         [y[i]*(1+err[0]),y[i]*(1-err[1])],
                         [t[i], t[i]]])
lorenzennio's avatar
lorenzennio committed
        OUT = A.zFit()
lorenzennio's avatar
lorenzennio committed
        self.assertTrue(np.abs(param[0]) < np.abs(OUT.beta[0]) + sigma*OUT.sd_beta[0])
        self.assertTrue(np.abs(param[0]) > np.abs(OUT.beta[0]) - sigma*OUT.sd_beta[0])
lorenzennio's avatar
lorenzennio committed


    def testFullFit(self):
        ANA = Analysis()
        w = -2
        vx = 35
        vy = -25
lorenzennio's avatar
lorenzennio committed
        vz = 250
lorenzennio's avatar
lorenzennio committed
        t = np.arange(0.3, 0.5, 0.025)
        x = ANA.xEOM([vx], t)
        y = ANA.yEOM([w,vy,vz], t)
        z = ANA.zEOM([w,vy,vz], t)
        
        Data = []
        for i in range(0,len(t)):
            err =0.01* np.random.random(size=(6))
            Data.append([[x[i]*(1+err[0]),x[i]*(1-err[1])],
                         [y[i]*(1+err[2]),y[i]*(1-err[3])],
                         [z[i]*(1+err[4]),z[i]*(1-err[4])],
                         [t[i], t[i]]])
        Data = np.array(Data)

        ANA.fill(Data)
        ANA.Fit()
        ANA.output()

        self.assertTrue(w  < ANA.results['w'][0]  + sigma*ANA.results['w'][1])
        self.assertTrue(w  > ANA.results['w'][0]  - sigma*ANA.results['w'][1])
        self.assertTrue(vx < ANA.results['vx'][0] + sigma*ANA.results['vx'][1])
        self.assertTrue(vx > ANA.results['vx'][0] - sigma*ANA.results['vx'][1])
        self.assertTrue(vy < ANA.results['vy'][0] + sigma*ANA.results['vy'][1])
        self.assertTrue(vy > ANA.results['vy'][0] - sigma*ANA.results['vy'][1])
        self.assertTrue(vz < ANA.results['vz'][0] + sigma*ANA.results['vz'][1])
        self.assertTrue(vz > ANA.results['vz'][0] - sigma*ANA.results['vz'][1])

if __name__ == "__main__":
    unittest.main()