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
7df59f9b
Commit
7df59f9b
authored
Feb 02, 2010
by
Thomas White
Browse files
Tidy up options
This also simplifies quite a lot of code
parent
9fed7cd7
Changes
5
Hide whitespace changes
Inline
Side-by-side
src/dirax.c
View file @
7df59f9b
...
...
@@ -309,34 +309,10 @@ static gboolean dirax_readable(GIOChannel *dirax, GIOCondition condition,
}
void
run_dirax
(
struct
image
*
image
,
int
no_index
)
void
run_dirax
(
struct
image
*
image
)
{
unsigned
int
opts
;
int
saved_stderr
;
FILE
*
fh
;
int
i
;
fh
=
fopen
(
"xfel.drx"
,
"w"
);
if
(
!
fh
)
{
ERROR
(
"Couldn't open temporary file xfel.drx
\n
"
);
return
;
}
fprintf
(
fh
,
"%f
\n
"
,
0
.
5
);
/* Lie about the wavelength. */
for
(
i
=
0
;
i
<
image_feature_count
(
image
->
features
);
i
++
)
{
struct
imagefeature
*
f
;
f
=
image_get_feature
(
image
->
features
,
i
);
if
(
f
==
NULL
)
continue
;
fprintf
(
fh
,
"%10f %10f %10f %8f
\n
"
,
f
->
rx
/
1e10
,
f
->
ry
/
1e10
,
f
->
rz
/
1e10
,
1
.
0
);
}
fclose
(
fh
);
if
(
no_index
)
return
;
saved_stderr
=
dup
(
STDERR_FILENO
);
image
->
dirax_pid
=
forkpty
(
&
image
->
dirax_pty
,
NULL
,
NULL
,
NULL
);
...
...
src/dirax.h
View file @
7df59f9b
...
...
@@ -18,7 +18,7 @@
#endif
extern
void
run_dirax
(
struct
image
*
image
,
int
no_index
);
extern
void
run_dirax
(
struct
image
*
image
);
#endif
/* DIRAX_H */
src/index.c
View file @
7df59f9b
...
...
@@ -72,10 +72,41 @@ int map_position(struct image *image, double x, double y,
}
void
index_pattern
(
struct
image
*
image
,
int
no_index
,
int
use_dirax
)
static
void
write_drx
(
struct
image
*
image
)
{
FILE
*
fh
;
int
i
;
STATUS
(
"Writing xfel.drx file. Remember that it uses units of "
"reciprocal Angstroms!
\n
"
);
fh
=
fopen
(
"xfel.drx"
,
"w"
);
if
(
!
fh
)
{
ERROR
(
"Couldn't open temporary file xfel.drx
\n
"
);
return
;
}
fprintf
(
fh
,
"%f
\n
"
,
0
.
5
);
/* Lie about the wavelength. */
for
(
i
=
0
;
i
<
image_feature_count
(
image
->
features
);
i
++
)
{
struct
imagefeature
*
f
;
f
=
image_get_feature
(
image
->
features
,
i
);
if
(
f
==
NULL
)
continue
;
fprintf
(
fh
,
"%10f %10f %10f %8f
\n
"
,
f
->
rx
/
1e10
,
f
->
ry
/
1e10
,
f
->
rz
/
1e10
,
1
.
0
);
}
fclose
(
fh
);
}
void
index_pattern
(
struct
image
*
image
,
IndexingMethod
indm
)
{
int
i
;
UnitCell
*
new_cell
=
NULL
;
/* Map positions to 3D */
for
(
i
=
0
;
i
<
image_feature_count
(
image
->
features
);
i
++
)
{
...
...
@@ -95,17 +126,16 @@ void index_pattern(struct image *image, int no_index, int use_dirax)
}
}
if
(
use_dirax
)
{
UnitCell
*
new_cell
;
run_dirax
(
image
,
no_index
);
write_drx
(
image
);
new_cell
=
match_cell
(
image
->
indexed_cell
,
image
->
molecule
->
cell
);
/* Index (or not) as appropriate */
if
(
indm
==
INDEXING_NONE
)
return
;
if
(
indm
==
INDEXING_DIRAX
)
run_dirax
(
image
);
if
(
new_cell
!=
NULL
)
image
->
indexed_cell
=
new_cell
;
return
;
new_cell
=
match_cell
(
image
->
indexed_cell
,
image
->
molecule
->
cell
);
if
(
new_cell
!=
NULL
)
{
free
(
image
->
indexed_cell
);
image
->
indexed_cell
=
new_cell
;
}
}
src/index.h
View file @
7df59f9b
...
...
@@ -18,8 +18,14 @@
#endif
extern
void
index_pattern
(
struct
image
*
image
,
int
no_index
,
int
use_dirax
);
typedef
enum
{
INDEXING_NONE
,
INDEXING_DIRAX
,
INDEXING_MATCH
}
IndexingMethod
;
extern
void
index_pattern
(
struct
image
*
image
,
IndexingMethod
indm
);
/* x,y in pixels relative to central beam */
extern
int
map_position
(
struct
image
*
image
,
double
x
,
double
y
,
double
*
rx
,
double
*
ry
,
double
*
rz
);
...
...
src/indexamajig.c
View file @
7df59f9b
...
...
@@ -43,10 +43,12 @@ static void show_help(const char *s)
"
\n
"
" -i, --input=<filename> Specify file containing list of images to process.
\n
"
" '-' means stdin, which is the default.
\n
"
" --no-index Do everything else (including fine peak search and
\n
"
" writing 'xfel.drx' if DirAx is being used), but
\n
"
" don't actually index.
\n
"
" --dirax Use DirAx for indexing.
\n
"
" --indexing=<method> Use 'method' for indexing. Choose from:
\n
"
" none : no indexing
\n
"
" dirax : invoke DirAx
\n
"
" --write-drx Write 'xfel.drx' for visualisation of reciprocal
\n
"
" space. Implied by any indexing method other than"
" 'none'.
\n
"
" --dump-peaks Write the results of the peak search to stdout.
\n
"
" --near-bragg Output a list of reflection intensities to stdout.
\n
"
" --simulate Simulate the diffraction pattern using the indexed
\n
"
...
...
@@ -65,9 +67,11 @@ int main(int argc, char *argv[])
int
n_hits
;
int
config_noindex
=
0
;
int
config_dumpfound
=
0
;
int
config_dirax
=
0
;
int
config_nearbragg
=
0
;
int
config_writedrx
=
0
;
int
config_simulate
=
0
;
IndexingMethod
indm
;
char
*
indm_str
=
NULL
;
/* Long options */
const
struct
option
longopts
[]
=
{
...
...
@@ -76,7 +80,8 @@ int main(int argc, char *argv[])
{
"no-index"
,
0
,
&
config_noindex
,
1
},
{
"dump-peaks"
,
0
,
&
config_dumpfound
,
1
},
{
"near-bragg"
,
0
,
&
config_nearbragg
,
1
},
{
"dirax"
,
0
,
&
config_dirax
,
1
},
{
"write-drx"
,
0
,
&
config_writedrx
,
1
},
{
"indexing"
,
1
,
NULL
,
'z'
},
{
"simulate"
,
0
,
&
config_simulate
,
1
},
{
0
,
0
,
NULL
,
0
}
};
...
...
@@ -95,6 +100,11 @@ int main(int argc, char *argv[])
break
;
}
case
'z'
:
{
indm_str
=
strdup
(
optarg
);
break
;
}
case
0
:
{
break
;
}
...
...
@@ -120,6 +130,20 @@ int main(int argc, char *argv[])
return
1
;
}
if
(
indm_str
==
NULL
)
{
STATUS
(
"You didn't specify an indexing method, so I won't"
" try to index anything. If that isn't what you
\n
"
" wanted, re-run with --indexing=<method>.
\n
"
);
indm
=
INDEXING_NONE
;
}
else
if
(
strcmp
(
indm_str
,
"none"
)
==
0
)
{
indm
=
INDEXING_NONE
;
}
else
if
(
strcmp
(
indm_str
,
"dirax"
)
==
0
)
{
indm
=
INDEXING_DIRAX
;
}
else
{
ERROR
(
"Unrecognised indexing method '%s'
\n
"
,
indm_str
);
return
1
;
}
n_images
=
0
;
n_hits
=
0
;
do
{
...
...
@@ -160,13 +184,22 @@ int main(int argc, char *argv[])
if
(
config_dumpfound
)
dump_peaks
(
&
image
);
/* Not indexing? Then there's nothing left to do. */
if
(
config_noindex
)
goto
done
;
/* Not indexing nor writing xfel.drx?
* Then there's nothing left to do. */
if
(
(
!
config_writedrx
)
&&
(
indm
==
INDEXING_NONE
)
)
{
goto
done
;
}
/* Calculate orientation matrix (by magic) */
index_pattern
(
&
image
,
config_noindex
,
config_dirax
);
if
(
config_writedrx
||
(
indm
!=
INDEXING_NONE
)
)
{
index_pattern
(
&
image
,
indm
);
}
/* No cell at this point? Then we're done. */
if
(
image
.
indexed_cell
==
NULL
)
goto
done
;
/* Simulation or intensity measurements both require
* Ewald sphere vectors */
if
(
config_nearbragg
||
config_simulate
)
{
/* Simulate a diffraction pattern */
...
...
@@ -184,11 +217,12 @@ int main(int argc, char *argv[])
}
/* Measure intensities if requested */
if
(
config_nearbragg
)
{
/* Read h,k,l,I */
output_intensities
(
&
image
,
image
.
indexed_cell
);
}
/* Simulate pattern if requested */
if
(
config_simulate
)
{
image
.
data
=
NULL
;
...
...
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