1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
/*
* stream.h
*
* Stream tools
*
* Copyright © 2013-2020 Deutsches Elektronen-Synchrotron DESY,
* a research centre of the Helmholtz Association.
*
* Authors:
* 2010-2020 Thomas White <taw@physics.org>
* 2014 Valerio Mariani
* 2011 Andrew Aquila
*
* This file is part of CrystFEL.
*
* CrystFEL is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* CrystFEL is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with CrystFEL. If not, see <http://www.gnu.org/licenses/>.
*
*/
#ifndef STREAM_H
#define STREAM_H
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
/**
* \file stream.h
* Stream functions (for indexing results)
*/
struct image;
#include "datatemplate.h"
#include "cell.h"
#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
*/
typedef struct _stream Stream;
/**
* A bitfield of things that can be read from or written to a stream.
* Use this (and \ref read_chunk) to read the stream faster if you
* don't need the entire contents of the stream.
*
* Using either of \p STREAM_REFLECTIONS or * \p STREAM_UNITCELL
* implies \p STREAM_CRYSTALS.
**/
typedef enum {
/** Read the unit cell */
STREAM_UNITCELL = 1,
/** Read the integrated reflections */
STREAM_REFLECTIONS = 2,
/** Read the peak search results */
STREAM_PEAKS = 4,
/** Read the general information about crystals */
STREAM_CRYSTALS = 8,
} StreamFlags;
#ifdef __cplusplus
extern "C" {
#endif
/* Opening/closing streams */
extern Stream *stream_open_for_read(const char *filename);
extern Stream *stream_open_for_write(const char *filename);
extern Stream *stream_open_fd_for_write(int fd);
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,
const 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 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 */
extern int stream_scan_chunks(Stream *st);
extern int stream_select_chunk(Stream *st, int chunk_number);
/* Read/write chunks */
extern struct image *stream_read_chunk(Stream *st,
const DataTemplate *dtempl,
StreamFlags srf);
extern int stream_write_chunk(Stream *st, struct image *image,
const DataTemplate *dtempl,
StreamFlags srf);
#ifdef __cplusplus
}
#endif
#endif /* STREAM_H */
|