aboutsummaryrefslogtreecommitdiff
path: root/libcrystfel/src/stream.h
diff options
context:
space:
mode:
Diffstat (limited to 'libcrystfel/src/stream.h')
-rw-r--r--libcrystfel/src/stream.h139
1 files changed, 64 insertions, 75 deletions
diff --git a/libcrystfel/src/stream.h b/libcrystfel/src/stream.h
index f3e4d7e8..115d9918 100644
--- a/libcrystfel/src/stream.h
+++ b/libcrystfel/src/stream.h
@@ -3,11 +3,11 @@
*
* Stream tools
*
- * Copyright © 2013-2020 Deutsches Elektronen-Synchrotron DESY,
+ * Copyright © 2013-2021 Deutsches Elektronen-Synchrotron DESY,
* a research centre of the Helmholtz Association.
*
* Authors:
- * 2010-2019 Thomas White <taw@physics.org>
+ * 2010-2021 Thomas White <taw@physics.org>
* 2014 Valerio Mariani
* 2011 Andrew Aquila
*
@@ -31,34 +31,28 @@
#ifndef STREAM_H
#define STREAM_H
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
/**
* \file stream.h
* Stream functions (for indexing results)
*/
struct image;
-struct hdfile;
-struct event;
-struct imagefile;
+
+#include "datatemplate.h"
#include "cell.h"
-#define GEOM_START_MARKER "----- Begin geometry file -----"
-#define GEOM_END_MARKER "----- End geometry file -----"
-#define CELL_START_MARKER "----- Begin unit cell -----"
-#define CELL_END_MARKER "----- End unit cell -----"
-#define CHUNK_START_MARKER "----- Begin chunk -----"
-#define CHUNK_END_MARKER "----- End chunk -----"
-#define PEAK_LIST_START_MARKER "Peaks from peak search"
-#define PEAK_LIST_END_MARKER "End of peak list"
-#define CRYSTAL_START_MARKER "--- Begin crystal"
-#define CRYSTAL_END_MARKER "--- End crystal"
-#define REFLECTION_START_MARKER "Reflections measured after indexing"
-/* REFLECTION_END_MARKER is over in reflist-utils.h because it is also
- * used to terminate a standalone list of reflections */
+#define STREAM_GEOM_START_MARKER "----- Begin geometry file -----"
+#define STREAM_GEOM_END_MARKER "----- End geometry file -----"
+#define STREAM_CELL_START_MARKER "----- Begin unit cell -----"
+#define STREAM_CELL_END_MARKER "----- End unit cell -----"
+#define STREAM_CHUNK_START_MARKER "----- Begin chunk -----"
+#define STREAM_CHUNK_END_MARKER "----- End chunk -----"
+#define STREAM_PEAK_LIST_START_MARKER "Peaks from peak search"
+#define STREAM_PEAK_LIST_END_MARKER "End of peak list"
+#define STREAM_CRYSTAL_START_MARKER "--- Begin crystal"
+#define STREAM_CRYSTAL_END_MARKER "--- End crystal"
+#define STREAM_REFLECTION_START_MARKER "Reflections measured after indexing"
+#define STREAM_REFLECTION_END_MARKER "End of reflections"
/**
* An opaque structure representing a stream being read or written
@@ -66,77 +60,72 @@ struct imagefile;
typedef struct _stream Stream;
/**
- * A bitfield of things that can be read from a stream. Use this (and
- * \ref read_chunk_2) to read the stream faster if you don't need the entire
- * contents of the stream.
+ * A bitfield of things that can be read from or written to a stream.
+ * Use this together with stream_{read,write}_chunk to read/write the
+ * stream faster if you don't need all the information.
*
- * Using either or both of \p STREAM_READ_REFLECTIONS and \p STREAM_READ_UNITCELL
- * implies \p STREAM_READ_CRYSTALS.
+ * General information about crystals (including unit cell parameters)
+ * is always read and written.
**/
typedef enum {
- /** Read the unit cell */
- STREAM_READ_UNITCELL = 1,
-
/** Read the integrated reflections */
- STREAM_READ_REFLECTIONS = 2,
+ STREAM_REFLECTIONS = 2,
/** Read the peak search results */
- STREAM_READ_PEAKS = 4,
-
- /** Read the general information about crystals */
- STREAM_READ_CRYSTALS = 8,
+ STREAM_PEAKS = 4,
-} StreamReadFlags;
+ /** Reconstruct the detgeom structure,
+ * and create (blank) data/mask arrays.
+ * (NB this is (currently) a slow operation) */
+ STREAM_DATA_DETGEOM = 8,
-struct stuff_from_stream
-{
- char **fields;
- int n_fields;
-};
+} StreamFlags;
#ifdef __cplusplus
extern "C" {
#endif
-extern Stream *open_stream_for_read(const char *filename);
-extern Stream *open_stream_for_write(const char *filename);
-extern Stream *open_stream_for_write_2(const char *filename,
- const char* geom_filename, int argc,
- char *argv[]);
-extern Stream *open_stream_for_write_3(const char *filename,
- const char* geom_filename, UnitCell *cell,
- int argc, char *argv[]);
-extern Stream *open_stream_for_write_4(const char *filename,
- const char *geom_filename, UnitCell *cell,
- int argc, char *argv[], const char *indm_str);
-extern Stream *open_stream_fd_for_write(int fd);
-extern int get_stream_fd(Stream *st);
-extern void close_stream(Stream *st);
-
-extern void free_stuff_from_stream(struct stuff_from_stream *sfs);
-
-extern int read_chunk(Stream *st, struct image *image);
-extern int read_chunk_2(Stream *st, struct image *image,
- StreamReadFlags srf);
+/* Opening/closing streams */
+extern Stream *stream_open_for_read(const char *filename);
+extern Stream *stream_open_for_write(const char *filename,
+ const DataTemplate *dtempl);
+extern Stream *stream_open_fd_for_write(int fd,
+ const DataTemplate *dtempl);
+extern void stream_close(Stream *st);
+
+/* Writing things to stream header */
+extern void stream_write_geometry_file(Stream *st,
+ const char *geom_filename);
+extern void stream_write_target_cell(Stream *st,
+ UnitCell *cell);
+extern void stream_write_commandline_args(Stream *st,
+ int argc, char *argv[]);
+extern void stream_write_indexing_methods(Stream *st,
+ const char *indm_str);
+
+/* Metadata */
extern int stream_has_old_indexers(Stream *st);
-
-extern int write_chunk(Stream *st, struct image *image, struct imagefile *imfile,
- int include_peaks, int include_reflections,
- struct event *ev);
-
-extern int write_chunk_2(Stream *st, struct image *image,
- struct imagefile *imfile,
- int include_peaks, int include_reflections,
- struct event *ev);
-
-extern void write_command(Stream *st, int argc, char *argv[]);
-extern void write_geometry_file(Stream *st, const char *geom_filename);
-extern int rewind_stream(Stream *st);
-extern int is_stream(const char *filename);
extern char *stream_audit_info(Stream *st);
extern char *stream_geometry_file(Stream *st);
+/* Low-level stuff used for indexamajig sandbox */
+extern int stream_get_fd(Stream *st);
+extern int stream_rewind(Stream *st);
+
+/* Random access */
+typedef struct _streamindex StreamIndex;
+extern StreamIndex *stream_make_index(const char *filename);
+extern int stream_select_chunk(Stream *st, StreamIndex *index,
+ const char *filename,
+ const char *ev);
+extern void stream_index_free(StreamIndex *index);
+
+/* Read/write chunks */
+extern struct image *stream_read_chunk(Stream *st, StreamFlags srf);
+extern int stream_write_chunk(Stream *st, const struct image *image,
+ StreamFlags srf);
+
#ifdef __cplusplus
}
#endif