Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
V
VLKB SEDModS
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
ViaLactea
VLKB SEDModS
Commits
550770df
Commit
550770df
authored
4 months ago
by
Marco Molinaro
Browse files
Options
Downloads
Patches
Plain Diff
adds py-script which was un-commited
parent
6f30f5bc
No related branches found
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
wsgi-scripts/idl_to_py_lib.py
+165
-0
165 additions, 0 deletions
wsgi-scripts/idl_to_py_lib.py
with
165 additions
and
0 deletions
wsgi-scripts/idl_to_py_lib.py
0 → 100644
+
165
−
0
View file @
550770df
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Fri Dec 17 14:32:22 2021
@author: smordini
useful functions for sed fitting
"""
import
numpy
as
np
from
scipy
import
interpolate
import
math
def
match
(
list_a
,
list_b
):
matched_valuse
=
list
(
set
(
list_a
)
&
set
(
list_b
))
pos_a
=
[
list_a
.
index
(
val
)
for
val
in
matched_valuse
]
pos_b
=
[
list_b
.
index
(
val
)
for
val
in
matched_valuse
]
return
(
pos_a
,
pos_b
)
def
tostring
(
in_str
):
if
type
(
in_str
)
!=
str
:
in_str
=
str
(
in_str
)
out_str
=
in_str
.
strip
()
return
out_str
def
pad0_num
(
num
):
if
type
(
num
)
==
str
:
try
:
float
(
num
)
except
:
print
(
'
The string must be a number. Retry
'
)
if
type
(
num
)
!=
str
:
num
=
str
(
num
)
q
=
num
.
find
(
'
.
'
)
if
q
<=
len
(
num
)
-
2
and
q
!=-
1
:
num0
=
num
+
'
0
'
else
:
num0
=
num
return
(
num0
)
def
remove_char
(
in_str
,
ch
):
if
type
(
in_str
)
!=
str
:
in_str
=
str
(
in_str
)
q
=
in_str
.
find
(
ch
)
if
q
==-
1
:
out_str
=
in_str
else
:
out_str
=
in_str
.
replace
(
ch
,
''
)
return
out_str
def
planck
(
wavelength
,
temp
):
try
:
len
(
wavelength
)
except
:
wavelength
=
[
wavelength
]
try
:
len
(
temp
)
except
:
pass
else
:
print
(
'
Only one temperature allowed, not list
'
)
return
if
len
(
wavelength
)
<
1
:
print
(
'
Enter at least one wavelength in Angstrom.
'
)
return
wave
=
[
wl
*
1e-8
for
wl
in
wavelength
]
c1
=
3.7417749e-5
#2*pi*h*c*c with constatns in cgs units (TO BE CHECKED?)
c2
=
1.4387687
# h*c/k
value
=
[
c2
/
wl
/
temp
for
wl
in
wave
]
# print(value)
bbflux
=
[]
test_precision
=
math
.
log
(
np
.
finfo
(
float
).
max
)
# print(test_precision)
for
val
,
wl
in
zip
(
value
,
wave
):
if
val
<
test_precision
:
flux
=
c1
/
(
wl
**
5
*
(
math
.
expm1
(
val
)))
# print(flux)
bbflux
.
append
(
flux
*
1e-8
)
else
:
bbflux
.
append
(
0
)
if
len
(
bbflux
)
==
1
:
bbflux
=
bbflux
[
0
]
return
bbflux
def
lbol
(
wavelength
,
flux
,
dist
):
#function lbol,w,f,d
# interpolation between data points is done in logarithmic space to allow
# straight lines (the SED is like that) in the log-log plot. interpolation
# on a finer grid is done and then data are transformed back in linear space
# where the trapezoidal interpolation is then done
# w is lambda in um
# f is flux jy
# d is dist in parsec
#convert flux to W/cm2/um
fw
=
[
1.e-15
*
f
*
.
2997
/
(
w
**
2.
)
for
f
,
w
in
zip
(
flux
,
wavelength
)]
lw
=
[
np
.
log10
(
w
)
for
w
in
wavelength
]
lfw
=
[
np
.
log10
(
f
)
for
f
in
fw
]
#1000 points resampling
lw1
=
(
np
.
arange
(
1000
)
*
((
max
(
lw
)
-
min
(
lw
))
/
1000.
))
+
min
(
lw
)
interpfunc
=
interpolate
.
interp1d
(
lw
,
lfw
,
kind
=
'
linear
'
)
lfw1
=
interpfunc
(
lw1
)
w1
=
[
10
**
l
for
l
in
lw1
]
fw1
=
[
10
**
l
for
l
in
lfw1
]
jy
=
[
f
/
1.e-15
/
.
3
*
(
w
**
2.
)
for
f
,
w
in
zip
(
fw1
,
w1
)]
# ;integrate over whole range
fint
=
0.
# for i=0,n_elements(w1)-2 do fint=fint+((fw1(i)+fw1(i+1))*(w1(i+1)-w1(i))/2.):
for
i
in
range
(
len
(
w1
)
-
2
):
fint
=
fint
+
((
fw1
[
i
]
+
fw1
[(
i
+
1
)])
*
(
w1
[(
i
+
1
)]
-
w1
[(
i
)])
/
2.
)
# ;fint=int_tabulated(w,fw,/double,/sort)
# ; integrate longword of 350um
# ;qc0=where(w ge 350.)
# ;fc0=int_tabulated(w(qc0),fw(qc0))
# ; compute lbol
# l=fint*4.*math.pi*d*3.e18/3.8e26*d*3.e18 ;lsol
lum
=
fint
*
4
*
np
.
pi
*
dist
*
3.086e18
/
3.827e26
*
dist
*
3.086e18
#lsol
# ;c0ratio=fc0/fint
# ;print,'Lsubmm/Lbol = ',c0ratio
return
lum
def
wheretomulti
(
array
,
indices
):
s
=
array
.
shape
# print(s)
NCol
=
s
[
1
]
Col
=
indices
%
NCol
if
len
(
s
)
==
2
:
Row
=
indices
/
NCol
return
(
Col
,
Row
)
elif
len
(
s
)
==
3
:
NRow
=
s
[
2
]
Row
=
(
indices
/
NCol
)
%
NRow
Frame
=
indices
/
(
NRow
*
NCol
)
return
(
Col
,
Row
,
Frame
)
else
:
Col
=
0
Row
=
0
Frame
=
0
print
(
'
WhereToMulti called with bad input. Array not a vector or matrix.
'
)
return
(
Col
,
Row
,
Frame
)
return
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment