Commit 3e595063 authored by Antonino D'Anna's avatar Antonino D'Anna

Added find_first and find_all routines. Cleaned fit_scan

parent deee6ba8
function find_first(model,xdata,ydata,npar;
condition,
tmin = 1, tmax = lastindex(xdata),
W = Float64[],
logfile = FitRoutines.NoPrint(),
wpm = Dict{Int64,Vector{Float64}}(),
C = Matrix{Float64}(undef, 0,0),
guess = fill(0.5, npar),
corr = false)
println(logfile,"Starting fits: find first mode")
Printf.@printf logfile "Scanning region [%.12e, %.12e]\n" xdata[tmin[1]] xdata[tmax[1]]
ranges = Ranges(tmin,tmax)
println(logfile, ranges)
flush(logfile)
for r in ranges
length(r)<=npar && continue;
println(logfile, "="^80, "\n")
Printf.@printf logfile "Fit range [%.5e, %.5e]\n" xdata[r[1]] xdata[r[end]]
fit = try
fit_routine(model,xdata[r],ydata[r],npar, W=W,C=C,
guess=guess,logfile=logfile, corr=corr)
catch e
Printf.@printf logfile "Error during fit routine: %s\n" e.msg
@error "Error in fit range [%.5e,%.5e]\n" xdata[r[1]] xdata[r[end]]
continue;
end
condition(fit) && return FitRes(;fit..., range = (xdata[r[1]], xdata[r[end]]))
flush(logfile)
end
return nothing
end
function find_all(model,xdata,ydata,npar;
condition,
tmin = 1, tmax = lastindex(xdata),
W = Float64[],
logfile = FitRoutines.NoPrint(),
wpm = Dict{Int64,Vector{Float64}}(),
C = Matrix{Float64}(undef, 0,0),
guess = fill(0.5, npar),
corr = false)
println(logfile,"Starting fits: find first mode")
Printf.@printf logfile "Scanning region [%.12e, %.12e]\n" xdata[tmin[1]] xdata[tmax[1]]
ranges = Ranges(tmin,tmax)
println(logfile, ranges)
flush(logfile)
res = FitRes[];
for r in reverse(ranges)
length(r)<=npar && continue;
println(logfile, "="^80, "\n")
Printf.@printf logfile "Fit range [%.5e, %.5e]\n" xdata[r[1]] xdata[r[end]]
fit = try
fit_routine(model,xdata[r],ydata[r],npar, W=W,C=C,
guess=guess,logfile=logfile, corr=corr)
catch e
Printf.@printf logfile "Error during fit routine: %s\n" e.msg
@error "Error in fit range [%.5e,%.5e]\n" xdata[r[1]] xdata[r[end]]
continue;
end
condition(fit) && push!(res,FitRes(;fit..., range = (xdata[r[1]], xdata[r[end]])))
flush(logfile)
end
return res
end
......@@ -14,9 +14,7 @@ function fit_scan(model,xdata,ydata,npar;
corr = false)
println(logfile,"Starting Fit Scan")
Printf.@printf logfile "Scanning region [%.12e, %.12e]\n" xdata[1] xdata[end]
vdata = Vector{NamedTuple}() ## vector of fit results
Printf.@printf logfile "Scanning region [%.12e, %.12e]\n" xdata[tmin[1]] xdata[tmax[1]]
ranges = Ranges(tmin,tmax)
println(logfile, ranges)
flush(logfile)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment