Example #1
0
def fit_signal(signal,l):
    x1=np.linspace(0,1,len(signal))
    
    piecewiseModel=Model(piecewise_prob)
    piecewiseModel.set_param_hint('l',     value=1,vary=False)
    piecewiseModel.set_param_hint('C',   vary=True,  value=.1,min=0,max=1)
    piecewiseModel.make_params()
    
    res=piecewiseModel.fit(signal,x=x1,weights=np.sin(1.5*x1)+1.5)
    return res
def lmfit_gaussian(x_array, y_array, err_array, x_boundarys):

    # Find indeces for six points in spectrum
    idcsW = np.searchsorted(x_array, x_boundarys)

    # Emission region
    idcsEmis = (x_array[idcsW[2]] <= x_array) & (x_array <= x_array[idcsW[3]])

    # Return left and right continua merged in one array
    idcsCont = (((x_array[idcsW[0]] <= x_array) &
                 (x_array <= x_array[idcsW[1]])) |
                ((x_array[idcsW[4]] <= x_array) &
                 (x_array <= x_array[idcsW[5]]))).squeeze()

    emisWave, emisFlux = x_array[idcsEmis], y_array[idcsEmis]
    contWave, contFlux = x_array[idcsCont], y_array[idcsCont]
    idx_peak = np.argmax(emisFlux)

    fit_model = Model(linear_model, prefix=f'{lineLabel}_cont_')
    fit_model.set_param_hint(f'{lineLabel}_cont_slope', **{
        'value': 0,
        'vary': False
    })
    fit_model.set_param_hint(f'{lineLabel}_cont_intercept', **{
        'value': contFlux.mean(),
        'vary': False
    })

    fit_model += Model(gaussian_model, prefix=f'{lineLabel}_')
    fit_model.set_param_hint(f'{lineLabel}_amp',
                             value=emisFlux[idx_peak] - contFlux.mean())
    fit_model.set_param_hint(f'{lineLabel}_center', value=emisWave[idx_peak])
    fit_model.set_param_hint(f'{lineLabel}_sigma', value=1.0)

    x_fit = x_array[idcsEmis + idcsCont]
    y_fit = y_array[idcsEmis + idcsCont]
    w_fit = 1.0 / err_array[idcsEmis + idcsCont]

    fit_params = fit_model.make_params()
    obs_fit_output = fit_model.fit(y_fit, fit_params, x=x_fit, weights=w_fit)

    # amp = obs_fit_output.params[f"{lineLabel}_amp"].value
    mu = obs_fit_output.params[f"{lineLabel}_center"].value
    sigma = obs_fit_output.params[f"{lineLabel}_sigma"].value

    mu_err = obs_fit_output.params[f"{lineLabel}_center"].stderr
    sigma_err = obs_fit_output.params[f"{lineLabel}_sigma"].stderr

    x_obs, y_obs = obs_fit_output.userkws['x'], obs_fit_output.data
    wave_obs = np.linspace(x_obs[0], x_obs[-1], 500)
    flux_comps_obs = obs_fit_output.eval_components(x=wave_obs)
    flux_obs = flux_comps_obs.get(f'{lineLabel}_cont_',
                                  0.0) + flux_comps_obs[f'{lineLabel}_']

    return x_fit, y_fit, wave_obs, flux_obs, mu, sigma, mu_err, sigma_err
def make_model(num):
    pref = "f{0}_".format(num)

    model = Model(Lorexponential, prefix=pref)

    model.set_param_hint(pref + "simetricL", value=0.01)
    model.set_param_hint(pref + "asymetricL", value=0.01)
    model.set_param_hint(pref + "center", value=paramos[num]["center"])
    model.set_param_hint(pref + "sigma", value=paramos[num]["sigma"])
    model.set_param_hint(pref + "C", value=0.001)

    return model
Example #4
0
y1=smooth_signal(y1,10**3)
y1=np.real(sharpen_filter(y1))
plt.clf()
plt.plot(y1,'b')
plt.savefig("".join([sys.argv[1],"blak"])+".png")


print(sys.argv[1]+": Coverage OK ("+str(coveragePercentage)+" x).")
x1=np.linspace(0,genomeLen-1,len(y1))

### Korem fit

# fit piecewise using least squares (LM)

piecewiseModel=Model(piecewiseLinear)
piecewiseModel.set_param_hint('Ol',     value=0.5*genomeLen,vary=True,min=0,max=genomeLen)
#piecewiseModel.set_param_hint('Tl',     value=0.6*genomeLen,vary=True,min=0,max=genomeLen)
piecewiseModel.set_param_hint('Tc',     value = np.median(np.log2(y1)), vary=True)
piecewiseModel.set_param_hint('Oc',     value = np.median(np.log2(y1)), vary=True)
piecewiseModel.set_param_hint('delta',  value = 0.545*genomeLen, min=0.45*genomeLen, max=0.55*genomeLen, vary=True)#,expr='Tl-Ol if Tl-Ol > 0 else Ol-Tl')

#piecewiseModel.set_param_hint('Tl',     value=0.6*genomeLen,vary=True,min=0,max=genomeLen,expr='mod(Ol+delta,genLen)')
piecewiseModel.set_param_hint('genLen',   vary=False,  value=genomeLen)
piecewiseModel.make_params()

result=piecewiseModel.fit(np.log2(y1),x=x1)
resR2=R2(result.best_fit,y1)
# var=np.var(abs(np.log2(y1)-result.best_fit), dtype=np.float64)
#med=np.median(np.log2(y1))

# y1=[value for value in y1 if (np.log2(value) < med+1.45*np.sqrt(var)) & (np.log2(value)>med-1.45*np.sqrt(var))]
Example #5
0
        err_voxel_norm = flux_err / norm_flux
        obsLineWaves = wave_regions * (1 + z_objs[i])
        idcsEmis, idcsCont = obsLm.define_masks(wave, flux_voxel_norm,
                                                obsLineWaves)

        emisWave, emisFlux = wave[idcsEmis], flux_voxel_norm[idcsEmis]
        contWave, contFlux = wave[idcsCont], flux_voxel_norm[idcsCont]
        obsLm.line_properties(emisWave,
                              emisFlux,
                              contWave,
                              contFlux,
                              bootstrap_size=5000)

        fit_model = Model(linear_model, prefix=f'{lineLabel}_cont_')
        fit_model.set_param_hint(f'{lineLabel}_cont_slope', **{
            'value': obsLm.m_cont,
            'vary': False
        })
        fit_model.set_param_hint(f'{lineLabel}_cont_intercept', **{
            'value': obsLm.n_cont,
            'vary': False
        })

        fit_model += Model(gaussian_model, prefix=f'{lineLabel}_')
        fit_model.set_param_hint(f'{lineLabel}_amplitude',
                                 value=obsLm.peak_flux - obsLm.cont)
        fit_model.set_param_hint(f'{lineLabel}_center', value=obsLm.peak_wave)
        fit_model.set_param_hint(f'{lineLabel}_sigma', value=1.0)

        x_array = wave[idcsEmis + idcsCont]
        y_array = flux_voxel_norm[idcsEmis + idcsCont]
        w_array = 1.0 / np.sqrt(err_voxel_norm[idcsEmis + idcsCont])