Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
F
FitRoutines
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Antonino D'Anna
FitRoutines
Commits
ba065dc5
Commit
ba065dc5
authored
May 20, 2026
by
Antonino D'Anna
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Moved Ranges type to type.jl
parent
871b7b0c
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
98 additions
and
79 deletions
+98
-79
src/fit_scan.jl
src/fit_scan.jl
+2
-79
src/types.jl
src/types.jl
+96
-0
No files found.
src/fit_scan.jl
View file @
ba065dc5
using
EnumClasses
,
Printf
abstract type
AbstractUpdate
end
struct
ALL
<:
AbstractUpdate
end
struct
TMAX_SPAN
<:
AbstractUpdate
end
struct
TMIN_SPAN
<:
AbstractUpdate
end
struct
TMINMAX_SPAN
<:
AbstractUpdate
end
mutable struct
Ranges
{
T
<:
AbstractUpdate
}
tmin
tmax
is
ie
step
Ranges
(
tmin
,
tmax
,
step
=
1
)
=
Ranges
(
tmin
,
tmax
,
step
,
eltype
(
tmin
),
eltype
(
tmax
))
Ranges
(
tmin
::
T
,
tmax
::
U
,
step
,
::
Type
{
T
},
::
Type
{
U
})
where
{
T
<:
Number
,
U
<:
Number
}
=
new
{
ALL
}(
tmin
,
tmax
,
tmin
,
tmax
,
step
)
Ranges
(
tmin
::
T
,
tmax
::
U
,
step
,
::
Type
{
S
},
::
Type
{
V
})
where
{
T
,
U
,
S
<:
Number
,
V
<:
Number
}
=
new
{
TMINMAX_SPAN
}(
tmin
,
tmax
,
tmin
[
1
],
tmax
[
1
],
step
)
Ranges
(
tmin
::
T
,
tmax
::
U
,
step
,
::
Type
{
T
},
::
Type
{
V
})
where
{
T
<:
Number
,
U
,
V
<:
Number
}
=
new
{
TMAX_SPAN
}(
tmin
,
tmax
,
tmin
,
tmax
[
1
],
step
)
Ranges
(
tmin
::
T
,
tmax
::
U
,
step
,
::
Type
{
V
},
::
Type
{
U
})
where
{
T
,
U
<:
Number
,
V
<:
Number
}
=
new
{
TMIN_SPAN
}(
tmin
,
tmax
,
tmin
[
1
],
tmax
,
step
)
end
function
Base
.
iterate
(
r
::
Ranges
{
T
})
where
T
<:
AbstractUpdate
r
.
is
=
r
.
tmin
[
1
]
r
.
ie
=
r
.
tmax
[
1
]
return
range
(
r
.
is
,
r
.
ie
,
step
=
r
.
step
),
1
end
function
Base
.
iterate
(
r
::
Ranges
{
ALL
},
state
)
if
r
.
ie
-
r
.
is
<=
1
r
.
ie
-=
1
r
.
ie
==
r
.
tmin
&&
return
nothing
r
.
is
=
r
.
tmin
return
range
(
r
.
is
,
r
.
ie
,
step
=
r
.
step
),
state
+
1
end
r
.
is
+=
1
return
range
(
r
.
is
,
r
.
ie
,
step
=
r
.
step
),
state
+
1
end
function
Base
.
iterate
(
r
::
Ranges
{
TMAX_SPAN
},
state
)
if
r
.
ie
-
r
.
is
<=
1
i
=
findlast
(
r
.
ie
.==
r
.
tmax
)
i
==
lastindex
(
r
.
tmax
)
&&
return
nothing
r
.
is
=
r
.
tmin
r
.
ie
=
r
.
tmax
[
i
+
1
]
return
range
(
r
.
is
,
r
.
ie
,
step
=
r
.
step
),
state
+
1
end
r
.
is
+=
1
return
range
(
r
.
is
,
r
.
ie
,
step
=
r
.
step
),
state
+
1
end
function
Base
.
iterate
(
r
::
Ranges
{
TMIN_SPAN
},
state
)
if
r
.
ie
-
r
.
is
<=
1
i
=
findlast
(
r
.
is
.==
r
.
tmin
)
i
==
lastindex
(
r
.
tmin
)
&&
return
nothing
r
.
is
=
r
.
tmin
[
i
+
1
]
r
.
ie
=
r
.
tmax
return
range
(
r
.
is
,
r
.
ie
,
step
=
r
.
step
),
state
+
1
end
r
.
ie
-=
1
return
range
(
r
.
is
,
r
.
ie
,
step
=
r
.
step
),
state
+
1
end
function
Base
.
iterate
(
r
::
Ranges
{
TMINMAX_SPAN
},
state
)
if
r
.
is
==
r
.
tmin
[
end
]
r
.
ie
==
r
.
tmax
[
end
]
&&
return
nothing
i
=
findlast
(
r
.
ie
==
t
for
t
in
r
.
tmax
)
r
.
ie
=
r
.
tmax
[
i
+
1
]
r
.
is
=
r
.
tmin
[
1
]
else
i
=
findlast
(
r
.
is
==
t
for
t
in
r
.
tmin
)
r
.
is
=
r
.
tmin
[
i
+
1
]
end
return
range
(
r
.
is
,
r
.
ie
,
step
=
r
.
step
),
state
end
Base
.
IteratorSize
(
::
Ranges
{
T
})
where
T
<:
AbstractUpdate
=
Base
.
SizeUnknown
()
@doc
raw
"""
@doc
raw
"""
fit_scan(model,xdata,ydata,npar;
fit_scan(model,xdata,ydata,npar;
tmin=1, tmax=lastindex(xdata), kwargs...)
tmin=1, tmax=lastindex(xdata), kwargs...)
...
@@ -93,10 +15,11 @@ function fit_scan(model,xdata,ydata,npar;
...
@@ -93,10 +15,11 @@ function fit_scan(model,xdata,ydata,npar;
println
(
logfile
,
"Starting Fit Scan"
)
println
(
logfile
,
"Starting Fit Scan"
)
Printf
.
@printf
logfile
"Scanning region [%.12e, %.12e]
\n
"
xdata
[
1
]
xdata
[
end
]
Printf
.
@printf
logfile
"Scanning region [%.12e, %.12e]
\n
"
xdata
[
1
]
xdata
[
end
]
Printf
.
@printf
logfile
"Scanning update %s
\n
"
string
(
update
)
vdata
=
Vector
{
NamedTuple
}()
## vector of fit results
vdata
=
Vector
{
NamedTuple
}()
## vector of fit results
ranges
=
Ranges
(
tmin
,
tmax
)
ranges
=
Ranges
(
tmin
,
tmax
)
println
(
logfile
,
ranges
)
flush
(
logfile
)
fits
=
Vector
{
Union
{
FitRes
,
Missing
}}(
missing
,
length
(
ranges
))
fits
=
Vector
{
Union
{
FitRes
,
Missing
}}(
missing
,
length
(
ranges
))
for
(
idx
,
r
)
in
enumerate
(
ranges
)
for
(
idx
,
r
)
in
enumerate
(
ranges
)
length
(
r
)
<=
npar
&&
continue
;
length
(
r
)
<=
npar
&&
continue
;
...
...
src/types.jl
View file @
ba065dc5
...
@@ -77,3 +77,99 @@ format(::NoPrint,f,x...) = nothing
...
@@ -77,3 +77,99 @@ format(::NoPrint,f,x...) = nothing
compute_error_for_logging
(
logfile
,
p
)
=
uwerr
.
(
p
)
compute_error_for_logging
(
logfile
,
p
)
=
uwerr
.
(
p
)
compute_error_for_logging
(
logfile
::
NoPrint
,
p
)
=
nothing
compute_error_for_logging
(
logfile
::
NoPrint
,
p
)
=
nothing
## Ranges
using
Printf
abstract type
AbstractUpdate
end
struct
ALL
<:
AbstractUpdate
end
struct
TMAX_SPAN
<:
AbstractUpdate
end
struct
TMIN_SPAN
<:
AbstractUpdate
end
struct
TMINMAX_SPAN
<:
AbstractUpdate
end
mutable struct
Ranges
{
T
<:
AbstractUpdate
}
tmin
tmax
is
ie
step
Ranges
(
tmin
,
tmax
,
step
=
1
)
=
Ranges
(
tmin
,
tmax
,
step
,
eltype
(
tmin
),
eltype
(
tmax
))
Ranges
(
tmin
::
T
,
tmax
::
U
,
step
,
::
Type
{
T
},
::
Type
{
U
})
where
{
T
<:
Number
,
U
<:
Number
}
=
new
{
ALL
}(
tmin
,
tmax
,
tmin
,
tmax
,
step
)
Ranges
(
tmin
::
T
,
tmax
::
U
,
step
,
::
Type
{
S
},
::
Type
{
V
})
where
{
T
,
U
,
S
<:
Number
,
V
<:
Number
}
=
new
{
TMINMAX_SPAN
}(
tmin
,
tmax
,
tmin
[
1
],
tmax
[
1
],
step
)
Ranges
(
tmin
::
T
,
tmax
::
U
,
step
,
::
Type
{
T
},
::
Type
{
V
})
where
{
T
<:
Number
,
U
,
V
<:
Number
}
=
new
{
TMAX_SPAN
}(
tmin
,
tmax
,
tmin
,
tmax
[
1
],
step
)
Ranges
(
tmin
::
T
,
tmax
::
U
,
step
,
::
Type
{
V
},
::
Type
{
U
})
where
{
T
,
U
<:
Number
,
V
<:
Number
}
=
new
{
TMIN_SPAN
}(
tmin
,
tmax
,
tmin
[
1
],
tmax
,
step
)
end
function
Base
.
iterate
(
r
::
Ranges
{
T
})
where
T
<:
AbstractUpdate
r
.
is
=
r
.
tmin
[
1
]
r
.
ie
=
r
.
tmax
[
1
]
return
range
(
r
.
is
,
r
.
ie
,
step
=
r
.
step
),
1
end
function
Base
.
iterate
(
r
::
Ranges
{
ALL
},
state
)
if
r
.
ie
-
r
.
is
<=
1
r
.
ie
-=
1
r
.
ie
==
r
.
tmin
&&
return
nothing
r
.
is
=
r
.
tmin
return
range
(
r
.
is
,
r
.
ie
,
step
=
r
.
step
),
state
+
1
end
r
.
is
+=
1
return
range
(
r
.
is
,
r
.
ie
,
step
=
r
.
step
),
state
+
1
end
function
Base
.
iterate
(
r
::
Ranges
{
TMAX_SPAN
},
state
)
if
r
.
ie
-
r
.
is
<=
1
i
=
findlast
(
r
.
ie
.==
r
.
tmax
)
i
==
lastindex
(
r
.
tmax
)
&&
return
nothing
r
.
is
=
r
.
tmin
r
.
ie
=
r
.
tmax
[
i
+
1
]
return
range
(
r
.
is
,
r
.
ie
,
step
=
r
.
step
),
state
+
1
end
r
.
is
+=
1
return
range
(
r
.
is
,
r
.
ie
,
step
=
r
.
step
),
state
+
1
end
function
Base
.
iterate
(
r
::
Ranges
{
TMIN_SPAN
},
state
)
if
r
.
ie
-
r
.
is
<=
1
i
=
findlast
(
r
.
is
.==
r
.
tmin
)
i
==
lastindex
(
r
.
tmin
)
&&
return
nothing
r
.
is
=
r
.
tmin
[
i
+
1
]
r
.
ie
=
r
.
tmax
return
range
(
r
.
is
,
r
.
ie
,
step
=
r
.
step
),
state
+
1
end
r
.
ie
-=
1
return
range
(
r
.
is
,
r
.
ie
,
step
=
r
.
step
),
state
+
1
end
function
Base
.
iterate
(
r
::
Ranges
{
TMINMAX_SPAN
},
state
)
if
r
.
is
==
r
.
tmin
[
end
]
r
.
ie
==
r
.
tmax
[
end
]
&&
return
nothing
i
=
findlast
(
r
.
ie
==
t
for
t
in
r
.
tmax
)
r
.
ie
=
r
.
tmax
[
i
+
1
]
r
.
is
=
r
.
tmin
[
1
]
else
i
=
findlast
(
r
.
is
==
t
for
t
in
r
.
tmin
)
r
.
is
=
r
.
tmin
[
i
+
1
]
end
return
range
(
r
.
is
,
r
.
ie
,
step
=
r
.
step
),
state
end
Base
.
IteratorSize
(
::
Ranges
{
T
})
where
T
<:
AbstractUpdate
=
Base
.
HasSize
()
function
Base
.
length
(
r
::
Ranges
{
ALL
})
L
=
r
.
tmax
-
r
.
tmin
+
1
div
(
L
*
(
L
-
1
),
2
)
end
Base
.
length
(
r
::
Ranges
{
TMIN_SPAN
})
=
sum
(
r
.
tmax
<=
t
?
0
:
r
.
tmax
-
t
for
t
in
r
.
tmin
)
Base
.
length
(
r
::
Ranges
{
TMAX_SPAN
})
=
sum
(
t
<=
r
.
tmin
?
0
:
t
-
r
.
tmin
for
t
in
r
.
tmax
)
Base
.
length
(
r
::
Ranges
{
TMINMAX_SPAN
})
=
sum
(
T
<=
t
?
0
:
T
-
t
for
T
in
r
.
tmax
,
t
in
r
.
tmin
)
Base
.
print
(
io
::
IO
,
r
::
Ranges
{
TMIN_SPAN
})
=
@printf
io
"Tmin span in [%d,%d], tmax start in %d"
r
.
tmin
[
1
]
r
.
tmin
[
end
]
r
.
tmax
Base
.
print
(
io
::
IO
,
r
::
Ranges
{
TMAX_SPAN
})
=
@printf
io
"Tmax span in [%d,%d], tmin starts in %d"
r
.
tmax
[
1
]
r
.
tmax
[
end
]
r
.
tmin
Base
.
print
(
io
::
IO
,
r
::
Ranges
{
TMINMAX_SPAN
})
=
@printf
io
"Tmin span in [%d,%d], tmax span in [%d,%d]"
r
.
tmin
[
1
]
r
.
tmin
[
end
]
r
.
tmax
[
1
]
r
.
tmax
[
end
]
Base
.
print
(
io
::
IO
,
r
::
Ranges
{
ALL
})
=
@printf
io
"All fit in [%d,%d]"
r
.
tmin
r
.
tmax
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment