Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Thomas Kluyver
Pycrystfel
Commits
5af39fb4
Commit
5af39fb4
authored
Jan 12, 2021
by
Thomas Kluyver
Browse files
Changes for API in CrystFEL master branch
parent
8db4c7ee
Changes
2
Show whitespace changes
Inline
Side-by-side
pycrystfel/bindings.pyx
View file @
5af39fb4
...
...
@@ -16,65 +16,69 @@ def progress_bar(val, total, text):
def
inspect_geom_file
(
path
):
cdef
crystfel
.
detector
*
det
cdef
crystfel
.
beam_params
beam
det
=
crystfel
.
get_detector_geometry
(
os
.
fsencode
(
path
),
&
beam
)
print
(
"n_panels:"
,
det
.
n_panels
)
print
(
"panel names:"
,
[
det
.
panels
[
i
].
name
for
i
in
range
(
det
.
n_panels
)])
print
(
"photon energy:"
,
beam
.
photon_energy
)
crystfel
.
free_detector_geometry
(
det
)
cdef
:
crystfel
.
DataTemplate
*
dt
crystfel
.
image
*
img
dt
=
crystfel
.
data_template_new_from_file
(
os
.
fsencode
(
path
))
img
=
crystfel
.
image_create_for_simulation
(
dt
)
crystfel
.
data_template_free
(
dt
)
print
(
"n_panels:"
,
img
.
detgeom
.
n_panels
)
print
(
"panel names:"
,
[
img
.
detgeom
.
panels
[
i
].
name
for
i
in
range
(
img
.
detgeom
.
n_panels
)
])
crystfel
.
image_free
(
img
)
cdef
featurelist_to_dataframe
(
crystfel
.
ImageFeatureList
*
flist
):
cdef
:
int
i
,
nfeat
=
crystfel
.
image_feature_count
(
flist
)
crystfel
.
imagefeature
*
feat
cnp
.
ndarray
arr
double
[:]
ss
,
fs
,
rx
,
ry
,
rz
,
it
double
[:]
ss
,
fs
,
it
arr
=
np
.
zeros
((
6
,
nfeat
),
dtype
=
np
.
double
)
ss
,
fs
,
rx
,
ry
,
rz
,
it
=
arr
arr
=
np
.
zeros
((
3
,
nfeat
),
dtype
=
np
.
double
)
ss
,
fs
,
it
=
arr
with
cython
.
boundscheck
(
False
),
cython
.
wraparound
(
False
):
for
i
in
range
(
nfeat
):
feat
=
crystfel
.
image_get_feature
(
flist
,
i
)
ss
[
i
]
=
feat
.
ss
fs
[
i
]
=
feat
.
fs
rx
[
i
]
=
feat
.
rx
ry
[
i
]
=
feat
.
ry
rz
[
i
]
=
feat
.
rz
it
[
i
]
=
feat
.
intensity
return
pd
.
DataFrame
(
arr
.
T
,
columns
=
[
'ss'
,
'fs'
,
'rx'
,
'ry'
,
'rz'
,
'intensity'
]
arr
.
T
,
columns
=
[
'ss'
,
'fs'
,
'intensity'
]
)
def
find_peaks_single_panel
(
cnp
.
ndarray
[
cnp
.
npy_float
,
ndim
=
2
]
data
,
str
geom_file
):
cdef
:
crystfel
.
DataTemplate
*
dt
crystfel
.
beam_params
beam
crystfel
.
image
image
crystfel
.
image
*
image
image
.
dp
[
0
]
=
<
float
*>
data
.
data
image
.
bad
=
NULL
image
.
det
=
crystfel
.
get_detector_geometry
(
os
.
fsencode
(
geom_file
),
&
beam
)
print
(
f
"Loaded geometry with
{
image
.
det
.
n_panels
}
panels"
)
dt
=
crystfel
.
data_template_new_from_file
(
os
.
fsencode
(
geom_file
))
image
=
crystfel
.
image_create_for_simulation
(
dt
)
crystfel
.
data_template_free
(
dt
)
image
.
features
=
NULL
free
(
image
.
dp
[
0
])
image
.
dp
[
0
]
=
<
float
*>
data
.
data
print
(
f
"Loaded geometry with
{
image
.
detgeom
.
n_panels
}
panels"
)
crystfel
.
search_peaks_peakfinder8
(
&
image
,
max_n_peaks
=
200
,
threshold
=
20
,
min_snr
=
3
,
min_pix_count
=
2
,
image
,
max_n_peaks
=
200
,
threshold
=
20
,
min_snr
=
3
,
min_pix_count
=
2
,
max_pix_count
=
200
,
local_bg_radius
=
3
,
min_res
=
0
,
max_res
=
1200
,
use_saturated
=
True
,
)
crystfel
.
free_detector_geometry
(
image
.
det
)
df
=
featurelist_to_dataframe
(
image
.
features
)
return
featurelist_to_dataframe
(
image
.
features
)
crystfel
.
image_free
(
image
)
# Pointer wrapper machinery based on Cython docs:
# https://cython.readthedocs.io/en/latest/src/userguide/extension_types.html#instantiation-from-existing-c-c-pointers
cdef
class
Detector
:
cdef
crystfel
.
detector
*
_ptr
cdef
crystfel
.
image
*
_img
cdef
bint
ptr_owner
def
__cinit__
(
self
):
...
...
@@ -82,27 +86,29 @@ cdef class Detector:
def
__dealloc__
(
self
):
# De-allocate if not null and flag is set
if
self
.
_
ptr
is
not
NULL
and
self
.
ptr_owner
is
True
:
free
(
self
.
_
ptr
)
self
.
_
ptr
=
NULL
if
self
.
_
img
is
not
NULL
and
self
.
ptr_owner
is
True
:
crystfel
.
image_
free
(
self
.
_
img
)
self
.
_
img
=
NULL
@
staticmethod
cdef
Detector
from_ptr
(
crystfel
.
detector
*
_ptr
,
bint
owner
=
False
):
cdef
Detector
from_
image_
ptr
(
crystfel
.
image
*
_img
,
bint
owner
=
False
):
# Call to __new__ bypasses __init__ constructor
cdef
Detector
det
=
Detector
.
__new__
(
Detector
)
det
.
_
ptr
=
_
ptr
det
.
_
img
=
_
img
det
.
ptr_owner
=
owner
return
det
@
classmethod
def
from_filename
(
cls
,
path
):
return
Detector
.
from_ptr
(
crystfel
.
get_detector_geometry
(
os
.
fsencode
(
path
),
NULL
),
owner
=
True
)
cdef
crystfel
.
DataTemplate
*
dt
=
\
crystfel
.
data_template_new_from_file
(
os
.
fsencode
(
path
))
cdef
crystfel
.
image
*
img
=
crystfel
.
image_create_for_simulation
(
dt
)
crystfel
.
data_template_free
(
dt
)
return
Detector
.
from_image_ptr
(
img
)
@
property
def
n_panels
(
self
):
return
self
.
_
ptr
.
n_panels
if
self
.
_
ptr
is
not
NULL
else
0
return
self
.
_
img
.
detgeom
.
n_panels
if
self
.
_
img
is
not
NULL
else
0
def
panel_names
(
self
):
return
[
self
.
_
ptr
.
panels
[
i
].
name
.
decode
(
'utf-8'
)
for
i
in
range
(
self
.
n_panels
)]
return
[
self
.
_
img
.
detgeom
.
panels
[
i
].
name
.
decode
(
'utf-8'
)
for
i
in
range
(
self
.
n_panels
)]
pycrystfel/crystfel.pxd
View file @
5af39fb4
...
...
@@ -30,20 +30,27 @@ cdef extern from "crystfel/index.h":
INDEXING_USE_LATTICE_TYPE
,
INDEXING_USE_CELL_PARAMETERS
cdef
extern
from
"crystfel/detector.h"
:
cdef
struct
panel
:
char
name
[
1024
]
double
coffset
double
clen
cdef
extern
from
"crystfel/detgeom.h"
:
cdef
struct
detgeom_panel
:
char
*
name
double
cnx
double
cny
double
cnz
# ...
cdef
struct
det
ector
:
panel
*
panels
cdef
struct
det
geom
:
detgeom_
panel
*
panels
int
n_panels
# ...
detector
*
get_detector_geometry
(
const
char
*
filename
,
beam_params
*
beam
)
void
free_detector_geometry
(
detector
*
det
)
void
detgeom_free
(
detgeom
*
det
)
cdef
extern
from
"crystfel/datatemplate.h"
:
ctypedef
struct
DataTemplate
:
pass
# Opaque struct, used through functions
DataTemplate
*
data_template_new_from_file
(
const
char
*
filename
)
DataTemplate
*
data_template_new_from_string
(
const
char
*
string_in
)
void
data_template_free
(
DataTemplate
*
dt
)
cdef
extern
from
"crystfel/spectrum.h"
:
ctypedef
struct
Spectrum
:
...
...
@@ -57,29 +64,25 @@ cdef extern from "crystfel/image.h":
double
bandwidth
cdef
struct
imagefeature
:
# description of a peak
image
*
parent
panel
*
p
int
pn
# Panel number
double
intensity
const
char
*
name
double
fs
# Fast-scan & slow-scan coordinates, pixels from panel corner
double
ss
double
rx
# Reciprocal space coordinates (m^-1)
double
ry
double
rz
ctypedef
struct
ImageFeatureList
:
pass
# Opaque struct, used through functions
ImageFeatureList
*
image_feature_list_new
()
void
image_feature_list_free
(
ImageFeatureList
*
flist
)
void
image_feature_list_free
(
ImageFeatureList
*
flist
)
void
image_add_feature
(
ImageFeatureList
*
flist
,
double
x
,
double
y
,
panel
*
p
,
image
*
parent
,
double
intensity
,
const
char
*
name
ImageFeatureList
*
flist
,
double
x
,
double
y
,
int
pn
,
image
*
parent
,
double
intensity
,
const
char
*
name
)
imagefeature
*
image_get_feature
(
ImageFeatureList
*
flist
,
int
idx
)
void
image_remove_feature
(
ImageFeatureList
*
flist
,
int
idx
)
imagefeature
*
image_feature_closest
(
ImageFeatureList
*
flist
,
double
fs
,
double
ss
,
panel
*
p
,
double
*
d
,
int
*
idx
ImageFeatureList
*
flist
,
double
fs
,
double
ss
,
int
pn
,
double
*
d
,
int
*
idx
)
int
image_feature_count
(
ImageFeatureList
*
flist
)
...
...
@@ -94,18 +97,22 @@ cdef extern from "crystfel/image.h":
int
n_crystals
IndexingMethod
indexed_by
int
n_indexing_tries
detector
*
det
beam_params
*
beam
detgeom
*
detgeom
char
*
filename
char
*
ev
# Event ID
double
avg_clen
int
id
int
serial
Spectrum
*
spectrum
double
lambda_
"lambda"
double
div
double
bw
double
peak_resolution
ImageFeatureList
*
features
char
*
filename
double
lambda_
"lambda"
# Wavelength of the incident radiation, in metres
double
div
# Convergence angle of the incident ration, in radians (full angle)
double
bw
# Full-width half-maximum bandwidth as a fraction, applied to wavelength
double
peak_resolution
# Resolution estimate based on peaks
ImageFeatureList
*
features
image
*
image_new
()
void
image_free
(
image
*
image
)
image
*
image_create_for_simulation
(
const
DataTemplate
*
dtempl
)
cdef
extern
from
"crystfel/peaks.h"
:
int
search_peaks_peakfinder8
(
...
...
Write
Preview
Supports
Markdown
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