Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Oleksii Turkot
CrystFEL
Commits
de215b2a
Commit
de215b2a
authored
Apr 13, 2011
by
Thomas White
Browse files
Add partial_sim, for generating test streams by geometrical methods
parent
36b43633
Changes
4
Hide whitespace changes
Inline
Side-by-side
.gitignore
View file @
de215b2a
...
...
@@ -19,6 +19,7 @@ src/partialator
src/cubeit
src/check_hkl
src/sum_stack
src/partial_sim
src/.dirstamp
*~
doc/reference/*
Makefile.am
View file @
de215b2a
...
...
@@ -5,7 +5,7 @@ ACLOCAL_AMFLAGS = -I m4
bin_PROGRAMS
=
src/pattern_sim src/process_hkl src/get_hkl src/indexamajig
\
src/compare_hkl src/powder_plot src/render_hkl
\
src/calibrate_detector src/partialator
\
src/check_hkl src/sum_stack
src/check_hkl src/sum_stack
src/partial_sim
noinst_PROGRAMS
=
tests/list_check tests/integration_check
...
...
@@ -30,6 +30,12 @@ AM_CFLAGS = -Wall
AM_CPPFLAGS
=
-DDATADIR
=
\"
"
$(datadir)
"
\"
-I
$(top_builddir)
/lib
-I
$(top_srcdir)
/lib
LDADD
=
$(top_builddir)
/lib/libgnu.a @IGNORE_UNUSED_LIBRARIES_CFLAGS@
src_partial_sim_SOURCES
=
src/partial_sim.c src/cell.c src/detector.c
\
src/beam-parameters.c src/thread-pool.c src/utils.c
\
src/reflist-utils.c src/reflist.c src/symmetry.c
\
src/hdf5-file.c src/image.c src/geometry.c
\
src/peaks.c src/stream.c
src_pattern_sim_SOURCES
=
src/pattern_sim.c src/diffraction.c src/utils.c
\
src/image.c src/cell.c src/hdf5-file.c
\
src/detector.c src/peaks.c
\
...
...
@@ -102,7 +108,7 @@ src_calibrate_detector_SOURCES = src/calibrate_detector.c src/utils.c \
src/hdf5-file.c src/image.c src/thread-pool.c
\
src/detector.c src/stream.c src/cell.c
\
src/reflist-utils.c src/reflist.c src/symmetry.c
\
src/peaks.c
src/peaks.c
src_partialator_SOURCES
=
src/partialator.c src/cell.c src/hdf5-file.c
\
src/utils.c src/detector.c src/peaks.c src/image.c
\
...
...
Makefile.in
View file @
de215b2a
...
...
@@ -40,7 +40,8 @@ bin_PROGRAMS = src/pattern_sim$(EXEEXT) src/process_hkl$(EXEEXT) \
src/compare_hkl
$(EXEEXT)
src/powder_plot
$(EXEEXT)
\
src/render_hkl
$(EXEEXT)
src/calibrate_detector
$(EXEEXT)
\
src/partialator
$(EXEEXT)
src/check_hkl
$(EXEEXT)
\
src/sum_stack
$(EXEEXT)
$(am__EXEEXT_1)
$(am__EXEEXT_2)
src/sum_stack
$(EXEEXT)
src/partial_sim
$(EXEEXT)
\
$(am__EXEEXT_1)
$(am__EXEEXT_2)
noinst_PROGRAMS
=
tests/list_check
$(EXEEXT)
\
tests/integration_check
$(EXEEXT)
$(am__EXEEXT_3)
TESTS
=
tests/list_check
$(EXEEXT)
tests/first_merge_check
\
...
...
@@ -166,6 +167,17 @@ am_src_indexamajig_OBJECTS = src/indexamajig.$(OBJEXT) \
src_indexamajig_OBJECTS
=
$(am_src_indexamajig_OBJECTS)
src_indexamajig_LDADD
=
$(LDADD)
src_indexamajig_DEPENDENCIES
=
$(top_builddir)
/lib/libgnu.a
am_src_partial_sim_OBJECTS
=
src/partial_sim.
$(OBJEXT)
\
src/cell.
$(OBJEXT)
src/detector.
$(OBJEXT)
\
src/beam-parameters.
$(OBJEXT)
src/thread-pool.
$(OBJEXT)
\
src/utils.
$(OBJEXT)
src/reflist-utils.
$(OBJEXT)
\
src/reflist.
$(OBJEXT)
src/symmetry.
$(OBJEXT)
\
src/hdf5-file.
$(OBJEXT)
src/image.
$(OBJEXT)
\
src/geometry.
$(OBJEXT)
src/peaks.
$(OBJEXT)
\
src/stream.
$(OBJEXT)
src_partial_sim_OBJECTS
=
$(am_src_partial_sim_OBJECTS)
src_partial_sim_LDADD
=
$(LDADD)
src_partial_sim_DEPENDENCIES
=
$(top_builddir)
/lib/libgnu.a
am_src_partialator_OBJECTS
=
src/partialator.
$(OBJEXT)
\
src/cell.
$(OBJEXT)
src/hdf5-file.
$(OBJEXT)
src/utils.
$(OBJEXT)
\
src/detector.
$(OBJEXT)
src/peaks.
$(OBJEXT)
src/image.
$(OBJEXT)
\
...
...
@@ -283,19 +295,20 @@ am__v_GEN_0 = @echo " GEN " $@;
SOURCES
=
$(src_calibrate_detector_SOURCES)
$(src_check_hkl_SOURCES)
\
$(src_compare_hkl_SOURCES)
$(src_cubeit_SOURCES)
\
$(src_get_hkl_SOURCES)
$(src_hdfsee_SOURCES)
\
$(src_indexamajig_SOURCES)
$(src_partialator_SOURCES)
\
$(src_pattern_sim_SOURCES)
$(src_powder_plot_SOURCES)
\
$(src_process_hkl_SOURCES)
$(src_render_hkl_SOURCES)
\
$(src_sum_stack_SOURCES)
$(tests_gpu_sim_check_SOURCES)
\
$(src_indexamajig_SOURCES)
$(src_partial_sim_SOURCES)
\
$(src_partialator_SOURCES)
$(src_pattern_sim_SOURCES)
\
$(src_powder_plot_SOURCES)
$(src_process_hkl_SOURCES)
\
$(src_render_hkl_SOURCES)
$(src_sum_stack_SOURCES)
\
$(tests_gpu_sim_check_SOURCES)
\
$(tests_integration_check_SOURCES)
$(tests_list_check_SOURCES)
DIST_SOURCES
=
$(src_calibrate_detector_SOURCES)
\
$(src_check_hkl_SOURCES)
$(src_compare_hkl_SOURCES)
\
$(am__src_cubeit_SOURCES_DIST)
$(src_get_hkl_SOURCES)
\
$(am__src_hdfsee_SOURCES_DIST)
\
$(am__src_indexamajig_SOURCES_DIST)
$(src_partial
ator
_SOURCES)
\
$(am__src_pattern_sim_SOURCES_DIST)
$(src_powder_plot_SOURCES)
\
$(src_p
rocess_hkl
_SOURCES)
$(src_
render
_hkl_SOURCES)
\
$(src_sum_stack_SOURCES)
\
$(am__src_indexamajig_SOURCES_DIST)
$(src_partial
_sim
_SOURCES)
\
$(src_partialator_SOURCES)
$(am__src_pattern_sim_SOURCES_DIST)
\
$(src_p
owder_plot
_SOURCES)
$(src_
process
_hkl_SOURCES)
\
$(src_render_hkl_SOURCES)
$(src_sum_stack_SOURCES)
\
$(am__tests_gpu_sim_check_SOURCES_DIST)
\
$(tests_integration_check_SOURCES)
$(tests_list_check_SOURCES)
RECURSIVE_TARGETS
=
all-recursive check-recursive dvi-recursive
\
...
...
@@ -608,6 +621,12 @@ ACLOCAL_AMFLAGS = -I m4
AM_CFLAGS
=
-Wall
AM_CPPFLAGS
=
-DDATADIR
=
\"
"
$(datadir)
"
\"
-I
$(top_builddir)
/lib
-I
$(top_srcdir)
/lib
LDADD
=
$(top_builddir)
/lib/libgnu.a @IGNORE_UNUSED_LIBRARIES_CFLAGS@
src_partial_sim_SOURCES
=
src/partial_sim.c src/cell.c src/detector.c
\
src/beam-parameters.c src/thread-pool.c src/utils.c
\
src/reflist-utils.c src/reflist.c src/symmetry.c
\
src/hdf5-file.c src/image.c src/geometry.c
\
src/peaks.c src/stream.c
src_pattern_sim_SOURCES
=
src/pattern_sim.c src/diffraction.c
\
src/utils.c src/image.c src/cell.c src/hdf5-file.c
\
src/detector.c src/peaks.c src/reflist-utils.c
\
...
...
@@ -664,7 +683,7 @@ src_calibrate_detector_SOURCES = src/calibrate_detector.c src/utils.c \
src/hdf5-file.c src/image.c src/thread-pool.c
\
src/detector.c src/stream.c src/cell.c
\
src/reflist-utils.c src/reflist.c src/symmetry.c
\
src/peaks.c
src/peaks.c
src_partialator_SOURCES
=
src/partialator.c src/cell.c src/hdf5-file.c
\
src/utils.c src/detector.c src/peaks.c src/image.c
\
...
...
@@ -889,6 +908,11 @@ src/cl-utils.$(OBJEXT): src/$(am__dirstamp) \
src/indexamajig$(EXEEXT)
:
$(src_indexamajig_OBJECTS) $(src_indexamajig_DEPENDENCIES) src/$(am__dirstamp)
@
rm
-f
src/indexamajig
$(EXEEXT)
$(AM_V_CCLD)$(LINK)
$(src_indexamajig_OBJECTS)
$(src_indexamajig_LDADD)
$(LIBS)
src/partial_sim.$(OBJEXT)
:
src/$(am__dirstamp)
\
src/$(DEPDIR)/$(am__dirstamp)
src/partial_sim$(EXEEXT)
:
$(src_partial_sim_OBJECTS) $(src_partial_sim_DEPENDENCIES) src/$(am__dirstamp)
@
rm
-f
src/partial_sim
$(EXEEXT)
$(AM_V_CCLD)$(LINK)
$(src_partial_sim_OBJECTS)
$(src_partial_sim_LDADD)
$(LIBS)
src/partialator.$(OBJEXT)
:
src/$(am__dirstamp)
\
src/$(DEPDIR)/$(am__dirstamp)
src/post-refinement.$(OBJEXT)
:
src/$(am__dirstamp)
\
...
...
@@ -971,6 +995,7 @@ mostlyclean-compile:
-
rm
-f
src/index.
$(OBJEXT)
-
rm
-f
src/indexamajig.
$(OBJEXT)
-
rm
-f
src/mosflm.
$(OBJEXT)
-
rm
-f
src/partial_sim.
$(OBJEXT)
-
rm
-f
src/partialator.
$(OBJEXT)
-
rm
-f
src/pattern_sim.
$(OBJEXT)
-
rm
-f
src/peaks.
$(OBJEXT)
...
...
@@ -1017,6 +1042,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@
@am__quote@src/$(DEPDIR)/index.Po@am__quote@
@AMDEP_TRUE@@am__include@
@am__quote@src/$(DEPDIR)/indexamajig.Po@am__quote@
@AMDEP_TRUE@@am__include@
@am__quote@src/$(DEPDIR)/mosflm.Po@am__quote@
@AMDEP_TRUE@@am__include@
@am__quote@src/$(DEPDIR)/partial_sim.Po@am__quote@
@AMDEP_TRUE@@am__include@
@am__quote@src/$(DEPDIR)/partialator.Po@am__quote@
@AMDEP_TRUE@@am__include@
@am__quote@src/$(DEPDIR)/pattern_sim.Po@am__quote@
@AMDEP_TRUE@@am__include@
@am__quote@src/$(DEPDIR)/peaks.Po@am__quote@
...
...
src/partial_sim.c
0 → 100644
View file @
de215b2a
/*
* partial_sim.c
*
* Generate partials for testing scaling
*
* (c) 2006-2011 Thomas White <taw@physics.org>
*
* Part of CrystFEL - crystallography with a FEL
*
*/
#ifdef HAVE_CONFIG_H
#include
<config.h>
#endif
#include
<stdarg.h>
#include
<stdlib.h>
#include
<stdio.h>
#include
<string.h>
#include
<unistd.h>
#include
<getopt.h>
#include
<assert.h>
#include
"utils.h"
#include
"reflist-utils.h"
#include
"symmetry.h"
#include
"beam-parameters.h"
#include
"detector.h"
#include
"geometry.h"
#include
"stream.h"
/* For each reflection in "partial", fill in what the intensity would be
* according to "full" */
static
void
calculate_partials
(
RefList
*
partial
,
RefList
*
full
,
const
char
*
sym
)
{
Reflection
*
refl
;
RefListIterator
*
iter
;
for
(
refl
=
first_refl
(
partial
,
&
iter
);
refl
!=
NULL
;
refl
=
next_refl
(
refl
,
iter
)
)
{
signed
int
h
,
k
,
l
;
Reflection
*
rfull
;
double
p
;
double
Ip
;
get_indices
(
refl
,
&
h
,
&
k
,
&
l
);
get_asymm
(
h
,
k
,
l
,
&
h
,
&
k
,
&
l
,
sym
);
p
=
get_partiality
(
refl
);
rfull
=
find_refl
(
full
,
h
,
k
,
l
);
if
(
rfull
==
NULL
)
{
set_redundancy
(
refl
,
0
);
}
else
{
Ip
=
p
*
get_intensity
(
rfull
);
set_int
(
refl
,
Ip
);
}
}
}
static
void
show_help
(
const
char
*
s
)
{
printf
(
"Syntax: %s [options]
\n\n
"
,
s
);
printf
(
"Generate a stream containing partials from a reflection list.
\n
"
"
\n
"
" -h, --help Display this help message.
\n
"
"
\n
"
"You need to provide the following basic options:
\n
"
" -i, --input=<file> Read reflections from <file>.
\n
"
" -o, --output=<file> Write partials in stream format to <file>.
\n
"
" -g. --geometry=<file> Get detector geometry from file.
\n
"
" -b, --beam=<file> Get beam parameters from file
\n
"
" -p, --pdb=<file> PDB file from which to get the unit cell.
\n
"
"
\n
"
" -y, --symmetry=<sym> Symmetry of the input reflection list.
\n
"
);
}
int
main
(
int
argc
,
char
*
argv
[])
{
int
c
;
char
*
input_file
=
NULL
;
char
*
output_file
=
NULL
;
char
*
beamfile
=
NULL
;
char
*
geomfile
=
NULL
;
char
*
cellfile
=
NULL
;
struct
detector
*
det
=
NULL
;
struct
beam_params
*
beam
=
NULL
;
RefList
*
full
;
char
*
sym
=
NULL
;
UnitCell
*
cell
=
NULL
;
UnitCell
*
rcell
;
struct
quaternion
orientation
;
struct
image
image
;
FILE
*
ofh
;
/* Long options */
const
struct
option
longopts
[]
=
{
{
"help"
,
0
,
NULL
,
'h'
},
{
"output"
,
1
,
NULL
,
'o'
},
{
"input"
,
1
,
NULL
,
'i'
},
{
"beam"
,
1
,
NULL
,
'b'
},
{
"pdb"
,
1
,
NULL
,
'p'
},
{
"geometry"
,
1
,
NULL
,
'g'
},
{
"symmetry"
,
1
,
NULL
,
'y'
},
{
0
,
0
,
NULL
,
0
}
};
/* Short options */
while
((
c
=
getopt_long
(
argc
,
argv
,
"hi:o:b:p:g:y:"
,
longopts
,
NULL
))
!=
-
1
)
{
switch
(
c
)
{
case
'h'
:
show_help
(
argv
[
0
]);
return
0
;
case
'o'
:
output_file
=
strdup
(
optarg
);
break
;
case
'i'
:
input_file
=
strdup
(
optarg
);
break
;
case
'b'
:
beamfile
=
strdup
(
optarg
);
break
;
case
'p'
:
cellfile
=
strdup
(
optarg
);
break
;
case
'g'
:
geomfile
=
strdup
(
optarg
);
break
;
case
'y'
:
sym
=
strdup
(
optarg
);
break
;
case
0
:
break
;
default
:
return
1
;
}
}
/* Load beam */
if
(
beamfile
==
NULL
)
{
ERROR
(
"You need to provide a beam parameters file.
\n
"
);
return
1
;
}
beam
=
get_beam_parameters
(
beamfile
);
if
(
beam
==
NULL
)
{
ERROR
(
"Failed to load beam parameters from '%s'
\n
"
,
beamfile
);
return
1
;
}
free
(
beamfile
);
/* Load cell */
if
(
cellfile
==
NULL
)
{
ERROR
(
"You need to give a PDB file with the unit cell.
\n
"
);
return
1
;
}
cell
=
load_cell_from_pdb
(
cellfile
);
if
(
cell
==
NULL
)
{
ERROR
(
"Failed to get cell from '%s'
\n
"
,
cellfile
);
return
1
;
}
free
(
cellfile
);
/* Load geometry */
if
(
geomfile
==
NULL
)
{
ERROR
(
"You need to give a geometry file.
\n
"
);
return
1
;
}
det
=
get_detector_geometry
(
geomfile
);
if
(
cell
==
NULL
)
{
ERROR
(
"Failed to read geometry from '%s'
\n
"
,
geomfile
);
return
1
;
}
free
(
geomfile
);
/* Load (full) reflections */
if
(
input_file
==
NULL
)
{
ERROR
(
"You must provide a reflection list.
\n
"
);
return
1
;
}
full
=
read_reflections
(
input_file
);
if
(
full
==
NULL
)
{
ERROR
(
"Failed to read reflections from '%s'
\n
"
,
input_file
);
return
1
;
}
free
(
input_file
);
if
(
check_list_symmetry
(
full
,
sym
)
)
{
ERROR
(
"The input reflection list does not appear to"
" have symmetry %s
\n
"
,
sym
);
return
1
;
}
if
(
output_file
==
NULL
)
{
ERROR
(
"You must pgive a filename for the output.
\n
"
);
return
1
;
}
ofh
=
fopen
(
output_file
,
"w"
);
if
(
ofh
==
NULL
)
{
ERROR
(
"Couldn't open output file '%s'
\n
"
,
output_file
);
return
1
;
}
free
(
output_file
);
write_stream_header
(
ofh
,
argc
,
argv
);
/* Set up a random orientation */
orientation
=
random_quaternion
();
image
.
indexed_cell
=
cell_rotate
(
cell
,
orientation
);
image
.
det
=
det
;
image
.
width
=
det
->
max_fs
;
image
.
height
=
det
->
max_ss
;
image
.
lambda
=
ph_en_to_lambda
(
eV_to_J
(
beam
->
photon_energy
));
image
.
div
=
beam
->
divergence
;
image
.
bw
=
beam
->
bandwidth
;
image
.
profile_radius
=
0.005e9
;
image
.
i0_available
=
0
;
image
.
filename
=
"(simulated 1)"
;
image
.
reflections
=
find_intersections
(
&
image
,
image
.
indexed_cell
,
0
);
calculate_partials
(
image
.
reflections
,
full
,
sym
);
write_chunk
(
ofh
,
&
image
,
STREAM_INTEGRATED
);
reflist_free
(
image
.
reflections
);
/* Rotate the cell by a tiny amount */
rcell
=
rotate_cell
(
image
.
indexed_cell
,
deg2rad
(
0
.
2
),
deg2rad
(
0
.
0
),
deg2rad
(
0
.
0
));
cell_free
(
image
.
indexed_cell
);
image
.
indexed_cell
=
rcell
;
image
.
filename
=
"(simulated 2)"
;
/* Write another chunk */
image
.
reflections
=
find_intersections
(
&
image
,
image
.
indexed_cell
,
0
);
calculate_partials
(
image
.
reflections
,
full
,
sym
);
write_chunk
(
ofh
,
&
image
,
STREAM_INTEGRATED
);
reflist_free
(
image
.
reflections
);
fclose
(
ofh
);
cell_free
(
cell
);
free_detector_geometry
(
det
);
free
(
beam
);
free
(
sym
);
reflist_free
(
full
);
return
0
;
}
Write
Preview
Supports
Markdown
0%
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!
Cancel
Please
register
or
sign in
to comment